aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorterminaldweller <thabogre@gmail.com>2021-05-14 18:14:50 +0000
committerterminaldweller <thabogre@gmail.com>2021-05-14 18:14:50 +0000
commit6e528248414e330c9e25e81596ab47b8b8a5b701 (patch)
treee1aa41a7f3198eeac187e6177ec7d4a33db229d3
downloadscripts-master.tar.gz
scripts-master.zip
first commitmaster
-rw-r--r--.Xresources49
-rw-r--r--.config/bat/config27
-rw-r--r--.config/i3/config194
-rw-r--r--.config/joplin/keymap.json4
-rw-r--r--.config/pgcli/config197
-rw-r--r--.config/qutebrowser/bookmarks/urls0
-rw-r--r--.config/qutebrowser/config.py101
-rw-r--r--.config/qutebrowser/keys.conf693
l---------.config/qutebrowser/nord-qutebrowser.py1
-rw-r--r--.config/qutebrowser/quickmarks0
-rw-r--r--.config/qutebrowser/qutebrowser.conf1572
-rw-r--r--.config/ranger/rc.conf725
-rw-r--r--.config/tmuxinator/sample.yml59
-rw-r--r--.ctags59
-rw-r--r--.gitconfig6
-rw-r--r--.gitignore1
-rw-r--r--.gotty302
-rw-r--r--.i3blocks.conf331
-rw-r--r--.iredisrc67
-rw-r--r--.kshrc87
-rw-r--r--.mongorc.js17
-rw-r--r--.muttrc253
-rw-r--r--.newsboat/config42
-rw-r--r--.newsboat/urls56
-rw-r--r--.psqlrc29
-rwxr-xr-x.rainbow_config.json43
-rw-r--r--.tmux.conf146
-rw-r--r--.trash15
-rw-r--r--.tvrc5
-rw-r--r--.vimrc1308
-rw-r--r--.vimshrc10
-rw-r--r--.w3m/build.sh5
-rwxr-xr-x.w3m/cgi-bin/fzf_surfraw.cgi6
-rwxr-xr-x.w3m/cgi-bin/fzf_surfraw_tmux.cgi41
-rwxr-xr-x.w3m/cgi-bin/goto_clipboard.cgi25
-rwxr-xr-x.w3m/cgi-bin/goto_clipboard_primary.cgi28
-rwxr-xr-x.w3m/cgi-bin/goto_tmux_clipboard.cgi28
-rwxr-xr-x.w3m/cgi-bin/restore_session.cgi49
-rwxr-xr-x.w3m/cgi-bin/restore_tab.cgi10
-rw-r--r--.w3m/config155
-rw-r--r--.w3m/keymap132
-rw-r--r--.ycm_extra_config.py99
-rw-r--r--.zshrc392
-rw-r--r--CV.tex173
-rw-r--r--CV_Abridged.tex135
-rw-r--r--LICENSE674
-rw-r--r--README.md5
-rwxr-xr-x_emacs.el121
-rw-r--r--baseline/.minttyrc29
-rw-r--r--baseline/.tmux.conf62
-rw-r--r--baseline/.vimrc309
-rw-r--r--baseline/.zshrc62
-rwxr-xr-xbaseline/startup.sh46
-rwxr-xr-xbaseline/ufw-allow-mosh31
-rwxr-xr-xbin/astdump44
l---------bin/bruiser1
l---------bin/cgrep1
-rwxr-xr-xbin/colo136
-rwxr-xr-xbin/color6
-rwxr-xr-xbin/colormake40
l---------bin/delf1
-rwxr-xr-xbin/disasm50
l---------bin/dwasm1
-rwxr-xr-xbin/extractor67
-rwxr-xr-xbin/fzf_surfraw6
-rwxr-xr-xbin/fzf_surfraw_tmux6
-rwxr-xr-xbin/goto_clipboard.cgi4
l---------bin/hived1
-rw-r--r--bin/index.html256
l---------bin/kaminokumo1
-rwxr-xr-xbin/leb128117
-rwxr-xr-xbin/llvm-wasm10
-rwxr-xr-xbin/lorem-ipsum9
-rwxr-xr-xbin/manga_dmenu.sh5
l---------bin/mushi1
-rwxr-xr-xbin/postit.sh4
l---------bin/ramdump1
-rwxr-xr-xbin/run_with_dmenu.sh7
-rwxr-xr-xbin/sniff105
-rw-r--r--c/debug.dbg15
-rw-r--r--c/devi_extra.h33
-rw-r--r--c/header.hpp4
-rw-r--r--c/main.c12
-rw-r--r--c/main.cpp6
-rw-r--r--cfam.vimrc10
-rwxr-xr-xchecknodeversion.sh18
-rw-r--r--compiler-explorer/ceconfig.json14
-rw-r--r--compiler-explorer/index.js21
-rw-r--r--compiler-explorer/main.js45
-rw-r--r--compiler-explorer/package.json14
-rw-r--r--crontab1
-rw-r--r--cygwin/.tmux.conf59
-rw-r--r--cygwin/.zshrc89
-rwxr-xr-xcygwin/ChangeCapsToControl.regbin0 -> 386 bytes
-rwxr-xr-xcygwin/_emacs.el124
-rwxr-xr-xcygwin/alac.bat2
-rw-r--r--cygwin/alacritty.yml747
-rw-r--r--cygwin/conemu.xml775
-rw-r--r--cygwin/devi.zsh-theme264
-rw-r--r--cygwin/sumatrapdf/SumatraPDF-settings.txt67
-rwxr-xr-xcygwin/xserver.bat2
-rw-r--r--default.sh63
-rw-r--r--devi.zsh-theme299
-rw-r--r--df/colors.txt50
-rw-r--r--df/df-init6
-rw-r--r--df/init.txt150
-rw-r--r--df/world_gen.txt88
-rwxr-xr-xdocker/devdocs.bat2
-rwxr-xr-xdocker/mongo.sh3
-rwxr-xr-xdocker/postgres.sh4
-rwxr-xr-xdocker/searx.bat2
-rwxr-xr-xdocker/yacy.bat2
-rw-r--r--etc/fonts/local.conf39
-rw-r--r--fedpackages.txt573
-rwxr-xr-xfzfinit.sh3
-rwxr-xr-xgen_wg_config.sh45
-rw-r--r--header.hpp4
-rwxr-xr-xhived704
-rw-r--r--hived.desktop5
-rwxr-xr-xhivedup.sh4
-rwxr-xr-xhiveinit.py60
-rw-r--r--init.vim189
-rw-r--r--irssi/config449
-rwxr-xr-xirssi/irssi.sh21
-rw-r--r--irssi/solarized-powerline.theme419
-rw-r--r--irssi/startup11
-rwxr-xr-xkeymap.sh7
-rw-r--r--keyremap.ahk130
-rwxr-xr-xlemonbar.sh50
-rwxr-xr-xlesscolor.sh20
-rwxr-xr-xllvm-build.sh2
-rwxr-xr-xllvm-update.sh11
-rw-r--r--lynx.cfg3837
-rw-r--r--lynx.lss112
-rw-r--r--makefile102
-rw-r--r--makefilec233
-rw-r--r--makefilecpp234
-rwxr-xr-xmisc.sh7
-rwxr-xr-xmushi.py54
-rw-r--r--postit16
-rwxr-xr-xpygitty.py21
-rwxr-xr-xpython/deviutil.py229
-rwxr-xr-xpython/main.py52
-rw-r--r--qtbrowser/config.py100
-rw-r--r--rpi/configmap.yaml7
-rw-r--r--rpi/ntp/ntp.conf65
-rw-r--r--rpi/pihole-deployment.yaml65
-rw-r--r--rpi/squid-proxy-deployment.yaml56
-rw-r--r--rpi/squid/squid.conf7963
-rw-r--r--rpi/unbound-deployment.yaml35
-rw-r--r--snippets/cmain.c3
-rw-r--r--snippets/cppmain.cpp3
-rw-r--r--snippets/main.py45
-rw-r--r--snippets/shebang.sh1
-rwxr-xr-xtagger.sh60
-rwxr-xr-xtelebot.py126
-rw-r--r--tg.lua109
-rw-r--r--tmux/common.sh7
-rwxr-xr-xtmux/date.sh16
-rwxr-xr-xtmux/jdat.sh5
-rwxr-xr-xtmux/vcs_info.sh66
-rw-r--r--torrc255
-rwxr-xr-xvim/install.sh41
-rwxr-xr-xvimium-options.json42
-rwxr-xr-xvoice.sh3
-rw-r--r--zathurarc51
-rw-r--r--zshrc_stripped.sh114
167 files changed, 29768 insertions, 0 deletions
diff --git a/.Xresources b/.Xresources
new file mode 100644
index 0000000..3d52f5a
--- /dev/null
+++ b/.Xresources
@@ -0,0 +1,49 @@
+
+Xft.autohint: 0
+Xft.antialias: 1
+Xft.hinting: 1
+Xft.hintstyle: hintslight
+Xft.embolden: 1
+Xft.dpi: 96
+Xft.rgba: rgb
+Xft.lcdfilter: lcddefault
+Xft.embeddedbitmap: 1
+xterm*dpi: 96
+gnome-terminal*dpi: 96
+*.alpha: 1.0
+*.font: DejaVu Sans Mono for Powerline:pixelsize=11.3:antialias=true:autohint=true;
+xterm*scaleHeight: 1.01
+
+#define base00 #2E3431
+#define base01 #cc0000
+#define base02 #4E9A06
+#define base03 #C4A000
+#define base04 #3465A4
+#define base05 #75507B
+#define base06 #06989A
+#define base07 #D3D7CF
+#define base08 #555753
+#define base09 #EF2929
+#define base0A #8AE234
+#define base0B #FCE94F
+#define base0C #729FCF
+#define base0D #AD7FA8
+#define base0E #34E2E2
+#define base0F #EEEEEC
+
+*.color0: base00
+*.color1: base01
+*.color2: base02
+*.color3: base03
+*.color4: base04
+*.color5: base05
+*.color6: base06
+*.color7: base07
+*.color8: base08
+*.color9: base09
+*.color10: base0A
+*.color11: base0B
+*.color12: base0C
+*.color13: base0D
+*.color14: base0E
+*.color15: base0F
diff --git a/.config/bat/config b/.config/bat/config
new file mode 100644
index 0000000..e96057d
--- /dev/null
+++ b/.config/bat/config
@@ -0,0 +1,27 @@
+# This is `bat`s configuration file. Each line either contains a comment or
+# a command-line option that you want to pass to `bat` by default. You can
+# run `bat --help` to get a list of all possible configuration options.
+
+# Specify desired highlighting theme (e.g. "TwoDark"). Run `bat --list-themes`
+# for a list of all available themes
+--theme="Solarized (light)"
+
+# Enable this to use italic text on the terminal. This is not supported on all
+# terminal emulators (like tmux, by default):
+--italic-text=always
+
+# Uncomment the following line to disable automatic paging:
+#--paging=never
+
+# Uncomment the following line if you are using less version >= 551 and want to
+# enable mouse scrolling support in `bat` when running inside tmux. This might
+# disable text selection, unless you press shift.
+#--pager="less --RAW-CONTROL-CHARS --quit-if-one-screen --mouse"
+
+# Syntax mappings: map a certain filename pattern to a language.
+# Example 1: use the C++ syntax for .ino files
+# Example 2: Use ".gitignore"-style highlighting for ".ignore" files
+--map-syntax "*.ino:C++"
+--map-syntax ".ignore:Git Ignore"
+
+--style=auto
diff --git a/.config/i3/config b/.config/i3/config
new file mode 100644
index 0000000..7cb28b9
--- /dev/null
+++ b/.config/i3/config
@@ -0,0 +1,194 @@
+# This file has been auto-generated by i3-config-wizard(1).
+# It will not be overwritten, so edit it as you like.
+#
+# Should you change your keyboard layout some time, delete
+# this file and re-run i3-config-wizard(1).
+#
+
+# i3 config file (v4)
+#
+# Please see https://i3wm.org/docs/userguide.html for a complete reference!
+
+set $mod Mod4
+
+# Font for window titles. Will also be used by the bar unless a different font
+# is used in the bar {} block below.
+
+# This font is widely installed, provides lots of unicode glyphs, right-to-left
+# text rendering and scalability on retina/hidpi displays (thanks to pango).
+#font pango:DejaVu Sans Mono For Powerline Book 12
+font pango:DejaVu Sans Mono for Powerline 10
+
+# Before i3 v4.8, we used to recommend this one as the default:
+# font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
+# The font above is very space-efficient, that is, it looks good, sharp and
+# clear in small sizes. However, its unicode glyph coverage is limited, the old
+# X core fonts rendering does not support right-to-left and this being a bitmap
+# font, it doesn’t scale on retina/hidpi displays.
+
+# Use Mouse+$mod to drag floating windows to their wanted position
+floating_modifier $mod
+
+# start a terminal
+#bindsym $mod+Return exec gnome-terminal
+bindsym $mod+Return exec st -f "DejaVu Sans Mono for Powerline-11.3"
+
+# kill focused window
+bindsym $mod+Shift+q kill
+
+# start dmenu (a program launcher)
+bindsym $mod+d exec dmenu_run -nhb "dark slate gray" -nhf white -shb "forest green" -shf white -l 14
+#bindsym $mod+d exec dmenu_run -nb black -sb tomato -l 12
+# There also is the (new) i3-dmenu-desktop which only displays applications
+# shipping a .desktop file. It is a wrapper around dmenu, so you need that
+# installed.
+# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
+
+# run quick term command
+bindsym $mod+t exec --no-startup-id ~/scripts/bin/run_with_dmenu.sh
+bindsym $mod+m exec --no-startup-id ~/scripts/bin/manga_dmenu.sh
+bindsym $mod+p exec --no-startup-id ~/scripts/bin/postit.sh
+bindsym $mod+c exec clipmenu
+
+# change focus
+bindsym $mod+j focus left
+bindsym $mod+k focus down
+bindsym $mod+l focus up
+bindsym $mod+h focus right
+
+# alternatively, you can use the cursor keys:
+bindsym $mod+Left focus left
+bindsym $mod+Down focus down
+bindsym $mod+Up focus up
+bindsym $mod+Right focus right
+
+# move focused window
+bindsym $mod+Shift+j move left
+bindsym $mod+Shift+k move down
+bindsym $mod+Shift+l move up
+bindsym $mod+Shift+h move right
+
+# alternatively, you can use the cursor keys:
+bindsym $mod+Shift+Left move left
+bindsym $mod+Shift+Down move down
+bindsym $mod+Shift+Up move up
+bindsym $mod+Shift+Right move right
+
+# split in horizontal orientation
+bindsym $mod+- split h
+
+# split in vertical orientation
+bindsym $mod+| split v
+
+# enter fullscreen mode for the focused container
+bindsym $mod+f fullscreen toggle
+
+# change container layout (stacked, tabbed, toggle split)
+bindsym $mod+s layout stacking
+bindsym $mod+w layout tabbed
+bindsym $mod+e layout toggle split
+
+# toggle tiling / floating
+bindsym $mod+Shift+space floating toggle
+
+# change focus between tiling / floating windows
+bindsym $mod+space focus mode_toggle
+
+# focus the parent container
+bindsym $mod+a focus parent
+
+# focus the child container
+#bindsym $mod+d focus child
+
+# switch to workspace
+bindsym $mod+1 workspace 1
+bindsym $mod+2 workspace 2
+bindsym $mod+3 workspace 3
+bindsym $mod+4 workspace 4
+bindsym $mod+5 workspace 5
+bindsym $mod+6 workspace 6
+bindsym $mod+7 workspace 7
+bindsym $mod+8 workspace 8
+bindsym $mod+9 workspace 9
+bindsym $mod+0 workspace 10
+
+# move focused container to workspace
+bindsym $mod+Shift+1 move container to workspace 1
+bindsym $mod+Shift+2 move container to workspace 2
+bindsym $mod+Shift+3 move container to workspace 3
+bindsym $mod+Shift+4 move container to workspace 4
+bindsym $mod+Shift+5 move container to workspace 5
+bindsym $mod+Shift+6 move container to workspace 6
+bindsym $mod+Shift+7 move container to workspace 7
+bindsym $mod+Shift+8 move container to workspace 8
+bindsym $mod+Shift+9 move container to workspace 9
+bindsym $mod+Shift+0 move container to workspace 10
+
+# reload the configuration file
+bindsym $mod+Shift+c reload
+# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
+bindsym $mod+Shift+r restart
+# exit i3 (logs you out of your X session)
+bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
+
+# run on startup
+exec /home/bloodstalker/scripts/hived --demon &
+#exec telegram-cli -D -s /home/bloodstalker/scripts/tg.lua &
+exec setxkbmap -option ctrl:nocaps
+exec service start tor
+exec /home/bloodstalker/scripts/keymap.sh
+
+# removes the title bar
+new_window 1pixel
+
+# resize window (you can also use the mouse for that)
+mode "resize" {
+ # These bindings trigger as soon as you enter the resize mode
+
+ # Pressing left will shrink the window’s width.
+ # Pressing right will grow the window’s width.
+ # Pressing up will shrink the window’s height.
+ # Pressing down will grow the window’s height.
+ bindsym j resize shrink width 10 px or 10 ppt
+ bindsym k resize grow height 10 px or 10 ppt
+ bindsym l resize shrink height 10 px or 10 ppt
+ bindsym semicolon resize grow width 10 px or 10 ppt
+
+ # same bindings, but for the arrow keys
+ bindsym Left resize shrink width 10 px or 10 ppt
+ bindsym Down resize grow height 10 px or 10 ppt
+ bindsym Up resize shrink height 10 px or 10 ppt
+ bindsym Right resize grow width 10 px or 10 ppt
+
+ # back to normal: Enter or Escape
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
+
+bindsym $mod+r mode "resize"
+
+# Start i3bar to display a workspace bar (plus the system information i3status
+# finds out, if available)
+bar {
+#separator_symbol ""
+ status_command i3blocks -c ~/scripts/.i3blocks.conf
+ font pango:DejaVu Sans Mono Bold Nerd Font Complete Mono-7 7
+ colors {
+ separator #268bd2
+ background #002b36
+ statusline #839496
+ focused_workspace #0066cc #0099cc #ffffff
+ active_workspace #00cc99 #336633 #ffffff
+ inactive_workspace #002b36 #586e75 #002b36
+ urgent_workspace #d33682 #d33682 #fdf6e3
+ }
+}
+
+#client.focused #3399ff #6699cc #333366 #ffffff
+client.focused #66ccff #333366 #66ccff #66ccff
+client.focused_inactive #111111 #073642 #eee8d5 #6c71c4
+client.unfocused #006633 #073642 #93a1a1 #586e75
+client.urgent #00af00 #00af00 #fdf6e3 #dc322f
+
+#font xft:DejaVu Sans Mono for Powerline Book 12
+font pango:DejaVu Sans Mono for Powerline Book 10
diff --git a/.config/joplin/keymap.json b/.config/joplin/keymap.json
new file mode 100644
index 0000000..354a87b
--- /dev/null
+++ b/.config/joplin/keymap.json
@@ -0,0 +1,4 @@
+[
+ {"keys":["k"],"type":"function","command":"move_up"},
+ {"keys":["j"],"type":"function","command":"move_down"}
+]
diff --git a/.config/pgcli/config b/.config/pgcli/config
new file mode 100644
index 0000000..bc55d6f
--- /dev/null
+++ b/.config/pgcli/config
@@ -0,0 +1,197 @@
+# vi: ft=dosini
+[main]
+
+# Enables context sensitive auto-completion. If this is disabled, all
+# possible completions will be listed.
+smart_completion = True
+
+# Display the completions in several columns. (More completions will be
+# visible.)
+wider_completion_menu = True
+
+# Multi-line mode allows breaking up the sql statements into multiple lines. If
+# this is set to True, then the end of the statements must have a semi-colon.
+# If this is set to False then sql statements can't be split into multiple
+# lines. End of line (return) is considered as the end of the statement.
+multi_line = False
+
+# If multi_line_mode is set to "psql", in multi-line mode, [Enter] will execute
+# the current input if the input ends in a semicolon.
+# If multi_line_mode is set to "safe", in multi-line mode, [Enter] will always
+# insert a newline, and [Esc] [Enter] or [Alt]-[Enter] must be used to execute
+# a command.
+multi_line_mode = psql
+
+# Destructive warning mode will alert you before executing a sql statement
+# that may cause harm to the database such as "drop table", "drop database"
+# or "shutdown".
+destructive_warning = True
+
+# Enables expand mode, which is similar to `\x` in psql.
+expand = False
+
+# Enables auto expand mode, which is similar to `\x auto` in psql.
+auto_expand = True
+
+# If set to True, table suggestions will include a table alias
+generate_aliases = False
+
+# log_file location.
+# In Unix/Linux: ~/.config/pgcli/log
+# In Windows: %USERPROFILE%\AppData\Local\dbcli\pgcli\log
+# %USERPROFILE% is typically C:\Users\{username}
+log_file = default
+
+# keyword casing preference. Possible values: "lower", "upper", "auto"
+keyword_casing = auto
+
+# casing_file location.
+# In Unix/Linux: ~/.config/pgcli/casing
+# In Windows: %USERPROFILE%\AppData\Local\dbcli\pgcli\casing
+# %USERPROFILE% is typically C:\Users\{username}
+casing_file = default
+
+# If generate_casing_file is set to True and there is no file in the above
+# location, one will be generated based on usage in SQL/PLPGSQL functions.
+generate_casing_file = False
+
+# Casing of column headers based on the casing_file described above
+case_column_headers = True
+
+# history_file location.
+# In Unix/Linux: ~/.config/pgcli/history
+# In Windows: %USERPROFILE%\AppData\Local\dbcli\pgcli\history
+# %USERPROFILE% is typically C:\Users\{username}
+history_file = default
+
+# Default log level. Possible values: "CRITICAL", "ERROR", "WARNING", "INFO"
+# and "DEBUG". "NONE" disables logging.
+log_level = INFO
+
+# Order of columns when expanding * to column list
+# Possible values: "table_order" and "alphabetic"
+asterisk_column_order = table_order
+
+# Whether to qualify with table alias/name when suggesting columns
+# Possible values: "always", "never" and "if_more_than_one_table"
+qualify_columns = if_more_than_one_table
+
+# When no schema is entered, only suggest objects in search_path
+search_path_filter = False
+
+# Default pager.
+# By default 'PAGER' environment variable is used
+# pager = bat
+
+# Timing of sql statements and table rendering.
+timing = True
+
+# Show/hide the informational toolbar with function keymap at the footer.
+show_bottom_toolbar = True
+
+# Table format. Possible values: psql, plain, simple, grid, fancy_grid, pipe,
+# ascii, double, github, orgtbl, rst, mediawiki, html, latex, latex_booktabs,
+# textile, moinmoin, jira, vertical, tsv, csv.
+# Recommended: psql, fancy_grid and grid.
+table_format = psql
+
+# Syntax Style. Possible values: manni, igor, xcode, vim, autumn, vs, rrt,
+# native, perldoc, borland, tango, emacs, friendly, monokai, paraiso-dark,
+# colorful, murphy, bw, pastie, paraiso-light, trac, default, fruity
+syntax_style = default
+
+# Keybindings:
+# When Vi mode is enabled you can use modal editing features offered by Vi in the REPL.
+# When Vi mode is disabled emacs keybindings such as Ctrl-A for home and Ctrl-E
+# for end are available in the REPL.
+vi = True
+
+# Error handling
+# When one of multiple SQL statements causes an error, choose to either
+# continue executing the remaining statements, or stopping
+# Possible values "STOP" or "RESUME"
+on_error = STOP
+
+# Set threshold for row limit. Use 0 to disable limiting.
+row_limit = 1000
+
+# Skip intro on startup and goodbye on exit
+less_chatty = False
+
+# Postgres prompt
+# \t - Current date and time
+# \u - Username
+# \h - Short hostname of the server (up to first '.')
+# \H - Hostname of the server
+# \d - Database name
+# \p - Database port
+# \i - Postgres PID
+# \# - "@" sign if logged in as superuser, '>' in other case
+# \n - Newline
+# \dsn_alias - name of dsn alias if -D option is used (empty otherwise)
+# \x1b[...m - insert ANSI escape sequence
+# eg: prompt = '\x1b[35m\u@\x1b[32m\h:\x1b[36m\d>'
+#prompt = '\u@\h:\d> '
+prompt = '\x1b[38;5;31m\# \x1b[38;5;34m\u\x1b[0m@\x1b[38;5;39m\H\x1b[0m:\x1b[38;5;104m\p \x1b[38;5;37m\d \x1b[38;5;69m\t \x1b[38;5;31m\i \x1b[38;5;34m\dsn\n\x1b[38;5;28m>>>\x1b[0m'
+
+# Number of lines to reserve for the suggestion menu
+min_num_menu_lines = 4
+
+# Character used to left pad multi-line queries to match the prompt size.
+multiline_continuation_char = ''
+
+# The string used in place of a null value.
+null_string = '<null>'
+
+# manage pager on startup
+enable_pager = True
+
+# Use keyring to automatically save and load password in a secure manner
+keyring = False
+
+# Custom colors for the completion menu, toolbar, etc.
+[colors]
+completion-menu.completion.current = 'bg:#ffffff #000000'
+completion-menu.completion = 'bg:#008888 #ffffff'
+completion-menu.meta.completion.current = 'bg:#44aaaa #000000'
+completion-menu.meta.completion = 'bg:#448888 #ffffff'
+completion-menu.multi-column-meta = 'bg:#aaffff #000000'
+scrollbar.arrow = 'bg:#003333'
+scrollbar = 'bg:#00aaaa'
+selected = '#ffffff bg:#6666aa'
+search = '#ffffff bg:#4444aa'
+search.current = '#ffffff bg:#44aa44'
+bottom-toolbar = 'bg:#222222 #aaaaaa'
+bottom-toolbar.off = 'bg:#222222 #888888'
+bottom-toolbar.on = 'bg:#222222 #ffffff'
+search-toolbar = 'noinherit bold'
+search-toolbar.text = 'nobold'
+system-toolbar = 'noinherit bold'
+arg-toolbar = 'noinherit bold'
+arg-toolbar.text = 'nobold'
+bottom-toolbar.transaction.valid = 'bg:#222222 #00ff5f bold'
+bottom-toolbar.transaction.failed = 'bg:#222222 #ff005f bold'
+literal.string = '#ba2121'
+literal.number = '#666666'
+keyword = 'bold #008000'
+
+# style classes for colored table output
+output.header = "#00ff5f bold"
+output.odd-row = ""
+output.even-row = ""
+output.null = "#808080"
+
+# Named queries are queries you can execute by name.
+[named queries]
+dd = "select * from $1"
+
+# DSN to call by -D option
+[alias_dsn]
+# example_dsn = postgresql://[user[:password]@][netloc][:port][/dbname]
+
+# Format for number representation
+# for decimal "d" - 12345678, ",d" - 12,345,678
+# for float "g" - 123456.78, ",g" - 123,456.78
+[data_formats]
+decimal = ""
+float = ""
diff --git a/.config/qutebrowser/bookmarks/urls b/.config/qutebrowser/bookmarks/urls
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/.config/qutebrowser/bookmarks/urls
diff --git a/.config/qutebrowser/config.py b/.config/qutebrowser/config.py
new file mode 100644
index 0000000..b1be151
--- /dev/null
+++ b/.config/qutebrowser/config.py
@@ -0,0 +1,101 @@
+import os
+solarized = {
+ 'base03': '#002b36',
+ 'base02': '#073642',
+ 'base01': '#586e75',
+ 'base00': '#657b83',
+ 'base0': '#839496',
+ 'base1': '#93a1a1',
+ 'base2': '#eee8d5',
+ 'base3': '#fdf6e3',
+ 'yellow': '#b58900',
+ 'orange': '#cb4b16',
+ 'red': '#dc322f',
+ 'magenta': '#d33682',
+ 'violet': '#6c71c4',
+ 'blue': '#268bd2',
+ 'cyan': '#2aa198',
+ 'green': '#859900'
+}
+
+c.colors.completion.category.bg = solarized['base03']
+c.colors.completion.category.border.bottom = solarized['base03']
+c.colors.completion.category.border.top = solarized['base03']
+c.colors.completion.category.fg = solarized['base3']
+c.colors.completion.even.bg = solarized['base02']
+c.colors.completion.fg = solarized['base3']
+c.colors.completion.item.selected.bg = solarized['violet']
+c.colors.completion.item.selected.border.bottom = solarized['violet']
+c.colors.completion.item.selected.border.top = solarized['violet']
+c.colors.completion.item.selected.fg = solarized['base3']
+c.colors.completion.match.fg = solarized['base2']
+c.colors.completion.odd.bg = solarized['base02']
+c.colors.completion.scrollbar.bg = solarized['base0']
+c.colors.completion.scrollbar.fg = solarized['base2']
+c.colors.downloads.bar.bg = solarized['base03']
+c.colors.downloads.error.bg = solarized['red']
+c.colors.downloads.error.fg = solarized['base3']
+c.colors.downloads.start.bg = '#0000aa'
+c.colors.downloads.start.fg = solarized['base3']
+c.colors.downloads.stop.bg = '#00aa00'
+c.colors.downloads.stop.fg = solarized['base3']
+c.colors.downloads.system.bg = 'rgb'
+c.colors.downloads.system.fg = 'rgb'
+c.colors.hints.bg = solarized['violet']
+c.colors.hints.fg = solarized['base3']
+c.colors.hints.match.fg = solarized['base2']
+c.colors.keyhint.bg = 'rgba(0, 0, 0, 80%)'
+c.colors.keyhint.fg = solarized['base3']
+c.colors.keyhint.suffix.fg = solarized['yellow']
+c.colors.messages.error.bg = solarized['red']
+c.colors.messages.error.border = solarized['red']
+c.colors.messages.error.fg = solarized['base3']
+c.colors.messages.info.bg = solarized['base03']
+c.colors.messages.info.border = solarized['base03']
+c.colors.messages.info.fg = solarized['base3']
+c.colors.messages.warning.bg = solarized['orange']
+c.colors.messages.warning.border = solarized['orange']
+c.colors.messages.warning.fg = solarized['base3']
+c.colors.prompts.bg = solarized['base02']
+c.colors.prompts.border = '1px solid ' + solarized['base3']
+c.colors.prompts.fg = solarized['base3']
+c.colors.prompts.selected.bg = solarized['base01']
+c.colors.statusbar.caret.bg = solarized['blue']
+c.colors.statusbar.caret.fg = solarized['base3']
+c.colors.statusbar.caret.selection.bg = solarized['violet']
+c.colors.statusbar.caret.selection.fg = solarized['base3']
+c.colors.statusbar.command.bg = solarized['base03']
+c.colors.statusbar.command.fg = solarized['base3']
+c.colors.statusbar.command.private.bg = solarized['base01']
+c.colors.statusbar.command.private.fg = solarized['base3']
+c.colors.statusbar.insert.bg = solarized['green']
+c.colors.statusbar.insert.fg = solarized['base3']
+c.colors.statusbar.normal.bg = solarized['base03']
+c.colors.statusbar.normal.fg = solarized['base3']
+c.colors.statusbar.passthrough.bg = solarized['magenta']
+c.colors.statusbar.passthrough.fg = solarized['base3']
+c.colors.statusbar.private.bg = solarized['base01']
+c.colors.statusbar.private.fg = solarized['base3']
+c.colors.statusbar.progress.bg = solarized['base3']
+c.colors.statusbar.url.error.fg = solarized['red']
+c.colors.statusbar.url.fg = solarized['base3']
+c.colors.statusbar.url.hover.fg = solarized['base2']
+c.colors.statusbar.url.success.http.fg = solarized['base3']
+c.colors.statusbar.url.success.https.fg = solarized['base3']
+c.colors.statusbar.url.warn.fg = solarized['yellow']
+c.colors.tabs.bar.bg = '#555555'
+c.colors.tabs.even.bg = solarized['base01']
+c.colors.tabs.even.fg = solarized['base2']
+c.colors.tabs.indicator.error = solarized['red']
+c.colors.tabs.indicator.start = solarized['violet']
+c.colors.tabs.indicator.stop = solarized['orange']
+c.colors.tabs.odd.bg = solarized['base01']
+c.colors.tabs.odd.fg = solarized['base2']
+c.colors.tabs.selected.even.bg = solarized['base03']
+c.colors.tabs.selected.even.fg = solarized['base3']
+c.colors.tabs.selected.odd.bg = solarized['base03']
+c.colors.tabs.selected.odd.fg = solarized['base3']
+
+c.auto_save.session = True
+c.content.user_stylesheets = "/home/bloodstalker/solarized-everything-css/css/gruvbox/gruvbox-all-sites.css"
+config.source('nord-qutebrowser.py')
diff --git a/.config/qutebrowser/keys.conf b/.config/qutebrowser/keys.conf
new file mode 100644
index 0000000..21acc1c
--- /dev/null
+++ b/.config/qutebrowser/keys.conf
@@ -0,0 +1,693 @@
+# vim: ft=conf
+#
+# In this config file, qutebrowser's key bindings are configured.
+# The format looks like this:
+#
+# [keymode]
+#
+# command
+# keychain
+# keychain2
+# ...
+#
+# All blank lines and lines starting with '#' are ignored.
+# Inline-comments are not permitted.
+#
+# keymode is a comma separated list of modes in which the key binding should be
+# active. If keymode starts with !, the key binding is active in all modes
+# except the listed modes.
+#
+# For special keys (can't be part of a keychain), enclose them in `<`...`>`.
+# For modifiers, you can use either `-` or `+` as delimiters, and these names:
+#
+# * Control: `Control`, `Ctrl`
+# * Meta: `Meta`, `Windows`, `Mod4`
+# * Alt: `Alt`, `Mod1`
+# * Shift: `Shift`
+#
+# For simple keys (no `<>`-signs), a capital letter means the key is pressed
+# with Shift. For special keys (with `<>`-signs), you need to explicitly add
+# `Shift-` to match a key pressed with shift.
+#
+# Note that default keybindings are always bound, and need to be explicitly
+# unbound if you wish to remove them:
+#
+# <unbound>
+# keychain
+# keychain2
+# ...
+
+[!normal]
+
+leave-mode
+ <escape>
+ <ctrl-[>
+
+[normal]
+# Keybindings for normal mode.
+
+clear-keychain ;; search ;; fullscreen --leave
+ <escape>
+ <ctrl-[>
+
+set-cmd-text -s :open
+ o
+
+set-cmd-text :open {url:pretty}
+ go
+
+set-cmd-text -s :open -t
+ O
+
+set-cmd-text :open -t -i {url:pretty}
+ gO
+
+set-cmd-text -s :open -b
+ xo
+
+set-cmd-text :open -b -i {url:pretty}
+ xO
+
+set-cmd-text -s :open -w
+ wo
+
+set-cmd-text :open -w {url:pretty}
+ wO
+
+set-cmd-text /
+ /
+
+set-cmd-text ?
+ ?
+
+set-cmd-text :
+ :
+
+open -t
+ ga
+ <ctrl-t>
+
+open -w
+ <ctrl-n>
+
+tab-close
+ d
+ <ctrl-w>
+
+tab-close -o
+ D
+
+tab-only
+ co
+
+tab-focus
+ T
+
+tab-move
+ gm
+
+tab-move -
+ gl
+
+tab-move +
+ gr
+
+tab-next
+ J
+ <ctrl-pgdown>
+
+tab-prev
+ K
+ <ctrl-pgup>
+
+tab-clone
+ gC
+
+reload
+ r
+ <f5>
+
+reload -f
+ R
+ <ctrl-f5>
+
+back
+ H
+ <back>
+
+back -t
+ th
+
+back -w
+ wh
+
+forward
+ L
+ <forward>
+
+forward -t
+ tl
+
+forward -w
+ wl
+
+fullscreen
+ <f11>
+
+hint
+ f
+
+hint all tab
+ F
+
+hint all window
+ wf
+
+hint all tab-bg
+ ;b
+
+hint all tab-fg
+ ;f
+
+hint all hover
+ ;h
+
+hint images
+ ;i
+
+hint images tab
+ ;I
+
+hint links fill :open {hint-url}
+ ;o
+
+hint links fill :open -t -i {hint-url}
+ ;O
+
+hint links yank
+ ;y
+
+hint links yank-primary
+ ;Y
+
+hint --rapid links tab-bg
+ ;r
+
+hint --rapid links window
+ ;R
+
+hint links download
+ ;d
+
+hint inputs
+ ;t
+
+scroll left
+ h
+
+scroll down
+ j
+
+scroll up
+ k
+
+scroll right
+ l
+
+undo
+ u
+ <ctrl-shift-t>
+
+scroll-perc 0
+ gg
+
+scroll-perc
+ G
+
+search-next
+ n
+
+search-prev
+ N
+
+enter-mode insert
+ i
+
+enter-mode caret
+ v
+
+enter-mode set_mark
+ `
+
+enter-mode jump_mark
+ '
+
+yank
+ yy
+
+yank -s
+ yY
+
+yank title
+ yt
+
+yank title -s
+ yT
+
+yank domain
+ yd
+
+yank domain -s
+ yD
+
+yank pretty-url
+ yp
+
+yank pretty-url -s
+ yP
+
+open -- {clipboard}
+ pp
+
+open -- {primary}
+ pP
+
+open -t -- {clipboard}
+ Pp
+
+open -t -- {primary}
+ PP
+
+open -w -- {clipboard}
+ wp
+
+open -w -- {primary}
+ wP
+
+quickmark-save
+ m
+
+set-cmd-text -s :quickmark-load
+ b
+
+set-cmd-text -s :quickmark-load -t
+ B
+
+set-cmd-text -s :quickmark-load -w
+ wb
+
+bookmark-add
+ M
+
+set-cmd-text -s :bookmark-load
+ gb
+
+set-cmd-text -s :bookmark-load -t
+ gB
+
+set-cmd-text -s :bookmark-load -w
+ wB
+
+save
+ sf
+
+set-cmd-text -s :set
+ ss
+
+set-cmd-text -s :set -t
+ sl
+
+set-cmd-text -s :bind
+ sk
+
+zoom-out
+ -
+
+zoom-in
+ +
+
+zoom
+ =
+
+navigate prev
+ [[
+
+navigate next
+ ]]
+
+navigate prev -t
+ {{
+
+navigate next -t
+ }}
+
+navigate up
+ gu
+
+navigate up -t
+ gU
+
+navigate increment
+ <ctrl-a>
+
+navigate decrement
+ <ctrl-x>
+
+inspector
+ wi
+
+download
+ gd
+
+download-cancel
+ ad
+
+download-clear
+ cd
+
+view-source
+ gf
+
+set-cmd-text -s :buffer
+ gt
+
+tab-focus last
+ <ctrl-tab>
+
+enter-mode passthrough
+ <ctrl-v>
+
+quit
+ <ctrl-q>
+
+scroll-page 0 1
+ <ctrl-f>
+
+scroll-page 0 -1
+ <ctrl-b>
+
+scroll-page 0 0.5
+ <ctrl-d>
+
+scroll-page 0 -0.5
+ <ctrl-u>
+
+tab-focus 1
+ <alt-1>
+
+tab-focus 2
+ <alt-2>
+
+tab-focus 3
+ <alt-3>
+
+tab-focus 4
+ <alt-4>
+
+tab-focus 5
+ <alt-5>
+
+tab-focus 6
+ <alt-6>
+
+tab-focus 7
+ <alt-7>
+
+tab-focus 8
+ <alt-8>
+
+tab-focus 9
+ <alt-9>
+
+home
+ <ctrl-h>
+
+stop
+ <ctrl-s>
+
+print
+ <ctrl-alt-p>
+
+open qute:settings
+ Ss
+
+follow-selected
+ <return>
+ <ctrl-m>
+ <ctrl-j>
+ <shift-return>
+ <enter>
+ <shift-enter>
+
+follow-selected -t
+ <ctrl-return>
+ <ctrl-enter>
+
+repeat-command
+ .
+
+record-macro
+ q
+
+run-macro
+ @
+
+[insert]
+# Keybindings for insert mode.
+# Since normal keypresses are passed through, only special keys are
+# supported in this mode.
+# Useful hidden commands to map in this section:
+# * `open-editor`: Open a texteditor with the focused field.
+# * `paste-primary`: Paste primary selection at cursor position.
+
+open-editor
+ <ctrl-e>
+
+insert-text {primary}
+ <shift-ins>
+
+[hint]
+# Keybindings for hint mode.
+# Since normal keypresses are passed through, only special keys are
+# supported in this mode.
+# Useful hidden commands to map in this section:
+# * `follow-hint`: Follow the currently selected hint.
+
+follow-hint
+ <return>
+ <ctrl-m>
+ <ctrl-j>
+ <shift-return>
+ <enter>
+ <shift-enter>
+
+hint --rapid links tab-bg
+ <ctrl-r>
+
+hint links
+ <ctrl-f>
+
+hint all tab-bg
+ <ctrl-b>
+
+[command]
+# Keybindings for command mode.
+# Since normal keypresses are passed through, only special keys are
+# supported in this mode.
+# Useful hidden commands to map in this section:
+# * `command-history-prev`: Switch to previous command in history.
+# * `command-history-next`: Switch to next command in history.
+# * `completion-item-focus`: Select another item in completion.
+# * `command-accept`: Execute the command currently in the commandline.
+
+command-history-prev
+ <ctrl-p>
+
+command-history-next
+ <ctrl-n>
+
+completion-item-focus prev
+ <shift-tab>
+ <up>
+
+completion-item-focus next
+ <tab>
+ <down>
+
+completion-item-focus next-category
+ <ctrl-tab>
+
+completion-item-focus prev-category
+ <ctrl-shift-tab>
+
+completion-item-del
+ <ctrl-d>
+
+command-accept
+ <return>
+ <ctrl-m>
+ <ctrl-j>
+ <shift-return>
+ <enter>
+ <shift-enter>
+
+[prompt]
+# Keybindings for prompts in the status line.
+# You can bind normal keys in this mode, but they will be only active
+# when a yes/no-prompt is asked. For other prompt modes, you can only
+# bind special keys.
+# Useful hidden commands to map in this section:
+# * `prompt-accept`: Confirm the entered value.
+# * `prompt-accept yes`: Answer yes to a yes/no question.
+# * `prompt-accept no`: Answer no to a yes/no question.
+
+prompt-accept
+ <return>
+ <ctrl-m>
+ <ctrl-j>
+ <shift-return>
+ <enter>
+ <shift-enter>
+
+prompt-accept yes
+ y
+
+prompt-accept no
+ n
+
+prompt-open-download
+ <ctrl-x>
+
+prompt-item-focus prev
+ <shift-tab>
+ <up>
+
+prompt-item-focus next
+ <tab>
+ <down>
+
+[command,prompt]
+
+rl-backward-char
+ <ctrl-b>
+
+rl-forward-char
+ <ctrl-f>
+
+rl-backward-word
+ <alt-b>
+
+rl-forward-word
+ <alt-f>
+
+rl-beginning-of-line
+ <ctrl-a>
+
+rl-end-of-line
+ <ctrl-e>
+
+rl-unix-line-discard
+ <ctrl-u>
+
+rl-kill-line
+ <ctrl-k>
+
+rl-kill-word
+ <alt-d>
+
+rl-unix-word-rubout
+ <ctrl-w>
+
+rl-backward-kill-word
+ <alt-backspace>
+
+rl-yank
+ <ctrl-y>
+
+rl-delete-char
+ <ctrl-?>
+
+rl-backward-delete-char
+ <ctrl-h>
+
+[caret]
+
+toggle-selection
+ v
+ <space>
+
+drop-selection
+ <ctrl-space>
+
+enter-mode normal
+ c
+
+move-to-next-line
+ j
+
+move-to-prev-line
+ k
+
+move-to-next-char
+ l
+
+move-to-prev-char
+ h
+
+move-to-end-of-word
+ e
+
+move-to-next-word
+ w
+
+move-to-prev-word
+ b
+
+move-to-start-of-next-block
+ ]
+
+move-to-start-of-prev-block
+ [
+
+move-to-end-of-next-block
+ }
+
+move-to-end-of-prev-block
+ {
+
+move-to-start-of-line
+ 0
+
+move-to-end-of-line
+ $
+
+move-to-start-of-document
+ gg
+
+move-to-end-of-document
+ G
+
+yank selection -s
+ Y
+
+yank selection
+ y
+ <return>
+ <ctrl-m>
+ <ctrl-j>
+ <shift-return>
+ <enter>
+ <shift-enter>
+
+scroll left
+ H
+
+scroll down
+ J
+
+scroll up
+ K
+
+scroll right
+ L
+
diff --git a/.config/qutebrowser/nord-qutebrowser.py b/.config/qutebrowser/nord-qutebrowser.py
new file mode 120000
index 0000000..f76a0c3
--- /dev/null
+++ b/.config/qutebrowser/nord-qutebrowser.py
@@ -0,0 +1 @@
+/home/bloodstalker/nord-qutebrowser/nord-qutebrowser.py \ No newline at end of file
diff --git a/.config/qutebrowser/quickmarks b/.config/qutebrowser/quickmarks
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/.config/qutebrowser/quickmarks
diff --git a/.config/qutebrowser/qutebrowser.conf b/.config/qutebrowser/qutebrowser.conf
new file mode 100644
index 0000000..b05cc4f
--- /dev/null
+++ b/.config/qutebrowser/qutebrowser.conf
@@ -0,0 +1,1572 @@
+# vim: ft=dosini
+
+# Configfile for qutebrowser.
+#
+# This configfile is parsed by python's configparser in extended
+# interpolation mode. The format is very INI-like, so there are
+# categories like [general] with "key = value"-pairs.
+#
+# Note that you shouldn't add your own comments, as this file is
+# regenerated every time the config is saved.
+#
+# Interpolation looks like ${value} or ${section:value} and will be
+# replaced by the respective value.
+#
+# Some settings will expand environment variables. Note that, since
+# interpolation is run first, you will need to escape the $ char as
+# described below.
+#
+# This is the default config, so if you want to remove anything from
+# here (as opposed to change/add), for example a key binding, set it to
+# an empty value.
+#
+# You will need to escape the following values:
+# - # at the start of the line (at the first position of the key) (\#)
+# - $ in a value ($$)
+
+[general]
+# General/miscellaneous options.
+#
+# ignore-case (IgnoreCase):
+# Whether to find text on a page case-insensitively.
+# true: Search case-insensitively
+# false: Search case-sensitively
+# smart: Search case-sensitively if there are capital chars
+# Default: smart
+#
+# startpage (List of String):
+# The default page(s) to open at the start, separated by commas.
+# Default: https://start.duckduckgo.com
+#
+# yank-ignored-url-parameters (List of String):
+# The URL parameters to strip with :yank url, separated by commas.
+# Default:
+# ref,utm_source,utm_medium,utm_campaign,utm_term,utm_content
+#
+# default-open-dispatcher (String):
+# The default program used to open downloads. Set to an empty string
+# to use the default internal handler.
+# Any {} in the string will be expanded to the filename, else the
+# filename will be appended.
+# Default:
+#
+# default-page (FuzzyUrl):
+# The page to open if :open -t/-b/-w is used without URL. Use
+# `about:blank` for a blank page.
+# Default: ${startpage}
+#
+# auto-search (AutoSearch):
+# Whether to start a search when something else than a URL is
+# entered.
+# naive: Use simple/naive check.
+# dns: Use DNS requests (might be slow!).
+# false: Never search automatically.
+# Default: naive
+#
+# auto-save-config (Bool):
+# Whether to save the config automatically on quit.
+# Valid values: true, false
+# Default: true
+#
+# auto-save-interval (Int):
+# How often (in milliseconds) to auto-save config/cookies/etc.
+# Default: 15000
+#
+# editor (ShellCommand):
+# The editor (and arguments) to use for the `open-editor` command.
+# The arguments get split like in a shell, so you can use `"` or `'`
+# to quote them.
+# `{}` gets replaced by the filename of the file to be edited.
+# Default: gvim -f "{}"
+#
+# editor-encoding (Encoding):
+# Encoding to use for editor.
+# Default: utf-8
+#
+# private-browsing (Bool):
+# Do not record visited pages in the history or store web page
+# icons.
+# Valid values: true, false
+# Default: false
+#
+# developer-extras (Bool):
+# Enable extra tools for Web developers.
+# This needs to be enabled for `:inspector` to work and also adds an
+# _Inspect_ entry to the context menu. For QtWebEngine, see
+# 'qutebrowser --help' instead.
+# Valid values: true, false
+# Default: false
+#
+# print-element-backgrounds (Bool):
+# Whether the background color and images are also drawn when the
+# page is printed.
+# This setting only works with Qt 5.8 or newer when using the
+# QtWebEngine backend.
+# Valid values: true, false
+# Default: true
+#
+# xss-auditing (Bool):
+# Whether load requests should be monitored for cross-site scripting
+# attempts.
+# Suspicious scripts will be blocked and reported in the inspector's
+# JavaScript console. Enabling this feature might have an impact on
+# performance.
+# Valid values: true, false
+# Default: false
+#
+# site-specific-quirks (Bool):
+# Enable QtWebKit workarounds for broken sites.
+# Valid values: true, false
+# Default: true
+#
+# default-encoding (String):
+# Default encoding to use for websites.
+# The encoding must be a string describing an encoding such as
+# _utf-8_, _iso-8859-1_, etc. If left empty a default value will be
+# used.
+# Default:
+#
+# new-instance-open-target (String):
+# How to open links in an existing instance if a new one is
+# launched.
+# tab: Open a new tab in the existing window and activate the
+# window.
+# tab-bg: Open a new background tab in the existing window and
+# activate the window.
+# tab-silent: Open a new tab in the existing window without
+# activating the window.
+# tab-bg-silent: Open a new background tab in the existing
+# window without activating the window.
+# window: Open in a new window.
+# Default: tab
+#
+# new-instance-open-target.window (String):
+# Which window to choose when opening links as new tabs.
+# first-opened: Open new tabs in the first (oldest) opened
+# window.
+# last-opened: Open new tabs in the last (newest) opened window.
+# last-focused: Open new tabs in the most recently focused
+# window.
+# last-visible: Open new tabs in the most recently visible
+# window.
+# Default: last-focused
+#
+# log-javascript-console (String):
+# How to log javascript console messages.
+# none: Don't log messages.
+# debug: Log messages with debug level.
+# info: Log messages with info level.
+# Default: debug
+#
+# save-session (Bool):
+# Whether to always save the open pages.
+# Valid values: true, false
+# Default: false
+#
+# session-default-name (SessionName):
+# The name of the session to save by default, or empty for the last
+# loaded session.
+# Default:
+#
+# url-incdec-segments (FlagList):
+# The URL segments where `:navigate increment/decrement` will search
+# for a number.
+# Valid values: host, path, query, anchor
+# Default: path,query
+ignore-case = smart
+startpage = https://start.duckduckgo.com
+yank-ignored-url-parameters = ref,utm_source,utm_medium,utm_campaign,utm_term,utm_content
+default-open-dispatcher =
+default-page = ${startpage}
+auto-search = naive
+auto-save-config = true
+auto-save-interval = 15000
+editor = gvim -f "{}"
+editor-encoding = utf-8
+private-browsing = true
+developer-extras = true
+print-element-backgrounds = true
+xss-auditing = true
+site-specific-quirks = true
+default-encoding =
+new-instance-open-target = tab
+new-instance-open-target.window = last-focused
+log-javascript-console = debug
+save-session = false
+session-default-name =
+url-incdec-segments = path,query
+
+[ui]
+# General options related to the user interface.
+#
+# zoom-levels (List of Perc):
+# The available zoom levels, separated by commas.
+# Default:
+# 25%,33%,50%,67%,75%,90%,100%,110%,125%,150%,175%,200%,250%,300%,400%,500%
+#
+# default-zoom (Perc):
+# The default zoom level.
+# Default: 100%
+#
+# downloads-position (VerticalPosition):
+# Where to show the downloaded files.
+# Valid values: top, bottom
+# Default: top
+#
+# status-position (VerticalPosition):
+# The position of the status bar.
+# Valid values: top, bottom
+# Default: bottom
+#
+# message-timeout (Int):
+# Time (in ms) to show messages in the statusbar for.
+# Default: 2000
+#
+# message-unfocused (Bool):
+# Whether to show messages in unfocused windows.
+# Valid values: true, false
+# Default: false
+#
+# confirm-quit (ConfirmQuit):
+# Whether to confirm quitting the application.
+# always: Always show a confirmation.
+# multiple-tabs: Show a confirmation if multiple tabs are
+# opened.
+# downloads: Show a confirmation if downloads are running
+# never: Never show a confirmation.
+# Default: never
+#
+# zoom-text-only (Bool):
+# Whether the zoom factor on a frame applies only to the text or to
+# all content.
+# Valid values: true, false
+# Default: false
+#
+# frame-flattening (Bool):
+# Whether to expand each subframe to its contents.
+# This will flatten all the frames to become one scrollable page.
+# Valid values: true, false
+# Default: false
+#
+# user-stylesheet (File):
+# User stylesheet to use (absolute filename or filename relative to
+# the config directory). Will expand environment variables.
+# Default:
+#
+# hide-scrollbar (Bool):
+# Hide the main scrollbar.
+# Valid values: true, false
+# Default: true
+#
+# css-media-type (String):
+# Set the CSS media type.
+# Default:
+#
+# smooth-scrolling (Bool):
+# Whether to enable smooth scrolling for webpages.
+# Valid values: true, false
+# Default: false
+#
+# remove-finished-downloads (Int):
+# Number of milliseconds to wait before removing finished downloads.
+# Will not be removed if value is -1.
+# Default: -1
+#
+# hide-statusbar (Bool):
+# Whether to hide the statusbar unless a message is shown.
+# Valid values: true, false
+# Default: false
+#
+# statusbar-padding (Padding):
+# Padding for statusbar (top, bottom, left, right).
+# Default: 1,1,0,0
+#
+# window-title-format (FormatString):
+# The format to use for the window title. The following placeholders
+# are defined:
+# * `{perc}`: The percentage as a string like `[10%]`.
+# * `{perc_raw}`: The raw percentage, e.g. `10`
+# * `{title}`: The title of the current web page
+# * `{title_sep}`: The string ` - ` if a title is set, empty
+# otherwise.
+# * `{id}`: The internal window ID of this window.
+# * `{scroll_pos}`: The page scroll position.
+# * `{host}`: The host of the current web page.
+# * `{backend}`: Either 'webkit' or 'webengine'
+# Default: {perc}{title}{title_sep}qutebrowser
+#
+# modal-js-dialog (Bool):
+# Use standard JavaScript modal dialog for alert() and confirm()
+# Valid values: true, false
+# Default: false
+#
+# hide-wayland-decoration (Bool):
+# Hide the window decoration when using wayland (requires restart)
+# Valid values: true, false
+# Default: false
+#
+# keyhint-blacklist (List of String):
+# Keychains that shouldn't be shown in the keyhint dialog
+# Globs are supported, so ';*' will blacklist all keychainsstarting
+# with ';'. Use '*' to disable keyhints
+# Default:
+#
+# prompt-radius (Int):
+# The rounding radius for the edges of prompts.
+# Default: 8
+#
+# prompt-filebrowser (Bool):
+# Show a filebrowser in upload/download prompts.
+# Valid values: true, false
+# Default: true
+zoom-levels = 25%,33%,50%,67%,75%,90%,100%,110%,125%,150%,175%,200%,250%,300%,400%,500%
+default-zoom = 100%
+downloads-position = top
+status-position = bottom
+message-timeout = 2000
+message-unfocused = false
+confirm-quit = never
+zoom-text-only = false
+frame-flattening = false
+user-stylesheet =
+hide-scrollbar = true
+css-media-type =
+smooth-scrolling = false
+remove-finished-downloads = -1
+hide-statusbar = false
+statusbar-padding = 1,1,0,0
+window-title-format = {perc}{title}{title_sep}qutebrowser
+modal-js-dialog = false
+hide-wayland-decoration = false
+keyhint-blacklist =
+prompt-radius = 8
+prompt-filebrowser = true
+
+[network]
+# Settings related to the network.
+#
+# do-not-track (Bool):
+# Value to send in the `DNT` header.
+# Valid values: true, false
+# Default: true
+#
+# accept-language (String):
+# Value to send in the `accept-language` header.
+# Default: en-US,en
+#
+# referer-header (String):
+# Send the Referer header
+# always: Always send.
+# never: Never send; this is not recommended, as some sites may
+# break.
+# same-domain: Only send for the same domain. This will still
+# protect your privacy, but shouldn't break any sites.
+# Default: same-domain
+#
+# user-agent (UserAgent):
+# User agent to send. Empty to send the default.
+# Default:
+#
+# proxy (Proxy):
+# The proxy to use.
+# In addition to the listed values, you can use a `socks://...` or
+# `http://...` URL.
+# This setting only works with Qt 5.8 or newer when using the
+# QtWebEngine backend.
+# system: Use the system wide proxy.
+# none: Don't use any proxy
+# Default: system
+#
+# proxy-dns-requests (Bool):
+# Whether to send DNS requests over the configured proxy.
+# Valid values: true, false
+# Default: true
+#
+# ssl-strict (BoolAsk):
+# Whether to validate SSL handshakes.
+# Valid values: true, false, ask
+# Default: ask
+#
+# dns-prefetch (Bool):
+# Whether to try to pre-fetch DNS entries to speed up browsing.
+# Valid values: true, false
+# Default: true
+#
+# custom-headers (HeaderDict):
+# Set custom headers for qutebrowser HTTP requests.
+# Default:
+#
+# netrc-file (File):
+# Set location of a netrc-file for HTTP authentication. If empty,
+# ~/.netrc is used.
+# Default:
+do-not-track = true
+accept-language = en-US,en
+referer-header = same-domain
+user-agent =
+proxy = system
+proxy-dns-requests = true
+ssl-strict = ask
+dns-prefetch = true
+custom-headers =
+netrc-file =
+
+[completion]
+# Options related to completion and command history.
+#
+# show (String):
+# When to show the autocompletion window.
+# always: Whenever a completion is available.
+# auto: Whenever a completion is requested.
+# never: Never.
+# Default: always
+#
+# download-path-suggestion (String):
+# What to display in the download filename input.
+# path: Show only the download path.
+# filename: Show only download filename.
+# both: Show download path and filename.
+# Default: path
+#
+# timestamp-format (TimestampTemplate):
+# How to format timestamps (e.g. for history)
+# Default: %Y-%m-%d
+#
+# height (PercOrInt):
+# The height of the completion, in px or as percentage of the
+# window.
+# Default: 50%
+#
+# cmd-history-max-items (Int):
+# How many commands to save in the command history.
+# 0: no history / -1: unlimited
+# Default: 100
+#
+# web-history-max-items (Int):
+# How many URLs to show in the web history.
+# 0: no history / -1: unlimited
+# Default: 1000
+#
+# quick-complete (Bool):
+# Whether to move on to the next part when there's only one possible
+# completion left.
+# Valid values: true, false
+# Default: true
+#
+# shrink (Bool):
+# Whether to shrink the completion to be smaller than the configured
+# size if there are no scrollbars.
+# Valid values: true, false
+# Default: false
+#
+# scrollbar-width (Int):
+# Width of the scrollbar in the completion window (in px).
+# Default: 12
+#
+# scrollbar-padding (Int):
+# Padding of scrollbar handle in completion window (in px).
+# Default: 2
+show = always
+download-path-suggestion = path
+timestamp-format = %Y-%m-%d
+height = 50%
+cmd-history-max-items = 100
+web-history-max-items = 1000
+quick-complete = true
+shrink = false
+scrollbar-width = 12
+scrollbar-padding = 2
+
+[input]
+# Options related to input modes.
+#
+# timeout (Int):
+# Timeout (in milliseconds) for ambiguous key bindings.
+# If the current input forms both a complete match and a partial
+# match, the complete match will be executed after this time.
+# Default: 500
+#
+# partial-timeout (Int):
+# Timeout (in milliseconds) for partially typed key bindings.
+# If the current input forms only partial matches, the keystring
+# will be cleared after this time.
+# Default: 5000
+#
+# insert-mode-on-plugins (Bool):
+# Whether to switch to insert mode when clicking flash and other
+# plugins.
+# Valid values: true, false
+# Default: false
+#
+# auto-leave-insert-mode (Bool):
+# Whether to leave insert mode if a non-editable element is clicked.
+# Valid values: true, false
+# Default: true
+#
+# auto-insert-mode (Bool):
+# Whether to automatically enter insert mode if an editable element
+# is focused after page load.
+# Valid values: true, false
+# Default: false
+#
+# forward-unbound-keys (String):
+# Whether to forward unbound keys to the webview in normal mode.
+# all: Forward all unbound keys.
+# auto: Forward unbound non-alphanumeric keys.
+# none: Don't forward any keys.
+# Default: auto
+#
+# spatial-navigation (Bool):
+# Enables or disables the Spatial Navigation feature.
+# Spatial navigation consists in the ability to navigate between
+# focusable elements in a Web page, such as hyperlinks and form
+# controls, by using Left, Right, Up and Down arrow keys. For
+# example, if a user presses the Right key, heuristics determine
+# whether there is an element he might be trying to reach towards
+# the right and which element he probably wants.
+# Valid values: true, false
+# Default: false
+#
+# links-included-in-focus-chain (Bool):
+# Whether hyperlinks should be included in the keyboard focus chain.
+# Valid values: true, false
+# Default: true
+#
+# rocker-gestures (Bool):
+# Whether to enable Opera-like mouse rocker gestures. This disables
+# the context menu.
+# Valid values: true, false
+# Default: false
+#
+# mouse-zoom-divider (Int):
+# How much to divide the mouse wheel movements to translate them
+# into zoom increments.
+# Default: 512
+timeout = 500
+partial-timeout = 5000
+insert-mode-on-plugins = false
+auto-leave-insert-mode = true
+auto-insert-mode = false
+forward-unbound-keys = auto
+spatial-navigation = false
+links-included-in-focus-chain = true
+rocker-gestures = false
+mouse-zoom-divider = 512
+
+[tabs]
+# Configuration of the tab bar.
+#
+# background-tabs (Bool):
+# Whether to open new tabs (middleclick/ctrl+click) in background.
+# Valid values: true, false
+# Default: false
+#
+# select-on-remove (SelectOnRemove):
+# Which tab to select when the focused tab is removed.
+# prev: Select the tab which came before the closed one (left in
+# horizontal, above in vertical).
+# next: Select the tab which came after the closed one (right in
+# horizontal, below in vertical).
+# last-used: Select the previously selected tab.
+# Default: next
+#
+# new-tab-position (NewTabPosition):
+# How new tabs are positioned.
+# prev: Before the current tab.
+# next: After the current tab.
+# first: At the beginning.
+# last: At the end.
+# Default: next
+#
+# new-tab-position-explicit (NewTabPosition):
+# How new tabs opened explicitly are positioned.
+# prev: Before the current tab.
+# next: After the current tab.
+# first: At the beginning.
+# last: At the end.
+# Default: last
+#
+# last-close (String):
+# Behavior when the last tab is closed.
+# ignore: Don't do anything.
+# blank: Load a blank page.
+# startpage: Load the start page.
+# default-page: Load the default page.
+# close: Close the window.
+# Default: ignore
+#
+# show (String):
+# When to show the tab bar
+# always: Always show the tab bar.
+# never: Always hide the tab bar.
+# multiple: Hide the tab bar if only one tab is open.
+# switching: Show the tab bar when switching tabs.
+# Default: always
+#
+# show-switching-delay (Int):
+# Time to show the tab bar before hiding it when tabs->show is set
+# to 'switching'.
+# Default: 800
+#
+# wrap (Bool):
+# Whether to wrap when changing tabs.
+# Valid values: true, false
+# Default: true
+#
+# movable (Bool):
+# Whether tabs should be movable.
+# Valid values: true, false
+# Default: true
+#
+# close-mouse-button (String):
+# On which mouse button to close tabs.
+# right: Close tabs on right-click.
+# middle: Close tabs on middle-click.
+# none: Don't close tabs using the mouse.
+# Default: middle
+#
+# position (Position):
+# The position of the tab bar.
+# Valid values: top, bottom, left, right
+# Default: top
+#
+# show-favicons (Bool):
+# Whether to show favicons in the tab bar.
+# Valid values: true, false
+# Default: true
+#
+# width (PercOrInt):
+# The width of the tab bar if it's vertical, in px or as percentage
+# of the window.
+# Default: 20%
+#
+# indicator-width (Int):
+# Width of the progress indicator (0 to disable).
+# Default: 3
+#
+# tabs-are-windows (Bool):
+# Whether to open windows instead of tabs.
+# Valid values: true, false
+# Default: false
+#
+# title-format (FormatString):
+# The format to use for the tab title. The following placeholders
+# are defined:
+# * `{perc}`: The percentage as a string like `[10%]`.
+# * `{perc_raw}`: The raw percentage, e.g. `10`
+# * `{title}`: The title of the current web page
+# * `{title_sep}`: The string ` - ` if a title is set, empty
+# otherwise.
+# * `{index}`: The index of this tab.
+# * `{id}`: The internal tab ID of this tab.
+# * `{scroll_pos}`: The page scroll position.
+# * `{host}`: The host of the current web page.
+# * `{backend}`: Either 'webkit' or 'webengine'
+# Default: {index}: {title}
+#
+# title-alignment (TextAlignment):
+# Alignment of the text inside of tabs
+# Valid values: left, right, center
+# Default: left
+#
+# mousewheel-tab-switching (Bool):
+# Switch between tabs using the mouse wheel.
+# Valid values: true, false
+# Default: true
+#
+# padding (Padding):
+# Padding for tabs (top, bottom, left, right).
+# Default: 0,0,5,5
+#
+# indicator-padding (Padding):
+# Padding for indicators (top, bottom, left, right).
+# Default: 2,2,0,4
+background-tabs = false
+select-on-remove = next
+new-tab-position = next
+new-tab-position-explicit = last
+last-close = ignore
+show = always
+show-switching-delay = 800
+wrap = true
+movable = true
+close-mouse-button = middle
+position = top
+show-favicons = true
+width = 20%
+indicator-width = 3
+tabs-are-windows = false
+title-format = {index}: {title}
+title-alignment = left
+mousewheel-tab-switching = true
+padding = 0,0,5,5
+indicator-padding = 2,2,0,4
+
+[storage]
+# Settings related to cache and storage.
+#
+# download-directory (Directory):
+# The directory to save downloads to. An empty value selects a
+# sensible os-specific default. Will expand environment variables.
+# Default:
+#
+# prompt-download-directory (Bool):
+# Whether to prompt the user for the download location.
+# If set to false, 'download-directory' will be used.
+# Valid values: true, false
+# Default: true
+#
+# remember-download-directory (Bool):
+# Whether to remember the last used download directory.
+# Valid values: true, false
+# Default: true
+#
+# maximum-pages-in-cache (Int):
+# The maximum number of pages to hold in the global memory page
+# cache.
+# The Page Cache allows for a nicer user experience when navigating
+# forth or back to pages in the forward/back history, by pausing and
+# resuming up to _n_ pages.
+# For more information about the feature, please refer to:
+# http://webkit.org/blog/427/webkit-page-cache-i-the-basics/
+# Default:
+#
+# object-cache-capacities (List of WebKitBytes):
+# The capacities for the global memory cache for dead objects such
+# as stylesheets or scripts. Syntax: cacheMinDeadCapacity,
+# cacheMaxDead, totalCapacity.
+# The _cacheMinDeadCapacity_ specifies the minimum number of bytes
+# that dead objects should consume when the cache is under pressure.
+# _cacheMaxDead_ is the maximum number of bytes that dead objects
+# should consume when the cache is *not* under pressure.
+# _totalCapacity_ specifies the maximum number of bytes that the
+# cache should consume *overall*.
+# Default:
+#
+# offline-storage-default-quota (WebKitBytes):
+# Default quota for new offline storage databases.
+# Default:
+#
+# offline-web-application-cache-quota (WebKitBytes):
+# Quota for the offline web application cache.
+# Default:
+#
+# offline-storage-database (Bool):
+# Whether support for the HTML 5 offline storage feature is enabled.
+# Valid values: true, false
+# Default: true
+#
+# offline-web-application-storage (Bool):
+# Whether support for the HTML 5 web application cache feature is
+# enabled.
+# An application cache acts like an HTTP cache in some sense. For
+# documents that use the application cache via JavaScript, the
+# loader engine will first ask the application cache for the
+# contents, before hitting the network.
+# The feature is described in details at:
+# http://dev.w3.org/html5/spec/Overview.html#appcache
+# Valid values: true, false
+# Default: true
+#
+# local-storage (Bool):
+# Whether support for the HTML 5 local storage feature is enabled.
+# Valid values: true, false
+# Default: true
+#
+# cache-size (Int):
+# Size of the HTTP network cache. Empty to use the default value.
+# Default:
+download-directory =
+prompt-download-directory = true
+remember-download-directory = true
+maximum-pages-in-cache =
+object-cache-capacities =
+offline-storage-default-quota =
+offline-web-application-cache-quota =
+offline-storage-database = true
+offline-web-application-storage = true
+local-storage = true
+cache-size =
+
+[content]
+# Loaded plugins/scripts and allowed actions.
+#
+# allow-images (Bool):
+# Whether images are automatically loaded in web pages.
+# Valid values: true, false
+# Default: true
+#
+# allow-javascript (Bool):
+# Enables or disables the running of JavaScript programs.
+# Valid values: true, false
+# Default: true
+#
+# allow-plugins (Bool):
+# Enables or disables plugins in Web pages.
+# Qt plugins with a mimetype such as "application/x-qt-plugin" are
+# not affected by this setting.
+# Valid values: true, false
+# Default: false
+#
+# webgl (Bool):
+# Enables or disables WebGL.
+# Valid values: true, false
+# Default: true
+#
+# css-regions (Bool):
+# Enable or disable support for CSS regions.
+# Valid values: true, false
+# Default: true
+#
+# hyperlink-auditing (Bool):
+# Enable or disable hyperlink auditing (<a ping>).
+# Valid values: true, false
+# Default: false
+#
+# geolocation (BoolAsk):
+# Allow websites to request geolocations.
+# Valid values: true, false, ask
+# Default: ask
+#
+# notifications (BoolAsk):
+# Allow websites to show notifications.
+# Valid values: true, false, ask
+# Default: ask
+#
+# media-capture (BoolAsk):
+# Allow websites to record audio/video.
+# Valid values: true, false, ask
+# Default: ask
+#
+# javascript-can-open-windows-automatically (Bool):
+# Whether JavaScript programs can open new windows without user
+# interaction.
+# Valid values: true, false
+# Default: false
+#
+# javascript-can-close-windows (Bool):
+# Whether JavaScript programs can close windows.
+# Valid values: true, false
+# Default: false
+#
+# javascript-can-access-clipboard (Bool):
+# Whether JavaScript programs can read or write to the clipboard.
+# With QtWebEngine, writing the clipboard as response to a user
+# interaction is always allowed.
+# Valid values: true, false
+# Default: false
+#
+# ignore-javascript-prompt (Bool):
+# Whether all javascript prompts should be ignored.
+# Valid values: true, false
+# Default: false
+#
+# ignore-javascript-alert (Bool):
+# Whether all javascript alerts should be ignored.
+# Valid values: true, false
+# Default: false
+#
+# local-content-can-access-remote-urls (Bool):
+# Whether locally loaded documents are allowed to access remote
+# urls.
+# Valid values: true, false
+# Default: false
+#
+# local-content-can-access-file-urls (Bool):
+# Whether locally loaded documents are allowed to access other local
+# urls.
+# Valid values: true, false
+# Default: true
+#
+# cookies-accept (String):
+# Control which cookies to accept.
+# all: Accept all cookies.
+# no-3rdparty: Accept cookies from the same origin only.
+# no-unknown-3rdparty: Accept cookies from the same origin only,
+# unless a cookie is already set for the domain.
+# never: Don't accept cookies at all.
+# Default: no-3rdparty
+#
+# cookies-store (Bool):
+# Whether to store cookies. Note this option needs a restart with
+# QtWebEngine.
+# Valid values: true, false
+# Default: true
+#
+# host-block-lists (List of Url):
+# List of URLs of lists which contain hosts to block.
+# The file can be in one of the following formats:
+# - An '/etc/hosts'-like file
+# - One host per line
+# - A zip-file of any of the above, with either only one file, or a
+# file named 'hosts' (with any extension).
+# Default:
+# https://www.malwaredomainlist.com/hostslist/hosts.txt,http://someonewhocares.org/hosts/hosts,http://winhelp2002.mvps.org/hosts.zip,http://malwaredomains.lehigh.edu/files/justdomains.zip,https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext
+#
+# host-blocking-enabled (Bool):
+# Whether host blocking is enabled.
+# Valid values: true, false
+# Default: true
+#
+# host-blocking-whitelist (List of String):
+# List of domains that should always be loaded, despite being
+# ad-blocked.
+# Domains may contain * and ? wildcards and are otherwise required
+# to exactly match the requested domain.
+# Local domains are always exempt from hostblocking.
+# Default: piwik.org
+#
+# enable-pdfjs (Bool):
+# Enable pdf.js to view PDF files in the browser.
+# Note that the files can still be downloaded by clicking the
+# download button in the pdf.js viewer.
+# Valid values: true, false
+# Default: false
+allow-images = true
+allow-javascript = true
+allow-plugins = false
+webgl = true
+css-regions = true
+hyperlink-auditing = false
+geolocation = ask
+notifications = ask
+media-capture = ask
+javascript-can-open-windows-automatically = false
+javascript-can-close-windows = false
+javascript-can-access-clipboard = false
+ignore-javascript-prompt = false
+ignore-javascript-alert = false
+local-content-can-access-remote-urls = false
+local-content-can-access-file-urls = true
+cookies-accept = no-3rdparty
+cookies-store = true
+host-block-lists = https://www.malwaredomainlist.com/hostslist/hosts.txt,http://someonewhocares.org/hosts/hosts,http://winhelp2002.mvps.org/hosts.zip,http://malwaredomains.lehigh.edu/files/justdomains.zip,https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext
+host-blocking-enabled = true
+host-blocking-whitelist = piwik.org
+enable-pdfjs = true
+
+[hints]
+# Hinting settings.
+#
+# border (String):
+# CSS border value for hints.
+# Default: 1px solid #E3BE23
+#
+# mode (String):
+# Mode to use for hints.
+# number: Use numeric hints. (In this mode you can also type
+# letters form the hinted element to filter and reduce the number of
+# elements that are hinted.)
+# letter: Use the chars in the hints -> chars setting.
+# word: Use hints words based on the html elements and the extra
+# words.
+# Default: letter
+#
+# chars (UniqueCharString):
+# Chars used for hint strings.
+# Default: asdfghjkl
+#
+# min-chars (Int):
+# Minimum number of chars used for hint strings.
+# Default: 1
+#
+# scatter (Bool):
+# Whether to scatter hint key chains (like Vimium) or not (like
+# dwb). Ignored for number hints.
+# Valid values: true, false
+# Default: true
+#
+# uppercase (Bool):
+# Make chars in hint strings uppercase.
+# Valid values: true, false
+# Default: false
+#
+# dictionary (File):
+# The dictionary file to be used by the word hints.
+# Default: /usr/share/dict/words
+#
+# auto-follow (String):
+# Controls when a hint can be automatically followed without the
+# user pressing Enter.
+# always: Auto-follow whenever there is only a single hint on a
+# page.
+# unique-match: Auto-follow whenever there is a unique non-empty
+# match in either the hint string (word mode) or filter (number
+# mode).
+# full-match: Follow the hint when the user typed the whole hint
+# (letter, word or number mode) or the element's text (only in
+# number mode).
+# never: The user will always need to press Enter to follow a
+# hint.
+# Default: unique-match
+#
+# auto-follow-timeout (Int):
+# A timeout (in milliseconds) to inhibit normal-mode key bindings
+# after a successful auto-follow.
+# Default: 0
+#
+# next-regexes (List of Regex):
+# A comma-separated list of regexes to use for 'next' links.
+# Default:
+# \bnext\b,\bmore\b,\bnewer\b,\b[>→≫]\b,\b(>>|»)\b,\bcontinue\b
+#
+# prev-regexes (List of Regex):
+# A comma-separated list of regexes to use for 'prev' links.
+# Default: \bprev(ious)?\b,\bback\b,\bolder\b,\b[<←≪]\b,\b(<<|«)\b
+#
+# find-implementation (String):
+# Which implementation to use to find elements to hint.
+# javascript: Better but slower
+# python: Slightly worse but faster
+# Default: python
+#
+# hide-unmatched-rapid-hints (Bool):
+# Controls hiding unmatched hints in rapid mode.
+# Valid values: true, false
+# Default: true
+border = 1px solid #E3BE23
+mode = letter
+chars = asdfghjkl
+min-chars = 1
+scatter = true
+uppercase = false
+dictionary = /usr/share/dict/words
+auto-follow = unique-match
+auto-follow-timeout = 0
+next-regexes = \bnext\b,\bmore\b,\bnewer\b,\b[>→≫]\b,\b(>>|»)\b,\bcontinue\b
+prev-regexes = \bprev(ious)?\b,\bback\b,\bolder\b,\b[<←≪]\b,\b(<<|«)\b
+find-implementation = python
+hide-unmatched-rapid-hints = true
+
+[searchengines]
+# Definitions of search engines which can be used via the address bar.
+# The searchengine named `DEFAULT` is used when `general -> auto-search`
+# is true and something else than a URL was entered to be opened. Other
+# search engines can be used by prepending the search engine name to the
+# search term, e.g. `:open google qutebrowser`. The string `{}` will be
+# replaced by the search term, use `{{` and `}}` for literal `{`/`}`
+# signs.
+DEFAULT = https://duckduckgo.com/?q={}
+
+[aliases]
+# Aliases for commands.
+# By default, no aliases are defined. Example which adds a new command
+# `:qtb` to open qutebrowsers website:
+# `qtb = open https://www.qutebrowser.org/`
+
+[colors]
+# Colors used in the UI.
+# A value can be in one of the following format:
+# * `#RGB`/`#RRGGBB`/`#RRRGGGBBB`/`#RRRRGGGGBBBB`
+# * An SVG color name as specified in http://www.w3.org/TR/SVG/types.html#ColorKeywords[the W3C specification].
+# * transparent (no color)
+# * `rgb(r, g, b)` / `rgba(r, g, b, a)` (values 0-255 or percentages)
+# * `hsv(h, s, v)` / `hsva(h, s, v, a)` (values 0-255, hue 0-359)
+# * A gradient as explained in http://doc.qt.io/qt-5/stylesheet-reference.html#list-of-property-types[the Qt documentation] under ``Gradient''.
+# A *.system value determines the color system to use for color
+# interpolation between similarly-named *.start and *.stop entries,
+# regardless of how they are defined in the options. Valid values are
+# 'rgb', 'hsv', and 'hsl'.
+# The `hints.*` values are a special case as they're real CSS colors, not Qt-CSS colors. There, for a gradient, you need to use `-webkit-gradient`, see https://www.webkit.org/blog/175/introducing-css-gradients/[the WebKit documentation].
+#
+# completion.fg (QtColor):
+# Text color of the completion widget.
+# Default: white
+#
+# completion.bg (QssColor):
+# Background color of the completion widget.
+# Default: #333333
+#
+# completion.alternate-bg (QssColor):
+# Alternating background color of the completion widget.
+# Default: #444444
+#
+# completion.category.fg (QtColor):
+# Foreground color of completion widget category headers.
+# Default: white
+#
+# completion.category.bg (QssColor):
+# Background color of the completion widget category headers.
+# Default: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #888888,
+# stop:1 #505050)
+#
+# completion.category.border.top (QssColor):
+# Top border color of the completion widget category headers.
+# Default: black
+#
+# completion.category.border.bottom (QssColor):
+# Bottom border color of the completion widget category headers.
+# Default: ${completion.category.border.top}
+#
+# completion.item.selected.fg (QtColor):
+# Foreground color of the selected completion item.
+# Default: black
+#
+# completion.item.selected.bg (QssColor):
+# Background color of the selected completion item.
+# Default: #e8c000
+#
+# completion.item.selected.border.top (QssColor):
+# Top border color of the completion widget category headers.
+# Default: #bbbb00
+#
+# completion.item.selected.border.bottom (QssColor):
+# Bottom border color of the selected completion item.
+# Default: ${completion.item.selected.border.top}
+#
+# completion.match.fg (QssColor):
+# Foreground color of the matched text in the completion.
+# Default: #ff4444
+#
+# completion.scrollbar.fg (QssColor):
+# Color of the scrollbar handle in completion view.
+# Default: ${completion.fg}
+#
+# completion.scrollbar.bg (QssColor):
+# Color of the scrollbar in completion view
+# Default: ${completion.bg}
+#
+# statusbar.fg (QssColor):
+# Foreground color of the statusbar.
+# Default: white
+#
+# statusbar.bg (QssColor):
+# Background color of the statusbar.
+# Default: black
+#
+# statusbar.fg.insert (QssColor):
+# Foreground color of the statusbar in insert mode.
+# Default: ${statusbar.fg}
+#
+# statusbar.bg.insert (QssColor):
+# Background color of the statusbar in insert mode.
+# Default: darkgreen
+#
+# statusbar.fg.command (QssColor):
+# Foreground color of the statusbar in command mode.
+# Default: ${statusbar.fg}
+#
+# statusbar.bg.command (QssColor):
+# Background color of the statusbar in command mode.
+# Default: ${statusbar.bg}
+#
+# statusbar.fg.caret (QssColor):
+# Foreground color of the statusbar in caret mode.
+# Default: ${statusbar.fg}
+#
+# statusbar.bg.caret (QssColor):
+# Background color of the statusbar in caret mode.
+# Default: purple
+#
+# statusbar.fg.caret-selection (QssColor):
+# Foreground color of the statusbar in caret mode with a selection
+# Default: ${statusbar.fg}
+#
+# statusbar.bg.caret-selection (QssColor):
+# Background color of the statusbar in caret mode with a selection
+# Default: #a12dff
+#
+# statusbar.progress.bg (QssColor):
+# Background color of the progress bar.
+# Default: white
+#
+# statusbar.url.fg (QssColor):
+# Default foreground color of the URL in the statusbar.
+# Default: ${statusbar.fg}
+#
+# statusbar.url.fg.success (QssColor):
+# Foreground color of the URL in the statusbar on successful load
+# (http).
+# Default: white
+#
+# statusbar.url.fg.success.https (QssColor):
+# Foreground color of the URL in the statusbar on successful load
+# (https).
+# Default: lime
+#
+# statusbar.url.fg.error (QssColor):
+# Foreground color of the URL in the statusbar on error.
+# Default: orange
+#
+# statusbar.url.fg.warn (QssColor):
+# Foreground color of the URL in the statusbar when there's a
+# warning.
+# Default: yellow
+#
+# statusbar.url.fg.hover (QssColor):
+# Foreground color of the URL in the statusbar for hovered links.
+# Default: aqua
+#
+# tabs.fg.odd (QtColor):
+# Foreground color of unselected odd tabs.
+# Default: white
+#
+# tabs.bg.odd (QtColor):
+# Background color of unselected odd tabs.
+# Default: grey
+#
+# tabs.fg.even (QtColor):
+# Foreground color of unselected even tabs.
+# Default: white
+#
+# tabs.bg.even (QtColor):
+# Background color of unselected even tabs.
+# Default: darkgrey
+#
+# tabs.fg.selected.odd (QtColor):
+# Foreground color of selected odd tabs.
+# Default: white
+#
+# tabs.bg.selected.odd (QtColor):
+# Background color of selected odd tabs.
+# Default: black
+#
+# tabs.fg.selected.even (QtColor):
+# Foreground color of selected even tabs.
+# Default: ${tabs.fg.selected.odd}
+#
+# tabs.bg.selected.even (QtColor):
+# Background color of selected even tabs.
+# Default: ${tabs.bg.selected.odd}
+#
+# tabs.bg.bar (QtColor):
+# Background color of the tab bar.
+# Default: #555555
+#
+# tabs.indicator.start (QtColor):
+# Color gradient start for the tab indicator.
+# Default: #0000aa
+#
+# tabs.indicator.stop (QtColor):
+# Color gradient end for the tab indicator.
+# Default: #00aa00
+#
+# tabs.indicator.error (QtColor):
+# Color for the tab indicator on errors..
+# Default: #ff0000
+#
+# tabs.indicator.system (ColorSystem):
+# Color gradient interpolation system for the tab indicator.
+# rgb: Interpolate in the RGB color system.
+# hsv: Interpolate in the HSV color system.
+# hsl: Interpolate in the HSL color system.
+# none: Don't show a gradient.
+# Default: rgb
+#
+# hints.fg (QssColor):
+# Font color for hints.
+# Default: black
+#
+# hints.bg (QssColor):
+# Background color for hints. Note that you can use a `rgba(...)`
+# value for transparency.
+# Default: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255,
+# 247, 133, 0.8), stop:1 rgba(255, 197, 66, 0.8))
+#
+# hints.fg.match (QssColor):
+# Font color for the matched part of hints.
+# Default: green
+#
+# downloads.bg.bar (QssColor):
+# Background color for the download bar.
+# Default: black
+#
+# downloads.fg.start (QtColor):
+# Color gradient start for download text.
+# Default: white
+#
+# downloads.bg.start (QtColor):
+# Color gradient start for download backgrounds.
+# Default: #0000aa
+#
+# downloads.fg.stop (QtColor):
+# Color gradient end for download text.
+# Default: ${downloads.fg.start}
+#
+# downloads.bg.stop (QtColor):
+# Color gradient stop for download backgrounds.
+# Default: #00aa00
+#
+# downloads.fg.system (ColorSystem):
+# Color gradient interpolation system for download text.
+# rgb: Interpolate in the RGB color system.
+# hsv: Interpolate in the HSV color system.
+# hsl: Interpolate in the HSL color system.
+# none: Don't show a gradient.
+# Default: rgb
+#
+# downloads.bg.system (ColorSystem):
+# Color gradient interpolation system for download backgrounds.
+# rgb: Interpolate in the RGB color system.
+# hsv: Interpolate in the HSV color system.
+# hsl: Interpolate in the HSL color system.
+# none: Don't show a gradient.
+# Default: rgb
+#
+# downloads.fg.error (QtColor):
+# Foreground color for downloads with errors.
+# Default: white
+#
+# downloads.bg.error (QtColor):
+# Background color for downloads with errors.
+# Default: red
+#
+# webpage.bg (QtColor):
+# Background color for webpages if unset (or empty to use the
+# theme's color)
+# Default: white
+#
+# keyhint.fg (QssColor):
+# Text color for the keyhint widget.
+# Default: #FFFFFF
+#
+# keyhint.fg.suffix (CssColor):
+# Highlight color for keys to complete the current keychain
+# Default: #FFFF00
+#
+# keyhint.bg (QssColor):
+# Background color of the keyhint widget.
+# Default: rgba(0, 0, 0, 80%)
+#
+# messages.fg.error (QssColor):
+# Foreground color of an error message.
+# Default: white
+#
+# messages.bg.error (QssColor):
+# Background color of an error message.
+# Default: red
+#
+# messages.border.error (QssColor):
+# Border color of an error message.
+# Default: #bb0000
+#
+# messages.fg.warning (QssColor):
+# Foreground color a warning message.
+# Default: white
+#
+# messages.bg.warning (QssColor):
+# Background color of a warning message.
+# Default: darkorange
+#
+# messages.border.warning (QssColor):
+# Border color of an error message.
+# Default: #d47300
+#
+# messages.fg.info (QssColor):
+# Foreground color an info message.
+# Default: white
+#
+# messages.bg.info (QssColor):
+# Background color of an info message.
+# Default: black
+#
+# messages.border.info (QssColor):
+# Border color of an info message.
+# Default: #333333
+#
+# prompts.fg (QssColor):
+# Foreground color for prompts.
+# Default: white
+#
+# prompts.bg (QssColor):
+# Background color for prompts.
+# Default: darkblue
+#
+# prompts.selected.bg (QssColor):
+# Background color for the selected item in filename prompts.
+# Default: #308cc6
+completion.fg = white
+completion.bg = #333333
+completion.alternate-bg = #444444
+completion.category.fg = white
+completion.category.bg = qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #888888, stop:1 #505050)
+completion.category.border.top = black
+completion.category.border.bottom = ${completion.category.border.top}
+completion.item.selected.fg = black
+completion.item.selected.bg = #e8c000
+completion.item.selected.border.top = #bbbb00
+completion.item.selected.border.bottom = ${completion.item.selected.border.top}
+completion.match.fg = #ff4444
+completion.scrollbar.fg = ${completion.fg}
+completion.scrollbar.bg = ${completion.bg}
+statusbar.fg = white
+statusbar.bg = black
+statusbar.fg.insert = ${statusbar.fg}
+statusbar.bg.insert = darkgreen
+statusbar.fg.command = ${statusbar.fg}
+statusbar.bg.command = ${statusbar.bg}
+statusbar.fg.caret = ${statusbar.fg}
+statusbar.bg.caret = purple
+statusbar.fg.caret-selection = ${statusbar.fg}
+statusbar.bg.caret-selection = #a12dff
+statusbar.progress.bg = white
+statusbar.url.fg = ${statusbar.fg}
+statusbar.url.fg.success = white
+statusbar.url.fg.success.https = lime
+statusbar.url.fg.error = orange
+statusbar.url.fg.warn = yellow
+statusbar.url.fg.hover = aqua
+tabs.fg.odd = white
+tabs.bg.odd = grey
+tabs.fg.even = white
+tabs.bg.even = darkgrey
+tabs.fg.selected.odd = white
+tabs.bg.selected.odd = black
+tabs.fg.selected.even = ${tabs.fg.selected.odd}
+tabs.bg.selected.even = ${tabs.bg.selected.odd}
+tabs.bg.bar = #555555
+tabs.indicator.start = #0000aa
+tabs.indicator.stop = #00aa00
+tabs.indicator.error = #ff0000
+tabs.indicator.system = rgb
+hints.fg = black
+hints.bg = qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 247, 133, 0.8), stop:1 rgba(255, 197, 66, 0.8))
+hints.fg.match = green
+downloads.bg.bar = black
+downloads.fg.start = white
+downloads.bg.start = #0000aa
+downloads.fg.stop = ${downloads.fg.start}
+downloads.bg.stop = #00aa00
+downloads.fg.system = rgb
+downloads.bg.system = rgb
+downloads.fg.error = white
+downloads.bg.error = red
+webpage.bg = white
+keyhint.fg = #FFFFFF
+keyhint.fg.suffix = #FFFF00
+keyhint.bg = rgba(0, 0, 0, 80%)
+messages.fg.error = white
+messages.bg.error = red
+messages.border.error = #bb0000
+messages.fg.warning = white
+messages.bg.warning = darkorange
+messages.border.warning = #d47300
+messages.fg.info = white
+messages.bg.info = black
+messages.border.info = #333333
+prompts.fg = white
+prompts.bg = darkblue
+prompts.selected.bg = #308cc6
+
+[fonts]
+# Fonts used for the UI, with optional style/weight/size.
+# * Style: `normal`/`italic`/`oblique`
+# * Weight: `normal`, `bold`, `100`..`900`
+# * Size: _number_ `px`/`pt`
+#
+# _monospace (Font):
+# Default monospace fonts.
+# Default: Terminus, Monospace, "DejaVu Sans Mono", Monaco,
+# "Bitstream Vera Sans Mono", "Andale Mono", "Courier New", Courier,
+# "Liberation Mono", monospace, Fixed, Consolas, Terminal
+#
+# completion (Font):
+# Font used in the completion widget.
+# Default: 8pt ${_monospace}
+#
+# completion.category (Font):
+# Font used in the completion categories.
+# Default: bold ${completion}
+#
+# tabbar (QtFont):
+# Font used in the tab bar.
+# Default: 8pt ${_monospace}
+#
+# statusbar (Font):
+# Font used in the statusbar.
+# Default: 8pt ${_monospace}
+#
+# downloads (Font):
+# Font used for the downloadbar.
+# Default: 8pt ${_monospace}
+#
+# hints (Font):
+# Font used for the hints.
+# Default: bold 13px ${_monospace}
+#
+# debug-console (QtFont):
+# Font used for the debugging console.
+# Default: 8pt ${_monospace}
+#
+# web-family-standard (FontFamily):
+# Font family for standard fonts.
+# Default:
+#
+# web-family-fixed (FontFamily):
+# Font family for fixed fonts.
+# Default:
+#
+# web-family-serif (FontFamily):
+# Font family for serif fonts.
+# Default:
+#
+# web-family-sans-serif (FontFamily):
+# Font family for sans-serif fonts.
+# Default:
+#
+# web-family-cursive (FontFamily):
+# Font family for cursive fonts.
+# Default:
+#
+# web-family-fantasy (FontFamily):
+# Font family for fantasy fonts.
+# Default:
+#
+# web-size-minimum (Int):
+# The hard minimum font size.
+# Default:
+#
+# web-size-minimum-logical (Int):
+# The minimum logical font size that is applied when zooming out.
+# Default:
+#
+# web-size-default (Int):
+# The default font size for regular text.
+# Default:
+#
+# web-size-default-fixed (Int):
+# The default font size for fixed-pitch text.
+# Default:
+#
+# keyhint (Font):
+# Font used in the keyhint widget.
+# Default: 8pt ${_monospace}
+#
+# messages.error (Font):
+# Font used for error messages.
+# Default: 8pt ${_monospace}
+#
+# messages.warning (Font):
+# Font used for warning messages.
+# Default: 8pt ${_monospace}
+#
+# messages.info (Font):
+# Font used for info messages.
+# Default: 8pt ${_monospace}
+#
+# prompts (Font):
+# Font used for prompts.
+# Default: 8pt sans-serif
+_monospace = Terminus, Monospace, "DejaVu Sans Mono", Monaco, "Bitstream Vera Sans Mono", "Andale Mono", "Courier New", Courier, "Liberation Mono", monospace, Fixed, Consolas, Terminal
+completion = 8pt ${_monospace}
+completion.category = bold ${completion}
+tabbar = 8pt ${_monospace}
+statusbar = 8pt ${_monospace}
+downloads = 8pt ${_monospace}
+hints = bold 13px ${_monospace}
+debug-console = 8pt ${_monospace}
+web-family-standard =
+web-family-fixed =
+web-family-serif =
+web-family-sans-serif =
+web-family-cursive =
+web-family-fantasy =
+web-size-minimum =
+web-size-minimum-logical =
+web-size-default =
+web-size-default-fixed =
+keyhint = 8pt ${_monospace}
+messages.error = 8pt ${_monospace}
+messages.warning = 8pt ${_monospace}
+messages.info = 8pt ${_monospace}
+prompts = 8pt sans-serif
diff --git a/.config/ranger/rc.conf b/.config/ranger/rc.conf
new file mode 100644
index 0000000..cacf0d6
--- /dev/null
+++ b/.config/ranger/rc.conf
@@ -0,0 +1,725 @@
+# ===================================================================
+# This file contains the default startup commands for ranger.
+# To change them, it is recommended to create either /etc/ranger/rc.conf
+# (system-wide) or ~/.config/ranger/rc.conf (per user) 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 true
+
+# 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
+
+# Use non-default path for file preview script?
+# 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 four backends git, hg, bzr, svn. 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 enabled
+set vcs_backend_bzr disabled
+set vcs_backend_svn enabled
+
+# 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.
+#
+# This feature relies on the dimensions of the terminal's font. By default, a
+# width of 8 and height of 11 are used. To use other values, set the options
+# iterm2_font_width and iterm2_font_height to the desired values.
+#
+# * terminology:
+# Previews images in full color in the terminology terminal emulator.
+# Supports a wide variety of formats, even vector graphics like svg.
+#
+# * 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.
+#
+# * kitty:
+# Preview images in full color using kitty image protocol.
+# Requires python PIL or pillow library.
+# If ranger does not share the local filesystem with kitty
+# the transfer method is changed to encode the whole image;
+# while slower, this allows remote previews,
+# for example during an ssh session.
+# Tmux is unsupported.
+set preview_images_method w3m
+
+# Delay in seconds before displaying an image with the w3m method.
+# Increase it in case of experiencing display corruption.
+set w3m_delay 0.09
+
+# Default iTerm2 font size (see: preview_images_method: iterm2)
+set iterm2_font_width 8
+set iterm2_font_height 11
+
+# Use a unicode "..." character to mark cut-off filenames?
+set unicode_ellipsis false
+
+# BIDI support - try to properly display file names in RTL languages (Hebrew, Arabic).
+# Requires the python-bidi pip package
+set bidi_support 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? (separators, outline, both, or none)
+# Separators are vertical lines between columns.
+# Outline draws a box around all the columns.
+# Both combines the two.
+set draw_borders none
+
+# Display the directory name in tabs?
+set dirname_in_tabs true
+
+# 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 the free disk space in the status bar?
+set display_free_space_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 true
+
+# 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
+
+# Show hostname in titlebar?
+set hostname_in_titlebar true
+
+# Abbreviate $HOME with ~ in the titlebar (first line) of ranger?
+set tilde_in_titlebar true
+
+# 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
+
+# Save the "`" bookmark to disk. This can be used to switch to the last
+# directory by typing "``".
+set save_backtick_bookmark 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
+
+# Changes case sensitivity for the cd command tab completion
+set cd_tab_case sensitive
+
+# Use fuzzy tab completion with the "cd" command. For example,
+# ":cd /u/lo/b<tab>" expands to ":cd /usr/local/bin".
+set cd_tab_fuzzy false
+
+# Avoid previewing files larger than this size, in bytes. Use a value of 0 to
+# disable this feature.
+set preview_max_size 0
+
+# The key hint lists up to this size have their sublists expanded.
+# Otherwise the submaps are replaced with "...".
+set hint_collapse_threshold 10
+
+# 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.
+# Possible values: false, absolute, relative.
+set line_numbers relative
+
+# When line_numbers=relative show the absolute line number in the
+# current line.
+set relative_current_zero false
+
+# Start line numbers from 1 instead of 0
+set one_indexed false
+
+# Save tabs on exit
+set save_tabs_on_exit false
+
+# Enable scroll wrapping - moving down while on the last item will wrap around to
+# the top and vice versa.
+set wrap_scroll false
+
+# Set the global_inode_type_filter to nothing. Possible options: d, f and l for
+# directories, files and symlinks respectively.
+set global_inode_type_filter
+
+# This setting allows to freeze the list of files to save I/O bandwidth. It
+# should be 'false' during start-up, but you can toggle it by pressing F.
+set freeze_files 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! quit!
+alias qa quitall
+alias qa! quitall!
+alias qall quitall
+alias qall! quitall!
+alias setl setlocal
+
+alias filter scout -prts
+alias find scout -aets
+alias mark scout -mr
+alias unmark scout -Mr
+alias search scout -rs
+alias search_inc scout -rts
+alias travel scout -aefklst
+
+# ===================================================================
+# == Define keys for the browser
+# ===================================================================
+
+# Basic
+map Q quitall
+map q quit
+copymap q ZZ ZQ
+
+map R reload_cwd
+map F set freeze_files!
+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
+
+map <C-p> chain console; eval fm.ui.console.history_move(-1)
+
+# 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 <F2> rename_append
+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 { traverse_backwards
+map ) jump_non
+
+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 gi eval fm.cd('/run/media/' + os.getenv('USER'))
+map gM cd /mnt
+map gs cd /srv
+map gp cd /tmp
+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 yank path
+map yd yank dir
+map yn yank name
+map y. yank name_without_extension
+
+# 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
+map <a-r> tab_shift 1
+map <a-l> tab_shift -1
+
+# 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!
+copymap <C-h> <backspace>
+copymap <backspace> <backspace2>
+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
+copymap zf zz
+
+# Filter stack
+map .n console filter_stack add name%space
+map .m console filter_stack add mime%space
+map .d filter_stack add type d
+map .f filter_stack add type f
+map .l filter_stack add type l
+map .| filter_stack add or
+map .& filter_stack add and
+map .! filter_stack add not
+map .r console filter_stack rotate
+map .c filter_stack clear
+map .* filter_stack decompose
+map .p filter_stack pop
+map .. filter_stack show
+
+# 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-b> eval fm.ui.console.move_word(left=1)
+cmap <a-f> eval fm.ui.console.move_word(right=1)
+
+copycmap <a-b> <a-left>
+copycmap <a-f> <a-right>
+
+# 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 <ESC> <C-g>
+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>
diff --git a/.config/tmuxinator/sample.yml b/.config/tmuxinator/sample.yml
new file mode 100644
index 0000000..33f628c
--- /dev/null
+++ b/.config/tmuxinator/sample.yml
@@ -0,0 +1,59 @@
+# /home/sadeghi_f/.config/tmuxinator/maha.yml
+
+name: maha
+root: ~/
+
+# Optional tmux socket
+# socket_name: foo
+
+# Note that the pre and post options have been deprecated and will be replaced by
+# project hooks.
+
+# Project hooks
+
+# Runs on project start, always
+# on_project_start: command
+
+# Run on project start, the first time
+# on_project_first_start: command
+
+# Run on project start, after the first time
+# on_project_restart: command
+
+# Run on project exit ( detaching from tmux session )
+# on_project_exit: command
+
+# Run on project stop
+# on_project_stop: command
+
+# Runs in each window and pane before window/pane specific commands. Useful for setting up interpreter versions.
+# pre_window: rbenv shell 2.0.0-p247
+
+# Pass command line options to tmux. Useful for specifying a different tmux.conf.
+# tmux_options: -f ~/.tmux.mac.conf
+
+# Change the command to call tmux. This can be used by derivatives/wrappers like byobu.
+# tmux_command: byobu
+
+# Specifies (by name or index) which window will be selected on project startup. If not set, the first window is used.
+# startup_window: editor
+
+# Specifies (by index) which pane of the specified window will be selected on project startup. If not set, the first pane is used.
+# startup_pane: 1
+
+# Controls whether the tmux session should be attached to automatically. Defaults to true.
+# attach: false
+
+windows:
+ - shell1:
+ - cd "D:\Workspace\mi-server\Projects\ETCS\ONBOARD.KERNEL\RM\DIM"
+ - vim
+ - shell2:
+ - cd "D:\Workspace\mi-server\Projects\ETCS\ONBOARD.KERNEL\RM\DIM"
+ - date
+ - jcal
+ - std: cd "C:\Users\sadeghi_f\Desktop\STD\STD"
+ - src1: cd "D:\Workspace\mi-server\Projects\ETCS\ONBOARD.KERNEL\IMP\SRC"
+ - src2: cd "D:\Workspace\mi-server\Projects\ETCS\ONBOARD.KERNEL\IMP\SRC"
+ - hole:
+ - digg
diff --git a/.ctags b/.ctags
new file mode 100644
index 0000000..ebc3ebf
--- /dev/null
+++ b/.ctags
@@ -0,0 +1,59 @@
+--langdef=Solidity
+--langmap=Solidity:.sol
+--regex-Solidity=/^contract[ \t]+([a-zA-Z0-9_]+)/\1/c,contract/
+--regex-Solidity=/[ \t]*function[ \t]+([a-zA-Z0-9_]+)/\1/f,function/
+--regex-Solidity=/[ \t]*event[ \t]+([a-zA-Z0-9_]+)/\1/e,event/
+--regex-Solidity=/[ \t]*(struct[ \t]+[a-zA-Z0-9_]+)([ \t]*\{)/\1/v,variable/
+--regex-Solidity=/[ \t]*(enum[ \t]+[a-zA-Z0-9_]+)([ \t]*\{)/\1/v,variable/
+--regex-Solidity=/[ \t]*mapping[ \t]+\(([a-zA-Z0-9_]+)[ \t]*=>[ \t]*([a-zA-Z0-9_]+)\)[ \t]+([a-zA-Z0-9_]+)/\3 (\1=>\2)/m,mapping/
+
+--langdef=Rust
+--langmap=Rust:.rs
+--regex-Rust=/^[ \t]*(#\[[^\]]\][ \t]*)*(pub[ \t]+)?(extern[ \t]+)?("[^"]+"[ \t]+)?(unsafe[ \t]+)?fn[ \t]+([a-zA-Z0-9_]+)/\6/f,functions,function definitions/
+--regex-Rust=/^[ \t]*(pub[ \t]+)?type[ \t]+([a-zA-Z0-9_]+)/\2/T,types,type definitions/
+--regex-Rust=/^[ \t]*(pub[ \t]+)?enum[ \t]+([a-zA-Z0-9_]+)/\2/g,enum,enumeration names/
+--regex-Rust=/^[ \t]*(pub[ \t]+)?struct[ \t]+([a-zA-Z0-9_]+)/\2/s,structure names/
+--regex-Rust=/^[ \t]*(pub[ \t]+)?mod[ \t]+([a-zA-Z0-9_]+)/\2/m,modules,module names/
+--regex-Rust=/^[ \t]*(pub[ \t]+)?(static|const)[ \t]+(mut[ \t]+)?([a-zA-Z0-9_]+)/\4/c,consts,static constants/
+--regex-Rust=/^[ \t]*(pub[ \t]+)?(unsafe[ \t]+)?trait[ \t]+([a-zA-Z0-9_]+)/\3/t,traits,traits/
+--regex-Rust=/^[ \t]*(pub[ \t]+)?(unsafe[ \t]+)?impl([ \t\n]*<[^>]*>)?[ \t]+(([a-zA-Z0-9_:]+)[ \t]*(<[^>]*>)?[ \t]+(for)[ \t]+)?([a-zA-Z0-9_]+)/\5 \7 \8/i,impls,trait implementations/
+--regex-Rust=/^[ \t]*macro_rules![ \t]+([a-zA-Z0-9_]+)/\1/d,macros,macro definitions/
+--regex-make=/^([^# \t]*):/\1/t,target/
+
+--langdef=Go
+--langmap=Go:.go
+--regex-Go=/func([ \t]+\([^)]+\))?[ \t]+([a-zA-Z0-9_]+)/\2/d,func/
+--regex-Go=/var[ \t]+([a-zA-Z_][a-zA-Z0-9_]+)/\1/d,var/
+--regex-Go=/type[ \t]+([a-zA-Z_][a-zA-Z0-9_]+)/\1/d,type/
+
+--exclude=node_modules
+--exclude=gulp
+--langdef=js
+--langmap=js:.js
+--langmap=js:+.jsx
+--regex-js=/[ \t.]([A-Z][A-Z0-9._$]+)[ \t]*[=:][ \t]*([0-9"'\[\{]|null)/\1/n,constant/
+--regex-js=/\.([A-Za-z0-9._$]+)[ \t]*=[ \t]*\{/\1/o,object/
+--regex-js=/['"]*([A-Za-z0-9_$]+)['"]*[ \t]*:[ \t]*\{/\1/o,object/
+--regex-js=/([A-Za-z0-9._$]+)\[["']([A-Za-z0-9_$]+)["']\][ \t]*=[ \t]*\{/\1\.\2/o,object/
+--regex-js=/([A-Za-z0-9._$]+)[ \t]*=[ \t]*\(function\(\)/\1/c,class/
+--regex-js=/['"]*([A-Za-z0-9_$]+)['"]*:[ \t]*\(function\(\)/\1/c,class/
+--regex-js=/class[ \t]+([A-Za-z0-9._$]+)[ \t]*/\1/c,class/
+--regex-js=/([A-Za-z$][A-Za-z0-9_$()]+)[ \t]*=[ \t]*[Rr]eact.createClass[ \t]*\(/\1/c,class/
+--regex-js=/([A-Z][A-Za-z0-9_$]+)[ \t]*=[ \t]*[A-Za-z0-9_$]*[ \t]*[{(]/\1/c,class/
+--regex-js=/([A-Z][A-Za-z0-9_$]+)[ \t]*:[ \t]*[A-Za-z0-9_$]*[ \t]*[{(]/\1/c,class/
+--regex-js=/([A-Za-z$][A-Za-z0-9_$]+)[ \t]*=[ \t]*function[ \t]*\(/\1/f,function/
+--regex-js=/(function)*[ \t]*([A-Za-z$_][A-Za-z0-9_$]+)[ \t]*\([^)]*\)[ \t]*\{/\2/f,function/
+--regex-js=/['"]*([A-Za-z$][A-Za-z0-9_$]+)['"]*:[ \t]*function[ \t]*\(/\1/m,method/
+--regex-js=/([A-Za-z0-9_$]+)\[["']([A-Za-z0-9_$]+)["']\][ \t]*=[ \t]*function[ \t]*\(/\2/m,method/
+
+--langdef=typescript
+--langmap=typescript:.ts
+--regex-typescript=/^[ \t]*(export)?[ \t]*class[ \t]+([a-zA-Z0-9_]+)/\2/c,classes/
+--regex-typescript=/^[ \t]*(export)?[ \t]*module[ \t]+([a-zA-Z0-9_]+)/\2/n,modules/
+--regex-typescript=/^[ \t]*(export)?[ \t]*function[ \t]+([a-zA-Z0-9_]+)/\2/f,functions/
+--regex-typescript=/^[ \t]*export[ \t]+var[ \t]+([a-zA-Z0-9_]+)/\1/v,variables/
+--regex-typescript=/^[ \t]*var[ \t]+([a-zA-Z0-9_]+)[ \t]*=[ \t]*function[ \t]*\(\)/\1/v,varlambdas/
+--regex-typescript=/^[ \t]*(export)?[ \t]*(public|private)[ \t]+(static)?[ \t]*([a-zA-Z0-9_]+)/\4/m,members/
+--regex-typescript=/^[ \t]*(export)?[ \t]*interface[ \t]+([a-zA-Z0-9_]+)/\2/i,interfaces/
+--regex-typescript=/^[ \t]*(export)?[ \t]*enum[ \t]+([a-zA-Z0-9_]+)/\2/e,enums/
+--regex-typescript=/^[ \t]*import[ \t]+([a-zA-Z0-9_]+)/\1/I,imports/
diff --git a/.gitconfig b/.gitconfig
new file mode 100644
index 0000000..3096768
--- /dev/null
+++ b/.gitconfig
@@ -0,0 +1,6 @@
+[user]
+ email = thabogre@gmail.com
+[alias]
+ conflicts = !git ls-files -u | cut -f 2 | sort -u
+ pr = "!f() { git fetch -fu ${2:-upstream} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f"
+ pr-clean = "!git checkout master ; git for-each-ref refs/heads/pr/* --format=\"%(refname)\" | while read ref ; do branch=${ref#refs/heads/} ; git branch -D $branch ; done"
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bee8a64
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+__pycache__
diff --git a/.gotty b/.gotty
new file mode 100644
index 0000000..e69fe13
--- /dev/null
+++ b/.gotty
@@ -0,0 +1,302 @@
+// [string] Address to listen, all addresses will be used when empty
+address = "localhost"
+
+// [string] Port to listen
+port = "9000"
+
+// [bool] Permit clients to write to the TTY
+permit_write = true
+
+// [bool] Enable basic authentication
+// enable_basic_auth = false
+
+// [string] Default username and password of basic authentication (user:pass)
+// To enable basic authentication, set `true` to `enable_basic_auth`
+// credential = "user:pass"
+
+// [bool] Enable random URL generation
+// enable_random_url = false
+
+// [int] Default length of random strings appended to URL
+// To enable random URL generation, set `true` to `enable_random_url`
+// random_url_length = 8
+
+// [bool] Enable TLS/SSL
+// enable_tls = false
+
+// [string] Default TLS certificate file path
+// tls_crt_file = "~/.gotty.crt"
+
+// [string] Default TLS key file path
+// tls_key_file = "~/.gotty.key"
+
+// [bool] Enable client certificate authentication
+// enable_tls_client_auth = false
+
+// [string] Certificate file of CA for client certificates
+// tls_ca_crt_file = "~/.gotty.ca.crt"
+
+// [string] Custom index.html file
+// index_file = ""
+
+// [string] Title format of browser window
+// Available variables are:
+// Command Command string
+// Pid PID of the process for the client
+// Hostname Server hostname
+// RemoteAddr Client IP address
+// title_format = "GoTTY - {{ .Command }} ({{ .Hostname }})"
+
+// [bool] Enable client side reconnection when connection closed
+// enable_reconnect = false
+
+// [int] Interval time to try reconnection (seconds)
+// To enable reconnection, set `true` to `enable_reconnect`
+// reconnect_time = 10
+
+// [int] Timeout seconds for waiting a client (0 to disable)
+// timeout = 60
+
+// [int] Maximum connection to gotty, 0(default) means no limit.
+// max_connection = 0
+
+// [bool] Accept only one client and exit gotty once the client exits
+// once = false
+
+// [bool] Permit clients to send command line arguments in URL (e.g. http://example.com:8080/?arg=AAA&arg=BBB)
+// permit_arguments = false
+
+// [object] Client terminal (hterm) preferences
+preferences {
+
+ // [enum(null, "none", "ctrl-alt", "left-alt", "right-alt")]
+ // Select an AltGr detection hack^Wheuristic.
+ // null: Autodetect based on navigator.language: "en-us" => "none", else => "right-alt"
+ // "none": Disable any AltGr related munging.
+ // "ctrl-alt": Assume Ctrl+Alt means AltGr.
+ // "left-alt": Assume left Alt means AltGr.
+ // "right-alt": Assume right Alt means AltGr.
+ // alt_gr_mode = null
+
+ // [bool] If set, alt-backspace indeed is alt-backspace.
+ // alt_backspace_is_meta_backspace = false
+
+ // [bool] Set whether the alt key acts as a meta key or as a distinct alt key.
+ // alt_is_meta = false
+
+ // [enum("escape", "8-bit", "browser-key")]
+ // Controls how the alt key is handled.
+ // "escape"....... Send an ESC prefix.
+ // "8-bit"........ Add 128 to the unshifted character as in xterm.
+ // "browser-key".. Wait for the keypress event and see what the browser says.
+ // (This won't work well on platforms where the browser performs a default action for some alt sequences.)
+ // alt_sends_what = "escape"
+
+ // [string] URL of the terminal bell sound. Empty string for no audible bell.
+ // audible_bell_sound = "lib-resource:hterm/audio/bell"
+
+ // [bool] If true, terminal bells in the background will create a Web Notification. http://www.w3.org/TR/notifications/
+ // Displaying notifications requires permission from the user.
+ // When this option is set to true, hterm will attempt to ask the user for permission if necessary.
+ // Note browsers may not show this permission request
+ // if it did not originate from a user action.
+ // desktop_notification_bell = false
+
+ // [string] The background color for text with no other color attributes.
+ background_color = "rgb(0, 0, 0)"
+
+ // [string] CSS value of the background image. Empty string for no image.
+ // For example:
+ // "url(https://goo.gl/anedTK) linear-gradient(top bottom, blue, red)"
+ // background_image = ""
+
+ // [string] CSS value of the background image size. Defaults to none.
+ // background_size = ""
+
+ // [string] CSS value of the background image position.
+ // For example:
+ // "10% 10% center"
+ // background_position = ""
+
+ // [bool] If true, the backspace should send BS ('\x08', aka ^H). Otherwise the backspace key should send '\x7f'.
+ // backspace_sends_backspace = false
+
+ // [map[string]map[string]string]
+ // A nested map where each property is the character set code and the value is a map that is a sparse array itself.
+ // In that sparse array, each property is the received character and the value is the displayed character.
+ // For example:
+ // {"0" = {"+" = "\u2192"
+ // "," = "\u2190"
+ // "-" = "\u2191"
+ // "." = "\u2193"
+ // "0" = "\u2588"}}
+ // character_map_overrides = null
+
+ // [bool] Whether or not to close the window when the command exits.
+ // close_on_exit = true
+
+ // [bool] Whether or not to blink the cursor by default.
+ // cursor_blink = false
+
+ // [2[int]] The cursor blink rate in milliseconds.
+ // A two element array, the first of which is how long the cursor should be on, second is how long it should be off.
+ // cursor_blink_cycle = [1000, 500]
+
+ // [string] The color of the visible cursor.
+ // cursor_color = "rgba(255, 0, 0, 0.5)"
+
+ // [[]string]
+ // Override colors in the default palette.
+ // This can be specified as an array or an object.
+ // Values can be specified as almost any css color value.
+ // This includes #RGB, #RRGGBB, rgb(...), rgba(...), and any color names that are also part of the stock X11 rgb.txt file.
+ // You can use 'null' to specify that the default value should be not be changed.
+ // This is useful for skipping a small number of indicies when the value is specified as an array.
+ // color_palette_overrides = null
+
+ // [bool] Automatically copy mouse selection to the clipboard.
+ // copy_on_select = true
+
+ // [bool] Whether to use the default window copy behaviour
+ // use_default_window_copy = false
+
+ // [bool] Whether to clear the selection after copying.
+ // clear_selection_after_copy = true
+
+ // [bool] If true, Ctrl-Plus/Minus/Zero controls zoom.
+ // If false, Ctrl-Shift-Plus/Minus/Zero controls zoom, Ctrl-Minus sends ^_, Ctrl-Plus/Zero do nothing.
+ // ctrl_plus_minus_zero_zoom = true
+
+ // [bool] Ctrl+C copies if true, send ^C to host if false.
+ // Ctrl+Shift+C sends ^C to host if true, copies if false.
+ // ctrl_c_copy = false
+
+ // [bool] Ctrl+V pastes if true, send ^V to host if false.
+ // Ctrl+Shift+V sends ^V to host if true, pastes if false.
+ // ctrl_v_paste = false
+
+ // [bool] Set whether East Asian Ambiguous characters have two column width.
+ // east_asian_ambiguous_as_two_column = false
+
+ // [bool] True to enable 8-bit control characters, false to ignore them.
+ // We'll respect the two-byte versions of these control characters regardless of this setting.
+ // enable_8_bit_control = false
+
+ // [enum(null, true, false)]
+ // True if we should use bold weight font for text with the bold/bright attribute.
+ // False to use the normal weight font.
+ // Null to autodetect.
+ enable_bold = false
+
+ // [bool] True if we should use bright colors (8-15 on a 16 color palette) for any text with the bold attribute.
+ // False otherwise.
+ enable_bold_as_bright = false
+
+ // [bool] Show a message in the terminal when the host writes to the clipboard.
+ // enable_clipboard_notice = true
+
+ // [bool] Allow the host to write directly to the system clipboard.
+ enable_clipboard_write = true
+
+ // [bool] Respect the host's attempt to change the cursor blink status using DEC Private Mode 12.
+ // enable_dec12 = false
+
+ // [map[string]string] The default environment variables, as an object.
+ environment = {"TERM" = "xterm-256color"}
+
+ // [string] Default font family for the terminal text.
+ font_family = "'DejaVuSansMono NF', 'Everson Mono', FreeMono, 'Menlo', 'Terminal', monospace"
+
+ // [int] The default font size in pixels.
+ // font_size = 15
+
+ // [string] CSS font-smoothing property.
+ // font_smoothing = "antialiased"
+
+ // [string] The foreground color for text with no other color attributes.
+ // foreground_color = "rgb(240, 240, 240)"
+
+ // [bool] If true, home/end will control the terminal scrollbar and shift home/end will send the VT keycodes.
+ // If false then home/end sends VT codes and shift home/end scrolls.
+ // home_keys_scroll = false
+
+ // [map[string]string]
+ // A map of key sequence to key actions.
+ // Key sequences include zero or more modifier keys followed by a key code.
+ // Key codes can be decimal or hexadecimal numbers, or a key identifier.
+ // Key actions can be specified a string to send to the host, or an action identifier.
+ // For a full list of key code and action identifiers, see https://goo.gl/8AoD09.
+ // Sample keybindings:
+ // {"Ctrl-Alt-K" = "clearScrollback"
+ // "Ctrl-Shift-L"= "PASS"
+ // "Ctrl-H" = "'HELLO\n'"}
+ // keybindings = null
+
+ // [int] Max length of a DCS, OSC, PM, or APS sequence before we give up and ignore the code.
+ // max_string_sequence = 100000
+
+ // [bool] If true, convert media keys to their Fkey equivalent.
+ // If false, let the browser handle the keys.
+ // media_keys_are_fkeys = false
+
+ // [bool] Set whether the meta key sends a leading escape or not.
+ // meta_sends_escape = true
+
+ // [enum(null, 0, 1, 2, 3, 4, 5, 6]
+ // Mouse paste button, or null to autodetect.
+ // For autodetect, we'll try to enable middle button paste for non-X11 platforms.
+ // On X11 we move it to button 3.
+ // mouse_paste_button = null
+
+ // [bool] If true, page up/down will control the terminal scrollbar and shift page up/down will send the VT keycodes.
+ // If false then page up/down sends VT codes and shift page up/down scrolls.
+ // page_keys_scroll = false
+
+ // [enum(null, true, false)]
+ // Set whether we should pass Alt-1..9 to the browser.
+ // This is handy when running hterm in a browser tab, so that you don't lose Chrome's "switch to tab" keyboard accelerators.
+ // When not running in a tab it's better to send these keys to the host so they can be used in vim or emacs.
+ // If true, Alt-1..9 will be handled by the browser.
+ // If false, Alt-1..9 will be sent to the host.
+ // If null, autodetect based on browser platform and window type.
+ // pass_alt_number = null
+
+ // [enum(null, true, false)]
+ // Set whether we should pass Ctrl-1..9 to the browser.
+ // This is handy when running hterm in a browser tab, so that you don't lose Chrome's "switch to tab" keyboard accelerators.
+ // When not running in a tab it's better to send these keys to the host so they can be used in vim or emacs.
+ // If true, Ctrl-1..9 will be handled by the browser.
+ // If false, Ctrl-1..9 will be sent to the host.
+ // If null, autodetect based on browser platform and window type.
+ // pass_ctrl_number = null
+
+ // [enum(null, true, false)]
+ // Set whether we should pass Meta-1..9 to the browser.
+ // This is handy when running hterm in a browser tab, so that you don't lose Chrome's "switch to tab" keyboard accelerators.
+ // When not running in a tab it's better to send these keys to the host so they can be used in vim or emacs.
+ // If true, Meta-1..9 will be handled by the browser.
+ // If false, Meta-1..9 will be sent to the host. If null, autodetect based on browser platform and window type.
+ // pass_meta_number = null
+
+ // [bool] Set whether meta-V gets passed to host.
+ // pass_meta_v = true
+
+ // [bool] If true, scroll to the bottom on any keystroke.
+ // scroll_on_keystroke = true
+
+ // [bool] If true, scroll to the bottom on terminal output.
+ // scroll_on_output = false
+
+ // [bool] The vertical scrollbar mode.
+ scrollbar_visible = true
+
+ // [int] The multiplier for the pixel delta in mousewheel event caused by the scroll wheel. Alters how fast the page scrolls.
+ // scroll_wheel_move_multiplier = 1
+
+ // [bool] Shift + Insert pastes if true, sent to host if false.
+ shift_insert_paste = true
+
+ // [string] URL of user stylesheet to include in the terminal document.
+ // user_css = ""
+
+}
diff --git a/.i3blocks.conf b/.i3blocks.conf
new file mode 100644
index 0000000..6695527
--- /dev/null
+++ b/.i3blocks.conf
@@ -0,0 +1,331 @@
+# i3blocks config file
+#
+# Please see man i3blocks for a complete reference!
+# The man page is also hosted at http://vivien.github.io/i3blocks
+#
+# List of valid properties:
+#
+# align
+# color
+# background
+# border
+# command
+# full_text
+# instance
+# interval
+# label
+# min_width
+# name
+# separator
+# separator_block_width
+# short_text
+# signal
+# urgent
+
+# Global properties
+#
+# The top properties below are applied to every block, but can be overridden.
+# Each block command defaults to the script name to avoid boilerplate.
+command=/usr/local/libexec/i3blocks/$BLOCK_NAME
+separator=false
+separator_block_width=3
+markup=none
+#########################
+#[buy]
+#command=~/scripts/coinmarketcap.py --ava ant
+#interval=60
+#color=#ffffff
+#background=#330099
+
+[cgrep-stargazers]
+label=cgrep
+command=/home/bloodstalker/scripts/pygitty.py --repo bloodstalker/cgrep
+interval=600
+color=#ffffff
+background=#0087af
+
+[mutator-stargazers]
+label=mutator
+command=/home/bloodstalker/scripts/pygitty.py --repo bloodstalker/mutator
+interval=600
+color=#ffffff
+background=#00af00
+
+#[mahsa]
+#command=/home/bloodstalker/scripts/mushi.py --tg
+#command=echo mahsa
+#interval=60
+#color=#ffffff
+#background=#660033
+
+[alive]
+command=/home/bloodstalker/scripts/hivedup.sh
+interval=60
+color=#ffffff
+background=#000033
+
+[alert2]
+command=~/extra/kaminokumo/kaminokumo --cb
+interval=600
+color=#ffffff
+background=#cc6699
+
+[alert1]
+command=/home/bloodstalker/scripts/mushi.py --al1
+interval=600
+color=#ffffff
+background=#6633cc
+
+[alert3]
+command=/home/bloodstalker/scripts/mushi.py --al2
+interval=600
+color=#ffffff
+background=#6633ff
+
+[alert4]
+command=/home/bloodstalker/scripts/mushi.py --al3
+interval=600
+color=#ffffff
+background=#6633cc
+
+[alert5]
+command=/home/bloodstalker/scripts/mushi.py --al4
+interval=600
+color=#ffffff
+background=#663399
+
+[alert6]
+command=/home/bloodstalker/scripts/mushi.py --al5
+interval=600
+color=#ffffff
+background=#6666FF
+
+[buylist]
+command=/home/bloodstalker/scripts/mushi.py --watchlist fil doge ada gnt eth bat
+interval=1200
+color=#ffffff
+background=#330099
+
+#[buylistss]
+#command=/home/bloodstalker/scripts/mushi.py --ss fil doge ada gnt eth bat
+#interval=600
+#color=#ffffff
+#background=#330066
+
+[total]
+command=/home/bloodstalker/scripts/mushi.py --total
+interval=600
+label=NET
+color=#ffffff
+background=#003366
+
+[bat]
+command=/home/bloodstalker/scripts/mushi.py --name bat
+interval=600
+label=BAT
+color=#000000
+background=#33CCFF
+
+[ethereum]
+command=/home/bloodstalker/scripts/mushi.py --name eth
+interval=600
+label=ETH
+color=#ffffff
+background=#669900
+
+[dogecoin]
+command=/home/bloodstalker/scripts/mushi.py --name doge
+interval=600
+label=DOGE
+color=#111111
+background=#99cc66
+
+[golem]
+command=/home/bloodstalker/scripts/mushi.py --name gnt
+interval=600
+label=GNT
+color=#ffffff
+background=#339999
+
+[aragon]
+command=/home/bloodstalker/scripts/mushi.py --name ant
+interval=600
+label=ANT
+color=#ffffff
+background=#006666
+
+[cardano]
+command=/home/bloodstalker/scripts/mushi.py --name ada
+interval=600
+label=ADA
+color=#ffffff
+background=#006633
+
+[siacoin]
+command=/home/bloodstalker/scripts/mushi.py --name sc
+interval=600
+label=SC
+color=#ffffff
+background=#0066ff
+
+#[iota]
+#command=/home/bloodstalker/scripts/mushi.py --name iota
+#interval=600
+#label=IOTA
+#color=#000000
+#background=#33ffcc
+
+#[burst]
+#command=/home/bloodstalker/scripts/mushi.py --name burst
+#interval=600
+#label=BURST
+#color=#ffffff
+#background=#339933
+
+#[tronix]
+#command=/home/bloodstalker/scripts/mushi.py --name tronix
+#interval=600
+#label=TRX
+#color=#ffffff
+#background=#666699
+
+#[raiden]
+#command=~/scripts/hived --name raiden-network-token
+#interval=160
+#label=RDN
+#color=#ffffff
+#background=#0099ff
+
+#[filecoin]
+#command=~/scripts/hived --name fil
+#interval=160
+#label=FIL
+#color=#ffffff
+#background=#339933
+
+[memory]
+label=Mem
+separator=false
+interval=30
+background=#66ccff
+color=#111111
+
+[memory]
+label=Swap
+instance=swap
+separator=false
+interval=30
+background=#669966
+color=#111111
+
+[disk]
+label=Home
+#instance=/mnt/data
+interval=30
+background=#336699
+color=#ffffff
+
+[iface]
+#instance=wlan0
+color=#ffffff
+interval=10
+separator=false
+background=#009999
+
+[wifi]
+#instance=wlp3s0
+color=#ffffff
+background=#006699
+interval=10
+separator=false
+
+[bandwidth]
+label=Speed
+#instance=eth0
+color=#111111
+background=#0099ff
+interval=5
+
+# CPU usage
+#
+# The script may be called with -w and -c switches to specify thresholds,
+# see the script for details.
+[cpu_usage]
+label=CPU
+interval=10
+min_width=CPU: 100.00%
+color=#ffffff
+background=#009966
+#separator=false
+
+[load_average]
+label=Load
+interval=10
+color=#ffffff
+background=#336666
+
+[disk-io]
+command=~/i3blocks-contrib/disk-io/disk-io
+interval=persist
+markup=pango
+instance=/^sd[ab]/
+color=#ffffff
+background=#0066cc
+#WARN_COLOR="#FF0000"
+#SEPARATOR=/
+#PREFIX=
+#SUFFIX="B/s"
+#LABEL=
+#DT=5
+#MB_ONLY=0 #0 or 1
+#KB_ONLY=0 #0 or 1
+#WIDTH=4
+#MB_PRECISION=1
+#KB_PRECISION=0
+#REGEX=/^(s|h)d[a-zA-Z]+/
+#THRESHOLD=0
+
+# Battery indicator
+#
+# The battery instance defaults to 0.
+[battery]
+label=BAT
+label=⚡
+#instance=1
+interval=30
+color=#ffffff
+background=#336666
+
+# Date Time
+#
+[time]
+background=#006600
+color=#ffffff
+command=date '+%Y-%m-%d %H:%M:%S'
+interval=5
+
+[temperature]
+command=~/i3blocks-contrib/temperature/temperature
+label=Temp
+interval=10
+color=#ffffff
+background=#669999
+
+[volume]
+#label=Vol
+label=♪
+instance=Master
+#instance=PCM
+interval=once
+signal=10
+background=#0066ff
+color=#ffffff
+
+[mail]
+label=Mail
+command=~/i3blocks-contrib/email/email
+interval=60
+instance=gmail
+background=#336633
+color=#ffffff
+
diff --git a/.iredisrc b/.iredisrc
new file mode 100644
index 0000000..f46c4ce
--- /dev/null
+++ b/.iredisrc
@@ -0,0 +1,67 @@
+# vi: ft=dosini
+[main]
+# weather display raw redis response
+raw = False
+
+# iredis use a LRU strategy to store the completions, like keys, set members,
+# etc, this will set how many completions can iredis keep at most.
+completer_max = 300
+
+# Completion casing preference, options are: "lower", "upper", "auto"
+completion_casing = auto
+
+# if in newbie_mode, a description of commands and options will showup along
+# with completion, encourage to enable it to who is new to redis
+newbie_mode = True
+
+# show prompt in a ranibow color
+rainbow = False
+
+# retry times for connection error and timeout
+retry_times = 2
+
+socket_keepalive = True
+
+# IRedis support running shell command to parse the response, like this:
+# > get json-str | jq .
+# However that will allow any shell command to execute under iredis REPL,
+# you can disable this feature by setting this to False.
+# Default is True.
+shell = True
+
+# decode redis response, default None
+decode =
+
+# enable pager? defualt to True, you can disable it by changing it to False
+enable_pager = True
+
+# pager setting when line is too tall
+# By default 'PAGER' environment variable is used
+# pager = less -SRXF
+
+# iredis will send a `INFO` command to get the server's version, this option can
+# disable it
+no_info = True
+
+# iredis will show command hint on bottom bar, this option can disable it
+bottom_bar = True
+
+# Dangerous command warning mode will alert you before executing a dangerous
+# command, that may cause harm to the redis-server or hang server,
+# such as "KEYS", "DEL" or "SHUTDOWN".
+warning = True
+
+# IRedis log for debugging, leave this blank will disable log.
+# You don't need this unless you are debuging iredis.
+# Be careful this will log your commands input (include AUTH with password) to
+# log file.
+# eg. ~/.iredis.log
+log_location =
+
+# History file location
+history_location = ~/.iredis_history
+
+[alias_dsn]
+# example_dsn = redis://[[username]:[password]]@localhost:6379/0
+# example_dsn = rediss://[[username]:[password]]@localhost:6379/0
+# example_dsn = unix://[[username]:[password]]@/path/to/socket.sock?db=0
diff --git a/.kshrc b/.kshrc
new file mode 100644
index 0000000..d72e060
--- /dev/null
+++ b/.kshrc
@@ -0,0 +1,87 @@
+#!/usr/bin/env ksh
+
+set -o vi
+# set -o vi-tabcomplete
+# bind ^I=complete-list
+HISTFILE="$HOME/.ksh_history"
+HISTSIZE=5000
+
+alias ..="cd ../"
+alias ...="cd ../../"
+alias ....="cd ../../../"
+alias .....="cd ../../../../"
+alias ......="cd ../../../../../"
+alias ls="ls --color=tty"
+alias ll="ls -l"
+alias la="ls -a"
+alias lss="ls -sSA"
+alias ~="cd ~"
+
+alias quit="exit"
+alias xx="dtrx"
+alias mv="mv -i"
+alias cp="cp -i"
+alias df='df -h'
+alias digg="dig && clear"
+alias clean="clear"
+alias quit="exit"
+
+alias grep='grep --color=auto'
+alias egrep='egrep --color=auto'
+alias fgrep='fgrep --color=auto'
+
+function loginname {
+ echo $USER
+}
+
+PS1='$(echo -ne "\033[32m`loginname`@`hostname`:\033[00m";if [[ "${PWD#$HOME}" != "$PWD" ]] then; echo -ne "\033[34m~${PWD#$HOME}\033[00m"; else; echo -ne "\033[34m$PWD\033[00m";fi;echo -ne " >>> ")'
+
+function docpp {
+ cp ~/scripts/makefilecpp ./makefile
+ cp ~/scripts/c/main.cpp ./
+ cp ~/scripts/c/header.hpp ./
+ cp ~/scripts/.ycm_extra_config.py ./.ycm_extra_conf.py
+ cp ~/scripts/cfam.vimrc ./.vimrc
+ cp ~/scripts/compiler-explorer/ceconfig.json ./
+ cp ~/scripts/c/debug.dbg ./
+}
+
+function docc {
+ cp ~/scripts/makefilec ./makefile
+ cp ~/scripts/c/main.c ./
+ cp ~/scripts/.ycm_extra_config.py ./.ycm_extra_conf.py
+ cp ~/scripts/cfam.vimrc ./.vimrc
+ cp ~/scripts/compiler-explorer/ceconfig.json ./
+ cp ~/scripts/c/debug.dbg ./
+}
+
+function dig {
+ globalholecounter=0
+ if test "$(ls -A "/home/devi/devi/abbatoir")"; then
+ while [ 1 ]; do
+ if [ -d "/home/devi/devi/abbatoir/hole$globalholecounter" ]; then
+ # if its not empty
+ if test "$(ls -A "/home/devi/devi/abbatoir/hole$globalholecounter")"; then
+ :
+ # if its empty
+ else
+ cd /home/devi/devi/abbatoir/hole$globalholecounter
+ break
+ fi
+ else
+ mkdir /home/devi/devi/abbatoir/hole$globalholecounter
+ cd /home/devi/devi/abbatoir/hole$globalholecounter
+ echo $globalholecounter
+ break
+ fi
+ ((globalholecounter++))
+ done
+ else
+ mkdir /home/devi/devi/abbatoir
+ mkdir /home/devi/devi/abbatoir/hole$globalholecounter
+ cd /home/devi/devi/abbatoir/hole$globalholecounter
+ fi
+}
+
+export SHELL="ksh"
+export PATH=$PATH:/home/devi/scripts/bin
diff --git a/.mongorc.js b/.mongorc.js
new file mode 100644
index 0000000..43424dd
--- /dev/null
+++ b/.mongorc.js
@@ -0,0 +1,17 @@
+function prompt() {
+
+ var username = "";
+ var user = db.runCommand({
+ connectionStatus: 1
+ }).authInfo.authenticatedUsers[0];
+
+ if (!!user) {
+ username = user.user;
+ } else {
+ username = "anonymous";
+ }
+
+ var database = db.getName();
+
+ return `${username}:${database} >`;
+}
diff --git a/.muttrc b/.muttrc
new file mode 100644
index 0000000..7d884bd
--- /dev/null
+++ b/.muttrc
@@ -0,0 +1,253 @@
+set from = 'thabogre@gmail.com'
+set realname = 'farzad sadeghi'
+set imap_user = 'thabogre@gmail.com'
+source "gpg -d ~/scripts/imap.pass.gpg |"
+#set sidebar_visible = yes
+
+# macros
+macro index A "T~N<enter>;WNT~O<enter>;WO\CT~T<enter>” “mark all messages read"
+
+# REMOTE GMAIL FOLDERS
+set folder = 'imaps://imap.gmail.com:993'
+set spoolfile = '+Inbox'
+set postponed = '+Drafts'
+set record = '+Sent'
+set trash = '+Trash'
+
+# gives us all the mailboxes in the sidebar
+set imap_check_subscribed
+
+#LOCAL FOLDERS FOR CACHED HEADERS AND CERTIFICATES
+set header_cache = ~/.mutt/cache/headers
+#set header_cache =\home\bloodstalker\.mutt\cache\headers
+set message_cachedir = ~/.mutt/cache/bodies
+set certificate_file = ~/.mutt/certificates
+
+#SMTP SETTINGS
+set smtp_url = 'smtp://thabogre@smtp.gmail.com:587/'
+
+set editor = "vim"
+
+#SECURING
+set move = no
+set imap_keepalive = 900
+
+set timeout=30
+folder-hook gmail/important "color status J_black color136 "
+#set imap_list_subscribed=yes
+
+set sidebar_visible = yes
+set mail_check_stats = yes
+set sidebar_divider_char = ' |'
+set sidebar_visible = yes
+set sidebar_width = 40
+set sidebar_short_path = yes
+set sidebar_format = "%B%?F? [%F]?%* %?N?%N/?%S"
+set sidebar_folder_indent = yes
+set sidebar_indent_string = "...."
+
+#subscriptions
+subscribe ^cfe-dev@lists.llvm.org$
+subscribe ^llvm-dev@lists.llvm.org$
+subscribe -group lua lua-l@lists.lua.org
+subscribe -group cygwin cygwin@cygwin.com
+
+# for background in 16 color terminal, valid background colors include:
+# base03, bg, black, any of the non brights
+
+# style notes:
+# when bg=235, that's a highlighted message
+# normal bg=233
+
+# basic colors ---------------------------------------------------------
+# color normal brightyellow default
+color error color196 default # message line error text
+color tilde color81 default # vi-like tildes marking blank lines
+color message color82 default
+color markers brightcolor232 color222 # wrapped-line /^\+/ markers
+color attachment brightcolor165 default # attachment headers
+color search color232 color154 # search patterns in pager
+color status brightcolor232 color39
+color indicator brightcolor232 color33 # selected email in index
+color tree brightcolor165 default # arrow in threads (`-->')
+
+# basic monochrome screen
+mono bold bold
+mono underline underline
+mono indicator reverse
+mono error bold
+mono header bold "^(From|Subject|Date|To|Cc|Bcc):"
+mono quoted bold
+
+# index ----------------------------------------------------------------
+
+color index color160 default "~A" # all messages
+color index color166 default "~E" # expired messages
+color index color28 default "~N" # new messages
+color index color22 default "~O" # old messages
+color index color244 default "~R" # read messages
+color index color38 default "~Q" # messages that have been replied to
+color index color31 default "~U" # unread messages
+color index color29 default "~U~$" # unread, unreferenced messages
+color index color222 default "~v" # messages part of a collapsed thread
+color index color222 default "~P" # messages from me
+color index color39 default "~p!~F" # messages to me
+color index color39 default "~N~p!~F" # new messages to me
+color index color39 default "~U~p!~F" # unread messages to me
+color index color244 default "~R~p!~F" # messages to me
+color index brightcolor165 default "~F" # flagged messages
+color index brightcolor165 default "~F~p" # flagged messages to me
+color index brightcolor165 default "~N~F" # new flagged messages
+color index brightcolor165 default "~N~F~p" # new flagged messages to me
+color index brightcolor165 default "~U~F~p" # new flagged messages to me
+color index color232 color196 "!~N ~D" # deleted messages
+color index color232 color196 "~N ~D" # deleted new messages
+color index color244 default "~v~(!~N)" # collapsed thread with no unread
+color index color81 default "~v~(~N)" # collapsed thread with some unread
+color index color81 default "~N~v~(~N)" # collapsed thread with unread parent
+# statusbg used to indicated flagged when foreground color shows other status
+# for collapsed thread
+color index color160 default "~v~(~F)!~N" # collapsed thread with flagged, no unread
+color index color81 default "~v~(~F~N)" # collapsed thread with some unread & flagged
+color index color81 default "~N~v~(~F~N)" # collapsed thread with unread parent & flagged
+color index color81 default "~N~v~(~F)" # collapsed thread with unread parent, no unread inside, but some flagged
+color index color39 default "~v~(~p)" # collapsed thread with unread parent, no unread inside, some to me directly
+color index color81 color160 "~v~(~D)" # thread with deleted (doesn't differentiate between all or partial)
+color index color222 default "~T" # tagged messages
+color index brightcolor222 default "~T~F" # tagged, flagged messages
+color index brightcolor222 default "~T~N" # tagged, new messages
+color index brightcolor222 default "~T~U" # tagged, unread messages
+
+color index red default "~D(!~p|~p)" # deleted
+color index color111 default "~F" # flagged
+color index brightred default "~=" # duplicate messages
+color index color22 default "~A!~N!~T!~p!~Q!~F!~D!~P" # the rest
+color index brightgreen default "~A~N!~T!~p!~Q!~F!~D" # the rest, new
+color index black red "~D" # deleted messages
+color index yellow default "~(~N)" # messages in threads with some unread
+color index green default "~S" # superseded messages
+color index yellow default "~T" # tagged messages
+color index brightred red "~=" # duplicated messages
+
+# message headers ------------------------------------------------------
+
+color hdrdefault brightcolor222 default
+color header color27 default "^(To|Cc|Bcc)"
+color header color28 default "^(From)"
+color header color6 default "^(Date)"
+color header color22 default "^(Subject)"
+
+# body -----------------------------------------------------------------
+
+color quoted color39 default
+color quoted1 color165 default
+color quoted2 color35 default
+color quoted3 color222 default
+color quoted4 color166 default
+color quoted5 color108 default
+color quoted6 color105 default
+color quoted7 color100 default
+color quoted8 color39 default
+color quoted9 color31 default
+color signature color81 default # everything below /^--\s*$/
+
+color bold color255 default
+color underline color208 default
+color normal color244 default
+
+## pgp
+
+color body color160 default "(BAD signature)"
+color body color39 default "(Good signature)"
+color body color235 default "^gpg: Good signature .*"
+color body color241 default "^gpg: "
+color body color241 color160 "^gpg: BAD signature from.*"
+mono body bold "^gpg: Good signature"
+mono body bold "^gpg: BAD signature from.*"
+
+# yes, an insane URL regex
+color body brightcolor39 default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
+# and a heavy handed email regex
+color body brightcolor39 default "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])"
+
+# simplified regex for URL & email
+#color body magenta default "(ftp|https?|gopher|news|telnet|finger)://[^ \"\t\r\n]+"
+#color body magenta default "[-a-z_0-9.]+@[-a-z_0-9.]+"
+
+#highlight the mail subject and from in the body as well
+color body color28 default "(^Subject:.*$)"
+color body color27 default "(^From:.*$)"
+
+# _underline_
+color body blue default "(^|[[:space:][:punct:]])_[^_]+_([[:space:][:punct:]]|$)"
+mono body underline "(^|[[:space:][:punct:]])_[^_]+_([[:space:][:punct:]]|$)"
+# /italic/ (Sometimes gets directory names)
+color body blue default "(^|[[:space:][:punct:]])/[^/]+/([[:space:][:punct:]]|$)"
+mono body underline "(^|[[:space:][:punct:]])/[^/]+/([[:space:][:punct:]]|$)"
+
+# Color if the attachment is autoviewed
+color attach_headers brightgreen default "Autoview"
+
+# Color only the brackets around the headers
+color attach_headers brightyellow default "^\\[--"
+color attach_headers brightyellow default "--]$"
+
+# Color the mime type and the size
+color attach_headers green default "Type: [a-z]+/[a-z0-9\-]+"
+color attach_headers green default "Size: [0-9\.]+[KM]"
+
+# Color GPGME signature checks
+color attach_headers brightgreen default "Good signature from.*"
+color attach_headers brightred default "Bad signature from.*"
+color attach_headers brightred default "BAD signature from.*"
+color attach_headers brightred default "Note: This key has expired!"
+color attach_headers brightmagenta default "Problem signature from.*"
+color attach_headers brightmagenta default "WARNING: This key is not certified with a trusted signature!"
+color attach_headers brightmagenta default " There is no indication that the signature belongs to the owner."
+color attach_headers brightmagenta default "can't handle these multiple signatures"
+color attach_headers brightmagenta default "signature verification suppressed"
+color attach_headers brightmagenta default "invalid node with packet of type"
+###
+color index_collapsed blue default
+color index_date color31 default
+color index_label color196 default
+color index_number color63 default
+color index_size color37 default
+color index_tags color27 default
+#color index_subject color166 default
+#color index_tag color165 default
+###
+color prompt blue cyan
+
+color sidebar_divider brightcolor39 default
+color sidebar_flagged red default
+color sidebar_highlight color28 default
+color sidebar_indicator cyan default
+color sidebar_new color24 default
+color sidebar_ordinary color25 default
+color sidebar_spoolfile color38 default
+color sidebar_unread color99 default
+
+color progress white blue
+color index_flags default red '~F'
+# vi: ft=muttrc ts=4 sw=4 sts=4 et
+set status_format='-%r-NeoMutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? \
+Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---'
+set index_format='%4C %D %Z %{%b %d} %-15.15L (%?l?%4l&%4c?) %s'
+set sort=threads
+set sort_aux=last-date-received
+color status color39 default
+color status brightred white '(New|Del|Flag):[0-9]+'
+color status brightred default '\([^)]+/[^)]+\)'
+color status default default '\(threads/last-date-received\)'
+color status red default '\[([^]]+)\]' 1
+color status brightwhite default 'NeoMutt: ([^ ]+)' 1
+
+set mailcap_path = ~/.mutt/mailcap
+auto_view text/html
+
+#set pager_index_lines=10
+
+bind index,pager \CP sidebar-prev
+bind index,pager \CN sidebar-next
+bind index,pager \CO sidebar-open
diff --git a/.newsboat/config b/.newsboat/config
new file mode 100644
index 0000000..d9ba148
--- /dev/null
+++ b/.newsboat/config
@@ -0,0 +1,42 @@
+# colors
+#color background color255 color0
+#color listnormal color255 color0
+#color listfocus color255 color88 bold
+#color listnormal_unread color255 color0 bold
+#color listfocus_unread color255 color88 bold
+#color info color255 color31
+#color article color255 color0
+color listfocus green black bold
+color listnormal_unread green black
+color listfocus_unread green black bold
+color info green black bold
+color article white black
+
+
+# highlights
+#highlight article "^(Feed|Title|Link|Date|Author):.*$" color31 color0
+#highlight article "https?://[^ ]+" color9 color0 protect
+highlight article "^Feed:.*" color174 color237
+highlight article "^Title:.*" color223 color237 bold
+highlight article "^Author:.*" color114 color237
+highlight article "^Link:.*" color116 color237
+highlight article "^Date:.*" color223 color237
+highlight article "\\[[0-9][0-9]*\\]" color66 color237 bold
+highlight article "\\[image [0-9][0-9]*\\]" color109 color237 bold
+highlight article "\\[embedded flash: [0-9][0-9]*\\]" color66 color237 bold
+
+bind-key j next
+bind-key k prev
+bind-key j down article
+bind-key k up article
+
+highlight article "(^Feed:.*|^Title:.*|^Author:.*)" color75 default
+highlight article "(^Link:.*|^Date:.*)" color75 default
+highlight article "^Podcast Download URL:.*" color71 default
+highlight article "^Links:" white color240 underline
+highlight article "\\[[0-9][0-9]*\\]" color72 default bold
+highlight article "\\[image [0-9][0-9]*\\]" color72 default bold
+highlight article "\\[embedded flash: [0-9][0-9]*\\]" color72 default bold
+highlight article ":.*\\(link\\)$" color74 default
+highlight article ":.*\\(image\\)$" color74 default
+highlight article ":.*\\(embedded flash\\)$" color74 default
diff --git a/.newsboat/urls b/.newsboat/urls
new file mode 100644
index 0000000..8b758b0
--- /dev/null
+++ b/.newsboat/urls
@@ -0,0 +1,56 @@
+http://horriblesubs.info/rss.php?res=sd
+http://dark-world.ru/rss/albums/
+http://dark-world.ru/rss/compilations/
+https://www.reddit.com/r/CryptoCurrency.rss
+http://feeds.feedburner.com/abseilio
+https://hackaday.com/blog/feed/
+https://www.cyberciti.biz/atom/atom.xml
+
+# (Youtube)
+https://www.youtube.com/feeds/videos.xml?channel_id=UC-91UA-Xy2Cvb98deRXuggA "~Joshua Fluke"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC0Whg8Zz7TT1VSpWeCjghKg "~-sokoninaru-そこに鳴る"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC17mJJnvzAa_e9qQqLIfIeQ "~Semicolon&amp;Sons"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC2eYFnH61tmytImy1mTYvhA "~Luke_Smith"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC3M7l8ved_rYQ45AVzS0RGA "~The_Jimmy_Dore_Show"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC4QEH0BC7ZQMYIEmr1yAHfQ "~RomNex"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC4w1YQAJMWOz4qtxinq55LQ "~Level1Techs"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC4xKdmAXFh4ACyhpiQ_3qBw "~TechLead"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC5e__RG9K3cHrPotPABnrwg "~BoostCon"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC6ZMVdbuHN5S2Zcf3c2fAqQ "~Civillain"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC6gD8kk_Z_5bX2PcRk2fwDg "~Pagefire"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC79H1bXWDNodOD8_VtZd_DA "~Chilling_Tales_for_Dark_Nights"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC7YOGHUfC1Tb6E4pudI9STA "~Mental_Outlaw"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC8ENHE5xdFSwx71u3fDH5Xw "~ThePrimeagen"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC8W_AGkuup8MnCfU7PPOkAg "~WTFSexyHeadphones"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC9-y-6csu5WGm29I7JiwpnA "~Computerphile"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCD0y51PJfvkZNe3y3FR5riw "~Chyrosran22"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCJ6q9Ie29ajGqKApbLqfBOg "~Black_Hat"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCJMemx7yz_1QwXjHG_rXRhg "~MrCreepyPasta"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCMlGfpWw-RUdWX_JbLCukXg "~CppCon"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCOWcZ6Wicl-1N34H0zZe38w "~Level1Linux"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCQ-W1KE9EYfdxhL6S4twUNw "~The_Cherno"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCQN2DsjnYH60SFBIA6IkNwg "~STÖEK"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCQPmOWNza6PMesQaWWBEhJA "~Anabolic_Aliens"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCS5tt2z_DFvG7-39J3aE-bQ "~Life_of_Boris"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCS97tchJDq17Qms3cux8wcA "~Chrisatmachine"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCVHOgH4XEyYx-ZEaya1XqCQ "~Cryo_Chamber"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCVls1GmFKf6WlTraIb_IaJg "~DistroTube"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCWUxLYGeeIKxxioUqL54Q8g "~GP-_Penitentiary_Life_Wes_Watson"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw "~Linus_Tech_Tips"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCYyWrpcVU2PZlLohFaYOZUw "~The_Exploring_Series"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC_NSOckDnuypJK_FpCO6ogA "~SGtMarkIV"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UC_e39rWdkQqo5-LbiLiU10g "~The_Dark_Somnium"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCcZ_-5180OBED8NBkZgkRmQ "~Dr._Creepen"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCchBatdUMZoMfJ3rIzgV84g "~Viva_La_Dirt League"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCcmEL8JoDBE25gvCFkrqhcw "~TheVolgun"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCfhSB16X9MXhzSFe_H7XbHg "~Bryan_Jenks"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCgTNupxATBfWmfehv21ym-g "~Null_Byte"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCld68syR8Wi-GY_n4CaoJGA "~Brodie_Robertson"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCnK36WwcJDTEhyS7w3SQntg "~Creepy_Ghost_Stories"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCoJTOwZxbvq8Al8Qat2zgTA "~Kim_Iversen"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCorzANoC3fX9VVefJHM5wtA "~Nick_Janetakis"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCoxcjq-8xIDTYp3uz647V5A "~Numberphile"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCrmnnE3yzpAyAuX_hRqyLdg "~Software_Engineering_Institute_|_Carnegie_Mellon_University"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCyUBW72KU30dfAYWLVNZO8Q "~Stefan_Mischook"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCyp1gCHZJU_fGWFf2rtMkCg "~Numberphile2"_("youtube")
+https://www.youtube.com/feeds/videos.xml?channel_id=UCvEdeev3sZoxi5hMksZI4KA "~gotbletu"_("youtube")
diff --git a/.psqlrc b/.psqlrc
new file mode 100644
index 0000000..8e774e6
--- /dev/null
+++ b/.psqlrc
@@ -0,0 +1,29 @@
+\set QUIET 1
+
+/* prompts */
+\set PROMPT1 '\x1b[38;5;34m%n\x1b[0m@\x1b[38;5;39m%M\x1b[0m:\x1b[38;5;37m%> \x1b[38;5;69m%`date +%H:%M:%S` \x1b[38;5;4m[%/] \x1b[38;5;31m%x\x1b[38;5;104m%#\x1b[38;5;34m%R\n\x1b[38;5;28m>>>\x1b[0m'
+\set PROMPT2 '\x1b[38;5;39m%M\x1b[0m:\x1b[38;5;37m%> \x1b[38;5;34m%n\x1b[0m@\x1b[38;5;4m%/\x1b[38;5;34m%R \x1b[38;5;104m%# \n\x1b[38;5;28m>>>\x1b[0m'
+\set PROMPT3 '\x1b[38;5;38m>>>\x1b[0m'
+
+\pset null '[null]'
+\set COMP_KEYWORD_CASE upper
+\timing
+\x auto
+\set VERBOSITY verbose
+\set version 'SELECT version();'
+/* history options */
+\set HISTSIZE 2000
+\set HISTFILE ~/.psql_history- :DBNAME
+\set HISTCONTROL ignoredups
+
+
+\set ON_ERROR_STOP on
+\set ON_ERROR_ROLLBACK off
+
+\set COMP_KEYWORD_CASE upper
+
+\pset unicode_border_linestyle single
+\pset unicode_column_linestyle single
+\pset unicode_header_linestyle double
+
+\unset QUIET
diff --git a/.rainbow_config.json b/.rainbow_config.json
new file mode 100755
index 0000000..e0b53ba
--- /dev/null
+++ b/.rainbow_config.json
@@ -0,0 +1,43 @@
+{
+ "DISABLE_EXTENDED_TWEETS": false,
+ "HEARTBEAT_TIMEOUT": 120,
+ "IMAGE_ON_TERM": false,
+ "IMAGE_RESIZE_TO_FIT": false,
+ "THEME": "tomorrow_night",
+ "ASCII_ART": true,
+ "HIDE_PROMPT": false,
+ "PREFIX": "#owner#place#me#keyword",
+ "SEARCH_TYPE": "mixed",
+ "SEARCH_MAX_RECORD": 5,
+ "HOME_TWEET_NUM": 5,
+ "RETWEETS_SHOW_NUM": 5,
+ "CONVERSATION_MAX": 30,
+ "QUOTE_FORMAT": "#comment https://twitter.com/#owner/status/#tid",
+ "THREAD_META_LEFT": "(#id) #clock",
+ "THREAD_META_RIGHT": "#clock (#id)",
+ "THREAD_MIN_WIDTH": 20,
+ "NOTIFY_FORMAT": " #source_user #notify #clock",
+ "MESSAGES_DISPLAY": 5,
+ "TREND_MAX": 10,
+ "LIST_MAX": 5,
+ "ONLY_LIST": [],
+ "IGNORE_LIST": [],
+ "HISTORY_FILENAME": "completer.hist",
+ "IMAGE_SHIFT": 2,
+ "IMAGE_MAX_HEIGHT": 90,
+ "STREAM_DELAY": 0,
+ "USER_DOMAIN": "userstream.twitter.com",
+ "PUBLIC_DOMAIN": "stream.twitter.com",
+ "SITE_DOMAIN": "sitestream.twitter.com",
+ "FORMAT": {
+ "TWEET": {
+ "CLOCK_FORMAT": "%Y/%m/%d %H:%M:%S",
+ "DISPLAY": "\n #name #nick #clock \n \u267a:#rt_count \u2665:#fa_count id:#id via #client #fav\n #tweet"
+ },
+ "MESSAGE": {
+ "CLOCK_FORMAT": "%Y/%m/%d %H:%M:%S",
+ "DISPLAY": "\n #sender_name #sender_nick #to #recipient_name #recipient_nick :\n #clock message_id:#id\n #message"
+ }
+ },
+ "POCKET_SUPPORT": false
+}
diff --git a/.tmux.conf b/.tmux.conf
new file mode 100644
index 0000000..3fd013f
--- /dev/null
+++ b/.tmux.conf
@@ -0,0 +1,146 @@
+set -g @plugin 'tmux-plugins/tpm'
+set -g @plugin 'tmux-plugins/tmux-resurrect'
+set -g @plugin 'tmux-plugins/tmux-continuum'
+set -g @plugin 'soyuka/tmux-current-pane-hostname'
+set -g @plugin 'laktak/extrakto'
+set -g @plugin 'tmux-plugins/tmux-copycat'
+set -g @continuum-restore 'on'
+set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
+set -g @plugin 'tmux-plugins/tmux-online-status'
+# set -g @plugin 'tmux-plugins/tmux-sidebar'
+
+set -g focus-events on
+
+set -g default-command /usr/bin/zsh
+set -g default-shell /usr/bin/zsh
+set -g default-terminal "tmux-256color"
+
+set-option -g prefix C-a
+set -g status-interval 120
+set-option -g history-limit 10000
+set-option -g repeat-time 500
+
+#prefix highlight settings
+set -g @prefix_highlight_show_copy_mode 'on'
+set -g @prefix_highlight_copy_mode_attr 'fg=black,bg=yellow,bold'
+set -g @prefix_highlight_prefix_prompt 'Wait'
+set -g @prefix_highlight_copy_prompt 'Copy'
+set -g @prefix_highlight_output_suffix ''
+
+#online status options
+# set -g @online_icon "ok"
+# set -g @offline_icon "offline!"
+set -g @online_icon "#[bg=colour75 fg=colour22]#[bg=colour22] "
+set -g @offline_icon "#[bg=colour75 fg=colour1]#[bg=colour1] "
+
+#move/panes panes and windows
+# bind-key W choose-tree -Zw "swap-window -t '%%'"
+# bind-key P choose-tree -Zw "swap-pane -t '%%'"
+# bind-key C-M-w choose-tree -Zw "move-window -t '%%'"
+# bind-key C-M-p choose-tree -Zw "move-pane -t '%%'"
+# bind-key C-M-w command-prompt -p "Swap Current Window To? (e.g 3; 4; session_name:5)" "swap-window -t '%%'"
+# bind-key C-M-p command-prompt -p "Swap Current Pane To? (e.g 2.0; session_name:4.0)" "swap-pane -t '%%'"
+bind-key M-p command-prompt -p "Move Current Pane To? (e.g 3.1; session_name:6.0)" "move-window -t '%%'"
+bind-key M-w command-prompt -p "Move Current Window To? (e.g 3.1; session_name:6.0)" "move-pane -t '%%'"
+#swap panes around
+# bind-key -r -T prefix C-M-k select-pane -U \; swap-pane -t !
+# bind-key -r -T prefix C-M-j select-pane -D \; swap-pane -t !
+# bind-key -r -T prefix C-M-h select-pane -L \; swap-pane -t !
+# bind-key -r -T prefix C-M-l select-pane -R \; swap-pane -t !
+
+#to support nested tmux sessions for ssh workflows
+bind -T root F6 \
+ set prefix None \;\
+ set key-table off \;\
+ if -F '#{pane_in_mode}' 'send-keys -X cancel' \;\
+ refresh-client -S \;\
+
+bind -T off F6 \
+ set -u prefix \;\
+ set -u key-table \;\
+ refresh-client -S
+
+wg_is_keys_off="#[fg=colour15,bg=colour63,bold]#([ $(tmux show-option -qv key-table) = 'off' ] && echo 'OFF')#[fg=colour22] #{?#{pane_ssh_connected},#[fg=colour63 bg=colour24],#[fg=colour63 bg=colour31]}#[default]"
+
+#key bindings
+#do not use alt keybindings. because of the escape passed at the beginning of a alt keycode,
+#zsh's vim mode's escape becomes slow since tmux will have to wait on keybindings beginning with escape.
+bind | split-window -h
+bind - split-window -v
+bind -r k select-pane -U
+bind -r j select-pane -D
+bind -r h select-pane -L
+bind -r l select-pane -R
+# bind -n S-Right next-window
+# bind -n S-Left previous-window
+bind -n C-k next-window
+bind -n C-j previous-window
+# bind -n M-Up select-pane -U
+# bind -n M-Down select-pane -D
+# bind -n M-Left select-pane -L
+# bind -n M-Right select-pane -R
+bind -r C-k select-pane -U
+bind -r C-j select-pane -D
+bind -r C-h select-pane -L
+bind -r C-l select-pane -R
+setw -g mode-keys vi
+bind [ copy-mode
+bind -T copy-mode-vi 'v' send -X begin-selection
+bind -T copy-mode-vi 'y' send -X copy-selection-and-cancel
+#bind -T copy-mode-vi 'V' rectangle-toggle
+bind ] paste-buffer
+bind Space choose-buffer
+# bind C-l send-keys 'C-l'
+
+#move windows
+# bind-key -n C-S-Left swap-window -t -1
+# bind-key -n C-S-Right swap-window -t +1
+# bind-key -n M-S-j swap-window -t -1
+# bind-key -n M-S-k swap-window -t +1
+bind-key -n C-S-Left swap-window -t -1\; select-window -t -1
+bind-key -n C-S-Right swap-window -t +1\; select-window -t +1
+
+#unbindings -- these are reserved for vim use
+unbind Up
+unbind Down
+unbind Left
+unbind Right
+
+# Enable activity alerts.
+setw -g monitor-activity off
+set -g visual-activity off
+
+set -g pane-active-border-style fg='#669933'
+set -g pane-border-style fg='#0099ff'
+
+# message text
+set -g message-style bg='#44475a',fg='#8be9fd'
+
+#powerline
+set-option -g status on
+#set-option -g status-interval 2
+set-option -g status-justify "centre"
+set-option -g status-left-length 120
+set-option -g status-right-length 170
+
+# set-option -g status-left "#{prefix_highlight}$wg_is_keys_off#[fg=colour15 bg=colour22]#U@#H#[fg=colour22 bg=colour148]#(/home/devi/tmux-powerline/powerline.sh left)"
+# set-option -g status-right "#(/home/devi/tmux-powerline/powerline.sh right)#{online_status}"
+set-option -g status-left "#{prefix_highlight}$wg_is_keys_off#{?#{pane_ssh_connected},#[fg=colour15 bg=colour24],#[fg=colour15 bg=colour31]}#U@#H:#{pane_ssh_port}#{?#{pane_ssh_connected},#[fg=colour24 bg=colour61],#[fg=colour31 bg=colour61]}#(/home/devi/scripts/tmux/vcs_info.sh)"
+# set-option -g status-left "#{prefix_highlight}$wg_is_keys_off#{?#{pane_ssh_connected},#[fg=colour15 bg=colour31],#[fg=colour15 bg=colour24]}#[fg=colour15 bg=colour31]#U@#H:#{pane_ssh_port}#[fg=colour31 bg=colour61]#(/home/devi/scripts/tmux/vcs_info.sh)"
+set-option -g status-right "#(/home/devi/scripts/tmux/date.sh)#{online_status}"
+
+current_window_format="#{?window_zoomed_flag,#[fg=colour63#, bg=colour16]#[fg=colour63#, bg=colour16#, bold] Z #W #[fg=colour63#, bg=colour16],#[fg=colour255#, bg=colour16] #I #W #[fg=colour255#, bg=colour16]}"
+
+set-window-option -g window-status-current-format $current_window_format
+# set-window-option -g window-status-current-format "#[fg=colour255, bg=colour16]#[fg=colour255, bg=colour16] #I #W #[fg=colour255, bg=colour16]"
+set -g status-bg colour16
+set-window-option -g window-status-format "#[fg=colour32 bg=colour16]#[fg=colour255 bg=colour32]#I#[fg=colour32 bg=colour16]"
+set-window-option -g window-status-separator ""
+
+#run command on idle
+#set -g lock-after-time 300
+#set -g lock-command "cmatrix -C blue"
+bind-key e copy-mode \; send-keys "?Error" C-m
+
+#must be the last line
+run '~/.tmux/plugins/tpm/tpm'
diff --git a/.trash b/.trash
new file mode 100644
index 0000000..c9ee14b
--- /dev/null
+++ b/.trash
@@ -0,0 +1,15 @@
+TRASH_CAN=.TRASH
+IN_CASE_OF-FAILURE=PROTECT
+SHOULD-WARN=YES
+PROTECT_TRASH=YES
+IGNORE_EXTENSIONS=o;log
+IGNORE_HIDDEN=NO
+IGNORE_EDITOR_BACKUP=YES
+IGNORE-EDITOR-TEMPORARY=YES
+LIBTRASH_CONFIG_FILE_UNREMOVEABLE=YES
+TRASH_SYSTEM_ROOT=SYSTEM_ROOT
+UNREMOVABLE_DIRS=/bin;/boot;/dev;/etc;/lib;/sbin;/usr;/home/devi
+UNCOVER_DIRS=
+USER_TEMPORARY_DIRS=temp
+REMOVEABLE_MEDIA_NMOUNT_POINTS=
+EXCEPTIONS=/etc/mtab;/etc/resolv.conf;/etc/adjtime;/etc/upsstatus
diff --git a/.tvrc b/.tvrc
new file mode 100644
index 0000000..754c643
--- /dev/null
+++ b/.tvrc
@@ -0,0 +1,5 @@
+[DEFAULT]
+editor = vim
+extension = .md
+extensions = .md, .txt, .text, .markdown, .mdown, .mdwn, .mkdn, .mkd, .rst
+notes_dir = ~/Notes
diff --git a/.vimrc b/.vimrc
new file mode 100644
index 0000000..060987a
--- /dev/null
+++ b/.vimrc
@@ -0,0 +1,1308 @@
+let mapleader = " "
+let maplocalleader = ","
+set encoding=UTF-8
+set nocompatible
+set completeopt-=preview
+set completeopt+=popup
+set showmatch
+set list
+set hidden
+set tabstop=2
+set conceallevel=1
+set shiftwidth=2
+set shell=ksh
+set directory^=$HOME/.vim/tmp//
+set expandtab
+set smarttab
+set autoindent
+set autochdir
+set history=1000
+set cindent
+set complete=.,w,b,u,t,i
+set foldmethod=manual
+set nofoldenable
+set autoread
+set number
+set showtabline=0
+set numberwidth=5
+set laststatus=2
+set smartcase
+set more
+set lazyredraw
+set synmaxcol=800
+syntax sync minlines=64
+set ttyfast
+set relativenumber
+set wildignorecase
+" set wildmode=list:longest,full
+set wildignore+=*/tmp/*,*.so,*.swp,*.zip
+set wildmenu
+set confirm
+set magic
+set scrolloff=0
+set noerrorbells
+set novisualbell
+set t_vb=
+set tm=500
+set ai
+set si
+set wrap
+set linebreak
+set breakindent
+let &showbreak = '↪ '
+set tagbsearch
+set showfulltag
+set diffopt=internal,algorithm:patience
+set fillchars+=vert:\ " whitespace signifacant
+set secure
+set cursorline
+autocmd InsertLeave * set cursorline
+autocmd InsertEnter * set nocursorline
+set tags=./tags,tags;$HOME
+set spelllang=en_us,de_de
+set hlsearch
+set incsearch
+set ignorecase
+set smartcase
+set backspace=indent,eol,start
+" set cursorcolumn
+" set exrc
+set viminfo='100,\"500,:50,%,n~/.viminfo
+
+highlight clear Search
+let g:is_posix = 1
+
+set rtp+=~/.vim/bundle/Vundle.vim
+set rtp+=/usr/bin/fzf
+" set rtp+=/home/bloodstalker/extra/llvm-clang-4/build/bin/clangd
+" set rtp+=/usr/local/bin/pyls
+let g:polyglot_disabled = ['go.plugin']
+
+call vundle#begin()
+Plugin 'vim-airline/vim-airline'
+Plugin 'vim-airline/vim-airline-themes'
+Plugin 'mbbill/undotree'
+Plugin 'mhinz/vim-startify'
+Plugin 'ctrlpvim/ctrlp.vim'
+Plugin 'kh3phr3n/python-syntax'
+Plugin 'VundleVim/Vundle.vim'
+Plugin 'scrooloose/nerdtree'
+Plugin 'sickill/vim-pasta'
+Plugin 'adelarsq/vim-matchit'
+Plugin 'makerj/vim-pdf'
+Plugin 'Xuyuanp/nerdtree-git-plugin'
+Plugin 'vim-ctrlspace/vim-ctrlspace'
+Plugin 'mhinz/vim-signify'
+Plugin 'octol/vim-cpp-enhanced-highlight'
+Plugin 'vimwiki/vimwiki'
+Plugin 'flazz/vim-colorschemes'
+Plugin 'plasticboy/vim-markdown'
+Plugin 'neomutt/neomutt.vim'
+Plugin 'sngn/vim-i3blocks-syntax'
+Plugin 'rhysd/vim-wasm'
+Plugin 'nathanaelkane/vim-indent-guides'
+Plugin 'tomlion/vim-solidity'
+Plugin 'dense-analysis/ale'
+Plugin 'ekalinin/Dockerfile.vim'
+Plugin 'PotatoesMaster/i3-vim-syntax'
+Plugin 'chrisbra/NrrwRgn'
+Plugin 'kana/vim-arpeggio'
+Plugin 'easymotion/vim-easymotion'
+Plugin 'neovimhaskell/haskell-vim'
+Plugin 'majutsushi/tagbar'
+Plugin 'szw/vim-maximizer'
+Plugin 'chrisbra/csv.vim'
+Plugin 'Valloric/YouCompleteMe'
+Plugin 'vim-pandoc/vim-pandoc'
+Plugin 'vim-pandoc/vim-pandoc-syntax'
+Plugin 'elzr/vim-json'
+Plugin 'wellle/context.vim'
+Plugin 'ludovicchabant/vim-gutentags'
+Plugin 'skywind3000/gutentags_plus'
+Plugin 'stephpy/vim-yaml'
+Plugin 'unblevable/quick-scope'
+Plugin 'SirVer/ultisnips'
+Plugin 'honza/vim-snippets'
+Plugin 'chrisbra/Recover.vim'
+Plugin 'wellle/targets.vim'
+Plugin 'rhysd/git-messenger.vim'
+Plugin 'mhinz/vim-grepper'
+Plugin 'vim-utils/vim-troll-stopper'
+Plugin 'junegunn/limelight.vim'
+Plugin 'valloric/MatchTagAlways'
+Plugin 'junegunn/vim-peekaboo'
+Plugin 'tpope/vim-vinegar'
+Plugin 'tpope/vim-commentary'
+Plugin 'tpope/vim-rhubarb'
+Plugin 'rgrinberg/vim-ocaml'
+Plugin 'terryma/vim-multiple-cursors'
+Plugin 'kshenoy/vim-signature'
+Plugin 'Konfekt/vim-scratchpad'
+Plugin 'tmux-plugins/vim-tmux'
+Plugin 'rust-lang/rust.vim'
+Plugin 'tpope/vim-repeat'
+Plugin 'cespare/vim-toml'
+Plugin 'maralla/vim-toml-enhance'
+Plugin 'junegunn/fzf'
+Plugin 'junegunn/fzf.vim'
+Plugin 'chiel92/vim-autoformat'
+Plugin 'vim-scripts/ZoomWin'
+Plugin 'wakatime/vim-wakatime'
+Plugin 'terryma/vim-expand-region'
+Plugin 'tpope/vim-surround'
+Plugin 'vim-scripts/DoxyGen-Syntax'
+Plugin 'vim-scripts/DoxygenToolkit.vim'
+Plugin 'fatih/vim-go'
+Plugin 'tpope/vim-fugitive'
+Plugin 'junegunn/goyo.vim'
+Plugin 'amix/vim-zenroom2'
+Plugin 'raimon49/requirements.txt.vim'
+Plugin 'Shougo/vimproc.vim'
+Plugin 'rhysd/vim-llvm'
+Plugin 'rhysd/vim-gfm-syntax'
+Plugin 'haya14busa/is.vim'
+Plugin 'haya14busa/vim-asterisk'
+Plugin 'haya14busa/incsearch.vim'
+Plugin 'haya14busa/vim-edgemotion'
+Plugin 'lervag/vimtex'
+Plugin 'vim-utils/vim-man'
+Plugin 'ajh17/VimCompletesMe'
+Plugin 'ryanoasis/vim-devicons'
+Plugin 'sheerun/vim-polyglot'
+Plugin 'dbeniamine/cheat.sh-vim'
+Plugin 'lifepillar/pgsql.vim'
+Plugin 'tmux-plugins/vim-tmux-focus-events'
+Plugin 'congma/vim-compiler-checkbashisms'
+Plugin 'hsanson/vim-openapi'
+Plugin 'mattn/emmet-vim'
+Plugin 'hail2u/vim-css3-syntax'
+" Plugin 'skammer/vim-css-color'
+" Plugin 'christoomey/vim-tmux-navigator'
+" Plugin 'jelera/vim-javascript-syntax'
+" Plugin 'szymonmaszke/vimpyter'
+" Plugin 'puremourning/vimspector'
+" Plugin 'kana/vim-submode'
+" Plugin 'jaxbot/semantic-highlight.vim'
+" Plugin 'tpope/vim-capslock'
+" Plugin 'nanotech/jellybeans.vim'
+" Plugin 'tiagofumo/vim-nerdtree-syntax-highlight'
+" Plugin 'mattn/webapi-vim'
+" Plugin 'Townk/vim-autoclose'
+" Plugin 'tpope/vim-speeddating'
+" Plugin 'powerman/vim-plugin-AnsiEsc'
+" Plugin 'xolox/vim-misc'
+" Plugin 'liuchengxu/vista.vim'
+" Plugin 'metakirby5/codi.vim'
+" Plugin 'vim-scripts/tagexplorer.vim'
+" Plugin 'MattesGroeger/vim-bookmarks'
+" Plugin 'severin-lemaignan/vim-minimap'
+" Plugin 'ervandew/supertab'
+" Plugin 'Valloric/ListToggle'
+" Plugin 'neomake/neomake'
+" Plugin 'scrooloose/syntastic'
+" Plugin 'Yggdroot/hiPairs'
+" Plugin 'maxbrunsfeld/vim-yankstack'
+" Plugin 'gcmt/wildfire.vim'
+" Plugin 'luochen1990/rainbow'
+call vundle#end()
+filetype plugin indent on
+
+let g:gfm_syntax_enable_always = 0
+let g:gfm_syntax_enable_filetypes = ['markdown.gfm']
+autocmd BufRead,BufNew,BufNewFile README.md setlocal ft=markdown.gfm
+
+"jellybeans
+silent! colo jellybeans
+set background=dark
+let g:jellybeans_overrides = {
+\ 'Todo': { 'guifg': '000000', 'guibg': '00cc00',
+\ 'ctermfg': 'Black', 'ctermbg': 'Blue',
+\ 'attr': 'bold' },
+\ 'Comment': { 'guifg': '339966' },
+\ 'background': { "guibg": "000000", "ctermbg":"none"},
+\ 'StorageClass': {"guifg": '9966ff' },
+\ 'Exception': {"guifg": "99cc00"},
+\ "Ignore": {"guifg": "336699"},
+\ "SpecialComment": {"guifg": "009900"},
+\ "Macro": {"guifg": "0099cc"}
+\}
+let g:jellybeans_use_term_italics = 1
+
+"Disable Background Color Erase (BCE) so that color schemes
+"work properly when Vim is used inside tmux and GNU screen.
+if &term =~ '256color'
+ set t_ut=
+endif
+
+let g:cpp_class_scope_highlight = 1
+let g:cpp_member_variable_highlight = 1
+let g:cpp_class_decl_highlight = 1
+let g:cpp_experimental_template_highlight = 1
+let g:cpp_concepts_highlight = 1
+let g:cpp_posix_standard = 1
+
+hi Normal ctermbg=None
+
+function! s:shortenPath(path)
+ let l:result = []
+ let l:segments = split(a:path, "/")
+ if len(l:segments) - 1 > 0
+ let l:last_segment = l:segments[len(l:segments)-1]
+ for segment in l:segments
+ if l:segment == l:last_segment
+ call add(l:result, "/".l:segment)
+ else
+ call add(l:result, "/".l:segment[0])
+ endif
+ endfor
+ else
+ let l:result = ["none"]
+ endif
+ return join(l:result, "")
+endfunction
+
+"airline options
+let g:airline_powerline_fonts = 1
+let s:airline_custom_cwd = s:shortenPath(expand('%:p'))
+try
+ let g:airline#extensions#tabline#enabled = 1
+ let g:airline#extensions#tabline#left_sep = ' '
+ let g:airline#extensions#tabline#left_alt_sep = '|'
+ let g:airline#extensions#tabline#formatter = 'default'
+ let g:airline#extensions#ale#enabled = 1
+ let g:airline#extensions#branch#enabled = 1
+ let g:airline#extensions#xkblayout#enabled = 1
+catch
+endtry
+let g:airline_theme = 'jellybeans'
+function! Airline_Custom()
+ let l:spc = g:airline_symbols.space
+ let g:airline_section_z = airline#section#create([
+ \ 'windowswap',
+ \ s:shortenPath(getcwd())."  ",
+ \ '%3p%%'.l:spc,
+ \ 'linenr',
+ \ ':%3v'.l:spc,
+ \ '%5o',
+ \ '[%b][0x%B]'
+ \])
+endfunction
+autocmd user AirlineAfterInit call Airline_Custom()
+let g:XkbSwitchLib = '/usr/local/lib/libxkbswitch.so'
+let g:airline_exclude_preview = 1
+
+syntax on
+
+"n00b stuff
+nmap <Backspace> <Nop>
+nmap <Delete> <Nop>
+nmap <Left> <Nop>
+nmap <Down> <Nop>
+nmap <Up> <Nop>
+nmap <Right> <Nop>
+nmap <PageUp> <Nop>
+nmap <PageDown> <Nop>
+
+" imap <Backspace> <Nop>
+" imap <Delete> <Nop>
+imap <Left> <Nop>
+imap <Down> <Nop>
+imap <Up> <Nop>
+imap <Right> <Nop>
+imap <PageUp> <Nop>
+imap <PageDown> <Nop>
+"end of n00b stuff
+
+au BufRead,BufNewFile .i3blocks.conf set filetype=i3blocks
+au BufRead,BufNewFile *.zsh-theme set filetype=zsh
+au BufEnter,FileType cpp set syntax=cpp.doxygen
+au BufEnter,FileType c set syntax=cpp.doxygen
+"sets filetype for muttrc to neomuttrc not muttrc since i'm too lazy
+"to be bothered to change the name of my rc that i pass to neomutt
+au BufNewFile,BufRead .muttrc set filetype=neomuttrc
+au BufNewFile,BufRead,BufEnter *.toml set filetype=toml
+
+au BufNewFile,BufEnter *.s set ft=nasm
+au BufEnter,FileType *.wast set syntax=wast
+au BufEnter,FileType *.wat set syntax=wast
+au BufEnter,FileType *.uml set syntax=plantuml
+
+"python configs
+"PEP-8
+au BufNewFile,BufEnter *.py set tabstop=4
+au BufNewFile,BufEnter *.py set softtabstop=4
+au BufNewFile,BufEnter *.py set shiftwidth=4
+" au BufNewFile,BufEnter *.py set textwidth=79
+au BufNewFile,BufEnter *.py set expandtab
+au BufNewFile,BufEnter *.py set autoindent
+au BufNewFile,BufEnter *.py set fileformat=unix
+
+let python_highlight_all = 1
+
+"mapping fast keycodes
+"the key codes are for my build of st
+set timeoutlen=500 ttimeoutlen=100
+"Shift+F10
+set <F13>=[21;2~
+map <F13> <S-F10>
+map! <F13> <S-F10>
+"Shift+F9
+set <F14>=[20;2~
+map <F14> <S-F9>
+map! <F14> <S-F9>
+"Shift+F5
+set <F15>=[15;2~
+map <F15> <S-F5>
+map! <F15> <S-F5>
+"Shift+F1
+set <F16>=
+map <F16> <S-F1>
+map! <F16> <S-F1>
+"Shift+F2
+set <F17>=
+map <F17> <S-F2>
+map! <F17> <S-F2>
+"Shift+F11
+set <F18>=[23;2~
+map <F18> <S-F11>
+map! <F18> <S-F11>
+"Shift+F12
+set <F19>=[24;5~
+map <F19> <S-F12>
+map! <F19> <S-F12>
+"Ctrl+Del
+set <F20>=[3;5~
+map <F20> <C-Delete>
+map! <F20> <C-Delete>
+"Ctrl+Ins
+set <F21>=[2;5~
+map <F21> <C-Insert>
+map! <F21> <C-Insert>
+"Ctrl+PageDown
+set <F22>=[6;5~
+map <F22> <C-PageDown>
+map! <F22> <C-PageDown>
+"Ctrl+PageUp
+set <F23>=[5;5~
+map <F23> <C-PageUp>
+map! <F23> <C-PageUp>
+"Shift+Del
+set <F24>=[3;2~
+map <F24> <S-Delete>
+map! <F24> <S-Delete>
+
+"cnoremap help vert help
+map <F1> <Plug>(expand_region_shrink)
+map <F2> <Plug>(expand_region_expand)
+nnoremap <F3> :bp<CR>
+nnoremap <F4> :bn<CR>
+inoremap <F3> <ESC>:bp<CR>
+inoremap <F4> <ESC>:bn<CR>
+map <leader>w :w<CR>
+noremap <C-e> :q<cr>
+nnoremap <F7> :NERDTreeToggle<CR>
+nnoremap <F12> :UndotreeToggle<CR>
+nnoremap <F10> :vsp<cr>
+nnoremap <S-F10> :sp<cr>
+nnoremap <F5> :ContextToggle<CR>
+map <F8> :TagbarToggle<CR>
+augroup LatexAU
+ autocmd!
+ autocmd filetype tex map <F8> :VimtexTocToggle<CR>
+augroup END
+"reserved for tmux use
+map <F6> <nop>
+"messes up some other bindings
+"nmap Y y$
+nnoremap <S-Delete> :bd<CR>
+nnoremap <leader>c :call clearmatches()<CR>
+inoremap <c-i> <esc>I
+inoremap <c-e> <esc>A
+nnoremap <leader>t :bel term<CR>
+"execute current buffer
+nnoremap <leader>r :!%:p<CR>
+augroup GoLangRun
+ autocmd!
+ autocmd FileType go nmap <leader>r <Plug>(go-run)
+augroup end
+nnoremap <leader>cd :cd %:p:h<cr>
+"terminal vim wont do weird things when you paste things in
+set pastetoggle=<F11>
+nnoremap <leader>a :ALEToggle<CR>
+nnoremap <leader>u :GutentagsUpdate<CR>
+nnoremap <localleader>v :VimtexView<CR>
+
+nmap [q :col<CR>
+nmap ]q :cnew<CR>
+nmap [l :lol<CR>
+nmap ]l :lnew<CR>
+nmap ]c :cn<CR>
+nmap [c :cp<CR>
+
+function! GetBufferList()
+ redir =>buflist
+ silent! ls!
+ redir END
+ return buflist
+endfunction
+
+function! ToggleList(bufname, pfx)
+ let buflist = GetBufferList()
+ for bufnum in map(filter(split(buflist, '\n'), 'v:val =~ "'.a:bufname.'"'), 'str2nr(matchstr(v:val, "\\d\\+"))')
+ if bufwinnr(bufnum) != -1
+ exec(a:pfx.'close')
+ return
+ endif
+ endfor
+ if a:pfx == 'l' && len(getloclist(0)) == 0
+ echohl ErrorMsg
+ echo "Location List is Empty."
+ return
+ endif
+ let winnr = winnr()
+ exec(a:pfx.'open')
+ if winnr() != winnr
+ wincmd p
+ endif
+endfunction
+
+nmap <silent> <leader>l :call ToggleList("Location List", 'l')<CR>
+nmap <silent> <leader>q :call ToggleList("Quickfix List", 'c')<CR>
+
+" nmap <silent> <M-k> :wincmd k<CR>
+" nmap <silent> <M-j> :wincmd j<CR>
+" nmap <silent> <M-h> :wincmd h<CR>
+" nmap <silent> <M-l> :wincmd l<CR>
+
+"vim-tmux-navigator
+" let g:tmux_navigator_no_mappings = 1
+" let g:tmux_navigator_disable_when_zoomed = 1
+" let g:tmux_navigator_save_on_switch = 2
+
+" nnoremap <silent> <C-h> :TmuxNavigateLeft<cr>
+" nnoremap <silent> <C-j> :TmuxNavigateDown<cr>
+" nnoremap <silent> <C-k> :TmuxNavigateUp<cr>
+" nnoremap <silent> <C-l> :TmuxNavigateRight<cr>
+" nnoremap <silent> {Previous-Mapping} :TmuxNavigatePrevious<cr>
+
+"vim.session options
+let g:session_directory = "~/.vim/session"
+let g:session_autosave = "no"
+
+" NERDTree
+let g:NERDTreeGitStatusIndicatorMapCustom = {
+ \ "Modified" : "✹",
+ \ "Staged" : "✚",
+ \ "Untracked" : "✭",
+ \ "Renamed" : "➜",
+ \ "Unmerged" : "═",
+ \ "Deleted" : "✖",
+ \ "Dirty" : "✗",
+ \ "Clean" : "✔︎",
+ \ 'Ignored' : '☒',
+ \ "Unknown" : "?"
+ \ }
+"NERDTree File highlighting
+function! NERDTreeHighlightFile(extension, fg, bg)
+ exec 'autocmd filetype nerdtree highlight ' . a:extension .' ctermbg='. a:bg .' ctermfg='. a:fg
+ exec 'autocmd filetype nerdtree syn match ' . a:extension .' #^\s\+.*\.'. a:extension .'$#'
+endfunction
+
+augroup NerdTreeFileTypeHighlight
+ autocmd!
+ exec 'autocmd filetype nerdtree highlight csource ctermbg=none ctermfg=29'
+ exec 'autocmd filetype nerdtree syn match csource #^\s\+.*\.c$#'
+ exec 'autocmd filetype nerdtree highlight makef1 ctermbg=none ctermfg=98'
+ exec 'autocmd filetype nerdtree syn match makef1 #^\s\+.*makefile$#'
+ exec 'autocmd filetype nerdtree syn match makef1 #^\s\+.*Makefile$#'
+augroup END
+call NERDTreeHighlightFile('o', 146, 'none')
+call NERDTreeHighlightFile('a', 146, 'none')
+call NERDTreeHighlightFile('h', 29, 'none')
+call NERDTreeHighlightFile('cpp', 32, 'none')
+call NERDTreeHighlightFile('cc', 32, 'none')
+call NERDTreeHighlightFile('hpp', 32, 'none')
+call NERDTreeHighlightFile('makefile', 98, 'none')
+call NERDTreeHighlightFile('Makefile', 98, 'none')
+call NERDTreeHighlightFile('md', 27, 'none')
+call NERDTreeHighlightFile('yml', 27, 'none')
+call NERDTreeHighlightFile('config', 25, 'none')
+call NERDTreeHighlightFile('conf', 25, 'none')
+call NERDTreeHighlightFile('cfg', 25, 'none')
+call NERDTreeHighlightFile('json', 25, 'none')
+call NERDTreeHighlightFile('html', 23, 'none')
+call NERDTreeHighlightFile('py', 22, 'none')
+call NERDTreeHighlightFile('js', 202, 'none')
+call NERDTreeHighlightFile('lua', 39, 'none')
+call NERDTreeHighlightFile('sh', 63, 'none')
+call NERDTreeHighlightFile('make', 29, 'none')
+call NERDTreeHighlightFile('xml', 53, 'none')
+call NERDTreeHighlightFile('vim', 37, 'none')
+call NERDTreeHighlightFile('tex', 106, 'none')
+call NERDTreeHighlightFile('pdf', 160, 'none')
+call NERDTreeHighlightFile('tags', 75, 'none')
+call NERDTreeHighlightFile('ahk', 89, 'none')
+call NERDTreeHighlightFile('vimrc', 70, 'none')
+call NERDTreeHighlightFile('hs', 63, 'none')
+call NERDTreeHighlightFile('go', 33, 'none')
+call NERDTreeHighlightFile('txt', 131, 'none')
+call NERDTreeHighlightFile('uml', 69, 'none')
+call NERDTreeHighlightFile('so', 146, 'none')
+call NERDTreeHighlightFile('swp', 58, 'none')
+
+let NERDTreeDirArrows = 1
+let NERDTreeShowHidden=1
+highlight Directory ctermfg=28
+highlight Title ctermfg=36
+let NERDTreeShowLineNumbers = 1
+autocmd Filetype nerdtree setlocal relativenumber
+let g:DevIconsEnableFoldersOpenClose = 1
+let g:WebDevIconsUnicodeDecorateFolderNodes = 1
+let g:WebDevIconsOS = 'unix'
+
+"tagbar
+let g:tagbar_compact = 1
+let g:tagbar_show_linenumbers = 2
+let g:tagbar_width = 50
+highlight TagbarSignature ctermfg=DarkBlue
+"solidity ctags - by shuangjj
+let g:tagbar_type_solidity = {
+ \ 'ctagstype': 'solidity',
+ \ 'kinds' : [
+ \ 'c:contracts',
+ \ 'e:events',
+ \ 'f:functions',
+ \ 'm:mappings',
+ \ 'v:varialbes',
+ \ ]
+ \ }
+
+let g:tagbar_type_haskell = {
+ \ 'ctagsbin' : '/home/bloodstalker/.cabal/bin/hasktags',
+ \ 'ctagsargs' : '-x -c -o-',
+ \ 'kinds' : [
+ \ 'm:modules:0:1',
+ \ 'd:data: 0:1',
+ \ 'd_gadt: data gadt:0:1',
+ \ 't:type names:0:1',
+ \ 'nt:new types:0:1',
+ \ 'c:classes:0:1',
+ \ 'cons:constructors:1:1',
+ \ 'c_gadt:constructor gadt:1:1',
+ \ 'c_a:constructor accessors:1:1',
+ \ 'ft:function types:1:1',
+ \ 'fi:function implementations:0:1',
+ \ 'i:instance:0:1',
+ \ 'o:others:0:1'
+ \ ],
+ \ 'sro' : '.',
+ \ 'kind2scope' : {
+ \ 'm' : 'module',
+ \ 'c' : 'class',
+ \ 'd' : 'data',
+ \ 't' : 'type',
+ \ 'i' : 'instance'
+ \ },
+ \ 'scope2kind' : {
+ \ 'module' : 'm',
+ \ 'class' : 'c',
+ \ 'data' : 'd',
+ \ 'type' : 't',
+ \ 'instance' : 'i'
+ \ }
+ \ }
+
+let g:tagbar_type_javascript = {
+ \ 'ctagstype': 'javascript',
+ \ 'kinds': [
+ \ 'A:arrays',
+ \ 'P:properties',
+ \ 'T:tags',
+ \ 'O:objects',
+ \ 'G:generator functions',
+ \ 'F:functions',
+ \ 'C:constructors/classes',
+ \ 'M:methods',
+ \ 'V:variables',
+ \ 'I:imports',
+ \ 'E:exports',
+ \ 'S:styled components'
+ \ ]}
+
+"doxygentoolkit
+autocmd BufNewFile,BufRead,BufEnter *.sol let g:DoxygenToolkit_briefTag_pre="@dev "
+
+"open-pdf conf
+let g:pdf_convert_on_edit = 1
+let g:pdf_convert_on_read = 1
+
+"startify
+let g:session_autoload="no"
+
+"highlight groups
+hi def InterestingWord1 ctermfg=16 ctermbg=214
+hi def InterestingWord2 ctermfg=16 ctermbg=154
+hi def InterestingWord3 ctermfg=16 ctermbg=121
+hi def InterestingWord4 ctermfg=16 ctermbg=137
+hi def InterestingWord5 ctermfg=16 ctermbg=211
+hi def InterestingWord6 ctermfg=16 ctermbg=195
+hi def InterestingWord7 ctermfg=16 ctermbg=99
+hi def InterestingWord8 ctermfg=16 ctermbg=35
+hi def InterestingWord9 ctermfg=16 ctermbg=57
+hi def InterestingWord0 ctermfg=16 ctermbg=39
+
+"Steve Losh's highlight function
+function HighInterestingWord(n)
+ normal! mz
+ normal! "zyiw
+ let mid = 88888 + a:n
+ silent! call matchdelete(mid)
+ let pat = '\V\<' . escape(@z, '\') . '\>'
+ call matchadd("InterestingWord".a:n, pat, 1, mid)
+ normal! `z
+endfunction
+
+"multiple highlights
+nnoremap <silent> <leader>1 :call HighInterestingWord(1)<cr>
+nnoremap <silent> <leader>2 :call HighInterestingWord(2)<cr>
+nnoremap <silent> <leader>3 :call HighInterestingWord(3)<cr>
+nnoremap <silent> <leader>4 :call HighInterestingWord(4)<cr>
+nnoremap <silent> <leader>5 :call HighInterestingWord(5)<cr>
+nnoremap <silent> <leader>6 :call HighInterestingWord(6)<cr>
+nnoremap <silent> <leader>7 :call HighInterestingWord(7)<cr>
+nnoremap <silent> <leader>8 :call HighInterestingWord(8)<cr>
+nnoremap <silent> <leader>9 :call HighInterestingWord(9)<cr>
+nnoremap <silent> <leader>0 :call HighInterestingWord(0)<cr>
+
+"scratchpad
+let g:scratchpad_path = '.scratchpads'
+nmap <F9> <Plug>(ToggleScratchPad)
+
+let g:tagbar_type_rust = {
+ \ 'ctagstype' : 'rust',
+ \ 'kinds' : [
+ \'T:types,type definitions',
+ \'f:functions,function definitions',
+ \'g:enum,enumeration names',
+ \'s:structure names',
+ \'m:modules,module names',
+ \'c:consts,static constants',
+ \'t:traits',
+ \'i:impls,trait implementations',
+ \]
+ \}
+
+let g:tagbar_type_make = {
+ \ 'kinds':[
+ \ 'm:macros',
+ \ 't:targets'
+ \ ]
+\}
+
+let g:tagbar_type_go = {
+ \ 'ctagstype' : 'go',
+ \ 'kinds' : [
+ \ 'p:package',
+ \ 'i:imports:1',
+ \ 'c:constants',
+ \ 'v:variables',
+ \ 't:types',
+ \ 'n:interfaces',
+ \ 'w:fields',
+ \ 'e:embedded',
+ \ 'm:methods',
+ \ 'r:constructor',
+ \ 'f:functions'
+ \ ],
+ \ 'sro' : '.',
+ \ 'kind2scope' : {
+ \ 't' : 'ctype',
+ \ 'n' : 'ntype'
+ \ },
+ \ 'scope2kind' : {
+ \ 'ctype' : 't',
+ \ 'ntype' : 'n'
+ \ },
+ \ 'ctagsbin' : 'gotags',
+ \ 'ctagsargs' : '-sort -silent'
+\ }
+
+let g:tagbar_type_json = {
+ \ 'ctagstype' : 'json',
+ \ 'kinds' : [
+ \ 'o:objects',
+ \ 'a:arrays',
+ \ 'n:numbers',
+ \ 's:strings',
+ \ 'b:booleans',
+ \ 'z:nulls'
+ \ ],
+ \ 'sro' : '.',
+ \ 'scope2kind': {
+ \ 'object': 'o',
+ \ 'array': 'a',
+ \ 'number': 'n',
+ \ 'string': 's',
+ \ 'boolean': 'b',
+ \ 'null': 'z'
+ \ },
+ \ 'kind2scope': {
+ \ 'o': 'object',
+ \ 'a': 'array',
+ \ 'n': 'number',
+ \ 's': 'string',
+ \ 'b': 'boolean',
+ \ 'z': 'null'
+ \ },
+ \ 'sort' : 0
+ \ }
+
+let g:autofmt_autosave = 1
+
+"undotree
+"make sure to create the directory. vim wont do it itself
+set undolevels=1000
+if has("persistent_undo")
+ set undodir=~/.undodir/
+ set undofile
+endif
+let g:undotree_WindowLayout = 4
+
+"narrow region
+let g:nrrw_rgn_vert = 1
+let g:nrrw_rgn_resize_window = "relative"
+vnoremap <S-F5> :<C-U>NR<cr>
+
+"runs shell command, opens new buffer with syntax=nasm, prints command output
+command! -complete=shellcmd -nargs=+ Shell call s:RunShellCommand(<q-args>)
+function! s:RunShellCommand(cmdline)
+ echo a:cmdline
+ let expanded_cmdline = a:cmdline
+ for part in split(a:cmdline, ' ')
+ if part[0] =~ '\v[%#<]'
+ let expanded_part = fnameescape(expand(part))
+ let expanded_cmdline = substitute(expanded_cmdline, part, expanded_part, '')
+ endif
+ endfor
+ botright vnew
+ setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
+ call setline(3,substitute(getline(2),'.','=','g'))
+ execute '$read !'. expanded_cmdline
+ setlocal nomodifiable
+ set syntax=nasm
+ 1
+endfunction
+"vmap <S-F2> call RunShellCommand
+
+"by xolox
+function! s:get_visual_selection()
+ let [line_start, column_start] = getpos("'<")[1:2]
+ let [line_end, column_end] = getpos("'>")[1:2]
+ let lines = getline(line_start, line_end)
+ if len(lines) == 0
+ return ''
+ endif
+ let lines[-1] = lines[-1][: column_end - (&selection == 'inclusive' ? 1 : 2)]
+ let lines[0] = lines[0][column_start - 1:]
+ return join(lines, "\n")
+endfunction
+
+let s:compiler_explorer_std_c_hdrs = ["#include <assert.h>\r", "#include <complex.h>\r",
+ \"#include <ctype.h>\r","#include <errno.h>\r","#include <fenv.h>\r","#include <float.h>\r",
+ \"#include <inttypes.h>\r","#include <iso646.h>\r","#include <limits.h>\r","#include <locale.h>\r",
+ \"#include <math.h>\r","#include <setjmp.h>\r","#include <signal.h>\r","#include <stdalign.h>\r",
+ \"#include <stdarg.h>\r","#include <stdbool.h>\r","#include <stddef.h>\r",
+ \"#include <stdint.h>\r","#include <stdio.h>\r","#include <stdlib.h>\r","#include <stdnoreturn.h>\r",
+ \"#include <string.h>\r","#include <tgmath.h>\r","#include <time.h>\r","#include <uchar.h>\r",
+ \"#include <wchar.h>\r","#include <wctype.h>\r"]
+let s:compiler_explorer_std_cpp_hdrs = ["#include <algorithm>\r","#include <cstdlib>\r","#include <csignal>\r","#include <csetjmp>\r",
+ \"#include <cstdarg>\r","#include <typeinfo>\r","#include <typeindex>\r","#include <type_traits>\r",
+ \"#include <bitset>\r","#include <functional>\r","#include <utility>\r","#include <ctime>\r",
+ \"#include <chrono>\r","#include <cstddef>\r","#include <initializer_list>\r","#include <tuple>\r",
+ \"#include <new>\r","#include <memory>\r","#include <scoped_allocator>\r","#include <climits>\r",
+ \"#include <cfloat>\r","#include <cstdint>\r","#include <cinttypes>\r","#include <limits>\r",
+ \"#include <exception>\r","#include <stdexcept>\r","#include <cassert>\r","#include <system_error>\r",
+ \"#include <cerrno>\r","#include <cctype>\r","#include <cwctype>\r","#include <cstring>\r",
+ \"#include <cwchar>\r","#include <cuchar>\r","#include <string>\r","#include <array>\r",
+ \"#include <vector>\r","#include <deque>\r","#include <list>\r","#include <forward_list>\r",
+ \"#include <set>\r","#include <map>\r","#include <unordered_set>\r","#include <unordered_map>\r",
+ \"#include <stack>\r","#include <queue>\r","#include <algorithm>\r","#include <iterator>\r",
+ \"#include <cmath>\r","#include <complex>\r","#include <valarray>\r","#include <random>\r",
+ \"#include <numeric>\r","#include <ratio>\r","#include <cfenv>\r","#include <iosfwd>\r",
+ \"#include <ios>\r","#include <istream>\r","#include <ostream>\r","#include <iostream>\r",
+ \"#include <fstream>\r","#include <sstream>\r","#include <iomanip>\r",
+ \"#include <streambuf>\r","#include <cstdio>\r","#include <locale>\r","#include <clocale>\r",
+ \"#include <codecvt>\r","#include <regex>\r","#include <atomic>\r","#include <thread>\r",
+ \"#include <mutex>\r","#include <shared_mutex>\r","#include <future>\r","#include <condition_variable>\r"]
+"sends visual selection to compiler exlorer and gets the asm back
+
+"should probably change this to be the complete path and make the variable
+"glboal
+let s:compiler_explorer_config="/ceconfig.json"
+function! s:compiler_explorer()
+ let temp_file = tempname()
+ if &filetype == "c"
+ call writefile(s:compiler_explorer_std_c_hdrs, temp_file, "a")
+ elseif &filetype == "cpp"
+ call writefile(s:compiler_explorer_std_cpp_hdrs, temp_file, "a")
+ endif
+
+ let source_code = s:get_visual_selection()
+ call writefile(split(substitute(source_code, "\n", "\r", "g"), "\r"), temp_file, "a")
+ let current_buf_name = bufname("%")
+ botright vnew
+ setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
+ call setline(3,substitute(getline(2),'.','=','g'))
+ execute "$read!"."node"." "."~/scripts/compiler-explorer/main.js ".temp_file. " ". getcwd(0).s:compiler_explorer_config
+ setlocal nomodifiable
+ set syntax=nasm
+ 1
+endfunction
+command! -complete=shellcmd -nargs=0 CompilerExplorer call s:compiler_explorer()
+vmap <S-F9> :<C-U>CompilerExplorer<cr>
+
+"view the python docs for the word under cursor in a split window
+function! s:pythondoc()
+ let l:vword = expand("<cword>")
+ botright vnew
+ setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
+ execute ".!pydoc3 " . l:vword
+ setlocal nomodifiable
+ set syntax=man
+ 1
+endfunction
+command! -complete=shellcmd -nargs=0 PythonDoc call s:pythondoc()
+nnoremap <leader>h :<C-U>PythonDoc<cr>
+vnoremap <leader>h :<C-U>PythonDoc<cr>
+
+"ctrlp
+let g:ctrlp_map = '<c-p>'
+let g:ctrlp_cmd = 'CtrlP'
+let g:ctrlp_show_hidden = 1
+let g:ctrlp_root_markers = ['.root']
+if executable('rg')
+ set grepprg=rg\ --color=never
+ let g:ctrlp_user_command = 'rg %s --files --color=never --glob ""'
+ let g:ctrlp_use_caching = 0
+endif
+
+"supertab
+" let g:SuperTabSetDefaultCompletionType = "context"
+
+"snippets
+nnoremap ,cmain :1read $HOME/scripts/snippets/cmain.c<CR>
+nnoremap ,cppmain :1read $HOME/scripts/snippets/cppmain.cpp<CR>
+nnoremap ,pypy :1read $HOME/scripts/snippets/main.py<CR>
+nnoremap ,sh :1read $HOME/scripts/snippets/shebang.sh<CR>
+
+"highlights
+highlight Search ctermfg=White ctermbg=28 cterm=Bold
+highlight IncSearch ctermfg=White ctermbg=26 cterm=Bold
+highlight WildMenu ctermfg=15 ctermbg=22 cterm=Bold
+highlight CtrlSpaceStatus ctermfg=15 ctermbg=38
+highlight StatusLine ctermfg=16 ctermbg=22 cterm=bold
+highlight WarningMsg ctermbg=16 ctermfg=202
+highlight vimWarn ctermbg=16 ctermfg=202
+highlight vimBufnrWarn ctermbg=16 ctermfg=202
+" highlight airline_tabtype ctermbg=15 ctermfg=34
+
+"typos
+iab strign string
+iab pritn print
+iab retrun return
+iab return return
+iab fucntion function
+iab funciton function
+iab tehn then
+iab coutn count
+iab accoutn account
+iab applciation application
+
+"netrw
+let g:netrw_sort_by = 'date'
+let g:netrw_sort_direction = 'reverse'
+let g:netrw_banner = 0
+let g:netrw_liststyle = 3
+let g:netrw_browse_split = 1
+let g:netrw_winsize = 15
+let g:netrw_fastbrowse = 1
+let g:netrw_sort_by = 'name'
+let g:netrw_sort_direction = 'normal'
+
+"vimcompletesme
+let g:vcm_default_maps = 0
+autocmd FileType c,cpp let b:vcm_tab_complete = "omni"
+autocmd FileType lua let b:vcm_tab_complete = "omni"
+autocmd FileType python let b:vcm_tab_complete = "omni"
+autocmd FileType javasript let b:vcm_tab_complete = "omni"
+
+"sets the dictionary for autocompletion with <C-n> and <C-p> for the
+"filetypes
+set dictionary+=/usr/share/dict/words
+autocmd FileType markdown,text,vimwiki,tex setlocal complete+=k
+
+"fzf
+map <leader>f <Esc><Esc>:Files!<CR>
+let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.7 } }
+let g:fzf_colors =
+\ { 'fg': ['fg', 'Normal'],
+ \ 'bg': ['bg', 'Normal'],
+ \ 'hl': ['fg', 'Comment'],
+ \ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'],
+ \ 'bg+': ['bg', 'CursorLine', 'CursorColumn'],
+ \ 'hl+': ['fg', 'Statement'],
+ \ 'info': ['fg', 'PreProc'],
+ \ 'border': ['fg', 'Ignore'],
+ \ 'prompt': ['fg', 'Conditional'],
+ \ 'pointer': ['fg', 'Exception'],
+ \ 'marker': ['fg', 'Keyword'],
+ \ 'spinner': ['fg', 'Label'],
+ \ 'header': ['fg', 'Comment'] }
+
+"asterisk.vim, is.vim, incsearch.vim, edgemotion
+map * <Plug>(asterisk-*)
+map # <Plug>(asterisk-#)
+map g* <Plug>(asterisk-g*)
+map g# <Plug>(asterisk-g#)
+map z* <Plug>(asterisk-z*)
+map gz* <Plug>(asterisk-gz*)
+map z# <Plug>(asterisk-z#)
+map gz# <Plug>(asterisk-gz#)
+map / <Plug>(incsearch-forward)
+map ? <Plug>(incsearch-backward)
+map g/ <Plug>(incsearch-stay)
+" map <C-j> <Plug>(edgemotion-j)
+" map <C-k> <Plug>(edgemotion-k)
+
+let g:semanticTermColors = [27,33,2,3,4,5,6,7,25,9,10,34,12,13,14,15,16,125,124,19]
+
+"camelcase and snakecase motions
+"let g:camelchar = "A-Z"
+"let g:camelchar = "A-Z0-9"
+let g:camelchar = "A-Z0-9.,;:{([`'\"_"
+nnoremap <silent><C-h> :<C-u>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%^','bW')<CR>
+nnoremap <silent><C-l> :<C-u>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%$','W')<CR>
+inoremap <silent><C-h> <C-o>:call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%^','bW')<CR>
+inoremap <silent><C-l> <C-o>:call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%$','W')<CR>
+vnoremap <silent><C-h> :<C-U>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%^','bW')<CR>v`>o
+vnoremap <silent><C-l> <Esc>`>:<C-U>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%$','W')<CR>v`<o
+"auto-close these characters-wont work with paste set...obviously...
+inoremap " ""<left>
+inoremap ' ''<left>
+inoremap ` ``<left>
+inoremap ( ()<left>
+inoremap [ []<left>
+inoremap { {}<left>
+inoremap {<CR> {<CR>}<ESC>O
+inoremap {;<CR> {<CR>};<ESC>O
+
+"ultisnips
+let g:UltiSnipsExpandTrigger="<c-u>"
+" let g:UltiSnipsListSnippets="<c-y>"
+let g:UltiSnipsJumpForwardTrigger="<c-m>"
+let g:UltiSnipsJumpBackwardTrigger="<c-n>"
+
+"ycm
+" let g:ycm_auto_hover = ""
+nnoremap <leader>jc :YcmCompleter GoToDeclaration<CR>
+nnoremap <leader>jf :YcmCompleter GoToDefinition<CR>
+nnoremap <leader>jr :YcmCompleter GoToReferences<CR>
+nnoremap <leader>ji :YcmCompleter GoToInclude<CR>
+nnoremap <leader>jj :YcmCompleter GoTo<CR>
+nnoremap <leader>jt :YcmCompleter GoToType<CR>
+nnoremap <leader>gt :YcmCompleter GetType<CR>
+nnoremap <leader>gd :YcmCompleter GetDoc<CR>
+nnoremap <leader>rr :YcmCompleter RefactorRename<space>
+nmap <leader>D <plug>(YCMHover)
+let g:ycm_collect_identifiers_from_tags_files = 1
+let g:ycm_seed_identifiers_with_syntax = 1
+
+augroup YCMDocCFam
+ autocmd!
+ autocmd FileType c,cpp let b:ycm_hover = {
+ \ 'command': 'GetDoc',
+ \ 'syntax': &filetype
+ \ }
+augroup END
+augroup YCMDocJS
+ autocmd!
+ autocmd FileType javascript let b:ycm_hover = {
+ \ 'command': 'GetDoc',
+ \ 'syntax': &filetype
+ \ }
+augroup END
+augroup YCMDocPy
+ autocmd!
+ autocmd FileType python let b:ycm_hover = {
+ \ 'command': 'GetDoc',
+ \ 'syntax': &filetype
+ \ }
+augroup END
+augroup YCMDocGo
+ autocmd!
+ autocmd FileType go let b:ycm_hover = {
+ \ 'command': 'GetDoc',
+ \ 'syntax': &filetype
+ \ }
+augroup END
+
+let g:ycm_language_server = [
+ \ {'name': 'vim',
+ \ 'filetypes': [ 'vim' ],
+ \ 'cmdline': [ 'vim-language-server', '--stdio' ]
+ \ },
+ \ {
+ \ 'name': 'bash',
+ \ 'cmdline': [ 'bash-language-server' , 'start' ],
+ \ 'filetypes': [ 'sh', 'bash' ],
+ \ },
+ \]
+
+let g:qs_highlight_on_keys = ["f", "F", "t", "T"]
+
+let g:git_messenger_always_into_popup=v:true
+nmap <silent><Leader>gg :call setbufvar(winbufnr(popup_atcursor(split(system("git log -n 1 -L " . line(".") . ",+1:" . expand("%:p")), "\n"), { "padding": [1,1,1,1], "pos": "botleft", "wrap": 0 })), "&filetype", "git")<CR>
+
+"vim-haskell
+let g:haskell_enable_quantification = 1
+let g:haskell_enable_recursivedo = 1
+let g:haskell_enable_arrowsyntax = 1
+let g:haskell_enable_pattern_synonyms = 1
+let g:haskell_enable_typeroles = 1
+let g:haskell_enable_static_pointers = 1
+let g:haskell_backpack = 1
+let g:haskell_disable_TH = 0
+
+"vim-markdown
+let g:vim_markdown_strikethrough = 1
+
+"keeps track of the cursor in insert mode, pull it back by one so it appears
+"not to move when exiting insert
+let CursorColumnI = 0
+autocmd InsertEnter * let CursorColumnI = col('.')
+autocmd CursorMovedI * let CursorColumnI = col('.')
+autocmd InsertLeave * if col('.') != CursorColumnI | call cursor(0, col('.')+1) | endif
+
+"window resizing
+if bufwinnr(1)
+ nnoremap <right> <c-w>>
+ nnoremap <left> <c-w><
+ nnoremap <up> <c-w>-
+ nnoremap <down> <c-w>+
+endif
+
+"Tab navigation
+nnoremap <C-PageDown> :tabprevious<CR>
+nnoremap <C-PageUp> :tabnext<CR>
+nnoremap <C-Insert> :tabnew<CR>
+nnoremap <C-Delete> :tabclose<CR>
+inoremap <C-PageDown> <Esc>:tabprevious<CR>
+inoremap <C-PageUp> <Esc>:tabnext<CR>
+inoremap <C-Insert> <Esc>:tabnew<CR>
+inoremap <C-Delete> <Esc>:tabclose<CR>
+
+"copy and paste between different Vim instances
+nmap _Y :!echo ""> ~/.vi_tmp<CR><CR>:w! ~/.vi_tmp<CR>
+vmap _Y :w! ~/.vi_tmp<CR>
+nmap _P :r ~/.vi_tmp<CR>
+
+"gutentags
+let g:gutentags_generate_on_empty_buffer = 1
+let g:gutentags_plus_nomap = 1
+
+"run Vman for the word under the cursor
+map <leader>v <Plug>(Vman)
+autocmd Filetype man setlocal relativenumber
+
+"context
+let g:context_enabled = 0
+let g:context_add_mappings = 0
+let g:context_presenter = 'vim-popup'
+
+augroup AUSpell
+ autocmd!
+ autocmd FileType markdown,txt,vimwiki,tex set spell
+augroup END
+
+nnoremap <leader>b :Make<CR>
+command -nargs=* Make call s:make(<q-args>)
+
+let s:making = 0
+function s:make(args) abort
+ if s:making
+ if bufwinid(s:make_buf) == -1
+ "show making buffer
+ exe 'sbuffer' s:make_buf
+ wincmd p
+ else
+ "hide making buffer
+ exe printf('%d wincmd q', bufwinnr(s:make_buf))
+ endif
+ return
+ endif
+
+ "delete last result
+ if exists('s:make_buf') && bufexists(s:make_buf)
+ silent! exe 'bdelete' s:make_buf
+ endif
+
+ "spawn new make
+ let cmd = 'make'
+ if !empty(a:args)
+ let cmd.= ' ' . a:args
+ endif
+
+ let options = {'close_cb': function('s:make_callback'), 'term_rows': 10}
+ let s:make_buf = term_start(cmd, options)
+ let s:making = 1
+ wincmd p
+endfunction
+
+function s:make_callback(channel)
+ "look, you can not get buffer content directly here.
+ call timer_start(10, function('s:make_callback_impl'))
+endfunction
+
+function s:make_callback_impl(timer) abort
+ exe 'cgetbuffer' s:make_buf
+ "consider entry with num zero bufnr and lnum an error or warning
+ let qfl = filter(getqflist(), {k,v -> v.bufnr != 0 && v.lnum != 0})
+ if empty(qfl)
+ echo "make successful"
+ else
+ echohl WarningMsg
+ echom printf('found %d qf entries', len(qfl))
+ echohl None
+ endif
+ let s:making = 0
+endfunction
+
+"arpeggio mappings
+try
+ call arpeggio#map('i', '', 0, 'jk', '<Esc>')
+catch
+endtry
+
+let g:limelight_conceal_ctermfg = 240
+let g:limelight_default_coefficient = 0.7
+let g:limelight_paragraph_span = 1
+
+let g:goyo_width = 120
+let g:goyo_height = 85
+
+nnoremap <leader>ss :SignifyToggleHighligh<CR>
+let g:startify_files_number = 20
+let g:startify_custom_header = 'startify#pad(startify#fortune#boxed())'
+
+"ale
+let g:ale_linters_explicit = 1
+let g:ale_completion_enabled = 0
+let g:ale_warn_about_trailing_whitespace = 0
+let g:ale_disable_lsp = 1
+let g:ale_change_sign_column_color = 1
+let g:ale_fix_on_save = 1
+let g:ale_sign_column_always = 1
+augroup ALEJS
+ autocmd!
+ autocmd FileType javascript let b:ale_linters = {'javascript': ['eslint']}
+ autocmd FileType javascript let b:ale_fixers = {'javascript': ['prettier']}
+augroup END
+augroup ALEPY
+ autocmd!
+ autocmd FileType python let b:ale_linters = {'python': ['flake8']}
+ autocmd FileType python let b:ale_fixers = {'python': ['autopep8']}
+augroup END
+
+"latex
+let g:tex_flavor = 'latex'
+let g:vimtex_matchparen_enabled = 0
+let g:vimtex_view_method = 'zathura'
+
+"indent guide
+let g:indent_guides_guide_size = 1
+let g:indent_guides_start_level = 2
+let g:indent_guides_tab_guides = 0
+let g:indent_guides_enable_on_vim_startup = 1
+let g:indent_guides_exclude_filetypes = ['help', 'nerdtree', 'man', 'vimwiki', 'go']
+let g:indent_guides_default_mapping = 0
+
+"ctrlspace
+if executable("rg")
+ let g:CtrlSpaceGlobCommand = 'rg -l --color never -g ""'
+endif
+hi CtrlSpaceNormal ctermfg=36 ctermbg=NONE
+hi CtrlSpaceSelected ctermbg=27 ctermfg=15
+hi CtrlSpaceSearch ctermfg=25 ctermbg=NONE
+hi CtrlSpaceStatusLine ctermfg=99 ctermbg=NONE cterm=bold
+
+"vim-go
+let g:go_auto_sameids = 1
+let g:go_highlight_functions = 1
+let g:go_highlight_function_calls = 1
+let g:go_highlight_types = 1
+let g:go_highlight_operators = 1
+let g:go_highlight_function_parameters = 1
+" let g:go_highlight_variable_declarations = 1
+" let g:go_highlight_variable_assignments = 1
+let g:go_doc_popup_window = 1
+let g:go_code_completion_enabled = 0
+
+"easymotion
+hi EasyMotionTarget ctermbg=none ctermfg=22 cterm=bold
+hi EasyMotionShade ctermbg=none ctermfg=darkgrey
+hi EasyMotionTarget2First ctermbg=none ctermfg=33 cterm=bold
+hi EasyMotionTarget2Second ctermbg=none ctermfg=39 cterm=bold
+hi EasyMotionMoveHL ctermbg=green ctermfg=black
+hi EasyMotionIncSearch ctermbg=green ctermfg=black
+
+"maximizer
+let g:maximizer_set_default_mapping = 0
+nnoremap <silent><leader>z :MaximizerToggle!<CR>
+vnoremap <silent><leader>z :MaximizerToggle!<CR>gv
+inoremap <silent><leader>z <C-o>:MaximizerToggle!<CR>
+
+"pgsql
+let g:sql_type_default = 'pgsql'
+let b:sql_type_override='pgsql' | set ft=sql
+let g:pgsql_pl = ['python']
+
+" uses " register to keep last cursor position in buffers
+autocmd BufReadPost *
+ \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit'
+ \ | exe "normal! g`\""
+ \ | endif
+
+"checkbashism
+if executable("checkbashisms")
+ autocmd FileType sh compiler checkbashisms
+endif
+let g:checkbashisms_cwindow = 1
+let g:checkbashisms_onwrite = 1
+
+"css
+augroup VimCSS3Syntax
+ autocmd!
+ autocmd FileType css setlocal iskeyword+=-
+augroup END
+
+if has('cscope')
+ set cscopetag cscopeverbose
+
+ if has('quickfix')
+ set cscopequickfix=s-,c-,d-,i-,t-,e-
+ endif
+
+ cnoreabbrev <expr> csa ((getcmdtype() == ':' && getcmdpos() <= 4)? 'cs add' : 'csa')
+ cnoreabbrev <expr> csf ((getcmdtype() == ':' && getcmdpos() <= 4)? 'cs find' : 'csf')
+ cnoreabbrev <expr> csk ((getcmdtype() == ':' && getcmdpos() <= 4)? 'cs kill' : 'csk')
+ cnoreabbrev <expr> csr ((getcmdtype() == ':' && getcmdpos() <= 4)? 'cs reset' : 'csr')
+ cnoreabbrev <expr> css ((getcmdtype() == ':' && getcmdpos() <= 4)? 'cs show' : 'css')
+ cnoreabbrev <expr> csh ((getcmdtype() == ':' && getcmdpos() <= 4)? 'cs help' : 'csh')
+
+ command -nargs=0 Cscope cs add $VIMSRC/src/cscope.out $VIMSRC/src
+endif
+
+"this should be here at the end so nothing else could override it
+hi SpecialKey ctermbg=16
+hi Pmenu ctermbg=233
+hi SignColumn ctermbg=16
diff --git a/.vimshrc b/.vimshrc
new file mode 100644
index 0000000..f5a19b2
--- /dev/null
+++ b/.vimshrc
@@ -0,0 +1,10 @@
+alias ll="ls -l"
+alias lss="ls -sa"
+alias la="ls -a"
+alias clean="clear"
+alias quit="exit"
+alias ..="cd .."
+alias ...="cd ../.."
+alias ....="cd ../../.."
+alias .....="cd ../../../.."
+alias ......="cd ../../../../.."
diff --git a/.w3m/build.sh b/.w3m/build.sh
new file mode 100644
index 0000000..5b68f06
--- /dev/null
+++ b/.w3m/build.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+set -x
+set -e
+
+cd ~ && git clone https://github.com/tats/w3m && cd w3m && ./configure --with-ssl && sudo make install -j4
diff --git a/.w3m/cgi-bin/fzf_surfraw.cgi b/.w3m/cgi-bin/fzf_surfraw.cgi
new file mode 100755
index 0000000..de297c1
--- /dev/null
+++ b/.w3m/cgi-bin/fzf_surfraw.cgi
@@ -0,0 +1,6 @@
+#!/usr/bin/env sh
+
+PREFIX=$(surfraw -elvi | grep -v 'LOCAL\|GLOVAL'| fzf --algo=v2 -e | awk '{print $1}')
+if [ "$PREFIX" = "" ]; then exit;fi
+read -r -e -p " $PREFIX >>> Enter The Search Keyword: " INPUT
+surfraw -p "$PREFIX" "$INPUT" | xsel -p
diff --git a/.w3m/cgi-bin/fzf_surfraw_tmux.cgi b/.w3m/cgi-bin/fzf_surfraw_tmux.cgi
new file mode 100755
index 0000000..11516fd
--- /dev/null
+++ b/.w3m/cgi-bin/fzf_surfraw_tmux.cgi
@@ -0,0 +1,41 @@
+#!/usr/bin/env sh
+### _ _ _ _
+### __ _ ___ | |_| |__ | | ___| |_ _ _
+### / _` |/ _ \| __| '_ \| |/ _ \ __| | | |
+###| (_| | (_) | |_| |_) | | __/ |_| |_| |
+### \__, |\___/ \__|_.__/|_|\___|\__|\__,_|
+### |___/
+### https://www.youtube.com/user/gotbletu
+### https://lbry.tv/@gotbletu
+### https://twitter.com/gotbletu
+### https://github.com/gotbletu
+### gotbletu@gmail.com
+###
+### Author : gotbletu
+### Name : fzf_surfraw_tmux.cgi
+### Version : 0.2
+### Date : 2020-04-27
+### Description : interactive surfraw smart prefix search engine (mainly use within w3m web browser)
+### Depends On : surfraw fzf tmux gawk coreutils grep procps-ng
+### Video Demo : https://youtu.be/p5NZb8f8AHA
+### References : https://github.com/felipesaa/A-vim-like-firefox-like-configuration-for-w3m
+
+### Setup
+# vim ~/.w3m/keymap
+# keymap xs COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw_tmux.cgi ; GOTO /usr/lib/w3m/cgi-bin/goto_tmux_clipboard.cgi"
+# keymap XS COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw_tmux.cgi ; TAB_GOTO /usr/lib/w3m/cgi-bin/goto_tmux_clipboard.cgi"
+
+clear
+
+# select your elvi
+PREFIX=$(surfraw -elvi | grep -v 'LOCAL\|GLOBAL'| fzf -e | awk '{print $1}')
+
+# exit script if no elvi is selected (e.g hit ESC)
+if [ "$PREFIX" = "" ]; then exit; fi
+
+# get user input
+read -r -e -p " $PREFIX >> Enter Your Search Keyword: " INPUT
+
+# print proper url and copy to primary clipboard (aka highlighted clipboard) and tmux clipboard
+# surfraw -p "$PREFIX" "$INPUT" | xsel -p
+pidof tmux >/dev/null && tmux set-buffer "$(surfraw -p "$PREFIX" "$INPUT")"
diff --git a/.w3m/cgi-bin/goto_clipboard.cgi b/.w3m/cgi-bin/goto_clipboard.cgi
new file mode 100755
index 0000000..34eaa63
--- /dev/null
+++ b/.w3m/cgi-bin/goto_clipboard.cgi
@@ -0,0 +1,25 @@
+#!/usr/bin/env sh
+### __ _ _
+### / _| ___| (_)_ __ ___ ___ __ _ __ _
+###| |_ / _ \ | | '_ \ / _ \/ __|/ _` |/ _` |
+###| _| __/ | | |_) | __/\__ \ (_| | (_| |
+###|_| \___|_|_| .__/ \___||___/\__,_|\__,_|
+### |_|
+### https://github.com/felipesaa
+###
+### Author : felipesaa
+### Name : goto_clipboard.cgi
+### Version : 0.1
+### Date : 2018-09-30
+### Description : paste and go feature for w3m web browser using system clipboard (aka ctrl+v)
+### Depends On : w3m xsel
+### Video Demo : https://youtu.be/p5NZb8f8AHA
+### Source : https://github.com/felipesaa/A-vim-like-firefox-like-configuration-for-w3m
+### Install : put this script in /usr/lib/w3m/cgi-bin/
+
+#GOTO url in clipboard in current page. If the clipboard has a
+#"non url string/nothing" an blank page is shown.
+printf "%s\r\n" "W3m-control: GOTO $(xsel -ob)";
+#delete the buffer (element in history) created between the current page and
+#the searched page by calling this script.
+printf "W3m-control: DELETE_PREVBUF\r\n"
diff --git a/.w3m/cgi-bin/goto_clipboard_primary.cgi b/.w3m/cgi-bin/goto_clipboard_primary.cgi
new file mode 100755
index 0000000..a9b208e
--- /dev/null
+++ b/.w3m/cgi-bin/goto_clipboard_primary.cgi
@@ -0,0 +1,28 @@
+#!/usr/bin/env sh
+### _ _ _ _
+### __ _ ___ | |_| |__ | | ___| |_ _ _
+### / _` |/ _ \| __| '_ \| |/ _ \ __| | | |
+###| (_| | (_) | |_| |_) | | __/ |_| |_| |
+### \__, |\___/ \__|_.__/|_|\___|\__|\__,_|
+### |___/
+### https://www.youtube.com/user/gotbletu
+### https://twitter.com/gotbletu
+### https://github.com/gotbletu
+### gotbletu@gmail.com
+###
+### Author : gotbletu
+### Name : goto_clipboard_primary.cgi
+### Version : 0.1
+### Date : 2020-04-26
+### Description : paste and go feature for w3m web browser using system clipboard (primary aka shift+insert)
+### Depends On : w3m xsel
+### Video Demo : https://youtu.be/p5NZb8f8AHA
+### References : https://github.com/felipesaa/A-vim-like-firefox-like-configuration-for-w3m
+### Install : put this script in /usr/lib/w3m/cgi-bin/
+
+#GOTO url in clipboard in current page. If the clipboard has a
+#"non url string/nothing" an blank page is shown.
+printf "%s\r\n" "W3m-control: GOTO $(xsel -op)";
+#delete the buffer (element in history) created between the current page and
+#the searched page by calling this script.
+printf "W3m-control: DELETE_PREVBUF\r\n"
diff --git a/.w3m/cgi-bin/goto_tmux_clipboard.cgi b/.w3m/cgi-bin/goto_tmux_clipboard.cgi
new file mode 100755
index 0000000..fe91b57
--- /dev/null
+++ b/.w3m/cgi-bin/goto_tmux_clipboard.cgi
@@ -0,0 +1,28 @@
+#!/usr/bin/env sh
+### _ _ _ _
+### __ _ ___ | |_| |__ | | ___| |_ _ _
+### / _` |/ _ \| __| '_ \| |/ _ \ __| | | |
+###| (_| | (_) | |_| |_) | | __/ |_| |_| |
+### \__, |\___/ \__|_.__/|_|\___|\__|\__,_|
+### |___/
+### https://www.youtube.com/user/gotbletu
+### https://twitter.com/gotbletu
+### https://github.com/gotbletu
+### gotbletu@gmail.com
+###
+### Author : gotbletu
+### Name : goto_tmux_clipboard.cgi
+### Version : 0.1
+### Date : 2020-04-26
+### Description : paste and go feature for w3m web browser using tmux clipboard
+### Depends On : w3m tmux
+### Video Demo : https://youtu.be/p5NZb8f8AHA
+### References : https://github.com/felipesaa/A-vim-like-firefox-like-configuration-for-w3m
+### Install : put this script in /usr/lib/w3m/cgi-bin/
+
+#GOTO url in clipboard in current page. If the clipboard has a
+#"non url string/nothing" an blank page is shown.
+printf "%s\r\n" "W3m-control: GOTO $(tmux paste-buffer)";
+#delete the buffer (element in history) created between the current page and
+#the searched page by calling this script.
+printf "W3m-control: DELETE_PREVBUF\r\n"
diff --git a/.w3m/cgi-bin/restore_session.cgi b/.w3m/cgi-bin/restore_session.cgi
new file mode 100755
index 0000000..aa0ba41
--- /dev/null
+++ b/.w3m/cgi-bin/restore_session.cgi
@@ -0,0 +1,49 @@
+#!/usr/bin/env sh
+# AUTHOR: gotbletu (@gmail|twitter|youtube|github|lbry)
+# https://www.youtube.com/user/gotbletu
+# DESC: generate a script for your last w3m session then you can run script to restore all urls in new tabs
+# DEMO: https://youtu.be/qYhNJ3itqWw
+# DEPEND: coreutils gawk
+# CLOG: 2021-04-17 first draft, no option to jump to tab 1 at the moment
+# REQD: 1. Allow executable permissions and put script in ~/.w3m/cgi-bin/restore_session.cgi
+#
+# 2. Add binding to ~/.w3m/keymap
+#
+# ############################ Quit with confirmation request (QUIT)
+# keymap :q QUIT
+# keymap ZZ QUIT
+# ############################ Quit at once (EXIT)
+# keymap ZQ EXIT
+# ############################ Quit at once and save session
+# keymap Q COMMAND "EXTERN 'echo %s > ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; READ_SHELL ~/.w3m/cgi-bin/restore_session.cgi ; EXIT"
+#
+# 3. Add to ~/.bashrc or ~/.zshrc $PATH variable
+# [ -d "$HOME/.w3m/bin" ] && PATH="$HOME/.w3m/bin:$PATH"
+#
+# 4. To load w3m with the last session
+# $ w3mlastsession
+
+## ---------------------------------------------
+mkdir -p "$HOME/.w3m/bin"
+# location of generated script of last session
+RESTORE_SESSSION="$HOME/.w3m/bin/w3mlastsession"
+# add shell header
+echo "#!/usr/bin/env sh" > "$RESTORE_SESSSION"
+echo "torsocks w3m -graph \\" >> "$RESTORE_SESSSION"
+# remove dupes without sorting, add -N flag at beginning and append trailing slash to each url
+awk '!x[$0]++' "$HOME/.w3m/RestoreSession.txt" | while read -r line ; do echo "-N '$line' \\" >> "$RESTORE_SESSSION" ; done
+echo "2>/dev/null" >> "$RESTORE_SESSSION"
+chmod +x "$RESTORE_SESSSION"
+
+## OUTPUT SCRIPT FILE EXAMPLE ~/.w3m/bin/w3mlastsession
+## --------------------------------------------------
+## #!/usr/bin/env sh
+## w3m \
+## -N 'https://www.reddit.com/r/w3m/.mobile' \
+## -N 'https://www.reddit.com/r/commandline/.mobile' \
+## -N 'https://www.reddit.com/r/linux/.mobile' \
+## -N 'http://lite.cnn.com/en' \
+## -N 'https://raw.githubusercontent.com/tats/w3m/master/ChangeLog' \
+## -N 'https://github.com/gotbletu/shownotes' \
+## 2>/dev/null
+## --------------------------------------------------
diff --git a/.w3m/cgi-bin/restore_tab.cgi b/.w3m/cgi-bin/restore_tab.cgi
new file mode 100755
index 0000000..27b3316
--- /dev/null
+++ b/.w3m/cgi-bin/restore_tab.cgi
@@ -0,0 +1,10 @@
+#!/usr/bin/env sh
+
+TAB_RESTORE_LIMIT=30
+
+last_tab=$(tail -n 1 ~/.w3m/RestoreTab.txt);
+limit=$(tail -n $TAB_RESTORE_LIMIT ~/.w3m/RestoreTab.txt)
+other_tabs=$(printf "%s" "$limit" | head -n -1);
+printf "%s\r\n" "$other_tabs" > ~/.w3m/RestoreTab.txt;
+printf "%s\r\n" "W3m-control: GOTO $last_tab";
+printf "W3m-control: DELETE PREVBUF\r\n";
diff --git a/.w3m/config b/.w3m/config
new file mode 100644
index 0000000..eb09d3c
--- /dev/null
+++ b/.w3m/config
@@ -0,0 +1,155 @@
+tabstop 8
+indent_incr 4
+pixel_per_char 9
+pixel_per_line 19
+frame 0
+target_self 0
+open_tab_blank 0
+open_tab_dl_list 0
+display_link 1
+display_link_number 1
+decode_url 0
+display_lineinfo 1
+ext_dirlist 1
+dirlist_cmd file:///$LIB/dirlist.cgi
+use_dictcommand 1
+dictcommand file:///$LIB/w3mdict.cgi
+multicol 0
+alt_entity 0
+graphic_char 1
+display_borders 1
+fold_textarea 0
+display_ins_del 1
+ignore_null_img_alt 1
+view_unseenobject 1
+display_image 1
+pseudo_inlines 1
+auto_image 1
+max_load_image 4
+ext_image_viewer 0
+image_scale 100
+imgdisplay /usr/libexec/w3m/w3mimgdisplay
+image_map_list 0
+fold_line 0
+show_lnum 1
+show_srch_str 1
+label_topline 0
+nextpage_topline 0
+color 1
+basic_color terminal
+anchor_color blue
+image_color green
+form_color red
+mark_color cyan
+bg_color terminal
+active_style 1
+active_color cyan
+visited_anchor 1
+visited_color magenta
+pagerline 10000
+use_history 1
+history 100
+save_hist 1
+confirm_qq 1
+close_tab_back 0
+mark 0
+emacs_like_lineedit 0
+space_autocomplete 0
+vi_prec_num 0
+mark_all_pages 0
+wrap_search 0
+ignorecase_search 1
+use_mouse 1
+reverse_mouse 0
+relative_wheel_scroll 0
+relative_wheel_scroll_ratio 30
+fixed_wheel_scroll_count 5
+clear_buffer 1
+decode_cte 0
+auto_uncompress 0
+preserve_timestamp 1
+keymap_file keymap
+document_root
+personal_document_root
+cgi_bin /usr/local/libexec/w3m/cgi-bin
+index_file
+mime_types ~/.w3m/mime.types, /etc/mime.types
+mailcap ~/.w3m/mailcap, /etc/w3m/mailcap, /etc/mailcap
+urimethodmap ~/.w3m/urimethodmap, /etc/w3m/urimethodmap
+editor /bin/vi
+mailto_options 1
+mailer gnome-open mailto:%s
+extbrowser gnome-open
+extbrowser2
+extbrowser3
+extbrowser4
+extbrowser5
+extbrowser6
+extbrowser7
+extbrowser8
+extbrowser9
+bgextviewer 1
+use_lessopen 0
+passwd_file ~/.w3m/passwd
+disable_secret_security_check 0
+ftppasswd
+ftppass_hostnamegen 0
+pre_form_file ~/.w3m/pre_form
+siteconf_file ~/.w3m/siteconf
+user_agent
+no_referer 0
+accept_language en;q=1.0
+accept_encoding gzip, compress, bzip, bzip2, deflate
+accept_media text/html, text/*;q=0.5, image/*, audio/*, application/*
+argv_is_url 1
+retry_http 1
+default_url 1
+follow_redirection 10
+meta_refresh 1
+dns_order 0
+nntpserver
+nntpmode
+max_news 50
+use_proxy 1
+http_proxy
+https_proxy
+ftp_proxy
+no_proxy
+noproxy_netaddr 0
+no_cache 0
+ssl_forbid_method
+ssl_verify_server 1
+ssl_cert_file
+ssl_key_file
+ssl_ca_path /etc/pki/tls/certs/
+ssl_ca_file
+use_cookie 1
+show_cookie 0
+accept_cookie 1
+accept_bad_cookie 0
+cookie_reject_domains
+cookie_accept_domains
+cookie_avoid_wrong_number_of_dots
+display_charset UTF-8
+document_charset UTF-8
+auto_detect 2
+system_charset UTF-8
+follow_locale 1
+ext_halfdump 0
+use_wide 1
+use_combining 1
+east_asian_width 0
+use_language_tag 1
+ucs_conv 1
+pre_conv 0
+search_conv 1
+fix_width_conv 1
+use_gb12345_map 0
+use_jisx0201 0
+use_jisc6226 0
+use_jisx0201k 0
+use_jisx0212 0
+use_jisx0213 0
+strict_iso2022 1
+gb18030_as_ucs 0
+simple_preserve_space 0
diff --git a/.w3m/keymap b/.w3m/keymap
new file mode 100644
index 0000000..c78c782
--- /dev/null
+++ b/.w3m/keymap
@@ -0,0 +1,132 @@
+# A sample of ~/.w3m/keymap (default)
+#
+# Ctrl : C-, ^
+# Escape: ESC-, M-, ^[
+# Space : SPC, ' '
+# Tab : TAB, ^i, ^I
+# Delete: DEL, ^?
+# Up : UP, ^[[A
+# Down : DOWN, ^[[B
+# Right : RIGHT, ^[[C
+# Left : LEFT, ^[[D
+
+# Page/Cursor motion
+keymap C-f NEXT_PAGE
+keymap C-b PREV_PAGE
+keymap l MOVE_RIGHT
+keymap h MOVE_LEFT
+keymap j MOVE_DOWN
+keymap k MOVE_UP
+keymap < SHIFT_LEFT
+keymap > SHIFT_RIGHT
+keymap 0 LINE_BEGIN
+keymap $ LINE_END
+keymap Z CENTER_H
+keymap zz CENTER_V
+keymap gg GOTO_LINE
+keymap gg BEGIN
+keymap G END
+keymap w NEXT_WORD
+keymap b PREV_WORD
+keymap TAB NEXT_LINK
+keymap ESC-TAB PREV_LINK
+keymap u UNDO
+keymap C-r REDO
+keymap :L LIST_MENU
+
+# Hyperlink operation
+keymap M MARK_WORD
+# keymap M MARK_URL
+keymap C-t TAB_LINK
+keymap C-s SAVE_LINK
+keymap V VIEW_IMAGE
+# keymap V PEEK_IMG
+keymap i INFO
+
+keymap ESC-i SAVE_IMAGE
+keymap p PEEK_LINK
+keymap C-g LINE_INFO
+keymap O EXTERN_LINK
+
+# File/Stream operation
+keymap o GOTO
+keymap O TAB_GOTO
+keymap @ READ_SHELL
+keymap # PIPE_SHELL
+keymap | PIPE_BUF
+
+# Buffer operation
+keymap B BACK
+keymap L NEXT
+keymap H PREV
+keymap S SELECT_MENU
+keymap ESC-s SAVE
+keymap v VIEW
+keymap P PRINT
+keymap E EDIT
+keymap ESC-e EDIT_SCREEN
+keymap r RELOAD
+keymap ESC-r RESHAPE
+
+# Tab operation
+keymap C-p PREV_TAB
+keymap C-n NEXT_TAB
+keymap t NEW_TAB
+keymap T TAB_MENU
+keymap d CLOSE_TAB
+
+keymap ESC-b VIEW_BOOKMARK
+keymap ESC-a ADD_BOOKMARK
+
+# Search
+keymap / ISEARCH
+keymap ? ISEARCH_BACK
+keymap n SEARCH_NEXT
+keymap N SEARCH_PREV
+
+# Dictionay look-up
+keymap ESC-w DICT_WORD
+keymap ESC-W DICT_WORD_AT
+
+# Mark operation
+keymap m MARK
+keymap ] NEXT_MARK
+keymap [ PREV_MARK
+keymap \" REG_MARK
+
+# bookmark operation
+keymap ESC-b VIEW_BOOKMARK
+keymap ESC-a ADD_BOOKMARK
+
+# Misc operation
+keymap \\ MENU
+keymap :H HELP
+keymap :O OPTIONS
+keymap ESC-k COOKIE
+keymap ESC-h HISTORY
+keymap ESC-c COMMAND
+keymap ! EXEC_SHELL
+keymap ESC-z INTERRUPT
+keymap C CHARSET
+
+keymap :q EXIT
+keymap Q COMMAND "EXTERN 'echo %s > ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; NEXT_TAB ; EXTERN 'echo %s >> ~/.w3m/RestoreSession.txt' ; READ_SHELL ~/.w3m/cgi-bin/restore_session.cgi ; EXIT"
+
+# external stuff
+keymap SPC-r COMMAND "SHELL 'readable $W3M_URL -p html-title,html-content > /tmp/readable.html'; LOAD /tmp/readable.html"
+keymap xt COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw_tmux.cgi ; GOTO /usr/local/libexec/w3m/cgi-bin/goto_tmux_clipboard.cgi"
+keymap XT COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw_tmux.cgi ; TAB_GOTO /usr/local/libexec/w3m/cgi-bin/goto_tmux_clipboard.cgi"
+# keymap xs COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw.cgi ; GOTO /usr/local/libexec/w3m/cgi-bin/goto_clipboard.cgi"
+keymap xs COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw.cgi ; GOTO /usr/local/libexec/w3m/cgi-bin/goto_clipboard_primary.cgi"
+keymap XS COMMAND "SHELL ~/.w3m/cgi-bin/fzf_surfraw.cgi ; TAB_GOTO /usr/local/libexec/w3m/cgi-bin/goto_clipboard_primary.cgi"
+# keymap XS COMMAND "SHELL /home/bloodstalker/scripts/bin/fzf_surfraw ; TAB_GOTO /home/bloodstalker/scripts/bin/goto_clipboard.cgi"
+# keymap xs COMMAND "SHELL /home/bloodstalker/scripts/bin/fzf_surfraw"
+keymap go COMMAND "SHELL /usr/local/libexec/w3m/cgi-bin/goto_clipboard.cgi"
+# keymap XS COMMAND "SHELL /home/bloodstalker/scripts/bin/fzf_surfraw; TAB_GOTO /home/bloodstalker/scripts/bin/goto_clipboard.cgi"
+#
+keymap d COMMAND "EXTERN 'echo %s >> ~/.w3m/RestoreTab.txt' ; CLOSE_TAB"
+keymap u TAB_GOTO /usr/local/libexec/w3m/cgi-bin/restore_tab.cgi
+
+keymap SPC-m CURSOR_MIDDLE
+keymap SPC-l CURSOR_BOTTOM
+keymap SPC-h CURSOR_TOP
diff --git a/.ycm_extra_config.py b/.ycm_extra_config.py
new file mode 100644
index 0000000..5ce9a48
--- /dev/null
+++ b/.ycm_extra_config.py
@@ -0,0 +1,99 @@
+# Partially stolen from https://bitbucket.org/mblum/libgp/src/2537ea7329ef/.ycm_extra_conf.py
+import os
+import ycm_core
+
+# These are the compilation flags that will be used in case there's no
+# compilation database set (by default, one is not set).
+# CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR.
+flags = [
+ '-Wall',
+ '-Wextra',
+ #'-Werror',
+ '-Wno-long-long',
+ '-Wno-variadic-macros',
+ '-fexceptions',
+ # THIS IS IMPORTANT! Without a "-std=<something>" flag, clang won't know which
+ # language to use when compiling headers. So it will guess. Badly. So C++
+ # headers will be compiled as C headers. You don't want that so ALWAYS specify
+ # a "-std=<something>".
+ # For a C project, you would set this to something like 'c99' instead of
+ # 'c++11'.
+ '-std=c++14',
+ # ...and the same thing goes for the magic -x option which specifies the
+ # language that the files to be compiled are written in. This is mostly
+ # relevant for c++ headers.
+ # For a C project, you would set this to 'c' instead of 'c++'.
+ '-x', 'c++',
+ # This path will only work on OS X, but extra paths that don't exist are not
+ # harmful
+ '-isystem', '/System/Library/Frameworks/Python.framework/Headers',
+ '-isystem', '/usr/local/include',
+ '-isystem', '/usr/local/include/eigen3',
+ '-I', 'include',
+ '-I.',
+]
+
+# Set this to the absolute path to the folder (NOT the file!) containing the
+# compile_commands.json file to use that instead of 'flags'. See here for
+# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html
+#
+# Most projects will NOT need to set this to anything; you can just change the
+# 'flags' list of compilation flags. Notice that YCM itself uses that approach.
+compilation_database_folder = ''
+
+if compilation_database_folder:
+ database = ycm_core.CompilationDatabase( compilation_database_folder )
+else:
+ database = None
+
+
+def DirectoryOfThisScript():
+ return os.path.dirname( os.path.abspath( __file__ ) )
+
+
+def MakeRelativePathsInFlagsAbsolute( flags, working_directory ):
+ if not working_directory:
+ return list( flags )
+ new_flags = []
+ make_next_absolute = False
+ path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ]
+ for flag in flags:
+ new_flag = flag
+
+ if make_next_absolute:
+ make_next_absolute = False
+ if not flag.startswith( '/' ):
+ new_flag = os.path.join( working_directory, flag )
+
+ for path_flag in path_flags:
+ if flag == path_flag:
+ make_next_absolute = True
+ break
+
+ if flag.startswith( path_flag ):
+ path = flag[ len( path_flag ): ]
+ new_flag = path_flag + os.path.join( working_directory, path )
+ break
+
+ if new_flag:
+ new_flags.append( new_flag )
+ return new_flags
+
+
+def FlagsForFile( filename ):
+ if database:
+ # Bear in mind that compilation_info.compiler_flags_ does NOT return a
+ # python list, but a "list-like" StringVec object
+ compilation_info = database.GetCompilationInfoForFile( filename )
+ final_flags = MakeRelativePathsInFlagsAbsolute(
+ compilation_info.compiler_flags_,
+ compilation_info.compiler_working_dir_ )
+ else:
+ # relative_to = DirectoryOfThisScript()
+ relative_to = os.path.dirname(os.path.abspath(filename))
+ final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to )
+
+ return {
+ 'flags': final_flags,
+ 'do_cache': True
+ }
diff --git a/.zshrc b/.zshrc
new file mode 100644
index 0000000..9e2ab4d
--- /dev/null
+++ b/.zshrc
@@ -0,0 +1,392 @@
+# Path to your oh-my-zsh installation.
+ export ZSH=/home/bloodstalker/.oh-my-zsh
+
+ZSH_THEME="devi"
+
+COMPLETION_WAITING_DOTS="true"
+
+plugins=(git svn zsh-syntax-highlighting autojump virtualenv virtualenvwrapper cargo nvm npm docker rustup zle-vi-visual zsh-autosuggestions zsh-kubectl-prompt kubectl docker-compose)
+
+export PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/home/bloodstalker/.local/bin:/home/bloodstalker/bin"
+
+source $ZSH/oh-my-zsh.sh
+
+[[ -s /home/bloodstalker/.autojump/etc/profile.d/autojump.sh ]] && source /home/bloodstalker/.autojump/etc/profile.d/autojump.sh
+autoload -U compinit && compinit -u
+
+alias devihome=/home/bloodstalker/devi/hell
+alias devihome1=/home/bloodstalker/devi/hell1
+alias devihome2=/home/bloodstalker/devi/hell2
+alias devihome3=/home/bloodstalker/devi/hell3
+alias "$SHELL"="echo $SHELL"
+#alias clang="/home/bloodstalker/llvm/llvm/build/bin/clang"
+#alias clang++="/home/bloodstalker/llvm/llvm/build/bin/clang++"
+#alias llvm-config="/home/bloodstalker/llvm/llvm/build/bin/llvm-config"
+#alias "clang-query"="/home/bloodstalker/llvm/llvm/build/bin/clang-query"
+alias la="ls -A"
+alias ee="nautilus ."
+#aliias "clang-format"="/home/bloodstalker/llvm/llvm/build/bin/clang-format"
+alias updaterc="cp ~/scripts/.zshrc ~/.zshrc"
+alias fixvimrc='cp ~/scripts/.vimrc ~/.vimrc'
+alias fixtmuxrc='cp ~/scripts/.tmux.conf ~/.tmux.conf'
+alias fixtmuxpowerline='cp ~/scripts/default.sh ~/tmux-powerline/themes/default.sh'
+alias fixctagsrc='cp ~/scripts/.ctags ~/.ctags'
+alias fixtvrc='cp ~/scripts/.tvrc ~/.tvrc'
+alias tmuxpowerline='vim ~/scripts/default.sh'
+alias lss="ls -s"
+alias speedtest="curl -o /dev/null http://speedtest.sea01.softlayer.com/downloads/test100.zip"
+alias zshrc="vim ~/scripts/.zshrc"
+alias vimrc="vim ~/scripts/.vimrc"
+alias tmuxrc="vim ~/scripts/.tmux.conf"
+alias zshtheme="vim ~/scripts/devi.zsh-theme"
+alias quit="exit"
+alias xx="dtrx"
+alias angband="/home/bloodstalker/angband-4.1.0/angband-master/src/angband"
+alias startdocker="sudo systemctl start docker"
+alias vv="vim"
+alias mm="cmatrix -s -C blue"
+alias contest="ping 4.2.2.4 -c 7; ping google.com -c 7"
+alias solide="vim ~/scripts/makefile"
+alias dropsolide="cp ~/scripts/makefile ./"
+alias genjctags="find . -type f -iregex \".*\.js$\" -not -path \"./node_modules/*\" -exec jsctags {} -f \; | sed '/^$/d' | sort > tags"
+alias isup="ps -aux | grep "
+alias ipfsd="ipfs daemon > /dev/null 2>&1 &; disown"
+alias i3rc="vim ~/scripts/.config/i3/config"
+alias fixi3rc="cp ~/scripts/.config/i3/config ~/.config/i3/config && i3-msg restart"
+alias muttrc="vim ~/scripts/.muttrc"
+alias fixmuttrc="cp ~/scripts/.muttrc ~/.muttrc"
+alias dropcmake="cp ~/scripts/makefilec ./makefile"
+alias dropcppmake="cp ~/scripts/makefilecpp ./makefile"
+alias droppy="cp ~/scripts/python/main.py ./main.py"
+alias diff="colordiff"
+alias yy="~/scripts/hived"
+alias newsboaturls="vim ~/scripts/.newsboat/urls"
+alias fixnewsboaturls="cp ~/scripts/.newsboat/urls ~/.newsboat/urls"
+alias newsboatconfig="vim ~/scripts/.newsboat/config"
+alias fixnewsboatconfig="cp ~/scripts/.newsboat/config ~/.newsboat/config"
+alias qtrc="vim ~/scripts/qtbrowser/config.py"
+alias fixqtrc="cp ~/scripts/qtbrowser/config.py ~/.config/qutebrowser/config.py"
+alias dropcextra="cp ~/scripts/c/devi_extra.h ./devi_extra.h"
+alias dropcmain="cp ~/scripts/c/main.c ./"
+alias dropcppmain="cp ~/scripts/c/main.cpp ./"
+alias telebot="/home/bloodstalker/scripts/telebot.py > /dev/null 2>&1 &"
+alias dw="~/df/df_linux/df"
+alias clean="clear"
+alias lynx="lynx -lss ~/scripts/lynx.lss -cfg ~/scripts/lynx.cfg -prettysrc"
+alias hplovecraft="lynx http://www.hplovecraft.com/writings/texts/"
+alias casmith="lynx http://www.eldritchdark.com/writings/short-stories/"
+alias tt="transmission-cli -u 1 -w ~/winshare/"
+alias w3m="torsocks w3m -graph"
+#alias make="colormake"
+#alias gcc="COLORMAKE_COMMAND=gcc colormake"
+#alias clang="COLORMAKE_COMMAND=clang colormake"
+alias mv="mv -i"
+alias cp="cp -i"
+alias nuke="rm -rf * .[!.]* ..?*"
+alias bruiser="bruiser --history ~/.bruiser/history.lua"
+alias digg="dig && clear"
+alias ogg="ogg123"
+alias jupyterlocal="jupyter notebook --NotebookApp.allow_origin='https://colab.research.google.com' --port=8775"
+alias mupdf="/home/bloodstalker/extra/mupdf/build/release/mupdf-x11 -D red -P black -I"
+alias googler="~/extra/googler/googler --colors GKmexy -c us -l en --count 7 --exact "
+alias ddgr="ddgr --colorize always -r us-en -n 15"
+alias pirate-get="pirate-get -S ~/magnets/"
+alias vps="ssh 87.236.209.206 -l ubuntu"
+alias vpn="ssh 192.99.102.52 -l rooot -p 1022"
+alias pytags="ctags --fields=+l --languages=python --python-kinds=-iv -R ."
+alias v="vim"
+alias kshrc="vim ~/scripts/.kshrc"
+alias fixkshrc="cp ~/scripts/.kshrc ~/.kshrc"
+alias rangerrc="vim ~/scripts/.config/ranger/rc.conf"
+alias fixrangerrc="cp ~/scripts/.config/ranger/rc.conf ~/.config/ranger/rc.conf"
+alias zathurarc="vim ~/scripts/zathurarc"
+alias fixzathurarc="cp ~/scripts/zathurarc ~/.config/zathura/"
+alias lynxcfg="cp ~/scripts/lynx.cfg"
+alias lynxlss="cp ~/scripts/lynx.lss"
+alias w3mkeymap="vim ~/scripts/.w3m/keymap"
+alias w3mconfig="vim ~/scripts/.w3m/config"
+alias fixw3mkeymap="cp ~/scripts/.w3m/keymap ~/.w3m/"
+alias fixw3mconfig="cp ~/scripts/.w3m/config ~/.w3m/"
+alias tsc='tvm tsc'
+alias batrc="vim ~/scripts/.config/bat/config"
+alias fixbatrc="cp ~/scripts/.config/bat/config ~/.config/bat/config"
+alias psqlrc="vim ~/scripts/.psqlrc"
+alias fixpsqlrc="cp ~/scripts/.psqlrc ~/.psqlrc"
+alias pgclirc="vim ~/scripts/.config/pgcli/config"
+alias fixpgclirc="cp ~/scripts/.config/pgcli/config ~/.config/pgcli/config"
+alias jupyter="~/.local/bin/jupyter-notebook --no-browser"
+alias iredisrc="vim ~/scripts/.iredisrc"
+alias fixiredisrc="cp ~/scripts/.iredisrc ~/.iredisrc"
+alias irssi="irssi -n bloodstalker"
+alias joplinkeymap="vim ~/scripts/.config/joplin/keymap.json"
+alias fixjoplinkeymap="cp ~/scripts/.config/joplin/keymap.json ~/.config/joplin/keymap.json"
+alias mpv="/mnt/c/ProgramData/chocolatey/lib/mpv.install/tools/mpv.exe"
+alias postitrc="vim ~/scripts/postit"
+alias rainbowrc="vim ~/scripts/.rainbow_config.json"
+alias fixrainbowrc="cp ~/scripts/.rainbow_config.json ~/.rainbow_config.json"
+alias irssiconfig="vim ~/scripts/irssi/config"
+alias irssitheme="vim ~/scripts/irssi/solarized-powerline.theme"
+alias irssistartup="vim ~/scripts/irssi/startup"
+alias fixirssiconfig="cp ~/scripts/irssi/config ~/.irssi/config"
+alias fixirssitheme="cp ~/scripts/irssi/solarized-powerline.theme ~/.irssi/solarized-powerline.theme"
+alias fixirssistartup="cp ~/scripts/irssi/startup ~/.irssi/startup"
+alias w3mlastsession="~/.w3m/bin/w3mlastsession"
+
+#autosuggest
+ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#5f5fff,bg=#000000,bold"
+ZSH_AUTOSUGGEST_STRATEGY=(match_prev_cmd history completion)
+ZSH_AUTOSUGGEST_USE_ASYNC=1
+ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=30
+
+function lemon {
+ /home/bloodstalker/scripts/lemonbar.sh | lemonbar -f "DejaVu Sans Mono for Powerline:size=11" -g "x16"
+}
+
+function docpp {
+ cp ~/scripts/makefilecpp ./makefile
+ cp ~/scripts/c/main.cpp ./
+ cp ~/scripts/c/header.hpp ./
+ cp ~/scripts/.ycm_extra_config.py ./.ycm_extra_conf.py
+ cp ~/scripts/cfam.vimrc ./.vimrc
+ cp ~/scripts/compiler-explorer/ceconfig.json ./
+ cp ~/scripts/c/debug.dbg ./
+}
+
+function docc {
+ cp ~/scripts/makefilec ./makefile
+ cp ~/scripts/c/main.c ./
+ cp ~/scripts/.ycm_extra_config.py ./.ycm_extra_conf.py
+ cp ~/scripts/cfam.vimrc ./.vimrc
+ cp ~/scripts/compiler-explorer/ceconfig.json ./
+ cp ~/scripts/c/debug.dbg ./
+}
+
+function mdvv {
+ mdv -t 729.8953 "$@"
+}
+
+function gdd {
+ #git --no-pager diff --numstat | gawk \'{print$1$2}\'
+ git --no-pager diff --numstat | gawk '{sum1+=$1;sum2+=$2}END{print "additions:"sum1" ""deletions:"sum2}'
+}
+
+function math {
+ echo $(($@))
+}
+
+function pid {
+ ps -aux | grep "$1" | grep -v grep | awk '{print$2}'
+}
+
+#bicon_on=$(ps -aux | grep bicon | grep -v grep | awk '{print$2}')
+#if [[ -z "${bicon_on// }" ]]; then
+# /usr/bin/bicon.bin
+#fi
+
+REPORTTIME=4
+STARDICT_DATA_DIR="/home/bloodstalker/.stardict"
+export STARDICT_DATA_DIR
+export DISPLAY=":0"
+export WWW_HOME="duckduckgo.com"
+alias def="sdcv --color"
+#goenv
+export GOENV_ROOT="$HOME/.goenv"
+export PATH="$GOENV_ROOT/bin:$PATH"
+
+export LESS='-R'
+export LESSOPEN='|~/scripts/lesscolor.sh %s'
+# libtrash settings
+export LD_PRELOAD=/usr/local/lib/libtrash.so.3.5
+alias trashon=”export TRASH_OFF=NO”
+alias trashoff=”export TRASH_OFF=YES”
+
+export BAT_THEME="Solarized (light)"
+
+export FZF_DEFAULT_OPTS="--color fg:7,bg:0,hl:31,fg+:24,bg+:0,hl+:63,info:208,prompt:196,spinner:24,pointer:24,marker:22"
+
+export YTFZF_HIST=1
+export YTFZF_LOOP=0
+# export YTFZF_PREF="bestvideo[height<=?1080]+bestaudio/best"
+export YTFZF_PREF="22"
+export YTFZF_ENABLE_FZF_DEFAULT_OPTS=1
+export YTFZF_CACHE=~/.cache/ytfzf
+
+function fixrc {
+ cp ~/scripts/.zshrc ~/.zshrc
+ source ~/.zshrc
+}
+
+function fixtheme {
+ cp ~/scripts/devi.zsh-theme ~/.oh-my-zsh/themes/devi.zsh-theme
+ source ~/.zshrc
+}
+
+export PATH=$PATH:/home/bloodstalker/extra/cov-analysis-linux64-2019.03/bin
+#export PATH=:$PATH:/home/bloodstalker/extra/llvm-6/build/bin
+#export PATH=:$PATH:/home/bloodstalker/devi/abbatoir/hole145/llvm7/build/bin
+#export PATH=:$PATH:/home/bloodstalker/extra/llvm-clang-4/build/bin
+#export PATH=:$PATH:/home/bloodstalker/extra/llvm-clang-4/build/lib
+export PATH=:$PATH:/home/bloodstalker/extra/llvm-11/llvm-project/build/bin
+export PATH=:$PATH:/home/bloodstalker/extra/llvm-11/llvm-project/build/lib
+export PATH=:$PATH:/home/bloodstalker/arcanist/arcanist/bin
+export PATH=:$PATH:/home/bloodstalker/devi/abbatoir/hole58/solidity_0.4.18/build/solc
+export PATH=:$PATH:/home/bloodstalker/binaryen/bin
+export PATH=:$PATH:/home/bloodstalker/extra/go-ethereum/build/bin
+export PATH=:$PATH:/home/bloodstalker/.cargo/bin
+export PATH=:$PATH:/home/bloodstalker/extra/parity/target/release
+export PATH=:$PATH:/home/bloodstalker/extra/wasm-jit-prototype/build/bin
+export PATH=:$PATH:/home/bloodstalker/scripts/bin
+export PATH=:$PATH:/home/bloodstalker/extra/android-ndk/android-ndk-r16b
+export PATH=:$PATH:/home/bloodstalker/.cargo/bin/racer
+export PATH=:$PATH:/home/bloodstalker/extra/phantomjs-2.1.1-linux-i686/bin
+export PATH=:$PATH:/home/bloodstalker/rigetti/forest-sdk_2.0.1-linux-barebones
+export PATH=:$PATH:/home/bloodstalker/extra/tg/bin
+export PATH=:$PATH:/home/bloodstalker/extra/Nim/bin
+export PATH=:$PATH:/home/bloodstalker/extra/geckodriver
+export PATH=:$PATH:/home/bloodstalker/extra/cppcheck
+export PATH=:$PATH:/home/bloodstalker/extra/binaryen-version_91
+export PATH=:$PATH:/home/bloodstalker/extra/wabt-1.0.13/
+export PATH=:$PATH:/home/bloodstalker/devi/tabbed/tabbed-0.6
+export PATH=:$PATH:/home/bloodstalker/.dvm/bin
+#emscripten
+export PATH=:$PATH:/home/bloodstalker/extra/emscripten
+export PATH=:$PATH:/home/bloodstalker/extra/emscripten/clang/tag-e1.39.11/build_tag-e1.39.11_64/bin
+export PATH=:$PATH:/home/bloodstalker/extra/emscripten/node/8.9.1_64bit/bin
+export PATH=:$PATH:/home/bloodstalker/extra/emscripten/emscripten/tag-1.39.11
+export PATH=:$PATH:/home/bloodstalker/devi/protoc/protoc-3.13.0-linux-x86_64/bin
+export PATH=:$PATH:/home/devi/protobuf/bin/
+export PATH=:$PATH:/home/devi/ytfzf/
+export PATH=:$PATH:/home/devi/k3s/
+export PATH=:$PATH:/home/devi/kompose
+
+export EDITOR=vim
+export BROWSER=w3m
+export VAGRANT_WSL_ENABLE_WINDOWS_ACCESS="1"
+
+function dig {
+ globalholecounter=0
+ if test "$(ls -A "/home/bloodstalker/devi/abbatoir")"; then
+ while [ 1 ]; do
+ if [ -d "/home/bloodstalker/devi/abbatoir/hole$globalholecounter" ]; then
+ # if its not empty
+ if test "$(ls -A "/home/bloodstalker/devi/abbatoir/hole$globalholecounter")"; then
+ :
+ # if its empty
+ else
+ cd /home/bloodstalker/devi/abbatoir/hole$globalholecounter
+ break
+ fi
+ else
+ mkdir /home/bloodstalker/devi/abbatoir/hole$globalholecounter
+ cd /home/bloodstalker/devi/abbatoir/hole$globalholecounter
+ echo $globalholecounter
+ break
+ fi
+ ((globalholecounter++))
+ done
+ else
+ mkdir /home/bloodstalker/devi/abbatoir
+ mkdir /home/bloodstalker/devi/abbatoir/hole$globalholecounter
+ cd /home/bloodstalker/devi/abbatoir/hole$globalholecounter
+ fi
+}
+
+function clearhalf {
+ clear
+ size=$(stty size|gawk '{print$1}')
+ size=$(($size/2))
+ tput cup $size 0 && tput ed
+}
+alias cleanhalf="clearhalf"
+alias halfclear="clearhalf"
+alias halfclean="clearhalf"
+alias dighalf="dig && cleanhalf"
+
+function nn {
+ echo $1 >> ~/.devi/notes.txt
+}
+
+function nnshow {
+ cat ~/.devi/notes.txt
+}
+
+function nnedit {
+ vim ~/.devi/notes.txt
+}
+
+function nnpurge {
+ rm ~/.devi/notes.txt
+}
+
+function lxx {
+ readable $1 | lynx -stdin
+}
+
+bindkey -v
+set blink-matching-paren on
+export KEYTIMEOUT=1
+export VIRTUAL_ENV_DISABLE_PROMPT=yes
+
+#nvm
+export NVM_DIR="/home/bloodstalker/.nvm"
+[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
+
+# OPAM configuration
+. /home/bloodstalker/.opam/opam-init/init.zsh > /dev/null 2> /dev/null || true
+
+# Nix
+. /home/bloodstalker/.nix-profile/etc/profile.d/nix.sh
+
+# fixes the weird delete key behaviour in vi mode
+#bindkey "[3~" delete-char
+
+# make normal mode the default mode
+# zle-line-init() {zle -K vicmd;}
+# zle -N zle-line-init
+
+[[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm"
+
+# jellybeans takes forever to load. iceberg is very fast.
+function vman {
+ vim -c "Man $1 $2" -c 'silent only' -c 'colo iceberg' -c 'highlight Normal ctermbg=None' -c 'highlight lineNr ctermbg=16' -c 'hi EndOfBuffer ctermbg=16'
+}
+
+function ddig {
+ if [[ "$2" == "" ]];then
+ docker exec -it $(docker ps | grep "\b$1\b" | gawk '{print $1}') bash
+ else
+ docker exec -it $(docker ps | grep "\b$1\b" | gawk '{print $1}') $2
+ fi
+}
+
+fd() {
+ preview="git diff $@ --color=always -- {-1}"
+ git diff $@ --name-only | fzf -m --ansi --preview $preview
+}
+
+setopt APPEND_HISTORY
+setopt EXTENDED_HISTORY
+setopt HIST_FIND_NO_DUPS
+setopt HIST_IGNORE_ALL_DUPS
+setopt HIST_IGNORE_SPACE
+setopt HIST_NO_STORE
+setopt HIST_REDUCE_BLANKS
+setopt HIST_SAVE_NO_DUPS
+setopt HIST_EXPIRE_DUPS_FIRST
+setopt HIST_FIND_NO_DUPS
+setopt HIST_VERIFY
+setopt SHARE_HISTORY
+setopt AUTO_CD
+setopt AUTO_PUSHD
+
+eval "$(goenv init -)"
+export PATH="$GOROOT/bin:$PATH"
+export PATH="$PATH:$GOPATH/bin"
+
+function fzf_postit() {
+ cat ~/scripts/postit | fzf --bind 'enter:execute(tmux set-buffer {})+accept'
+}
+
+# this should be here before the end
+bindkey '
+bindkey -s '' 'fzf_postit '
diff --git a/CV.tex b/CV.tex
new file mode 100644
index 0000000..6e6a31e
--- /dev/null
+++ b/CV.tex
@@ -0,0 +1,173 @@
+\documentclass[10pt]{article}
+\usepackage{array, xcolor}
+\usepackage[margin=3cm]{geometry}
+\usepackage{longtable}
+\usepackage{makecell}
+\usepackage{hyperref}
+\hypersetup{
+ colorlinks=true,
+ urlcolor=blue,
+}
+\definecolor{lightgray}{gray}{0.8}
+\newcolumntype{L}{>{\raggedleft}p{0.2\textwidth}}
+\newcolumntype{R}{p{0.8\textwidth}}
+\newcommand\VRule{\color{lightgray}\vrule width 0.5pt}
+
+\title{\bfseries\Huge Farzad Sadeghi}
+\author{farzadsadeghi@protonmail.ch}
+\date{2020/03/31}
+\begin{document}
+\maketitle
+\begin{center}
+ \begin{minipage}[ht]{0.2\textwidth}{\centering}
+ \vspace*{\fill}
+ \centering
+ Tehran, Iran\\
+ +99 9999 9999999
+ \centering
+ \vspace*{\fill}
+ \end{minipage}
+\end{center}
+
+\vspace{5mm}
+\hrule
+\vspace{5mm}
+
+\section*{Professional Experience}
+\begin{longtable}{L!{\VRule}R}
+ {\bf Feb. 2019--Now}\\16 months&{\bf Maharan International (Tehran, Iran)}\\
+ &Requirement manager, designer and developer and tooling.\\[5pt]
+ & \\
+ & \\
+ {\bf July 2017--Nov. 2017}\\5 months&{\bf Truebit (Remote, 3 time-zones)}\\
+ &Developed Truebit's WASM interpreter, smart contracts and CI. Also researched distributed storage networks for Truebit’s needs which included IPFS and Ethereum's swarm.\\[5pt]
+ & \\
+ & \\
+ {\bf Sept. 2016--Nov. 2016}\\2 months&{\bf Iranian Electronics Industry Engineering Corp (Tehran, Iran)}\\
+ & The role primarily included devising the coding standard and style for the company plus some general consultancy on embedded software development.\\[5pt]
+ & \\
+ & \\
+ {\bf May 2016--July 2016}\\3 months&{\bf NEAT (Rome, Italy)}\\
+ &Wrote an automatic refactoring tool using Clang(Libtooling) in C++. The tool would be the last piece of an automated model-driven development process for safety-critical systems.\\[5pt]
+ & \\
+ & \\
+ {\bf July 2014--March 2016}\\21 months&{\bf Crouse (Tehran, Iran)}\\
+ & Embedded software developer, Safety-critical applications: Implementation of the DSP algorithm, testing, automation and tooling. The Software team’s ISO 26262 representative. Helped develop the work-flow for the team by adopting and adapting Code Reviews, FMEA and FTA for software and tooling alongside some best practices and defensive C programming guidelines. Studied AUTOSAR's SWC and RTE specifications.\\[5pt]
+ & \\
+ & \\
+ {\bf August 2010--March 2012}\\20 months&{\bf Safir Language Academy (Tehran, Iran)}\\
+ & English Teacher - Later on specifically IELTS teacher.\\[5pt]
+\end{longtable}
+
+\vspace{5mm}
+\hrule
+\vspace{5mm}
+
+\section*{Role Breakdown}
+\begin{longtable}{L!{\VRule}R}
+ {\bf ERTMS / ETCS DMI Development}& Derived software requirements from the system requirements, effectively splitting them into two components. Designed and implemented the software for the component on the kernel side. Wrote a tool that made the requirements' traceability files by gathering special comments from the C source files. Wrote a tool that determines all the sub-fields of aggregate types used in the function and the functions it calls(required for testing).
+ \\[5pt]&\\
+ {\bf Embedded Safety-Critical Development}& Wrote the SRS and the SDD for the DSP algorithm, then implemented the DSP algorithm for a safety-critical hard real-time embedded system.
+ \\[5pt]&\\
+ {\bf Code Generation}& \begin{itemize}
+ \vspace{-\baselineskip}
+ \item Wrote A tool that generates binary file (WASM, ...) parsers in C.
+ \item Wrote another tool that generates the C code necessary to add a C structure to Lua as a Lua table.
+ \end{itemize}
+ \\[5pt]
+ {\bf Automation and Tooling}& \begin{itemize}
+ \vspace{-\baselineskip}
+ \item Developed a Misra-C:2004 rule checker(open-source project) using Clang's Libtooling.
+ \item Developed a source code obfuscation tool(open-source project) using Clang's Libtooling.
+ \item Developed an interactive CLI tool aimed at object code manipulation(open-source project) in C++/C with Lua as it's scripting language. The tool also has Python embedded in it for rapid prototyping.
+ \item Automated the traceability matrix generation using libclang's Python bindings.
+ \item Automated the regression testing for a project I was involved in.
+ \item Automated the calculation of the WCET for all implemented functions through the use of of a Python script and an XML description file.
+ \end{itemize}
+ \\[5pt]
+ {\bf Automatic Refactoring}& Wrote an automatic refactoring tool using Clang's Libtooling for C.\\[5pt]
+ & \\
+ {\bf Defensive Programming / Safety-Aware Software Design}& Studied/Implemented defensive programming practices, coding style and guidelines. Explored the use of FMEA and FTA for the software domain.\\[5pt]
+ & \\
+ {\bf AUTOSAR}& Studied AUTOSAR SWC and RTE.\\[5pt]
+ & \\
+ {\bf ISO 26262}& Studied the software section of the standard. I was also the software's group's representative for the study/review meetings held with the hardware and system teams on ISO 26262.\\[5pt]
+\end{longtable}
+
+\vspace{5mm}
+\hrule
+\vspace{5mm}
+
+\section*{Programming Languages}
+\begin{tabular}{L!{\VRule}R}
+ {\bf Languages}&C, C++\\[5pt]
+ & \\
+ {\bf Scripting Languages}&Python, Lua\\[5pt]
+ & \\
+ {\bf Other}&Bash, AWK, Make\\[5pt]
+\end{tabular}
+
+\vspace{5mm}
+\hrule
+
+\section*{Skills}
+\begin{tabular}{L!{\VRule}R}
+ {\bf Software Design}& Safety-aware software design.\\[5pt]
+ & \\
+ {\bf Requirement Analysis}& Derived the functional and technical software requirements from the ERTMS/ETCS DMI system requirements for our implementation.\\[5pt]
+ & \\
+ {\bf CI}& Appveyor for windows(cygwin-only) and TrvisCI for linux.\\[5pt]
+ & \\
+ {\bf UML}& Requirement Modelling.\\[5pt]
+ {\bf Clang}& Libtooling and libclang.\\[5pt]
+\end{tabular}
+
+\vspace{5mm}
+\hrule
+
+\section*{Languages}
+\begin{tabular}{L!{\VRule}R}
+ {\bf English}&{\bf Native-like}\\
+ {\bf Persian}&{\bf Native}\\
+ {\bf Azerbaijani}&{\bf Native}\\
+ German&Intermediate\\
+\end{tabular}
+
+\vspace{5mm}
+\hrule
+\vspace{5mm}
+
+\section*{Education}
+\begin{tabular}{L!{\VRule}R}
+ 2007--2013& Bachelor's in Electrical Engineering, Iran University of Science and Technology, Tehran, Iran.\\[5pt]
+ &{\bf Thesis}: Determining the frequency of an audio signal using phase derivation in real time, design and implementation using an FPGA.
+\end{tabular}
+
+\vspace{5mm}
+\hrule
+\vspace{5mm}
+
+\section*{Links}
+\begin{tabular}{L!{\VRule}R}
+ {\bf \href{https://ir.linkedin.com/in/farzad-sadeghi-08426277}{Linkedin}}& My Linkedin page.\\[5pt]
+ {\bf \href{https://github.com/terminaldweller}{Github}}& My Github page.\\[5pt]
+ {\bf \href{https://github.com/terminaldweller/cgrep}{Cgrep}}& Grep for C-family source files.\\[5pt]
+ {\bf \href{https://terminaldweller.github.io/mutator/}{Mutator}}& An experimental suite of tools aimed at C-family development.\\[5pt]
+ {\bf Faultreiber}&\href{https://github.com/terminaldweller/faultreiber}{Faultreiber} generates a binary file parser in C using an XML description file.\\[5pt]
+ {\bf Luatablegen}&\href{https://github.com/terminaldweller/luatablegen}{Luatablegen} generates C code that wraps C structures as Lua tables using an XML description file.\\[5pt]
+ {\bf \href{https://github.com/terminaldweller/dwasm}{Dwasm}}& A WASM dump script written in python.\\[5pt]
+ {\bf \href{https://github.com/terminaldweller/delf}{Delf}}& An ELF dump script in python.\\[5pt]
+\end{tabular}
+
+\vspace{5mm}
+\hrule
+\vspace{5mm}
+
+\section*{Referene}
+\begin{longtable}{L!{\VRule}R}
+ {\bf Jason Teutsch}& jt@truebit.io\\[5pt]
+ {\bf Francesco Zulliani}& francesco.zuliani@neat.it\\[5pt]
+\end{longtable}
+
+\end{document}
+
diff --git a/CV_Abridged.tex b/CV_Abridged.tex
new file mode 100644
index 0000000..2c2be27
--- /dev/null
+++ b/CV_Abridged.tex
@@ -0,0 +1,135 @@
+\documentclass[8pt]{article}
+\usepackage{array, xcolor}
+\usepackage[margin=2cm]{geometry}
+\usepackage{longtable}
+\usepackage{makecell}
+\usepackage{hyperref}
+\usepackage{multicol}
+\hypersetup{
+ colorlinks=true,
+ urlcolor=blue,
+}
+\definecolor{lightgray}{gray}{0.5}
+\newcolumntype{L}{>{\raggedleft}p{0.5\textwidth}}
+\newcolumntype{R}{p{0.5\textwidth}}
+\newcommand\VRule{\color{lightgray}\vrule width 0.5pt}
+
+\title{\bfseries Farzad Sadeghi}
+\author{farzadsadeghi@protonmail.ch}
+\date{2021/01/08}
+\begin{document}
+\begin{multicols}{2}
+ \maketitle
+ \begin{center}
+ \begin{minipage}[ht]{0.2\textwidth}{\centering}
+ \vspace*{\fill}
+ \centering
+ Tehran, Iran\\
+ +98 9999 9999999
+ \centering
+ \vspace*{\fill}
+ \end{minipage}
+ \end{center}
+
+ \section*{Professional Experience}
+ \bf Erfan Salamat (Tehran, Iran)\\
+ Nov. 2020--Feb. 2021\\
+ 4 months\\
+ \normalfont Backened Developer. Developed a GIS and Notification microservice using Golang(go-kit). Containerized the entire required stack for the said microservices using Docker.\\[5pt]
+ \bf Maharan International (Tehran, Iran)\\
+ Feb. 2019--Oct. 2020\\
+ 19 months\\
+ \normalfont Requirement manager, designer and developer for ERTMS/ETCS DMI.\\[5pt]
+ \bf Truebit (Remote, 3 time-zones)\\
+ July 2017--Nov. 2017\\
+ 5 months\\
+ \normalfont developed Truebit's WASM interpreter and smart contracts. Also managed the CI for the repositories.\\[5pt]
+ \bf Iranian Electronics Industry Engineering Corp (Tehran, Iran)\\
+ Sept. 2016--Nov. 2016\\
+ 2 months\\
+ \normalfont The role primarily included devising the coding standard and style for the company.\\[5pt]
+ \bf NEAT (Rome, Italy)\\
+ May 2016--July 2016\\
+ 3 months\\
+ \normalfont Wrote an automatic refactoring tool using Clang(Libtooling) in C++. The tool would be the last piece of an automated model-driven development process for safety-critical systems.\\[5pt]
+ \bf Crouse (Tehran, Iran)\\
+ July 2014--March 2016\\
+ 21 months\\
+ \normalfont Embedded software developer, Safety-critical applications: Design, implementation and automation. The Software team’s ISO 26262 representative.\\[5pt]
+ \bf Safir Language Academy (Tehran, Iran)\\
+ August 2010--March 2012\\
+ 20 months\\
+ \normalfont English Teacher - Later on specifically IELTS teacher.\\[5pt]
+
+ \section*{Skills}
+ \bf Software Design \normalfont Safety-critical software design.\\[5pt]
+ \bf Requirement Analysis \normalfont{} Derived the functional and technical software requirements from the ERTMS/ETCS DMI system requirements for our implementation.\\[5pt]
+ \bf CI \normalfont Appveyor for windows(cygwin-only) and TrvisCI for linux.\\[5pt]
+ \bf UML \normalfont Requirement Modelling.\\[5pt]
+ \bf Tooling \normalfont Static analysis tools using clang libraries.\\[5pt]
+ \bf Automation \normalfont Python and the terminal.\\[5pt]
+ \bf Containerization \normalfont Docker\\[5pt]
+ \bf DB \normalfont Postgresql, MongoDB, Redis\\[5pt]
+
+ \section*{Programming Languages}
+ \bf Languages: \normalfont C, C++, Go\\[5pt]
+ \bf Scripting Languages: \normalfont Python, Lua\\[5pt]
+ \bf Other: \normalfont Bash, AWK, Cmake, Make, Docker\\[5pt]
+
+ \section*{Languages}
+ \bf English: {\normalfont Native-like}\\
+ \bf Persian: {\normalfont Native}\\
+ \bf Azerbaijani: {\normalfont Native}\\
+ \normalfont German: Beginner\\
+
+ \section*{Education}
+ 2007--2013 Bachelor's in Electrical Engineering, Iran University of Science and Technology, Tehran, Iran.\\[5pt]
+ \bf Thesis: \normalfont Determining the frequency of an audio signal using phase derivation in real time, design and implementation using an FPGA.
+
+ \section*{Role Breakdown}
+ \bf Backend Developer\\ \normalfont Developed a GIS microservice based on the OSM stack. Containerized an entire geoserver stack (geoserver, tile server, static image server, DB) so that we could rely on our own stack. Developed a notification microservice using golang and Mongodb(with Percona memory engine).
+ \\[5pt]\\
+ \bf ERTMS / ETCS DMI Development\\ \normalfont Split the DMI into two subsystems. Designed and implemented the software for the component on the "kernel" side. Wrote a tool that made the requirements' traceability files by gathering special comments from the C source files. Wrote a tool that determines all the sub-fields of aggregate types used in the function and the functions it calls(required for testing).
+ \\[5pt]\\
+ \bf Embedded Safety-Critical Development\\ \normalfont Wrote the SRS and the SDD for the DSP algorithm, then implemented the DSP algorithm for a safety-critical hard real-time embedded system.
+ \\[5pt]\\
+ \bf Code Generation\\ \begin{itemize}\normalfont
+ \vspace{-\baselineskip}
+ \item Wrote A tool that generates binary file (WASM, ...) parsers in C.
+ \item Wrote another tool that generates the C code necessary to add a C structure to Lua as a Lua table.
+\end{itemize}
+\bf Automation and Tooling\\ \begin{itemize}\normalfont
+ \vspace{-\baselineskip}
+\item Developed a Misra-C:2004 rule checker(open-source project) using Clang's Libtooling.
+\item Developed a source code obfuscation tool(open-source project) using Clang's Libtooling.
+\item Developed an interactive CLI tool aimed at object code manipulation(open-source project) in C++/C with Lua as it's scripting language. The tool also has Python embedded in it for rapid prototyping.
+\item Automated the traceability matrix generation using libclang's Python bindings.
+\item Automated the regression testing for a project I was involved in.
+\item Automated the calculation of the WCET for all implemented functions through the use of of a Python script and an XML description file.
+ \end{itemize}
+ \bf Automatic Refactoring\\ \normalfont Wrote an automatic refactoring tool using Clang's Libtooling for C.\\[5pt]
+ \\
+ \bf Defensive Programming / Safety-Aware Software Design\\ \normalfont Studied/Implemented defensive programming practices, coding style and guidelines. Explored the use of FMEA and FTA for the software domain.\\[5pt]
+ \\
+ \bf AUTOSAR\\ \normalfont Studied AUTOSAR SWC and RTE.\\[5pt]
+ \\
+ \bf ISO 26262\\ \normalfont Studied the software section of the standard. I was also the software's group's representative for the study/review meetings held with the hardware and system teams on ISO 26262.\\[5pt]
+
+ \section*{Links}
+ {\bf \href{https://ir.linkedin.com/in/farzad-sadeghi-08426277}{Linkedin}} My Linkedin page.\\[5pt]
+ {\bf \href{https://github.com/terminaldweller}{Github}} My Github page.\\[5pt]
+ {\bf \href{https://github.com/terminaldweller/hived}{Hived}} My personal tiny high-performance server written in Go.\\[5pt]
+ {\bf \href{https://github.com/terminaldweller/cgrep}{Cgrep}} Grep for C-family source files.\\[5pt]
+ {\bf \href{https://terminaldweller.github.io/mutator/}{Mutator}} An experimental suite of tools aimed at C-family development written C++,C and Lua.\\[5pt]
+ \href{https://github.com/terminaldweller/faultreiber}{Faultreiber} generates a binary file parser in C using an XML description file.\\[5pt]
+ \href{https://github.com/terminaldweller/luatablegen}{Luatablegen} generates C code that wraps C structures as Lua tables using an XML description file.\\[5pt]
+ {\bf \href{https://github.com/terminaldweller/dwasm}{Dwasm}} A WASM dump script written in python.\\[5pt]
+ {\bf \href{https://github.com/terminaldweller/delf}{Delf}} An ELF dump script in python.\\[5pt]
+
+ \section*{Referene}
+ {\bf Jason Teutsch} jt@truebit.io\\[5pt]
+ {\bf Francesco Zulliani} francesco.zuliani@neat.it\\[5pt]
+
+\end{multicols}
+\end{document}
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..9cecc1d
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ {one line to give the program's name and a brief idea of what it does.}
+ Copyright (C) {year} {name of author}
+
+ 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 should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ {project} Copyright (C) {year} {fullname}
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..19a88ab
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+
+# fedora
+
+My config files and some random lazy scripts.<br/>
+
diff --git a/_emacs.el b/_emacs.el
new file mode 100755
index 0000000..45029d0
--- /dev/null
+++ b/_emacs.el
@@ -0,0 +1,121 @@
+
+(require 'package)
+(setq package-enable-at-startup nil)
+(let* ((no-ssl (and (memq system-type '(windows-nt ms-dos))
+ (not (gnutls-available-p))))
+ (proto (if no-ssl "http" "https")))
+ (when no-ssl
+ (warn "\
+Your version of Emacs does not support SSL connections,
+which is unsafe because it allows man-in-the-middle attacks.
+There are two things you can do about this warning:
+1. Install an Emacs version that does support SSL and be safe.
+2. Remove this warning from your init file so you won't see it again."))
+ ;; Comment/uncomment these two lines to enable/disable MELPA and MELPA Stable as desired
+ (add-to-list 'package-archives (cons "melpa" (concat proto "://melpa.org/packages/")) t)
+ ;;(add-to-list 'package-archives (cons "melpa-stable" (concat proto "://stable.melpa.org/packages/")) t)
+ (when (< emacs-major-version 24)
+ ;; For important compatibility libraries like cl-lib
+ (add-to-list 'package-archives (cons "gnu" (concat proto "://elpa.gnu.org/packages/")))))
+(package-initialize)
+(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/"))
+(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
+(add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/"))
+(add-to-list 'load-path "~/.emacs.d/evil")
+
+(require 'evil)
+(evil-mode 1)
+(helm-mode 1)
+(custom-set-variables
+ ;; custom-set-variables was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ '(ansi-color-names-vector
+ ["#212337" "#ff5370" "#c7f59b" "#ffbd76" "#70b0ff" "#baacff" "#34d3fb" "#e4f3fa"])
+ '(column-number-mode t)
+ '(custom-safe-themes
+ (quote
+ ("84d2f9eeb3f82d619ca4bfffe5f157282f4779732f48a5ac1484d94d5ff5b279" "3c83b3676d796422704082049fc38b6966bcad960f896669dfc21a7a37a748fa" "c8f959fb1ea32ddfc0f50db85fea2e7d86b72bb4d106803018be1c3566fd6c72" "2a3ffb7775b2fe3643b179f2046493891b0d1153e57ec74bbe69580b951699ca" "1728dfd9560bff76a7dc6c3f61e9f4d3e6ef9d017a83a841c117bd9bebe18613" "f589e634c9ff738341823a5a58fc200341b440611aaa8e0189df85b44533692b" "0713580a6845e8075113a70275b3421333cfe7079e48228c52300606fa5ce73b" "f30aded97e67a487d30f38a1ac48eddb49fdb06ac01ebeaff39439997cbdd869" "2d1fe7c9007a5b76cea4395b0fc664d0c1cfd34bb4f1860300347cdad67fb2f9" default)))
+ '(display-battery-mode t)
+ '(display-line-numbers-type (quote relative))
+ '(display-time-mode t)
+ '(fci-rule-color "#383e5c")
+ '(jdee-db-active-breakpoint-face-colors (cons "#161a2a" "#baacff"))
+ '(jdee-db-requested-breakpoint-face-colors (cons "#161a2a" "#c7f59b"))
+ '(jdee-db-spec-breakpoint-face-colors (cons "#161a2a" "#383e5c"))
+ '(objed-cursor-color "#ff5370")
+ '(package-selected-packages
+ (quote
+ (linum-relative pdfgrep pdf-tools smart-mode-line-powerline-theme smart-mode-line powerline-evil neotree tabbar helm doom-themes evil)))
+ '(show-paren-mode t)
+ '(size-indication-mode t)
+ '(vc-annotate-background "#212337")
+ '(vc-annotate-color-map
+ (list
+ (cons 20 "#c7f59b")
+ (cons 40 "#d9e28e")
+ (cons 60 "#eccf82")
+ (cons 80 "#ffbd76")
+ (cons 100 "#ffb071")
+ (cons 120 "#ffa36c")
+ (cons 140 "#ff9668")
+ (cons 160 "#e89d9a")
+ (cons 180 "#d1a4cc")
+ (cons 200 "#baacff")
+ (cons 220 "#d18ecf")
+ (cons 240 "#e8709f")
+ (cons 260 "#ff5370")
+ (cons 280 "#cd4d6b")
+ (cons 300 "#9b4866")
+ (cons 320 "#694361")
+ (cons 340 "#383e5c")
+ (cons 360 "#383e5c")))
+ '(vc-annotate-very-old-color nil))
+(custom-set-faces
+ ;; custom-set-faces was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ '(default ((t (:family "DejaVu Sans Mono for Powerline" :foundry "outline" :slant normal :weight bold :height 98 :width normal)))))
+(evil-mode t)
+
+(require 'doom-themes)
+(setq inhibit-startup-screen t)
+(load-theme 'doom-one)
+
+(setq doom-line-numbers-style 'relative)
+(setq evil-emacs-state-cursor '("red" box))
+(setq evil-normal-state-cursor '("green" box))
+(setq evil-visual-state-cursor '("orange" box))
+(setq evil-insert-state-cursor '("blue" bar))
+(setq evil-replace-state-cursor '("red" bar))
+(setq evil-operator-state-cursor '("red" hollow))
+
+
+(require 'powerline-evil)
+(powerline-evil-vim-color-theme)
+
+;; These two lines are just examples
+(setq powerline-arrow-shape 'curve)
+(setq powerline-default-separator-dir '(right . left))
+;; These two lines you really need.
+(setq sml/theme 'powerline)
+(sml/setup)
+
+(setq shell-file-name (executable-find "zsh.exe"))
+;;(setq shell-file-name (executable-find "zsh-5.5.1.exe"))
+
+(setenv "PATH" (concat (getenv "PATH") ":D:\\home\\apps\\cygwin\\bin"))
+;;(setq exec-path (append exec-path '("D:\\home\\apps\\cygwin\\bin")))
+(setq explicit-shell-file-name "D:\\home\\apps\\cygwin\\bin\\zsh.exe")
+(setq shell-file-name "zsh")
+(setq explicit-zsh.exe-args '("-l" "-i"))
+
+(setq display-line-numbers-mode t)
+(setq display-line-numbers 'relative)
+;;wont be able to open pdf's in docview mode without ghostscript
+(setq doc-view-ghostscript-program "C:\\Program Files\\gs\\gs9.50\\bin\\gswin64.exe")
+;;settings this for zsh. basically lets zsh know its running inside emacs and not a terminal
+(setenv "INSIDE_EMACS")
+(windmove-default-keybindings) \ No newline at end of file
diff --git a/baseline/.minttyrc b/baseline/.minttyrc
new file mode 100644
index 0000000..6d1af02
--- /dev/null
+++ b/baseline/.minttyrc
@@ -0,0 +1,29 @@
+BoldAsFont=no
+Columns=150
+Rows=55
+Font=DejaVuSansMono NF
+FontWeight=700
+FontHeight=10
+Transparency=low
+
+ForegroundColour=#A0A0A0
+BackgroundColour=#1B1D1E
+CursorColour=#A0A0A0
+
+Black=#1B1D1E
+Red=#FF0000
+Green=#82B414
+Yellow=#FD971F
+Blue=#268BD2
+Magenta=#8C54FE
+Cyan=#56C2D6
+White=#CCCCC6
+
+BoldBlack=#1B1D1E
+BoldRed=#FF0000
+BoldGreen=#82B414
+BoldYellow=#FD971F
+BoldBlue=#268BD2
+BoldMagenta=#8C54FE
+BoldCyan=#56C2D6
+BoldWhite=#CCCCC6
diff --git a/baseline/.tmux.conf b/baseline/.tmux.conf
new file mode 100644
index 0000000..2c4ab08
--- /dev/null
+++ b/baseline/.tmux.conf
@@ -0,0 +1,62 @@
+set -g default-terminal "tmux-256color"
+set-option -g prefix C-a
+
+#key bindings
+bind | split-window -h
+bind - split-window -v
+bind -r k select-pane -U
+bind -r j select-pane -D
+bind -r h select-pane -L
+bind -r l select-pane -R
+bind -n C-k next-window
+bind -n C-j previous-window
+bind -n M-k select-pane -U
+bind -n M-j select-pane -D
+bind -n M-h select-pane -L
+bind -n M-l select-pane -R
+setw -g mode-keys vi
+bind [ copy-mode
+bind -T copy-mode-vi 'v' send -X begin-selection
+bind -T copy-mode-vi 'y' send -X copy-selection-and-cancel
+#bind -T copy-mode-vi 'V' rectangle-toggle
+bind ] paste-buffer
+bind Space choose-buffer
+
+#move windows
+bind-key -n C-S-Left swap-window -t -1
+bind-key -n C-S-Right swap-window -t +1
+set-option -g history-limit 10000
+
+#unbindings
+unbind Up
+unbind Down
+unbind Left
+unbind Right
+
+#color stuff
+set -g status-bg colour25
+set -g status-position bottom
+set -g status-justify left
+set -g status-fg colour137
+set -g status-attr dim
+set -g status-left ""
+set -g status-right "#[fg=colour233,bg=colour2,bold] %d/%m #[fg=colour233,bg=colour107,bold] %H:%M:%S "
+set -g status-right-length 70
+set -g status-left-length 70
+setw -g window-status-current-fg colour0
+setw -g window-status-current-bg colour22
+setw -g window-status-current-attr bold
+setw -g window-status-current-format "#[fg=colour249] #I#[fg=colour255]:#[fg=colour16]#W#[fg=colour249]#F "
+setw -g window-status-fg colour0
+setw -g window-status-bg colour23
+setw -g window-status-attr none
+setw -g window-status-format "#[fg=colour237] #I#[fg=colour250]:#[fg=colour16]#W#[fg=colour244]#F "
+setw -g window-status-bell-attr bold
+setw -g window-status-bell-fg colour255
+setw -g window-status-bell-bg colour64
+# messages
+set -g message-attr bold
+set -g message-fg colour232
+set -g message-bg colour16
+
+set -g message-style bg='#44475a',fg='#8be9fd'
diff --git a/baseline/.vimrc b/baseline/.vimrc
new file mode 100644
index 0000000..3cbbdb1
--- /dev/null
+++ b/baseline/.vimrc
@@ -0,0 +1,309 @@
+set encoding=UTF-8
+let mapleader = " "
+set nocompatible
+set completeopt-=preview
+filetype off
+set rtp+=~/.vim/bundle/Vundle.vim
+call vundle#begin()
+Plugin 'tpope/vim-surround'
+Plugin 'easymotion/vim-easymotion'
+Plugin 'sheerun/vim-polyglot'
+Plugin 'ctrlpvim/ctrlp.vim'
+Plugin 'chrisbra/Recover.vim'
+Plugin 'nanotech/jellybeans.vim'
+Plugin 'unblevable/quick-scope'
+Plugin 'tpope/vim-repeat'
+Plugin 'adelarsq/vim-matchit'
+Plugin 'majutsushi/tagbar'
+Plugin 'ludovicchabant/vim-gutentags'
+Plugin 'mbbill/undotree'
+Plugin 'tpope/vim-commentary'
+call vundle#end()
+filetype plugin indent on
+
+" jellybeans
+colo jellybeans
+set background=dark
+let g:gruvbox_italics = 1
+let g:jellybeans_overrides = {
+\ 'Todo': { 'guifg': '000000', 'guibg': '00cc00',
+\ 'ctermfg': 'Black', 'ctermbg': 'Blue',
+\ 'attr': 'bold' },
+\ 'Comment': { 'guifg': '339966' },
+\ 'background': { "guibg": "000000", "ctermbg":"none"},
+\ 'StorageClass': {"guifg": '9966ff' },
+\ 'Exception': {"guifg": "99cc00"},
+\ "Ignore": {"guifg": "336699"},
+\ "SpecialComment": {"guifg": "009900"},
+\ "Macro": {"guifg": "0099cc"}
+\}
+let g:jellybeans_use_term_italics = 1
+
+"set exrc
+set encoding=UTF-8
+set linebreak
+set breakindent
+set wrap
+set tagbsearch
+set secure
+set list
+set showmatch
+set number
+set relativenumber
+set noerrorbells
+set hidden
+set novisualbell
+set expandtab
+set smarttab
+set autoindent
+set shell=ksh
+set autoread
+set ignorecase
+set smartcase
+set hlsearch
+set incsearch
+set magic
+set lazyredraw
+set ttyfast
+set scrolloff=0
+set tagbsearch
+set wildmenu
+set diffopt=internal,algorithm:patience
+set tags=./tags,tags;$HOME
+syntax on
+set directory^=$HOME/.vim/tmp//
+nmap <Backspace> <Nop>
+nmap <Delete> <Nop>
+nmap <Left> <Nop>
+nmap <Down> <Nop>
+nmap <Up> <Nop>
+nmap <Right> <Nop>
+nmap <PageUp> <Nop>
+nmap <PageDown> <Nop>
+imap <PageUp> <Nop>
+imap <PageDown> <Nop>
+map <F3> :bp<CR>
+map <F4> :bn<CR>
+nnoremap <F7> :Vexplore<CR>
+map <F8> :TagbarToggle<CR>
+nnoremap <F12> :UndotreeToggle<cr>
+map <C-e> :q<cr>
+set timeoutlen=1000 ttimeoutlen=100
+set <F13>=^[[21;2~
+map <F13> <S-F10>
+map! <F13> <S-F10>
+nnoremap <F10> :vsp<cr>
+nnoremap <S-F10> :sp<cr>
+set pastetoggle=<F11>
+nnoremap <leader>cd :cd %:p:h<cr>
+nmap ]c :cn<CR>
+nmap [c :cp<CR>
+
+function! GetBufferList()
+ redir =>buflist
+ silent! ls!
+ redir END
+ return buflist
+endfunction
+
+function! ToggleList(bufname, pfx)
+ let buflist = GetBufferList()
+ for bufnum in map(filter(split(buflist, '\n'), 'v:val =~ "'.a:bufname.'"'), 'str2nr(matchstr(v:val, "\\d\\+"))')
+ if bufwinnr(bufnum) != -1
+ exec(a:pfx.'close')
+ return
+ endif
+ endfor
+ if a:pfx == 'l' && len(getloclist(0)) == 0
+ echohl ErrorMsg
+ echo "Location List is Empty."
+ return
+ endif
+ let winnr = winnr()
+ exec(a:pfx.'open')
+ if winnr() != winnr
+ wincmd p
+ endif
+endfunction
+nmap <silent> <leader>l :call ToggleList("Location List", 'l')<CR>
+nmap <silent> <leader>q :call ToggleList("Quickfix List", 'c')<CR>
+
+set laststatus=2
+function! InsertStatuslineColor(mode)
+ if a:mode == 'i'
+ hi statusline ctermfg=22 ctermbg=15 guibg=#005f00 guifg=#ffffff
+ elseif a:mode == 'r'
+ hi statusline ctermfg=52 ctermbg=15 guibg=#5f0000 guifg=#ffffff
+ else
+ hi statusline ctermfg=25 ctermbg=63 guibg=#005faf guifg=#5f5fff
+ endif
+endfunction
+
+au InsertEnter * call InsertStatuslineColor(v:insertmode)
+au InsertLeave * hi statusline ctermfg=24 ctermbg=15 guibg=#005f87 guifg=#ffffff
+hi statusline ctermfg=24 ctermbg=15 guibg=#005f87 guifg=#ffffff
+hi statuslineNC ctermfg=0 ctermbg=24 term=bold guifg=#000000 guibg=#005f87
+set statusline=[%f] "file name
+set statusline+=[%{strlen(&fenc)?&fenc:'none'}, "file encoding
+set statusline+=%{&ff}] "file format
+set statusline+=%y "filetype
+set statusline+=%h "help file flag
+set statusline+=%m "modified flag
+set statusline+=\ %= " align left
+set statusline+=Line:%l/%L[%p%%] " line X of Y [percent of file]
+set statusline+=\ Col:%c " current column
+set statusline+=\ Buf:%n " Buffer number
+set statusline+=\ [%b][0x%B]\ " ASCII and byte code under cursor
+
+set fillchars+=vert:\ " whitespace signifacant
+hi VertSplit ctermbg=0 ctermfg=0 guibg=#000000 guifg=#000000
+
+" highlight groups
+hi def InterestingWord1 ctermfg=16 ctermbg=214 guifg=#000000 guibg=#ffaf00
+hi def InterestingWord2 ctermfg=16 ctermbg=154 guifg=#000000 guibg=#afff00
+hi def InterestingWord3 ctermfg=16 ctermbg=121 guifg=#000000 guibg=#87ffaf
+hi def InterestingWord4 ctermfg=16 ctermbg=137 guifg=#000000 guibg=#af875f
+hi def InterestingWord5 ctermfg=16 ctermbg=211 guifg=#000000 guibg=#ff87af
+hi def InterestingWord6 ctermfg=16 ctermbg=195 guifg=#000000 guibg=#d7ffff
+hi def InterestingWord7 ctermfg=16 ctermbg=99 guifg=#000000 guibg=#875fff
+hi def InterestingWord8 ctermfg=16 ctermbg=35 guifg=#000000 guibg=#00af5f
+hi def InterestingWord9 ctermfg=16 ctermbg=57 guifg=#000000 guibg=#5f00ff
+hi def InterestingWord0 ctermfg=16 ctermbg=39 guifg=#000000 guibg=#00afff
+
+" Steve Losh's highlight function
+function HighInterestingWord(n)
+ normal! mz
+ normal! "zyiw
+ let mid = 88888 + a:n
+ silent! call matchdelete(mid)
+ let pat = '\V\<' . escape(@z, '\') . '\>'
+ call matchadd("InterestingWord".a:n, pat, 1, mid)
+ normal! `z
+endfunction
+
+" multiple highlights
+nnoremap <silent> <leader>1 :call HighInterestingWord(1)<cr>
+nnoremap <silent> <leader>2 :call HighInterestingWord(2)<cr>
+nnoremap <silent> <leader>3 :call HighInterestingWord(3)<cr>
+nnoremap <silent> <leader>4 :call HighInterestingWord(4)<cr>
+nnoremap <silent> <leader>5 :call HighInterestingWord(5)<cr>
+nnoremap <silent> <leader>6 :call HighInterestingWord(6)<cr>
+nnoremap <silent> <leader>7 :call HighInterestingWord(7)<cr>
+nnoremap <silent> <leader>8 :call HighInterestingWord(8)<cr>
+nnoremap <silent> <leader>9 :call HighInterestingWord(9)<cr>
+nnoremap <silent> <leader>0 :call HighInterestingWord(0)<cr>
+
+au BufNewFile,BufEnter *.s set ft=nasm
+
+"copy and paste between different Vim sessions
+nmap _Y :!echo ""> ~/.vi_tmp<CR><CR>:w! ~/.vi_tmp<CR>
+vmap _Y :w! ~/.vi_tmp<CR>
+nmap _P :r ~/.vi_tmp<CR>
+
+inoremap <c-a> <esc>I
+inoremap <c-e> <esc>A
+
+iab pritn print
+iab retrun return
+iab fucntion function
+iab funciton function
+
+nnoremap <S-Delete> :bd<CR>
+map <F6> <nop>
+nnoremap <leader>c :call clearmatches()<CR>
+map <leader>w :w<CR>
+nnoremap <leader>t :bel term<CR>
+nnoremap <leader>r :!%:p<CR>
+
+let g:qs_highlight_on_keys = ["f", "F", "t", "T"]
+
+" undotree
+if has("persistent_undo")
+ set undodir=~/.undodir/
+ set undofile
+endif
+let g:undotree_WindowLayout = 4
+
+"highlight search
+highlight Search ctermfg=White ctermbg=DarkGreen cterm=Bold
+highlight IncSearch ctermfg=White ctermbg=DarkBlue cterm=Bold
+highlight WildMenu ctermfg=DarkBlue ctermbg=DarkGreen cterm=Bold
+
+"netrw
+let g:netrw_sort_by = 'date'
+let g:netrw_sort_direction = 'reverse'
+let g:netrw_banner = 0
+let g:netrw_liststyle = 3
+let g:netrw_browse_split = 1
+let g:netrw_winsize = 15
+let g:netrw_fastbrowse = 1
+let g:netrw_sort_by = 'name'
+let g:netrw_sort_direction = 'normal'
+
+"tagbar
+let g:tagbar_compact = 1
+let g:tagbar_show_linenumbers = 2
+let g:tagbar_width = 50
+highlight TagbarSignature ctermfg=DarkBlue
+
+"view the python docs for the word under cursor in a split window
+function! s:pythondoc()
+ let l:vword = expand("<cword>")
+ botright vnew
+ setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
+ execute ".!pydoc3 " . l:vword
+ setlocal nomodifiable
+ set syntax=man
+ 1
+endfunction
+command! -complete=shellcmd -nargs=0 PythonDoc call s:pythondoc()
+nnoremap <leader>h :<C-U>PythonDoc<cr>
+
+"camel and snake case motion
+let g:camelchar = "A-Z0-9.,;:{([`'\"_"
+nnoremap <silent><C-h> :<C-u>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%^','bW')<CR>
+nnoremap <silent><C-l> :<C-u>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%$','W')<CR>
+inoremap <silent><C-h> <C-o>:call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%^','bW')<CR>
+inoremap <silent><C-l> <C-o>:call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%$','W')<CR>
+vnoremap <silent><C-h> :<C-U>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%^','bW')<CR>v`>o
+vnoremap <silent><C-l> <Esc>`>:<C-U>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%$','W')<CR>v`<o
+
+inoremap " ""<left>
+inoremap ' ''<left>
+inoremap ( ()<left>
+inoremap [ []<left>
+inoremap { {}<left>
+inoremap {<CR> {<CR>}<ESC>O
+
+"window resizing
+if bufwinnr(1)
+ nnoremap <right> <c-w>>
+ nnoremap <left> <c-w><
+ nnoremap <up> <c-w>-
+ nnoremap <down> <c-w>+
+endif
+
+if has('cscope')
+ set cscopetag cscopeverbose
+
+ if has('quickfix')
+ set cscopequickfix=s-,c-,d-,i-,t-,e-
+ endif
+
+ cnoreabbrev <expr> csa ((getcmdtype() == ':' && getcmdpos() <= 4)? 'cs add' : 'csa')
+ cnoreabbrev <expr> csf ((getcmdtype() == ':' && getcmdpos() <= 4)? 'cs find' : 'csf')
+ cnoreabbrev <expr> csk ((getcmdtype() == ':' && getcmdpos() <= 4)? 'cs kill' : 'csk')
+ cnoreabbrev <expr> csr ((getcmdtype() == ':' && getcmdpos() <= 4)? 'cs reset' : 'csr')
+ cnoreabbrev <expr> css ((getcmdtype() == ':' && getcmdpos() <= 4)? 'cs show' : 'css')
+ cnoreabbrev <expr> csh ((getcmdtype() == ':' && getcmdpos() <= 4)? 'cs help' : 'csh')
+
+ command -nargs=0 Cscope cs add $VIMSRC/src/cscope.out $VIMSRC/src
+endif
+
+if has("gui")
+ set guifont=DejaVu_Sans_Mono_for_Powerline:h10
+ set guioptions-=m
+ set guioptions-=T
+ set guioptions-=L
+ set guioptions-=r
+endif
diff --git a/baseline/.zshrc b/baseline/.zshrc
new file mode 100644
index 0000000..f921cd7
--- /dev/null
+++ b/baseline/.zshrc
@@ -0,0 +1,62 @@
+export ZSH=~/.oh-my-zsh
+ZSH_THEME="robbyrussell"
+COMPLETION_WAITING_DOTS="true"
+plugins=(
+ git
+ zsh-syntax-highlighting
+ autojump
+)
+source $ZSH/oh-my-zsh.sh
+function dig {
+ globalholecounter=0
+ if test "$(ls -A "~/abbatoir")"; then
+ while [ 1 ]; do
+ if [ -d "~/abbatoir/hole$globalholecounter" ]; then
+ if test "$(ls -A "~/abbatoir/hole$globalholecounter")"; then
+ :
+ else
+ cd ~/abbatoir/hole$globalholecounter
+ break
+ fi
+ else
+ mkdir ~/abbatoir/hole$globalholecounter
+ cd ~/abbatoir/hole$globalholecounter
+ echo $globalholecounter
+ break
+ fi
+ ((globalholecounter++))
+ done
+ else
+ mkdir ~/abbatoir
+ mkdir ~/abbatoir/hole$globalholecounter
+ cd ~/abbatoir/hole$globalholecounter
+ fi
+}
+if [[ -n $SSH_CONNECTION ]]; then
+ export EDITOR='vim'
+else
+ export EDITOR='mvim'
+fi
+alias quit="exit"
+alias clean="clear"
+alias la="ls -A"
+alias digg="dig && clear"
+alias lss="ls -s"
+function clearhalf {
+ size=$(stty size|gawk '{print$1}')
+ size=$(($size/2))
+ tput cup $size 0 && tput ed
+}
+alias cleanhalf="clearhalf"
+alias halfclear="clearhalf"
+alias halfclean="clearhalf"
+alias mv="mv -i"
+alias cp="cp -i"
+alias contest="ping 4.2.2.4 -c 7"
+function math {
+ echo $(($1))
+}
+
+#nvm
+export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
+[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
diff --git a/baseline/startup.sh b/baseline/startup.sh
new file mode 100755
index 0000000..13a4caa
--- /dev/null
+++ b/baseline/startup.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+DISTRO=$(sudo cat /etc/*-release | grep "\<NAME")
+if [ $DISTRO = *"Fedora"* ]; then
+ PCKMG="dnf install -y"
+elif [ $DISTRO = *"Cent"* ]; then
+ PCKMG="yum install -y"
+elif [ $DISTRO = *"Ubuntu"* ]; then
+ PCKMG="apt install -y"
+elif [ $DISTRO = *"Debian"* ]; then
+ PCKMG="apt install -y"
+elif [ $DISTRO = *"Alpine"* ]; then
+ PCKMG="apk add"
+fi
+PCKMG="apt install -y"
+
+#get some bare essentials
+sudo $PCKMG make cmake gcc gdb python3 vim lynx tmux zsh curl wget ksh ctags
+
+#copy dot files
+cp .tmux.conf ~/
+cp .vimrc ~/
+
+#setup hole diggin'
+if [ ! -d "$HOME/abbatoir" ]; then
+ mkdir $HOME/abbatoir
+fi
+
+#vundle
+git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
+
+#nvm
+curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash
+
+#oh-my-zsh
+sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
+cp .zshrc ~/
+#autojump
+(cd ~; git clone https://github.com/wting/autojump)
+(cd ~/autojump; ./install.py)
+echo "#autojump" >> ~/.zshrc
+(cd ~; echo "[[ -s $(pwd)/.autojump/etc/profile.d/autojump.sh ]] && source $(pwd)/.autojump/etc/profile.d/autojump.sh" >> ~/.zshrc)
+echo "autoload -U compinit && compinit -u" >> ~/.zshrc
+
+#zsh-syntax-highlighting
+(cd ~/.oh-my-zsh/plugins; git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/plugins/zsh-syntax-highlighting)
diff --git a/baseline/ufw-allow-mosh b/baseline/ufw-allow-mosh
new file mode 100755
index 0000000..3f696ca
--- /dev/null
+++ b/baseline/ufw-allow-mosh
@@ -0,0 +1,31 @@
+#!/bin/bash
+# ripped off from here:https://stephenreescarter.net/mosh-and-ufw-without-1000-open-ports/
+# add entry in sudoers: my-awesome-user ALL:(ALL:ALL) NOPASSWD: /usr/local/bin/ufw-allow-mosh
+# then add this in zshrc: sudo /usr/local/bin/ufw-allow-mosh
+
+# Load active ports
+PORTS=`lsof -i | grep mosh-serv | cut -f2 -d":"`
+STATUS=`sudo ufw status`
+
+# Add Rules for new ports
+for PORT in $PORTS; do
+
+ echo $STATUS | grep "$PORT/udp" > /dev/null
+ if [ $? -gt 0 ]; then
+ echo "Allowing new port $PORT"
+ sudo ufw allow $PORT/udp > /dev/null
+ fi
+done
+
+# Remove closed ports
+PORTS=`sudo ufw status | grep "^60.../udp" | cut -f1 -d"/" | sort | uniq`
+OPEN=`lsof -i | grep mosh-serv`
+
+for PORT in $PORTS; do
+
+ echo $OPEN | grep $PORT > /dev/null
+ if [ $? -gt 0 ]; then
+ echo "Removing closed port $PORT."
+ sudo ufw delete allow $PORT/udp > /dev/null
+ fi
+done
diff --git a/bin/astdump b/bin/astdump
new file mode 100755
index 0000000..668913d
--- /dev/null
+++ b/bin/astdump
@@ -0,0 +1,44 @@
+#!/bin/bash
+
+INPUT="./testFuncs1.c"
+OUTPUT="./dump"
+OPTIONS="--"
+RUN="1"
+
+while [[ $# -gt 0 ]]
+do
+ passarg="$1"
+
+ case $passarg in
+ -i|--input)
+ INPUT="$2"
+ shift
+ ;;
+ -o|--output)
+ OUTPUT="$2"
+ shift
+ ;;
+ -op|--options)
+ OPTIONS="$2"
+ shift
+ ;;
+ -h|--help)
+ echo "the script simply dumps the AST of the input."
+ echo "-i|--input the input file full path."
+ echo "-o|--output the output fule full path."
+ echo "-op|--options extra options to pass to clang"
+ echo "-h|--help prints out the help."
+ RUN="0"
+ ;;
+ *)
+ echo $1 is not a valid argument...
+ RUN="0"
+ shift
+ esac
+ shift
+done
+
+if [[ "$RUN" == "1" ]]; then
+ "clang" -Xclang -ast-dump -fsyntax-only "$INPUT" "$OPTIONS" > "$OUTPUT"
+
+fi
diff --git a/bin/bruiser b/bin/bruiser
new file mode 120000
index 0000000..00bea13
--- /dev/null
+++ b/bin/bruiser
@@ -0,0 +1 @@
+/home/bloodstalker/devi/hell2/bruiser/bruiser \ No newline at end of file
diff --git a/bin/cgrep b/bin/cgrep
new file mode 120000
index 0000000..80f8897
--- /dev/null
+++ b/bin/cgrep
@@ -0,0 +1 @@
+/home/bloodstalker/extra/cgrep/cgrep \ No newline at end of file
diff --git a/bin/colo b/bin/colo
new file mode 100755
index 0000000..ac2818d
--- /dev/null
+++ b/bin/colo
@@ -0,0 +1,136 @@
+#!/usr/bin/env python3
+# _*_ coding=utf-8 _*_
+
+import argparse
+import code
+import os
+import signal
+import sys
+from html.parser import HTMLParser
+
+
+# BASH_STR = 'printf "\x1b[38;5;XXXmcolourXXX YYY \x1b[0m\t";'
+BASH_STR = '\x1b[38;5;XXXmcolourXXX YYY \x1b[0m\t'
+BASH_ANSI_STR = '\\x1b[38;5;XXXm'
+COLO_LIST = []
+LJUST_CONST = 4
+
+
+def SigHandler_SIGINT(signum, frame):
+ print()
+ sys.exit(0)
+
+
+class Argparser(object):
+ def __init__(self):
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--ansi", action="store_true",
+ help="bool", default=False)
+ parser.add_argument("--hsi", action="store_true",
+ help="bool", default=False)
+ parser.add_argument("--rgb", action="store_true",
+ help="bool", default=False)
+ parser.add_argument("--number", action="store_true",
+ help="bool", default=False)
+ parser.add_argument("--name", action="store_true",
+ help="bool", default=False)
+ parser.add_argument("--hex", action="store_true",
+ help="bool", default=False)
+ parser.add_argument("--dbg", action="store_true",
+ help="debug", default=False)
+ self.args = parser.parse_args()
+
+
+class ColoParser(HTMLParser):
+ def handle_data(self, data):
+ if data == "\n":
+ pass
+ else:
+ COLO_LIST.append(data)
+
+
+def premain(argparser):
+ signal.signal(signal.SIGINT, SigHandler_SIGINT)
+ # here
+ PRINT_LIST = str()
+ with open(os.path.dirname(sys.argv[0])+"/index.html", "r") as colo:
+ lines = colo.readlines()
+ for line in lines:
+ parser = ColoParser()
+ parser.feed(line)
+ NUMBER_COLO_LIST = [COLO_LIST[j]
+ for j in range(0, len(COLO_LIST)) if ((j+1) % 5) == 1]
+
+ if argparser.args.hsi:
+ HSL_COLO_LIST = [COLO_LIST[j]
+ for j in range(0, len(COLO_LIST)) if ((j+1) % 5) == 0]
+ for i in range(0, len(NUMBER_COLO_LIST)):
+ if i % 6 == 0 and i != 0:
+ PRINT_LIST += "\n"
+ PRINT_LIST += BASH_STR.replace("XXX", NUMBER_COLO_LIST[i]).replace(
+ "YYY", HSL_COLO_LIST[i])
+ elif argparser.args.rgb:
+ RGB_COLO_LIST = [COLO_LIST[j]
+ for j in range(0, len(COLO_LIST)) if ((j+1) % 5) == 4]
+ for i in range(0, len(NUMBER_COLO_LIST)):
+ if i % 6 == 0 and i != 0:
+ PRINT_LIST += "\n"
+ PRINT_LIST += BASH_STR.replace("XXX", NUMBER_COLO_LIST[i]).replace(
+ "YYY", RGB_COLO_LIST[i])
+ elif argparser.args.number:
+ for i in range(0, len(NUMBER_COLO_LIST)):
+ if i % 12 == 0 and i != 0:
+ PRINT_LIST += "\n"
+ PRINT_LIST += BASH_STR.replace("XXX", NUMBER_COLO_LIST[i]).replace(
+ "YYY", NUMBER_COLO_LIST[i])
+ elif argparser.args.name:
+ NAME_COLO_LIST = [COLO_LIST[j]
+ for j in range(0, len(COLO_LIST)) if ((j+1) % 5) == 2]
+ for i in range(0, len(NUMBER_COLO_LIST)):
+ if i % 6 == 0 and i != 0:
+ PRINT_LIST += "\n"
+ PRINT_LIST += BASH_STR.replace("XXX", NUMBER_COLO_LIST[i]).replace(
+ "YYY", NAME_COLO_LIST[i])
+ elif argparser.args.hex:
+ HEX_COLO_LIST = [COLO_LIST[j]
+ for j in range(0, len(COLO_LIST)) if ((j+1) % 5) == 3]
+ for i in range(0, len(NUMBER_COLO_LIST)):
+ if i % 8 == 0 and i != 0:
+ PRINT_LIST += "\n"
+ PRINT_LIST += BASH_STR.replace("XXX", NUMBER_COLO_LIST[i]).replace(
+ "YYY", HEX_COLO_LIST[i])
+ elif argparser.args.ansi:
+ for i in range(0, len(NUMBER_COLO_LIST)):
+ if i % 6 == 0 and i != 0:
+ PRINT_LIST += "\n"
+ PRINT_LIST += BASH_STR.replace("XXX", NUMBER_COLO_LIST[i]).replace(
+ "YYY", BASH_ANSI_STR.replace("XXX", NUMBER_COLO_LIST[i]))
+ else:
+ for i in range(0, len(NUMBER_COLO_LIST)):
+ if i % 12 == 0 and i != 0:
+ PRINT_LIST += "\n"
+ PRINT_LIST += BASH_STR.replace("XXX", NUMBER_COLO_LIST[i]).replace(
+ "YYY", NUMBER_COLO_LIST[i])
+ print(PRINT_LIST)
+
+
+def main():
+ argparser = Argparser()
+ if argparser.args.dbg:
+ try:
+ premain(argparser)
+ except Exception as e:
+ if hasattr(e, "__doc__"):
+ print(e.__doc__)
+ if hasattr(e, "message"):
+ print(e.message)
+ variables = globals().copy()
+ variables.update(locals())
+ shell = code.InteractiveConsole(variables)
+ shell.interact(banner="DEBUG REPL")
+ else:
+ premain(argparser)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/bin/color b/bin/color
new file mode 100755
index 0000000..d96fde3
--- /dev/null
+++ b/bin/color
@@ -0,0 +1,6 @@
+#!/bin/sh
+for i in {0..255};do
+ if (( i % 12 == 0 )); then echo;fi
+ printf "\x1b[38;5;${i}mcolour${i}\x1b[0m\t"
+done
+echo
diff --git a/bin/colormake b/bin/colormake
new file mode 100755
index 0000000..c8f352d
--- /dev/null
+++ b/bin/colormake
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# Colored Make 2016.1.21
+# Copyright (c) 2014 Renato Silva
+# Licensed under BSD
+# https://github.com/renatosilva/colormake
+
+# Enable 256 colors for MinTTY in MSYS2
+if [[ "$MSYSCON" = mintty* && "$TERM" = *256color* ]]; then
+ red="\e[38;05;9m"
+ green="\e[38;05;76m"
+ blue="\e[38;05;74m"
+ cyan="\e[0;36m"
+ purple="\e[38;05;165m"
+ yellow="\e[0;33m"
+ gray="\e[38;05;244m"
+else
+ red="\e[1;31m"
+ green="\e[1;32m"
+ blue="\e[1;34m"
+ cyan="\e[1;36m"
+ purple="\e[1;35m"
+ yellow="\e[1;33m"
+ gray="\e[1;30m"
+fi
+normal="\e[0m"
+
+# Errors, warnings, notes and compiler recipes
+error="s/(^error|^.*[^a-z]error:)/$(printf $red)\\1$(printf $normal)/i"
+warning="s/(^warning|^.*[^a-z]warning:)/$(printf $yellow)\\1$(printf $normal)/i"
+make="s/^make(\[[0-9]+\])?:/$(printf $blue)make\\1:$(printf $normal)/"
+compiler_recipe="s/^((gcc|g\+\+|clang)(.exe)? .*)/$(printf $gray)\\1$(printf $normal)/"
+
+if [[ $(uname -or) != 1.*Msys ]]; then
+ command "${COLORMAKE_COMMAND:-make}" "$@" 2> >(sed -ru -e "$warning" -e "$error" -e "$make" -e "$compiler_recipe") \
+ > >(sed -ru -e "$warning" -e "$error" -e "$make" -e "$compiler_recipe")
+else
+ # MinGW MSYS does not support process substitution
+ command "${COLORMAKE_COMMAND:-make}" "$@" 2>&1 | sed -ru -e "$warning" -e "$error" -e "$make" -e "$compiler_recipe"
+fi
diff --git a/bin/delf b/bin/delf
new file mode 120000
index 0000000..090f766
--- /dev/null
+++ b/bin/delf
@@ -0,0 +1 @@
+/home/devi/delf/delf.py \ No newline at end of file
diff --git a/bin/disasm b/bin/disasm
new file mode 100755
index 0000000..47cd4d6
--- /dev/null
+++ b/bin/disasm
@@ -0,0 +1,50 @@
+#!/usr/bin/python3
+
+import argparse
+import code
+import readline
+import signal
+import sys
+from capstone import *
+from capstone.x86 import *
+
+def SigHandler_SIGINT(signum, frame):
+ print()
+ sys.exit(0)
+
+class Argparser(object):
+ def __init__(self):
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--hex", type=str, help="the hex code")
+ parser.add_argument("--sp", type=str, help="separator")
+ parser.add_argument("--dbg", action="store_true", help="debug", default=False)
+ self.args = parser.parse_args()
+
+# write code here
+def premain(argparser):
+ signal.signal(signal.SIGINT, SigHandler_SIGINT)
+ #here
+ code = bytes()
+ if argparser.args.hex:
+ if argparser.args.sp: hex_str = argparser.args.hex.split(argparser.args.sp)
+ else: hex_str = argparser.args.hex.split(" ")
+ code = [int(byte, 16) for byte in hex_str]
+ md = Cs(CS_ARCH_X86, CS_MODE_64)
+ for i in md.disasm(bytes(code), 0x0):
+ print(hex(i.address).ljust(7), i.mnemonic.ljust(7), i.op_str)
+
+def main():
+ argparser = Argparser()
+ if argparser.args.dbg:
+ try:
+ premain(argparser)
+ except:
+ variables = globals().copy()
+ variables.update(locals())
+ shell = code.InteractiveConsole(variables)
+ shell.interact(banner="DEBUG REPL")
+ else:
+ premain(argparser)
+
+if __name__ == "__main__":
+ main()
diff --git a/bin/dwasm b/bin/dwasm
new file mode 120000
index 0000000..4e5c2b6
--- /dev/null
+++ b/bin/dwasm
@@ -0,0 +1 @@
+/home/bloodstalker/extra/dwasm/dwasm.py \ No newline at end of file
diff --git a/bin/extractor b/bin/extractor
new file mode 100755
index 0000000..c6dc4e7
--- /dev/null
+++ b/bin/extractor
@@ -0,0 +1,67 @@
+#!/usr/bin/env lua
+
+--by Egor Skriptunoff here:https://stackoverflow.com/questions/23590304/finding-a-url-in-a-string-lua-pattern
+local extractor = {}
+function extractor.getURLS(text_with_URLs)
+ local domains = [[.ac.ad.ae.aero.af.ag.ai.al.am.an.ao.aq.ar.arpa.as.asia.at.au
+ .aw.ax.az.ba.bb.bd.be.bf.bg.bh.bi.biz.bj.bm.bn.bo.br.bs.bt.bv.bw.by.bz.ca
+ .cat.cc.cd.cf.cg.ch.ci.ck.cl.cm.cn.co.com.coop.cr.cs.cu.cv.cx.cy.cz.dd.de
+ .dj.dk.dm.do.dz.ec.edu.ee.eg.eh.er.es.et.eu.fi.firm.fj.fk.fm.fo.fr.fx.ga
+ .gb.gd.ge.gf.gh.gi.gl.gm.gn.gov.gp.gq.gr.gs.gt.gu.gw.gy.hk.hm.hn.hr.ht.hu
+ .id.ie.il.im.in.info.int.io.iq.ir.is.it.je.jm.jo.jobs.jp.ke.kg.kh.ki.km.kn
+ .kp.kr.kw.ky.kz.la.lb.lc.li.lk.lr.ls.lt.lu.lv.ly.ma.mc.md.me.mg.mh.mil.mk
+ .ml.mm.mn.mo.mobi.mp.mq.mr.ms.mt.mu.museum.mv.mw.mx.my.mz.na.name.nato.nc
+ .ne.net.nf.ng.ni.nl.no.nom.np.nr.nt.nu.nz.om.org.pa.pe.pf.pg.ph.pk.pl.pm
+ .pn.post.pr.pro.ps.pt.pw.py.qa.re.ro.ru.rw.sa.sb.sc.sd.se.sg.sh.si.sj.sk
+ .sl.sm.sn.so.sr.ss.st.store.su.sv.sy.sz.tc.td.tel.tf.tg.th.tj.tk.tl.tm.tn
+ .to.tp.tr.travel.tt.tv.tw.tz.ua.ug.uk.um.us.uy.va.vc.ve.vg.vi.vn.vu.web.wf
+ .ws.xxx.ye.yt.yu.za.zm.zr.zw]]
+
+ local tlds = {}
+
+ for tld in domains:gmatch'%w+' do
+ tlds[tld] = true
+ end
+ local function max4(a,b,c,d) return math.max(a+0, b+0, c+0, d+0) end
+ local protocols = {[''] = 0, ['http://'] = 0, ['https://'] = 0, ['ftp://'] = 0}
+ local finished = {}
+
+ for pos_start, url, prot, subd, tld, colon, port, slash, path in
+ text_with_URLs:gmatch'()(([%w_.~!*:@&+$/?%%#-]-)(%w[-.%w]*%.)(%w+)(:?)(%d*)(/?)([%w_.~!*:@&+$/?%%#=-]*))'
+ do
+ if protocols[prot:lower()] == (1 - #slash) * #path and not subd:find'%W%W'
+ and (colon == '' or port ~= '' and port + 0 < 65536)
+ and (tlds[tld:lower()] or tld:find'^%d+$' and subd:find'^%d+%.%d+%.%d+%.$'
+ and max4(tld, subd:match'^(%d+)%.(%d+)%.(%d+)%.$') < 256)
+ then
+ finished[pos_start] = true
+ print(pos_start, url)
+ end
+ end
+
+ for pos_start, url, prot, dom, colon, port, slash, path in
+ text_with_URLs:gmatch'()((%f[%w]%a+://)(%w[-.%w]*)(:?)(%d*)(/?)([%w_.~!*:@&+$/?%%#=-]*))'
+ do
+ if not finished[pos_start] and not (dom..'.'):find'%W%W'
+ and protocols[prot:lower()] == (1 - #slash) * #path
+ and (colon == '' or port ~= '' and port + 0 < 65536)
+ then
+ print(pos_start, url)
+ end
+ end
+end
+
+function main()
+ local input = io.read("*a")
+ for k,v in pairs(arg) do
+ if v == "--url" then
+ extractor.getURLS(input)
+ else
+ print("invalid args...")
+ os.exit(1)
+ end
+ end
+end
+
+main()
+return extractor
diff --git a/bin/fzf_surfraw b/bin/fzf_surfraw
new file mode 100755
index 0000000..de297c1
--- /dev/null
+++ b/bin/fzf_surfraw
@@ -0,0 +1,6 @@
+#!/usr/bin/env sh
+
+PREFIX=$(surfraw -elvi | grep -v 'LOCAL\|GLOVAL'| fzf --algo=v2 -e | awk '{print $1}')
+if [ "$PREFIX" = "" ]; then exit;fi
+read -r -e -p " $PREFIX >>> Enter The Search Keyword: " INPUT
+surfraw -p "$PREFIX" "$INPUT" | xsel -p
diff --git a/bin/fzf_surfraw_tmux b/bin/fzf_surfraw_tmux
new file mode 100755
index 0000000..b6344cc
--- /dev/null
+++ b/bin/fzf_surfraw_tmux
@@ -0,0 +1,6 @@
+#!/usr/bin/env sh
+
+PREFIX=$(surfraw -elvi | grep -v 'LOCAL\|GLOVAL'| fzf --algo=v2 -e | awk '{print $1}')
+if [ "$PREFIX" = "" ]; then exit;fi
+read -r -e -p " $PREFIX >>> Enter The Search Keyword: " INPUT
+pidof tmux >/dev/null && tmux set-buffer "$(surfraw -p "$PREFIX" "$INPUT")"
diff --git a/bin/goto_clipboard.cgi b/bin/goto_clipboard.cgi
new file mode 100755
index 0000000..faa421c
--- /dev/null
+++ b/bin/goto_clipboard.cgi
@@ -0,0 +1,4 @@
+#!/usr/bin/bash
+
+printf "%s\r\n" "W3m-control: GOTO $(xsel -ob)";
+printf "W3m-control: DELETE_PREVBUF\r\n"
diff --git a/bin/hived b/bin/hived
new file mode 120000
index 0000000..333bfce
--- /dev/null
+++ b/bin/hived
@@ -0,0 +1 @@
+../hived \ No newline at end of file
diff --git a/bin/index.html b/bin/index.html
new file mode 100644
index 0000000..fa3d7ae
--- /dev/null
+++ b/bin/index.html
@@ -0,0 +1,256 @@
+<td>0</td><td>Black</td><td>#000000</td><td>rgb(0,0,0)</td><td>hsl(0,0%,0%)</td>
+<td>1</td><td>Maroon</td><td>#800000</td><td>rgb(128,0,0)</td><td>hsl(0,100%,25%)</td>
+<td>2</td><td>Green</td><td>#008000</td><td>rgb(0,128,0)</td><td>hsl(120,100%,25%)</td>
+<td>3</td><td>Olive</td><td>#808000</td><td>rgb(128,128,0)</td><td>hsl(60,100%,25%)</td>
+<td>4</td><td>Navy</td><td>#000080</td><td>rgb(0,0,128)</td><td>hsl(240,100%,25%)</td>
+<td>5</td><td>Purple</td><td>#800080</td><td>rgb(128,0,128)</td><td>hsl(300,100%,25%)</td>
+<td>6</td><td>Teal</td><td>#008080</td><td>rgb(0,128,128)</td><td>hsl(180,100%,25%)</td>
+<td>7</td><td>Silver</td><td>#c0c0c0</td><td>rgb(192,192,192)</td><td>hsl(0,0%,75%)</td>
+<td>8</td><td>Grey</td><td>#808080</td><td>rgb(128,128,128)</td><td>hsl(0,0%,50%)</td>
+<td>9</td><td>Red</td><td>#ff0000</td><td>rgb(255,0,0)</td><td>hsl(0,100%,50%)</td>
+<td>10</td><td>Lime</td><td>#00ff00</td><td>rgb(0,255,0)</td><td>hsl(120,100%,50%)</td>
+<td>11</td><td>Yellow</td><td>#ffff00</td><td>rgb(255,255,0)</td><td>hsl(60,100%,50%)</td>
+<td>12</td><td>Blue</td><td>#0000ff</td><td>rgb(0,0,255)</td><td>hsl(240,100%,50%)</td>
+<td>13</td><td>Fuchsia</td><td>#ff00ff</td><td>rgb(255,0,255)</td><td>hsl(300,100%,50%)</td>
+<td>14</td><td>Aqua</td><td>#00ffff</td><td>rgb(0,255,255)</td><td>hsl(180,100%,50%)</td>
+<td>15</td><td>White</td><td>#ffffff</td><td>rgb(255,255,255)</td><td>hsl(0,0%,100%)</td>
+<td>16</td><td>Grey0</td><td>#000000</td><td>rgb(0,0,0)</td><td>hsl(0,0%,0%)</td>
+<td>17</td><td>NavyBlue</td><td>#00005f</td><td>rgb(0,0,95)</td><td>hsl(240,100%,18%)</td>
+<td>18</td><td>DarkBlue</td><td>#000087</td><td>rgb(0,0,135)</td><td>hsl(240,100%,26%)</td>
+<td>19</td><td>Blue3</td><td>#0000af</td><td>rgb(0,0,175)</td><td>hsl(240,100%,34%)</td>
+<td>20</td><td>Blue3</td><td>#0000d7</td><td>rgb(0,0,215)</td><td>hsl(240,100%,42%)</td>
+<td>21</td><td>Blue1</td><td>#0000ff</td><td>rgb(0,0,255)</td><td>hsl(240,100%,50%)</td>
+<td>22</td><td>DarkGreen</td><td>#005f00</td><td>rgb(0,95,0)</td><td>hsl(120,100%,18%)</td>
+<td>23</td><td>DeepSkyBlue4</td><td>#005f5f</td><td>rgb(0,95,95)</td><td>hsl(180,100%,18%)</td>
+<td>24</td><td>DeepSkyBlue4</td><td>#005f87</td><td>rgb(0,95,135)</td><td>hsl(97,100%,26%)</td>
+<td>25</td><td>DeepSkyBlue4</td><td>#005faf</td><td>rgb(0,95,175)</td><td>hsl(07,100%,34%)</td>
+<td>26</td><td>DodgerBlue3</td><td>#005fd7</td><td>rgb(0,95,215)</td><td>hsl(13,100%,42%)</td>
+<td>27</td><td>DodgerBlue2</td><td>#005fff</td><td>rgb(0,95,255)</td><td>hsl(17,100%,50%)</td>
+<td>28</td><td>Green4</td><td>#008700</td><td>rgb(0,135,0)</td><td>hsl(120,100%,26%)</td>
+<td>29</td><td>SpringGreen4</td><td>#00875f</td><td>rgb(0,135,95)</td><td>hsl(62,100%,26%)</td>
+<td>30</td><td>Turquoise4</td><td>#008787</td><td>rgb(0,135,135)</td><td>hsl(180,100%,26%)</td>
+<td>31</td><td>DeepSkyBlue3</td><td>#0087af</td><td>rgb(0,135,175)</td><td>hsl(93,100%,34%)</td>
+<td>32</td><td>DeepSkyBlue3</td><td>#0087d7</td><td>rgb(0,135,215)</td><td>hsl(02,100%,42%)</td>
+<td>33</td><td>DodgerBlue1</td><td>#0087ff</td><td>rgb(0,135,255)</td><td>hsl(08,100%,50%)</td>
+<td>34</td><td>Green3</td><td>#00af00</td><td>rgb(0,175,0)</td><td>hsl(120,100%,34%)</td>
+<td>35</td><td>SpringGreen3</td><td>#00af5f</td><td>rgb(0,175,95)</td><td>hsl(52,100%,34%)</td>
+<td>36</td><td>DarkCyan</td><td>#00af87</td><td>rgb(0,175,135)</td><td>hsl(66,100%,34%)</td>
+<td>37</td><td>LightSeaGreen</td><td>#00afaf</td><td>rgb(0,175,175)</td><td>hsl(180,100%,34%)</td>
+<td>38</td><td>DeepSkyBlue2</td><td>#00afd7</td><td>rgb(0,175,215)</td><td>hsl(91,100%,42%)</td>
+<td>39</td><td>DeepSkyBlue1</td><td>#00afff</td><td>rgb(0,175,255)</td><td>hsl(98,100%,50%)</td>
+<td>40</td><td>Green3</td><td>#00d700</td><td>rgb(0,215,0)</td><td>hsl(120,100%,42%)</td>
+<td>41</td><td>SpringGreen3</td><td>#00d75f</td><td>rgb(0,215,95)</td><td>hsl(46,100%,42%)</td>
+<td>42</td><td>SpringGreen2</td><td>#00d787</td><td>rgb(0,215,135)</td><td>hsl(57,100%,42%)</td>
+<td>43</td><td>Cyan3</td><td>#00d7af</td><td>rgb(0,215,175)</td><td>hsl(68,100%,42%)</td>
+<td>44</td><td>DarkTurquoise</td><td>#00d7d7</td><td>rgb(0,215,215)</td><td>hsl(180,100%,42%)</td>
+<td>45</td><td>Turquoise2</td><td>#00d7ff</td><td>rgb(0,215,255)</td><td>hsl(89,100%,50%)</td>
+<td>46</td><td>Green1</td><td>#00ff00</td><td>rgb(0,255,0)</td><td>hsl(120,100%,50%)</td>
+<td>47</td><td>SpringGreen2</td><td>#00ff5f</td><td>rgb(0,255,95)</td><td>hsl(42,100%,50%)</td>
+<td>48</td><td>SpringGreen1</td><td>#00ff87</td><td>rgb(0,255,135)</td><td>hsl(51,100%,50%)</td>
+<td>49</td><td>MediumSpringGreen</td><td>#00ffaf</td><td>rgb(0,255,175)</td><td>hsl(61,100%,50%)</td>
+<td>50</td><td>Cyan2</td><td>#00ffd7</td><td>rgb(0,255,215)</td><td>hsl(70,100%,50%)</td>
+<td>51</td><td>Cyan1</td><td>#00ffff</td><td>rgb(0,255,255)</td><td>hsl(180,100%,50%)</td>
+<td>52</td><td>DarkRed</td><td>#5f0000</td><td>rgb(95,0,0)</td><td>hsl(0,100%,18%)</td>
+<td>53</td><td>DeepPink4</td><td>#5f005f</td><td>rgb(95,0,95)</td><td>hsl(300,100%,18%)</td>
+<td>54</td><td>Purple4</td><td>#5f0087</td><td>rgb(95,0,135)</td><td>hsl(82,100%,26%)</td>
+<td>55</td><td>Purple4</td><td>#5f00af</td><td>rgb(95,0,175)</td><td>hsl(72,100%,34%)</td>
+<td>56</td><td>Purple3</td><td>#5f00d7</td><td>rgb(95,0,215)</td><td>hsl(66,100%,42%)</td>
+<td>57</td><td>BlueViolet</td><td>#5f00ff</td><td>rgb(95,0,255)</td><td>hsl(62,100%,50%)</td>
+<td>58</td><td>Orange4</td><td>#5f5f00</td><td>rgb(95,95,0)</td><td>hsl(60,100%,18%)</td>
+<td>59</td><td>Grey37</td><td>#5f5f5f</td><td>rgb(95,95,95)</td><td>hsl(0,0%,37%)</td>
+<td>60</td><td>MediumPurple4</td><td>#5f5f87</td><td>rgb(95,95,135)</td><td>hsl(240,17%,45%)</td>
+<td>61</td><td>SlateBlue3</td><td>#5f5faf</td><td>rgb(95,95,175)</td><td>hsl(240,33%,52%)</td>
+<td>62</td><td>SlateBlue3</td><td>#5f5fd7</td><td>rgb(95,95,215)</td><td>hsl(240,60%,60%)</td>
+<td>63</td><td>RoyalBlue1</td><td>#5f5fff</td><td>rgb(95,95,255)</td><td>hsl(240,100%,68%)</td>
+<td>64</td><td>Chartreuse4</td><td>#5f8700</td><td>rgb(95,135,0)</td><td>hsl(7,100%,26%)</td>
+<td>65</td><td>DarkSeaGreen4</td><td>#5f875f</td><td>rgb(95,135,95)</td><td>hsl(120,17%,45%)</td>
+<td>66</td><td>PaleTurquoise4</td><td>#5f8787</td><td>rgb(95,135,135)</td><td>hsl(180,17%,45%)</td>
+<td>67</td><td>SteelBlue</td><td>#5f87af</td><td>rgb(95,135,175)</td><td>hsl(210,33%,52%)</td>
+<td>68</td><td>SteelBlue3</td><td>#5f87d7</td><td>rgb(95,135,215)</td><td>hsl(220,60%,60%)</td>
+<td>69</td><td>CornflowerBlue</td><td>#5f87ff</td><td>rgb(95,135,255)</td><td>hsl(225,100%,68%)</td>
+<td>70</td><td>Chartreuse3</td><td>#5faf00</td><td>rgb(95,175,0)</td><td>hsl(7,100%,34%)</td>
+<td>71</td><td>DarkSeaGreen4</td><td>#5faf5f</td><td>rgb(95,175,95)</td><td>hsl(120,33%,52%)</td>
+<td>72</td><td>CadetBlue</td><td>#5faf87</td><td>rgb(95,175,135)</td><td>hsl(150,33%,52%)</td>
+<td>73</td><td>CadetBlue</td><td>#5fafaf</td><td>rgb(95,175,175)</td><td>hsl(180,33%,52%)</td>
+<td>74</td><td>SkyBlue3</td><td>#5fafd7</td><td>rgb(95,175,215)</td><td>hsl(200,60%,60%)</td>
+<td>75</td><td>SteelBlue1</td><td>#5fafff</td><td>rgb(95,175,255)</td><td>hsl(210,100%,68%)</td>
+<td>76</td><td>Chartreuse3</td><td>#5fd700</td><td>rgb(95,215,0)</td><td>hsl(3,100%,42%)</td>
+<td>77</td><td>PaleGreen3</td><td>#5fd75f</td><td>rgb(95,215,95)</td><td>hsl(120,60%,60%)</td>
+<td>78</td><td>SeaGreen3</td><td>#5fd787</td><td>rgb(95,215,135)</td><td>hsl(140,60%,60%)</td>
+<td>79</td><td>Aquamarine3</td><td>#5fd7af</td><td>rgb(95,215,175)</td><td>hsl(160,60%,60%)</td>
+<td>80</td><td>MediumTurquoise</td><td>#5fd7d7</td><td>rgb(95,215,215)</td><td>hsl(180,60%,60%)</td>
+<td>81</td><td>SteelBlue1</td><td>#5fd7ff</td><td>rgb(95,215,255)</td><td>hsl(195,100%,68%)</td>
+<td>82</td><td>Chartreuse2</td><td>#5fff00</td><td>rgb(95,255,0)</td><td>hsl(7,100%,50%)</td>
+<td>83</td><td>SeaGreen2</td><td>#5fff5f</td><td>rgb(95,255,95)</td><td>hsl(120,100%,68%)</td>
+<td>84</td><td>SeaGreen1</td><td>#5fff87</td><td>rgb(95,255,135)</td><td>hsl(135,100%,68%)</td>
+<td>85</td><td>SeaGreen1</td><td>#5fffaf</td><td>rgb(95,255,175)</td><td>hsl(150,100%,68%)</td>
+<td>86</td><td>Aquamarine1</td><td>#5fffd7</td><td>rgb(95,255,215)</td><td>hsl(165,100%,68%)</td>
+<td>87</td><td>DarkSlateGray2</td><td>#5fffff</td><td>rgb(95,255,255)</td><td>hsl(180,100%,68%)</td>
+<td>88</td><td>DarkRed</td><td>#870000</td><td>rgb(135,0,0)</td><td>hsl(0,100%,26%)</td>
+<td>89</td><td>DeepPink4</td><td>#87005f</td><td>rgb(135,0,95)</td><td>hsl(17,100%,26%)</td>
+<td>90</td><td>DarkMagenta</td><td>#870087</td><td>rgb(135,0,135)</td><td>hsl(300,100%,26%)</td>
+<td>91</td><td>DarkMagenta</td><td>#8700af</td><td>rgb(135,0,175)</td><td>hsl(86,100%,34%)</td>
+<td>92</td><td>DarkViolet</td><td>#8700d7</td><td>rgb(135,0,215)</td><td>hsl(77,100%,42%)</td>
+<td>93</td><td>Purple</td><td>#8700ff</td><td>rgb(135,0,255)</td><td>hsl(71,100%,50%)</td>
+<td>94</td><td>Orange4</td><td>#875f00</td><td>rgb(135,95,0)</td><td>hsl(2,100%,26%)</td>
+<td>95</td><td>LightPink4</td><td>#875f5f</td><td>rgb(135,95,95)</td><td>hsl(0,17%,45%)</td>
+<td>96</td><td>Plum4</td><td>#875f87</td><td>rgb(135,95,135)</td><td>hsl(300,17%,45%)</td>
+<td>97</td><td>MediumPurple3</td><td>#875faf</td><td>rgb(135,95,175)</td><td>hsl(270,33%,52%)</td>
+<td>98</td><td>MediumPurple3</td><td>#875fd7</td><td>rgb(135,95,215)</td><td>hsl(260,60%,60%)</td>
+<td>99</td><td>SlateBlue1</td><td>#875fff</td><td>rgb(135,95,255)</td><td>hsl(255,100%,68%)</td>
+<td>100</td><td>Yellow4</td><td>#878700</td><td>rgb(135,135,0)</td><td>hsl(60,100%,26%)</td>
+<td>101</td><td>Wheat4</td><td>#87875f</td><td>rgb(135,135,95)</td><td>hsl(60,17%,45%)</td>
+<td>102</td><td>Grey53</td><td>#878787</td><td>rgb(135,135,135)</td><td>hsl(0,0%,52%)</td>
+<td>103</td><td>LightSlateGrey</td><td>#8787af</td><td>rgb(135,135,175)</td><td>hsl(240,20%,60%)</td>
+<td>104</td><td>MediumPurple</td><td>#8787d7</td><td>rgb(135,135,215)</td><td>hsl(240,50%,68%)</td>
+<td>105</td><td>LightSlateBlue</td><td>#8787ff</td><td>rgb(135,135,255)</td><td>hsl(240,100%,76%)</td>
+<td>106</td><td>Yellow4</td><td>#87af00</td><td>rgb(135,175,0)</td><td>hsl(3,100%,34%)</td>
+<td>107</td><td>DarkOliveGreen3</td><td>#87af5f</td><td>rgb(135,175,95)</td><td>hsl(90,33%,52%)</td>
+<td>108</td><td>DarkSeaGreen</td><td>#87af87</td><td>rgb(135,175,135)</td><td>hsl(120,20%,60%)</td>
+<td>109</td><td>LightSkyBlue3</td><td>#87afaf</td><td>rgb(135,175,175)</td><td>hsl(180,20%,60%)</td>
+<td>110</td><td>LightSkyBlue3</td><td>#87afd7</td><td>rgb(135,175,215)</td><td>hsl(210,50%,68%)</td>
+<td>111</td><td>SkyBlue2</td><td>#87afff</td><td>rgb(135,175,255)</td><td>hsl(220,100%,76%)</td>
+<td>112</td><td>Chartreuse2</td><td>#87d700</td><td>rgb(135,215,0)</td><td>hsl(2,100%,42%)</td>
+<td>113</td><td>DarkOliveGreen3</td><td>#87d75f</td><td>rgb(135,215,95)</td><td>hsl(100,60%,60%)</td>
+<td>114</td><td>PaleGreen3</td><td>#87d787</td><td>rgb(135,215,135)</td><td>hsl(120,50%,68%)</td>
+<td>115</td><td>DarkSeaGreen3</td><td>#87d7af</td><td>rgb(135,215,175)</td><td>hsl(150,50%,68%)</td>
+<td>116</td><td>DarkSlateGray3</td><td>#87d7d7</td><td>rgb(135,215,215)</td><td>hsl(180,50%,68%)</td>
+<td>117</td><td>SkyBlue1</td><td>#87d7ff</td><td>rgb(135,215,255)</td><td>hsl(200,100%,76%)</td>
+<td>118</td><td>Chartreuse1</td><td>#87ff00</td><td>rgb(135,255,0)</td><td>hsl(8,100%,50%)</td>
+<td>119</td><td>LightGreen</td><td>#87ff5f</td><td>rgb(135,255,95)</td><td>hsl(105,100%,68%)</td>
+<td>120</td><td>LightGreen</td><td>#87ff87</td><td>rgb(135,255,135)</td><td>hsl(120,100%,76%)</td>
+<td>121</td><td>PaleGreen1</td><td>#87ffaf</td><td>rgb(135,255,175)</td><td>hsl(140,100%,76%)</td>
+<td>122</td><td>Aquamarine1</td><td>#87ffd7</td><td>rgb(135,255,215)</td><td>hsl(160,100%,76%)</td>
+<td>123</td><td>DarkSlateGray1</td><td>#87ffff</td><td>rgb(135,255,255)</td><td>hsl(180,100%,76%)</td>
+<td>124</td><td>Red3</td><td>#af0000</td><td>rgb(175,0,0)</td><td>hsl(0,100%,34%)</td>
+<td>125</td><td>DeepPink4</td><td>#af005f</td><td>rgb(175,0,95)</td><td>hsl(27,100%,34%)</td>
+<td>126</td><td>MediumVioletRed</td><td>#af0087</td><td>rgb(175,0,135)</td><td>hsl(13,100%,34%)</td>
+<td>127</td><td>Magenta3</td><td>#af00af</td><td>rgb(175,0,175)</td><td>hsl(300,100%,34%)</td>
+<td>128</td><td>DarkViolet</td><td>#af00d7</td><td>rgb(175,0,215)</td><td>hsl(88,100%,42%)</td>
+<td>129</td><td>Purple</td><td>#af00ff</td><td>rgb(175,0,255)</td><td>hsl(81,100%,50%)</td>
+<td>130</td><td>DarkOrange3</td><td>#af5f00</td><td>rgb(175,95,0)</td><td>hsl(2,100%,34%)</td>
+<td>131</td><td>IndianRed</td><td>#af5f5f</td><td>rgb(175,95,95)</td><td>hsl(0,33%,52%)</td>
+<td>132</td><td>HotPink3</td><td>#af5f87</td><td>rgb(175,95,135)</td><td>hsl(330,33%,52%)</td>
+<td>133</td><td>MediumOrchid3</td><td>#af5faf</td><td>rgb(175,95,175)</td><td>hsl(300,33%,52%)</td>
+<td>134</td><td>MediumOrchid</td><td>#af5fd7</td><td>rgb(175,95,215)</td><td>hsl(280,60%,60%)</td>
+<td>135</td><td>MediumPurple2</td><td>#af5fff</td><td>rgb(175,95,255)</td><td>hsl(270,100%,68%)</td>
+<td>136</td><td>DarkGoldenrod</td><td>#af8700</td><td>rgb(175,135,0)</td><td>hsl(6,100%,34%)</td>
+<td>137</td><td>LightSalmon3</td><td>#af875f</td><td>rgb(175,135,95)</td><td>hsl(30,33%,52%)</td>
+<td>138</td><td>RosyBrown</td><td>#af8787</td><td>rgb(175,135,135)</td><td>hsl(0,20%,60%)</td>
+<td>139</td><td>Grey63</td><td>#af87af</td><td>rgb(175,135,175)</td><td>hsl(300,20%,60%)</td>
+<td>140</td><td>MediumPurple2</td><td>#af87d7</td><td>rgb(175,135,215)</td><td>hsl(270,50%,68%)</td>
+<td>141</td><td>MediumPurple1</td><td>#af87ff</td><td>rgb(175,135,255)</td><td>hsl(260,100%,76%)</td>
+<td>142</td><td>Gold3</td><td>#afaf00</td><td>rgb(175,175,0)</td><td>hsl(60,100%,34%)</td>
+<td>143</td><td>DarkKhaki</td><td>#afaf5f</td><td>rgb(175,175,95)</td><td>hsl(60,33%,52%)</td>
+<td>144</td><td>NavajoWhite3</td><td>#afaf87</td><td>rgb(175,175,135)</td><td>hsl(60,20%,60%)</td>
+<td>145</td><td>Grey69</td><td>#afafaf</td><td>rgb(175,175,175)</td><td>hsl(0,0%,68%)</td>
+<td>146</td><td>LightSteelBlue3</td><td>#afafd7</td><td>rgb(175,175,215)</td><td>hsl(240,33%,76%)</td>
+<td>147</td><td>LightSteelBlue</td><td>#afafff</td><td>rgb(175,175,255)</td><td>hsl(240,100%,84%)</td>
+<td>148</td><td>Yellow3</td><td>#afd700</td><td>rgb(175,215,0)</td><td>hsl(1,100%,42%)</td>
+<td>149</td><td>DarkOliveGreen3</td><td>#afd75f</td><td>rgb(175,215,95)</td><td>hsl(80,60%,60%)</td>
+<td>150</td><td>DarkSeaGreen3</td><td>#afd787</td><td>rgb(175,215,135)</td><td>hsl(90,50%,68%)</td>
+<td>151</td><td>DarkSeaGreen2</td><td>#afd7af</td><td>rgb(175,215,175)</td><td>hsl(120,33%,76%)</td>
+<td>152</td><td>LightCyan3</td><td>#afd7d7</td><td>rgb(175,215,215)</td><td>hsl(180,33%,76%)</td>
+<td>153</td><td>LightSkyBlue1</td><td>#afd7ff</td><td>rgb(175,215,255)</td><td>hsl(210,100%,84%)</td>
+<td>154</td><td>GreenYellow</td><td>#afff00</td><td>rgb(175,255,0)</td><td>hsl(8,100%,50%)</td>
+<td>155</td><td>DarkOliveGreen2</td><td>#afff5f</td><td>rgb(175,255,95)</td><td>hsl(90,100%,68%)</td>
+<td>156</td><td>PaleGreen1</td><td>#afff87</td><td>rgb(175,255,135)</td><td>hsl(100,100%,76%)</td>
+<td>157</td><td>DarkSeaGreen2</td><td>#afffaf</td><td>rgb(175,255,175)</td><td>hsl(120,100%,84%)</td>
+<td>158</td><td>DarkSeaGreen1</td><td>#afffd7</td><td>rgb(175,255,215)</td><td>hsl(150,100%,84%)</td>
+<td>159</td><td>PaleTurquoise1</td><td>#afffff</td><td>rgb(175,255,255)</td><td>hsl(180,100%,84%)</td>
+<td>160</td><td>Red3</td><td>#d70000</td><td>rgb(215,0,0)</td><td>hsl(0,100%,42%)</td>
+<td>161</td><td>DeepPink3</td><td>#d7005f</td><td>rgb(215,0,95)</td><td>hsl(33,100%,42%)</td>
+<td>162</td><td>DeepPink3</td><td>#d70087</td><td>rgb(215,0,135)</td><td>hsl(22,100%,42%)</td>
+<td>163</td><td>Magenta3</td><td>#d700af</td><td>rgb(215,0,175)</td><td>hsl(11,100%,42%)</td>
+<td>164</td><td>Magenta3</td><td>#d700d7</td><td>rgb(215,0,215)</td><td>hsl(300,100%,42%)</td>
+<td>165</td><td>Magenta2</td><td>#d700ff</td><td>rgb(215,0,255)</td><td>hsl(90,100%,50%)</td>
+<td>166</td><td>DarkOrange3</td><td>#d75f00</td><td>rgb(215,95,0)</td><td>hsl(6,100%,42%)</td>
+<td>167</td><td>IndianRed</td><td>#d75f5f</td><td>rgb(215,95,95)</td><td>hsl(0,60%,60%)</td>
+<td>168</td><td>HotPink3</td><td>#d75f87</td><td>rgb(215,95,135)</td><td>hsl(340,60%,60%)</td>
+<td>169</td><td>HotPink2</td><td>#d75faf</td><td>rgb(215,95,175)</td><td>hsl(320,60%,60%)</td>
+<td>170</td><td>Orchid</td><td>#d75fd7</td><td>rgb(215,95,215)</td><td>hsl(300,60%,60%)</td>
+<td>171</td><td>MediumOrchid1</td><td>#d75fff</td><td>rgb(215,95,255)</td><td>hsl(285,100%,68%)</td>
+<td>172</td><td>Orange3</td><td>#d78700</td><td>rgb(215,135,0)</td><td>hsl(7,100%,42%)</td>
+<td>173</td><td>LightSalmon3</td><td>#d7875f</td><td>rgb(215,135,95)</td><td>hsl(20,60%,60%)</td>
+<td>174</td><td>LightPink3</td><td>#d78787</td><td>rgb(215,135,135)</td><td>hsl(0,50%,68%)</td>
+<td>175</td><td>Pink3</td><td>#d787af</td><td>rgb(215,135,175)</td><td>hsl(330,50%,68%)</td>
+<td>176</td><td>Plum3</td><td>#d787d7</td><td>rgb(215,135,215)</td><td>hsl(300,50%,68%)</td>
+<td>177</td><td>Violet</td><td>#d787ff</td><td>rgb(215,135,255)</td><td>hsl(280,100%,76%)</td>
+<td>178</td><td>Gold3</td><td>#d7af00</td><td>rgb(215,175,0)</td><td>hsl(8,100%,42%)</td>
+<td>179</td><td>LightGoldenrod3</td><td>#d7af5f</td><td>rgb(215,175,95)</td><td>hsl(40,60%,60%)</td>
+<td>180</td><td>Tan</td><td>#d7af87</td><td>rgb(215,175,135)</td><td>hsl(30,50%,68%)</td>
+<td>181</td><td>MistyRose3</td><td>#d7afaf</td><td>rgb(215,175,175)</td><td>hsl(0,33%,76%)</td>
+<td>182</td><td>Thistle3</td><td>#d7afd7</td><td>rgb(215,175,215)</td><td>hsl(300,33%,76%)</td>
+<td>183</td><td>Plum2</td><td>#d7afff</td><td>rgb(215,175,255)</td><td>hsl(270,100%,84%)</td>
+<td>184</td><td>Yellow3</td><td>#d7d700</td><td>rgb(215,215,0)</td><td>hsl(60,100%,42%)</td>
+<td>185</td><td>Khaki3</td><td>#d7d75f</td><td>rgb(215,215,95)</td><td>hsl(60,60%,60%)</td>
+<td>186</td><td>LightGoldenrod2</td><td>#d7d787</td><td>rgb(215,215,135)</td><td>hsl(60,50%,68%)</td>
+<td>187</td><td>LightYellow3</td><td>#d7d7af</td><td>rgb(215,215,175)</td><td>hsl(60,33%,76%)</td>
+<td>188</td><td>Grey84</td><td>#d7d7d7</td><td>rgb(215,215,215)</td><td>hsl(0,0%,84%)</td>
+<td>189</td><td>LightSteelBlue1</td><td>#d7d7ff</td><td>rgb(215,215,255)</td><td>hsl(240,100%,92%)</td>
+<td>190</td><td>Yellow2</td><td>#d7ff00</td><td>rgb(215,255,0)</td><td>hsl(9,100%,50%)</td>
+<td>191</td><td>DarkOliveGreen1</td><td>#d7ff5f</td><td>rgb(215,255,95)</td><td>hsl(75,100%,68%)</td>
+<td>192</td><td>DarkOliveGreen1</td><td>#d7ff87</td><td>rgb(215,255,135)</td><td>hsl(80,100%,76%)</td>
+<td>193</td><td>DarkSeaGreen1</td><td>#d7ffaf</td><td>rgb(215,255,175)</td><td>hsl(90,100%,84%)</td>
+<td>194</td><td>Honeydew2</td><td>#d7ffd7</td><td>rgb(215,255,215)</td><td>hsl(120,100%,92%)</td>
+<td>195</td><td>LightCyan1</td><td>#d7ffff</td><td>rgb(215,255,255)</td><td>hsl(180,100%,92%)</td>
+<td>196</td><td>Red1</td><td>#ff0000</td><td>rgb(255,0,0)</td><td>hsl(0,100%,50%)</td>
+<td>197</td><td>DeepPink2</td><td>#ff005f</td><td>rgb(255,0,95)</td><td>hsl(37,100%,50%)</td>
+<td>198</td><td>DeepPink1</td><td>#ff0087</td><td>rgb(255,0,135)</td><td>hsl(28,100%,50%)</td>
+<td>199</td><td>DeepPink1</td><td>#ff00af</td><td>rgb(255,0,175)</td><td>hsl(18,100%,50%)</td>
+<td>200</td><td>Magenta2</td><td>#ff00d7</td><td>rgb(255,0,215)</td><td>hsl(09,100%,50%)</td>
+<td>201</td><td>Magenta1</td><td>#ff00ff</td><td>rgb(255,0,255)</td><td>hsl(300,100%,50%)</td>
+<td>202</td><td>OrangeRed1</td><td>#ff5f00</td><td>rgb(255,95,0)</td><td>hsl(2,100%,50%)</td>
+<td>203</td><td>IndianRed1</td><td>#ff5f5f</td><td>rgb(255,95,95)</td><td>hsl(0,100%,68%)</td>
+<td>204</td><td>IndianRed1</td><td>#ff5f87</td><td>rgb(255,95,135)</td><td>hsl(345,100%,68%)</td>
+<td>205</td><td>HotPink</td><td>#ff5faf</td><td>rgb(255,95,175)</td><td>hsl(330,100%,68%)</td>
+<td>206</td><td>HotPink</td><td>#ff5fd7</td><td>rgb(255,95,215)</td><td>hsl(315,100%,68%)</td>
+<td>207</td><td>MediumOrchid1</td><td>#ff5fff</td><td>rgb(255,95,255)</td><td>hsl(300,100%,68%)</td>
+<td>208</td><td>DarkOrange</td><td>#ff8700</td><td>rgb(255,135,0)</td><td>hsl(1,100%,50%)</td>
+<td>209</td><td>Salmon1</td><td>#ff875f</td><td>rgb(255,135,95)</td><td>hsl(15,100%,68%)</td>
+<td>210</td><td>LightCoral</td><td>#ff8787</td><td>rgb(255,135,135)</td><td>hsl(0,100%,76%)</td>
+<td>211</td><td>PaleVioletRed1</td><td>#ff87af</td><td>rgb(255,135,175)</td><td>hsl(340,100%,76%)</td>
+<td>212</td><td>Orchid2</td><td>#ff87d7</td><td>rgb(255,135,215)</td><td>hsl(320,100%,76%)</td>
+<td>213</td><td>Orchid1</td><td>#ff87ff</td><td>rgb(255,135,255)</td><td>hsl(300,100%,76%)</td>
+<td>214</td><td>Orange1</td><td>#ffaf00</td><td>rgb(255,175,0)</td><td>hsl(1,100%,50%)</td>
+<td>215</td><td>SandyBrown</td><td>#ffaf5f</td><td>rgb(255,175,95)</td><td>hsl(30,100%,68%)</td>
+<td>216</td><td>LightSalmon1</td><td>#ffaf87</td><td>rgb(255,175,135)</td><td>hsl(20,100%,76%)</td>
+<td>217</td><td>LightPink1</td><td>#ffafaf</td><td>rgb(255,175,175)</td><td>hsl(0,100%,84%)</td>
+<td>218</td><td>Pink1</td><td>#ffafd7</td><td>rgb(255,175,215)</td><td>hsl(330,100%,84%)</td>
+<td>219</td><td>Plum1</td><td>#ffafff</td><td>rgb(255,175,255)</td><td>hsl(300,100%,84%)</td>
+<td>220</td><td>Gold1</td><td>#ffd700</td><td>rgb(255,215,0)</td><td>hsl(0,100%,50%)</td>
+<td>221</td><td>LightGoldenrod2</td><td>#ffd75f</td><td>rgb(255,215,95)</td><td>hsl(45,100%,68%)</td>
+<td>222</td><td>LightGoldenrod2</td><td>#ffd787</td><td>rgb(255,215,135)</td><td>hsl(40,100%,76%)</td>
+<td>223</td><td>NavajoWhite1</td><td>#ffd7af</td><td>rgb(255,215,175)</td><td>hsl(30,100%,84%)</td>
+<td>224</td><td>MistyRose1</td><td>#ffd7d7</td><td>rgb(255,215,215)</td><td>hsl(0,100%,92%)</td>
+<td>225</td><td>Thistle1</td><td>#ffd7ff</td><td>rgb(255,215,255)</td><td>hsl(300,100%,92%)</td>
+<td>226</td><td>Yellow1</td><td>#ffff00</td><td>rgb(255,255,0)</td><td>hsl(60,100%,50%)</td>
+<td>227</td><td>LightGoldenrod1</td><td>#ffff5f</td><td>rgb(255,255,95)</td><td>hsl(60,100%,68%)</td>
+<td>228</td><td>Khaki1</td><td>#ffff87</td><td>rgb(255,255,135)</td><td>hsl(60,100%,76%)</td>
+<td>229</td><td>Wheat1</td><td>#ffffaf</td><td>rgb(255,255,175)</td><td>hsl(60,100%,84%)</td>
+<td>230</td><td>Cornsilk1</td><td>#ffffd7</td><td>rgb(255,255,215)</td><td>hsl(60,100%,92%)</td>
+<td>231</td><td>Grey100</td><td>#ffffff</td><td>rgb(255,255,255)</td><td>hsl(0,0%,100%)</td>
+<td>232</td><td>Grey3</td><td>#080808</td><td>rgb(8,8,8)</td><td>hsl(0,0%,3%)</td>
+<td>233</td><td>Grey7</td><td>#121212</td><td>rgb(18,18,18)</td><td>hsl(0,0%,7%)</td>
+<td>234</td><td>Grey11</td><td>#1c1c1c</td><td>rgb(28,28,28)</td><td>hsl(0,0%,10%)</td>
+<td>235</td><td>Grey15</td><td>#262626</td><td>rgb(38,38,38)</td><td>hsl(0,0%,14%)</td>
+<td>236</td><td>Grey19</td><td>#303030</td><td>rgb(48,48,48)</td><td>hsl(0,0%,18%)</td>
+<td>237</td><td>Grey23</td><td>#3a3a3a</td><td>rgb(58,58,58)</td><td>hsl(0,0%,22%)</td>
+<td>238</td><td>Grey27</td><td>#444444</td><td>rgb(68,68,68)</td><td>hsl(0,0%,26%)</td>
+<td>239</td><td>Grey30</td><td>#4e4e4e</td><td>rgb(78,78,78)</td><td>hsl(0,0%,30%)</td>
+<td>240</td><td>Grey35</td><td>#585858</td><td>rgb(88,88,88)</td><td>hsl(0,0%,34%)</td>
+<td>241</td><td>Grey39</td><td>#626262</td><td>rgb(98,98,98)</td><td>hsl(0,0%,37%)</td>
+<td>242</td><td>Grey42</td><td>#6c6c6c</td><td>rgb(108,108,108)</td><td>hsl(0,0%,40%)</td>
+<td>243</td><td>Grey46</td><td>#767676</td><td>rgb(118,118,118)</td><td>hsl(0,0%,46%)</td>
+<td>244</td><td>Grey50</td><td>#808080</td><td>rgb(128,128,128)</td><td>hsl(0,0%,50%)</td>
+<td>245</td><td>Grey54</td><td>#8a8a8a</td><td>rgb(138,138,138)</td><td>hsl(0,0%,54%)</td>
+<td>246</td><td>Grey58</td><td>#949494</td><td>rgb(148,148,148)</td><td>hsl(0,0%,58%)</td>
+<td>247</td><td>Grey62</td><td>#9e9e9e</td><td>rgb(158,158,158)</td><td>hsl(0,0%,61%)</td>
+<td>248</td><td>Grey66</td><td>#a8a8a8</td><td>rgb(168,168,168)</td><td>hsl(0,0%,65%)</td>
+<td>249</td><td>Grey70</td><td>#b2b2b2</td><td>rgb(178,178,178)</td><td>hsl(0,0%,69%)</td>
+<td>250</td><td>Grey74</td><td>#bcbcbc</td><td>rgb(188,188,188)</td><td>hsl(0,0%,73%)</td>
+<td>251</td><td>Grey78</td><td>#c6c6c6</td><td>rgb(198,198,198)</td><td>hsl(0,0%,77%)</td>
+<td>252</td><td>Grey82</td><td>#d0d0d0</td><td>rgb(208,208,208)</td><td>hsl(0,0%,81%)</td>
+<td>253</td><td>Grey85</td><td>#dadada</td><td>rgb(218,218,218)</td><td>hsl(0,0%,85%)</td>
+<td>254</td><td>Grey89</td><td>#e4e4e4</td><td>rgb(228,228,228)</td><td>hsl(0,0%,89%)</td>
+<td>255</td><td>Grey93</td><td>#eeeeee</td><td>rgb(238,238,238)</td><td>hsl(0,0%,93%)</td>
diff --git a/bin/kaminokumo b/bin/kaminokumo
new file mode 120000
index 0000000..f116475
--- /dev/null
+++ b/bin/kaminokumo
@@ -0,0 +1 @@
+/home/devi/kaminokumo/kaminokumo \ No newline at end of file
diff --git a/bin/leb128 b/bin/leb128
new file mode 100755
index 0000000..02a11e5
--- /dev/null
+++ b/bin/leb128
@@ -0,0 +1,117 @@
+#!/bin/python3
+
+import argparse
+import code
+import signal
+import sys
+
+
+def SigHandler_SIGINT(signum, frame):
+ print()
+ sys.exit(0)
+
+
+def devibytes(val):
+ ret = []
+ for byte in val.split(","):
+ ret.append(int(byte, 16))
+ return bytes(ret)
+
+
+def LEB128UnsignedDecode(bytelist):
+ result = 0
+ shift = 0
+ for byte in bytelist:
+ result |= (byte & 0x7f) << shift
+ if (byte & 0x80) == 0:
+ break
+ shift += 7
+ return(result)
+
+
+def LEB128SignedDecode(bytelist):
+ result = 0
+ shift = 0
+ for byte in bytelist:
+ result |= (byte & 0x7f) << shift
+ last_byte = byte
+ shift += 7
+ if (byte & 0x80) == 0:
+ break
+ if last_byte & 0x40:
+ result |= - (1 << shift)
+ return(result)
+
+
+def LEB128UnsignedEncode(int_val):
+ if int_val < 0:
+ raise Exception("value must not be negative")
+ elif int_val == 0:
+ return bytes([0])
+ byte_array = bytearray()
+ while int_val:
+ byte = int_val & 0x7f
+ byte_array.append(byte | 0x80)
+ int_val >>= 7
+ byte_array[-1] ^= 0x80
+ return(byte_array)
+
+
+def LEB128SignedEncode(int_val):
+ byte_array = bytearray()
+ while True:
+ byte = int_val & 0x7f
+ byte_array.append(byte | 0x80)
+ int_val >>= 7
+ if (int_val == 0 and byte & 0x40 == 0) or (int_val == -1 and byte & 0x40):
+ byte_array[-1] ^= 0x80
+ break
+ return(byte_array)
+
+
+class Argparser(object):
+ def __init__(self):
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--se", type=int, help="leb128 signed encode")
+ parser.add_argument("--ue", type=int, help="leb128 unsigned encode")
+ parser.add_argument(
+ "--sd", type=devibytes, help="leb128 signed decode. pass a string like ef1289.")
+ parser.add_argument(
+ "--ud", type=devibytes, help="leb128 unsigned decode. pass a string like ef1290")
+ self.args = parser.parse_args()
+
+# write code here
+
+
+def premain():
+ signal.signal(signal.SIGINT, SigHandler_SIGINT)
+ argparser = Argparser()
+ # here
+ if argparser.args.se:
+ res = LEB128SignedEncode(argparser.args.se)
+ for byte in res:
+ print(format(byte, "02x"), end=" ")
+ print()
+ if argparser.args.ue:
+ res = LEB128UnsignedEncode(argparser.args.ue)
+ for byte in res:
+ print(format(byte, "02x"), end=" ")
+ print()
+ if argparser.args.sd:
+ print(LEB128SignedDecode(argparser.args.sd))
+ if argparser.args.ud:
+ print(LEB128UnsignedDecode(argparser.args.ud))
+
+
+def main():
+ try:
+ premain()
+ except:
+ variables = globals().copy()
+ variables.update(locals())
+ shell = code.InteractiveConsole(variables)
+ shell.interact(banner="LEB128 DEBUG REPL")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/bin/llvm-wasm b/bin/llvm-wasm
new file mode 100755
index 0000000..a1d0cfd
--- /dev/null
+++ b/bin/llvm-wasm
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+fullname=$1
+namelength=${#fullname}
+offset=$((${#fullname} - 2))
+filename=${fullname:0:$offset}
+"clang" -emit-llvm --target=wasm32 -Oz "$1" -c
+"llc" -asm-verbose=false -o $filename.s $filename.bc
+"s2wasm" $filename.s > $filename.wast
+"wast2wasm" $filename.wast -o $filename.wasm
diff --git a/bin/lorem-ipsum b/bin/lorem-ipsum
new file mode 100755
index 0000000..e6ff643
--- /dev/null
+++ b/bin/lorem-ipsum
@@ -0,0 +1,9 @@
+#!/usr/bin/env perl
+
+use Text::Lorem;
+
+my $text = Text::Lorem->new();
+$paragraphs = $text->paragraphs(10);
+
+print $paragraphs;
+print "\n";
diff --git a/bin/manga_dmenu.sh b/bin/manga_dmenu.sh
new file mode 100755
index 0000000..436968b
--- /dev/null
+++ b/bin/manga_dmenu.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env zsh
+# until kaminokumo --manga; do done | dmenu -nhb "dark slate gray" -nhf white -shb "forest green" -shf white -l 12 -p "Manga List:" > /dev/null
+source ~/scripts/zshrc_stripped.sh
+until kaminokumo --manga; do done | dmenu -p "Manga List:" > /dev/null
+
diff --git a/bin/mushi b/bin/mushi
new file mode 120000
index 0000000..40079cb
--- /dev/null
+++ b/bin/mushi
@@ -0,0 +1 @@
+../mushi.py \ No newline at end of file
diff --git a/bin/postit.sh b/bin/postit.sh
new file mode 100755
index 0000000..d0556a8
--- /dev/null
+++ b/bin/postit.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env sh
+
+POSTIT=$(cat ~/devi/abbatoir/postit | dmenu -l 20 -p "Select Postit:")
+echo -n "${POSTIT:0:${#POSTIT}}" | xsel -ip
diff --git a/bin/ramdump b/bin/ramdump
new file mode 120000
index 0000000..7fe85cf
--- /dev/null
+++ b/bin/ramdump
@@ -0,0 +1 @@
+/home/bloodstalker/extra/MemDump/ramdump \ No newline at end of file
diff --git a/bin/run_with_dmenu.sh b/bin/run_with_dmenu.sh
new file mode 100755
index 0000000..c7bf9dd
--- /dev/null
+++ b/bin/run_with_dmenu.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env zsh
+
+# set -o pipefail
+source ~/scripts/zshrc_stripped.sh
+COMMAND=$(echo "" | dmenu -h 20 -p "Quick Term:")
+RESULT=$(eval "$COMMAND")
+echo $RESULT | dmenu -h 20 -p "Quick Term Out:" > /dev/null
diff --git a/bin/sniff b/bin/sniff
new file mode 100755
index 0000000..3ecf3f4
--- /dev/null
+++ b/bin/sniff
@@ -0,0 +1,105 @@
+#!/usr/bin/python3
+
+import argparse
+import code
+import signal
+import sys
+import re
+from requests import get
+from requests.exceptions import RequestException
+from contextlib import closing
+from bs4 import BeautifulSoup
+
+
+def SigHandler_SIGINT(signum, frame):
+ print()
+ sys.exit(0)
+
+
+def simple_get(url):
+ try:
+ with closing(get(url, stream=True)) as resp:
+ if is_good_response(resp):
+ return resp.content
+ else:
+ return None
+ except RequestException as e:
+ log_error("Error during requests to {0} : {1}".format(url, str(e)))
+ return None
+
+
+def is_good_response(resp):
+ content_type = resp.headers['Content-Type'].lower()
+ return (resp.status_code == 200 and content_type is not None and content_type.find("html") > -1)
+
+
+def log_error(e):
+ print(e)
+
+
+class Argparser(object):
+ def __init__(self):
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--src", type=str, help="url")
+ parser.add_argument("--str", type=str, help="what string to look for")
+ parser.add_argument("--vid", action="store_true",
+ help="video", default=False)
+ parser.add_argument("--dbg", action="store_true",
+ help="debug", default=False)
+ parser.add_argument("--url", action="store_true",
+ help="url", default=False)
+ self.args = parser.parse_args()
+
+
+VID_FMT = ["webm", "mpg", "mp2", "mpeg", "mpe", "mpv", "ogg",
+ "mp4", "m4p", "m4v", "flv", "avi", "wmv", "mkv", "svi"]
+# write code here
+
+
+def premain(argparser):
+ signal.signal(signal.SIGINT, SigHandler_SIGINT)
+ # here
+ raw_ml = simple_get(argparser.args.src)
+ # print("raw html length is " + repr(len(raw_ml)))
+ ml = BeautifulSoup(raw_ml, "lxml")
+ ml_str = repr(ml)
+ tmp = open("/tmp/riecher", "w")
+ tmp.write(ml_str)
+ tmp.close()
+ tmp = open("/tmp/riecher", "r")
+ if argparser.args.src:
+ if argparser.args.vid:
+ for line in tmp:
+ # hit = False
+ for elem in VID_FMT:
+ if line.find("."+elem) > -1:
+ print(line)
+ # hit = True
+ if argparser.args.url:
+ dump_list = []
+ for line in tmp:
+ dummy = re.findall(
+ 'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', line)
+ dump_list += dummy
+ for elem in dump_list:
+ print(elem)
+
+ tmp.close()
+
+
+def main():
+ argparser = Argparser()
+ if argparser.args.dbg:
+ try:
+ premain(argparser)
+ except:
+ variables = globals().copy()
+ variables.update(locals())
+ shell = code.InteractiveConsole(variables)
+ shell.interact(banner="DEBUG REPL")
+ else:
+ premain(argparser)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/c/debug.dbg b/c/debug.dbg
new file mode 100644
index 0000000..36b21f6
--- /dev/null
+++ b/c/debug.dbg
@@ -0,0 +1,15 @@
+
+set width 0
+set height 0
+set verbose off
+
+b main
+commands 1
+ print argc
+ print argv[0]
+ continue
+end
+
+file ./main-dbg
+run
+
diff --git a/c/devi_extra.h b/c/devi_extra.h
new file mode 100644
index 0000000..9ef66b3
--- /dev/null
+++ b/c/devi_extra.h
@@ -0,0 +1,33 @@
+
+/*first line intentionally left blank.*/
+/**********************************************************************************************************************/
+#include <inttypes.h>
+#include <stdint.h>
+/**********************************************************************************************************************/
+#ifndef DEVI_EXTRA_H
+#define DEVI_EXTRA_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define RED "\033[1;31m"
+#define CYAN "\033[1;36m"
+#define GREEN "\033[1;32m"
+#define BLUE "\033[1;34m"
+#define BLACK "\033[1;30m"
+#define BROWN "\033[1;33m"
+#define MAGENTA "\033[1;35m"
+#define GRAY "\033[1;37m"
+#define DARKGRAY "\033[1;30m"
+#define YELLOW "\033[1;33m"
+#define NORMAL "\033[0m"
+#define CLEAR "\033[2J"
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+/**********************************************************************************************************************/
+/*last line intentionally left blank.*/
+
diff --git a/c/header.hpp b/c/header.hpp
new file mode 100644
index 0000000..2df2a5a
--- /dev/null
+++ b/c/header.hpp
@@ -0,0 +1,4 @@
+
+#include <iostream>
+#include <string>
+#include <vector>
diff --git a/c/main.c b/c/main.c
new file mode 100644
index 0000000..8cc320a
--- /dev/null
+++ b/c/main.c
@@ -0,0 +1,12 @@
+
+#include <inttypes.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <string.h>
+
+#define __maybe_unused__ __attribute__((unused))
+
+#pragma weak main
+int main (int argc, char** argv) {
+ return 0;
+}
diff --git a/c/main.cpp b/c/main.cpp
new file mode 100644
index 0000000..4e1d93b
--- /dev/null
+++ b/c/main.cpp
@@ -0,0 +1,6 @@
+
+#include "header.hpp"
+
+int main (int argc, char** argv) {
+ return 0;
+}
diff --git a/cfam.vimrc b/cfam.vimrc
new file mode 100644
index 0000000..e34c70f
--- /dev/null
+++ b/cfam.vimrc
@@ -0,0 +1,10 @@
+set tabstop=2
+"set softtabstop=4
+set shiftwidth=2
+set noexpandtab
+augroup project
+ autocmd!
+ autocmd BufRead,BufNewFile *.h,*.c set filetype=c.doxygen
+augroup END
+
+set tags=./tags
diff --git a/checknodeversion.sh b/checknodeversion.sh
new file mode 100755
index 0000000..9f13e80
--- /dev/null
+++ b/checknodeversion.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+function check_node_version() {
+ MIN_VERSION="7.6.0"
+ if [[ "$MIN_VERSION" == "$1" ]]; then return 0;fi
+ local IFS=.
+ VERSION="${1:1}"
+ local i ver1=($MIN_VERSION) ver2=($VERSION)
+ for ((i=0; i < ${#ver1[@]}; i++)); do
+ if [[ 10#${ver1[i]} > 10#${ver2[i]} ]]; then return 1;fi
+ if [[ 10#${ver1[i]} < 10#${ver2[i]} ]]; then return 0;fi
+ done
+}
+
+NODE_VERSION=$(node --version)
+check_node_version $NODE_VERSION
+if [[ $? == 1 ]]; then echo "node version is too old. please use v.7.6.0 or newer." && exit 1; fi
+echo "node version is new enough!"
diff --git a/compiler-explorer/ceconfig.json b/compiler-explorer/ceconfig.json
new file mode 100644
index 0000000..386a2cc
--- /dev/null
+++ b/compiler-explorer/ceconfig.json
@@ -0,0 +1,14 @@
+{"userArguments":"-O3",
+ "filters":{
+ "binary":false,
+ "commentOnly":true,
+ "demangle":true,
+ "directives":true,
+ "execute":false,
+ "intel":true,
+ "labels":true,
+ "lables":true,
+ "libraryCode":false,
+ "trim":false
+ }
+}
diff --git a/compiler-explorer/index.js b/compiler-explorer/index.js
new file mode 100644
index 0000000..fae05b7
--- /dev/null
+++ b/compiler-explorer/index.js
@@ -0,0 +1,21 @@
+
+const fetch = require('node-fetch')
+const fs = require("fs")
+const util = require("util")
+const readFile = util.promisify(fs.readFile)
+
+async function JSON_POST_req(data,options) {
+ var dummy = {"source": data.toString(), "options":"{}"}
+ return await {method:"POST", body:JSON.stringify(dummy), headers:{"Content-Type":"application/json"}}
+}
+
+function compiler_explorer(data, options) {
+ JSON_POST_req(data, options).then(post_arg=>
+ fetch("https://godbolt.org/api/compiler/g92/compile?options=-O3", post_arg)).then(res=>
+ res.text()).then(body=>
+ console.log(body.split("\n").slice(1,body.split("\n").length).join("\n"))).catch(error=>
+ console.log(error))
+}
+
+const config = JSON.parse(fs.readFileSync("./ceconfig.json"))
+compiler_explorer(process.argv[2], config)
diff --git a/compiler-explorer/main.js b/compiler-explorer/main.js
new file mode 100644
index 0000000..1b142c3
--- /dev/null
+++ b/compiler-explorer/main.js
@@ -0,0 +1,45 @@
+
+const fetch = require('node-fetch')
+const fs = require("fs")
+const util = require("util")
+const readFile = util.promisify(fs.readFile)
+const path = require("path")
+const defaultOpts = {
+"userArguments":"-O3", "filters":
+ {"binary":false,
+ "commentOnly":true,
+ "demangle":true,
+ "directives":true,
+ "execute":false,
+ "intel":true,
+ "labels":true,
+ "lables":true,
+ "libraryCode":false,
+ "trim":false
+ }
+}
+
+async function read_C_source(path) {
+ return await readFile(path, "utf-8")
+}
+
+function JSON_POST_req(data, options) {
+ const config = fs.readFileSync(options, "utf-8")
+ var dummy = {"source": data, "options": JSON.parse(config)}
+ /* if no config found, then run default
+ var dummy = {"source": data, "options": defaultOpts}
+ */
+ return {method:"POST", body:JSON.stringify(dummy), headers:{"Content-Type":"application/json"}}
+}
+
+function compiler_explorer(path, options) {
+ read_C_source(path).then(data=>
+ JSON_POST_req(data, options)).then(post_arg=>
+ fetch("https://godbolt.org/api/compiler/g92/compile", post_arg)).then(res=>
+ res.text()).then(body=>
+ console.log(body.split("\n").slice(1,body.split("\n").length).join("\n"))).catch(error=>
+ console.log(error))
+}
+
+if (process.argv.length < 3) {console.log("you did not specify enough args. needs two. path to source code and path to options to pass to compiler explorer.")}
+else {compiler_explorer(process.argv[2], process.argv[3])}
diff --git a/compiler-explorer/package.json b/compiler-explorer/package.json
new file mode 100644
index 0000000..1b60c79
--- /dev/null
+++ b/compiler-explorer/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "compiler-explorer",
+ "version": "1.0.0",
+ "description": "",
+ "main": "main.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "Farzad Sadeghi",
+ "license": "GPL-3.0-or-later",
+ "dependencies": {
+ "node-fetch": ">=2.1.2"
+ }
+}
diff --git a/crontab b/crontab
new file mode 100644
index 0000000..add2fb7
--- /dev/null
+++ b/crontab
@@ -0,0 +1 @@
+59 * * * * if [[ $(yy --alive) == hived ]]; then :;else yy --demon &;fi
diff --git a/cygwin/.tmux.conf b/cygwin/.tmux.conf
new file mode 100644
index 0000000..5fbae37
--- /dev/null
+++ b/cygwin/.tmux.conf
@@ -0,0 +1,59 @@
+
+set -g default-terminal "tmux-256color"
+set-option -g prefix C-a
+
+#key bindings
+bind | split-window -h
+bind - split-window -v
+bind -r k select-pane -U
+bind -r j select-pane -D
+bind -r h select-pane -L
+bind -r l select-pane -R
+bind -n S-Right next-window
+bind -n S-Left previous-window
+bind -n M-Up select-pane -U
+bind -n M-Down select-pane -D
+bind -n M-Left select-pane -L
+bind -n M-Right select-pane -R
+setw -g mode-keys vi
+bind [ copy-mode
+bind -T copy-mode-vi 'v' send -X begin-selection
+bind -T copy-mode-vi 'y' send -X copy-selection-and-cancel
+#bind -T copy-mode-vi 'V' rectangle-toggle
+bind ] paste-buffer
+bind Space choose-buffer
+
+#move windows
+bind-key -n C-S-Left swap-window -t -1
+bind-key -n C-S-Right swap-window -t +1
+
+#unbindings
+unbind Up
+unbind Down
+unbind Left
+unbind Right
+
+#color stuff
+set -g status-bg colour16
+set -g status-position bottom
+set -g status-justify left
+set -g status-fg colour137
+set -g status-attr dim
+set -g status-left ""
+set -g status-right "#[fg=colour16,bg=colour32,bold] %d/%m #[fg=colour16,bg=colour22,bold] %H:%M:%S "
+set -g status-right-length 70
+set -g status-left-length 70
+setw -g window-status-current-fg colour6
+setw -g window-status-current-bg colour22
+setw -g window-status-current-attr bold
+setw -g window-status-current-format " #I#[fg=colour16]:#[fg=colour16]#W#[fg=colour16]#F "
+setw -g window-status-fg colour0
+setw -g window-status-bg colour23
+setw -g window-status-attr none
+setw -g window-status-format "#[fg=colour1, bold] #I#[fg=colour1, bold]:#[fg=colour16]#W#[fg=colour16]#F "
+setw -g window-status-bell-attr bold
+setw -g window-status-bell-fg colour255
+setw -g window-status-bell-bg colour64
+# message text
+set -g message-attr bold
+set -g message-style bg='#44475a',fg='#8be9fd'
diff --git a/cygwin/.zshrc b/cygwin/.zshrc
new file mode 100644
index 0000000..eedd697
--- /dev/null
+++ b/cygwin/.zshrc
@@ -0,0 +1,89 @@
+
+COMPLETION_WAITING_DOTS="true"
+plugins=(git svn zsh-syntax-highlighting autojump vi-mode)
+export ZSH=~/.oh-my-zsh
+
+if [[ -n "$INSIDE_EMACS" ]]; then
+ ZSH_THEME="simple"
+else
+ ZSH_THEME="devi"
+fi
+
+COMPLETION_WAITING_DOTS="true"
+plugins=(
+ git
+ zsh-syntax-highlighting
+ autojump
+)
+source $ZSH/oh-my-zsh.sh
+function dig {
+ globalholecounter=0
+ if [ -d ~/abbatoir ]; then
+ while [ 1 ]; do
+ if [ -d ~/abbatoir/hole$globalholecounter ]; then
+ if test "$(ls -A ~/abbatoir/hole$globalholecounter)"; then
+ :
+ else
+ cd ~/abbatoir/hole$globalholecounter
+ break
+ fi
+ else
+ mkdir ~/abbatoir/hole$globalholecounter
+ cd ~/abbatoir/hole$globalholecounter
+ echo $globalholecounter
+ break
+ fi
+ ((globalholecounter++))
+ done
+ else
+ mkdir ~/abbatoir
+ mkdir ~/abbatoir/hole$globalholecounter
+ cd ~/abbatoir/hole$globalholecounter
+ fi
+}
+if [[ -n $SSH_CONNECTION ]]; then
+ export EDITOR='vim'
+else
+ export EDITOR='mvim'
+fi
+alias quit="exit"
+alias clean="clear"
+alias la="ls -A"
+alias digg="dig && clear"
+alias lss="ls -s"
+alias diff="colordiff"
+function clearhalf {
+ size=$(stty size|gawk '{print$1}')
+ size=$(($size/2))
+ tput cup $size 0 && tput ed
+}
+alias cleanhalf="clearhalf"
+alias halfclear="clearhalf"
+alias halfclean="clearhalf"
+alias mv="mv -i"
+alias cp="cp -i"
+alias contest="ping 4.2.2.4 -c 7"
+function math {
+ echo $(($1))
+}
+
+alias ee="explorer ."
+alias vi="vim"
+alias lynx="lynx -lss ~/lynx.lss -prettysrc "
+alias tmux="tmux -2"
+function pdfsearch {
+ tempfile=$(mktemp)
+ for filename in /cygdrive/d/mi-server/ETCS/ONBOARD.KERNEL/RM/STD/*.pdf; do
+ echo $filename >> $tempfile
+ done
+ RGX=$1
+ shift
+ pdfgrep $RGX "$@" $(cat $tempfile)
+}
+
+REPORTTIME=4
+export BROWSER=lynx
+bindkey -v
+export KEYTIMEOUT=1
+export VIRTUAL_ENV_DISABLE_PROMPT=yes
+export TERM=screen-256color
diff --git a/cygwin/ChangeCapsToControl.reg b/cygwin/ChangeCapsToControl.reg
new file mode 100755
index 0000000..4bdf091
--- /dev/null
+++ b/cygwin/ChangeCapsToControl.reg
Binary files differ
diff --git a/cygwin/_emacs.el b/cygwin/_emacs.el
new file mode 100755
index 0000000..c68c7d7
--- /dev/null
+++ b/cygwin/_emacs.el
@@ -0,0 +1,124 @@
+
+(require 'package)
+(setq package-enable-at-startup nil)
+(let* ((no-ssl (and (memq system-type '(windows-nt ms-dos))
+ (not (gnutls-available-p))))
+ (proto (if no-ssl "http" "https")))
+ (when no-ssl
+ (warn "\
+Your version of Emacs does not support SSL connections,
+which is unsafe because it allows man-in-the-middle attacks.
+There are two things you can do about this warning:
+1. Install an Emacs version that does support SSL and be safe.
+2. Remove this warning from your init file so you won't see it again."))
+ ;; Comment/uncomment these two lines to enable/disable MELPA and MELPA Stable as desired
+(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
+;;(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
+(add-to-list 'package-archives (cons "melpa-stable" (concat proto "://stable.melpa.org/packages/")) t)
+(add-to-list 'package-archives (cons "org" (concat proto "://orgmode.org/elpa/")) t)
+(when (< emacs-major-version 24)
+ ;; For important compatibility libraries like cl-lib
+ (add-to-list 'package-archives (cons "elpa" (concat proto "://elpa.gnu.org/packages/")))))
+;;(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
+(add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/") t)
+(package-initialize)
+(add-to-list 'load-path "~/.emacs.d/evil")
+
+(require 'evil)
+(evil-mode 1)
+(helm-mode 1)
+(custom-set-variables
+ ;; custom-set-variables was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ '(ansi-color-names-vector
+ ["#212337" "#ff5370" "#c7f59b" "#ffbd76" "#70b0ff" "#baacff" "#34d3fb" "#e4f3fa"])
+ '(column-number-mode t)
+ '(custom-safe-themes
+ (quote
+ ("84d2f9eeb3f82d619ca4bfffe5f157282f4779732f48a5ac1484d94d5ff5b279" "3c83b3676d796422704082049fc38b6966bcad960f896669dfc21a7a37a748fa" "c8f959fb1ea32ddfc0f50db85fea2e7d86b72bb4d106803018be1c3566fd6c72" "2a3ffb7775b2fe3643b179f2046493891b0d1153e57ec74bbe69580b951699ca" "1728dfd9560bff76a7dc6c3f61e9f4d3e6ef9d017a83a841c117bd9bebe18613" "f589e634c9ff738341823a5a58fc200341b440611aaa8e0189df85b44533692b" "0713580a6845e8075113a70275b3421333cfe7079e48228c52300606fa5ce73b" "f30aded97e67a487d30f38a1ac48eddb49fdb06ac01ebeaff39439997cbdd869" "2d1fe7c9007a5b76cea4395b0fc664d0c1cfd34bb4f1860300347cdad67fb2f9" default)))
+ '(display-battery-mode t)
+ '(display-line-numbers-type (quote relative))
+ '(display-time-mode t)
+ '(fci-rule-color "#383e5c")
+ '(jdee-db-active-breakpoint-face-colors (cons "#161a2a" "#baacff"))
+ '(jdee-db-requested-breakpoint-face-colors (cons "#161a2a" "#c7f59b"))
+ '(jdee-db-spec-breakpoint-face-colors (cons "#161a2a" "#383e5c"))
+ '(objed-cursor-color "#ff5370")
+ '(package-selected-packages
+ (quote
+ (powerline linum-relative pdfgrep pdf-tools smart-mode-line-powerline-theme smart-mode-line powerline-evil neotree tabbar helm doom-themes evil)))
+ '(show-paren-mode t)
+ '(size-indication-mode t)
+ '(vc-annotate-background "#212337")
+ '(vc-annotate-color-map
+ (list
+ (cons 20 "#c7f59b")
+ (cons 40 "#d9e28e")
+ (cons 60 "#eccf82")
+ (cons 80 "#ffbd76")
+ (cons 100 "#ffb071")
+ (cons 120 "#ffa36c")
+ (cons 140 "#ff9668")
+ (cons 160 "#e89d9a")
+ (cons 180 "#d1a4cc")
+ (cons 200 "#baacff")
+ (cons 220 "#d18ecf")
+ (cons 240 "#e8709f")
+ (cons 260 "#ff5370")
+ (cons 280 "#cd4d6b")
+ (cons 300 "#9b4866")
+ (cons 320 "#694361")
+ (cons 340 "#383e5c")
+ (cons 360 "#383e5c")))
+ '(vc-annotate-very-old-color nil))
+(custom-set-faces
+ ;; custom-set-faces was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ '(default ((t (:family "DejaVu Sans Mono" :foundry "outline" :slant normal :weight bold :height 98 :width normal)))))
+;;(evil-mode t)
+
+(require 'doom-themes)
+(setq inhibit-startup-screen t)
+(load-theme 'doom-one)
+
+(setq doom-line-numbers-style 'relative)
+(setq evil-emacs-state-cursor '("red" box))
+(setq evil-normal-state-cursor '("green" box))
+(setq evil-visual-state-cursor '("orange" box))
+(setq evil-insert-state-cursor '("blue" bar))
+(setq evil-replace-state-cursor '("red" bar))
+(setq evil-operator-state-cursor '("red" hollow))
+
+
+(require 'powerline-evil)
+(powerline-evil-vim-color-theme)
+
+;; These two lines are just examples
+;;(setq powerline-arrow-shape 'curve)
+;;(setq powerline-default-separator-dir '(right . left))
+;; These two lines you really need.
+(setq sml/theme 'powerline)
+(sml/setup)
+
+(setq shell-file-name (executable-find "zsh.exe"))
+;;(setq shell-file-name (executable-find "zsh-5.5.1.exe"))
+
+(setenv "PATH" (concat (getenv "PATH") ":D:\\home\\apps\\cygwin\\bin"))
+;;(setq exec-path (append exec-path '("D:\\home\\apps\\cygwin\\bin")))
+(setq explicit-shell-file-name "D:\\home\\apps\\cygwin\\bin\\zsh.exe")
+(setq shell-file-name "zsh")
+(setq explicit-zsh.exe-args '("-l" "-i"))
+
+(setq display-line-numbers-mode t)
+(setq display-line-numbers 'relative)
+;;wont be able to open pdf's in docview mode without ghostscript
+(setq doc-view-ghostscript-program "C:\\Program Files\\gs\\gs9.50\\bin\\gswin64.exe")
+;;settings this for zsh. basically lets zsh know its running inside emacs and not a terminal
+(setenv "INSIDE_EMACS")
+(windmove-default-keybindings)
+
+(global-display-line-numbers-mode)
diff --git a/cygwin/alac.bat b/cygwin/alac.bat
new file mode 100755
index 0000000..52c5fc6
--- /dev/null
+++ b/cygwin/alac.bat
@@ -0,0 +1,2 @@
+"C:\Program Files\Alacritty\alacritty.exe" -e E:\cygwin\bin\zsh.exe -l -i
+pause
diff --git a/cygwin/alacritty.yml b/cygwin/alacritty.yml
new file mode 100644
index 0000000..68cf978
--- /dev/null
+++ b/cygwin/alacritty.yml
@@ -0,0 +1,747 @@
+# Configuration for Alacritty, the GPU enhanced terminal emulator
+
+# Any items in the `env` entry below will be added as
+# environment variables. Some entries may override variables
+# set by alacritty it self.
+# env:
+ # TERM env customization.
+ #
+ # If this property is not set, alacritty will set it to xterm-256color.
+ #
+ # Note that some xterm terminfo databases don't declare support for italics.
+ # You can verify this by checking for the presence of `smso` and `sitm` in
+ # `infocmp xterm-256color`.
+ # TERM: cygwin
+
+window:
+ # Window dimensions (changes require restart)
+ #
+ # Specified in number of columns/lines, not pixels. If both are zero this
+ # setting is ignored.
+ dimensions:
+ columns: 100
+ lines: 85
+
+ # Window padding (changes require restart)
+ #
+ # Blank space added around the window in pixels. This padding is not scaled by
+ # DPI and the specified value is always added at both opposing sides.
+ padding:
+ x: 0
+ y: 0
+
+ # Spread additional padding evenly around the terminal content.
+ dynamic_padding: false
+
+ # Window decorations
+ #
+ # Available values:
+ # - full: borders and title bar
+ # - none: neither borders nor title bar
+ # - transparent: title bar, transparent background and title bar buttons
+ # - buttonless: title bar, transparent background, but no title bar buttons
+ decorations: full
+
+ # Startup Mode (changes require restart)
+ #
+ # Values for `startup_mode`:
+ # - Windowed
+ # - Maximized
+ # - Fullscreen
+ #
+ # Values for `startup_mode` (macOS only):
+ # - SimpleFullscreen
+ startup_mode: Windowed
+
+scrolling:
+ # maximum number of lines in the scrollback buffer. Specifying '0' will
+ # disable scrolling.
+ history: 0
+
+ # Number of lines the viewport will move for every line scrolled when
+ # scrollback is enabled (history > 0).
+ multiplier: 3
+
+# Font configuration (changes require restart)
+font:
+ # The normal (roman) font face to use.
+ # Style can be specified to pick a specific face.
+ normal:
+ family: DejaVuSansMono NF
+ # family: "Fira Code"
+ # family: "Source Code Pro"
+ # style: Retina
+
+ # The bold font face
+ bold:
+ family: DejaVuSansMono NF
+ # family: "Fira Code"
+ # family: "Source Code Pro"
+
+ # The italic font face
+ italic:
+ family: DejaVuSansMono NF
+ # family: "Fira Code"
+ # family: "Source Code Pro"
+ # style: "Medium Italic"
+
+ # Point size of the font
+ size: 12.0
+
+ # Offset is the extra space around each character. offset.y can be thought of
+ # as modifying the linespacing, and offset.x as modifying the letter spacing.
+ offset:
+ x: 0
+ y: 0
+
+ # Glyph offset determines the locations of the glyphs within their cells with
+ # the default being at the bottom. Increase the x offset to move the glyph to
+ # the right, increase the y offset to move the glyph upward.
+ glyph_offset:
+ x: 0
+ y: 0
+
+ # Thin stroke font rendering (macOS only)
+ #
+ # Thin strokes are suitable for retina displays, but for non-retina you
+ # probably want this set to false.
+ #
+ # macOS >= 10.14.x:
+ #
+ # If the font quality on non-retina display looks bad then set
+ # `use_thin_strokes` to `true` and enable font smoothing by running the
+ # following command:
+ # `defaults write -g CGFontRenderingFontSmoothingDisabled -bool NO`
+ #
+ # This is a global setting and will require a log out or restart to take
+ # effect.
+ use_thin_strokes: true
+
+# When true, bold text is drawn using the bright variant of colors.
+draw_bold_text_with_bright_colors: false
+
+# Use custom cursor colors. If true, display the cursor in the cursor.foreground
+# and cursor.background colors, otherwise invert the colors of the cursor.
+# custom_cursor_colors: false
+
+# Colors
+colors:
+ # Default colours
+ primary:
+ background: '0x000000'
+ foreground: '0x808080'
+
+ # Colors that should be used to draw the terminal cursor. If these are unset,
+ # the cursor colour will be the inverse of the cell colour.
+ # cursor:
+ text: '0x2e2e2d'
+ # text: '0x000000'
+ cursor: '0xffffff'
+
+ # Normal colors
+ normal:
+ black: '0x000000'
+ red: '0xc62828'
+ green: '0x558b2f'
+ yellow: '0xf9a825'
+ blue: '0x1565c0'
+ magenta: '0x6a1e9a'
+ cyan: '0x00838f'
+ white: '0xffffff'
+
+ # Bright colors
+ bright:
+ black: '0x000000'
+ red: '0xef5350'
+ green: '0x8bc34a'
+ yellow: '0xffeb3b'
+ blue: '0x64b5f6'
+ magenta: '0xba68c8'
+ cyan: '0x26c6da'
+ white: '0xffffff'
+
+ # Dim colors (Optional)
+ dim:
+ black: '0x000000'
+ red: '0xf2777a'
+ green: '0x99cc99'
+ yellow: '0xffcc66'
+ blue: '0x6699cc'
+ magenta: '0xcc99cc'
+ cyan: '0x66cccc'
+ white: '0xffffff'
+
+ # Tomorrow Night Bright
+ # primary:
+ # background: '0x000000'
+ # foreground: '0xeaeaea'
+ #
+ # cursor:
+ # text: '0x000000'
+ # cursor: '0xffffff'
+ #
+ # normal:
+ # black: '0x000000'
+ # red: '0xd54e53'
+ # green: '0xb9ca4a'
+ # yellow: '0xe6c547'
+ # blue: '0x7aa6da'
+ # magenta: '0xc397d8'
+ # cyan: '0x70c0ba'
+ # white: '0xffffff'
+ #
+ # bright:
+ # black: '0x666666'
+ # red: '0xff3334'
+ # green: '0x9ec400'
+ # yellow: '0xe7c547'
+ # blue: '0x7aa6da'
+ # magenta: '0xb77ee0'
+ # cyan: '0x54ced6'
+ # white: '0xffffff'
+
+ # Indexed Colors
+ #
+ # The indexed colors include all colors from 16 to 256.
+ # When these are not set, they're filled with sensible defaults.
+ #
+ # Example:
+ # `- { index: 16, color: '0xff00ff' }`
+ #
+ indexed_colors: []
+
+# Visual Bell
+#
+# Any time the BEL code is received, Alacritty "rings" the visual bell. Once
+# rung, the terminal background will be set to white and transition back to the
+# default background color. You can control the rate of this transition by
+# setting the `duration` property (represented in milliseconds). You can also
+# configure the transition function by setting the `animation` property.
+#
+# Possible values for `animation`
+# `Ease`
+# `EaseOut`
+# `EaseOutSine`
+# `EaseOutQuad`
+# `EaseOutCubic`
+# `EaseOutQuart`
+# `EaseOutQuint`
+# `EaseOutExpo`
+# `EaseOutCirc`
+# `Linear`
+#
+# To completely disable the visual bell, set its duration to 0.
+#
+bell:
+ animation: EaseOutExpo
+ color: '0xffffff'
+ duration: 0
+
+# Background opacity
+background_opacity: 1.0
+
+# Key bindings
+#
+# Key bindings are specified as a list of objects. Each binding will specify a
+# key and modifiers required to trigger it, terminal modes where the binding is
+# applicable, and what should be done when the key binding fires. It can either
+# send a byte sequence to the running application (`chars`), execute a
+# predefined action (`action`) or fork and execute a specified command plus
+# arguments (`command`).
+#
+# Bindings are always filled by default, but will be replaced when a new binding
+# with the same triggers is defined. To unset a default binding, it can be
+# mapped to the `None` action.
+#
+# Example:
+# `- { key: V, mods: Control|Shift, action: Paste }`
+#
+# Available fields:
+# - key
+# - mods (optional)
+# - chars | action | command (exactly one required)
+# - mode (optional)
+#
+# Values for `key`:
+# - `A` -> `Z`
+# - `F1` -> `F12`
+# - `Key1` -> `Key0`
+#
+# A full list with available key codes can be found here:
+# https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants
+#
+# Instead of using the name of the keys, the `key` field also supports using
+# the scancode of the desired key. Scancodes have to be specified as a
+# decimal number.
+# This command will allow you to display the hex scancodes for certain keys:
+# `showkey --scancodes`
+#
+# Values for `mods`:
+# - Command
+# - Control
+# - Option
+# - Super
+# - Shift
+# - Alt
+#
+# Multiple `mods` can be combined using `|` like this: `mods: Control|Shift`.
+# Whitespace and capitalization is relevant and must match the example.
+#
+# Values for `chars`:
+# The `chars` field writes the specified string to the terminal. This makes
+# it possible to pass escape sequences.
+# To find escape codes for bindings like `PageUp` ("\x1b[5~"), you can run
+# the command `showkey -a` outside of tmux.
+# Note that applications use terminfo to map escape sequences back to
+# keys. It is therefore required to update the terminfo when
+# changing an escape sequence.
+#
+# Values for `action`:
+# - Paste
+# - PasteSelection
+# - Copy
+# - IncreaseFontSize
+# - DecreaseFontSize
+# - ResetFontSize
+# - ScrollPageUp
+# - ScrollPageDown
+# - ScrollLineUp
+# - ScrollLineDown
+# - ScrollToTop
+# - ScrollToBottom
+# - ClearHistory
+# - Hide
+# - Quit
+# - ClearLogNotice
+# - SpawnNewInstance
+# - ToggleFullscreen
+# - None
+#
+# Values for `action` (macOS only):
+# - ToggleSimpleFullscreen: Enters fullscreen without occupying another space
+#
+# Values for `command`:
+# The `command` field must be a map containing a `program` string and
+# an `args` array of command line parameter strings.
+#
+# Example:
+# `command: { program: "alacritty", args: ["-e", "vttest"] }`
+#
+# Values for `mode`:
+# - ~AppCursor
+# - AppCursor
+# - ~AppKeypad
+# - AppKeypad
+#
+key_bindings:
+ - { key: V, mods: Command, action: Paste }
+ - { key: C, mods: Command, action: Copy }
+ - { key: Q, mods: Command, action: Quit }
+ - { key: N, mods: Command, action: SpawnNewInstance }
+ - { key: Return, mods: Command, action: ToggleFullscreen }
+
+ - { key: Home, chars: "\x1bOH", mode: AppCursor }
+ - { key: Home, chars: "\x1b[H", mode: ~AppCursor }
+ - { key: End, chars: "\x1bOF", mode: AppCursor }
+ - { key: End, chars: "\x1b[F", mode: ~AppCursor }
+ - { key: Equals, mods: Command, action: IncreaseFontSize }
+ - { key: Minus, mods: Command, action: DecreaseFontSize }
+ - { key: Minus, mods: Command|Shift, action: ResetFontSize }
+ - { key: PageUp, mods: Shift, chars: "\x1b[5;2~" }
+ - { key: PageUp, mods: Control, chars: "\x1b[5;5~" }
+ - { key: PageUp, chars: "\x1b[5~" }
+ - { key: PageDown, mods: Shift, chars: "\x1b[6;2~" }
+ - { key: PageDown, mods: Control, chars: "\x1b[6;5~" }
+ - { key: PageDown, chars: "\x1b[6~" }
+ - { key: Left, mods: Shift, chars: "\x1b[1;2D" }
+ - { key: Left, mods: Control, chars: "\x1b[1;5D" }
+ - { key: Left, mods: Alt, chars: "\x1b[1;3D" }
+ - { key: Left, chars: "\x1b[D", mode: ~AppCursor }
+ - { key: Left, chars: "\x1bOD", mode: AppCursor }
+ - { key: Right, mods: Shift, chars: "\x1b[1;2C" }
+ - { key: Right, mods: Control, chars: "\x1b[1;5C" }
+ - { key: Right, mods: Alt, chars: "\x1b[1;3C" }
+ - { key: Right, chars: "\x1b[C", mode: ~AppCursor }
+ - { key: Right, chars: "\x1bOC", mode: AppCursor }
+ - { key: Up, mods: Shift, chars: "\x1b[1;2A" }
+ - { key: Up, mods: Control, chars: "\x1b[1;5A" }
+ - { key: Up, mods: Alt, chars: "\x1b[1;3A" }
+ - { key: Up, chars: "\x1b[A", mode: ~AppCursor }
+ - { key: Up, chars: "\x1bOA", mode: AppCursor }
+ - { key: Down, mods: Shift, chars: "\x1b[1;2B" }
+ - { key: Down, mods: Control, chars: "\x1b[1;5B" }
+ - { key: Down, mods: Alt, chars: "\x1b[1;3B" }
+ - { key: Down, chars: "\x1b[B", mode: ~AppCursor }
+ - { key: Down, chars: "\x1bOB", mode: AppCursor }
+ - { key: Tab, mods: Shift, chars: "\x1b[Z" }
+ # - { key: F1, chars: "\x1bOP" }
+ # - { key: F2, chars: "\x1bOQ" }
+ # - { key: F3, chars: "\x1bOR" }
+ # - { key: F4, chars: "\x1bOS" }
+ # - { key: F5, chars: "\x1b[15~" }
+ # - { key: F6, chars: "\x1b[17~" }
+ # - { key: F7, chars: "\x1b[18~" }
+ # - { key: F8, chars: "\x1b[19~" }
+ # - { key: F9, chars: "\x1b[20~" }
+ # - { key: F10, chars: "\x1b[21~" }
+ # - { key: F11, chars: "\x1b[23~" }
+ # - { key: F12, chars: "\x1b[24~" }
+ - { key: Back, chars: "\x7f" }
+ - { key: Back, mods: Alt, chars: "\x1b\x7f" }
+ - { key: Insert, chars: "\x1b[2~" }
+ - { key: Delete, chars: "\x1b[3~" }
+ - { key: Space, mods: Control, chars: "\x00" }
+ - { key: Home, mods: Shift, chars: "\x1b[2J", mode: ~AppCursor}
+ - { key: Home, mods: Shift, chars: "\x1b[1;2H", mode: AppCursor}
+ - { key: Home, mods: Control, chars: "\x1b[H", mode: ~AppCursor}
+ - { key: Home, mods: Control, chars: "\x1b[1~", mode: AppCursor}
+ - { key: PageUp, mods: Shift, chars: "\x1b[5;2~"}
+ - { key: PageUp, mods: Control, chars: "\x1b[5~"}
+ - { key: PageUp, mods: Alt, chars: "\x1b[5~"}
+ # - { key: Begin, mods: Shift, chars: "\x1b[E"}
+ # - { key: Begin, mods: Control, chars: "\x1b[E"}
+ # - { key: Begin, mods: Alt, chars: "\x1b[E"}
+ - { key: End, mods: Control, chars: "\x1b[J", mode: ~AppKeypad}
+ - { key: End, mods: Control, chars: "\x1b[1;5F", mode: AppKeypad}
+ - { key: End, mods: Shift, chars: "\x1b[K", mode: ~AppKeypad}
+ - { key: End, mods: Shift, chars: "\x1b[1;2F", mode: AppKeypad}
+ - { key: End, mods: Alt, chars: "\x1b[4~"}
+ - { key: PageDown, mods: Shift, chars: "\x1b[6;2~"}
+ - { key: PageDown, mods: Control, chars: "\x1b[6~"}
+ - { key: PageDown, mods: Alt, chars: "\x1b[6~"}
+ # - { key: Insert, mods: Shift, chars: "\x1b[2;2~", mode: AppKeypad}
+ # - { key: Insert, mods: Shift, chars: "\x1b[4l", mode: ~AppKeypad}
+ # - { key: Insert, mods: Control, chars: "\x1b[L", mode: ~AppKeypad}
+ # - { key: Insert, mods: Control, chars: "\x1b[2;5~", mode: AppKeypad}
+ # - { key: Insert, mods: Alt, chars: "\x1b[4h", mode: ~AppKeypad}
+ # - { key: Insert, mods: Alt, chars: "\x1b[2~", mode: AppKeypad}
+ - { key: Delete, mods: Control, chars: "\x1b[M", mode: ~AppKeypad}
+ - { key: Delete, mods: Control, chars: "\x1b[3;5~", mode: AppKeypad}
+ # - { key: Delete, mods: Shift, chars: "\x1b[2K", mode: ~AppKeypad}
+ # - { key: Delete, mods: Shift, chars: "\x1b[3;2~", mode: AppKeypad}
+ - { key: Delete, mods: Shift, chars: "\x1b[3;2~"}
+ - { key: Delete, mods: Alt, chars: "\x1b[P", mode: ~AppKeypad}
+ - { key: Delete, mods: Alt, chars: "\x1b[3~", mode: AppKeypad}
+ - { key: NumpadMultiply, mods: Shift, chars: "\x1bOj", mode: AppKeypad}
+ - { key: NumpadMultiply, mods: Control, chars: "\x1bOj", mode: AppKeypad}
+ - { key: NumpadMultiply, mods: Alt, chars: "\x1bOj", mode: AppKeypad}
+ - { key: NumpadAdd, mods: Shift, chars: "\x1bOk", mode: AppKeypad}
+ - { key: NumpadAdd, mods: Control, chars: "\x1bOk", mode: AppKeypad}
+ - { key: NumpadAdd, mods: Alt, chars: "\x1bOk", mode: AppKeypad}
+ - { key: NumpadEnter, mods: Shift, chars: "\x1bOM", mode: AppKeypad}
+ - { key: NumpadEnter, mods: Control, chars: "\x1bOM", mode: AppKeypad}
+ - { key: NumpadEnter, mods: Alt, chars: "\x1bOM", mode: AppKeypad}
+ - { key: NumpadEnter, mods: Shift, chars: "\r", mode: ~AppKeypad}
+ - { key: NumpadEnter, mods: Control, chars: "\r", mode: ~AppKeypad}
+ - { key: NumpadEnter, mods: Alt, chars: "\r", mode: ~AppKeypad}
+ - { key: NumpadSubtract, mods: Shift, chars: "\x1bOm", mode: AppKeypad}
+ - { key: NumpadSubtract, mods: Control, chars: "\x1bOm", mode: AppKeypad}
+ - { key: NumpadSubtract, mods: Alt, chars: "\x1bOm", mode: AppKeypad}
+ - { key: NumpadDecimal, mods: Shift, chars: "\x1bOn", mode: AppKeypad}
+ - { key: NumpadDecimal, mods: Control, chars: "\x1bOn", mode: AppKeypad}
+ - { key: NumpadDecimal, mods: Alt, chars: "\x1bOn", mode: AppKeypad}
+ - { key: NumpadDivide, mods: Shift, chars: "\x1bOo", mode: AppKeypad}
+ - { key: NumpadDivide, mods: Control, chars: "\x1bOo", mode: AppKeypad}
+ - { key: NumpadDivide, mods: Alt, chars: "\x1bOo", mode: AppKeypad}
+ - { key: Key0, mods: Shift, chars: "\x1bOp", mode: AppKeypad}
+ - { key: Key0, mods: Control, chars: "\x1bOp", mode: AppKeypad}
+ - { key: Key0, mods: Alt, chars: "\x1bOp", mode: AppKeypad}
+ - { key: Key1, mods: Shift, chars: "\x1bOq", mode: AppKeypad}
+ - { key: Key1, mods: Control, chars: "\x1bOq", mode: AppKeypad}
+ - { key: Key1, mods: Alt, chars: "\x1bOq", mode: AppKeypad}
+ - { key: Key2, mods: Shift, chars: "\x1bOr", mode: AppKeypad}
+ - { key: Key2, mods: Control, chars: "\x1bOr", mode: AppKeypad}
+ - { key: Key2, mods: Alt, chars: "\x1bOr", mode: AppKeypad}
+ - { key: Key3, mods: Shift, chars: "\x1bOs", mode: AppKeypad}
+ - { key: Key3, mods: Control, chars: "\x1bOs", mode: AppKeypad}
+ - { key: Key3, mods: Alt, chars: "\x1bOs", mode: AppKeypad}
+ - { key: Key4, mods: Shift, chars: "\x1bOt", mode: AppKeypad}
+ - { key: Key4, mods: Control, chars: "\x1bOt", mode: AppKeypad}
+ - { key: Key4, mods: Alt, chars: "\x1bOt", mode: AppKeypad}
+ - { key: Key5, mods: Shift, chars: "\x1bOu", mode: AppKeypad}
+ - { key: Key5, mods: Control, chars: "\x1bOu", mode: AppKeypad}
+ - { key: Key5, mods: Alt, chars: "\x1bOu", mode: AppKeypad}
+ - { key: Key6, mods: Shift, chars: "\x1bOv", mode: AppKeypad}
+ - { key: Key6, mods: Control, chars: "\x1bOv", mode: AppKeypad}
+ - { key: Key6, mods: Alt, chars: "\x1bOv", mode: AppKeypad}
+ - { key: Key7, mods: Shift, chars: "\x1bOw", mode: AppKeypad}
+ - { key: Key7, mods: Control, chars: "\x1bOw", mode: AppKeypad}
+ - { key: Key7, mods: Alt, chars: "\x1bOw", mode: AppKeypad}
+ - { key: Key8, mods: Shift, chars: "\x1bOx", mode: AppKeypad}
+ - { key: Key8, mods: Control, chars: "\x1bOx", mode: AppKeypad}
+ - { key: Key8, mods: Alt, chars: "\x1bOx", mode: AppKeypad}
+ - { key: Key9, mods: Shift, chars: "\x1bOy", mode: AppKeypad}
+ - { key: Key9, mods: Control, chars: "\x1bOy", mode: AppKeypad}
+ - { key: Key9, mods: Alt, chars: "\x1bOy", mode: AppKeypad}
+ - { key: Up, mods: Shift, chars: "\x1b[1;2A"}
+ # - { key: Up, mods: Mod1Mask, chars: "\x1b[1;3A"}
+ # - { key: Up, mods: Shift|Mod1Mask, chars: "\x1b[1;4A"}
+ - { key: Up, mods: Control, chars: "\x1b[1;5A"}
+ - { key: Up, mods: Shift|Control, chars: "\x1b[1;6A"}
+ # - { key: Up, mods: Control|Mod1Mask, chars: "\x1b[1;7A"}
+ # - { key: Up, mods: Shift|Control|Mod1Mask, chars: "\x1b[1;8A"}
+ - { key: Up, chars: "\x1b[A", mode: ~AppCursor}
+ - { key: Up, mods: Alt, chars: "\x1bOA", mode: AppCursor}
+ - { key: Down, mods: Shift, chars: "\x1b[1;2B"}
+ # - { key: Down, mods: Mod1Mask, chars: "\x1b[1;3B"}
+ # - { key: Down, mods: Shift|Mod1Mask, chars: "\x1b[1;4B"}
+ - { key: Down, mods: Control, chars: "\x1b[1;5B"}
+ - { key: Down, mods: Shift|Control, chars: "\x1b[1;6B"}
+ # - { key: Down, mods: Control|Mod1Mask, chars: "\x1b[1;7B"}
+ # - { key: Down, mods: Shift|Control|Mod1Mask, chars: "\x1b[1;8B"}
+ - { key: Down, mods: Alt, chars: "\x1b[B", mode: ~AppCursor}
+ - { key: Down, mods: Alt, chars: "\x1bOB", mode: AppCursor}
+ - { key: Left, mods: Shift, chars: "\x1b[1;2D"}
+ # - { key: Left, mods: Mod1Mask, chars: "\x1b[1;3D"}
+ # - { key: Left, mods: Shift|Mod1Mask, chars: "\x1b[1;4D"}
+ - { key: Left, mods: Control, chars: "\x1b[1;5D"}
+ - { key: Left, mods: Shift|Control, chars: "\x1b[1;6D"}
+ # - { key: Left, mods: Control|Mod1Mask, chars: "\x1b[1;7D"}
+ # - { key: Left, mods: Shift|Control|Mod1Mask, chars: "\x1b[1;8D"}
+ - { key: Left, mods: Alt, chars: "\x1b[D", mode: ~AppCursor}
+ - { key: Left, mods: Alt, chars: "\x1bOD", mode: AppCursor}
+ - { key: Right, mods: Shift, chars: "\x1b[1;2C"}
+ # - { key: Right, mods: Mod1Mask, chars: "\x1b[1;3C"}
+ # - { key: Right, mods: Shift|Mod1Mask, chars: "\x1b[1;4C"}
+ - { key: Right, mods: Control, chars: "\x1b[1;5C"}
+ - { key: Right, mods: Shift|Control, chars: "\x1b[1;6C"}
+ # - { key: Right, mods: Control|Mod1Mask,chars: "\x1b[1;7C"}
+ # - { key: Right,Shift|Control|Mod1Mask,chars: "\x1b[1;8C"}
+ - { key: Right, mods: Alt, chars: "\x1b[C", mode: ~AppCursor}
+ - { key: Right, mods: Alt, chars: "\x1bOC", mode: AppCursor}
+ # - { key: ISO_Left_Tab, mods: Shift, chars: "\x1b[Z"}
+ # - { key: Return, mods: Mod1Mask, chars: "\x1b\r"}
+ # - { key: Return, mods: XK_ANY_MOD, chars: "\r"}
+ # - { key: Insert, mods: Shift, chars: "\x1b[4l", mode: ~AppKeypad}
+ # - { key: Insert, mods: Shift, chars: "\x1b[2;2~", mode: AppKeypad}
+ - { key: Insert, mods: Control, chars: "\x1b[L", mode: ~AppKeypad}
+ - { key: Insert, mods: Control, chars: "\x1b[2;5~", mode: AppKeypad}
+ - { key: Insert, mods: Alt, chars: "\x1b[4h", mode: ~AppKeypad}
+ - { key: Insert, mods: Alt, chars: "\x1b[2~", mode: AppKeypad}
+ # - { key: Delete, mods: Control, chars: "\x1b[M", mode: ~AppKeypad}
+ # - { key: Delete, mods: Control, chars: "\x1b[3;5~", mode: AppKeypad}
+ # - { key: Delete, mods: Shift, chars: "\x1b[2K", mode: ~AppKeypad}
+ # - { key: Delete, mods: Shift, chars: "\x1b[3;2~", mode: AppKeypad}
+ # - { key: Delete, mods: Alt, chars: "\x1b[P", mode: ~AppKeypad}
+ # - { key: Delete, mods: Alt, chars: "\x1b[3~", mode: AppKeypad}
+ # - { key: BackSpace, chars: "\177"}
+ # - { key: BackSpace, mods: Mod1Mask, chars: "\x1b\177"}
+ - { key: Home, mods: Shift, chars: "\x1b[2J", mode: ~AppCursor}
+ - { key: Home, mods: Shift, chars: "\x1b[1;2H", mode: AppCursor}
+ - { key: Home, mods: Control, chars: "\x1b[H", mode: ~AppCursor}
+ - { key: Home, mods: Control, chars: "\x1b[1~", mode: ~AppCursor}
+ - { key: Home, mods: Alt, chars: "\x1b[H", mode: ~AppCursor}
+ - { key: Home, mods: Alt, chars: "\x1b[1~", mode: ~AppCursor}
+ - { key: End, mods: Control, chars: "\x1b[J", mode: ~AppKeypad}
+ - { key: End, mods: Control, chars: "\x1b[1;5F", mode: AppKeypad}
+ - { key: End, mods: Shift, chars: "\x1b[K", mode: ~AppKeypad}
+ - { key: End, mods: Shift, chars: "\x1b[1;2F", mode: AppKeypad}
+ - { key: End, mods: Alt, chars: "\x1b[4~"}
+ - { key: PageUp, mods: Control, chars: "\x1b[5;5~"}
+ - { key: PageUp, mods: Shift, chars: "\x1b[5;2~"}
+ - { key: PageUp, mods: Alt, chars: "\x1b[5~"}
+ - { key: PageDown, mods: Control, chars: "\x1b[6;5~"}
+ - { key: PageDown, mods: Shift, chars: "\x1b[6;2~"}
+ - { key: PageDown, mods: Alt, chars: "\x1b[6~"}
+ - { key: F1, chars: "\x1bOP"}
+ - { key: F1, mods: Shift, chars: "\x1b[1;2P"}
+ - { key: F1, mods: Control, chars: "\x1b[1;5P"}
+ # - { key: F1, mods: Mod4Mask, chars: "\x1b[1;6P"}
+ # - { key: F1, mods: Mod1Mask, chars: "\x1b[1;3P"}
+ # - { key: F1, mods: Mod3Mask, chars: "\x1b[1;4P"}
+ - { key: F2, chars: "\x1bOQ"}
+ - { key: F2, mods: Shift, chars: "\x1b[1;2Q"}
+ - { key: F2, mods: Control, chars: "\x1b[1;5Q"}
+ # - { key: F2, mods: Mod4Mask, chars: "\x1b[1;6Q"}
+ # - { key: F2, mods: Mod1Mask, chars: "\x1b[1;3Q"}
+ # - { key: F2, mods: Mod3Mask, chars: "\x1b[1;4Q"}
+ - { key: F3, chars: "\x1bOR"}
+ - { key: F3, mods: Shift, chars: "\x1b[1;2R"}
+ - { key: F3, mods: Control, chars: "\x1b[1;5R"}
+ # - { key: F3, mods: Mod4Mask, chars: "\x1b[1;6R"}
+ # - { key: F3, mods: Mod1Mask, chars: "\x1b[1;3R"}
+ # - { key: F3, mods: Mod3Mask, chars: "\x1b[1;4R"}
+ - { key: F4, chars: "\x1bOS"}
+ - { key: F4, mods: Shift, chars: "\x1b[1;2S"}
+ - { key: F4, mods: Control, chars: "\x1b[1;5S"}
+ # - { key: F4, mods: Mod4Mask, chars: "\x1b[1;6S"}
+ # - { key: F4, mods: Mod1Mask, chars: "\x1b[1;3S"}
+ - { key: F5, chars: "\x1b[15~"}
+ - { key: F5, mods: Shift, chars: "\x1b[15;2~"}
+ - { key: F5, mods: Control, chars: "\x1b[15;5~"}
+ # - { key: F5, mods: Mod4Mask, chars: "\x1b[15;6~"}
+ # - { key: F5, mods: Mod1Mask, chars: "\x1b[15;3~"}
+ - { key: F6, chars: "\x1b[17~"}
+ - { key: F6, mods: Shift, chars: "\x1b[17;2~"}
+ - { key: F6, mods: Control, chars: "\x1b[17;5~"}
+ # - { key: F6, mods: Mod4Mask, chars: "\x1b[17;6~"}
+ # - { key: F6, mods: Mod1Mask, chars: "\x1b[17;3~"}
+ - { key: F7, chars: "\x1b[18~"}
+ - { key: F7, mods: Shift, chars: "\x1b[18;2~"}
+ - { key: F7, mods: Control, chars: "\x1b[18;5~"}
+ # - { key: F7, mods: Mod4Mask, chars: "\x1b[18;6~"}
+ # - { key: F7, mods: Mod1Mask, chars: "\x1b[18;3~"}
+ - { key: F8, chars: "\x1b[19~"}
+ - { key: F8, mods: Shift, chars: "\x1b[19;2~"}
+ - { key: F8, mods: Control, chars: "\x1b[19;5~"}
+ # - { key: F8, mods: Mod4Mask, chars: "\x1b[19;6~"}
+ # - { key: F8, mods: Mod1Mask, chars: "\x1b[19;3~"}
+ - { key: F9, chars: "\x1b[20~"}
+ - { key: F9, mods: Shift, chars: "\x1b[20;2~"}
+ - { key: F9, mods: Control, chars: "\x1b[20;5~"}
+ # - { key: F9, mods: Mod4Mask, chars: "\x1b[20;6~"}
+ # - { key: F9, mods: Mod1Mask, chars: "\x1b[20;3~"}
+ - { key: F10, chars: "\x1b[21~"}
+ - { key: F10, mods: Shift, chars: "\x1b[21;2~"}
+ - { key: F10, mods: Control, chars: "\x1b[21;5~"}
+ # - { key: F10, mods: Mod4Mask, chars: "\x1b[21;6~"}
+ # - { key: F10, mods: Mod1Mask, chars: "\x1b[21;3~"}
+ - { key: F11, chars: "\x1b[23~"}
+ - { key: F11, mods: Shift, chars: "\x1b[23;2~"}
+ - { key: F11, mods: Control, chars: "\x1b[23;5~"}
+ # - { key: F11, mods: Mod4Mask, chars: "\x1b[23;6~"}
+ # - { key: F11, mods: Mod1Mask, chars: "\x1b[23;3~"}
+ - { key: F12, chars: "\x1b[24~"}
+ - { key: F12, mods: Shift, chars: "\x1b[24;2~"}
+ - { key: F12, mods: Control, chars: "\x1b[24;5~"}
+ # - { key: F12, mods: Mod4Mask, chars: "\x1b[24;6~"}
+ # - { key: F12, mods: Mod1Mask, chars: "\x1b[24;3~"}
+ - { key: F13, chars: "\x1b[1;2P"}
+ - { key: F14, chars: "\x1b[1;2Q"}
+ - { key: F15, chars: "\x1b[1;2R"}
+ - { key: F16, chars: "\x1b[1;2S"}
+ - { key: F17, chars: "\x1b[15;2~"}
+ - { key: F18, chars: "\x1b[17;2~"}
+ - { key: F19, chars: "\x1b[18;2~"}
+ - { key: F20, chars: "\x1b[19;2~"}
+ - { key: F21, chars: "\x1b[20;2~"}
+ - { key: F22, chars: "\x1b[21;2~"}
+ - { key: F23, chars: "\x1b[23;2~"}
+ - { key: F24, chars: "\x1b[24;2~"}
+ # - { key: F25, chars: "\x1b[1;5P"}
+ # - { key: F26, chars: "\x1b[1;5Q"}
+ # - { key: F27, chars: "\x1b[1;5R"}
+ # - { key: F28, chars: "\x1b[1;5S"}
+ # - { key: F29, chars: "\x1b[15;5~"}
+ # - { key: F30, chars: "\x1b[17;5~"}
+ # - { key: F31, chars: "\x1b[18;5~"}
+ # - { key: F32, chars: "\x1b[19;5~"}
+ # - { key: F33, chars: "\x1b[20;5~"}
+ # - { key: F34, chars: "\x1b[21;5~"}
+ # - { key: F35, chars: "\x1b[23;5~"}
+
+ # shortcuts for tmux. the leader key is control-b (0x02)
+ - { key: W, mods: Command, chars: "\x02&" } # close tab (kill)
+ - { key: T, mods: Command, chars: "\x02c" } # new tab
+ - { key: RBracket, mods: Command|Shift, chars: "\x02n" } # select next tab
+ - { key: LBracket, mods: Command|Shift, chars: "\x02p" } # select previous tab
+ - { key: RBracket, mods: Command, chars: "\x02o" } # select next pane
+ - { key: LBracket, mods: Command, chars: "\x02;" } # select last (previously used) pane
+ - { key: F, mods: Command, chars: "\x02/" } # search (upwards) (see tmux.conf)
+
+mouse:
+ # Click settings
+ #
+ # The `double_click` and `triple_click` settings control the time
+ # alacritty should wait for accepting multiple clicks as one double
+ # or triple click.
+ double_click: { threshold: 300 }
+ triple_click: { threshold: 300 }
+
+ # If this is `true`, the cursor is temporarily hidden when typing.
+ hide_when_typing: true
+
+ # URL launcher
+ # url:
+ # This program is executed when clicking on a text which is recognized as a URL.
+ # The URL is always added to the command as the last parameter.
+ #
+ # When set to `None`, URL launching will be disabled completely.
+ #
+ # Default:
+ # - (macOS) open
+ # - (Linux) xdg-open
+ # - (Windows) explorer
+ # launcher:
+ # program: xdg-open
+ # args: []
+
+ # These are the modifiers that need to be held down for opening URLs when clicking
+ # on them. The available modifiers are documented in the key binding section.
+ # modifiers: Control|Shift
+
+selection:
+ semantic_escape_chars: ",│`|:\"' ()[]{}<>"
+
+ # When set to `true`, selected text will be copied to the primary clipboard.
+ save_to_clipboard: true
+
+# Mouse bindings
+#
+# Available fields:
+# - mouse
+# - action
+# - mods (optional)
+#
+# Values for `mouse`:
+# - Middle
+# - Left
+# - Right
+# - Numeric identifier such as `5`
+#
+# All available `mods` and `action` values are documented in the key binding
+# section.
+mouse_bindings:
+ - { mouse: Middle, action: PasteSelection }
+
+cursor:
+ # Cursor style
+ #
+ # Values for 'style':
+ # - ▇ Block
+ # - _ Underline
+ # - | Beam
+ style: Block
+
+ # If this is `true`, the cursor will be rendered as a hollow box when the
+ # window is not focused.
+ unfocused_hollow: true
+
+# dynamic_title: false
+
+# Live config reload (changes require restart)
+hive_config_reload: true
+
+# Shell
+#
+# You can set shell.program to the path of your favorite shell, e.g. /bin/fish.
+# Entries in shell.args are passed unmodified as arguments to the shell.
+shell:
+ program: powershell.exe
+ # args:
+
+debug:
+ # Should display the render timer
+ render_timer: false
+
+ # Keep the log file after quitting Alacritty.
+ persistent_logging: false
+
+ # Log level
+ #
+ # Values for `log_level`:
+ # - None
+ # - Error
+ # - Warn
+ # - Info
+ # - Debug
+ # - Trace
+ log_level: Off
+
+ # Print all received window events.
+ print_events: false
+
+ # Record all characters and escape sequences as test data.
+ ref_test: false
+
+# vim: nospell
diff --git a/cygwin/conemu.xml b/cygwin/conemu.xml
new file mode 100644
index 0000000..a901db0
--- /dev/null
+++ b/cygwin/conemu.xml
@@ -0,0 +1,775 @@
+<?xml version="1.0" encoding="utf-8"?>
+<key name="Software">
+ <key name="ConEmu">
+ <key name=".Vanilla" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Language" type="string" data="en"/>
+ <value name="StartType" type="hex" data="02"/>
+ <value name="CmdLine" type="string" data=""/>
+ <value name="StartTasksFile" type="string" data=""/>
+ <value name="StartTasksName" type="string" data="{Shells::cmd}"/>
+ <value name="StartFarFolders" type="hex" data="00"/>
+ <value name="StartFarEditors" type="hex" data="00"/>
+ <value name="StartCreateDelay" type="ulong" data="100"/>
+ <value name="ColorTable00" type="dword" data="00010101"/>
+ <value name="ColorTable01" type="dword" data="007226f9"/>
+ <value name="ColorTable02" type="dword" data="00808000"/>
+ <value name="ColorTable03" type="dword" data="00a48231"/>
+ <value name="ColorTable04" type="dword" data="00164bcb"/>
+ <value name="ColorTable05" type="dword" data="00b6369c"/>
+ <value name="ColorTable06" type="dword" data="00009985"/>
+ <value name="ColorTable07" type="dword" data="00d5e8ee"/>
+ <value name="ColorTable08" type="dword" data="00010101"/>
+ <value name="ColorTable09" type="dword" data="00d28b26"/>
+ <value name="ColorTable10" type="dword" data="0036b64f"/>
+ <value name="ColorTable11" type="dword" data="0098a12a"/>
+ <value name="ColorTable12" type="dword" data="002f32dc"/>
+ <value name="ColorTable13" type="dword" data="008236d3"/>
+ <value name="ColorTable14" type="dword" data="000089b5"/>
+ <value name="ColorTable15" type="dword" data="00e3f6fd"/>
+ <value name="TextColorIdx" type="hex" data="10"/>
+ <value name="BackColorIdx" type="hex" data="10"/>
+ <value name="PopTextColorIdx" type="hex" data="10"/>
+ <value name="PopBackColorIdx" type="hex" data="10"/>
+ <value name="ExtendFonts" type="hex" data="00"/>
+ <value name="ExtendFontNormalIdx" type="hex" data="01"/>
+ <value name="ExtendFontBoldIdx" type="hex" data="0C"/>
+ <value name="ExtendFontItalicIdx" type="hex" data="0D"/>
+ <value name="CursorTypeActive" type="dword" data="000232c1"/>
+ <value name="CursorTypeInactive" type="dword" data="00823283"/>
+ <value name="ClipboardDetectLineEnd" type="hex" data="01"/>
+ <value name="ClipboardBashMargin" type="hex" data="00"/>
+ <value name="ClipboardTrimTrailing" type="hex" data="02"/>
+ <value name="ClipboardEOL" type="hex" data="00"/>
+ <value name="ClipboardArrowStart" type="hex" data="01"/>
+ <value name="ClipboardAllLines" type="hex" data="01"/>
+ <value name="ClipboardAllLinesPosix" type="hex" data="00"/>
+ <value name="ClipboardFirstLine" type="hex" data="01"/>
+ <value name="ClipboardFirstLinePosix" type="hex" data="00"/>
+ <value name="ClipboardClickPromptPosition" type="hex" data="02"/>
+ <value name="ClipboardDeleteLeftWord" type="hex" data="02"/>
+ <value name="TrueColorerSupport" type="hex" data="00"/>
+ <value name="VividColors" type="hex" data="01"/>
+ <value name="FadeInactive" type="hex" data="01"/>
+ <value name="FadeInactiveLow" type="hex" data="00"/>
+ <value name="FadeInactiveHigh" type="hex" data="D0"/>
+ <value name="ConVisible" type="hex" data="00"/>
+ <value name="UseInjects" type="hex" data="01"/>
+ <value name="SetDefaultTerminal" type="hex" data="00"/>
+ <value name="SetDefaultTerminalStartup" type="hex" data="00"/>
+ <value name="SetDefaultTerminalStartupTSA" type="hex" data="00"/>
+ <value name="DefaultTerminalAgressive" type="hex" data="01"/>
+ <value name="DefaultTerminalNoInjects" type="hex" data="00"/>
+ <value name="DefaultTerminalNewWindow" type="hex" data="00"/>
+ <value name="DefaultTerminalDebugLog" type="hex" data="00"/>
+ <value name="DefaultTerminalConfirm" type="hex" data="01"/>
+ <value name="DefaultTerminalApps" type="string" data="explorer.exe"/>
+ <value name="ProcessAnsi" type="hex" data="01"/>
+ <value name="AnsiExecution" type="hex" data="01"/>
+ <value name="AnsiAllowedCommands" type="multi">
+ <line data="cmd -cur_console:R /cGitShowBranch.cmd"/>
+ </value>
+ <value name="AnsiLog" type="hex" data="00"/>
+ <value name="AnsiLogCodes" type="hex" data="00"/>
+ <value name="AnsiLogPath" type="string" data="%ConEmuDir%\Logs\"/>
+ <value name="KillSshAgent" type="hex" data="01"/>
+ <value name="ProcessNewConArg" type="hex" data="01"/>
+ <value name="ProcessCmdStart" type="hex" data="01"/>
+ <value name="ProcessCtrlZ" type="hex" data="00"/>
+ <value name="SuppressBells" type="hex" data="01"/>
+ <value name="ConsoleExceptionHandler" type="hex" data="00"/>
+ <value name="UseClink" type="hex" data="01"/>
+ <value name="StoreTaskbarkTasks" type="hex" data="00"/>
+ <value name="StoreTaskbarCommands" type="hex" data="00"/>
+ <value name="JumpListAutoUpdate" type="hex" data="01"/>
+ <value name="SaveCmdHistory" type="hex" data="01"/>
+ <value name="CmdLineHistory" type="multi">
+ <line data="{Scripts::Chocolatey (Admin)}"/>
+ <line data="{gvim}"/>
+ <line data="{Far}"/>
+ <line data="{notepad}"/>
+ <line data="{Shells::cmd}"/>
+ <line data="{Pi3}"/>
+ <line data="{babun}"/>
+ <line data="{Pi2}"/>
+ <line data="{Shells::PowerShell}"/>
+ <line data="{Shells::cmd (Admin)}"/>
+ <line data="{putty}"/>
+ </value>
+ <value name="SingleInstance" type="hex" data="00"/>
+ <value name="ShowHelpTooltips" type="hex" data="01"/>
+ <value name="Multi" type="hex" data="01"/>
+ <value name="Multi.ShowButtons" type="hex" data="01"/>
+ <value name="Multi.ShowSearch" type="hex" data="01"/>
+ <value name="Multi.NumberInCaption" type="hex" data="00"/>
+ <value name="Multi.CloseConfirmFlags" type="hex" data="04"/>
+ <value name="Multi.NewConfirm" type="hex" data="00"/>
+ <value name="Multi.DupConfirm" type="hex" data="01"/>
+ <value name="Multi.DetachConfirm" type="hex" data="01"/>
+ <value name="Multi.UseArrows" type="hex" data="00"/>
+ <value name="Multi.UseNumbers" type="hex" data="01"/>
+ <value name="Multi.UseWinTab" type="hex" data="00"/>
+ <value name="Multi.AutoCreate" type="hex" data="00"/>
+ <value name="Multi.LeaveOnClose" type="hex" data="00"/>
+ <value name="Multi.HideOnClose" type="hex" data="00"/>
+ <value name="Multi.MinByEsc" type="hex" data="02"/>
+ <value name="MapShiftEscToEsc" type="hex" data="01"/>
+ <value name="Multi.Iterate" type="hex" data="01"/>
+ <value name="Multi.SplitWidth" type="hex" data="04"/>
+ <value name="Multi.SplitHeight" type="hex" data="04"/>
+ <value name="ResetTerminalConfirm" type="hex" data="01"/>
+ <value name="KeyboardHooks" type="hex" data="01"/>
+ <value name="FontName" type="string" data="DejaVuSansMono NF"/>
+ <value name="FontName2" type="string" data="Consolas"/>
+ <value name="FontAutoSize" type="hex" data="00"/>
+ <value name="FontSize" type="ulong" data="20"/>
+ <value name="FontSizeX" type="ulong" data="0"/>
+ <value name="FontUseDpi" type="hex" data="01"/>
+ <value name="FontUseUnits" type="hex" data="01"/>
+ <value name="FontSizeX2" type="ulong" data="0"/>
+ <value name="FontSizeX3" type="ulong" data="0"/>
+ <value name="FontCharSet" type="hex" data="00"/>
+ <value name="Anti-aliasing" type="ulong" data="6"/>
+ <value name="FontBold" type="hex" data="00"/>
+ <value name="FontItalic" type="hex" data="00"/>
+ <value name="Monospace" type="hex" data="01"/>
+ <value name="CompressLongStrings" type="hex" data="01"/>
+ <value name="BackGround Image show" type="hex" data="00"/>
+ <value name="BackGround Image" type="string" data="c:\back.bmp"/>
+ <value name="bgImageDarker" type="hex" data="FF"/>
+ <value name="bgImageColors" type="dword" data="ffffffff"/>
+ <value name="bgOperation" type="hex" data="00"/>
+ <value name="bgPluginAllowed" type="hex" data="01"/>
+ <value name="AlphaValue" type="hex" data="FF"/>
+ <value name="AlphaValueSeparate" type="hex" data="00"/>
+ <value name="AlphaValueInactive" type="hex" data="FF"/>
+ <value name="UserScreenTransparent" type="hex" data="00"/>
+ <value name="ColorKeyTransparent" type="hex" data="00"/>
+ <value name="ColorKeyValue" type="dword" data="00010101"/>
+ <value name="UseCurrentSizePos" type="hex" data="01"/>
+ <value name="AutoSaveSizePos" type="hex" data="01"/>
+ <value name="Cascaded" type="hex" data="01"/>
+ <value name="IntegralSize" type="hex" data="00"/>
+ <value name="WindowMode" type="dword" data="00000520"/>
+ <value name="ConWnd X" type="long" data="2290"/>
+ <value name="ConWnd Y" type="long" data="185"/>
+ <value name="LastMonitor" type="string" data="1920,0,3840,1040"/>
+ <value name="ConWnd Width" type="dword" data="0000005e"/>
+ <value name="ConWnd Height" type="dword" data="0000002a"/>
+ <value name="16bit Height" type="ulong" data="0"/>
+ <value name="QuakeStyle" type="hex" data="00"/>
+ <value name="Restore2ActiveMon" type="hex" data="00"/>
+ <value name="RestoreInactive" type="hex" data="00"/>
+ <value name="QuakeAnimation" type="ulong" data="300"/>
+ <value name="HideCaption" type="hex" data="00"/>
+ <value name="HideChildCaption" type="hex" data="01"/>
+ <value name="FocusInChildWindows" type="hex" data="01"/>
+ <value name="HideCaptionAlways" type="hex" data="00"/>
+ <value name="HideCaptionAlwaysFrame" type="hex" data="FF"/>
+ <value name="HideCaptionAlwaysDelay" type="ulong" data="2000"/>
+ <value name="HideCaptionAlwaysDisappear" type="ulong" data="2000"/>
+ <value name="DownShowHiddenMessage" type="hex" data="00"/>
+ <value name="DownShowExOnTopMessage" type="hex" data="00"/>
+ <value name="ConsoleFontName" type="string" data="Lucida Console"/>
+ <value name="ConsoleFontWidth" type="long" data="3"/>
+ <value name="ConsoleFontHeight" type="long" data="5"/>
+ <value name="DynamicBufferHeight" type="hex" data="01"/>
+ <value name="DefaultBufferHeight" type="long" data="1000"/>
+ <value name="AutoBufferHeight" type="hex" data="01"/>
+ <value name="UseScrollLock" type="hex" data="01"/>
+ <value name="ComSpec.Type" type="hex" data="00"/>
+ <value name="ComSpec.Bits" type="hex" data="00"/>
+ <value name="ComSpec.UpdateEnv" type="hex" data="00"/>
+ <value name="ComSpec.EnvAddPath" type="hex" data="01"/>
+ <value name="ComSpec.EnvAddExePath" type="hex" data="01"/>
+ <value name="ComSpec.UncPaths" type="hex" data="00"/>
+ <value name="ComSpec.Path" type="string" data=""/>
+ <value name="AutoReloadEnvironment" type="hex" data="01"/>
+ <value name="EnvironmentSet" type="multi">
+ <line data="set PATH=%ConEmuBaseDir%\Scripts;%PATH%"/>
+ <line data=" "/>
+ <line data="# set ConEmuPromptNames=NO"/>
+ <line data="# set ConEmuPromptNL=NO"/>
+ <line data="# set ConEmuSudoSplit=NO"/>
+ <line data="# set ConEmuSudoConfirm=NO"/>
+ <line data=" "/>
+ <line data="# set LANG=ru_RU.utf8"/>
+ <line data="# set LANG=ru_RU.CP1251"/>
+ <line data=" "/>
+ <line data='# alias cdc=cd /d "%ConEmuDir%"'/>
+ <line data='# alias cd~=cd /d "%UserProfile%"'/>
+ <line data="# alias gl=git-log"/>
+ <line data="# alias glb=git-log --branches --date-order"/>
+ </value>
+ <value name="CTS.Intelligent" type="hex" data="01"/>
+ <value name="CTS.IntelligentExceptions" type="string" data="far|vim"/>
+ <value name="CTS.AutoCopy" type="hex" data="01"/>
+ <value name="CTS.ResetOnRelease" type="hex" data="00"/>
+ <value name="CTS.IBeam" type="hex" data="01"/>
+ <value name="CTS.EndOnTyping" type="hex" data="00"/>
+ <value name="CTS.EndOnKeyPress" type="hex" data="00"/>
+ <value name="CTS.EraseBeforeReset" type="hex" data="01"/>
+ <value name="CTS.Freeze" type="hex" data="00"/>
+ <value name="CTS.SelectBlock" type="hex" data="01"/>
+ <value name="CTS.SelectText" type="hex" data="01"/>
+ <value name="CTS.HtmlFormat" type="hex" data="00"/>
+ <value name="CTS.ForceLocale" type="dword" data="00000000"/>
+ <value name="CTS.RBtnAction" type="hex" data="03"/>
+ <value name="CTS.MBtnAction" type="hex" data="00"/>
+ <value name="CTS.ColorIndex" type="hex" data="E0"/>
+ <value name="ClipboardConfirmEnter" type="hex" data="01"/>
+ <value name="AutoTrimSingleLine" type="hex" data="00"/>
+ <value name="ClipboardConfirmLonger" type="ulong" data="200"/>
+ <value name="FarGotoEditorOpt" type="hex" data="01"/>
+ <value name="FarGotoEditorPath" type="string" data='far.exe /e%1:%2 "%3"'/>
+ <value name="HighlightMouseRow" type="hex" data="00"/>
+ <value name="HighlightMouseCol" type="hex" data="00"/>
+ <value name="FixFarBorders" type="hex" data="01"/>
+ <value name="Anti-aliasing2" type="hex" data="00"/>
+ <value name="FixFarBordersRanges" type="string" data="2013-25C4;"/>
+ <value name="ExtendUCharMap" type="hex" data="01"/>
+ <value name="EnhanceGraphics" type="hex" data="01"/>
+ <value name="EnhanceButtons" type="hex" data="00"/>
+ <value name="PartBrush75" type="hex" data="C8"/>
+ <value name="PartBrush50" type="hex" data="96"/>
+ <value name="PartBrush25" type="hex" data="5A"/>
+ <value name="PartBrushBlack" type="hex" data="20"/>
+ <value name="RightClick opens context menu" type="hex" data="02"/>
+ <value name="RightClickMacro2" type="string" data=""/>
+ <value name="SendAltTab" type="hex" data="00"/>
+ <value name="SendAltEsc" type="hex" data="00"/>
+ <value name="SendAltPrintScrn" type="hex" data="00"/>
+ <value name="SendPrintScrn" type="hex" data="00"/>
+ <value name="SendCtrlEsc" type="hex" data="00"/>
+ <value name="Min2Tray" type="hex" data="00"/>
+ <value name="AlwaysShowTrayIcon" type="hex" data="00"/>
+ <value name="SafeFarClose" type="hex" data="01"/>
+ <value name="SafeFarCloseMacro" type="string" data=""/>
+ <value name="FARuseASCIIsort" type="hex" data="00"/>
+ <value name="ShellNoZoneCheck" type="hex" data="00"/>
+ <value name="FixAltOnAltTab" type="hex" data="00"/>
+ <value name="UseAltGrayPlus" type="hex" data="01"/>
+ <value name="DisableMouse" type="hex" data="00"/>
+ <value name="RSelectionFix" type="hex" data="01"/>
+ <value name="MouseSkipActivation" type="hex" data="01"/>
+ <value name="MouseSkipMoving" type="hex" data="01"/>
+ <value name="MouseDragWindow" type="hex" data="01"/>
+ <value name="FarHourglass" type="hex" data="01"/>
+ <value name="FarHourglassDelay" type="ulong" data="500"/>
+ <value name="Dnd" type="hex" data="01"/>
+ <value name="DndDrop" type="hex" data="01"/>
+ <value name="DefCopy" type="hex" data="01"/>
+ <value name="DropUseMenu" type="hex" data="02"/>
+ <value name="DragOverlay" type="hex" data="01"/>
+ <value name="DragShowIcons" type="hex" data="01"/>
+ <value name="DebugSteps" type="hex" data="01"/>
+ <value name="DebugLog" type="hex" data="00"/>
+ <value name="DragPanel" type="hex" data="02"/>
+ <value name="DragPanelBothEdges" type="hex" data="00"/>
+ <value name="KeyBarRClick" type="hex" data="01"/>
+ <value name="StatusBar.Show" type="hex" data="01"/>
+ <value name="StatusBar.Flags" type="dword" data="00000002"/>
+ <value name="StatusFontFace" type="string" data="Segoe UI"/>
+ <value name="StatusFontCharSet" type="ulong" data="0"/>
+ <value name="StatusFontHeight" type="long" data="12"/>
+ <value name="StatusBar.Color.Back" type="dword" data="00423607"/>
+ <value name="StatusBar.Color.Light" type="dword" data="00e3f6fd"/>
+ <value name="StatusBar.Color.Dark" type="dword" data="00a1a193"/>
+ <value name="StatusBar.Hide.VCon" type="hex" data="01"/>
+ <value name="StatusBar.Hide.CapsL" type="hex" data="00"/>
+ <value name="StatusBar.Hide.NumL" type="hex" data="00"/>
+ <value name="StatusBar.Hide.ScrL" type="hex" data="00"/>
+ <value name="StatusBar.Hide.VisL" type="hex" data="01"/>
+ <value name="StatusBar.Hide.InputGrouping" type="hex" data="00"/>
+ <value name="StatusBar.Hide.Lang" type="hex" data="01"/>
+ <value name="StatusBar.Hide.KeyHooks" type="hex" data="01"/>
+ <value name="StatusBar.Hide.TMode" type="hex" data="01"/>
+ <value name="StatusBar.Hide.RMode" type="hex" data="01"/>
+ <value name="StatusBar.Hide.WPos" type="hex" data="01"/>
+ <value name="StatusBar.Hide.WSize" type="hex" data="01"/>
+ <value name="StatusBar.Hide.WClient" type="hex" data="01"/>
+ <value name="StatusBar.Hide.WWork" type="hex" data="01"/>
+ <value name="StatusBar.Hide.WVBack" type="hex" data="01"/>
+ <value name="StatusBar.Hide.WVDC" type="hex" data="01"/>
+ <value name="StatusBar.Hide.WMode" type="hex" data="01"/>
+ <value name="StatusBar.Hide.Style" type="hex" data="01"/>
+ <value name="StatusBar.Hide.StyleEx" type="hex" data="01"/>
+ <value name="StatusBar.Hide.hFore" type="hex" data="01"/>
+ <value name="StatusBar.Hide.hFocus" type="hex" data="01"/>
+ <value name="StatusBar.Hide.Zoom" type="hex" data="01"/>
+ <value name="StatusBar.Hide.Dpi" type="hex" data="01"/>
+ <value name="StatusBar.Hide.ABuf" type="hex" data="01"/>
+ <value name="StatusBar.Hide.CPos" type="hex" data="01"/>
+ <value name="StatusBar.Hide.CSize" type="hex" data="01"/>
+ <value name="StatusBar.Hide.BSize" type="hex" data="01"/>
+ <value name="StatusBar.Hide.CurX" type="hex" data="00"/>
+ <value name="StatusBar.Hide.CurY" type="hex" data="00"/>
+ <value name="StatusBar.Hide.CurS" type="hex" data="00"/>
+ <value name="StatusBar.Hide.CurI" type="hex" data="00"/>
+ <value name="StatusBar.Hide.CellI" type="hex" data="01"/>
+ <value name="StatusBar.Hide.ConEmuPID" type="hex" data="01"/>
+ <value name="StatusBar.Hide.ConEmuHWND" type="hex" data="01"/>
+ <value name="StatusBar.Hide.ConEmuView" type="hex" data="01"/>
+ <value name="StatusBar.Hide.Srv" type="hex" data="01"/>
+ <value name="StatusBar.Hide.SrvHWND" type="hex" data="01"/>
+ <value name="StatusBar.Hide.Transparency" type="hex" data="00"/>
+ <value name="StatusBar.Hide.New" type="hex" data="01"/>
+ <value name="StatusBar.Hide.Sync" type="hex" data="00"/>
+ <value name="StatusBar.Hide.Proc" type="hex" data="00"/>
+ <value name="StatusBar.Hide.Title" type="hex" data="00"/>
+ <value name="StatusBar.Hide.Time" type="hex" data="00"/>
+ <value name="StatusBar.Hide.Resize" type="hex" data="00"/>
+ <value name="Tabs" type="hex" data="01"/>
+ <value name="TabsLocation" type="hex" data="00"/>
+ <value name="TabIcons" type="hex" data="01"/>
+ <value name="OneTabPerGroup" type="hex" data="00"/>
+ <value name="ActivateSplitMouseOver" type="hex" data="01"/>
+ <value name="TabSelf" type="hex" data="01"/>
+ <value name="TabLazy" type="hex" data="01"/>
+ <value name="TabFlashChanged" type="long" data="8"/>
+ <value name="TabRecent" type="hex" data="01"/>
+ <value name="TabDblClick" type="ulong" data="1"/>
+ <value name="TabBtnDblClick" type="ulong" data="0"/>
+ <value name="TabsOnTaskBar" type="hex" data="02"/>
+ <value name="TaskBarOverlay" type="hex" data="01"/>
+ <value name="TaskbarProgress" type="hex" data="01"/>
+ <value name="TabCloseMacro" type="string" data=""/>
+ <value name="TabFontFace" type="string" data="Segoe UI"/>
+ <value name="TabFontCharSet" type="ulong" data="0"/>
+ <value name="TabFontHeight" type="long" data="13"/>
+ <value name="SaveAllEditors" type="string" data=""/>
+ <value name="ToolbarAddSpace" type="long" data="0"/>
+ <value name="TabConsole" type="string" data="&lt;%c&gt; %s"/>
+ <value name="TabModifiedSuffix" type="string" data="[*]"/>
+ <value name="TabSkipWords" type="string" data="Administrator:|Администратор:"/>
+ <value name="TabPanels" type="string" data="&lt;%c&gt; %s"/>
+ <value name="TabEditor" type="string" data="&lt;%c.%i&gt;{%s}"/>
+ <value name="TabEditorModified" type="string" data="&lt;%c.%i&gt;[%s] *"/>
+ <value name="TabViewer" type="string" data="&lt;%c.%i&gt;[%s]"/>
+ <value name="TabLenMax" type="ulong" data="20"/>
+ <value name="AdminTitleSuffix" type="string" data=" (Admin)"/>
+ <value name="AdminShowShield" type="hex" data="01"/>
+ <value name="HideInactiveConsoleTabs" type="hex" data="00"/>
+ <value name="ShowFarWindows" type="hex" data="01"/>
+ <value name="TryToCenter" type="hex" data="00"/>
+ <value name="CenterConsolePad" type="ulong" data="0"/>
+ <value name="ShowScrollbar" type="hex" data="02"/>
+ <value name="ScrollBarAppearDelay" type="ulong" data="100"/>
+ <value name="ScrollBarDisappearDelay" type="ulong" data="1000"/>
+ <value name="IconID" type="ulong" data="1"/>
+ <value name="MainTimerElapse" type="ulong" data="10"/>
+ <value name="MainTimerInactiveElapse" type="ulong" data="1000"/>
+ <value name="AffinityMask" type="dword" data="00000000"/>
+ <value name="SkipFocusEvents" type="hex" data="00"/>
+ <value name="MonitorConsoleLang" type="hex" data="03"/>
+ <value name="SnapToDesktopEdges" type="hex" data="00"/>
+ <value name="AlwaysOnTop" type="hex" data="00"/>
+ <value name="SleepInBackground" type="hex" data="00"/>
+ <value name="RetardInactivePanes" type="hex" data="00"/>
+ <value name="MinimizeOnLoseFocus" type="hex" data="00"/>
+ <value name="DisableFarFlashing" type="hex" data="00"/>
+ <value name="DisableAllFlashing" type="hex" data="00"/>
+ <value name="FindText" type="string" data=""/>
+ <value name="FindMatchCase" type="hex" data="00"/>
+ <value name="FindMatchWholeWords" type="hex" data="00"/>
+ <value name="FindTransparent" type="hex" data="01"/>
+ <value name="PanView.BackColor" type="dword" data="30ffffff"/>
+ <value name="PanView.PFrame" type="long" data="1"/>
+ <value name="PanView.PFrameColor" type="dword" data="28808080"/>
+ <value name="PanView.SFrame" type="long" data="1"/>
+ <value name="PanView.SFrameColor" type="dword" data="07c0c0c0"/>
+ <value name="PanView.Thumbs.ImgSize" type="long" data="96"/>
+ <value name="PanView.Thumbs.SpaceX1" type="long" data="1"/>
+ <value name="PanView.Thumbs.SpaceY1" type="long" data="1"/>
+ <value name="PanView.Thumbs.SpaceX2" type="long" data="5"/>
+ <value name="PanView.Thumbs.SpaceY2" type="long" data="20"/>
+ <value name="PanView.Thumbs.LabelSpacing" type="long" data="2"/>
+ <value name="PanView.Thumbs.LabelPadding" type="long" data="0"/>
+ <value name="PanView.Thumbs.FontName" type="string" data="Segoe UI"/>
+ <value name="PanView.Thumbs.FontHeight" type="long" data="14"/>
+ <value name="PanView.Tiles.ImgSize" type="long" data="48"/>
+ <value name="PanView.Tiles.SpaceX1" type="long" data="4"/>
+ <value name="PanView.Tiles.SpaceY1" type="long" data="4"/>
+ <value name="PanView.Tiles.SpaceX2" type="long" data="172"/>
+ <value name="PanView.Tiles.SpaceY2" type="long" data="4"/>
+ <value name="PanView.Tiles.LabelSpacing" type="long" data="4"/>
+ <value name="PanView.Tiles.LabelPadding" type="long" data="1"/>
+ <value name="PanView.Tiles.FontName" type="string" data="Segoe UI"/>
+ <value name="PanView.Tiles.FontHeight" type="long" data="14"/>
+ <value name="PanView.LoadPreviews" type="hex" data="03"/>
+ <value name="PanView.LoadFolders" type="hex" data="01"/>
+ <value name="PanView.LoadTimeout" type="ulong" data="15"/>
+ <value name="PanView.MaxZoom" type="ulong" data="600"/>
+ <value name="PanView.UsePicView2" type="hex" data="01"/>
+ <value name="PanView.RestoreOnStartup" type="hex" data="00"/>
+ <value name="Update.VerLocation" type="string" data=""/>
+ <value name="Update.CheckOnStartup" type="hex" data="00"/>
+ <value name="Update.CheckHourly" type="hex" data="00"/>
+ <value name="Update.ConfirmDownload" type="hex" data="01"/>
+ <value name="Update.UseBuilds" type="hex" data="02"/>
+ <value name="Update.InetTool" type="hex" data="00"/>
+ <value name="Update.InetToolCmd" type="string" data=""/>
+ <value name="Update.UseProxy" type="hex" data="00"/>
+ <value name="Update.Proxy" type="string" data=""/>
+ <value name="Update.ProxyUser" type="string" data=""/>
+ <value name="Update.ProxyPassword" type="string" data=""/>
+ <value name="Update.ExeCmdLine" type="string" data=""/>
+ <value name="Update.ArcCmdLine" type="string" data=""/>
+ <value name="Update.DownloadPath" type="string" data="%TEMP%\ConEmu"/>
+ <value name="Update.LeavePackages" type="hex" data="00"/>
+ <value name="Update.PostUpdateCmd" type="string" data="echo Last successful update&gt;ConEmuUpdate.info &amp;&amp; date /t&gt;&gt;ConEmuUpdate.info &amp;&amp; time /t&gt;&gt;ConEmuUpdate.info"/>
+ <key name="HotKeys" modified="2020-11-05 18:21:22" build="201101">
+ <value name="KeyMacroVersion" type="hex" data="02"/>
+ <value name="Multi.Modifier" type="dword" data="0000005b"/>
+ <value name="Multi.ArrowsModifier" type="dword" data="0000005b"/>
+ <value name="MinimizeRestore" type="dword" data="000011c0"/>
+ <value name="MinimizeRestore2" type="dword" data="00000000"/>
+ <value name="GlobalRestore" type="dword" data="00000000"/>
+ <value name="CdExplorerPath" type="dword" data="00000000"/>
+ <value name="ForcedFullScreen" type="dword" data="12115b0d"/>
+ <value name="SwitchGuiFocus" type="dword" data="00005b5a"/>
+ <value name="SetFocusGui" type="dword" data="00000000"/>
+ <value name="SetFocusChild" type="dword" data="00000000"/>
+ <value name="ChildSystemMenu" type="dword" data="00000000"/>
+ <value name="CheckUpdates" type="dword" data="00105b55"/>
+ <value name="Multi.NewConsole" type="dword" data="00005b57"/>
+ <value name="Multi.NewConsoleShift" type="dword" data="00105b57"/>
+ <value name="Multi.CmdKey" type="dword" data="00005b58"/>
+ <value name="Multi.NewWndConfirm" type="dword" data="00000000"/>
+ <value name="Multi.NewConsolePopup" type="dword" data="00005b4e"/>
+ <value name="Multi.NewConsolePopup2" type="dword" data="00000000"/>
+ <value name="Multi.NewAttach" type="dword" data="00005b47"/>
+ <value name="Multi.NewSplitV" type="dword" data="0010114f"/>
+ <value name="Multi.NewSplitH" type="dword" data="00101145"/>
+ <value name="Multi.SplitMaximize" type="dword" data="00005d0d"/>
+ <value name="Multi.SplitSizeVU" type="dword" data="00105d26"/>
+ <value name="Multi.SplitSizeVD" type="dword" data="00105d28"/>
+ <value name="Multi.SplitSizeHL" type="dword" data="00105d25"/>
+ <value name="Multi.SplitSizeHR" type="dword" data="00105d27"/>
+ <value name="Key.TabPane1" type="dword" data="00005d09"/>
+ <value name="Key.TabPane2" type="dword" data="00105d09"/>
+ <value name="Multi.SplitFocusU" type="dword" data="00005d26"/>
+ <value name="Multi.SplitFocusD" type="dword" data="00005d28"/>
+ <value name="Multi.SplitFocusL" type="dword" data="00005d25"/>
+ <value name="Multi.SplitFocusR" type="dword" data="00005d27"/>
+ <value name="Multi.SplitSwap" type="dword" data="00125d58"/>
+ <value name="Multi.SplitSwapU" type="dword" data="00125d26"/>
+ <value name="Multi.SplitSwapD" type="dword" data="00125d28"/>
+ <value name="Multi.SplitSwapL" type="dword" data="00125d25"/>
+ <value name="Multi.SplitSwapR" type="dword" data="00125d27"/>
+ <value name="Multi.Next" type="dword" data="00001121"/>
+ <value name="Multi.NextShift" type="dword" data="00001122"/>
+ <value name="Multi.Recreate" type="dword" data="00005bc0"/>
+ <value name="Multi.AltCon" type="dword" data="00005b41"/>
+ <value name="Multi.Pause" type="dword" data="80808013"/>
+ <value name="Multi.Scroll" type="dword" data="00000000"/>
+ <value name="Multi.GroupInput" type="dword" data="00005d47"/>
+ <value name="Multi.GroupInputAll" type="dword" data="00105d47"/>
+ <value name="Multi.GroupInputKey" type="dword" data="00125d47"/>
+ <value name="Multi.Detach" type="dword" data="00000000"/>
+ <value name="Multi.Unfasten" type="dword" data="00000000"/>
+ <value name="Multi.Close" type="dword" data="00005b2e"/>
+ <value name="CloseTabKey" type="dword" data="00125b2e"/>
+ <value name="CloseGroupKey" type="dword" data="00115b2e"/>
+ <value name="CloseGroupPrcKey" type="dword" data="00000000"/>
+ <value name="CloseAllConKey" type="dword" data="00000000"/>
+ <value name="CloseZombiesKey" type="dword" data="00000000"/>
+ <value name="CloseExceptConKey" type="dword" data="00000000"/>
+ <value name="CloseToRightKey" type="dword" data="00000000"/>
+ <value name="KillProcessKey" type="dword" data="00000000"/>
+ <value name="KillAllButShellKey" type="dword" data="00105b2e"/>
+ <value name="DuplicateRootKey" type="dword" data="00005b53"/>
+ <value name="CloseConEmuKey" type="dword" data="00005b73"/>
+ <value name="Multi.Rename" type="dword" data="00005d52"/>
+ <value name="AffinityPriorityKey" type="dword" data="00005d41"/>
+ <value name="Multi.MoveLeft" type="dword" data="00125b25"/>
+ <value name="Multi.MoveRight" type="dword" data="00125b27"/>
+ <value name="CTS.VkBlockStart" type="dword" data="00000000"/>
+ <value name="CTS.VkTextStart" type="dword" data="00000000"/>
+ <value name="CTS.VkCopyFmt0" type="dword" data="00001143"/>
+ <value name="CTS.VkCopyFmt1" type="dword" data="00101143"/>
+ <value name="CTS.VkCopyFmt2" type="dword" data="00000000"/>
+ <value name="CTS.VkCopyAll" type="dword" data="00000000"/>
+ <value name="HighlightMouseSwitch" type="dword" data="00005d4c"/>
+ <value name="HighlightMouseSwitchX" type="dword" data="00005d58"/>
+ <value name="Multi.ShowTabsList" type="dword" data="00000000"/>
+ <value name="Multi.ShowTabsList2" type="dword" data="00005d7b"/>
+ <value name="ClipboardVkAllLines" type="dword" data="0000102d"/>
+ <value name="ClipboardVkFirstLine" type="dword" data="00001156"/>
+ <value name="Key.AltNumpad" type="dword" data="00000000"/>
+ <value name="DeleteWordToLeft" type="dword" data="00001108"/>
+ <value name="FindTextKey" type="dword" data="00005d46"/>
+ <value name="ScreenshotKey" type="dword" data="00005b48"/>
+ <value name="ScreenshotFullKey" type="dword" data="00105b48"/>
+ <value name="ShowStatusBarKey" type="dword" data="00005d53"/>
+ <value name="ShowTabBarKey" type="dword" data="00005d54"/>
+ <value name="ShowCaptionKey" type="dword" data="00005d43"/>
+ <value name="AlwaysOnTopKey" type="dword" data="00000000"/>
+ <value name="TransparencyInc" type="dword" data="00000000"/>
+ <value name="TransparencyDec" type="dword" data="00000000"/>
+ <value name="Key.EditMenu" type="dword" data="00000000"/>
+ <value name="Key.EditMenu2" type="dword" data="00000000"/>
+ <value name="Key.TabMenu" type="dword" data="00005d20"/>
+ <value name="Key.TabMenu2" type="dword" data="00001002"/>
+ <value name="Key.Maximize" type="dword" data="00001278"/>
+ <value name="Key.MaximizeWidth" type="dword" data="00105b28"/>
+ <value name="Key.MaximizeHeight" type="dword" data="00105b26"/>
+ <value name="Key.TileToLeft" type="dword" data="00005b25"/>
+ <value name="Key.TileToRight" type="dword" data="00005b27"/>
+ <value name="Key.JumpActiveMonitor" type="dword" data="00000000"/>
+ <value name="Key.JumpPrevMonitor" type="dword" data="00105b25"/>
+ <value name="Key.JumpNextMonitor" type="dword" data="00105b27"/>
+ <value name="Key.FullScreen" type="dword" data="0000120d"/>
+ <value name="Key.SysMenu" type="dword" data="00001220"/>
+ <value name="Key.SysMenu2" type="dword" data="00001102"/>
+ <value name="Key.DebugProcess" type="dword" data="00105b44"/>
+ <value name="Key.DumpProcess" type="dword" data="00000000"/>
+ <value name="Key.DumpTree" type="dword" data="00000000"/>
+ <value name="Key.BufUp" type="dword" data="00001126"/>
+ <value name="Key.BufDn" type="dword" data="115d5b28"/>
+ <value name="Key.BufPgUp" type="dword" data="115d5b21"/>
+ <value name="Key.BufPgDn" type="dword" data="115d5b22"/>
+ <value name="Key.BufHfPgUp" type="dword" data="00005d21"/>
+ <value name="Key.BufHfPgDn" type="dword" data="00005d22"/>
+ <value name="Key.BufTop" type="dword" data="00005d24"/>
+ <value name="Key.BufBottom" type="dword" data="00005d23"/>
+ <value name="Key.BufPrUp" type="dword" data="00121121"/>
+ <value name="Key.BufPrDn" type="dword" data="00121122"/>
+ <value name="Key.BufCursor" type="dword" data="00005d08"/>
+ <value name="Key.ResetTerm" type="dword" data="00000000"/>
+ <value name="FontLargerKey" type="dword" data="000011d0"/>
+ <value name="FontSmallerKey" type="dword" data="000011d1"/>
+ <value name="FontOriginalKey" type="dword" data="00001104"/>
+ <value name="PasteFileKey" type="dword" data="00101146"/>
+ <value name="PastePathKey" type="dword" data="00101144"/>
+ <value name="PasteCygwinKey" type="dword" data="00005d2d"/>
+ <value name="KeyMacro01" type="dword" data="00000000"/>
+ <value name="KeyMacro01.Text" type="string" data=""/>
+ <value name="KeyMacro02" type="dword" data="00000000"/>
+ <value name="KeyMacro02.Text" type="string" data=""/>
+ <value name="KeyMacro03" type="dword" data="00000000"/>
+ <value name="KeyMacro03.Text" type="string" data=""/>
+ <value name="KeyMacro04" type="dword" data="00000000"/>
+ <value name="KeyMacro04.Text" type="string" data=""/>
+ <value name="KeyMacro05" type="dword" data="00000000"/>
+ <value name="KeyMacro05.Text" type="string" data=""/>
+ <value name="KeyMacro06" type="dword" data="00000000"/>
+ <value name="KeyMacro06.Text" type="string" data=""/>
+ <value name="KeyMacro07" type="dword" data="00000000"/>
+ <value name="KeyMacro07.Text" type="string" data=""/>
+ <value name="KeyMacro08" type="dword" data="00000000"/>
+ <value name="KeyMacro08.Text" type="string" data=""/>
+ <value name="KeyMacro09" type="dword" data="00000000"/>
+ <value name="KeyMacro09.Text" type="string" data=""/>
+ <value name="KeyMacro10" type="dword" data="00000000"/>
+ <value name="KeyMacro10.Text" type="string" data=""/>
+ <value name="KeyMacro11" type="dword" data="00000000"/>
+ <value name="KeyMacro11.Text" type="string" data=""/>
+ <value name="KeyMacro12" type="dword" data="00000000"/>
+ <value name="KeyMacro12.Text" type="string" data=""/>
+ <value name="KeyMacro13" type="dword" data="00000000"/>
+ <value name="KeyMacro13.Text" type="string" data=""/>
+ <value name="KeyMacro14" type="dword" data="00000000"/>
+ <value name="KeyMacro14.Text" type="string" data=""/>
+ <value name="KeyMacro15" type="dword" data="00000000"/>
+ <value name="KeyMacro15.Text" type="string" data=""/>
+ <value name="KeyMacro16" type="dword" data="00000000"/>
+ <value name="KeyMacro16.Text" type="string" data=""/>
+ <value name="KeyMacro17" type="dword" data="00000000"/>
+ <value name="KeyMacro17.Text" type="string" data=""/>
+ <value name="KeyMacro18" type="dword" data="00000000"/>
+ <value name="KeyMacro18.Text" type="string" data=""/>
+ <value name="KeyMacro19" type="dword" data="00000000"/>
+ <value name="KeyMacro19.Text" type="string" data=""/>
+ <value name="KeyMacro20" type="dword" data="00000000"/>
+ <value name="KeyMacro20.Text" type="string" data=""/>
+ <value name="KeyMacro21" type="dword" data="00000000"/>
+ <value name="KeyMacro21.Text" type="string" data=""/>
+ <value name="KeyMacro22" type="dword" data="00000000"/>
+ <value name="KeyMacro22.Text" type="string" data=""/>
+ <value name="KeyMacro23" type="dword" data="00000000"/>
+ <value name="KeyMacro23.Text" type="string" data=""/>
+ <value name="KeyMacro24" type="dword" data="00000000"/>
+ <value name="KeyMacro24.Text" type="string" data=""/>
+ <value name="KeyMacro25" type="dword" data="00000000"/>
+ <value name="KeyMacro25.Text" type="string" data=""/>
+ <value name="KeyMacro26" type="dword" data="00000000"/>
+ <value name="KeyMacro26.Text" type="string" data=""/>
+ <value name="KeyMacro27" type="dword" data="00000000"/>
+ <value name="KeyMacro27.Text" type="string" data=""/>
+ <value name="KeyMacro28" type="dword" data="00000000"/>
+ <value name="KeyMacro28.Text" type="string" data=""/>
+ <value name="KeyMacro29" type="dword" data="00000000"/>
+ <value name="KeyMacro29.Text" type="string" data=""/>
+ <value name="KeyMacro30" type="dword" data="00000000"/>
+ <value name="KeyMacro30.Text" type="string" data=""/>
+ <value name="KeyMacro31" type="dword" data="00000000"/>
+ <value name="KeyMacro31.Text" type="string" data=""/>
+ <value name="KeyMacro32" type="dword" data="00000000"/>
+ <value name="KeyMacro32.Text" type="string" data=""/>
+ <value name="CTS.VkBlock" type="hex" data="A4"/>
+ <value name="CTS.VkText" type="hex" data="A0"/>
+ <value name="CTS.VkAct" type="hex" data="00"/>
+ <value name="CTS.VkPrompt" type="hex" data="00"/>
+ <value name="FarGotoEditorVk" type="hex" data="A2"/>
+ <value name="DndLKey" type="hex" data="00"/>
+ <value name="DndRKey" type="hex" data="A2"/>
+ <value name="WndDragKey" type="dword" data="00121101"/>
+ </key>
+ <key name="Tasks" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Count" type="long" data="16"/>
+ <key name="Task1" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{Shells::cmd}"/>
+ <value name="Flags" type="dword" data="00000000"/>
+ <value name="Hotkey" type="dword" data="00000000"/>
+ <value name="GuiArgs" type="string" data=""/>
+ <value name="Active" type="long" data="0"/>
+ <value name="Count" type="long" data="1"/>
+ <value name="Cmd1" type="string" data='cmd.exe /k "%ConEmuBaseDir%\CmdInit.cmd"'/>
+ </key>
+ <key name="Task2" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{Shells::cmd (Admin)}"/>
+ <value name="Flags" type="dword" data="00000000"/>
+ <value name="Hotkey" type="dword" data="00000000"/>
+ <value name="GuiArgs" type="string" data=""/>
+ <value name="Active" type="long" data="0"/>
+ <value name="Count" type="long" data="1"/>
+ <value name="Cmd1" type="string" data='cmd.exe /k "%ConEmuBaseDir%\CmdInit.cmd" -new_console:a'/>
+ </key>
+ <key name="Task3" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{babun}"/>
+ <value name="Flags" type="dword" data="00000003"/>
+ <value name="Hotkey" type="dword" data="00000000"/>
+ <value name="GuiArgs" type="string" data=' /icon "%userprofile%\.babun\cygwin\bin\mintty.exe" /dir "%userprofile%"'/>
+ <value name="Active" type="long" data="0"/>
+ <value name="Count" type="long" data="1"/>
+ <value name="Cmd1" type="string" data="D:\home\apps\cygwin\bin\mintty.exe /bin/env CHERE_INVOKING=1 /bin/zsh.exe -l -i"/>
+ </key>
+ <key name="Task4" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{Shells::cmd 64/32}"/>
+ <value name="Flags" type="dword" data="00000000"/>
+ <value name="Hotkey" type="dword" data="00000000"/>
+ <value name="GuiArgs" type="string" data=""/>
+ <value name="Active" type="long" data="1"/>
+ <value name="Count" type="long" data="2"/>
+ <value name="Cmd1" type="string" data='&gt; "%windir%\system32\cmd.exe" /k ""%ConEmuBaseDir%\CmdInit.cmd" &amp; echo This is Native cmd.exe"'/>
+ <value name="Cmd2" type="string" data='"%windir%\syswow64\cmd.exe" /k ""%ConEmuBaseDir%\CmdInit.cmd" &amp; echo This is 32 bit cmd.exe -new_console:s50V"'/>
+ </key>
+ <key name="Task5" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{Shells::PowerShell}"/>
+ <value name="Flags" type="dword" data="00000000"/>
+ <value name="Hotkey" type="dword" data="00000000"/>
+ <value name="GuiArgs" type="string" data=""/>
+ <value name="Active" type="long" data="0"/>
+ <value name="Count" type="long" data="1"/>
+ <value name="Cmd1" type="string" data="powershell.exe"/>
+ </key>
+ <key name="Task6" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{Pi3}"/>
+ <value name="Flags" type="dword" data="00000000"/>
+ <value name="Hotkey" type="dword" data="10121133"/>
+ <value name="GuiArgs" type="string" data=""/>
+ <value name="Active" type="long" data="0"/>
+ <value name="Count" type="long" data="1"/>
+ <value name="Cmd1" type="string" data='C:\Users\bloodstalker\Desktop\putty.exe -new_console -load "Pi3" -l pi -pw raspberry'/>
+ </key>
+ <key name="Task7" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{notepad}"/>
+ <value name="Flags" type="dword" data="00000000"/>
+ <value name="Hotkey" type="dword" data="00000000"/>
+ <value name="GuiArgs" type="string" data=""/>
+ <value name="Active" type="long" data="0"/>
+ <value name="Count" type="long" data="1"/>
+ <value name="Cmd1" type="string" data="notepad.exe"/>
+ </key>
+ <key name="Task8" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{Pi2}"/>
+ <value name="Flags" type="dword" data="00000000"/>
+ <value name="Hotkey" type="dword" data="10125b32"/>
+ <value name="GuiArgs" type="string" data=""/>
+ <value name="Active" type="long" data="0"/>
+ <value name="Count" type="long" data="1"/>
+ <value name="Cmd1" type="string" data='C:\Users\bloodstalker\Desktop\putty.exe -new_console -load "savedsess" -l pi -pw raspberry'/>
+ </key>
+ <key name="Task9" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{Shells::cmd-32}"/>
+ <value name="Flags" type="dword" data="00000000"/>
+ <value name="Hotkey" type="dword" data="00000000"/>
+ <value name="GuiArgs" type="string" data=""/>
+ <value name="Active" type="long" data="0"/>
+ <value name="Count" type="long" data="1"/>
+ <value name="Cmd1" type="string" data='"%windir%\syswow64\cmd.exe" /k "%ConEmuBaseDir%\CmdInit.cmd"'/>
+ </key>
+ <key name="Task10" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{Shells::PowerShell (Admin)}"/>
+ <value name="Flags" type="dword" data="00000000"/>
+ <value name="Hotkey" type="dword" data="00000000"/>
+ <value name="GuiArgs" type="string" data=""/>
+ <value name="Active" type="long" data="0"/>
+ <value name="Count" type="long" data="1"/>
+ <value name="Cmd1" type="string" data="powershell.exe -new_console:a"/>
+ </key>
+ <key name="Task11" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{Bash::CygWin bash}"/>
+ <value name="Flags" type="dword" data="00000000"/>
+ <value name="Hotkey" type="dword" data="00000000"/>
+ <value name="GuiArgs" type="string" data=""/>
+ <value name="Active" type="long" data="0"/>
+ <value name="Count" type="long" data="1"/>
+ <value name="Cmd1" type="string" data='set CHERE_INVOKING=1 &amp; sh.exe --login -i -new_console:C:"sh.exe\..\Cygwin.ico"'/>
+ </key>
+ <key name="Task12" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{Bash::Git bash}"/>
+ <value name="Flags" type="dword" data="00000000"/>
+ <value name="Hotkey" type="dword" data="00000000"/>
+ <value name="GuiArgs" type="string" data=""/>
+ <value name="Active" type="long" data="0"/>
+ <value name="Count" type="long" data="1"/>
+ <value name="Cmd1" type="string" data='"%ConEmuDir%\..\Git\git-cmd.exe" --no-cd --command=usr/bin/bash.exe -l -i'/>
+ </key>
+ <key name="Task13" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{Tests::Show ANSI colors}"/>
+ <value name="Flags" type="dword" data="00000000"/>
+ <value name="Hotkey" type="dword" data="00000000"/>
+ <value name="GuiArgs" type="string" data=""/>
+ <value name="Active" type="long" data="0"/>
+ <value name="Count" type="long" data="1"/>
+ <value name="Cmd1" type="string" data='cmd.exe /k type "%ConEmuBaseDir%\Addons\AnsiColors16t.ans" -cur_console:n'/>
+ </key>
+ <key name="Task14" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{Scripts::Chocolatey (Admin)}"/>
+ <value name="Flags" type="dword" data="00000000"/>
+ <value name="Hotkey" type="dword" data="00000000"/>
+ <value name="GuiArgs" type="string" data=""/>
+ <value name="Active" type="long" data="0"/>
+ <value name="Count" type="long" data="1"/>
+ <value name="Cmd1" type="string" data='*cmd.exe /k Title Chocolatey &amp; "%ConEmuBaseDir%\Addons\ChocolateyAbout.cmd"'/>
+ </key>
+ <key name="Task15" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{gvim}"/>
+ <value name="Flags" type="dword" data="00000000"/>
+ <value name="Hotkey" type="dword" data="00000000"/>
+ <value name="GuiArgs" type="string" data=""/>
+ <value name="Active" type="long" data="0"/>
+ <value name="Count" type="long" data="1"/>
+ <value name="Cmd1" type="string" data='"D:\home\apps\cygwin\bin\gvim.exe" -new_console'/>
+ </key>
+ <key name="Task16" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Name" type="string" data="{Far}"/>
+ <value name="Flags" type="dword" data="00000000"/>
+ <value name="Hotkey" type="dword" data="00000000"/>
+ <value name="GuiArgs" type="string" data=""/>
+ <value name="Active" type="long" data="0"/>
+ <value name="Count" type="long" data="1"/>
+ <value name="Cmd1" type="string" data='set "FARHOME=" &amp; "%ConEmuDir%\..\Far Manager\far.exe" /w /p"%ConEmuDir%\Plugins\ConEmu;%FARHOME%\Plugins"'/>
+ </key>
+ </key>
+ <key name="Apps" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Count" type="long" data="0"/>
+ </key>
+ <key name="Colors" modified="2020-11-05 18:21:22" build="201101">
+ <value name="Count" type="long" data="0"/>
+ </key>
+ </key>
+ </key>
+</key>
+
diff --git a/cygwin/devi.zsh-theme b/cygwin/devi.zsh-theme
new file mode 100644
index 0000000..c1925ff
--- /dev/null
+++ b/cygwin/devi.zsh-theme
@@ -0,0 +1,264 @@
+# vcs_info modifications from Bart Trojanowski's zsh prompt:
+# http://www.jukie.net/bart/blog/pimping-out-zsh-prompt
+#
+# git untracked files modification from Brian Carper:
+# http://briancarper.net/blog/570/git-info-in-your-zsh-prompt
+
+function virtualenv_info {
+ if [[ -a ./bin/activate ]]; then
+ source ./bin/activate > /dev/null
+ fi
+ [ $VIRTUAL_ENV ] && echo ' ('`basename $VIRTUAL_ENV`')'
+}
+#add-zsh-hook chpwd virtualenv_info
+
+PR_GIT_UPDATE=1
+
+setopt prompt_subst
+
+autoload -U add-zsh-hook
+autoload -Uz vcs_info
+
+#use extended color pallete if available
+if [[ $TERM = *256color* || $TERM = *rxvt* ]]; then
+ turquoise="%F{81}"
+ orange="%F{166}"
+ purple="%F{135}"
+ hotpink="%F{161}"
+ limegreen="%F{118}"
+ lorange="%F{222}"
+ batyellow="%F{226}"
+ muckgreen="%F{29}"
+ batgreen="%F{76}"
+ batred="%F{88}"
+ purblue="%F{69}"
+ swampgreen="%F{64}"
+ purple4="%F{54}"
+ deeppink="%F{109}"
+ limblue="%F{154}"
+ skyblue="%F{30}"
+ teal="%F{31}"
+ new="%F{45}"
+ new2="%F{50}"
+ sneakyc="%F{63}"
+ gnew="%F{65}"
+ gnew2="%F{67}"
+ gover="%F{111}"
+ rust="%F{36}"
+ typescript="%F{37}"
+ viinsert="%F{33}"
+ someblue="%F{27}"
+else
+ turquoise="$fg[cyan]"
+ orange="$fg[yellow]"
+ purple="$fg[magenta]"
+ hotpink="$fg[red]"
+ limegreen="$fg[green]"
+ batyellow="%fg[yellow]"
+ batgreen="%fg[green]"
+ batred="%fg[red]"
+fi
+
+# enable VCS systems you use
+zstyle ':vcs_info:*' enable git svn
+
+# check-for-changes can be really slow.
+# you should disable it, if you work with large repositories
+#zstyle ':vcs_info:*:prompt:*' check-for-changes true
+
+# set formats
+# %b - branchname
+# %u - unstagedstr (see below)
+# %c - stagedstr (see below)
+# %a - action (e.g. rebase-i)
+# %R - repository path
+# %S - path in the repository
+PR_RST="%{${reset_color}%}"
+FMT_BRANCH=" on %{$turquoise%}%s-➜%r-➜%b%u%c%a${PR_RST} "
+FMT_ACTION=" performing a %{$limegreen%}%a${PR_RST}"
+FMT_UNSTAGED="%{$orange%} ●"
+FMT_STAGED="%{$limegreen%} ●"
+
+zstyle ':vcs_info:*:prompt:*' unstagedstr "${FMT_UNSTAGED}"
+zstyle ':vcs_info:*:prompt:*' stagedstr "${FMT_STAGED}"
+zstyle ':vcs_info:*:prompt:*' actionformats "${FMT_BRANCH}${FMT_ACTION}"
+zstyle ':vcs_info:*:prompt:*' formats "${FMT_BRANCH}"
+zstyle ':vcs_info:*:prompt:*' nvcsformats ""
+
+function steeef_preexec {
+ #case "$(history $HISTCMD)" in
+ case "$2" in
+ *git*)
+ PR_GIT_UPDATE=1
+ ;;
+ *svn*)
+ PR_GIT_UPDATE=1
+ ;;
+ esac
+}
+add-zsh-hook preexec steeef_preexec
+
+function steeef_chpwd {
+ #this is here so we dont get errors when we are in a bare git dir
+ result=$(git rev-parse --is-bare-repository 2> /dev/null)
+ if [[ $? == 0 ]]; then
+ if [[ $result == true ]]; then
+ PR_GIT_UPDATE=
+ else
+ PR_GIT_UPDATE=1
+ fi
+ else
+ PR_GIT_UPDATE=1
+ fi
+}
+add-zsh-hook chpwd steeef_chpwd
+
+function steeef_precmd {
+ if [[ -n "$PR_GIT_UPDATE" ]] ; then
+ # check for untracked files or updated submodules, since vcs_info doesn't
+ if [[ ! -z $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then
+ PR_GIT_UPDATE=1
+ FMT_BRANCH="${PM_RST} on %{$turquoise%}%s-➜%r-➜%b%u%c%a%{$hotpink%} ●${PR_RST} "
+ else
+ FMT_BRANCH="${PM_RST} on %{$turquoise%}%s-➜%r-➜%b%u%c%a${PR_RST} "
+ fi
+ zstyle ':vcs_info:*:prompt:*' formats "${FMT_BRANCH}"
+
+ vcs_info 'prompt'
+ PR_GIT_UPDATE=
+ fi
+}
+add-zsh-hook precmd steeef_precmd
+
+# function guess_who {
+# upower -e > /dev/null 2>&1
+
+# if [ $? -eq 0 ]; then
+# os="lin"
+# else
+# os="win"
+# fi
+# }
+# add-zsh-hook precmd guess_who
+
+function time_function {
+ date | gawk '{print $2" "$3" "$4}'
+}
+
+function node_version {
+ version=$(nvm current)
+ echo " <$version>"
+}
+
+function sudo_query {
+ sudo -nv > /dev/null 2>&1
+ if [[ $? == 0 ]]; then
+ #echo 
+ echo " "
+ else
+ :
+ fi
+}
+
+function dir_writeable {
+ if [ -w $(pwd) ]; then :;else echo ;fi
+}
+
+function sneaky {
+ if [[ $! -ne 0 ]]; then
+ echo " $!"
+ fi
+}
+
+function gitadditions {
+ git rev-parse --git-dir > /dev/null 2>&1
+ if [[ $? == 0 ]]; then
+ insertions=$(git --no-pager diff --numstat 2> /dev/null | awk '{sum1+=$1}END{print sum1}')
+ if [[ $insertions == "" ]]; then
+ :
+ else
+ echo " "$insertions:
+ fi
+ fi
+}
+
+function gitdeletions {
+ git rev-parse --git-dir > /dev/null 2>&1
+ if [[ $? == 0 ]]; then
+ deletions=$(git --no-pager diff --numstat 2> /dev/null | awk '{sum2+=$2}END{print sum2}')
+ if [[ $deletions == "" ]]; then
+ :
+ else
+ echo $deletions" "
+ fi
+ fi
+}
+
+function goversion {
+ VERSION=$("go" version | gawk '{print $3}')
+ echo " <${VERSION:2:$((${#VERSION}))}>"
+}
+
+function rustversion {
+ VERSION=$(rustc --version | gawk '{print $2}')
+ echo " <$VERSION>"
+}
+
+function typescriptversion {
+ VERSION=$(tvm tsc --version | gawk '{print $2}')
+ echo " <$VERSION>"
+}
+
+PROMPT=$'%{$new2%}$(sudo_query)%{$reset_color%}%{$swampgreen%}%n%{$reset_color%} on %{$purblue%}%M%{$reset_color%} in %{$limegreen%}%/%{$reset_color%} at %{$muckgreen%}$(time_function)%{$reset_color%}$(ruby_prompt_info " with%{$fg[red]%} " v g "%{$reset_color%}")$vcs_info_msg_0_%{$limblue%}%{$gnew%}$(gitadditions)%{$gnew2%}$(gitdeletions)%{$reset_color%}%{$deeppink%}$(virtualenv_info)%{$reset_color%}%{$teal%}$(node_version)%{$reset_color%}%{$gover%}$(goversion)%{$reset_color%}%{$rust%}$(rustversion)%{$reset_color%}%{$sneakyc%}$(sneaky)%{$reset_color%}%{$new%}$(rebuildquery)%{$reset_color%} %{$someblue%}<$ZSH_KUBECTL_PROMPT>%{$reset_color%}%{$batred%}$(dir_writeable)%{$reset_color%}\n%{$limblue%}--➜%{$reset_color%}'
+
+function rebuildquery {
+ make -q > /dev/null 2>&1
+ if [[ $? == 1 ]]; then
+ echo " ::rebuild::"
+ else
+ :
+ fi
+}
+
+
+
+#function vi-replacee {
+# RPS1="$VIM_PROMPT_REPLACE %{$lorange%}%?↵%{$reset_color%} %{$batcolor%}$(batcharge_printer)%%{$reset_color%}"
+# zle vi-replace
+#}
+#zle -N vi-replace-mode-widget vi-replacee
+# bind R only in vicmd keymapping
+#bindkey -M vicmd 'R' vi-replace-mode-widget
+
+#https://raw.githubusercontent.com/alfredodeza/zsh-plugins/master/vi/zle_vi_visual.zsh
+#this gives us vivis and vivli
+source ~/.oh-my-zsh/plugins/zle-vi-visual/zle_vi_visual.zsh
+
+function zle-line-init zle-keymap-select {
+VIM_PROMPT_INSERT="%{$fg_bold[cyan]%}% [% INS]% %{$reset_color%}"
+VIM_PROMPT_MAIN="%{$fg_bold[blue]%}% [% INSERT]% %{$reset_color%}"
+VIM_PROMPT_REPLACE="%{$fg_bold[black]%}% %{$bg_bold[red]%}% [% REPLACE]% %{$reset_color%}"
+VIM_PROMPT_VISUAL_LINE="%{$fg_bold[red]%}% [% VISUAL-LINE]% %{$reset_color%}"
+VIM_PROMPT_VISUAL_CHAR="%{$fg_bold[red]%}% [% VISUAL]% %{$reset_color%}"
+VIM_PROMPT_CMD="%{$fg_bold[green]%}% [% NORMAL]% %{$reset_color%}"
+if [[ $KEYMAP == vivis ]]; then
+ RPS1="$VIM_PROMPT_VISUAL_CHAR %{$lorange%}%?↵%{$reset_color%}"
+elif [[ $KEYMAP == vivli ]]; then
+ RPS1="$VIM_PROMPT_VISUAL_LINE %{$lorange%}%?↵%{$reset_color%}"
+elif [[ $KEYMAP == vicmd ]];then
+ RPS1="$VIM_PROMPT_CMD %{$lorange%}%?↵%{$reset_color%}"
+elif [[ $KEYMAP == viins ]]; then
+ RPS1="$VIM_PROMPT_INSERT %{$lorange%}%?↵%{$reset_color%}"
+elif [[ $KEYMAP == main ]]; then
+ RPS1="$VIM_PROMPT_MAIN %{$lorange%}%?↵%{$reset_color%}"
+ VI_MODE_R_ENTERED="no"
+fi
+zle reset-prompt
+}
+
+zle -N zle-line-init
+zle -N zle-keymap-select
+#bindkey "^[[3~" delete-char
+#bindkey "^[3;5~" delete-char
+export KEYTIMEOUT=1
+
diff --git a/cygwin/sumatrapdf/SumatraPDF-settings.txt b/cygwin/sumatrapdf/SumatraPDF-settings.txt
new file mode 100644
index 0000000..f1aa03b
--- /dev/null
+++ b/cygwin/sumatrapdf/SumatraPDF-settings.txt
@@ -0,0 +1,67 @@
+# For documentation, see http://www.sumatrapdfreader.org/settings3.1.html
+
+MainWindowBackground = #80fff200
+EscToExit = false
+ReuseInstance = false
+UseSysColors = false
+RestoreSession = true
+
+FixedPageUI [
+ TextColor = #006666
+ BackgroundColor = #101010
+ SelectionColor = #f5fc0c
+ WindowMargin = 2 4 2 4
+ PageSpacing = 4 4
+ GradientColors = #005f87 #005f5f #101010
+]
+EbookUI [
+ FontName = Georgia
+ FontSize = 12.5
+ TextColor = #006666
+ BackgroundColor = #101010
+ UseFixedPageUI = false
+]
+ComicBookUI [
+ WindowMargin = 0 0 0 0
+ PageSpacing = 4 4
+ CbxMangaMode = false
+]
+ChmUI [
+ UseFixedPageUI = false
+]
+ExternalViewers [
+]
+ShowMenubar = true
+ReloadModifiedDocuments = true
+FullPathInTitle = false
+ZoomLevels = 8.33 12.5 18 25 33.33 50 66.67 75 100 125 150 200 300 400 600 800 1000 1200 1600 2000 2400 3200 4800 6400
+ZoomIncrement = 0
+
+PrinterDefaults [
+ PrintScale = shrink
+]
+ForwardSearch [
+ HighlightOffset = 0
+ HighlightWidth = 15
+ HighlightColor = #6581ff
+ HighlightPermanent = true
+]
+CustomScreenDPI = 0
+
+RememberStatePerDocument = true
+UiLanguage = en
+ShowToolbar = false
+ShowFavorites = false
+AssociateSilently = false
+CheckForUpdates = true
+RememberOpenedFiles = true
+EnableTeXEnhancements = true
+DefaultDisplayMode = automatic
+DefaultZoom = fit page
+WindowState = 2
+WindowPos = -1135 195 974 824
+ShowToc = true
+SidebarDx = 285
+TocDy = 0
+ShowStartPage = true
+UseTabs = true
diff --git a/cygwin/xserver.bat b/cygwin/xserver.bat
new file mode 100755
index 0000000..130c40a
--- /dev/null
+++ b/cygwin/xserver.bat
@@ -0,0 +1,2 @@
+"C:\Program Files\VcXsrv\vcxsrv.exe" -ac -multiwindow -clipboard -wgl
+pause
diff --git a/default.sh b/default.sh
new file mode 100644
index 0000000..344fafb
--- /dev/null
+++ b/default.sh
@@ -0,0 +1,63 @@
+# Default Theme
+
+if patched_font_in_use; then
+ TMUX_POWERLINE_SEPARATOR_LEFT_BOLD=""
+ #TMUX_POWERLINE_SEPARATOR_LEFT_BOLD="▶"
+ TMUX_POWERLINE_SEPARATOR_LEFT_THIN=""
+ TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD=""
+ #TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD="▶"
+ TMUX_POWERLINE_SEPARATOR_RIGHT_THIN=""
+else
+ TMUX_POWERLINE_SEPARATOR_LEFT_BOLD="◀"
+ TMUX_POWERLINE_SEPARATOR_LEFT_THIN=""
+ TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD="▶"
+ TMUX_POWERLINE_SEPARATOR_RIGHT_THIN=""
+fi
+
+TMUX_POWERLINE_DEFAULT_BACKGROUND_COLOR=${TMUX_POWERLINE_DEFAULT_BACKGROUND_COLOR:-'16'}
+TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR=${TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR:-'255'}
+
+TMUX_POWERLINE_DEFAULT_LEFTSIDE_SEPARATOR=${TMUX_POWERLINE_DEFAULT_LEFTSIDE_SEPARATOR:-$TMUX_POWERLINE_SEPARATOR_RIGHT_BOLD}
+TMUX_POWERLINE_DEFAULT_RIGHTSIDE_SEPARATOR=${TMUX_POWERLINE_DEFAULT_RIGHTSIDE_SEPARATOR:-$TMUX_POWERLINE_SEPARATOR_LEFT_BOLD}
+
+
+# Format: segment_name background_color foreground_color [non_default_separator]
+TMUX_POWERLINE_SEG_WEATHER_LOCATION="2251945"
+if [ -z $TMUX_POWERLINE_LEFT_STATUS_SEGMENTS ]; then
+ TMUX_POWERLINE_LEFT_STATUS_SEGMENTS=(
+ "tmux_session_info 148 16" \
+ #"hostname 33 255" \
+ "pwd 69 255" \
+ #"ifstat 30 255" \
+ #"ifstat_sys 30 255" \
+ #"lan_ip 24 255 ${TMUX_POWERLINE_SEPARATOR_RIGHT_THIN}" \
+ #"wan_ip 24 255" \
+ "vcs_branch 29 255" \
+ "vcs_compare 60 255" \
+ "vcs_staged 64 255" \
+ "vcs_modified 9 255" \
+ "vcs_others 245 255" \
+ )
+fi
+
+if [ -z $TMUX_POWERLINE_RIGHT_STATUS_SEGMENTS ]; then
+ TMUX_POWERLINE_RIGHT_STATUS_SEGMENTS=(
+ #"earthquake 3 0" \
+ #"macos_notification_count 29 255" \
+ #"mailcount 9 255" \
+ #"now_playing 234 37" \
+ #"cpu 240 136" \
+ #"load 63 255" \
+ #"tmux_mem_cpu_load 234 136" \
+ #"battery 24 255" \
+ "jdat 29 255" \
+ #"weather 37 255" \
+ #"rainbarf 0 ${TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR}" \
+ #"xkb_layout 125 117" \
+ "date_day 31 255"\
+ "date 31 255 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \
+ #"time 31 235 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \
+ "time 31 255 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \
+ "utc_time 75 255 ${TMUX_POWERLINE_SEPARATOR_LEFT_BOLD}" \
+ )
+fi
diff --git a/devi.zsh-theme b/devi.zsh-theme
new file mode 100644
index 0000000..1e68d7e
--- /dev/null
+++ b/devi.zsh-theme
@@ -0,0 +1,299 @@
+# vcs_info modifications from Bart Trojanowski's zsh prompt:
+# http://www.jukie.net/bart/blog/pimping-out-zsh-prompt
+#
+# git untracked files modification from Brian Carper:
+# http://briancarper.net/blog/570/git-info-in-your-zsh-prompt
+
+function virtualenv_info {
+ if [[ -a ./bin/activate ]]; then
+ source ./bin/activate > /dev/null
+ fi
+ [ $VIRTUAL_ENV ] && echo ' ('`basename $VIRTUAL_ENV`') '
+}
+#add-zsh-hook chpwd virtualenv_info
+
+PR_GIT_UPDATE=1
+
+setopt prompt_subst
+
+autoload -U add-zsh-hook
+autoload -Uz vcs_info
+
+#use extended color pallete if available
+if [[ $TERM = *256color* || $TERM = *rxvt* ]]; then
+ turquoise="%F{81}"
+ orange="%F{166}"
+ purple="%F{135}"
+ hotpink="%F{161}"
+ limegreen="%F{118}"
+ lorange="%F{222}"
+ batyellow="%F{226}"
+ muckgreen="%F{29}"
+ batgreen="%F{76}"
+ batred="%F{88}"
+ purblue="%F{69}"
+ swampgreen="%F{64}"
+ purple4="%F{54}"
+ deeppink="%F{109}"
+ limblue="%F{154}"
+ skyblue="%F{30}"
+ teal="%F{31}"
+ new="%F{45}"
+ new2="%F{50}"
+ sneakyc="%F{63}"
+ gnew="%F{65}"
+ gnew2="%F{67}"
+ gover="%F{111}"
+ rust="%F{36}"
+ typescript="%F{37}"
+ viinsert="%F{33}"
+else
+ turquoise="$fg[cyan]"
+ orange="$fg[yellow]"
+ purple="$fg[magenta]"
+ hotpink="$fg[red]"
+ limegreen="$fg[green]"
+ batyellow="%fg[yellow]"
+ batgreen="%fg[green]"
+ batred="%fg[red]"
+fi
+
+# enable VCS systems you use
+zstyle ':vcs_info:*' enable git svn
+
+# check-for-changes can be really slow.
+# you should disable it, if you work with large repositories
+#zstyle ':vcs_info:*:prompt:*' check-for-changes true
+
+# set formats
+# %b - branchname
+# %u - unstagedstr (see below)
+# %c - stagedstr (see below)
+# %a - action (e.g. rebase-i)
+# %R - repository path
+# %S - path in the repository
+PR_RST="%{${reset_color}%}"
+FMT_BRANCH=" on %{$turquoise%}%s-➜%r-➜%b%u%c%a${PR_RST} "
+FMT_ACTION=" performing a %{$limegreen%}%a${PR_RST}"
+FMT_UNSTAGED="%{$orange%} ●"
+FMT_STAGED="%{$limegreen%} ●"
+
+zstyle ':vcs_info:*:prompt:*' unstagedstr "${FMT_UNSTAGED}"
+zstyle ':vcs_info:*:prompt:*' stagedstr "${FMT_STAGED}"
+zstyle ':vcs_info:*:prompt:*' actionformats "${FMT_BRANCH}${FMT_ACTION}"
+zstyle ':vcs_info:*:prompt:*' formats "${FMT_BRANCH}"
+zstyle ':vcs_info:*:prompt:*' nvcsformats ""
+
+
+function steeef_preexec {
+ #case "$(history $HISTCMD)" in
+ case "$2" in
+ *git*)
+ PR_GIT_UPDATE=1
+ ;;
+ *svn*)
+ PR_GIT_UPDATE=1
+ ;;
+ esac
+}
+add-zsh-hook preexec steeef_preexec
+
+function steeef_chpwd {
+ #this is here so we dont get errors when we are in a bare git dir
+ result=$(git rev-parse --is-bare-repository 2> /dev/null)
+ if [[ $? == 0 ]]; then
+ if [[ $result == true ]]; then
+ PR_GIT_UPDATE=
+ else
+ PR_GIT_UPDATE=1
+ fi
+ else
+ PR_GIT_UPDATE=1
+ fi
+}
+add-zsh-hook chpwd steeef_chpwd
+
+function steeef_precmd {
+ if [[ -n "$PR_GIT_UPDATE" ]] ; then
+ # check for untracked files or updated submodules, since vcs_info doesn't
+ if [[ ! -z $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then
+ PR_GIT_UPDATE=1
+ FMT_BRANCH="${PM_RST} on %{$turquoise%}%s-➜%r-➜%b%u%c%a%{$hotpink%} ●${PR_RST} "
+ else
+ FMT_BRANCH="${PM_RST} on %{$turquoise%}%s-➜%r-➜%b%u%c%a${PR_RST} "
+ fi
+ zstyle ':vcs_info:*:prompt:*' formats "${FMT_BRANCH}"
+
+ vcs_info 'prompt'
+ PR_GIT_UPDATE=
+ fi
+}
+add-zsh-hook precmd steeef_precmd
+
+function guess_who {
+ upower -e > /dev/null 2>&1
+
+ if [ $? -eq 0 ]; then
+ os="lin"
+ else
+ os="win"
+ fi
+}
+add-zsh-hook precmd guess_who
+
+function time_function {
+ $guess_who
+ if [[ "$os" = "win" ]]; then
+ date | gawk 'BEGIN{RS=","}END{print $2" "$3}'
+ else
+ date | gawk '{print $4" "$5}'
+ fi
+}
+
+function node_version {
+ nvm current
+}
+
+function sudo_query {
+ sudo -nv > /dev/null 2>&1
+ if [[ $? == 0 ]]; then
+ #echo 
+ echo " "
+ else
+ :
+ fi
+}
+
+function dir_writeable {
+ if [ -w $(pwd) ]; then :;else echo ;fi
+}
+
+function sneaky {
+ if [[ $! -ne 0 ]]; then
+ echo $!
+ fi
+}
+
+function gitadditions {
+ git rev-parse --git-dir > /dev/null 2>&1
+ if [[ $? == 0 ]]; then
+ insertions=$(git --no-pager diff --numstat 2> /dev/null | awk '{sum1+=$1}END{print sum1}')
+ if [[ $insertions == "" ]]; then
+ :
+ else
+ echo " "$insertions:
+ fi
+ fi
+}
+
+function gitdeletions {
+ git rev-parse --git-dir > /dev/null 2>&1
+ if [[ $? == 0 ]]; then
+ deletions=$(git --no-pager diff --numstat 2> /dev/null | awk '{sum2+=$2}END{print sum2}')
+ if [[ $deletions == "" ]]; then
+ :
+ else
+ echo $deletions" "
+ fi
+ fi
+}
+
+function goversion {
+ VERSION=$("go" version | gawk '{print $3}')
+ echo ${VERSION:2:$((${#VERSION}))}
+}
+
+function rustversion {
+ VERSION=$(rustc --version | gawk '{print $2}')
+ echo $VERSION
+}
+
+function typescriptversion {
+ VERSION=$(tvm tsc --version | gawk '{print $2}')
+ echo $VERSION
+}
+
+PROMPT=$'%{$new2%}$(sudo_query)%{$reset_color%}%{$swampgreen%}%n%{$reset_color%} on %{$purblue%}%M%{$reset_color%} in %{$limegreen%}%/%{$reset_color%} at %{$muckgreen%}$(time_function)%{$reset_color%}$(ruby_prompt_info " with%{$fg[red]%} " v g "%{$reset_color%}")$vcs_info_msg_0_%{$limblue%}%{$gnew%}$(gitadditions)%{$gnew2%}$(gitdeletions)%{$reset_color%}%{$deeppink%}$(virtualenv_info)%{$reset_color%} %{$teal%}<$(node_version)>%{$reset_color%} %{$gover%}<$(goversion)>%{$reset_color%} %{$rust%}<$(rustversion)>%{$reset_color%} %{$sneakyc%}$(sneaky)%{$reset_color%} %{$new%}$(rebuildquery)%{$reset_color%} %{$someblue%}<$ZSH_KUBECTL_PROMPT>%{$reset_color%}%{$batred%}$(dir_writeable)%{$reset_color%} \n%{$limblue%}--➜%{$reset_color%}'
+
+function battery_charge {
+ upower -e > /dev/null 2>&1
+
+ if [ $? -eq 0 ]; then
+ batpath=$(upower -e | grep BAT0)
+ batcharge=$(upower -i $batpath | grep percentage | gawk '{print $2}')
+ else
+ batcharge=$(wmic path win32_battery get estimatedchargeremaining | gawk 'BEGIN{RS=" \n"}{print$3}')
+ fi
+
+ batfull=100
+ batgood=66
+ batbad=33
+
+ batcolor=$batgreen
+
+ if [[ ($batcharge > $batgood) || ($batcharge == $batgood) || ("$batcharge"=="$batfull") ]]; then
+ batcolor=$batgreen
+ elif [[ ($batcharge < $batgood) && ($batcharge > $batbad) || ($batcharge == $batbad) ]]; then
+ batcolor=$batyellow
+ elif [[ ($batcharge < $batbad) ]]; then
+ batcolor=$batred
+ else
+ batcolor=$purple
+ fi
+}
+add-zsh-hook precmd battery_charge
+
+function batcharge_printer {
+ $battery_charge
+ echo $(if [ $(upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep state | gawk 'BEGIN{FS ~ ":"}{print $2}') = "charging" ]; then echo ++;else :;fi)$batcharge
+}
+
+function rebuildquery {
+ make -q > /dev/null 2>&1
+ if [[ $? == 1 ]]; then
+ echo ::rebuild::
+ else
+ :
+ fi
+}
+
+#function vi-replacee {
+# RPS1="$VIM_PROMPT_REPLACE %{$lorange%}%?↵%{$reset_color%} %{$batcolor%}$(batcharge_printer)%%{$reset_color%}"
+# zle vi-replace
+#}
+#zle -N vi-replace-mode-widget vi-replacee
+# bind R only in vicmd keymapping
+#bindkey -M vicmd 'R' vi-replace-mode-widget
+
+#https://raw.githubusercontent.com/alfredodeza/zsh-plugins/master/vi/zle_vi_visual.zsh
+#this gives us vivis and vivli
+source ~/.oh-my-zsh/plugins/zle-vi-visual/zle_vi_visual.zsh
+
+function zle-line-init zle-keymap-select {
+VIM_PROMPT_INSERT="%{$fg_bold[cyan]%}% [% INS]% %{$reset_color%}"
+VIM_PROMPT_MAIN="%{$fg_bold[blue]%}% [% INSERT]% %{$reset_color%}"
+VIM_PROMPT_REPLACE="%{$fg_bold[black]%}% %{$bg_bold[red]%}% [% REPLACE]% %{$reset_color%}"
+VIM_PROMPT_VISUAL_LINE="%{$fg_bold[red]%}% [% VISUAL-LINE]% %{$reset_color%}"
+VIM_PROMPT_VISUAL_CHAR="%{$fg_bold[red]%}% [% VISUAL]% %{$reset_color%}"
+VIM_PROMPT_CMD="%{$fg_bold[green]%}% [% NORMAL]% %{$reset_color%}"
+if [[ $KEYMAP == vivis ]]; then
+ RPS1="$VIM_PROMPT_VISUAL_CHAR %{$lorange%}%?↵%{$reset_color%} %{$batcolor%}$(batcharge_printer)%%{$reset_color%}"
+elif [[ $KEYMAP == vivli ]]; then
+ RPS1="$VIM_PROMPT_VISUAL_LINE %{$lorange%}%?↵%{$reset_color%} %{$batcolor%}$(batcharge_printer)%%{$reset_color%}"
+elif [[ $KEYMAP == vicmd ]];then
+ RPS1="$VIM_PROMPT_CMD %{$lorange%}%?↵%{$reset_color%} %{$batcolor%}$(batcharge_printer)%%{$reset_color%}"
+elif [[ $KEYMAP == viins ]]; then
+ RPS1="$VIM_PROMPT_INSERT %{$lorange%}%?↵%{$reset_color%} %{$batcolor%}$(batcharge_printer)%%{$reset_color%}"
+elif [[ $KEYMAP == main ]]; then
+ RPS1="$VIM_PROMPT_MAIN %{$lorange%}%?↵%{$reset_color%} %{$batcolor%}$(batcharge_printer)%%{$reset_color%}"
+ VI_MODE_R_ENTERED="no"
+fi
+zle reset-prompt
+}
+
+zle -N zle-line-init
+zle -N zle-keymap-select
+#bindkey "^[[3~" delete-char
+#bindkey "^[3;5~" delete-char
+export KEYTIMEOUT=1
+
diff --git a/df/colors.txt b/df/colors.txt
new file mode 100644
index 0000000..a046612
--- /dev/null
+++ b/df/colors.txt
@@ -0,0 +1,50 @@
+These are the display colors in RGB. The game is actually displaying extended ASCII characters in OpenGL, so you can modify the colors.
+
+[BLACK_R:0]
+[BLACK_G:0]
+[BLACK_B:0]
+[BLUE_R:51]
+[BLUE_G:153]
+[BLUE_B:153]
+[GREEN_R:0]
+[GREEN_G:102]
+[GREEN_B:51]
+[CYAN_R:51]
+[CYAN_G:204]
+[CYAN_B:204]
+[RED_R:102]
+[RED_G:0]
+[RED_B:0]
+[MAGENTA_R:153]
+[MAGENTA_G:152]
+[MAGENTA_B:204]
+[BROWN_R:153]
+[BROWN_G:51]
+[BROWN_B:0]
+[LGRAY_R:153]
+[LGRAY_G:153]
+[LGRAY_B:153]
+[DGRAY_R:102]
+[DGRAY_G:102]
+[DGRAY_B:102]
+[LBLUE_R:0]
+[LBLUE_G:153]
+[LBLUE_B:204]
+[LGREEN_R:51]
+[LGREEN_G:153]
+[LGREEN_B:0]
+[LCYAN_R:0]
+[LCYAN_G:102]
+[LCYAN_B:204]
+[LRED_R:153]
+[LRED_G:0]
+[LRED_B:51]
+[LMAGENTA_R:102]
+[LMAGENTA_G:51]
+[LMAGENTA_B:153]
+[YELLOW_R:204]
+[YELLOW_G:204]
+[YELLOW_B:51]
+[WHITE_R:204]
+[WHITE_G:255]
+[WHITE_B:255]
diff --git a/df/df-init b/df/df-init
new file mode 100644
index 0000000..df59230
--- /dev/null
+++ b/df/df-init
@@ -0,0 +1,6 @@
+deteriorateclothes start
+devel/annc-monitor enable
+fix/fat-dwarves
+tweak fast-heat enable
+tweak nestbox-color
+tweak stable-cursor
diff --git a/df/init.txt b/df/init.txt
new file mode 100644
index 0000000..21cd652
--- /dev/null
+++ b/df/init.txt
@@ -0,0 +1,150 @@
+WARNING: Do NOT copy over the init.txt from an earlier version of DF.
+Always read the file carefully, including the comments.
+
+In general, you can copy savegames and tilesets from older DF
+versions, but you should not copy anything else. You should not, under any
+circumstances, unpack a new DF on top of an older one.
+
+
+Change this to turn sound off.
+
+[SOUND:NO]
+
+The sound volume runs from 0 (off) to 255 (full). You can set the volume from the ESC options menu as well.
+
+[VOLUME:255]
+
+Change this to skip the wonderful intro movies.
+
+[INTRO:NO]
+
+This lets you set the starting windowed/fullscreen setting. Can be YES, NO or PROMPT.
+
+[WINDOWED:YES]
+
+This is the size and font for windowed mode. Changing to the 800x600 font might make you happier.
+If set below 256x256 it specifies the grid size instead, with a minimum of 80x25.
+
+[WINDOWEDX:80]
+[WINDOWEDY:25]
+[FONT:curses_square_24x24.png]
+
+You may disable window resizing if you wish.
+[RESIZABLE:YES]
+
+Full screen info. The 0s below mean that the game will choose a resolution for you, but you can set it yourself as well.
+
+[FULLSCREENX:0]
+[FULLSCREENY:0]
+[FULLFONT:curses_square_24x24.png]
+
+If this is set to NO, tiles will be stretched to fit the screen if there is a resolution mismatch.
+If this is set to YES, the tiles will not be stretched, but rather the game view will be centralized, surrounded by black space. Tiles that are too large will always be compressed rather than running off the screen.
+
+[BLACK_SPACE:YES]
+
+Graphics info, most of it as above. Set GRAPHICS to YES to turn it all on. This will use the "raw/graphics" folder for tile information. Currently this is limited to whatever creature graphics you have downloaded. The game comes with a few pictures to demonstrate. As of April 2018, the Dwarf Fortress Wiki has custom tilesets available at http://dwarffortresswiki.org/index.php/Tileset_repository and creature graphics at http://dwarffortresswiki.org/index.php/Graphics_set_repository.
+
+[GRAPHICS:NO]
+[GRAPHICS_WINDOWEDX:0]
+[GRAPHICS_WINDOWEDY:0]
+[GRAPHICS_FONT:curses_square_24x24.png]
+[GRAPHICS_FULLSCREENX:0]
+[GRAPHICS_FULLSCREENY:0]
+[GRAPHICS_FULLFONT:curses_square_24x24.png]
+[GRAPHICS_BLACK_SPACE:YES]
+
+These settings can have a significant impact on frame rate, especially for people that have slow frame rates on the title screen. Available modes are 2D, 2DSW, 2DASYNC, STANDARD, PARTIAL:<number>, ACCUM_BUFFER, FRAME_BUFFER and VBO. The number after PARTIAL refers to how many frames it will redo a printed tile before skipping it, so you might try increasing it a bit if you have flickering when PARTIAL is set. Please note that any of these combinations might cause frame rates to drop significantly or cause unpleasant side effects like flickering.
+
+By and large, 2D should be the most reliable, while STANDARD has a good combination of speed and reliability. However, all 2D modes are normally far slower than even STANDARD, which may be the slowest OpenGL mode.
+
+On a multi-core machine none of this is very likely to matter; stick to 2D.
+
+2DASYNC may be slightly more responsive than 2D on a multi-core machine, but this has recently become doubtful due to improvements to the other modes.
+
+Linux/OS X users may also use PRINT_MODE:TEXT for primitive ncurses output.
+
+[PRINT_MODE:2D]
+ Mode examples:
+ PRINT_MODE:2D
+ PRINT_MODE:TEXT
+ PRINT_MODE:FRAME_BUFFER
+ PRINT_MODE:PARTIAL:0
+[SINGLE_BUFFER:NO]
+
+Switches truetype on whenever the vertical tile size is this many pixels or larger. You may also use YES/NO to force it on/off. Turning it off may provide a minor speed boost (using font small enough that it doesn't activate won't).
+
+[TRUETYPE:24]
+
+Change this to YES to keep the DF window on top of your other windows.
+
+[TOPMOST:NO]
+
+Change this to YES if you want to see an FPS counter at the top left.
+
+[FPS:YES]
+
+Use this to set the maximum frame rate during play. The movies are always capped at 100. A frame in this case is not graphical but related to the movement speed of a creature. A healthy, unencumbered dwarven peasant takes one step every 10 frames.
+
+You may set FPS_CAP to 0 to make it uncapped.
+
+[FPS_CAP:100]
+
+Use this to set the maximum graphical frame refresh rate during play.
+
+[G_FPS_CAP:20]
+
+On cards that support the OpenGL ARB_sync extension, turning this on can improve framerates in GPU overload conditions. It defaults to NO, as many cards that claim to support this will crash if asked to do so.
+
+[ARB_SYNC:NO]
+
+This sets the applications vertical synchronization behavior. Changing this to YES can impact your FPS if your G_FPS is high. ARB_SYNC is a better option, if your system supports it.
+
+[VSYNC:NO]
+
+Change this to NEAREST if you want the texture values to use the nearest pixel without averaging.
+Change this to LINEAR if you want the texture values to be averaged over the adjacent pixels.
+
+[TEXTURE_PARAM:LINEAR]
+
+Change this to make the dwarfort.exe process have a different priority. From highest to lowest, the options are REALTIME, HIGH, ABOVE_NORMAL, NORMAL, BELOW_NORMAL and IDLE.
+
+[PRIORITY:NORMAL]
+
+Use this to set how fast the game zooms. The default corresponds to
+increasing grid size by 10 units each time you zoom.
+
+[ZOOM_SPEED:10]
+
+Change this to NO if you don't want to have the mouse involved at all.
+
+[MOUSE:YES]
+
+Change this to YES if you'd like to use a BMP for the mouse cursor. The image currently lags when the game is lagging however.
+
+[MOUSE_PICTURE:NO]
+
+This controls the number of milliseconds that must pass before a held key sends an initial repeat press to the game. You might need to adjust this.
+
+[KEY_HOLD_MS:250]
+
+This controls the number of milliseconds that must pass before a held key sends a repeat press to the game after the repeat process has begun.
+
+[KEY_REPEAT_MS:150]
+
+If you set KEY_REPEAT_ACCEL_LIMIT above one, then after KEY_REPEAT_ACCEL_START repetitions the repetition delay will smoothly decrease until repetition is this number of times faster than at the start.
+
+[KEY_REPEAT_ACCEL_LIMIT:8]
+[KEY_REPEAT_ACCEL_START:10]
+
+This controls the number of milliseconds between macro instructions.
+
+[MACRO_MS:15]
+
+This controls the number of milliseconds that must pass before input works again after the view recenters on an event in dwarf mode.
+
+[RECENTER_INTERFACE_SHUTDOWN_MS:0]
+
+Change this to NO if you want to leave save uncompressed (you might want to do this if you are experience save corruption).
+
+[COMPRESSED_SAVES:YES]
diff --git a/df/world_gen.txt b/df/world_gen.txt
new file mode 100644
index 0000000..d83e061
--- /dev/null
+++ b/df/world_gen.txt
@@ -0,0 +1,88 @@
+[WORLD_GEN]
+ [TITLE:LOCO]
+ [DIM:65:65]
+ [EMBARK_POINTS:1504]
+ [END_YEAR:125]
+ [BEAST_END_YEAR:125:10]
+ [REVEAL_ALL_HISTORY:1]
+ [CULL_HISTORICAL_FIGURES:1]
+ [ELEVATION:1:400:202:202]
+ [RAINFALL:0:100:101:101]
+ [TEMPERATURE:25:75:101:101]
+ [DRAINAGE:0:100:101:101]
+ [VOLCANISM:10:100:101:101]
+ [SAVAGERY:30:100:101:101]
+ [ELEVATION_FREQUENCY:1:1:1:1:1:1]
+ [RAIN_FREQUENCY:1:1:1:1:1:1]
+ [DRAINAGE_FREQUENCY:1:1:1:1:1:1]
+ [TEMPERATURE_FREQUENCY:1:1:1:1:1:1]
+ [SAVAGERY_FREQUENCY:1:1:1:1:1:1]
+ [VOLCANISM_FREQUENCY:1:1:1:1:1:1]
+ [POLE:NORTH_AND_OR_SOUTH]
+ [MINERAL_SCARCITY:50]
+ [MEGABEAST_CAP:200]
+ [SEMIMEGABEAST_CAP:100]
+ [TITAN_NUMBER:200]
+ [TITAN_ATTACK_TRIGGER:80:0:50000]
+ [DEMON_NUMBER:56]
+ [NIGHT_TROLL_NUMBER:26]
+ [BOGEYMAN_NUMBER:26]
+ [VAMPIRE_NUMBER:26]
+ [WEREBEAST_NUMBER:56]
+ [SECRET_NUMBER:56]
+ [REGIONAL_INTERACTION_NUMBER:56]
+ [DISTURBANCE_INTERACTION_NUMBER:56]
+ [EVIL_CLOUD_NUMBER:56]
+ [EVIL_RAIN_NUMBER:56]
+ [GENERATE_DIVINE_MATERIALS:1]
+ [GOOD_SQ_COUNTS:6:63:127]
+ [EVIL_SQ_COUNTS:41:77:127]
+ [PEAK_NUMBER_MIN:1]
+ [PARTIAL_OCEAN_EDGE_MIN:0]
+ [COMPLETE_OCEAN_EDGE_MIN:0]
+ [VOLCANO_MIN:10]
+ [REGION_COUNTS:SWAMP:528:0:0]
+ [REGION_COUNTS:DESERT:0:0:0]
+ [REGION_COUNTS:FOREST:528:0:0]
+ [REGION_COUNTS:MOUNTAINS:0:0:0]
+ [REGION_COUNTS:OCEAN:66:0:0]
+ [REGION_COUNTS:GLACIER:0:0:0]
+ [REGION_COUNTS:TUNDRA:264:0:0]
+ [REGION_COUNTS:GRASSLAND:528:0:0]
+ [REGION_COUNTS:HILLS:0:0:0]
+ [EROSION_CYCLE_COUNT:250]
+ [RIVER_MINS:25:25]
+ [PERIODICALLY_ERODE_EXTREMES:1]
+ [OROGRAPHIC_PRECIPITATION:1]
+ [SUBREGION_MAX:2750]
+ [CAVERN_LAYER_COUNT:3]
+ [CAVERN_LAYER_OPENNESS_MIN:100]
+ [CAVERN_LAYER_OPENNESS_MAX:100]
+ [CAVERN_LAYER_PASSAGE_DENSITY_MIN:100]
+ [CAVERN_LAYER_PASSAGE_DENSITY_MAX:100]
+ [CAVERN_LAYER_WATER_MIN:0]
+ [CAVERN_LAYER_WATER_MAX:100]
+ [HAVE_BOTTOM_LAYER_1:1]
+ [HAVE_BOTTOM_LAYER_2:1]
+ [LEVELS_ABOVE_GROUND:15]
+ [LEVELS_ABOVE_LAYER_1:20]
+ [LEVELS_ABOVE_LAYER_2:20]
+ [LEVELS_ABOVE_LAYER_3:20]
+ [LEVELS_ABOVE_LAYER_4:20]
+ [LEVELS_ABOVE_LAYER_5:20]
+ [LEVELS_AT_BOTTOM:1]
+ [CAVE_MIN_SIZE:5]
+ [CAVE_MAX_SIZE:25]
+ [MOUNTAIN_CAVE_MIN:60]
+ [NON_MOUNTAIN_CAVE_MIN:120]
+ [ALL_CAVES_VISIBLE:1]
+ [SHOW_EMBARK_TUNNEL:2]
+ [TOTAL_CIV_NUMBER:50]
+ [TOTAL_CIV_POPULATION:30000]
+ [SITE_CAP:264]
+ [PLAYABLE_CIVILIZATION_REQUIRED:1]
+ [ELEVATION_RANGES:0:1056:0]
+ [RAIN_RANGES:264:528:264]
+ [DRAINAGE_RANGES:264:528:264]
+ [SAVAGERY_RANGES:264:528:264]
+ [VOLCANISM_RANGES:264:528:264]
diff --git a/docker/devdocs.bat b/docker/devdocs.bat
new file mode 100755
index 0000000..cd356b2
--- /dev/null
+++ b/docker/devdocs.bat
@@ -0,0 +1,2 @@
+docker run -d -p 9292:9292 -t devdocs/devdocs:alpine
+pause \ No newline at end of file
diff --git a/docker/mongo.sh b/docker/mongo.sh
new file mode 100755
index 0000000..6eeb863
--- /dev/null
+++ b/docker/mongo.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/env sh
+
+docker run -p 27017:27017 -p 27018:27018 -p 27019:27019 -v mongo-data:/data/db mongo:4.4.4-bionic
diff --git a/docker/postgres.sh b/docker/postgres.sh
new file mode 100755
index 0000000..14f9adf
--- /dev/null
+++ b/docker/postgres.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env sh
+
+docker run -d -p 5432:5432 -v postgres-data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=devi -e POSTGRES_USER=devi -e POSTGRES_DB=devi postgres:13.2-alpine
+# docker run --add-host=localhost:127.0.0.1 -p 5432:5432 -v postgres-data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=devi -e POSTGRES_USER=devi -e POSTGRES_DB=devi postgres:13
diff --git a/docker/searx.bat b/docker/searx.bat
new file mode 100755
index 0000000..78ec1a7
--- /dev/null
+++ b/docker/searx.bat
@@ -0,0 +1,2 @@
+D:\home\apps\cygwin\bin\zsh.exe -c "docker run --rm -d -v ${PWD}/searx:/etc/searx -p 11111:8080 -e BASE_URL=http://localhost:11111/ searx/searx"
+pause
diff --git a/docker/yacy.bat b/docker/yacy.bat
new file mode 100755
index 0000000..f4f5cbe
--- /dev/null
+++ b/docker/yacy.bat
@@ -0,0 +1,2 @@
+docker run -d -v yacy_volume:/opt/yacy_search_server/DATA -p 8090:8090 -p 8443:8443 --log-opt max-size=200m --log-opt max-file=2 luccioman/yacy
+pause \ No newline at end of file
diff --git a/etc/fonts/local.conf b/etc/fonts/local.conf
new file mode 100644
index 0000000..eeb3658
--- /dev/null
+++ b/etc/fonts/local.conf
@@ -0,0 +1,39 @@
+<?xml version='1.0'?>
+<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
+<fontconfig>
+<match target="font">
+ <edit name="antialias" mode="assign_replace" binding="strong">
+ <bool>true</bool>
+ </edit>
+ <edit name="autohint" mode="assign_replace" binding="strong">
+ <bool>false</bool>
+ </edit>
+ <edit name="hinting" mode="assign_replace" binding="strong">
+ <bool>true</bool>
+ </edit>
+ <edit name="hintstyle" mode="assign">
+ <const>hintslight</const>
+ </edit>
+ <edit name="lcdfilter" mode="assign">
+ <const>lcddefault</const>
+ </edit>
+ <edit name="width" mode="assign">
+ <const>normal</const>
+ </edit>
+ <edit name="weight" mode="assign">
+ <const>regular</const>
+ </edit>
+ <edit name="embolden" mode="assign">
+ <bool>false</bool>
+ </edit>
+ <edit name="rgba" mode="assign">
+ <const>rgb</const>
+ </edit>
+ <edit name="dpi" mode="assign">
+ <double>75</double>
+ </edit>
+ <edit name="embeddedbitmap" mode="assign">
+ <bool>true</bool>
+ </edit>
+</match>
+</fontconfig>
diff --git a/fedpackages.txt b/fedpackages.txt
new file mode 100644
index 0000000..4c43932
--- /dev/null
+++ b/fedpackages.txt
@@ -0,0 +1,573 @@
+ModemManager
+NetworkManager
+NetworkManager-adsl
+NetworkManager-bluetooth
+NetworkManager-openconnect
+NetworkManager-openvpn-gnome
+NetworkManager-pptp-gnome
+NetworkManager-vpnc-gnome
+NetworkManager-wifi
+NetworkManager-wwan
+PackageKit-command-not-found
+PackageKit-gstreamer-plugin
+PackageKit-gtk3-module
+R
+SDL2_image-devel
+SDL_image
+SDL_ttf
+ShellCheck
+VirtualBox-5.1
+aajohan-comfortaa-fonts
+abattis-cantarell-fonts
+abrt-cli
+abrt-desktop
+abrt-java-connector
+acl
+acpi
+adcli
+adobe-source-han-sans-cn-fonts
+adobe-source-han-sans-tw-fonts
+adwaita-qt4
+alsa-plugins-pulseaudio
+alsa-utils
+anaconda
+android-tools
+apvlv
+at
+at-spi2-atk
+at-spi2-core
+atmel-firmware
+attr
+audit
+authconfig
+automake
+avahi
+b43-fwcutter
+b43-openfwwf
+baobab
+basesystem
+bash
+bash-completion
+bc
+beep
+bicon
+bijiben
+bind-utils
+binutils-devel
+binutils-x86_64-linux-gnu
+bison
+bluez-cups
+boost
+boost-devel
+boost-static
+bridge-utils
+btrfs-progs
+bzip2
+bzip2-libs-debuginfo
+calcurse
+capstone-debuginfo
+capstone-devel
+caribou
+caribou-gtk2-module
+caribou-gtk3-module
+cheese
+chrony
+cifs-utils
+clisp
+cmake
+colord
+colordiff
+control-center
+coreutils
+cpio
+cronie
+crontabs
+cryptsetup
+cups
+cups-filters
+cups-pk-helper
+curl
+cyrus-sasl-plain
+dbus
+dconf
+dejagnu
+dejavu-sans-fonts
+dejavu-sans-mono-fonts
+dejavu-serif-fonts
+deltarpm
+deluge-console
+device-mapper-multipath
+dhcp-client
+dkms
+dmraid
+dnf
+dnf-plugins-core
+dnf-yum
+docker-ce
+dos2unix
+dosfstools
+dracut-config-rescue
+dracut-live
+dracut-network
+dtrx
+e2fsprogs
+eclipse-jdt
+efibootmgr
+elfutils-libelf-devel
+emacs
+emacs-nox
+empathy
+eog
+erlang
+ethtool
+evince
+evince-browser-plugin
+evince-djvu
+evince-nautilus
+evolution
+evolution-ews
+evolution-help
+fcoe-utils
+fedora-productimg-workstation
+fedora-release-workstation
+fedora-user-agent-chrome
+file
+file-roller
+filesystem
+firefox
+firewalld
+fish
+flex
+foomatic
+foomatic-db-ppds
+fpaste
+fprintd-pam
+freerdp1.2
+freetype-freeworld
+fribidi
+fribidi-devel
+fros-gnome
+frotz
+fwupd-labels
+gcc
+gcc-c++
+gdm
+gdouros-symbola-fonts
+gedit
+ghc-libffi-devel
+ghostscript
+git
+glances
+glib-devel
+glib-networking
+glib2-devel
+glibc
+glibc-debuginfo
+glibc-devel
+glx-utils
+gmp-devel
+gnome-backgrounds
+gnome-bluetooth
+gnome-boxes
+gnome-calculator
+gnome-characters
+gnome-classic-session
+gnome-clocks
+gnome-color-manager
+gnome-contacts
+gnome-disk-utility
+gnome-documents
+gnome-font-viewer
+gnome-getting-started-docs
+gnome-initial-setup
+gnome-screenshot
+gnome-session-wayland-session
+gnome-session-xsession
+gnome-settings-daemon
+gnome-shell
+gnome-shell-extension-background-logo
+gnome-software
+gnome-system-monitor
+gnome-terminal
+gnome-themes-standard
+gnome-tweak-tool
+gnome-user-docs
+gnome-user-share
+gnome-weather
+gnu-free-mono-fonts
+gnu-free-sans-fonts
+gnu-free-serif-fonts
+gnupg2
+gnupg2-smime
+gobject-introspection-devel
+golang
+google-android-emoji-fonts
+google-noto-emoji-fonts
+google-noto-sans-lisu-fonts
+google-noto-sans-mandaic-fonts
+google-noto-sans-meetei-mayek-fonts
+google-noto-sans-tagalog-fonts
+google-noto-sans-tai-tham-fonts
+google-noto-sans-tai-viet-fonts
+gource
+gparted
+grubby
+gsl-devel
+gstreamer1-plugins-bad-free
+gstreamer1-plugins-bad-free-gtk
+gstreamer1-plugins-good
+gutenprint
+gutenprint-cups
+gvfs-afc
+gvfs-afp
+gvfs-archive
+gvfs-fuse
+gvfs-goa
+gvfs-gphoto2
+gvfs-mtp
+gvfs-smb
+haskell-platform
+hfsplus-tools
+hostname
+hplip
+htop
+http-parser
+hunspell
+hyperv-daemons
+i3
+ibus-gtk2
+ibus-gtk3
+ibus-hangul
+ibus-kkc
+ibus-libpinyin
+ibus-libzhuyin
+ibus-m17n
+ibus-qt
+ibus-rawcode
+ibus-typing-booster
+initscripts
+iproute
+iptstate
+iputils
+ipw2100-firmware
+ipw2200-firmware
+irssi
+iscsi-initiator-utils
+iwl100-firmware
+iwl1000-firmware
+iwl105-firmware
+iwl135-firmware
+iwl2000-firmware
+iwl2030-firmware
+iwl3160-firmware
+iwl3945-firmware
+iwl4965-firmware
+iwl5000-firmware
+iwl5150-firmware
+iwl6000-firmware
+iwl6000g2a-firmware
+iwl6000g2b-firmware
+iwl6050-firmware
+iwl7260-firmware
+jansson-devel
+jcal
+jomolhari-fonts
+jwhois
+kbd
+kernel
+kernel-core
+kernel-devel
+kernel-modules
+khmeros-base-fonts
+leafpad
+less
+libX11-devel
+libbsd
+libcanberra-gtk2
+libcanberra-gtk3
+libconfig-devel
+libcurl-devel
+libdnet-devel
+libedit-devel
+liberation-mono-fonts
+liberation-sans-fonts
+liberation-serif-fonts
+libertas-usb8388-firmware
+libevent-devel
+libfdt-devel
+libffi-debuginfo
+libffi-devel
+libgcc-debuginfo
+libglvnd
+libglvnd-egl
+libglvnd-gles
+libglvnd-glx
+liblangtag-data
+libmpc-devel
+libpcap-devel
+libpng-devel
+libpng12
+libproxy-mozjs
+libpskc
+libreoffice-calc
+libreoffice-draw
+libreoffice-emailmerge
+libreoffice-graphicfilter
+libreoffice-impress
+libreoffice-math
+libreoffice-writer
+librsvg2
+libsane-hpaio
+libstdc++-debuginfo
+libtool
+libuv
+libvirt-devel
+libxml2-devel
+lklug-fonts
+lm_sensors
+lm_sensors-libs
+logrotate
+lohit-assamese-fonts
+lohit-bengali-fonts
+lohit-devanagari-fonts
+lohit-gujarati-fonts
+lohit-gurmukhi-fonts
+lohit-kannada-fonts
+lohit-odia-fonts
+lohit-tamil-fonts
+lohit-telugu-fonts
+lrzsz
+lsof
+lua-devel
+lua-libs-debuginfo
+luarocks
+lvm2
+mactel-boot
+mailcap
+man-db
+man-pages
+mc
+mcelog
+mdadm
+memtest86+
+mesa-dri-drivers
+microcode_ctl
+mlocate
+mousetweaks
+mpage
+mpfr-devel
+mpg123
+mtr
+mupdf
+mutt
+nasm
+nautilus
+nautilus-sendto
+naver-nanum-gothic-fonts
+ncdu
+ncurses
+ncurses-compat-libs
+ncurses-libs-debuginfo
+neofetch
+neomutt
+net-tools
+nethack
+newsbeuter
+nfs-utils
+nm-connection-editor
+nmap
+nmap-ncat
+npm
+nss-mdns
+nss-pem
+ntfs-3g
+ntfsprogs
+nudoku
+nyquist
+ocaml
+ocaml-cryptokit-devel
+ocaml-findlib
+open-vm-tools-desktop
+opencv-devel
+openssh-clients
+openssh-server
+openssl-devel
+openssl-libs-debuginfo
+orca
+ostree-libs
+paktype-naskh-basic-fonts
+pam_krb5
+pam_pkcs11
+pandoc
+paps
+paratype-pt-sans-fonts
+parted
+passwd
+passwdqc
+patch
+pciutils
+pcmciautils
+php-cli
+pinentry-gnome3
+pinfo
+platform-python-tkinter
+plymouth
+plymouth-system-theme
+policycoreutils
+powerline-fonts
+ppp
+prboom
+procps-ng
+psacct
+pulseaudio
+pulseaudio-module-x11
+pulseaudio-utils
+putty
+pypy3
+python2-virtualenv
+python3-Cython
+python3-bind
+python3-debuginfo
+python3-devel
+python3-ipython
+python3-pygments
+python3-tkinter
+qemu
+qemu-guest-agent
+qodem-x11
+qt
+qt-settings
+qt-x11
+qt5-qtbase
+qt5-qtbase-gui
+qt5-qtdeclarative
+qt5-qtxmlpatterns
+quota
+qutebrowser
+ranger
+rdist
+readline-debuginfo
+readline-devel
+realmd
+redhat-lsb-core
+redhat-rpm-config
+rhash
+rhythmbox
+rng-tools
+rootfiles
+rp-pppoe
+rpm
+rpmfusion-free-release
+rsync
+rtv
+ruby
+ruby-devel
+rygel
+samba
+samba-client
+sane-backends-daemon
+sane-backends-drivers-scanners
+scl-utils
+screen
+screenfetch
+sdcv
+seahorse
+selinux-policy-targeted
+setroubleshoot
+setup
+setuptool
+shadow-utils
+shotwell
+sil-abyssinica-fonts
+sil-mingzat-fonts
+sil-nuosu-fonts
+sil-padauk-fonts
+smc-meera-fonts
+snapd
+sos
+spice-vdagent
+sssd
+sssd-nfs-idmap
+steghide
+stix-fonts
+stunnel
+subversion
+sudo
+sushi
+swig
+symlinks
+sysconftool
+syslinux
+syslinux-extlinux
+system-config-printer-udev
+systemd
+systemd-devel
+tabish-eeyek-fonts
+tar
+tcp_wrappers
+tcpdump
+teamd
+telegram-cli
+telnet
+texlive
+thai-scalable-waree-fonts
+time
+tinyxml2
+tlomt-orbitron-fonts
+tmux
+tmux-powerline
+tor
+totem
+totem-nautilus
+traceroute
+transmission-cli
+tree
+trousers
+uboot-tools
+unoconv
+unzip
+usb_modeswitch
+usbutils
+util-linux
+vconfig
+vim-enhanced
+vim-minimal
+vinagre
+vlgothic-fonts
+vorbis-tools
+w3m
+wget
+which
+wireless-tools
+wordgrinder
+words
+wvdial
+xdg-desktop-portal
+xdg-desktop-portal-gtk
+xdg-user-dirs-gtk
+xfsprogs
+xmlsec1
+xmlsec1-openssl
+xorg-x11-drv-ati
+xorg-x11-drv-evdev
+xorg-x11-drv-fbdev
+xorg-x11-drv-intel
+xorg-x11-drv-libinput
+xorg-x11-drv-nouveau
+xorg-x11-drv-openchrome
+xorg-x11-drv-qxl
+xorg-x11-drv-vesa
+xorg-x11-drv-vmware
+xorg-x11-drv-wacom
+xorg-x11-server-Xorg
+xorg-x11-utils
+xorg-x11-xauth
+xorg-x11-xinit
+xz-libs-debuginfo
+yelp
+z3
+zd1211-firmware
+zip
+zlib-debuginfo
+zlib-devel
+zsh
diff --git a/fzfinit.sh b/fzfinit.sh
new file mode 100755
index 0000000..0ca8870
--- /dev/null
+++ b/fzfinit.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/env sh
+
+mkdir -p ~/.postit && cp ~/scripts/postit ~/.postit/postit
diff --git a/gen_wg_config.sh b/gen_wg_config.sh
new file mode 100755
index 0000000..983c7b7
--- /dev/null
+++ b/gen_wg_config.sh
@@ -0,0 +1,45 @@
+#!/bin/sh
+# run with su -i;e.g. su -i && gen_wg_config.sh
+set -x
+set -e
+
+CONFIG_CONTENT="[Interface]\n
+Address = 10.10.0.<RAND_ADDRESS>/32\n
+Address = fd86:ea04:1111::<RAND_ADDRESS>/128\n
+PrivateKey = <CLIENT_PRIV_KEY>\n
+DNS = 1.1.1.1\n
+\n
+[Peer]\n
+PublicKey = SERVERPUBKEY\n
+Endpoint = <PUB_IP_ADDRESS>:51820\n
+AllowedIPs = 0.0.0.0/0, ::/0"
+
+CONFIG_FILE_DIR=~/config
+mkdir -p $CONFIG_FILE_DIR
+RAND_NAME=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)
+
+RAND_ADDRESS=$(shuf -i 1-255 -n 1)
+
+OWNER=$(echo $USER)
+
+TMPDIR=$(mktemp -d)
+cd $TMPDIR
+wg genkey | sudo tee privatekey"$RAND_NAME" | wg pubkey | sudo tee publickey"$RAND_NAME"
+
+SERVER_PUB_KEY=$(cat /etc/wireguard/publickey)
+CLIENT_PRIV_KEY=$(cat privatekey"$RAND_NAME")
+PUB_IP_ADDRESS=$(curl ipinfo.io/ip)
+
+OUTPUT=$(echo $CONFIG_CONTENT | sed "s%SERVERPUBKEY%$SERVER_PUB_KEY%")
+OUTPUT=$(echo $OUTPUT | sed "s%<CLIENT_PRIV_KEY>%$CLIENT_PRIV_KEY%")
+OUTPUT=$(echo $OUTPUT | sed "s/<PUB_IP_ADDRESS>/$PUB_IP_ADDRESS/")
+OUTPUT=$(echo $OUTPUT | sed "s/<RAND_ADDRESS>/$RAND_ADDRESS/g")
+
+cd $CONFIG_FILE_DIR
+echo $OUTPUT > wg"$RAND_NAME".conf
+chmod 600 wg"$RAND_NAME".conf
+chown $USER:$USER wg"$RAND_NAME".conf
+
+CLIENT_PUB_KEY=$(cat $TMPDIR/publickey"$RAND_NAME")
+wg set wg0 peer $CLIENT_PUB_KEY allowed-ips 10.10.0."$RAND_ADDRESS"/32,fd86:ea04:1111::"$RAND_ADDRESS"/128
+rm -rf $TEMPDIR
diff --git a/header.hpp b/header.hpp
new file mode 100644
index 0000000..2df2a5a
--- /dev/null
+++ b/header.hpp
@@ -0,0 +1,4 @@
+
+#include <iostream>
+#include <string>
+#include <vector>
diff --git a/hived b/hived
new file mode 100755
index 0000000..d6346bc
--- /dev/null
+++ b/hived
@@ -0,0 +1,704 @@
+#!/usr/bin/python3
+
+import argparse
+import hashlib
+import hmac
+import json
+import requests
+import os
+import sys
+# import csv
+import socket
+import time
+import threading
+import atexit
+import signal
+# import selectors
+# from tempfile import TemporaryFile
+from abc import ABCMeta, abstractmethod
+from io import TextIOWrapper, BytesIO
+# import subprocess
+from _thread import *
+import threading
+sys.path.insert(0, "/home/bloodstalker/extra/seer/")
+shut_up = sys.stdout
+seriously = sys.stderr
+sys.stdout = TextIOWrapper(BytesIO(), sys.stdout.encoding)
+sys.stderr = TextIOWrapper(BytesIO(), sys.stdout.encoding)
+# from seer import launch_ais
+sys.stdout = shut_up
+sys.stderr = seriously
+
+api_url_base = "https://api.coinmarketcap.com/v1/ticker/"
+assets_file = "/home/bloodstalker/scripts/assets.json"
+api_url_base_shapeshift = "https://shapeshift.io/getcoins"
+test_url = "https://api.coinmarketcap.com/v1/ticker/?start=0&limit=300"
+cryptocompare_price_url = "https://min-api.cryptocompare.com/data/price?"
+
+# argument parser calls sys.exit() on exception, we don't want that.
+
+
+class ArgumentParseError(Exception):
+ pass
+
+
+class ArgumentParserWithoutExit(argparse.ArgumentParser):
+ def error(self, message):
+ raise ArgumentParseError(message)
+
+
+class Argparser(object):
+ def __init__(self):
+ self.parser = ArgumentParserWithoutExit()
+ self.parser.add_argument(
+ "--name", type=str, help="price of the chose crypto")
+ self.parser.add_argument(
+ "--worth", type=str, help="single asset worth")
+ self.parser.add_argument("--xx", type=str, nargs=2, help="convert")
+ self.parser.add_argument("--xxv", type=float, help="xx multiplier")
+ self.parser.add_argument(
+ "--gen", type=str, nargs=2, help="general option")
+ self.parser.add_argument("--cap", type=str, help="market cap")
+ self.parser.add_argument("--rank", type=str, help="market cap rank")
+ self.parser.add_argument(
+ "--total", action="store_true", help="total", default=False)
+ self.parser.add_argument(
+ "--ava", type=str, help="is currency available on changelly")
+ self.parser.add_argument(
+ "--avass", type=str, help="is currency available on shapeshift")
+ self.parser.add_argument("--cglistall", action="store_true",
+ help="list all currencies available on changelly", default=False)
+ self.parser.add_argument(
+ "--test", action="store_true", help="test switch", default=False)
+ self.parser.add_argument(
+ "--watchlist", type=str, nargs="+", help="watch list")
+ self.parser.add_argument(
+ "--ss", type=str, nargs="+", help="watchlist on shapeshift")
+ self.parser.add_argument("--dy", type=int, help="lazy")
+ self.parser.add_argument(
+ "--demon", action="store_true", help="daemon mode", default=False)
+ self.parser.add_argument(
+ "--al1", action="store_true", help="alert1", default=False)
+ self.parser.add_argument(
+ "--al2", action="store_true", help="alert2", default=False)
+ self.parser.add_argument(
+ "--al3", action="store_true", help="alert3", default=False)
+ self.parser.add_argument(
+ "--al4", action="store_true", help="alert4", default=False)
+ self.parser.add_argument(
+ "--al5", action="store_true", help="alert5", default=False)
+ self.parser.add_argument(
+ "--dbg", action="store_true", help="debug", default=False)
+ self.parser.add_argument(
+ "--alive", action="store_true", help="is hived up", default=False)
+ self.parser.add_argument(
+ "--tg", action="store_true", help="tg", default=False)
+ self.parser.add_argument(
+ "--mahsaread", action="store_true", help="mark as read", default=False)
+ self.parser.add_argument(
+ "--ai", action="store_true", help="which ai to launch", default=False)
+
+ def parse(self, argv):
+ self.args, self.rest = self.parser.parse_known_args(argv)
+
+
+class Colors:
+ purple = '\033[95m'
+ blue = '\033[94m'
+ green = '\033[92m'
+ yellow = '\033[93m'
+ red = '\033[91m'
+ grey = '\033[1;37m'
+ darkgrey = '\033[1;30m'
+ cyan = '\033[1;36m'
+ ENDC = '\033[0m'
+ BOLD = '\033[1m'
+ UNDERLINE = '\033[4m'
+
+
+def get_info_w_name(api_url, name):
+ cc_key = json.load(
+ open("/home/bloodstalker/scripts/cryptocompare_key.json"))["key"]
+ #response = requests.get(cryptocompare_price_url + "fsym=" + name + "&" + "tsyms=USD&" + "api_key=" + cc_key)
+ response = requests.get(cryptocompare_price_url +
+ "fsym=" + name + "&" + "tsyms=USD&")
+ if response.status_code == 200:
+ return json.loads(response.content.decode('utf-8'))
+ else:
+ return None
+
+
+def changelly():
+ API_URL = 'https://api.changelly.com'
+ API_KEY = '1a17d70c8b624a398c3ec1e4dbffbaa5'
+ API_SECRET = json.load(
+ open("/home/bloodstalker/scripts/changelly_api_secret.json"))["key"]
+ message = {
+ 'jsonrpc': '2.0',
+ 'id': 1,
+ 'method': 'getCurrencies',
+ 'params': []
+ }
+
+ serialized_data = json.dumps(message)
+ sign = hmac.new(API_SECRET.encode('utf-8'),
+ serialized_data.encode('utf-8'), hashlib.sha512).hexdigest()
+ headers = {'api-key': API_KEY, 'sign': sign,
+ 'Content-type': 'application/json'}
+ response = requests.post(API_URL, headers=headers, data=serialized_data)
+ if response.status_code == 200:
+ return (response.json()['result'])
+ else:
+ return None
+
+
+def vocalize(sound):
+ # for whatever weird reason this causes a hang
+ # subprocess.call([os.path.expanduser("~")+"/scripts/voice.sh", sound])
+ pass
+
+
+def trim(num, dig):
+ from math import log10, floor, ceil
+ power = ceil(log10(num))
+ power = dig - power
+ result = int(num * pow(10, power))
+ count = ceil(log10(result))
+ digits = list(str(result))
+ if power > ceil(log10(num)):
+ for i in range(0, abs(power)-count):
+ digits.insert(0, "0")
+ digits.insert(ceil(log10(num)) if log10(num) > 0 else 0, ".")
+ elif power < 0:
+ for i in range(0, abs(power)):
+ digits.insert(len(digits), "0")
+ else:
+ digits.insert(-abs(power) + count, ".")
+ return("".join(digits))
+
+
+def highpercentdump(number):
+ dic_7d = {}
+ dic_7d_sorted = {}
+ list_7d_key = []
+ list_7d_value = []
+
+ dic_24h = {}
+ dic_24h_sorted = {}
+ list_24h_key = []
+ list_24h_value = []
+
+ dic_1h = {}
+ dic_1h_sorted = {}
+ list_1h_key = []
+ list_1h_value = []
+
+ res = get_info_w_name(test_url, "")
+
+ for i in range(0, 300):
+ price = res[i]["percent_change_7d"]
+ if price == None:
+ price = 0
+ dic_7d[res[i]["name"]] = float(price)
+ for key, value in sorted(dic_7d.items(), key=lambda kv: (kv[1], kv[0])):
+ dic_7d_sorted[key] = value
+ for k, v in dic_7d_sorted.items():
+ list_7d_key.append(k)
+ list_7d_value.append(v)
+
+ for i in range(0, 300):
+ price = res[i]["percent_change_24h"]
+ if price == None:
+ price = 0
+ dic_24h[res[i]["name"]] = float(price)
+ for key, value in sorted(dic_24h.items(), key=lambda kv: (kv[1], kv[0])):
+ dic_24h_sorted[key] = value
+ for k, v in dic_24h_sorted.items():
+ list_24h_key.append(k)
+ list_24h_value.append(v)
+
+ for i in range(0, 300):
+ price = res[i]["percent_change_1h"]
+ if price == None:
+ price = 0
+ dic_1h[res[i]["name"]] = float(price)
+ for key, value in sorted(dic_1h.items(), key=lambda kv: (kv[1], kv[0])):
+ dic_1h_sorted[key] = value
+ for k, v in dic_1h_sorted.items():
+ list_1h_key.append(k)
+ list_1h_value.append(v)
+
+ col_width_1 = max(len(word) for word in list_7d_key) + \
+ max(len(repr(word)) for word in list_7d_value) + 2
+ col_width_2 = max(len(word) for word in list_7d_key) + \
+ max(len(repr(word)) for word in list_7d_value) + 2
+ col_width_3 = max(len(word) for word in list_7d_key) + \
+ max(len(repr(word)) for word in list_7d_value) + 2
+ col_width = max(col_width_1, col_width_2, col_width_3, 40)
+ print(("\t" + Colors.green + Colors.BOLD +
+ "7d:").ljust(col_width + 10), end="")
+ print("24h:".ljust(col_width), end="")
+ print(("1h:" + Colors.ENDC).ljust(col_width))
+ for i in range(300-number, 300):
+ print((Colors.red + Colors.BOLD + repr(300-i) +
+ Colors.ENDC).ljust(21), end="")
+ print((Colors.blue+list_7d_key[i]+Colors.ENDC+":"+Colors.cyan+Colors.BOLD+repr(
+ list_7d_value[i])+Colors.ENDC).ljust(col_width + 24), end="")
+ print((Colors.blue+list_24h_key[i]+Colors.ENDC+":"+Colors.cyan+Colors.BOLD+repr(
+ list_24h_value[i])+Colors.ENDC).ljust(col_width+24), end="")
+ print((Colors.blue+list_1h_key[i]+Colors.ENDC+":"+Colors.cyan +
+ Colors.BOLD+repr(list_1h_value[i])+Colors.ENDC).ljust(col_width))
+ print()
+ for i in range(number, -1, -1):
+ print((Colors.red + Colors.BOLD + repr(300-i) +
+ Colors.ENDC).ljust(21), end="")
+ print((Colors.blue+list_7d_key[i]+Colors.ENDC+":"+Colors.cyan+Colors.BOLD+repr(
+ list_7d_value[i])+Colors.ENDC).ljust(col_width + 24), end="")
+ print((Colors.blue+list_24h_key[i]+Colors.ENDC+":"+Colors.cyan+Colors.BOLD+repr(
+ list_24h_value[i])+Colors.ENDC).ljust(col_width+24), end="")
+ print((Colors.blue+list_1h_key[i]+Colors.ENDC+":"+Colors.cyan +
+ Colors.BOLD+repr(list_1h_value[i])+Colors.ENDC).ljust(col_width))
+
+ one = []
+ one.append("7d:\n\n")
+ for i in range(299, 300-number, -1):
+ one.append(repr(list_7d_key[i]))
+ one.append("\t")
+ one.append(repr(list_7d_value[i]))
+ one.append("\n")
+ for i in range(number, -1, -1):
+ one.append(repr(list_7d_key[i]))
+ one.append("\t")
+ one.append(repr(list_7d_value[i]))
+ one.append("\n")
+
+ one.append("\n\n24h:\n\n")
+ for i in range(299, 300-number, -1):
+ one.append(repr(list_24h_key[i]))
+ one.append("\t")
+ one.append(repr(list_24h_value[i]))
+ one.append("\n")
+ for i in range(number, -1, -1):
+ one.append(repr(list_24h_key[i]))
+ one.append("\t")
+ one.append(repr(list_24h_value[i]))
+ one.append("\n")
+
+ one.append("\n\n1h:\n\n")
+ for i in range(299, 300-number, -1):
+ one.append(repr(list_1h_key[i]))
+ one.append("\t")
+ one.append(repr(list_1h_value[i]))
+ one.append("\n")
+ for i in range(number, -1, -1):
+ one.append(repr(list_1h_key[i]))
+ one.append("\t")
+ one.append(repr(list_1h_value[i]))
+ one.append("\n")
+
+ return one
+
+
+class Void_Spawner(object):
+ __metalclass__ = ABCMeta
+
+ def __init__(self):
+ thread = threading.Thread(target=self.run, args=())
+ thread.daemon = True
+ thread.start()
+
+ @abstractmethod
+ def run(self):
+ pass
+
+
+class V_Spawn_cnn(Void_Spawner):
+ def run(self):
+ launch_ais("cnn_type_1")
+
+
+class V_Spawn_ltsm(Void_Spawner):
+ def run(self):
+ launch_ais("ltsm_type_2")
+
+
+class V_Spawn_marionette(Void_Spawner):
+ def run(self):
+ launch_ais("marionette_type_1")
+
+
+class Demon_Father:
+ __metalclass__ = ABCMeta
+
+ def __init__(self, pidfile):
+ self.pidfile = pidfile
+ self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ self.server_address = ('localhost', 10111)
+
+ def demonize(self):
+ try:
+ pid = os.fork()
+ if pid > 0:
+ sys.exit(0)
+ except OSError as err:
+ sys.stderr.write('fork #1 failed: {0}\n'.format(err))
+ sys.exit(1)
+ os.chdir('/')
+ os.setsid()
+ os.umask(0)
+ try:
+ pid = os.fork()
+ if pid > 0:
+ sys.exit(0)
+ except OSError as err:
+ sys.stderr.write('fork #2 failed: {0}\n'.format(err))
+ sys.exit(1)
+ sys.stdout.flush()
+ sys.stderr.flush()
+ si = open(os.devnull, 'r')
+ so = open(os.devnull, 'a+')
+ se = open(os.devnull, 'a+')
+ os.dup2(si.fileno(), sys.stdin.fileno())
+ os.dup2(so.fileno(), sys.stdout.fileno())
+ os.dup2(se.fileno(), sys.stderr.fileno())
+ atexit.register(self.delpid)
+ pid = str(os.getpid())
+ with open(self.pidfile, 'w+') as f:
+ f.write(pid + '\n')
+
+ def delpid(self):
+ self.pidfile.close()
+ os.remove(self.pidfile)
+
+ def start(self):
+ try:
+ with open(self.pidfile, 'r') as pf:
+ pid = int(pf.read().strip())
+ except IOError:
+ pid = None
+ '''
+ if pid:
+ message = "pidfile {0} already exist. " + "Daemon already running?\n"
+ sys.stderr.write(message.format(self.pidfile))
+ sys.exit(1)
+ '''
+ self.demonize()
+ self.run()
+
+ def stop(self):
+ try:
+ with open(self.pidfile, 'r') as pf:
+ pid = int(pf.read().strip())
+ except IOError:
+ pid = None
+ if not pid:
+ message = "pidfile {0} does not exist. " + "Daemon not running?\n"
+ sys.stderr.write(message.format(self.pidfile))
+ return
+ try:
+ while 1:
+ os.kill(pid, signal.SIGTERM)
+ time.sleep(0.1)
+ except OSError as err:
+ e = str(err.args)
+ if e.find("No such process") > 0:
+ if os.path.exists(self.pidfile):
+ os.remove(self.pidfile)
+ else:
+ print(str(err.args))
+ sys.exit(1)
+
+ def restart(self):
+ self.stop()
+ self.start()
+
+ @abstractmethod
+ def run(self):
+ pass
+
+
+class Demon(Demon_Father):
+ def __init__(self, argparser, pidfile):
+ self.pidfile = pidfile
+ self.connection = []
+ self.client_address = []
+ self.argparser = argparser
+
+ def run(self):
+ premain(self.argparser)
+
+
+def networth():
+ net = float()
+ assets = json.load(open(assets_file))
+ for asset in assets:
+ price = get_info_w_name(api_url_base, asset)["USD"]
+ net += assets[asset] * float(price)
+ return int(net)
+
+
+def alert_1():
+ res1 = get_info_w_name(api_url_base, "doge")["USD"]
+ res2 = get_info_w_name(api_url_base, "eth")["USD"]
+ value = 600000
+ print("%.2f" % (value*float(res1)/float(res2)))
+ if value*float(res1)/float(res2) < 2:
+ vocalize("./mila/alert_1.ogg")
+
+
+def alert_2():
+ res1 = get_info_w_name(api_url_base, "gnt")["USD"]
+ res2 = get_info_w_name(api_url_base, "eth")["USD"]
+ value = 1765
+ print("%.2f" % (value*float(res1)/float(res2)))
+ if value*float(res1)/float(res2) > 2:
+ vocalize("./mila/alert_2.ogg")
+
+
+def alert_3():
+ res1 = get_info_w_name(api_url_base, "ant")["USD"]
+ res2 = get_info_w_name(api_url_base, "eth")["USD"]
+ value = 196
+ print("%.2f" % (value*float(res1)/float(res2)))
+ if value*float(res1)/float(res2) > 2:
+ vocalize("./mila/alert_3.ogg")
+
+
+def alert_4():
+ res1 = get_info_w_name(api_url_base, "sc")["USD"]
+ res2 = get_info_w_name(api_url_base, "eth")["USD"]
+ value = 35695
+ print("%.2f" % (value*float(res1)/float(res2)))
+ if value*float(res1)/float(res2) > 2:
+ vocalize("./mila/alert_4.ogg")
+
+
+def alert_5():
+ res1 = get_info_w_name(api_url_base, "bat")["USD"]
+ res2 = get_info_w_name(api_url_base, "eth")["USD"]
+ value = 4013
+ print("%.2f" % (value*float(res1)/float(res2)))
+ if value*float(res1)/float(res2) > 2:
+ vocalize("./mila/alert_4.ogg")
+
+
+def highpercentdump_bot():
+ return highpercentdump(22)
+
+
+def com_name(name):
+ res = get_info_w_name(api_url_base, name)
+ if res is not None:
+ print(trim(float(res['USD']), 4))
+
+
+def com_cap(name):
+ res = get_info_w_name(api_url_base, name)
+ if res is not None:
+ print(res[0]['market_cap_usd'])
+
+
+def com_rank(name):
+ res = get_info_w_name(api_url_base, name)
+ if res is not None:
+ print(res[0]['rank'])
+
+
+def com_gen(argparser):
+ name = argparser.args.gen[0]
+ cat = argparser.args.gen[1]
+ res = get_info_w_name(api_url_base, name)
+ if res is not None:
+ print(res[0][cat])
+
+
+def com_worth(argparser):
+ net = float()
+ assets = json.load(open(assets_file))
+ for asset in assets:
+ if asset == argparser.args.worth:
+ price = get_info_w_name(api_url_base, asset)["USD"]
+ net = assets[asset] * float(price)
+ print(int(net))
+ break
+
+
+def com_total(argparser):
+ net = float()
+ assets = json.load(open(assets_file))
+ for asset in assets:
+ price = get_info_w_name(api_url_base, asset)["USD"]
+ net += assets[asset] * float(price)
+ print("{:,}".format(int(net)))
+
+
+def com_xx(argparser):
+ value = 1.0
+ name1 = argparser.args.xx[0]
+ name2 = argparser.args.xx[1]
+ res1 = get_info_w_name(api_url_base, name1)["USD"]
+ res2 = get_info_w_name(api_url_base, name2)["USD"]
+ if argparser.args.xxv:
+ value = argparser.args.xxv
+ print(value*float(res1)/float(res2))
+
+
+def com_ava(argparser):
+ currencies = changelly()
+ if currencies is not None:
+ for currency in currencies:
+ if currency == argparser.args.ava:
+ print("YES")
+ return
+ print("NO")
+
+
+def com_avass(argparser):
+ currencies = get_info_w_name(api_url_base_shapeshift, "")
+ for currency in currencies:
+ if currency.lower() == argparser.args.avass:
+ print("YES")
+ return
+ print("NO")
+
+
+def com_cglistall(argparser):
+ currencies = changelly()
+ if currencies is not None:
+ for currency in currencies:
+ print(currency + " ", end="")
+ print()
+
+
+def com_watchlist(argparser):
+ ret = []
+ currencies = changelly()
+ if currencies is not None:
+ for currency in currencies:
+ for item in argparser.args.watchlist:
+ if currency == item:
+ ret.append(item)
+ for item in ret:
+ print(item.upper() + " ", end="")
+ print()
+
+
+def com_ss(argparser):
+ ret = []
+ result = get_info_w_name(api_url_base_shapeshift, "")
+ if not result:
+ return
+ for currency in result:
+ for item in argparser.args.ss:
+ if currency.lower() == item and result[currency]['status'] == "available":
+ ret.append(item)
+ for item in ret:
+ print(item.upper() + " ", end="")
+ print()
+
+
+def alive():
+ print("hived")
+
+
+def get_socket():
+ # use TCP
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ server_address = ("", 10111)
+ sock.bind(server_address)
+ return sock
+
+
+def premain(argparser):
+ try:
+ sock = get_socket()
+ sock.listen(15)
+ vocalize("./mila/hiveup.ogg")
+
+ while True:
+ connection, client_address = sock.accept()
+ command = connection.recv(4096)
+ new_argv = command.decode("utf-8").split(" ")
+ print(new_argv)
+ argparser.parse(new_argv)
+ old_stdout = sys.stdout
+ sys.stdout = TextIOWrapper(BytesIO(), sys.stdout.encoding)
+
+ if argparser.args.name:
+ com_name(argparser.args.name)
+ if argparser.args.cap:
+ com_cap(argparser.args.cap)
+ if argparser.args.rank:
+ com_rank(argparser.args.rank)
+ if argparser.args.gen:
+ com_gen(argparser)
+ if argparser.args.worth:
+ com_worth(argparser)
+ if argparser.args.total:
+ com_total(argparser)
+ if argparser.args.xx:
+ com_xx(argparser)
+ if argparser.args.ava:
+ com_ava(argparser)
+ if argparser.args.al1:
+ alert_1()
+ if argparser.args.al2:
+ alert_2()
+ if argparser.args.al3:
+ alert_3()
+ if argparser.args.al4:
+ alert_4()
+ if argparser.args.al5:
+ alert_5()
+ if argparser.args.avass:
+ com_avass(argparser)
+ if argparser.args.cglistall:
+ com_cglistall(argparser)
+ if argparser.args.watchlist:
+ com_watchlist(argparser)
+ if argparser.args.ss:
+ com_ss(argparser)
+ if argparser.args.dy:
+ highpercentdump(argparser.args.dy)
+ if argparser.args.alive:
+ alive()
+
+ sys.stdout.seek(0)
+ mushi_out = sys.stdout.read()
+ sys.stdout.close()
+ connection.sendall(bytes(mushi_out, "utf-8"))
+ sys.stdout = old_stdout
+ print(mushi_out)
+ except Exception as e:
+ vocalize("./mila/hiveexcept.ogg")
+ if hasattr(e, "message"):
+ print(e.messasge)
+ if hasattr(e, "__doc__"):
+ print(e.__doc__)
+ finally:
+ # vocalize("./mila/hivedown.ogg")
+ # sock.shutdown(socket.SHUT_RDWR)
+ # connection.shutdown(socket.SHUT_RDWR)
+ # sock.close()
+ # connection.close()
+ time.sleep(60)
+
+
+def main():
+ argparser = Argparser()
+ sys.argv.pop(0)
+ argparser.parse(sys.argv)
+ if argparser.args.dbg:
+ try:
+ premain(argparser)
+ except:
+ variables = globals().copy()
+ variables.update(locals())
+ shell = code.InteractiveConsole(variables)
+ shell.interact(banner="DEBUG REPL")
+ else:
+ premain(argparser)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/hived.desktop b/hived.desktop
new file mode 100644
index 0000000..3ae9514
--- /dev/null
+++ b/hived.desktop
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Name=hived
+Exec=/home/bloodstalker/scripts/hived --demon
+Terminal=true
+Type=Application
diff --git a/hivedup.sh b/hivedup.sh
new file mode 100755
index 0000000..489d339
--- /dev/null
+++ b/hivedup.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/sh
+
+PID=$(pgrep hived$)
+if [ -z "$PID" ]; then :;else echo hived;fi
diff --git a/hiveinit.py b/hiveinit.py
new file mode 100755
index 0000000..63b4772
--- /dev/null
+++ b/hiveinit.py
@@ -0,0 +1,60 @@
+#!/usr/bin/python3
+
+import argparse
+import code
+import readline
+import signal
+import sys
+import imp
+hived = imp.load_source("hived", "./hived")
+from hived import Demon
+
+def SigHandler_SIGINT(signum, frame):
+ print()
+ sys.exit(0)
+
+class Argparser(object):
+ def __init__(self):
+ self.parser = argparse.ArgumentParser()
+ self.parser.add_argument("--name", type=str, help="price of the chose crypto")
+ self.parser.add_argument("--worth", type=str, help="single asset worth")
+ self.parser.add_argument("--xx", type=str, nargs=2, help="convert")
+ self.parser.add_argument("--xxv", type=float, help="xx multiplier")
+ self.parser.add_argument("--gen", type=str, nargs=2, help="general option")
+ self.parser.add_argument("--cap", type=str, help="market cap")
+ self.parser.add_argument("--rank", type=str, help="market cap rank")
+ self.parser.add_argument("--total", action="store_true", help="total", default=False)
+ self.parser.add_argument("--ava", type=str, help="is currency available on changelly")
+ self.parser.add_argument("--avass", type=str, help="is currency available on shapeshift")
+ self.parser.add_argument("--cglistall", action="store_true", help="list all currencies available on changelly", default=False)
+ self.parser.add_argument("--test", action="store_true", help="test switch", default=False)
+ self.parser.add_argument("--watchlist", type=str, nargs="+", help="watch list")
+ self.parser.add_argument("--ss", type=str, nargs="+", help="watchlist on shapeshift")
+ self.parser.add_argument("--dy", type=int, help="lazy")
+ self.parser.add_argument("--demon", action="store_true", help="daemon mode", default=False)
+ self.parser.add_argument("--al1", action="store_true", help="alert1", default=False)
+ self.parser.add_argument("--dbg", action="store_true", help="debug", default=False)
+ self.parser.add_argument("--alive", action="store_true", help="is hived up", default=False)
+ self.parser.add_argument("--tg", action="store_true", help="tg", default=False)
+
+ def parse(self, argv):
+ self.args, self.rest = self.parser.parse_known_args(argv)
+
+def main():
+ argparser = Argparser()
+ sys.argv.pop(0)
+ argparser.parse(sys.argv)
+ if argparser.args.dbg:
+ try:
+ premain(argparser)
+ except:
+ variables = globals().copy()
+ variables.update(locals())
+ shell = code.InteractiveConsole(variables)
+ shell.interact(banner="DEBUG REPL")
+ else:
+ demon = Demon()
+ demon.run(argparser)
+
+if __name__ == "__main__":
+ main()
diff --git a/init.vim b/init.vim
new file mode 100644
index 0000000..3f3d737
--- /dev/null
+++ b/init.vim
@@ -0,0 +1,189 @@
+
+let mapleader = " "
+call plug#begin('~/AppData/Local/nvim/plugged')
+Plug 'glacambre/firenvim', { 'do': { _ -> firenvim#install(0) } }
+Plug 'vim-airline/vim-airline'
+Plug 'vim-airline/vim-airline-themes'
+Plug 'rhysd/vim-gfm-syntax'
+Plug 'unblevable/quick-scope'
+Plug 'tpope/vim-commentary'
+Plug 'ctrlpvim/ctrlp.vim'
+Plug 'unblevable/quick-scope'
+Plug 'mbbill/undotree'
+Plug 'adelarsq/vim-matchit'
+Plug 'easymotion/vim-easymotion'
+Plug 'tpope/vim-surround'
+Plug 'tpope/vim-repeat'
+Plug 'nanotech/jellybeans.vim'
+Plug 'fatih/vim-go'
+Plug 'plasticboy/vim-markdown'
+Plug 'scrooloose/nerdtree'
+Plug 'ryanoasis/vim-devicons'
+Plug 'sheerun/vim-polyglot'
+call plug#end()
+
+set encoding=UTF-8
+set linebreak
+set breakindent
+let &showbreak = '↪ '
+set secure
+set list
+set wrap
+set showmatch
+set number
+set relativenumber
+set expandtab
+set noerrorbells
+set foldmethod=manual
+set nofoldenable
+set numberwidth=5
+set history=1000
+set tabstop=2
+set hidden
+set smarttab
+set autoindent
+set autoread
+set ttyfast
+set ignorecase smartcase
+set magic
+set lazyredraw
+set hlsearch
+set scrolloff=0
+set tagbsearch
+set wildmenu
+set noerrorbells
+set novisualbell
+
+let g:gfm_syntax_enable_always = 0
+let g:gfm_syntax_enable_filetypes = ['markdown.gfm']
+autocmd BufRead,BufNew,BufNewFile README.md setlocal ft=markdown.gfm
+
+function! OnUIEnter(event)
+ let l:ui = nvim_get_chan_info(a:event.chan)
+ if has_key(l:ui, 'client') && has_key(l:ui.client, 'name')
+ if l:ui.client.name ==# 'Firenvim'
+ set guifont=DejaVuSansMono\ NF:h12
+ endif
+ endif
+endfunction
+" autocmd QueInit UIEnter * call OnUIEnter(deepcopy(v:event))
+
+colo jellybeans
+let g:airline_powerline_fonts = 0
+try
+ let g:airline#extensions#tabline#enabled = 1
+ let g:airline#extensions#tabline#left_sep = ' '
+ let g:airline#extensions#tabline#left_alt_sep = '|'
+ let g:airline#extensions#tabline#formatter = 'default'
+ let g:airline#extensions#ale#enabled = 1
+ let g:airline#extensions#branch#enabled = 1
+ " let g:airline#extensions#xkblayout#enabled = 1
+catch
+endtry
+let g:airline_theme = 'jellybeans'
+function! Airline_Custom()
+ let l:spc = g:airline_symbols.space
+ let g:airline_section_z = airline#section#create([
+ \ 'windowswap',
+ \ '%3p%%'.l:spc,
+ \ 'linenr',
+ \ ':%3v'.l:spc,
+ \ '%5o',
+ \ '[%b][0x%B]'
+ \])
+endfunction
+autocmd user AirlineAfterInit call Airline_Custom()
+" let g:XkbSwitchLib = '/usr/local/lib/libxkbswitch.so'
+let g:airline_exclude_preview = 1
+
+"camel and snake case motion
+let g:camelchar = "A-Z0-9.,;:{([`'\"_"
+nnoremap <silent><C-h> :<C-u>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%^','bW')<CR>
+nnoremap <silent><C-l> :<C-u>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%$','W')<CR>
+inoremap <silent><C-h> <C-o>:call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%^','bW')<CR>
+inoremap <silent><C-l> <C-o>:call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%$','W')<CR>
+vnoremap <silent><C-h> :<C-U>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%^','bW')<CR>v`>o
+vnoremap <silent><C-l> <Esc>`>:<C-U>call search('\C\<\<Bar>\%(^\<Bar>[^'.g:camelchar.']\@<=\)['.g:camelchar.']\<Bar>['.g:camelchar.']\ze\%([^'.g:camelchar.']\&\>\@!\)\<Bar>\%$','W')<CR>v`<o
+
+nmap <Backspace> <Nop>
+nmap <Delete> <Nop>
+nmap <Left> <Nop>
+nmap <Down> <Nop>
+nmap <Up> <Nop>
+nmap <Right> <Nop>
+nmap <PageUp> <Nop>
+nmap <PageDown> <Nop>
+imap <PageUp> <Nop>
+imap <PageDown> <Nop>
+map <F3> :bp<CR>
+map <F4> :bn<CR>
+map <C-e> :q<cr>
+inoremap " ""<left>
+inoremap ' ''<left>
+inoremap ( ()<left>
+inoremap [ []<left>
+inoremap { {}<left>
+inoremap {<CR> {<CR>}<ESC>O
+map <leader>w :w<CR>
+nnoremap <F7> :NERDTreeToggle<CR>
+nnoremap <F12> :UndotreeToggle<CR>
+nnoremap <F10> :vsp<cr>
+nnoremap <S-F10> :sp<cr>
+nnoremap <leader>c :call clearmatches()<CR>
+nnoremap <leader>t :bel term<CR>
+nnoremap <leader>r :!%:p<CR>
+nnoremap <leader>cd :cd %:p:h<cr>
+
+let g:qs_highlight_on_keys = ["f", "F", "t", "T"]
+"
+"netrw
+let g:netrw_sort_by = 'date'
+let g:netrw_sort_direction = 'reverse'
+let g:netrw_banner = 0
+let g:netrw_liststyle = 3
+let g:netrw_browse_split = 1
+let g:netrw_winsize = 15
+let g:netrw_fastbrowse = 1
+let g:netrw_sort_by = 'name'
+let g:netrw_sort_direction = 'normal'
+
+"vim-go
+let g:go_auto_sameids = 1
+let g:go_highlight_functions = 1
+let g:go_highlight_function_calls = 1
+let g:go_highlight_types = 1
+let g:go_highlight_operators = 1
+let g:go_highlight_function_parameters = 1
+" let g:go_highlight_variable_declarations = 1
+" let g:go_highlight_variable_assignments = 1
+let g:go_doc_popup_window = 1
+let g:go_code_completion_enabled = 0
+
+"quickscope
+let g:qs_highlight_on_keys = ["f", "F", "t", "T"]
+
+" undotree
+set undolevels=1000
+if has("persistent_undo")
+ set undodir=~/.undodir/
+ set undofile
+endif
+let g:undotree_WindowLayout = 4
+
+iab strign string
+iab pritn print
+iab retrun return
+iab return return
+iab fucntion function
+iab funciton function
+iab tehn then
+iab coutn count
+iab accoutn account
+
+au BufEnter github.com_*.txt set filetype=markdown
+nnoremap <Esc><Esc> :call firenvim#focus_page()<CR>
+nnoremap <C-z> :call firenvim#hide_frame()<CR>
+
+"yaml
+autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab
+let g:indentLine_char = '|'
diff --git a/irssi/config b/irssi/config
new file mode 100644
index 0000000..cfb392d
--- /dev/null
+++ b/irssi/config
@@ -0,0 +1,449 @@
+servers = (
+ { address = "irc.dal.net"; chatnet = "DALnet"; port = "6667"; },
+ { address = "irc.efnet.org"; chatnet = "EFNet"; port = "6667"; },
+ { address = "irc.esper.net"; chatnet = "EsperNet"; port = "6667"; },
+ {
+ address = "chat.freenode.net";
+ chatnet = "Freenode";
+ port = "6667";
+ },
+ {
+ address = "irc.gamesurge.net";
+ chatnet = "GameSurge";
+ port = "6667";
+ },
+ { address = "eu.irc6.net"; chatnet = "IRCnet"; port = "6667"; },
+ { address = "open.ircnet.net"; chatnet = "IRCnet"; port = "6667"; },
+ {
+ address = "irc.ircsource.net";
+ chatnet = "IRCSource";
+ port = "6667";
+ },
+ { address = "irc.netfuze.net"; chatnet = "NetFuze"; port = "6667"; },
+ { address = "irc.oftc.net"; chatnet = "OFTC"; port = "6667"; },
+ {
+ address = "irc.quakenet.org";
+ chatnet = "QuakeNet";
+ port = "6667";
+ },
+ { address = "irc.rizon.net"; chatnet = "Rizon"; port = "6667"; },
+ { address = "silc.silcnet.org"; chatnet = "SILC"; port = "706"; }
+);
+
+chatnets = {
+ DALnet = {
+ type = "IRC";
+ max_kicks = "4";
+ max_msgs = "20";
+ max_whois = "30";
+ };
+ EFNet = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "4";
+ max_whois = "1";
+ };
+ EsperNet = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "4";
+ max_whois = "1";
+ };
+ Freenode = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "4";
+ max_whois = "1";
+ };
+ GameSurge = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "1";
+ max_whois = "1";
+ };
+ IRCnet = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "1";
+ max_whois = "1";
+ };
+ IRCSource = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "4";
+ max_whois = "1";
+ };
+ NetFuze = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "1";
+ max_whois = "1";
+ };
+ OFTC = { type = "IRC"; max_kicks = "1"; max_msgs = "1"; max_whois = "1"; };
+ QuakeNet = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "1";
+ max_whois = "1";
+ };
+ Rizon = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "1";
+ max_whois = "1";
+ };
+ SILC = { type = "SILC"; };
+ Undernet = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "1";
+ max_whois = "1";
+ };
+};
+
+channels = (
+ { name = "#lobby"; chatnet = "EsperNet"; autojoin = "No"; },
+ { name = "#freenode"; chatnet = "Freenode"; autojoin = "No"; },
+ { name = "#irssi"; chatnet = "Freenode"; autojoin = "No"; },
+ { name = "#gamesurge"; chatnet = "GameSurge"; autojoin = "No"; },
+ { name = "#irssi"; chatnet = "IRCNet"; autojoin = "No"; },
+ { name = "#ircsource"; chatnet = "IRCSource"; autojoin = "No"; },
+ { name = "#netfuze"; chatnet = "NetFuze"; autojoin = "No"; },
+ { name = "#oftc"; chatnet = "OFTC"; autojoin = "No"; },
+ { name = "silc"; chatnet = "SILC"; autojoin = "No"; },
+ { name = "#go-nuts"; chatnet = "freenode"; autojoin = "yes"; },
+ { name = "#docker"; chatnet = "freenode"; autojoin = "yes"; }
+);
+
+aliases = {
+ ATAG = "WINDOW SERVER";
+ ADDALLCHANS = "SCRIPT EXEC foreach my \\$channel (Irssi::channels()) { Irssi::command(\"CHANNEL ADD -auto \\$channel->{name} \\$channel->{server}->{tag} \\$channel->{key}\")\\;}";
+ B = "BAN";
+ BACK = "AWAY";
+ BANS = "BAN";
+ BYE = "QUIT";
+ C = "CLEAR";
+ CALC = "EXEC - if command -v bc >/dev/null 2>&1\\; then printf '%s=' '$*'\\; echo '$*' | bc -l\\; else echo bc was not found\\; fi";
+ CHAT = "DCC CHAT";
+ CUBES = "SCRIPT EXEC Irssi::active_win->print(\"%_bases\", MSGLEVEL_CLIENTCRAP) \\; Irssi::active_win->print( do { join '', map { \"%x0\\${_}0\\$_\" } '0'..'9','A'..'F' }, MSGLEVEL_NEVER | MSGLEVEL_CLIENTCRAP) \\; Irssi::active_win->print(\"%_cubes\", MSGLEVEL_CLIENTCRAP) \\; Irssi::active_win->print( do { my \\$y = \\$_*6 \\; join '', map { my \\$x = \\$_ \\; map { \"%x\\$x\\$_\\$x\\$_\" } @{['0'..'9','A'..'Z']}[\\$y .. \\$y+5] } 1..6 }, MSGLEVEL_NEVER | MSGLEVEL_CLIENTCRAP) for 0..5 \\; Irssi::active_win->print(\"%_grays\", MSGLEVEL_CLIENTCRAP) \\; Irssi::active_win->print( do { join '', map { \"%x7\\${_}7\\$_\" } 'A'..'X' }, MSGLEVEL_NEVER | MSGLEVEL_CLIENTCRAP) \\; Irssi::active_win->print(\"%_mIRC extended colours\", MSGLEVEL_CLIENTCRAP) \\; my \\$x \\; \\$x .= sprintf \"\00399,%02d%02d\",\\$_,\\$_ for 0..15 \\; Irssi::active_win->print(\\$x, MSGLEVEL_NEVER | MSGLEVEL_CLIENTCRAP) \\; for my \\$z (0..6) { my \\$x \\; \\$x .= sprintf \"\00399,%02d%02d\",\\$_,\\$_ for 16+(\\$z*12)..16+(\\$z*12)+11 \\; Irssi::active_win->print(\\$x, MSGLEVEL_NEVER | MSGLEVEL_CLIENTCRAP) }";
+ DATE = "TIME";
+ DEHIGHLIGHT = "DEHILIGHT";
+ DESCRIBE = "ACTION";
+ DHL = "DEHILIGHT";
+ EXEMPTLIST = "MODE $C +e";
+ EXIT = "QUIT";
+ GOTO = "SCROLLBACK GOTO";
+ HIGHLIGHT = "HILIGHT";
+ HL = "HILIGHT";
+ HOST = "USERHOST";
+ INVITELIST = "MODE $C +I";
+ J = "JOIN";
+ K = "KICK";
+ KB = "KICKBAN";
+ KN = "KNOCKOUT";
+ LAST = "LASTLOG";
+ LEAVE = "PART";
+ M = "MSG";
+ MUB = "UNBAN *";
+ N = "NAMES";
+ NMSG = "^MSG";
+ P = "PART";
+ Q = "QUERY";
+ RESET = "SET -default";
+ RUN = "SCRIPT LOAD";
+ SAY = "MSG *";
+ SB = "SCROLLBACK";
+ SBAR = "STATUSBAR";
+ SIGNOFF = "QUIT";
+ SV = "MSG * Irssi $J ($V) - http://www.irssi.org";
+ T = "TOPIC";
+ UB = "UNBAN";
+ UMODE = "MODE $N";
+ UNSET = "SET -clear";
+ W = "WHO";
+ WC = "WINDOW CLOSE";
+ WG = "WINDOW GOTO";
+ WJOIN = "JOIN -window";
+ WI = "WHOIS";
+ WII = "WHOIS $0 $0";
+ WL = "WINDOW LIST";
+ WN = "WINDOW NEW HIDDEN";
+ WQUERY = "QUERY -window";
+ WW = "WHOWAS";
+ 1 = "WINDOW GOTO 1";
+ 2 = "WINDOW GOTO 2";
+ 3 = "WINDOW GOTO 3";
+ 4 = "WINDOW GOTO 4";
+ 5 = "WINDOW GOTO 5";
+ 6 = "WINDOW GOTO 6";
+ 7 = "WINDOW GOTO 7";
+ 8 = "WINDOW GOTO 8";
+ 9 = "WINDOW GOTO 9";
+ 10 = "WINDOW GOTO 10";
+ 11 = "WINDOW GOTO 11";
+ 12 = "WINDOW GOTO 12";
+ 13 = "WINDOW GOTO 13";
+ 14 = "WINDOW GOTO 14";
+ 15 = "WINDOW GOTO 15";
+ 16 = "WINDOW GOTO 16";
+ 17 = "WINDOW GOTO 17";
+ 18 = "WINDOW GOTO 18";
+ 19 = "WINDOW GOTO 19";
+ 20 = "WINDOW GOTO 20";
+ 21 = "WINDOW GOTO 21";
+ 22 = "WINDOW GOTO 22";
+ 23 = "WINDOW GOTO 23";
+ 24 = "WINDOW GOTO 24";
+ 25 = "WINDOW GOTO 25";
+ 26 = "WINDOW GOTO 26";
+ 27 = "WINDOW GOTO 27";
+ 28 = "WINDOW GOTO 28";
+ 29 = "WINDOW GOTO 29";
+ 30 = "WINDOW GOTO 30";
+ 31 = "WINDOW GOTO 31";
+ 32 = "WINDOW GOTO 32";
+ 33 = "WINDOW GOTO 33";
+ 34 = "WINDOW GOTO 34";
+ 35 = "WINDOW GOTO 35";
+ 36 = "WINDOW GOTO 36";
+ 37 = "WINDOW GOTO 37";
+ 38 = "WINDOW GOTO 38";
+ 39 = "WINDOW GOTO 39";
+ 40 = "WINDOW GOTO 40";
+ 41 = "WINDOW GOTO 41";
+ 42 = "WINDOW GOTO 42";
+ 43 = "WINDOW GOTO 43";
+ 44 = "WINDOW GOTO 44";
+ 45 = "WINDOW GOTO 45";
+ 46 = "WINDOW GOTO 46";
+ 47 = "WINDOW GOTO 47";
+ 48 = "WINDOW GOTO 48";
+ 49 = "WINDOW GOTO 49";
+ 50 = "WINDOW GOTO 50";
+ 51 = "WINDOW GOTO 51";
+ 52 = "WINDOW GOTO 52";
+ 53 = "WINDOW GOTO 53";
+ 54 = "WINDOW GOTO 54";
+ 55 = "WINDOW GOTO 55";
+ 56 = "WINDOW GOTO 56";
+ 57 = "WINDOW GOTO 57";
+ 58 = "WINDOW GOTO 58";
+ 59 = "WINDOW GOTO 59";
+ 60 = "WINDOW GOTO 60";
+ 61 = "WINDOW GOTO 61";
+ 62 = "WINDOW GOTO 62";
+ 63 = "WINDOW GOTO 63";
+ 64 = "WINDOW GOTO 64";
+ 65 = "WINDOW GOTO 65";
+ 66 = "WINDOW GOTO 66";
+ 67 = "WINDOW GOTO 67";
+ 68 = "WINDOW GOTO 68";
+ 69 = "WINDOW GOTO 69";
+ 70 = "WINDOW GOTO 70";
+ 71 = "WINDOW GOTO 71";
+ 72 = "WINDOW GOTO 72";
+ 73 = "WINDOW GOTO 73";
+ 74 = "WINDOW GOTO 74";
+ 75 = "WINDOW GOTO 75";
+ 76 = "WINDOW GOTO 76";
+ 77 = "WINDOW GOTO 77";
+ 78 = "WINDOW GOTO 78";
+ 79 = "WINDOW GOTO 79";
+ 80 = "WINDOW GOTO 80";
+ 81 = "WINDOW GOTO 81";
+ 82 = "WINDOW GOTO 82";
+ 83 = "WINDOW GOTO 83";
+ 84 = "WINDOW GOTO 84";
+ 85 = "WINDOW GOTO 85";
+ 86 = "WINDOW GOTO 86";
+ 87 = "WINDOW GOTO 87";
+ 88 = "WINDOW GOTO 88";
+ 89 = "WINDOW GOTO 89";
+ 90 = "WINDOW GOTO 90";
+ 91 = "WINDOW GOTO 91";
+ 92 = "WINDOW GOTO 92";
+ 93 = "WINDOW GOTO 93";
+ 94 = "WINDOW GOTO 94";
+ 95 = "WINDOW GOTO 95";
+ 96 = "WINDOW GOTO 96";
+ 97 = "WINDOW GOTO 97";
+ 98 = "WINDOW GOTO 98";
+ 99 = "WINDOW GOTO 99";
+};
+
+statusbar = {
+ # formats:
+ # when using {templates}, the template is shown only if it's argument isn't
+ # empty unless no argument is given. for example {sb} is printed always,
+ # but {sb $T} is printed only if $T isn't empty.
+
+ items = {
+ # start/end text in statusbars
+ barstart = "{sbstart}";
+ barend = "{sbend}";
+
+ topicbarstart = "{topicsbstart}";
+ topicbarend = "{topicsbend}";
+
+ # treated "normally", you could change the time/user name to whatever
+ time = "{sb $Z}";
+ user = "%9%z005fff{sb {sbnickmode $[-2]cumode}%k$N %Zeeeeee {sbumode %K$usermode} %Z005fff%0%z005f00{sbaway $A}}%9%N";
+
+
+ # treated specially .. window is printed with non-empty windows,
+ # window_empty is printed with empty windows
+ window = " %Z00af00{sb $tag/{channel $itemname} %C {sbmode $M}} %C%n ";
+ window_empty = "{sb {sbservertag $tag}}";
+ prompt = "{prompt $[.15]itemname}";
+ prompt_empty = "{prompt $winname}";
+
+ topic = " $topic";
+ topic_empty = " Irssi v$J - http://www.irssi.org";
+
+ # all of these treated specially, they're only displayed when needed
+ # Powerline
+ lag = "{sb %r%k%1 ⌚ $0 %r%0%n}";
+ act = "{sb %Zeeeeee%0%n%z005fff %F$0%F %n}";
+ more = "%c%0%n%z00af00 more ⬇ %c%0%n";
+
+
+ };
+
+ # there's two type of statusbars. root statusbars are either at the top
+ # of the screen or at the bottom of the screen. window statusbars are at
+ # the top/bottom of each split window in screen.
+ default = {
+ # the "default statusbar" to be displayed at the bottom of the window.
+ # contains all the normal items.
+ window = {
+ disabled = "no";
+
+ # window, root
+ type = "window";
+ # top, bottom
+ placement = "bottom";
+ # number
+ position = "1";
+ # active, inactive, always
+ visible = "active";
+
+ # list of items in statusbar in the display order
+ items = {
+ barstart = { priority = "100"; };
+ user = { };
+ window = { };
+ window_empty = { };
+ lag = { priority = "-1"; };
+ more = { priority = "-1"; alignment = "right"; };
+ barend = { priority = "100"; alignment = "right"; };
+ otr = { };
+ usercount = { };
+ };
+ };
+
+ # statusbar to use in inactive split windows
+ window_inact = {
+
+ type = "window";
+ placement = "bottom";
+ position = "1";
+ visible = "inactive";
+
+ items = {
+ barstart = { priority = "100"; };
+ window = { };
+ window_empty = { };
+ more = { priority = "-1"; alignment = "right"; };
+ barend = { priority = "100"; alignment = "right"; };
+ };
+ };
+
+ # we treat input line as yet another statusbar :) It's possible to
+ # add other items before or after the input line item.
+ prompt = {
+
+ type = "root";
+ placement = "bottom";
+ # we want to be at the bottom always
+ position = "100";
+ visible = "always";
+
+ items = {
+ prompt = { priority = "-1"; };
+ prompt_empty = { priority = "-1"; };
+ # treated specially, this is the real input line.
+ input = { priority = "10"; };
+ };
+ };
+
+ # topicbar
+ topic = {
+
+ type = "root";
+ placement = "top";
+ position = "1";
+ visible = "always";
+
+ items = {
+ topicbarstart = { priority = "100"; };
+ topicbarend = { priority = "100"; alignment = "right"; };
+ topic = { };
+ topicempty = { };
+ };
+ };
+ awl_0 = {
+ items = {
+ barstart = { priority = "100"; };
+ awl_0 = { };
+ barend = { priority = "100"; alignment = "right"; };
+ };
+ };
+ };
+};
+settings = {
+ core = {
+ real_name = "";
+ user_name = "devi";
+ nick = "bloodstalker";
+ use_proxy = "yes";
+ proxy_address = "192.168.1.108";
+ proxy_port = "3128";
+ proxy_string = "CONNECT %s:%d HTTP/1.0\012\012";
+ proxy_string_after = "conn %s %d";
+ proxy_password = "";
+ };
+ "fe-common/core" = {
+ theme = "solarized-powerline";
+ hilight_color = "%R";
+ };
+ "fe-text" = { actlist_sort = "refnum"; };
+ "perl/core/scripts" = {
+ ### For Solarized adv_windowlist.pl script
+ awl_block = "-20";
+ awl_sbar_maxlength = "off";
+ awl_hide_empty = "yes";
+ awl_mouse = "yes";
+ awl_viewer = "no";
+ awl_maxlines = "0";
+ #fancy_abbrev = "head";
+
+ ### For Solarized trackbar.pl script
+ trackbar_style = "%B";
+ title_screen_window = "yes";
+ awl_shared_sbar = "OFF";
+ };
+};
+keyboard = (
+ { key = "meta-[M"; id = "command"; data = "mouse_xterm"; }
+);
+ignores = (
+ { level = "JOINS PARTS QUITS NICKS"; channels = ( "#go-nuts" ); },
+ { level = "JOINS PARTS QUITS NICKS"; channels = ( "#docker" ); },
+ { level = "JOINS PARTS QUITS NICKS"; channels = ( "#node.js" ); },
+ { level = "JOINS PARTS QUITS NICKS"; channels = ( "#vagrant" ); },
+ { level = "JOINS PARTS QUITS NICKS"; channels = ( "#ansible" ); },
+ { level = "JOINS PARTS QUITS NICKS"; channels = ( "#dpdk" ); },
+ { level = "JOINS PARTS QUITS NICKS"; channels = ( "#fdio-vpp" ); },
+ { level = "JOINS PARTS QUITS NICKS"; channels = ( "#alacritty" ); },
+ { level = "JOINS PARTS QUITS NICKS"; channels = ( "#osm" ); }
+);
diff --git a/irssi/irssi.sh b/irssi/irssi.sh
new file mode 100755
index 0000000..7881d46
--- /dev/null
+++ b/irssi/irssi.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env sh
+
+mkdir -p ~/.irssi/scripts/autorun
+cd ~/.irssi/scripts/autorun
+wget https://scripts.irssi.org/scripts/nickcolor.pl
+wget https://scripts.irssi.org/scripts/adv_windowlist.pl
+wget https://scripts.irssi.org/scripts/timezones.pl
+wget https://scripts.irssi.org/scripts/seen.pl
+wget https://scripts.irssi.org/scripts/colorize_nicks.pl
+wget https://scripts.irssi.org/scripts/cubes.pl
+wget https://scripts.irssi.org/scripts/dim_nicks.pl
+wget https://scripts.irssi.org/scripts/hilite_url.pl
+wget https://scripts.irssi.org/scripts/messages_bottom.pl
+wget https://scripts.irssi.org/scripts/nm2.pl
+wget https://scripts.irssi.org/scripts/savecmdhist.pl
+wget https://scripts.irssi.org/scripts/sb_position.pl
+wget https://scripts.irssi.org/scripts/trackbar.pl
+
+cp ./config ~/.irssi/config
+cp ./solarized-powerline.theme ~/.irssi/solarized-powerline.theme
+cp ./startup ~/.irssi/startup
diff --git a/irssi/solarized-powerline.theme b/irssi/solarized-powerline.theme
new file mode 100644
index 0000000..c214262
--- /dev/null
+++ b/irssi/solarized-powerline.theme
@@ -0,0 +1,419 @@
+# vim: set expandtab:
+# (Adapted from solarized-universal theme by Huy Z: https://github.com/huyz/irssi-colors-solarized)
+# Adaped by: Paul Saunders
+# later adapted by: Farzad Sadeghi https://github.com/terminaldweller
+# When testing changes, the easiest way to reload the theme is with /RELOAD.
+# This reloads the configuration file too, so if you did any changes remember
+# to /SAVE it first. Remember also that /SAVE overwrites the theme file with
+# old data so keep backups.
+
+# TEMPLATES:
+
+# The real text formats that irssi uses are the ones you can find with
+# /FORMAT command. Back in the old days all the colors and texts were mixed
+# up in those formats, and it was really hard to change the colors since you
+# might have had to change them in tens of different places. So, then came
+# this templating system.
+
+# Now the /FORMATs don't have any colors in them, and they also have very
+# little other styling. Most of the stuff you need to change is in this
+# theme file. If you can't change something here, you can always go back
+# to change the /FORMATs directly, they're also saved in these .theme files.
+
+# So .. the templates. They're those {blahblah} parts you see all over the
+# /FORMATs and here. Their usage is simply {name parameter1 parameter2}.
+# When irssi sees this kind of text, it goes to find "name" from abstracts
+# block below and sets "parameter1" into $0 and "parameter2" into $1 (you
+# can have more parameters of course). Templates can have subtemplates.
+# Here's a small example:
+# /FORMAT format hello {colorify {underline world}}
+# abstracts = { colorify = "%G$0-%n"; underline = "%U$0-%U"; }
+# When irssi expands the templates in "format", the final string would be:
+# hello %G%Uworld%U%n
+# ie. underlined bright green "world" text.
+# and why "$0-", why not "$0"? $0 would only mean the first parameter,
+# $0- means all the parameters. With {underline hello world} you'd really
+# want to underline both of the words, not just the hello (and world would
+# actually be removed entirely).
+
+# COLORS:
+
+# You can find definitions for the color format codes in docs/formats.txt.
+
+# There's one difference here though. %n format. Normally it means the
+# default color of the terminal (white mostly), but here it means the
+# "reset color back to the one it was in higher template". For example
+# if there was /FORMAT test %g{foo}bar, and foo = "%Y$0%n", irssi would
+# print yellow "foo" (as set with %Y) but "bar" would be green, which was
+# set at the beginning before the {foo} template. If there wasn't the %g
+# at start, the normal behaviour of %n would occur. If you _really_ want
+# to use the terminal's default color, use %N.
+
+#############################################################################
+# https://irssi.org/documentation/settings/#a_d
+
+# default foreground color (%N) - -1 is the "default terminal color"
+default_color = "-1";
+
+# print timestamp/servertag at the end of line, not at beginning
+info_eol = "false";
+
+# these characters are automatically replaced with specified color
+# (dark grey by default)
+replaces = { "[]=" = "%_$*%_"; };
+
+abstracts = {
+ ##
+ ## generic
+ ##
+
+ # text to insert at the beginning of each non-message line
+ # %N = terminal default (e.g. white on transparent)
+ # %G = brightgreen (Solarized: base01, i.e. darkest gray)
+ #line_start = "%N%W %N";
+ line_start = "%N";
+
+ # timestamp styling, nothing by default
+ # %N%8 = reverse normal (to match line_start)
+ timestamp = "%N%k%z005f87%9$*%9%N%Z005f87%n";
+
+ # any kind of text that needs hilighting, default is to bold
+ hilight = "%_$*%_";
+
+ # any kind of error message
+ error = "%r$*%n";
+
+ # channel name is printed
+ channel = "%Z00af00$*%n";
+
+ # nick is printed
+ nick = "%Zeeeeee{nickcolor $*}";
+ mynick = "%Zeeeeee{nickcolor $*}";
+ inick = "%Zeeeeee{nickcolor $*}"; # Inverted
+ imynick = "%Zeeeeee{nickcolor $*}"; # Inverted
+
+ # nick host is printed
+ # (that's the "email" address of a user)
+ nickhost = "%Z005f5f$*";
+
+ # server name is printed
+ server = "%Z00af00$*";
+ iserver = "%9%Zeeeeee%z00af00$*%9%n";
+
+ # some kind of comment is printed
+ comment = " $*";
+
+ # reason for something is printed (part, quit, kick, ..)
+ reason = "$*";
+
+ # mode change is printed ([+o nick])
+ mode = "%N%0%p$*%n";
+
+ ##
+ ## channel specific messages
+ ##
+
+ # highlighted nick/host is printed (joins)
+ # %c = cyan (Solarized: cyan)
+ # %G = brightgreen (Solarized: base01)
+ # NOTE: %n doesn't work in irssi v0.8.15 for some reason. So we have to end with the same color as line_start
+ channick_hilight = "%Z00af00$*%G";
+ chanhost_hilight = "%Z00af00{nickhost $*}%N";
+
+ # nick/host is printed (parts, quits, etc.)
+ channick = "%Z00af00$*%G";
+ chanhost = "%Z00af5f{nickhost $*}%N";
+
+ # highlighted channel name is printed
+ # SOLARIZED: Channels are Green
+ channelhilight = "%N%0%g$*%N";
+ ichannelhilight = "%z005f87$*%n%0";
+
+ # ban/ban exception/invite list mask is printed
+ # %R = brightred (Solarized: orange)
+ # %n = return
+ ban = "%R$*%n";
+
+
+ ##
+ ## messages
+ ##
+
+ # the basic styling of how to print message, $0 = nick mode, $1 = nick
+ msgnick = "%z005f87%Zeeeeee $0%Zeeeeee{nick $1-} %Zeeeeee";
+
+ # message from you is printed. "msgownnick" specifies the styling of the
+ # nick ($0 part in msgnick) and "ownmsgnick" specifies the styling of the
+ # whole line.
+
+ # Example1: You want the message text to be green:
+ # ownmsgnick = "{msgnick $0 $1-}%g";
+ # Example2.1: You want < and > chars to be yellow:
+ # ownmsgnick = "%Y{msgnick $0 $1-%Y}%n";
+ # (you'll also have to remove <> from replaces list above)
+ # Example2.2: But you still want to keep <> grey for other messages:
+ # pubmsgnick = "%K{msgnick $0 $1-%K}%n";
+ # pubmsgmenick = "%K{msgnick $0 $1-%K}%n";
+ # pubmsghinick = "%K{msgnick $1 $0$2-%n%K}%n";
+ # ownprivmsgnick = "%K{msgnick $*%K}%n";
+ # privmsgnick = "%K{msgnick %R$*%K}%n";
+
+ # $0 = nick mode, $1 = nick
+ # %3 = yellow
+ ownmsgnick = "%z5f5fff%k{%z5f5fff%9 $0$1-%9}%N%0%Z5f5fff %Zeeeeee";
+ ownnick = "%Zeeeeee$*";
+
+ # public message in channel, $0 = nick mode, $1 = nick
+ pubmsgnick = "%z005f87%k%Zeeeeee{%Zeeeeee%z005f87msgnick $0$1-}%N%Z005f87 %n";
+ pubnick = "%Zeeeeee$*";
+
+ # public message in channel meant for me, $0 = nick mode, $1 = nick
+ # %5 = magenta
+ pubmsgmenick = "%5%k%Z0087ff{msgnick $0$1-}%N%m %n";
+ menick = "%Zeeeeee$*";
+
+ # public highlighted message in channel
+ # $0 = highlight color, $1 = nick mode, $2 = nick
+ pubmsghinick = " %z005f87%k%z005f87{%Zeeeeee%z005f87msgnick $1 %Zeeeeee$2-}%N%Z005f87 %n";
+
+ # channel name is printed with message
+ # This is printed whenever the channel name is printed for disambiguation, e.g.
+ # while there is a query in the same window. Example: <+funnyuser:#test> hello
+ msgchannel = "%z005f5f%k:$*%n";
+
+ # private message, $0 = nick, $1 = host
+ # TODO: To test for Solarized
+ privmsg = " %m$0%G<%n$1-%G>%n ";
+
+ # private message from you, $0 = "msg", $1 = target nick
+ # TODO: To test for Solarized
+ ownprivmsg = " %Z005f87$0%G<%Z005f87$1-%G>%n ";
+
+ # own private message in query
+ ownprivmsgnick = "%z5f5fff%k{%z5f5fff%9 $*%9}%N%Z5f5fff %C";
+ ownprivnick = "%k$*";
+
+ # private message in query
+ # NOTE: for some reason, we gotta handle both the nick & msg on in this line
+ privmsgnick = "%5%k{msgnick $*}%N%m %n";
+
+ ##
+ ## Actions (/ME stuff)
+ ##
+
+ # used internally by this theme
+ action_core = "%N%k %n$*";
+
+ # generic one that's used by most actions
+ action = "{action_core %_$*%n} ";
+
+ # own action, both private/public
+ ownaction = "%N%k {mynick $0}%N%C $1-";
+
+ # own action with target, both private/public
+ # NOTE: to test: /action NICK farted. (This will tell NICK that you farted)
+ # This is like a /me but only you and NICK will see
+ ownaction_target = "{action_core $0}%G:%y$1%n ";
+
+ # private action sent by others
+ # %M = brightmagenta (Solarized: violet)
+ pvtaction = "%m (*) $*%n ";
+ pvtaction_query = "{action $*}";
+
+ # public action sent by others
+ pubaction = "%N%k {nick $0}%N $1-";
+
+
+ ##
+ ## other IRC events
+ ##
+
+ # whois
+ whois = "%k%z005f87WHOIS %N%k%#%N $[8]0  %Y$1-";
+
+ # notices
+ ownnotice = "%1%k %k$0 %k%1%8%0 {ichannelhilight $1-} %k%z00af5f%N ";
+ notice = "%1%k %k$0- %r%0%N ";
+ #notice = "%1%w %W$* %k%8%n ";
+ pubnotice_channel = "{ichannelhighlight $*}";
+ #pubnotice_channel = "%G%n$*";
+ pvtnotice_host = " %k%n {hickhost $*}";
+ servernotice = "%1%k %k!$* %k%8%n ";
+
+ # CTCPs
+ ownctcp = "%k%z005f87 %k$0%G %N%Z005f87 %Z005f87$1-%G  ";
+ ctcp = "%N%k%n %Zeeeeee$*%n";
+
+ # wallops
+ wallop = "%c$*%n: ";
+ wallop_nick = "%n$*";
+ wallop_action = "%c * $*%n ";
+
+ # netsplits
+ netsplit = "%r$*%n";
+ netjoin = "%g$*%n";
+
+ # /names list
+ names_prefix = "%N%k%n";
+ names_nick = " %G%_$0%_$1-%N  ";
+ names_nick_op = " %k%_$0$_$1-%n  ";
+ names_nick_halfop = " %Y$_$0$_$1-%n  ";
+ names_nick_voice = " %C$_$0$_$1-%n  ";
+ names_users = "%k%z005f87 $* %Z005f87%0%n";
+ names_channel = " %k$*";
+
+ # DCC
+ dcc = "%N%k%n %g$*%n";
+ dccfile = "%_$*%_";
+
+ # DCC chat, own msg/action
+ dccownmsg = "[%Z005f87$0%G($1-%G)%n] ";
+ dccownnick = "%Z005f87$*%n";
+ dccownquerynick = "%c$*%n";
+ dccownaction = "{action $*}";
+ dccownaction_target = "{action_core $0}%G:%c$1%n ";
+
+ # DCC chat, others
+ dccmsg = " %g$1-%G($0%G)%n ";
+ dccquerynick = "%g$*%n";
+ dccaction = "%c (*dcc*) $*%n %|";
+
+ ##
+ ## statusbar
+ ##
+
+ # default background for all statusbars. You can also give
+ # the default foreground color for statusbar items.
+ # NOTE: if all the other overriding settings below are set, this only seems to affect
+ # the content parts of the adv_windowlist. Default seems to be blue
+ # NOTE: if not set, the default background seems to be %w%4 = white on blue
+ sb_background = "%k%z1c1c1c";
+
+ # default backround for "default" statusbar group
+ # NOTE: this impacts the statusbar of an inactive window and the edges of adv_windowlist
+ # %7 = white (wich looks gray on a regular terminal with white bg)
+ sb_default_bg = "%Z005fff";
+
+ # background for topicbar at the top (defaults to sb_default_bg)
+ sb_topic_bg = "%W%0";
+
+ # background for the statusbar of active window. You can also give
+ # the foreground color.
+ # %2 = green
+ sb_window_bg = "%k%0";
+
+ # background for prompt / input line
+ sb_prompt_bg = "%k";
+ # background for info statusbar
+ # %8 = reverse window
+ # TODO: To test for Solarized
+ sb_info_bg = "%z1c1c1c";
+
+ # text at the beginning of statusbars. sb-item already puts
+ # space there,so we don't use anything by default.
+ sbstart = "%z005f00%9";
+ # text at the end of statusbars. Use space so that it's never
+ # used for anything.
+ sbend = "%9%n";
+
+ topicsbstart = "{sbstart $*}";
+ topicsbend = "{sbend $*}";
+
+ prompt = "%9%k%z005f87$c $* %N%Z005f87%9%n ";
+
+ # This controls each part of a statusbar, including the outer brackets of adv_windowlist
+ sb = "$*";
+ # The mode is next to your NICK and the channel
+ sbmode = "%p$*%k";
+ sbaway = "%Z00af00%k%z00af00 zZzZzZzZ %Z00af00%0";
+ sbservertag = "%Z00af00 $0 %Z005f87(change with ^X)%n";
+ sbnickmode = "%Zeeeeee$0";
+
+ # activity in statusbar
+
+ # ',' separator between the window numbers
+ # %g = green (same color as the active statusbar so we dont' see it)
+ sb_act_sep = "%Z005fff+";
+ # normal text
+ # This also affects the color of the window with activity in adv_windowlist
+ sb_act_text = "%C$*";
+ # public message (ordinary messages)
+ sb_act_msg = "%c$*";
+ # hilight (when people actually chat)
+ # This also affects the color of the window with direct message in adv_windowlist
+ sb_act_hilight = "%m$*";
+ # hilight with specified color, $0 = color, $1 = text
+ sb_act_hilight_color = "%R$1-";
+
+ ### For usercount.pl script
+
+ sb_usercount = "{sb $0 users %Z005f87(%n$1-%Z005f87)}";
+ sb_uc_ircops = "%k*%n$*";
+ sb_uc_ops = "%y@%n$*";
+ sb_uc_halfops = "%p%%%n$*";
+ sb_uc_voices = "%Z005f87+%n$*";
+ sb_uc_normal = "%k %n$*";
+ sb_uc_space = "%K·%n";
+
+ ### For adv_windowlist.pl script
+
+ # Mentioned in adv_windowlist but not default_theme
+ sb_act_none = "$*";
+};
+
+formats = {
+ "fe-common/core" = {
+ daychange = " %g-----%k-%W-%n Day changed to %%D %W-%k-%g-----%n";
+ join = "%k%z00af5fJOIN %8 {ichannelhilight $2} %0%Z00d700%0 {inick $0}%0 %N%8%n%k%N {chanhost_hilight $1}";
+ line_start_irssi = "%k%zff0000IRSSI%N%Zff0000 %N";
+ new_topic = "%k%z00d700TOPIC %8 {ichannelhilight $1} by {inick $0}%8  $2";
+ nick_changed = "%k%z00d700RENAME %Z00d700%0 {nick $0} %Zff8700 {nick $1} %N%8%n%k%N";
+ part = "%k%z00d700PART %8 {ichannelhilight $2}%N %0%Z005f87 %N{inick $0}%0 %k%Zeeeeee {reason $3}";
+ quit = "%0%Z005f00%k%z005f00QUIT %N {inick $0}%0 %Zeeeeee %N%n%k%N {reason $2}";
+ your_nick_changed = "%k%z00d700RENAME %Z00d700%0 {mynick $0} %Zff8700 {mynick $1} %N%8%n%k%N";
+ };
+ "fe-common/irc" = {
+ away = "%k%z00d700AWAY %N%k%N";
+ banlist = "%p%z00d700BANS %z00d700 $[-3]0 %8 {ichannelhilight $1} %N%8%n%k%N {ban $2}";
+ banlist_long = "%p%z00d700BANS %z00d700 $[-3]0 %8 {ichannelhilight $1} {comment by {inick $3}%0%k, $4 secs ago} %N%8%n%k%N {ban $2}";
+ chanmode_change = "%k%z008700MODE %N%Z008700%N {channelhilight $0} %Zeeeeee%n {mode $1}%n by {nick $2}";
+ channel_created = "%k%N Channel {channelhilight $0} created $1";
+ channel_mode = "%k%N mode/{channelhilight $0} {mode $1}";
+ ctcp_default_reply = "%W%0%N $0- ";
+ ctcp_ping_reply = "%k%z005f87 CTCP {hilight PING} reply %n%Z005f87%N {nick $0} %y%N%n $1.$[-3.0]2 seconds ";
+ ctcp_reply = "%k%z005f87 CTCP {hilight $0} reply %n%Z005f87%N {nick $1} %y%N $2 ";
+ ctcp_reply_channel = "%k%z005f87 CTCP {hilight $0} reply %n%Z005f87%N {nick $1} %y%N {channel $3} %y%N $2";
+ ctcp_requested = "%k%z005f87%8%8 CTCP {hilight $2} from {mynick $4} %n%Z005f87%N by {hilight $0} {comment $1} %y%N $3";
+ default_event = "%N%k %N%n$1";
+ default_event_server = "%k%z00d700$0 %N%k %N%n$1";
+ ebanlist = "%p%z00d700BANS %k exception %8 {ichannelhilight $0} %N%8%n%k%N {ban $1}";
+ ebanlist_long = "%p%z00d700BANS %k exception %8 {ichannelhilight $0} {comment by {inick $2}%0%k, $3 secs ago} %N%8%n%k%N {ban $1}";
+ end_of_who = "%z00d700%kWHO %N%k%N END";
+ end_of_whois = "%z00d700%kWHOIS %N%k%N END";
+ end_of_whowas = "%z00d700%kWHOWAS %N%k%N END";
+ netsplit = "%k%1%8%8 NETSPLIT %k%0%8 {iserver $0} %z00d700%8 {iserver $1}%8 %N%8%n%k%N Quits: $2";
+ netsplit_join = "%k%1 NETSPLIT %k%8%N Joins: $0";
+ netsplit_join_more = "%k%1 NETSPLIT %k%8%N Joins: $0 (+$1 more)";
+ netsplit_more = "%k%1%8%8 NETSPLIT %k%0%8 {iserver $0} %z00d700%8 {iserver $1}%8 %N%8%n%k%N Quits: $2 (+$3 more, use /NETSPLIT to show all of them)";
+ no_topic = "%k%N No topic set for {channelhilight $0}";
+ own_ctcp = "%k%z005f87 CTCP {hilight $2-}  {inick $0} %n%Z005f87%N";
+ server_chanmode_change = "%k%1 SERVERMODE %k%8 {channelhilight $0} {mode $1} by {nick $2}";
+ topic = "%k%z00d700TOPIC %Z00d700%0%N {channel $0}%N  $1";
+ topic_info = "%k%z00d700TOPIC %Z00d700%0%N {nick $0}%N {nickhost $2}  $1";
+ unaway = "%k%z00d700AWAY %N%k%N END";
+ usermode_change = "%z008700%ZeeeeeeMODE %N%Z008700%N {mode $0}%N for %0{mynick $1}%N";
+ who = "%z00d700%kWHO %z005f87%k {inick $[!9]1} %Z005f87 %k$0 %0%g Status: $[!3]2  $[-2]3 hops %N%k%N {nickhost $4@$5} {comment $6}";
+ whois = "%z00d700%kWHOIS %N%k%n {nick $0} {nickhost $1@$2}%:{whois ircname $3}";
+ whowas = "%z00d700%kWHOWAS %N%k%n {nick $0} {nickhost $1@$2}%:{whois was $3}";
+ };
+ "Irssi::Script::adv_windowlist" = {
+ awl_display_header = "";
+ awl_display_key = " %0$N  $H$C$S %n";
+ awl_display_key_active = "%9%W%Z008700%0%8 %zeeeeee$N  $H$C$S%8 %0%8%8%9%n";
+ awl_display_key_visible = "%Z005fff %m$N %k $H$C$S %8%8%n";
+ awl_display_nokey = " %0$N  %U$C%U %n";
+ awl_display_nokey_active = "%k%z005f87 %k$N %k %U$C%U %8%8%n";
+ awl_display_nokey_visible = "%k%z5f5fff %m$N %k %U$C%U %8%8%n";
+ awl_separator = "";
+ };
+};
diff --git a/irssi/startup b/irssi/startup
new file mode 100644
index 0000000..e18f450
--- /dev/null
+++ b/irssi/startup
@@ -0,0 +1,11 @@
+/load proxy
+/SET use_proxy ON
+/SET proxy_address 192.168.1.108
+/SET proxy_port 3128
+/SET -clear proxy_string
+/SET proxy_string_after conn %s %d
+/EVAL SET proxy_string CONNECT %s:%d HTTP/1.0\n\n
+/SET -clear proxy_password
+
+/connect irc.freenode.net
+/connect OFTC
diff --git a/keymap.sh b/keymap.sh
new file mode 100755
index 0000000..f5e6820
--- /dev/null
+++ b/keymap.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/sh
+
+xcape -e 'Control_L=Escape'
+xcape -e 'Shift_L=Shift_L|bracketleft'
+xcape -e 'Shift_R=Shift_R|bracketright'
+xcape -e 'Alt_L=parenleft'
+xcape -e 'Alt_R=parenright'
diff --git a/keyremap.ahk b/keyremap.ahk
new file mode 100644
index 0000000..7f8389f
--- /dev/null
+++ b/keyremap.ahk
@@ -0,0 +1,130 @@
+#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
+; #Warn ; Enable warnings to assist with detecting common errors.
+SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
+SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
+
+^Capslock::Capslock
+
+#InstallKeybdHook
+SetCapsLockState, alwaysoff
+Capslock::
+Send {LControl Down}
+KeyWait, CapsLock
+Send {LControl Up}
+if ( A_PriorKey = "CapsLock" ) {
+ Send {Esc}
+}
+return
+
+~*^a::
+~*^b::
+~*^c::
+~*^d::
+~*^e::
+~*^f::
+~*^g::
+~*^h::
+~*^i::
+~*^j::
+~*^k::
+~*^l::
+~*^m::
+~*^n::
+~*^o::
+~*^p::
+~*^q::
+~*^r::
+~*^s::
+~*^t::
+~*^u::
+~*^v::
+~*^w::
+~*^x::
+~*^y::
+~*^z::
+~*^1::
+~*^2::
+~*^3::
+~*^4::
+~*^5::
+~*^6::
+~*^7::
+~*^8::
+~*^9::
+~*^0::
+~*^Space::
+~*^Backspace::
+~*^Delete::
+~*^Insert::
+~*^Home::
+~*^End::
+~*^PgUp::
+~*^PgDn::
+~*^Tab::
+~*^Return::
+~*^,::
+~*^.::
+~*^/::
+~*^;::
+~*^'::
+~*^[::
+~*^]::
+~*^\::
+~*^-::
+~*^=::
+~*^`::
+~*^F1::
+~*^F2::
+~*^F3::
+~*^F4::
+~*^F5::
+~*^F6::
+~*^F7::
+~*^F8::
+~*^F9::
+~*^F10::
+~*^F11::
+~*^F12::
+ g_AbortSendEsc := true
+ return
+
+LShift::
+RShift::
+Shift::Send % (A_ThisHotkey = "LShift" ? "{{}" : "{}}")
+
+LControl::
+RControl::
+Control::Send % (A_ThisHotkey = "LControl" ? "[" : "]")
+
+LAlt::
+RAlt::
+Alt::Send % (A_ThisHotkey = "LAlt" ? "(" : ")")
+
+; The next part is only relevant to users of Virtual Box, which interacts weirdly with AutoHotkey. The code below resets ctrl and caps lock when a Virtual Box window is unfocused.
+InVB()
+{
+ return WinActive("ahk_exe VirtualBox.exe")
+}
+in_vb:=InVB()
+was_in_vb:=in_vb
+
+Gui +LastFound
+hWnd := WinExist()
+DllCall( "RegisterShellHookWindow", UInt,Hwnd )
+MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
+OnMessage( MsgNum, "ShellMessage" )
+
+ShellMessage( wParam,lParam )
+{
+ global in_vb
+ global was_in_vb
+ was_in_vb:=in_vb
+ in_vb:=InVB()
+ if (was_in_vb and not in_vb)
+ {
+ Suspend On
+ Send {LControl Up}
+ SetCapsLockState Off
+ Suspend Off
+ }
+}
diff --git a/lemonbar.sh b/lemonbar.sh
new file mode 100755
index 0000000..ebca0b3
--- /dev/null
+++ b/lemonbar.sh
@@ -0,0 +1,50 @@
+#!/usr/bin/bash
+#./lemonbar.sh| lemonbar -f "DejaVu Sans Mono for Powerline:size=11" -g "x16"
+
+NORMAL="%{F-}%{B-}"
+sep_left=""
+sep_right=""
+sep_l_left=""
+sep_l_right=""
+
+DATETIME() {
+ DATETIME=$(date "+%a %b %d, %T")
+ echo -n " $DATETIME"
+}
+
+MEM_RAM() {
+ RESULT=$(free -m | sed "1d"| gawk '{if (NR==1){print int($3/100)/10"G""/"int($2/100)/10"G"}}')
+ echo -n " M:$RESULT"
+}
+
+MEM_SWAP() {
+ RESULT=$(free -m | sed "1d"| gawk '{if (NR==2){print int($3/100)/10"G""/"int($2/100)/10"G"}}')
+ echo -n " S:$RESULT"
+}
+
+HOME_FREE() {
+ RESULT=$("df" | grep "/home$" | gawk '{print int($4/100000)/10"G"}')
+ echo -n " HOME:$RESULT"
+}
+
+ROOT_FREE() {
+ RESULT=$("df" | grep "/$" | gawk '{print int($4/100000)/10"G"}')
+ echo -n " ROOT:$RESULT"
+}
+
+EXTRA_FREE() {
+ RESULT=$("df" | grep "/extra$" | gawk '{print int($4/100000)/10"G"}')
+ echo -n " EXTRA:$RESULT"
+}
+
+DATETIME_SEGMENT="%{B#ff005f5f}%{F#ffcc6666}$sep_left%{B#ffcc6666}%{F#ffeeeeee}$(DATETIME)"
+MEM_RAM_SEGMENT="%{B#ff0087ff}%{F#ff005f5f}$sep_left%{B#ff005f5f}%{F#ffeeeeee}$(MEM_RAM)"
+MEM_SWAP_SEGMENT="%{B#ffff5f00}%{F#ff0087ff}$sep_left%{B#ff0087ff}%{F#ffeeeeee}$(MEM_SWAP)"
+EXTRA_FREE_SEGMENT="%{B#ff875fd7}%{F#ffff5f00}$sep_left%{B#ffff5f00}%{F#ffeeeeee}$(EXTRA_FREE)"
+HOME_FREE_SEGMENT="%{B#ff5f00ff}%{F#ff875fd7}$sep_left%{B#ff875fd7}%{F#ffeeeeee}$(HOME_FREE)"
+ROOT_FREE_SEGMENT="%{B#ff000000}%{F#ff5f00ff}$sep_left%{B#ff5f00ff}%{F#ffeeeeee}$(ROOT_FREE)"
+
+while true; do
+ echo -e "%{r} $ROOT_FREE_SEGMENT $HOME_FREE_SEGMENT $EXTRA_FREE_SEGMENT $MEM_SWAP_SEGMENT $MEM_RAM_SEGMENT $DATETIME_SEGMENT $NORMAL"
+ sleep 60
+done
diff --git a/lesscolor.sh b/lesscolor.sh
new file mode 100755
index 0000000..8ac7efc
--- /dev/null
+++ b/lesscolor.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+case "$1" in
+ *.h|*.c|*.cpp|*.awk|*.groff|*.java|*.js|*.m4|*.php|*.pl|*.pm|*.pod|*.sh|*.lua|*.hpp|*.sh|\
+ *.ad[asb]|*.asm|*.inc|*.[ch]|*.[ch]pp|*.[ch]xx|*.cc|*.hh|*.json|makefile|Makefile|*.html|\
+ *.lsp|*.l|*.pas|*.p|*.xml|*.xps|*.xsl|*.axp|*.ppd|*.pov|\
+ *.diff|*.patch|*.py|*.rb|*.sql|*.ebuild|*.eclass)
+ pygmentize -f 256 "$1";;
+ .zshrc|.bash_aliases|.bash_environment)
+ pygmentize -f 256 -l sh "$1"
+ ;;
+ *)
+ grep "#\!/bin/zsh" "$1" > /dev/null
+ if [ "$?" -eq "0" ]; then
+ pygmentize -f 256 -l sh "$1"
+ else
+ exit 1
+ fi
+esac
+
+exit 0
diff --git a/llvm-build.sh b/llvm-build.sh
new file mode 100755
index 0000000..83d4aef
--- /dev/null
+++ b/llvm-build.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+"cmake" -G "Unix Makefiles" ../llvm -DLLVM_ENABLE_RTTI=1 -DCMAKE_BUILD_TYPE=Release -DLLDB_TEST_C_COMPILER=cc -DLLDB_TEST_CXX_COMPILER=g++ -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DLLVM_ENABLE_ASSERTIONS=1 -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi;clang-tools-extra;compiler-rt;"
diff --git a/llvm-update.sh b/llvm-update.sh
new file mode 100755
index 0000000..be164cc
--- /dev/null
+++ b/llvm-update.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+cd $(dirname $0)
+REVISION=$(svn info http://llvm.org/svn/llvm-project/llvm/trunk | grep Revision | gawk 'BEGIN{FS=": "}{print $2}')
+cd ~/extra/llvm-clang-4/llvm
+svn up -r$REVISION
+(cd ./projects/compiler-rt; svn up -r$REVISION)
+(cd ./projects/libcxx; svn up -r$REVISION)
+(cd ./projects/libcxxabi; svn up -r$REVISION)
+#(cd ./tools/lldb; svn up -r$REVISION)
+(cd ./tools/clang; svn up -r$REVISION)
+(cd ./tools/clang/tools/extra; svn up -r$REVISION)
diff --git a/lynx.cfg b/lynx.cfg
new file mode 100644
index 0000000..86cac79
--- /dev/null
+++ b/lynx.cfg
@@ -0,0 +1,3837 @@
+# $LynxId: lynx.cfg,v 1.302 2018/07/08 15:22:44 tom Exp $
+# lynx.cfg file.
+# The default placement for this file is /etc/lynx.cfg
+#
+# Please don't edit this file directly (it is updated with every Red Hat
+# Linux update, overwriting your changes). Instead, edit /etc/lynx-site.cfg.
+#
+# $Format: "#PRCS LYNX_VERSION \"$ProjectVersion$\""$
+#PRCS LYNX_VERSION "2.8.9rel.1"
+#
+# $Format: "#PRCS LYNX_DATE \"$ProjectDate$\""$
+#PRCS LYNX_DATE "Sun, 08 Jul 2018 06:46:06 -0400"
+#
+# Definition pairs (configuration settings) are of the form
+# VARIABLE:DEFINITION
+# NO spaces are allowed around the colon ":" between the pair items.
+#
+# If you do not have write access to /usr/local/lib you may change
+# the default location of this file in the userdefs.h file and recompile,
+# or specify its location on the command line with the "-cfg"
+# command line option.
+#
+# Items may be commented out by putting a '#' as the FIRST char of the line
+# (Any line beginning with punctuation is ignored). Leading blanks on each
+# line are ignored; trailing blanks may be significant depending on the option.
+
+# In most cases, a definition can be overridden by another later in the
+# file, or in an including configuration file. You can see the effect of
+# definitions (and redefinitions) in the trace file Lynx.log by using the
+# "-trace" and "-trace-mask" options, e.g.,
+# lynx -trace -trace-mask=8
+
+# As a documentation aid, the default values for each setting are shown
+# commented-out. By convention, these default value comments have no space
+# after the "#", e.g.,
+# #HTTP_PROTOCOL:1.0
+
+# An HTML'ized description of all settings (based on comments in this file,
+# with alphabetical table of settings and with table of settings by category)
+# is available at https://lynx.invisible-island.net/release/breakout/lynx_help/cattoc.html
+#
+### The conversion is done via the scripts/cfg2html.pl script.
+### Several directives beginning with '.' are used for this purpose.
+
+.h1 Auxiliary Facilities
+# These settings control the auxiliary navigating facilities of lynx, e.g.,
+# jumpfiles, bookmarks, default URLs.
+
+.h2 INCLUDE
+# Starting with Lynx 2.8.1, the lynx.cfg file has a crude "include"
+# facility. This means that you can take advantage of the global lynx.cfg
+# while also supplying your own tweaks.
+#
+# You can use a command-line argument (-cfg /where/is/lynx.cfg) or an
+# environment variable (LYNX_CFG=/where/is/lynx.cfg).
+# For instance, put in your .profile or .login:
+#
+# LYNX_CFG=~/lynx.cfg; export LYNX_CFG # in .profile for sh/ksh/bash/etc.
+# setenv LYNX_CFG ~/lynx.cfg # in .login for [t]csh
+#
+# Then in ~/lynx.cfg:
+#
+# INCLUDE:/usr/local/lib/lynx.cfg
+# ^^^^^^^^^^^^^^^^^^^^^^^ or whatever is appropriate on your system
+# and now your own tweaks. If you omit the directory name, e.g.,
+#
+# INCLUDE:lynx.cfg
+#
+# then lynx first checks if it is in any of the directories listed in the
+# environment variable LYNX_CFG_PATH, then tries the directory of the default
+# config-file.
+#
+# You can also suppress all but specific settings that will be read from
+# included files. This allows sysadmins to provide users the ability to
+# customize lynx with options that normally do not affect security, such as
+# COLOR, VIEWER, KEYMAP.
+#
+# The syntax is
+#
+# INCLUDE:filename for <space-separated-list-of-allowed-settings>
+#
+# sample:
+.ex
+#INCLUDE:~/lynx.cfg for COLOR VIEWER KEYMAP
+# only one space character should surround the word 'for'. On Unix systems ':'
+# is also accepted as separator. In that case, the example can be written as
+.ex
+#INCLUDE:~/lynx.cfg:COLOR VIEWER KEYMAP
+# In the example, only the settings COLOR, VIEWER and KEYMAP are accepted by
+# lynx. Other settings are ignored. Note: INCLUDE is also treated as a
+# setting, so to allow an included file to include other files, put INCLUDE in
+# the list of allowed settings.
+#
+# If you allow an included file to include other files, and if a list of
+# allowed settings is specified for that file with the INCLUDE command, nested
+# files are only allowed to include the list of settings that is the set AND of
+# settings allowed for the included file and settings allowed by nested INCLUDE
+# commands. In short, there is no security hole introduced by including a
+# user-defined configuration file if the original list of allowed settings is
+# secure.
+
+.h2 STARTFILE
+# STARTFILE is the default starting URL if none is specified
+# on the command line or via a WWW_HOME environment variable;
+# Lynx will refuse to start without a starting URL of some kind.
+# STARTFILE can be remote, e.g. http://www.w3.org/default.html ,
+# or local, e.g. file://localhost/PATH_TO/FILENAME ,
+# where PATH_TO is replaced with the complete path to FILENAME
+# using Unix shell syntax and including the device on VMS.
+#
+# Normally we expect you will connect to a remote site, e.g., the Lynx starting
+# site:
+STARTFILE:https://duckduckgo.com
+#
+# As an alternative, you may want to use a local URL. A good choice for this is
+# the user's home directory:
+.ex
+#STARTFILE:file://localhost/~/
+#
+# Your choice of STARTFILE should reflect your site's needs, and be a URL that
+# you can connect to reliably. Otherwise users will become confused and think
+# that they cannot run Lynx.
+
+.h2 HELPFILE
+# HELPFILE must be defined as a URL and must have a
+# complete path if local:
+# file://localhost/PATH_TO/lynx_help/lynx_help_main.html
+# Replace PATH_TO with the path to the lynx_help subdirectory
+# for this distribution (use SHELL syntax including the device
+# on VMS systems).
+# The default HELPFILE is:
+.url https://lynx.invisible-island.net/lynx_help/lynx_help_main.html
+# This should be changed to the local path.
+# This definition will be overridden if the "LYNX_HELPFILE" environment
+# variable has been set.
+#
+HELPFILE:file://localhost/usr/share/doc/lynx/lynx_help/lynx_help_main.html
+.ex
+#HELPFILE:file://localhost/PATH_TO/lynx_help/lynx_help_main.html
+
+.h2 DEFAULT_INDEX_FILE
+# DEFAULT_INDEX_FILE is the default file retrieved when the
+# user presses the 'I' key when viewing any document.
+# An index to your CWIS can be placed here or a document containing
+# pointers to lots of interesting places on the web.
+#
+DEFAULT_INDEX_FILE:http://www.google.com/
+
+.h1 Interaction
+
+.h2 GOTOBUFFER
+# Set GOTOBUFFER to TRUE if you want to have the previous goto URL,
+# if any, offered for reuse or editing when using the 'g'oto command.
+# The default is defined in userdefs.h. If left FALSE, the circular
+# buffer of previously entered goto URLs can still be invoked via the
+# Up-Arrow or Down-Arrow keys after entering the 'g'oto command.
+#
+#GOTOBUFFER:FALSE
+
+.h2 JUMP_PROMPT
+# JUMP_PROMPT is the default statusline prompt for selecting a jumps file
+# shortcut. (see below).
+# You can change the prompt here from that defined in userdefs.h. Any
+# trailing white space will be trimmed, and a single space is added by Lynx
+# following the last non-white character. You must set the default prompt
+# before setting the default jumps file (below). If a default jumps file
+# was set via userdefs.h, and you change the prompt here, you must set the
+# default jumps file again (below) for the change to be implemented.
+#
+#JUMP_PROMPT:Jump to (use '?' for list):
+
+.h1 Auxiliary Facilities
+
+.h2 JUMPFILE
+# JUMPFILE is the local file checked for short-cut names for URLs when
+# the user presses the 'j' (JUMP) key. The file contains an HTML
+# definition list (DL). The definition titles (DT) are used as
+# short-cut name; the definition data (DD) are URLs.
+#
+# There is an example jumps file in the samples subdirectory.
+#
+# After pressing 'j', the user will be prompted to enter a short-cut
+# name for an URL, which Lynx will then follow in a similar manner to
+# 'g'oto; alternatively, s/he can enter '?' to view the full JUMPFILE
+# list of short-cuts with associated URLs.
+#
+# If the URL contains one or more "%s" markers, Lynx will prompt the user
+# for text to fill in for each marker. If no text is given, the jump is
+# cancelled.
+#
+# If not defined here or in userdefs.h, the JUMP command will invoke the
+# NO_JUMPFILE statusline message (see LYMessages_en.h ).
+#
+# To allow '?' to work, include in the JUMPFILE
+# a short-cut to the JUMPFILE itself, e.g.
+# <dt>?<dd><a href="file://localhost/path/jumps.html">This Shortcut List</a>
+#
+# On VMS, use Unix SHELL syntax (including a lead slash) to define it.
+#
+# Alternate jumps files can be defined and mapped to keys here. If the
+# keys have already been mapped, then those mappings will be replaced,
+# but you should leave at least one key mapped to the default jumps
+# file. You optionally may include a statusline prompt string for the
+# mapping. You must map upper and lowercase keys separately (beware of
+# mappings to keys which the user can further remap via the 'o'ptions
+# menu). The format is:
+#
+# JUMPFILE:path:key[:prompt]
+#
+# where path should begin with a '/' (i.e., not include file://localhost).
+# Any white space following a prompt string will be trimmed, and a single
+# space will be added by Lynx.
+#
+# In the following line, include the actual full local path to JUMPFILE,
+# but do not include 'file://localhost' in the line.
+#JUMPFILE:/FULL_LOCAL_PATH/jumps.html
+.ex
+#JUMPFILE:/Lynx_Dir/ips.html:i:IP or Interest group (? for list):
+
+.h2 JUMPBUFFER
+# Set JUMPBUFFER to TRUE if you want to have the previous jump target,
+# if any, offered for reuse or editing when using the 'J'ump command.
+# The default is defined in userdefs.h. If left FALSE, the circular
+# buffer of previously entered targets (shortcuts) can still be invoked
+# via the Up-Arrow or Down-Arrow keys after entering the 'J'ump command.
+# If multiple jumps files are installed, the recalls of shortcuts will
+# be specific to each file. If Lynx was built with PERMIT_GOTO_FROM_JUMP
+# defined, any random URLs used instead of shortcuts will be stored in the
+# goto URL buffer, not in the shortcuts buffer(s), and the single character
+# ':' can be used as a target to invoke the goto URL buffer (as if 'g'oto
+# followed by Up-Arrow had been entered).
+#
+#JUMPBUFFER:FALSE
+
+.h1 Internal Behavior
+
+.h2 SAVE_SPACE
+# If SAVE_SPACE is defined, it will be used as a path prefix for the
+# suggested filename in "Save to Disk" operations from the 'p'rint or
+# 'd'ownload menus. On VMS, you can use either VMS (e.g., "SYS$LOGIN:")
+# or Unix syntax (including '~' for the HOME directory). On Unix, you
+# must use Unix syntax. If the symbol is not defined, or is zero-length
+# (""), no prefix will be used, and only a filename for saving in the
+# current default directory will be suggested.
+# This definition will be overridden if a "LYNX_SAVE_SPACE" environment
+# variable has been set on Unix, or logical has been defined on VMS.
+#
+#SAVE_SPACE:~/foo/
+
+.h2 REUSE_TEMPFILES
+# Lynx uses temporary files for (among other purposes) the content of
+# various user interface pages. REUSE_TEMPFILES changes the behavior
+# for some of these temp files, among them pages shown for HISTORY,
+# VLINKS, OPTIONS, INFO, PRINT, DOWNLOAD commands.
+# If set to TRUE, the same file can be used multiple times for the same
+# purpose. If set to FALSE, a new filename is generated each time before
+# rewriting such a page. With TRUE, repeated invocation of these commands
+# is less likely to push previous documents out of the cache of rendered
+# texts (see also DEFAULT_CACHE_SIZE). This is especially useful with
+# intermittent (dialup) network connections, when it is desirable to
+# continue browsing through the cached documents after disconnecting.
+# With the default setting of FALSE, there can be more than one incarnation
+# of e.g. the VLINKS page cached in memory (but still only the most recently
+# generated one is kept as a file), resulting in sometimes less surprising
+# behaviour when returning to such a page via HISTORY or PREV_DOC functions
+# (most users will not encounter and notice this difference).
+#
+#REUSE_TEMPFILES:FALSE
+
+.h2 LYNX_HOST_NAME
+# If LYNX_HOST_NAME is defined here or in userdefs.h, it will be
+# treated as an alias for the local host name in checks for URLs on
+# the local host (e.g., when the -localhost switch is set), and this
+# host name, "localhost", and HTHostName (the fully qualified domain
+# name of the system on which Lynx is running) will all be passed as
+# local. A different definition here will override that in userdefs.h.
+#
+#LYNX_HOST_NAME:www.cc.ukans.edu
+
+.h2 LOCALHOST_ALIAS
+# localhost aliases
+# Any LOCALHOST_ALIAS definitions also will be accepted as local when
+# the -localhost switch is set. These need not actually be local, i.e.,
+# in contrast to LYNX_HOST_NAME, you can define them to trusted hosts at
+# other Internet sites.
+#
+.ex 2
+#LOCALHOST_ALIAS:gopher.server.domain
+#LOCALHOST_ALIAS:news.server.domain
+
+.h2 LOCAL_DOMAIN
+# LOCAL_DOMAIN is used for a tail match with the ut_host element of
+# the utmp or utmpx structure on systems with utmp capabilities, to
+# determine if a user is local to your campus or organization when
+# handling -restrictions=inside_foo or outside_foo settings for ftp,
+# news, telnet/tn3270 and rlogin URLs. An "inside" user is assumed
+# if your system does not have utmp capabilities. CHANGE THIS here
+# if it was not changed in userdefs.h at compilation time.
+#
+#LOCAL_DOMAIN:ukans.edu
+
+.h1 Session support
+
+.h2 AUTO_SESSION
+# If AUTO_SESSION is TRUE lynx will save/restore useful information about
+# your browsing history when closing/starting current lynx session if
+# no command-line session switches override this setting.
+# This setting is useful only if SESSION_FILE is defined here or in the user's
+# .lynxrc file.
+#
+#AUTO_SESSION:FALSE
+
+.h2 SESSION_FILE
+# SESSION_FILE defines the file name where lynx will store user sessions.
+# This setting is used only when AUTO_SESSION is true.
+# Note: the default setting will store/resume each session in a different
+# folder under same file name (if that is allowed by operating system)
+# when lynx is invoked from different directories.
+# (The current working directory may be changed inside lynx)
+#
+# If you want to use the same session file wherever you invoke Lynx,
+# enter the full path below, eg '/home/<username>/.lynx_session'.
+#
+# If you do not want this feature, leave the setting commented.
+# Users can still customize SESSION_FILE and AUTO_SESSION via
+# their .lynxrc file.
+#
+#SESSION_FILE:lynx_session
+
+.h2 SESSION_LIMIT
+# SESSION_LIMIT defines maximum number of: searched strings, goto URLs,
+# visited links and history entries which will be saved in session file. The
+# minimum allowed is 1, the maximum is 10000.
+#
+# For instance, if SESSION_LIMIT is 250, a per-session limit of 250 entries of
+# searched strings, goto URLs, visited links and history entries will be saved
+# in the session file.
+#
+# There is no fixed limit on the number of entries which can be restored;
+# It is limited only by available memory.
+#
+#SESSION_LIMIT:250
+
+.h1 Character Sets
+
+.h2 CHARACTER_SET
+# CHARACTER_SET defines the display character set, i.e., assumed to be
+# installed on the user's terminal. It determines which characters or strings
+# will be used to represent 8-bit character entities within HTML. New
+# character sets may be defined as explained in the README files of the
+# src/chrtrans directory in the Lynx source code distribution. For Asian (CJK)
+# character sets, it also determines how Kanji code will be handled. The
+# default is defined in userdefs.h and can be changed here or via the
+# 'o'ptions menu. The 'o'ptions menu setting will be stored in the user's RC
+# file whenever those settings are saved, and thereafter will be used as the
+# default. For Lynx a "character set" has two names: a MIME name (for
+# recognizing properly labeled charset parameters in HTTP headers etc.), and a
+# human-readable string for the 'O'ptions Menu (so you may find info about
+# language or group of languages besides MIME name). Not all 'human-readable'
+# names correspond to exactly one valid MIME charset (example is "Chinese");
+# in that case an appropriate valid (and more specific) MIME name should be
+# used where required. Well-known synonyms are also processed in the code.
+#
+# Raw (CJK) mode
+#
+# Lynx normally translates characters from a document's charset to display
+# charset, using ASSUME_CHARSET value (see below) if the document's charset
+# is not specified explicitly. Raw (CJK) mode is OFF for this case.
+# When the document charset is specified explicitly, that charset
+# overrides any assumption like ASSUME_CHARSET or raw (CJK) mode.
+#
+# For the Asian (CJK) display character sets, the corresponding charset is
+# assumed in documents, i.e., raw (CJK) mode is ON by default. In raw CJK
+# mode, 8-bit characters are not reverse translated in relation to the entity
+# conversion arrays, i.e., they are assumed to be appropriate for the display
+# character set. The mode should be toggled OFF when an Asian (CJK) display
+# character set is selected but the document is not CJK and its charset not
+# specified explicitly.
+#
+# Raw (CJK) mode may be toggled by user via '@' (LYK_RAW_TOGGLE) key,
+# the -raw command line switch or from the 'o'ptions menu.
+#
+# Raw (CJK) mode effectively changes the charset assumption about unlabeled
+# documents. You can toggle raw mode ON if you believe the document has a
+# charset which does correspond to your Display Character Set. On the other
+# hand, if you set ASSUME_CHARSET the same as Display Character Set you get raw
+# mode ON by default (but you get assume_charset=iso-8859-1 if you try raw mode
+# OFF after it).
+#
+# Note that "raw" does not mean that every byte will be passed to the screen.
+# HTML character entities may get expanded and translated, inappropriate
+# control characters filtered out, etc. There is a "Transparent" pseudo
+# character set for more "rawness".
+#
+# Since Lynx now supports a wide range of platforms it may be useful to note
+# the cpXXX codepages used by IBM PC compatible computers, and windows-xxxx
+# used by native MS-Windows apps. We also note that cpXXX pages rarely are
+# found on Internet, but are mostly for local needs on DOS.
+#
+# Recognized character sets include:
+#
+.nf
+# string for 'O'ptions Menu MIME name
+# =========================== =========
+# 7 bit approximations (US-ASCII) us-ascii
+# Western (ISO-8859-1) iso-8859-1
+# Western (ISO-8859-15) iso-8859-15
+# Western (cp850) cp850
+# Western (windows-1252) windows-1252
+# IBM PC US codepage (cp437) cp437
+# DEC Multinational dec-mcs
+# Macintosh (8 bit) macintosh
+# NeXT character set next
+# HP Roman8 hp-roman8
+# Chinese euc-cn
+# Japanese (EUC-JP) euc-jp
+# Japanese (Shift_JIS) shift_jis
+# Korean euc-kr
+# Taipei (Big5) big5
+# Vietnamese (VISCII) viscii
+# Eastern European (ISO-8859-2) iso-8859-2
+# Eastern European (cp852) cp852
+# Eastern European (windows-1250) windows-1250
+# Latin 3 (ISO-8859-3) iso-8859-3
+# Latin 4 (ISO-8859-4) iso-8859-4
+# Baltic Rim (ISO-8859-13) iso-8859-13
+# Baltic Rim (cp775) cp775
+# Baltic Rim (windows-1257) windows-1257
+# Celtic (ISO-8859-14) iso-8859-14
+# Cyrillic (ISO-8859-5) iso-8859-5
+# Cyrillic (cp866) cp866
+# Cyrillic (windows-1251) windows-1251
+# Cyrillic (KOI8-R) koi8-r
+# Arabic (ISO-8859-6) iso-8859-6
+# Arabic (cp864) cp864
+# Arabic (windows-1256) windows-1256
+# Greek (ISO-8859-7) iso-8859-7
+# Greek (cp737) cp737
+# Greek2 (cp869) cp869
+# Greek (windows-1253) windows-1253
+# Hebrew (ISO-8859-8) iso-8859-8
+# Hebrew (cp862) cp862
+# Hebrew (windows-1255) windows-1255
+# Turkish (ISO-8859-9) iso-8859-9
+# North European (ISO-8859-10) iso-8859-10
+# Ukrainian Cyrillic (cp866u) cp866u
+# Ukrainian Cyrillic (KOI8-U) koi8-u
+# UNICODE (UTF-8) utf-8
+# RFC 1345 w/o Intro mnemonic+ascii+0
+# RFC 1345 Mnemonic mnemonic
+# Transparent x-transparent
+.fi
+#
+# The value should be the MIME name of a character set recognized by
+# Lynx (case insensitive).
+# Find RFC 1345 at
+.url http://tools.ietf.org/html/rfc1345
+#
+CHARACTER_SET:iso-8859-1
+
+.h2 LOCALE_CHARSET
+# LOCALE_CHARSET overrides CHARACTER_SET if true, using the current locale to
+# lookup a MIME name that corresponds, and use that as the display charset.
+#
+# It also modifies the default value for ASSUME_CHARSET; it does not override
+# that setting.
+#
+# Note that while nl_langinfo(CODESET) itself is standardized, the return
+# values and their relationship to the locale value is not. GNU libiconv
+# happens to give useful values, but other implementations are not guaranteed
+# to do this.
+LOCALE_CHARSET:TRUE
+
+.h2 HTML5_CHARSETS
+# HTML5_CHARSETS is an alternative to ASSUME_CHARSET and ASSUME_LOCAL_CHARSET.
+# Those assume by default that the character set of an HTML document is (as is
+# standard in HTML4) ISO-8859-1, in the absence of locale information.
+#
+# HTML5 introduces a "compatibility" (sic) feature which assumes that the
+# default is Windows 1252. In the same way, it equates ISO-8859-4 and Windows
+# 1254. Finally, it also makes recommendations which selectively reinterpret
+# the locale encoding.
+#
+# This option currently implements only the equating of ISO-8859-1 and Windows
+# 1252.
+#
+#HTML5_CHARSETS:FALSE
+
+.h2 ASSUME_CHARSET
+# ASSUME_CHARSET changes the handling of documents which do not
+# explicitly specify a charset. Normally Lynx assumes that 8-bit
+# characters in those documents are encoded according to iso-8859-1
+# (the official default for the HTTP protocol). When ASSUME_CHARSET
+# is defined here or by an -assume_charset command line flag is in effect,
+# Lynx will treat documents as if they were encoded accordingly.
+# See above on how this interacts with "raw mode" and the Display
+# Character Set.
+# ASSUME_CHARSET can also be changed via the 'o'ptions menu but will
+# not be saved as permanent value in user's .lynxrc file to avoid more chaos.
+#
+#ASSUME_CHARSET:iso-8859-1
+
+.h2 ASSUMED_DOC_CHARSET_CHOICE
+.h2 DISPLAY_CHARSET_CHOICE
+# It is possible to reduce the number of charset choices in the 'O'ptions menu
+# for "display charset" and "assumed document charset" fields via
+# DISPLAY_CHARSET_CHOICE and ASSUMED_DOC_CHARSET_CHOICE settings correspondingly.
+# Each of these settings can be used several times to define the set of possible
+# choices for corresponding field. The syntax for the values is
+#
+# string | prefix* | *
+#
+# where
+#
+# 'string' is either the MIME name of charset or it's full name (listed
+# either in the left or in the right column of table of
+# recognized charsets), case-insensitive - e.g. 'Koi8-R' or
+# 'Cyrillic (KOI8-R)' (both without quotes),
+#
+# 'prefix' is any string, and such value will select all charsets having
+# the name with prefix matching given (case insensitive), i.e.,
+# for the charsets listed in the table of recognized charsets,
+#
+.ex
+# ASSUMED_DOC_CHARSET_CHOICE:cyrillic*
+# will be equal to specifying
+.ex 4
+# ASSUMED_DOC_CHARSET_CHOICE:cp866
+# ASSUMED_DOC_CHARSET_CHOICE:windows-1251
+# ASSUMED_DOC_CHARSET_CHOICE:koi8-r
+# ASSUMED_DOC_CHARSET_CHOICE:iso-8859-5
+# or lines with full names of charsets.
+#
+# literal string '*' (without quotes) will enable all charset choices
+# in corresponding field. This is useful for overriding site
+# defaults in private pieces of lynx.cfg included via INCLUDE
+# directive.
+#
+# Default values for both settings are '*', but any occurrence of settings
+# with values that denote any charsets will make only listed choices available
+# for corresponding field.
+#ASSUMED_DOC_CHARSET_CHOICE:*
+#DISPLAY_CHARSET_CHOICE:*
+
+.h2 ASSUME_LOCAL_CHARSET
+# ASSUME_LOCAL_CHARSET is like ASSUME_CHARSET but only applies to local
+# files. If no setting is given here or by an -assume_local_charset
+# command line option, the value for ASSUME_CHARSET or -assume_charset
+# is used. It works for both text/plain and text/html files.
+# This option will ignore "raw mode" toggling when local files are viewed
+# (it is "stronger" than "assume_charset" or the effective change
+# of the charset assumption caused by changing "raw mode"),
+# so only use when necessary.
+#
+#ASSUME_LOCAL_CHARSET:iso-8859-1
+
+.h2 PREPEND_CHARSET_TO_SOURCE
+# PREPEND_CHARSET_TO_SOURCE:TRUE tells Lynx to prepend a META CHARSET line
+# to text/html source files when they are retrieved for 'd'ownloading
+# or passed to 'p'rint functions, so HTTP headers will not be lost.
+# This is necessary for resolving charset for local html files,
+# while the assume_local_charset is just an assumption.
+# For the 'd'ownload option, a META CHARSET will be added only if the HTTP
+# charset is present. The compilation default is TRUE.
+# It is generally desirable to have charset information for every local
+# html file, but META CHARSET string potentially could cause
+# compatibility problems with other browsers, see also PREPEND_BASE_TO_SOURCE.
+# Note that the prepending is not done for -source dumps.
+#
+#PREPEND_CHARSET_TO_SOURCE:TRUE
+
+.h2 NCR_IN_BOOKMARKS
+# NCR_IN_BOOKMARKS:TRUE allows you to save 8-bit characters in bookmark titles
+# in the unicode format (NCR). This may be useful if you need to switch
+# display charsets frequently. This is the case when you use Lynx on different
+# platforms, e.g., on UNIX and from a remote PC, and want to keep the bookmarks
+# file persistent.
+# Another aspect is compatibility: NCR is part of I18N and HTML4.0
+# specifications supported starting with Lynx 2.7.2, Netscape 4.0 and MSIE 4.0.
+# Older browser versions will fail so keep NCR_IN_BOOKMARKS:FALSE if you
+# plan to use them.
+#
+#NCR_IN_BOOKMARKS:FALSE
+
+.h2 FORCE_8BIT_TOUPPER
+# FORCE_8BIT_TOUPPER overrides locale settings and uses internal 8-bit
+# case-conversion mechanism for case-insensitive searches in non-ASCII display
+# character sets. It is FALSE by default and should not be changed unless
+# you encounter problems with case-insensitive searches.
+#
+#FORCE_8BIT_TOUPPER:FALSE
+
+.h2 OUTGOING_MAIL_CHARSET
+# While Lynx supports different platforms and display character sets
+# we need to limit the charset in outgoing mail to reduce
+# trouble for remote recipients who may not recognize our charset.
+# You may try US-ASCII as the safest value (7 bit), any other MIME name,
+# or leave this field blank (default) to use the display character set.
+# Charset translations currently are implemented for mail "subjects= " only.
+#
+#OUTGOING_MAIL_CHARSET:
+
+.h2 ASSUME_UNREC_CHARSET
+# If Lynx encounters a charset parameter it doesn't recognize, it will
+# replace the value given by ASSUME_UNREC_CHARSET (or a corresponding
+# -assume_unrec_charset command line option) for it. This can be used
+# to deal with charsets unknown to Lynx, if they are "sufficiently
+# similar" to one that Lynx does know about, by forcing the same
+# treatment. There is no default, and you probably should leave this
+# undefined unless necessary.
+#
+#ASSUME_UNREC_CHARSET:iso-8859-1
+
+.h2 PREFERRED_LANGUAGE
+# PREFERRED_LANGUAGE is the language in MIME notation (e.g., "en",
+# "fr") which will be indicated by Lynx in its Accept-Language headers
+# as the preferred language. If available, the document will be
+# transmitted in that language. Users can override this setting via
+# the 'o'ptions menu and save that preference in their RC file.
+# This may be a comma-separated list of languages in decreasing preference.
+#
+#PREFERRED_LANGUAGE:en
+
+.h2 PREFERRED_CHARSET
+# PREFERRED_CHARSET specifies the character set in MIME notation (e.g.,
+# "ISO-8859-2", "ISO-8859-5") which Lynx will indicate you prefer in
+# requests to http servers using an Accept-Charsets header. Users can
+# change it via the 'o'ptions menu and save that preference in their RC file.
+# The value should NOT include "ISO-8859-1" or "US-ASCII",
+# since those values are always assumed by default.
+# If a file in that character set is available, the server will send it.
+# If no Accept-Charset header is present, the default is that any
+# character set is acceptable. If an Accept-Charset header is present,
+# and if the server cannot send a response which is acceptable
+# according to the Accept-Charset header, then the server SHOULD send
+# an error response with the 406 (not acceptable) status code, though
+# the sending of an unacceptable response is also allowed. See RFC 2068
+.url http://tools.ietf.org/html/rfc2068
+#
+#PREFERRED_CHARSET:
+
+.h2 CHARSETS_DIRECTORY
+# CHARSETS_DIRECTORY specifies the directory with the fonts (glyph data)
+# used by Lynx to switch the display-font to a font best suited for the
+# given document. The font should be in a format understood by the
+# platforms TTY-display-font-switching API. Currently supported on OS/2 only.
+#
+# Lynx expects the glyphs for the charset CHARSET with character cell
+# size HHHxWWW to be stored in a file HHHxWWW/CHARSET.fnt inside the directory
+# specified by CHARSETS_DIRECTORY. E.g., the font for koi8-r sized 14x9
+# should be in the file 14x9/koi8-r.fnt.
+#
+#CHARSETS_DIRECTORY:
+
+.h2 CHARSET_SWITCH_RULES
+# CHARSET_SWITCH_RULES hints lynx on how to choose the best display font given
+# the document encoding. This string is a sequence of chunks, each chunk
+# having the following form:
+#
+# IN_CHARSET1 IN_CHARSET2 ... IN_CHARSET5 :OUT_CHARSET
+#
+# For readability, one may insert arbitrary additional punctuation (anything
+# but : is ignored). E.g., if lynx is able to switch only to display charsets
+# cp866, cp850, cp852, and cp862, then the following setting may be useful
+# (split for readability):
+#
+# CHARSET_SWITCH_RULES: koi8-r ISO-8859-5 windows-1251 cp866u KOI8-U :cp866,
+# iso-8859-1 windows-1252 ISO-8859-15 :cp850,
+# ISO-8859-2 windows-1250 :cp852,
+# ISO-8859-8 windows-1255 :cp862
+#
+#CHARSET_SWITCH_RULES:
+
+.h1 Interaction
+
+.h2 URL_DOMAIN_PREFIXES
+.h2 URL_DOMAIN_SUFFIXES
+# URL_DOMAIN_PREFIXES and URL_DOMAIN_SUFFIXES are strings which will be
+# prepended (together with a scheme://) and appended to the first element
+# of command line or 'g'oto arguments which are not complete URLs and
+# cannot be opened as a local file (file://localhost/string). Both
+# can be comma-separated lists. Each prefix must end with a dot, each
+# suffix must begin with a dot, and either may contain other dots (e.g.,
+# .com.jp). The default lists are defined in userdefs.h and can be
+# replaced here. Each prefix will be used with each suffix, in order,
+# until a valid Internet host is created, based on a successful DNS
+# lookup (e.g., foo will be tested as www.foo.com and then www.foo.edu
+# etc.). The first element can include a :port and/or /path which will
+# be restored with the expanded host (e.g., wfbr:8002/dir/lynx will
+# become http://www.wfbr.edu:8002/dir/lynx). The prefixes will not be
+# used if the first element ends in a dot (or has a dot before the
+# :port or /path), and similarly the suffixes will not be used if the
+# the first element begins with a dot (e.g., .nyu.edu will become
+# http://www.nyu.edu without testing www.nyu.com). Lynx will try to
+# guess the scheme based on the first field of the expanded host name,
+# and use "http://" as the default (e.g., gopher.wfbr.edu or gopher.wfbr.
+# will be made gopher://gopher.wfbr.edu).
+#
+#URL_DOMAIN_PREFIXES:www.
+#URL_DOMAIN_SUFFIXES:.com,.edu,.net,.org
+
+.h2 FORMS_OPTIONS
+# Toggle whether the Options Menu is key-based or form-based;
+# the key-based version is available only if specified at compile time.
+#FORMS_OPTIONS:TRUE
+
+.h2 PARTIAL
+# Display partial pages while downloading
+#PARTIAL:TRUE
+
+.h2 PARTIAL_THRES
+# Set the threshold # of lines Lynx must render before it
+# redraws the screen in PARTIAL mode. Anything < 0 implies
+# use of the screen size.
+#PARTIAL_THRES:-1
+
+.h2 SHOW_KB_RATE
+# While getting large files, Lynx shows the approximate rate of transfer.
+# Set this to change the units shown. "Kilobytes" denotes 1024 bytes:
+# NONE to disable the display of transfer rate altogether.
+# TRUE or KB for Kilobytes/second.
+# FALSE or BYTES for bytes/second.
+# KB,ETA to show Kilobytes/second with estimated completion time.
+# BYTES,ETA to show BYTES/second with estimated completion time.
+# KB2,ETA to show Kilobytes/second with estimated completion time using 2-digits.
+# BYTES2,ETA to show BYTES/second with estimated completion time using 2-digits.
+# Note that the "ETA" values are available if USE_READPROGRESS was defined.
+#SHOW_KB_RATE:TRUE
+
+.h2 SHOW_KB_NAME
+# Set the abbreviation for Kilobytes (1024).
+# Quoting from
+.url http://www.romulus2.com/articles/guides/misc/bitsbytes.shtml
+# In December 1998, the International Electrotechnical Commission (IEC)
+# approved a new IEC International Standard. Instead of using the metric
+# prefixes for multiples in binary code, the new IEC standard invented specific
+# prefixes for binary multiples made up of only the first two letters of the
+# metric prefixes and adding the first two letters of the word "binary". Thus,
+# for instance, instead of Kilobyte (KB) or Gigabyte (GB), the new terms would
+# be kibibyte (KiB) or gibibyte (GiB).
+#
+# If you prefer using the conventional (and more common) "KB", modify this
+# setting.
+#SHOW_KB_NAME:KiB
+
+.h1 Timeouts
+
+.h2 INFOSECS
+.h2 MESSAGESECS
+.h2 ALERTSECS
+.h2 NO_PAUSE
+# The following definitions set the number of seconds for
+# pauses following statusline messages that would otherwise be
+# replaced immediately, and are more important than the unpaused
+# progress messages. Those set by INFOSECS are also basically
+# progress messages (e.g., that a prompted input has been canceled)
+# and should have the shortest pause. Those set by MESSAGESECS are
+# informational (e.g., that a function is disabled) and should have
+# a pause of intermediate duration. Those set by ALERTSECS typically
+# report a serious problem and should be paused long enough to read
+# whenever they appear (typically unexpectedly). The default values
+# are defined in userdefs.h, and can be modified here should longer
+# pauses be desired for braille-based access to Lynx.
+#
+# SVr4-curses implementations support time delays in milliseconds,
+# hence the value may be given shorter, e.g., 0.5
+#
+# Use the NO_PAUSE option (like the command-line -nopause) to override
+# all of the delay times.
+#
+#INFOSECS:1
+#MESSAGESECS:2
+#ALERTSECS:3
+NO_PAUSE:TRUE
+
+.h2 DEBUGSECS
+# Set DEBUGSECS to a nonzero value to slow down progress messages
+# (see "-delay" option).
+#DEBUGSECS:0
+
+.h2 REPLAYSECS
+# Set REPLAYSECS to a nonzero value to allow for slow replaying of
+# command scripts (see "-cmd_script" option).
+#REPLAYSECS:0
+
+.h1 Appearance
+# These settings control the appearance of Lynx's screen and the way
+# Lynx renders some tags.
+
+.h2 USE_SELECT_POPUPS
+# If USE_SELECT_POPUPS is set FALSE, Lynx will present a vertical list of
+# radio buttons for the OPTIONs in SELECT blocks which lack the MULTIPLE
+# attribute, instead of using a popup menu. Note that if the MULTIPLE
+# attribute is present in the SELECT start tag, Lynx always will create a
+# vertical list of checkboxes for the OPTIONs.
+# The default defined here or in userdefs.h can be changed via the 'o'ptions
+# menu and saved in the RC file, and always can be toggled via the -popup
+# command line switch.
+#
+#USE_SELECT_POPUPS:TRUE
+
+.h2 SHOW_CURSOR
+# SHOW_CURSOR controls whether or not the cursor is hidden or appears
+# over the current link in documents or the current option in popups.
+# Showing the cursor is handy if you are a sighted user with a poor
+# terminal that can't do bold and reverse video at the same time or
+# at all. It also can be useful to blind users, as an alternative
+# or supplement to setting LINKS_AND_FIELDS_ARE_NUMBERED or
+# LINKS_ARE_NUMBERED.
+# The default defined here or in userdefs.h can be changed via the
+# 'o'ptions menu and saved in the RC file, and always can be toggled
+# via the -show_cursor command line switch.
+#
+SHOW_CURSOR:TRUE
+
+.h2 UNDERLINE_LINKS
+# UNDERLINE_LINKS controls whether links are underlined by default, or shown
+# in bold. Normally this default is set from the configure script.
+#
+UNDERLINE_LINKS:TRUE
+
+.h2 BOLD_HEADERS
+# If BOLD_HEADERS is set to TRUE the HT_BOLD default style will be acted
+# upon for <H1> through <H6> headers. The compilation default is FALSE
+# (only the indentation styles are acted upon, but see BOLD_H1, below).
+# On Unix, compilation with -DUNDERLINE_LINKS also will apply to the
+# HT_BOLD style for headers when BOLD_HEADERS is TRUE.
+#
+#BOLD_HEADERS:FALSE
+
+.h2 BOLD_H1
+# If BOLD_H1 is set to TRUE the HT_BOLD default style will be acted
+# upon for <H1> headers even if BOLD_HEADERS is FALSE. The compilation
+# default is FALSE. On Unix, compilation with -DUNDERLINE_LINKS also
+# will apply to the HT_BOLD style for headers when BOLD_H1 is TRUE.
+#
+BOLD_H1:TRUE
+
+.h2 BOLD_NAME_ANCHORS
+# If BOLD_NAME_ANCHORS is set to TRUE the content of anchors without
+# an HREF attribute, (i.e., anchors with a NAME or ID attribute) will
+# have the HT_BOLD default style. The compilation default is FALSE.
+# On Unix, compilation with -DUNDERLINE_LINKS also will apply to the
+# HT_BOLD style for NAME (ID) anchors when BOLD_NAME_ANCHORS is TRUE.
+#
+#BOLD_NAME_ANCHORS:FALSE
+
+.h1 Internal Behavior
+
+.h2 DEFAULT_CACHE_SIZE
+.h2 DEFAULT_VIRTUAL_MEMORY_SIZE
+# The DEFAULT_CACHE_SIZE specifies the number of WWW documents to be
+# cached in memory at one time.
+#
+# This so-called cache size (actually, number) is defined in userdefs.h and
+# may be modified here and/or with the command line argument -cache=NUMBER
+# The minimum allowed value is 2, for the current document and at least one
+# to fetch, and there is no absolute maximum number of cached documents.
+# On Unix, and VMS not compiled with VAXC, whenever the number is exceeded
+# the least recently displayed document will be removed from memory.
+#
+# On VMS compiled with VAXC, the DEFAULT_VIRTUAL_MEMORY_SIZE specifies the
+# amount (bytes) of virtual memory that can be allocated and not yet be freed
+# before previous documents are removed from memory. If the values for both
+# the DEFAULT_CACHE_SIZE and DEFAULT_VIRTUAL_MEMORY_SIZE are exceeded, then
+# the least recently displayed documents will be freed until one or the other
+# value is no longer exceeded. The default value is defined in userdefs.h.
+#
+# The Unix and VMS (but not VAXC) implementations use the C library malloc's
+# and calloc's for memory allocation, but procedures for taking the actual
+# amount of cache into account still need to be developed. They use only
+# the DEFAULT_CACHE_SIZE value, and that specifies the absolute maximum
+# number of documents to cache (rather than the maximum number only if
+# DEFAULT_VIRTUAL_MEMORY_SIZE has been exceeded, as with VAXC/VAX).
+#
+#DEFAULT_CACHE_SIZE:10
+#DEFAULT_VIRTUAL_MEMORY_SIZE:512000
+
+.h2 SOURCE_CACHE
+# SOURCE_CACHE sets the source caching behavior for Lynx:
+#
+# FILE causes Lynx to keep a temporary file for each cached document
+# containing the HTML source of the document, which it uses to regenerate
+# the document when certain settings are changed (for instance,
+# historical vs. minimal vs. valid comment parsing) instead of reloading
+# the source from the network.
+#
+# MEMORY is like FILE, except the document source is kept in memory. You
+# may wish to adjust DEFAULT_CACHE_SIZE and DEFAULT_VIRTUAL_MEMORY_SIZE
+# accordingly.
+#
+# NONE is the default; the document source is not cached, and is reloaded
+# from the network when needed.
+#
+#SOURCE_CACHE:NONE
+
+.h2 SOURCE_CACHE_FOR_ABORTED
+# This setting controls what will happen with cached source for the document
+# being fetched from the net if fetching was aborted (either user pressed
+# 'z' or network went down). If set to KEEP, the source fetched so far will
+# be preserved (and used as cache), if set to DROP lynx will drop the
+# source cache for that document (i.e. only completely downloaded documents
+# will be cached in that case).
+#SOURCE_CACHE_FOR_ABORTED:DROP
+
+.h2 ALWAYS_RESUBMIT_POSTS
+# If ALWAYS_RESUBMIT_POSTS is set TRUE, Lynx always will resubmit forms
+# with method POST, dumping any cache from a previous submission of the
+# form, including when the document returned by that form is sought with
+# the PREV_DOC command or via the history list. Lynx always resubmits
+# forms with method POST when a submit button or a submitting text input
+# is activated, but normally retrieves the previously returned document
+# if it had links which you activated, and then go back with the PREV_DOC
+# command or via the history list.
+#
+# The default defined here or in userdefs.h can be toggled via
+# the -resubmit_forms command line switch.
+#
+#ALWAYS_RESUBMIT_POSTS:FALSE
+
+.h2 TRIM_INPUT_FIELDS
+# If TRIM_INPUT_FIELDS is set TRUE, Lynx will trim trailing whitespace (e.g.,
+# space, tab, carriage return, line feed and form feed) from the text entered
+# into form text and textarea fields. Older versions of Lynx do this trimming
+# unconditionally, but other browsers do not, which would yield different
+# behavior for CGI scripts.
+#TRIM_INPUT_FIELDS:FALSE
+
+.h1 HTML Parsing
+
+.h2 NO_ISMAP_IF_USEMAP
+# If NO_ISMAP_IF_USEMAP is set TRUE, Lynx will not include a link to the
+# server-side image map if both a server-side and client-side map for the
+# same image is indicated in the HTML markup. The compilation default is
+# FALSE, such that a link with "[ISMAP]" as the link name, followed by a
+# hyphen, will be prepended to the ALT string or "[USEMAP]" pseudo-ALT for
+# accessing Lynx's text-based rendition of the client-side map (based on
+# the content of the associated MAP element). If the "[ISMAP]" link is
+# activated, Lynx will send a 0,0 coordinate pair to the server, which
+# Lynx-friendly sites can map to a for-text-client document, homologous
+# to what is intended for the content of a FIG element.
+#
+# The compilation default, or default defined here, can be toggled via
+# the "-ismap" command line switch.
+#
+#NO_ISMAP_IF_USEMAP:FALSE
+
+.h2 SEEK_FRAG_MAP_IN_CUR
+# If SEEK_FRAG_MAP_IN_CUR is set FALSE, then USEMAP attribute values
+# (in IMG or OBJECT tags) consisting of only a fragment (USEMAP="#foo")
+# will be resolved with respect to the current document's base, which
+# might not be the same as the current document's URL.
+# The compilation default is to use the current document's URL in all
+# cases (i.e., assume the MAP is present below, if it wasn't present
+# above the point in the HTML stream where the USEMAP attribute was
+# detected). Lynx's present "single pass" rendering engine precludes
+# checking below before making the decision on how to resolve a USEMAP
+# reference consisting solely of a fragment.
+#
+#SEEK_FRAG_MAP_IN_CUR:TRUE
+
+.h2 SEEK_FRAG_AREA_IN_CUR
+# If SEEK_FRAG_AREA_IN_CUR is set FALSE, then HREF attribute values
+# in AREA tags consisting of only a fragment (HREF="#foo") will be
+# resolved with respect to the current document's base, which might
+# not be the same as the current document's URL. The compilation
+# default is to use the current document's URL, as is done for the
+# HREF attribute values of Anchors and LINKs that consist solely of
+# a fragment.
+#
+#SEEK_FRAG_AREA_IN_CUR:TRUE
+
+.h1 CGI scripts
+# These settings control Lynx's ability to execute various types of scripts.
+
+.h2 LOCAL_EXECUTION_LINKS_ALWAYS_ON
+.h2 LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE
+# Local execution links and scripts are by default completely disabled,
+# unless a change is made to the userdefs.h file to enable them or
+# the configure script is used with the corresponding options
+# (-enable-exec-links and -enable-exec-scripts).
+# See the Lynx source code distribution and the userdefs.h
+# file for more detail on enabling execution links and scripts.
+#
+# If you have enabled execution links or scripts the following
+# two variables control Lynx's action when an execution link
+# or script is encountered.
+#
+# If LOCAL_EXECUTION_LINKS_ALWAYS_ON is set to TRUE any execution
+# link or script will be executed no matter where it came from.
+# This is EXTREMELY dangerous. Since Lynx can access files from
+# anywhere in the world, you may encounter links or scripts that
+# will cause damage or compromise the security of your system.
+#
+# If LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE is set to TRUE only
+# links or scripts that reside on the local machine and are
+# referenced with a URL beginning with "file://localhost/" or meet
+# TRUSTED_EXEC or ALWAYS_TRUSTED_EXEC rules (see below) will be
+# executed. This is much less dangerous than enabling all execution
+# links, but can still be dangerous.
+#
+#LOCAL_EXECUTION_LINKS_ALWAYS_ON:FALSE
+#LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE:FALSE
+
+.h2 TRUSTED_EXEC
+# If LOCAL_EXECUTION_LINK_ON_BUT_NOT_REMOTE is TRUE, and no TRUSTED_EXEC
+# rule is defined, it defaults to "file://localhost/" and any lynxexec
+# or lynxprog command will be permitted if it was referenced from within
+# a document whose URL begins with that string. If you wish to restrict the
+# referencing URLs further, you can extend the string to include a trusted
+# path. You also can specify a trusted directory for http URLs, which will
+# then be treated as if they were local rather than remote. For example:
+#
+# TRUSTED_EXEC:file://localhost/trusted/
+# TRUSTED_EXEC:http://www.wfbr.edu/trusted/
+#
+# If you also wish to restrict the commands which can be executed, create
+# a series of rules with the path (Unix) or command name (VMS) following
+# the string, separated by a tab. For example:
+#
+# Unix:
+# ====
+# TRUSTED_EXEC:file://localhost/<tab>/bin/cp
+# TRUSTED_EXEC:file://localhost/<tab>/bin/rm
+# VMS:
+# ===
+# TRUSTED_EXEC:file://localhost/<tab>copy
+# TRUSTED_EXEC:file://localhost/<tab>delete
+#
+# Once you specify a TRUSTED_EXEC referencing string, the default is
+# replaced, and all the referencing strings you desire must be specified
+# as a series. Similarly, if you associate a command with the referencing
+# string, you must specify all of the allowable commands as a series of
+# TRUSTED_EXEC rules for that string. If you specify ALWAYS_TRUSTED_EXEC
+# rules below, you need not repeat them as TRUSTED_EXEC rules.
+#
+# If EXEC_LINKS and JUMPFILE have been defined, any lynxexec or lynxprog
+# URLs in that file will be permitted, regardless of other settings. If
+# you also set LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE:TRUE and a single
+# TRUSTED_EXEC rule that will always fail (e.g., "none"), then *ONLY* the
+# lynxexec or lynxprog URLs in JUMPFILE (and any ALWAYS_TRUSTED_EXEC rules,
+# see below) will be allowed. Note, however, that if Lynx was compiled with
+# CAN_ANONYMOUS_JUMP set to FALSE (default is TRUE), or -restrictions=jump
+# is included with the -anonymous switch at run time, then users of an
+# anonymous account will not be able to access the jumps file or enter
+# 'j'ump shortcuts, and this selective execution feature will be overridden
+# as well (i.e., they will only be able to access lynxexec or lynxprog
+# URLs which meet any ALWAYS_TRUSTED_EXEC rules).
+#
+#TRUSTED_EXEC:none
+
+.h2 ALWAYS_TRUSTED_EXEC
+# If EXEC_LINKS was defined, any lynxexec or lynxprog URL can be made
+# always enabled by an ALWAYS_TRUSTED_EXEC rule for it. This is useful for
+# anonymous accounts in which you have disabled execution links generally,
+# and may also have disabled jumps file links, but still want to allow
+# execution of particular utility scripts or programs. The format is
+# like that for TRUSTED_EXEC. For example:
+#
+# Unix:
+# ====
+# ALWAYS_TRUSTED_EXEC:file://localhost/<tab>/usr/local/kinetic/bin/usertime
+# ALWAYS_TRUSTED_EXEC:http://www.more.net/<tab>/usr/local/kinetic/bin/who.sh
+# VMS:
+# ===
+# ALWAYS_TRUSTED_EXEC:file://localhost/<tab>usertime
+# ALWAYS_TRUSTED_EXEC:http://www.more.net/<tab>show users
+#
+# The default ALWAYS_TRUSTED_EXEC rule is "none".
+#
+#ALWAYS_TRUSTED_EXEC:none
+
+.h2 TRUSTED_LYNXCGI
+# Unix:
+# =====
+# TRUSTED_LYNXCGI rules define the permitted sources and/or paths for
+# lynxcgi links (if LYNXCGI_LINKS is defined in userdefs.h). The format
+# is the same as for TRUSTED_EXEC rules (see above). Example rules:
+#
+# TRUSTED_LYNXCGI:file://localhost/
+# TRUSTED_LYNXCGI:<tab>/usr/local/etc/httpd/cgi-bin/
+# TRUSTED_LYNXCGI:file://localhost/<tab>/usr/local/www/cgi-bin/
+#
+# VMS:
+# ====
+# Do not define this.
+#
+# The default TRUSTED_LYNXCGI rule is "none".
+#
+TRUSTED_LYNXCGI:none
+
+.h2 LYNXCGI_ENVIRONMENT
+# Unix:
+# =====
+# LYNXCGI_ENVIRONMENT adds the current value of the specified
+# environment variable to the list of environment variables passed on to the
+# lynxcgi script. Useful variables are HOME, USER, etc... If proxies
+# are in use, and the script invokes another copy of lynx (or a program like
+# wget) in a subsidiary role, it can be useful to add http_proxy and other
+# *_proxy variables.
+#
+# VMS:
+# ====
+# Do not define this.
+#
+#LYNXCGI_ENVIRONMENT:
+
+.h2 LYNXCGI_DOCUMENT_ROOT
+# Unix:
+# =====
+# LYNXCGI_DOCUMENT_ROOT is the value of DOCUMENT_ROOT that will be passed
+# to lynxcgi scripts. If set and the URL has PATH_INFO data, then
+# PATH_TRANSLATED will also be generated. Examples:
+# LYNXCGI_DOCUMENT_ROOT:/usr/local/etc/httpd/htdocs
+# LYNXCGI_DOCUMENT_ROOT:/data/htdocs/
+#
+# VMS:
+# ====
+# Do not define this.
+#
+#LYNXCGI_DOCUMENT_ROOT:
+
+.h1 Cookies
+
+.h2 FORCE_SSL_COOKIES_SECURE
+# If FORCE_SSL_COOKIES_SECURE is set to TRUE, then SSL encrypted cookies
+# received from https servers never will be sent unencrypted to http
+# servers. The compilation default is to impose this block only if the
+# https server included a secure attribute for the cookie. The normal
+# default or that defined here can be toggled via the -force_secure
+# command line switch.
+#
+#FORCE_SSL_COOKIES_SECURE:FALSE
+
+.h1 Internal Behavior
+
+.h2 MAIL_SYSTEM_ERROR_LOGGING
+# MAIL_SYSTEM_ERROR_LOGGING will send a message to the owner of
+# the information, or ALERTMAIL if there is no owner, every time
+# that a document cannot be accessed!
+#
+# NOTE: This can generate A LOT of mail, be warned.
+#
+#MAIL_SYSTEM_ERROR_LOGGING:FALSE
+
+.h2 CHECKMAIL
+# If CHECKMAIL is set to TRUE, the user will be informed (via a statusline
+# message) about the existence of any unread mail at startup of Lynx, and
+# will get statusline messages if subsequent new mail arrives. If a jumps
+# file with a lynxprog URL for invoking mail is available, or your html
+# pages include an mail launch file URL, the user thereby can access mail
+# and read the messages. The checks and statusline reports will not be
+# performed if Lynx has been invoked with the -restrictions=mail switch.
+#
+# VMS USERS !!!
+# =============
+# New mail is normally broadcast as it arrives, via "unsolicited screen
+# broadcasts", which can be "wiped" from the Lynx display via the Ctrl-W
+# command. You may prefer to disable the broadcasts and use CHECKMAIL
+# instead (e.g., in a public account which will be used by people who
+# are ignorant about VMS).
+#
+#CHECKMAIL:FALSE
+
+.h1 News-groups
+
+.h2 NNTPSERVER
+# To enable news reading ability via Lynx, the environment variable NNTPSERVER
+# must be set so that it points to your site's NNTP server
+# (see Lynx Users Guide on environment variables).
+# Lynx respects RFC 1738
+.url http://tools.ietf.org/html/rfc1738
+# and does not accept a host field in news URLs (use nntp: instead of news: for
+# the scheme if you wish to specify an NNTP host in a URL, as explained in the
+# RFC). If you have not set the variable externally, you can set it at run
+# time via this configuration file. It will not override an external setting.
+# Note that on VMS it is set as a process logical rather than symbol, and will
+# outlive the Lynx image.
+# The news reading facility in Lynx is quite limited. Lynx does not provide a
+# full featured news reader with elaborate error checking and safety features.
+#
+#NNTPSERVER:news.server.dom
+
+.h2 LIST_NEWS_NUMBERS
+# If LIST_NEWS_NUMBERS is set TRUE, Lynx will use an ordered list and include
+# the numbers of articles in news listings, instead of using an unordered
+# list. The default is defined in userdefs.h, and can be overridden here.
+#
+#LIST_NEWS_NUMBERS:FALSE
+
+.h2 LIST_NEWS_DATES
+# If LIST_NEWS_DATES is set TRUE, Lynx will include the dates of articles in
+# news listings. The dates always are included in the articles, themselves.
+# The default is defined in userdefs.h, and can be overridden here.
+#
+#LIST_NEWS_DATES:FALSE
+
+.h2 NEWS_CHUNK_SIZE
+.h2 NEWS_MAX_CHUNK
+# NEWS_CHUNK_SIZE and NEWS_MAX_CHUNK regulate the chunking of news article
+# listings with inclusion of links for listing earlier and/or later articles.
+# The defaults are defined in HTNews.c as 30 and 40, respectively. If the
+# news group contains more than NEWS_MAX_CHUNK articles, they will be listed
+# in NEWS_CHUNK_SIZE chunks. You can change the defaults here, and/or on
+# the command line via -newschunksize=NUMBER and/or -newsmaxchunk=NUMBER
+# switches. Note that if the chunk size is increased, here or on the command
+# line, to a value greater than the current maximum, the maximum will be
+# increased to that number. Conversely, if the maximum is set to a number
+# less than the current chunk size, the chunk size will be reduced to that
+# number. Thus, you need use only one of the two switches on the command
+# line, based on the direction of intended change relative to the compilation
+# or configuration defaults. The compilation defaults ensure that there will
+# be at least 10 earlier articles before bothering to chunk and create a link
+# for earlier articles.
+#
+#NEWS_CHUNK_SIZE:30
+#NEWS_MAX_CHUNK:40
+
+.h2 NEWS_POSTING
+# Set NEWS_POSTING to FALSE if you do not want to support posting to
+# news groups via Lynx. If left TRUE, Lynx will use its news gateway to
+# post new messages or followups to news groups, using the URL schemes
+# described in the "Supported URLs" section of the online 'h'elp. The
+# posts will be attempted via the nntp server specified in the URL, or
+# if none was specified, via the NNTPSERVER configuration or environment
+# variable. Links with these URLs for posting or sending followups are
+# created by the news gateway when reading group listings or articles
+# from nntp servers if the server indicates that it permits posting.
+# The compilation default set in userdefs.h can be changed here. If
+# the default is TRUE, posting can still be disallowed via the
+# -restrictions command line switch.
+# The posting facility in Lynx is quite limited. Lynx does not provide a
+# full featured news poster with elaborate error checking and safety features.
+#
+#NEWS_POSTING:TRUE
+
+.h2 LYNX_SIG_FILE
+# LYNX_SIG_FILE defines the name of a file containing a signature which
+# can be appended to email messages and news postings or followups. The
+# user will be prompted whether to append it. It is sought in the home
+# directory. If it is in a subdirectory, begin it with a dot-slash
+# (e.g., ./lynx/.lynxsig). The definition is set in userdefs.h and can
+# be changed here.
+#
+#LYNX_SIG_FILE:.lynxsig
+
+.h1 Bibliographic Protocol (bibp scheme)
+
+.h2 BIBP_GLOBAL_SERVER
+# BIBP_GLOBAL_SERVER is the default global server for bibp: links, used
+# when a local bibhost or document-specified citehost is unavailable.
+# Set in userdefs.h and can be changed here.
+#BIBP_GLOBAL_SERVER:http://usin.org/
+
+.h2 BIBP_BIBHOST
+# BIBP_BIBHOST is the URL at which local bibp service may be found, if
+# it exists. Defaults to http://bibhost/ for protocol conformance, but
+# may be overridden here or via -bibhost parameter.
+#BIBP_BIBHOST:http://bibhost/
+
+.h1 Interaction
+# These settings control interaction of the user with lynx.
+
+.h2 SCROLLBAR
+# If SCROLLBAR is set TRUE, Lynx will show scrollbar on windows. With mouse
+# enabled, the scrollbar strip outside the bar is clickable, and scrolls the
+# window by pages. The appearance of the scrollbar can be changed from
+# LYNX_LSS file: define attributes scroll.bar, scroll.back (for the bar, and
+# for the strip along which the scrollbar moves).
+#SCROLLBAR:FALSE
+
+.h2 SCROLLBAR_ARROW
+# If SCROLLBAR_ARROW is set TRUE, Lynx's scrollbar will have arrows at the
+# ends. With mouse enabled, the arrows are clickable, and scroll the window by
+# 2 lines. The appearance of the scrollbar arrows can be changed from LYNX_LSS
+# file: define attributes scroll.arrow, scroll.noarrow (for enabled-arrows,
+# and disabled arrows). An arrow is "disabled" if the bar is at this end of
+# the strip.
+#SCROLLBAR_ARROW:TRUE
+
+.h2 USE_MOUSE
+# If Lynx is configured with ncurses, PDcurses or slang & USE_MOUSE is TRUE,
+# users can perform commands by left-clicking certain parts of the screen:
+# on a link = `g'oto + ACTIVATE (i.e., move highlight & follow the link);
+# on the top/bottom lines = PREV/NEXT_PAGE (i.e., go up/down 1 page);
+# on the top/bottom left corners = PREV/NEXT_DOC (i.e., go to the previous
+# document / undo goto previous document);
+# on the top/bottom right corners = HISTORY/VLINKS (i.e., call up the history
+# page or visited links page if on history page).
+# NB if the mouse is defined in this way, it will not be available
+# for copy/paste operations using the clipboard of a desktop manager:
+# for flexibility instead, use the command-line switch -use_mouse .
+#
+# ncurses and slang have built-in support for the xterm mouse protocol. In
+# addition, ncurses can be linked with the gpm mouse library, to automatically
+# provide support for this interface in applications such as Lynx. (Please
+# read the ncurses faq to work around broken gpm configurations packaged by
+# some distributors). PDCurses implements mouse support for win32 console
+# windows, as does slang.
+#USE_MOUSE:FALSE
+
+.h1 HTML Parsing
+# These settings control the way Lynx parses invalid HTML
+# and how it may resolve such issues.
+
+.h2 COLLAPSE_BR_TAGS
+# If COLLAPSE_BR_TAGS is set FALSE, Lynx will not collapse serial BR tags.
+# If set TRUE, two or more concurrent BRs will be collapsed into a single
+# line break. Note that the valid way to insert extra blank lines in HTML
+# is via a PRE block with only newlines in the block.
+#
+#COLLAPSE_BR_TAGS:TRUE
+
+.h2 TRIM_BLANK_LINES
+# If TRIM_BLANK_LINES is set FALSE, Lynx will not trim trailing blank lines
+# from the document. Also, Lynx will not collapse BR-tags onto the previous
+# line when it happens to be empty.
+#TRIM_BLANK_LINES:TRUE
+
+.h2 TAGSOUP
+# If TAGSOUP is set, Lynx uses the "Tag Soup DTD" rather than "SortaSGML".
+# The two approaches differ by the style of error detection and recovery.
+# Tag Soup DTD allows for improperly nested tags; SortaSGML is stricter.
+#TAGSOUP:FALSE
+
+.h1 Cookies
+
+.h2 SET_COOKIES
+# If SET_COOKIES is set FALSE, Lynx will ignore Set-Cookie headers
+# in http server replies. Note that if a COOKIE_FILE is in use (see
+# below) that contains cookies at startup, Lynx will still send those
+# persistent cookies in requests as appropriate. Setting SET_COOKIES
+# to FALSE just prevents accepting any new cookies from servers. To
+# prevent all cookie processing (sending *and* receiving) in a session,
+# make sure that PERSISTENT_COOKIES is not TRUE or that COOKIE_FILE does
+# not point to a file with cookies, in addition to setting SET_COOKIES
+# to FALSE.
+# The default is defined in userdefs.h, and can be overridden here,
+# and/or toggled via the -cookies command line switch.
+#
+#SET_COOKIES:TRUE
+
+.h2 ACCEPT_ALL_COOKIES
+# If ACCEPT_ALL_COOKIES is set TRUE, Lynx will accept cookies from all
+# domains with no user interaction. This is equivalent to automatically
+# replying to all cookie 'Allow?' prompts with 'A'lways. Note that it
+# does not preempt validity checking, which has to be controlled separately
+# (see below).
+# The default is defined in userdefs.h and can be overridden here, or
+# in the .lynxrc file via an o(ptions) screen setting. It may also be
+# toggled via the -accept_all_cookies command line switch.
+#
+#ACCEPT_ALL_COOKIES:FALSE
+
+.h2 COOKIE_ACCEPT_DOMAINS
+.h2 COOKIE_REJECT_DOMAINS
+# COOKIE_ACCEPT_DOMAINS and COOKIE_REJECT_DOMAINS are comma-delimited lists
+# of domains from which Lynx should automatically accept or reject cookies
+# without asking for confirmation. If the same domain is specified in both
+# lists, rejection will take precedence.
+# Note that in order to match cookies, domains have to be spelled out exactly
+# in the form in which they would appear on the Cookie Jar page (case is
+# insignificant). They are not wildcards. Domains that apply to more than
+# one host have a leading '.', but have to match *the cookie's* domain
+# exactly.
+#
+#COOKIE_ACCEPT_DOMAINS:
+#COOKIE_REJECT_DOMAINS:
+
+.h2 COOKIE_LOOSE_INVALID_DOMAINS
+.h2 COOKIE_STRICT_INVALID_DOMAINS
+.h2 COOKIE_QUERY_INVALID_DOMAINS
+# COOKIE_LOOSE_INVALID_DOMAINS, COOKIE_STRICT_INVALID_DOMAINS, and
+# COOKIE_QUERY_INVALID_DOMAINS are comma-delimited lists of domains.
+# They control the degree of validity checking that is applied to cookies
+# for the specified domains.
+# Note that in order to match cookies, domains have to be spelled out exactly
+# in the form in which they would appear on the Cookie Jar page (case is
+# insignificant). They are not wildcards. Domains that apply to more than
+# one host have a leading '.', but have to match *the cookie's* domain
+# exactly.
+# If a domain is set to strict checking, strict conformance to RFC 2109 will
+# be applied. A domain with loose checking will be allowed to set cookies
+# with an invalid path or domain attribute. All domains will default to
+# asking the user for confirmation in case of an invalid path or domain.
+# Cookie validity checking takes place as a separate step before the
+# final decision to accept or reject (see previous options), therefore
+# a cookie that passes validity checking may still be automatically
+# rejected or cause another prompt.
+#
+#COOKIE_LOOSE_INVALID_DOMAINS:
+#COOKIE_STRICT_INVALID_DOMAINS:
+#COOKIE_QUERY_INVALID_DOMAINS:
+
+.h2 MAX_COOKIES_DOMAIN
+.h2 MAX_COOKIES_GLOBAL
+.h2 MAX_COOKIES_BUFFER
+# MAX_COOKIES_DOMAIN,
+# MAX_COOKIES_GLOBAL and
+# MAX_COOKIES_BUFFER are limits on the total number of cookies for each domain,
+# globally, and the per-cookie buffer size. These limits are by default large
+# enough for reasonable usage; if they are very high, some sites may present
+# undue performance waste.
+#
+#MAX_COOKIES_DOMAIN:50
+#MAX_COOKIES_GLOBAL:500
+#MAX_COOKIES_BUFFER:4096
+
+.h2 PERSISTENT_COOKIES
+# PERSISTENT_COOKIES indicates that cookies should be read at startup from
+# the COOKIE_FILE, and saved at exit for storage between Lynx sessions.
+# It is not used if Lynx was compiled without USE_PERSISTENT_COOKIES.
+# The default is FALSE, so that the feature needs to be enabled here
+# explicitly if you want it.
+#
+#PERSISTENT_COOKIES:FALSE
+
+.h2 COOKIE_FILE
+# COOKIE_FILE is the default file from which persistent cookies are read
+# at startup (if the file exists), if Lynx was compiled with
+# USE_PERSISTENT_COOKIES and the PERSISTENT_COOKIES option is enabled.
+# The cookie file can also be specified in .lynxrc or on the command line.
+#
+#COOKIE_FILE:~/.lynx_cookies
+
+.h2 COOKIE_SAVE_FILE
+# COOKIE_SAVE_FILE is the default file in which persistent cookies are
+# stored at exit, if Lynx was compiled with USE_PERSISTENT_COOKIES and the
+# PERSISTENT_COOKIES option is enabled. The cookie save file can also be
+# specified on the command line.
+#
+# With an interactive Lynx session, COOKIE_SAVE_FILE will default to
+# COOKIE_FILE if it is not set. With a non-interactive Lynx session (e.g.,
+# -dump), cookies will only be saved to file if COOKIE_SAVE_FILE is set.
+#
+#COOKIE_SAVE_FILE:~/.lynx_cookies
+
+.h1 Mail-related
+
+.h2 SYSTEM_MAIL
+.h2 SYSTEM_MAIL_FLAGS
+# VMS:
+# ===
+# The mail command and qualifiers are defined in userdefs.h. Lynx
+# will spawn a subprocess to send replies and error messages. The
+# command, and qualifiers (if any), can be re-defined here. If
+# you use PMDF then headers will we passed via a header file.
+# If you use "generic" VMS MAIL, the subject will be passed on the
+# command line via a /subject="SUBJECT" qualifier, and inclusion
+# of other relevant headers may not be possible.
+# If your mailer uses another syntax, some hacking of the mailform()
+# mailmsg() and reply_by_mail() functions in LYMail.c, and send_file_to_mail()
+# function in LYPrint.c, may be required.
+#
+.ex 2
+#SYSTEM_MAIL:PMDF SEND
+#SYSTEM_MAIL_FLAGS:/headers
+#
+.ex 2
+#SYSTEM_MAIL:MAIL
+#SYSTEM_MAIL_FLAGS:
+#
+# Unix:
+#======
+# The mail path and flags normally are defined for sendmail (or submit
+# with MMDF) in userdefs.h. You can change them here, but should first
+# read the zillions of CERT advisories about security problems with Unix
+# mailers.
+#
+.ex 2
+#SYSTEM_MAIL:/usr/mmdf/bin/submit
+#SYSTEM_MAIL_FLAGS:-mlruxto,cc\*
+#
+.ex 2
+#SYSTEM_MAIL:/usr/sbin/sendmail
+#SYSTEM_MAIL_FLAGS:-t -oi
+#
+.ex 2
+#SYSTEM_MAIL:/usr/lib/sendmail
+#SYSTEM_MAIL_FLAGS:-t -oi
+#
+# Win32:
+#=======
+# The Win32 port assumes that the mailer cannot read via a pipe. That is, it
+# must read all information from files. The "sendmail" utility in the 2.8.1
+# release is able to work with that assumption. There is no way to tell the
+# Win32 port of Lynx to send its information to the sendmail utility via a
+# pipe.
+#
+# Please read sendmail.txt in the LYNX_W32.ZIP distribution
+.url http://invisible-mirror.net/archives/lynx/tarballs/lynx2.8.1_w32.zip
+.url ftp://ftp.invisible-island.net/lynx/tarballs/lynx2.8.1_w32.zip
+#
+# As an alternative, the newer "sendmail for windows" may be useful:
+.url http://glob.com.au/sendmail/
+#
+# See also BLAT_MAIL and ALT_BLAT_MAIL flags.
+#
+#SYSTEM_MAIL:sendmail -f me@my.host -h my.host -r my.smtp.mailer -m SMTP
+
+.h2 MAIL_ADRS
+# VMS ONLY:
+# ========
+# MAIL_ADRS is defined in userdefs.h and normally is structured for PMDF's
+# IN%"INTERNET_ADDRESS" scheme. The %s is replaced with the address given
+# by the user. If you are using a different Internet mail transport, change
+# the IN appropriately (e.g., to SMTP, MX, or WINS).
+#
+#MAIL_ADRS:"IN%%""%s"""
+
+.h2 USE_FIXED_RECORDS
+# VMS ONLY:
+# ========
+# If USE_FIXED_RECORDS is set to TRUE here or in userdefs.h, Lynx will
+# convert 'd'ownloaded binary files to FIXED 512 record format before saving
+# them to disk or acting on a DOWNLOADER option. If set to FALSE, the
+# headers of such files will indicate that they are Stream_LF with Implied
+# Carriage Control, which is incorrect, and can cause downloading software
+# to get confused and unhappy. If you do set it FALSE, you can use the
+# FIXED512.COM command file, which is included in this distribution, to do
+# the conversion externally.
+#
+#USE_FIXED_RECORDS:TRUE
+
+.h1 Keyboard Input
+# These settings control the way Lynx interprets user input.
+
+.h2 VI_KEYS_ALWAYS_ON
+.h2 EMACS_KEYS_ALWAYS_ON
+# Vi or Emacs movement keys, i.e. familiar hjkl or ^N^P^F^B .
+# These are defaults, which can be changed in the Options Menu or .lynxrc .
+VI_KEYS_ALWAYS_ON:TRUE
+#EMACS_KEYS_ALWAYS_ON:FALSE
+
+.h2 DEFAULT_KEYPAD_MODE
+# DEFAULT_KEYPAD_MODE may be set to NUMBERS_AS_ARROWS
+# or LINKS_ARE_NOT_NUMBERED (the same)
+# or LINKS_ARE_NUMBERED
+# or LINKS_AND_FIELDS_ARE_NUMBERED
+# or FIELDS_ARE_NUMBERED
+# to specify whether numbers (e.g. [10]) appear next to all links,
+# allowing immediate access by entering the number on the keyboard,
+# or numbers on the numeric key-pad work like arrows;
+# the "FIELDS" options cause form fields also to be numbered.
+# This may be overridden by the keypad_mode setting in .lynxrc,
+# and can also be changed via the Options Menu.
+#
+#DEFAULT_KEYPAD_MODE:NUMBERS_AS_ARROWS
+
+.h2 NUMBER_LINKS_ON_LEFT
+.h2 NUMBER_FIELDS_ON_LEFT
+# Denotes the position for link- and field-numbers (whether it is on the left
+# or right of the anchor). These are subject to DEFAULT_KEYPAD_MODE, which
+# determines whether numbers are shown.
+#NUMBER_LINKS_ON_LEFT:TRUE
+#NUMBER_FIELDS_ON_LEFT:TRUE
+
+.h2 DEFAULT_KEYPAD_MODE_IS_NUMBERS_AS_ARROWS
+# Obsolete form of DEFAULT_KEYPAD_MODE,
+# numbers work like arrows or numbered links.
+# Set to TRUE, indicates numbers act as arrows,
+# and set to FALSE indicates numbers refer to numbered links on the page.
+# LINKS_AND_FIELDS_ARE_NUMBERED cannot be set by this option because
+# it allows only two values (true and false).
+#
+#DEFAULT_KEYPAD_MODE_IS_NUMBERS_AS_ARROWS:TRUE
+
+.h2 CASE_SENSITIVE_ALWAYS_ON
+# The default search type.
+# This is a default that can be overridden by the user!
+#
+#CASE_SENSITIVE_ALWAYS_ON:FALSE
+
+.h1 Auxiliary Facilities
+
+.h2 DEFAULT_BOOKMARK_FILE
+# DEFAULT_BOOKMARK_FILE is the filename used for storing personal bookmarks.
+# It will be prepended by the user's home directory.
+# NOTE that a file ending in .html or other suffix mapped to text/html
+# should be used to ensure its treatment as HTML. The built-in default
+# is lynx_bookmarks.html. On both Unix and VMS, if a subdirectory off of
+# the HOME directory is desired, the path should begin with "./" (e.g.,
+# ./BM/lynx_bookmarks.html), but the subdirectory must already exist.
+# Lynx will create the bookmark file, if it does not already exist, on
+# the first ADD_BOOKMARK attempt if the HOME directory is indicated
+# (i.e., if the definition is just filename.html without any slashes),
+# but requires a pre-existing subdirectory to create the file there.
+# The user can re-define the default bookmark file, as well as a set
+# of sub-bookmark files if multiple bookmark file support is enabled
+# (see below), via the 'o'ptions menu, and can save those definitions
+# in the .lynxrc file.
+#
+#DEFAULT_BOOKMARK_FILE:lynx_bookmarks.html
+
+.h2 MULTI_BOOKMARK_SUPPORT
+# If MULTI_BOOKMARK_SUPPORT is set TRUE, and BLOCK_MULTI_BOOKMARKS (see
+# below) is FALSE, and sub-bookmarks exist, all bookmark operations will
+# first prompt the user to select an active sub-bookmark file or the
+# default bookmark file. FALSE is the default so that one (the default)
+# bookmark file will be available initially. The definition here will
+# override that in userdefs.h. The user can turn on multiple bookmark
+# support via the 'o'ptions menu, and can save that choice as the startup
+# default via the .lynxrc file. When on, the setting can be STANDARD or
+# ADVANCED. If SUPPORT is set to the latter, and the user mode also is
+# ADVANCED, the VIEW_BOOKMARK command will invoke a statusline prompt at
+# which the user can enter the letter token (A - Z) of the desired bookmark,
+# or '=' to get a menu of available bookmark files. The menu always is
+# presented in NOVICE or INTERMEDIATE mode, or if the SUPPORT is set to
+# STANDARD. No prompting or menu display occurs if only one (the startup
+# default) bookmark file has been defined (define additional ones via the
+# 'o'ptions menu). The startup default, however set, can be overridden on
+# the command line via the -restrictions=multibook or the -anonymous or
+# -validate switches.
+#
+#MULTI_BOOKMARK_SUPPORT:FALSE
+
+.h2 BLOCK_MULTI_BOOKMARKS
+# If BLOCK_MULTI_BOOKMARKS is set TRUE, multiple bookmark support will
+# be forced off, and cannot to toggled on via the 'o'ptions menu. The
+# compilation setting is normally FALSE, and can be overridden here.
+# It can also be set via the -restrictions=multibook or the -anonymous
+# or -validate command line switches.
+#
+#BLOCK_MULTI_BOOKMARKS:FALSE
+
+.h1 Interaction
+
+.h2 DEFAULT_USER_MODE
+# DEFAULT_USER_MODE sets the default user mode for Lynx users.
+# NOVICE shows a three line help message at the bottom of the screen.
+# INTERMEDIATE shows normal amount of help (one line).
+# ADVANCED help is replaced by the URL of the current link.
+#
+#DEFAULT_USER_MODE:NOVICE
+
+.h1 External Programs
+
+.h2 DEFAULT_EDITOR
+# If DEFAULT_EDITOR is defined, users may edit local documents with it
+# & it will also be used for sending mail messages.
+# If no editor is defined here or by the user,
+# the user will not be able to edit local documents
+# and a primitive line-oriented mail-input mode will be used.
+#
+# For sysadmins: do not define a default editor
+# unless you know EVERY user will know how to use it;
+# users can easily define their own editor in the Options Menu.
+#
+#DEFAULT_EDITOR:
+
+.h2 SYSTEM_EDITOR
+# SYSTEM_EDITOR behaves the same as DEFAULT_EDITOR,
+# except that it can't be changed by users.
+#
+#SYSTEM_EDITOR:
+
+.h3 POSITIONABLE_EDITOR
+# If POSITIONABLE_EDITOR is defined once or multiple times and if the same
+# editor is used as editor in lynx, lynx will use its features, i.e., adding an
+# option to set the initial line-position, when editing files and textarea.
+# The commented editors below are already known; there is no need to uncomment
+# them.
+#
+#POSITIONABLE_EDITOR:emacs
+#POSITIONABLE_EDITOR:jed
+#POSITIONABLE_EDITOR:jmacs
+#POSITIONABLE_EDITOR:joe
+#POSITIONABLE_EDITOR:jove
+#POSITIONABLE_EDITOR:jpico
+#POSITIONABLE_EDITOR:jstar
+#POSITIONABLE_EDITOR:nano
+#POSITIONABLE_EDITOR:pico
+#POSITIONABLE_EDITOR:rjoe
+#POSITIONABLE_EDITOR:vi
+
+.h1 Proxy
+
+.h2 HTTP_PROXY
+.h2 HTTPS_PROXY
+.h2 FTP_PROXY
+.h2 GOPHER_PROXY
+.h2 NEWSPOST_PROXY
+.h2 NEWSREPLY_PROXY
+.h2 NEWS_PROXY
+.h2 NNTP_PROXY
+.h2 SNEWSPOST_PROXY
+.h2 SNEWSREPLY_PROXY
+.h2 SNEWS_PROXY
+.h2 WAIS_PROXY
+.h2 FINGER_PROXY
+.h2 CSO_PROXY
+# Lynx version 2.2 and beyond supports the use of proxy servers that can act as
+# firewall gateways and caching servers. They are preferable to the older
+# gateway servers. Each protocol used by Lynx can be mapped separately using
+# PROTOCOL_proxy environment variables (see Lynx Users Guide). If you have not set
+# them externally, you can set them at run time via this configuration file.
+# They will not override external settings. The no_proxy variable can be used
+# to inhibit proxying to selected regions of the Web (see below). Note that on
+# VMS these proxy variables are set as process logicals rather than symbols, to
+# preserve lowercasing, and will outlive the Lynx image.
+#
+.ex 15
+#http_proxy:http://some.server.dom:port/
+#https_proxy:http://some.server.dom:port/
+#ftp_proxy:http://some.server.dom:port/
+#gopher_proxy:http://some.server.dom:port/
+#news_proxy:http://some.server.dom:port/
+#newspost_proxy:http://some.server.dom:port/
+#newsreply_proxy:http://some.server.dom:port/
+#snews_proxy:http://some.server.dom:port/
+#snewspost_proxy:http://some.server.dom:port/
+#snewsreply_proxy:http://some.server.dom:port/
+#nntp_proxy:http://some.server.dom:port/
+#wais_proxy:http://some.server.dom:port/
+#finger_proxy:http://some.server.dom:port/
+#cso_proxy:http://some.server.dom:port/
+#no_proxy:host.domain.dom
+
+.h2 NO_PROXY
+# The no_proxy variable can be a comma-separated list of strings defining
+# no-proxy zones in the DNS domain name space. If a tail substring of the
+# domain-path for a host matches one of these strings, transactions with that
+# node will not be proxied.
+.ex
+#no_proxy:domain.path1,path2
+#
+# A single asterisk as an entry will override all proxy variables and no
+# transactions will be proxied.
+.ex
+#no_proxy:*
+# This is the only allowed use of * in no_proxy.
+#
+# Warning: Note that setting 'il' as an entry in this list will block proxying
+# for the .mil domain as well as the .il domain. If the entry is '.il' this
+# will not happen.
+
+.h1 External Programs
+
+.h2 PRINTER
+.h2 DOWNLOADER
+.h2 UPLOADER
+# PRINTER, DOWNLOADER & UPLOADER DEFINITIONS:
+# Lynx has 4 pre-defined print options & 1 pre-defined download option,
+# which are called up on-screen when `p' or `d' are entered;
+# any number of options can be added by the user, as explained below.
+# Uploaders can be defined only for UNIX with DIRED_SUPPORT:
+# see the Makefile in the top directory & the header of src/LYUpload.c .
+#
+# For `p' pre-defined options are: `Save to local file', `E-mail the file',
+# `Print to screen' and `Print to local printer attached to vt100'.
+# `Print to screen' allows file transfers in the absence of alternatives
+# and is often the only option allowed here for anonymous users;
+# the 3rd & 4th options are not pre-defined for DOS/WINDOWS versions of Lynx.
+# For `d' the pre-defined option is: `Download to local file'.
+#
+# To define your own print or download option use the following formats:
+#
+# PRINTER:<name>:<command>:<option>:<lines/page>[:<environment>]
+#
+# DOWNLOADER:<name>:<command>:<option>[:<environment>]
+#
+# <name> is what you will see on the print/download screen.
+#
+# <command> is the command your system will execute:
+# the 1st %s in the command will be replaced
+# by the temporary filename used by Lynx;
+# a 2nd %s will be replaced by a filename of your choice,
+# for which Lynx will prompt, offering a suggestion.
+# On Unix, which has pipes, you may use a '|' as the first
+# character of the command, and Lynx will open a pipe to
+# the command.
+# If the command format of your printer/downloader requires
+# a different layout, you will need to use a script
+# (see the last 2 download examples below).
+#
+# <option> TRUE : the printer/downloader will always be ENABLED,
+# except that downloading is disabled when -validate is used;
+# FALSE : both will be DISABLED for anonymous users
+# and printing will be disabled when -noprint is used.
+#
+# <lines/page> (printers: optional) the number of lines/page (default 66):
+# used to compute the approximate output size
+# and prompt if the document is > 4 printer pages;
+# it uses current screen length for the computation
+# when `Print to screen' is selected.
+#
+# [:<environment>]
+# optional, if XWINDOWS then printer/downloader will be
+# enabled if DISPLAY environment variable IS defined and
+# disabled otherwise, if environment is NON_XWINDOWS
+# then printer/downloader will be enabled if DISPLAY
+# environment variable IS NOT defined and disabled otherwise,
+# for anything else or if environment is not specified
+# printer/downloader is always enabled.
+#
+# You must put the whole definition on one line;
+# if you use a colon, precede it with a backslash.
+#
+# `Printer' can be any file-handling program you find useful,
+# even if it does not physically print anything.
+#
+# Usually, down/up-loading involves the use of (e.g.) Ckermit or ZModem
+# to transfer files to a user's local machine over a serial link,
+# but download options do not have to be download-protocol programs.
+#
+# Printer examples:
+.ex 3
+#PRINTER:Computer Center printer:lpr -Pccprt %s:FALSE
+#PRINTER:Office printer:lpr -POffprt %s:TRUE
+#PRINTER:VMS printer:print /queue=cc$print %s:FALSE:58
+# If you have a very busy VMS print queue
+# and Lynx deletes the temporary files before they have been queued,
+# use the VMSPrint.com included in the distribution:
+.ex
+#PRINTER:Busy VMS printer:@Lynx_Dir\:VMSPrint sys$print %s:FALSE:58
+# To specify a print option at run-time:
+# NBB if you have ANONYMOUS users, DO NOT allow this option!
+.ex
+#PRINTER:Specify at run-time:echo -n "Enter a print command\: "; read word; sh -c "$word %s":FALSE
+# To pass to a sophisticated file viewer: -k suppresses invocation
+# of hex display mode if 8-bit or control characters are present;
+# +s invokes secure mode (see ftp://space.mit.edu/pub/davis/most):
+.ex
+#PRINTER:Use Most to view:most -k +s %s:TRUE:23
+#
+# Downloader examples:
+# in Kermit, -s %s is the filename sent, -a %s the filename on arrival
+# (if they are given in reverse order here, the command will fail):
+.ex
+#DOWNLOADER:Use Kermit to download to the terminal:kermit -i -s %s -a %s:TRUE
+# NB don't use -k with Most, so that binaries will invoke hexadecimal mode:
+.ex
+#DOWNLOADER:Use Most to view:most +s %s:TRUE
+# The following example gives wrong filenames
+# (`sz' doesn't support a suggested filename parameter):
+.ex
+#DOWNLOADER:Use Zmodem to download to the local terminal:sz %s:TRUE
+# The following example returns correct filenames
+# by using a script to make a subdirectory in /tmp,
+# but may conflict with very strong security or permissions restrictions:
+.ex
+#DOWNLOADER:Use Zmodem to download to the local terminal:set %s %s;td=/tmp/Lsz$$;mkdir $td;ln -s $1 $td/"$2";sz $td/"$2";rm -r $td:TRUE
+.ex 2
+#UPLOADER:Use Kermit to upload from your computer: kermit -i -r -a %s:TRUE
+#UPLOADER:Use Zmodem to upload from your computer: rz %s:TRUE
+#
+# Note for OS/390: /* S/390 -- gil -- 1464 */
+# The following is strongly recommended to undo ASCII->EBCDIC conversion.
+.ex
+#DOWNLOADER:Save OS/390 binary file: iconv -f IBM-1047 -t ISO8859-1 %s >%s:FALSE
+
+# Added by Red Hat:
+DOWNLOADER:View with less:less %s:TRUE
+
+.h1 Interaction
+
+.h2 NO_DOT_FILES
+# If NO_DOT_FILES is TRUE (normal default via userdefs.h), the user will not
+# be allowed to specify files beginning with a dot in reply to output filename
+# prompts, and files beginning with a dot (e.g., file://localhost/path/.lynxrc)
+# will not be included in the directory browser's listings. If set FALSE, you
+# can force it to be treated as TRUE via -restrictions=dotfiles. If set FALSE
+# and not forced TRUE, the user can regulate it via the 'o'ptions menu (and
+# may save the preference in the RC file).
+#
+#NO_DOT_FILES:TRUE
+
+.h1 Internal Behavior
+
+.h2 NO_FROM_HEADER
+# If NO_FROM_HEADER is set FALSE, From headers will be sent in transmissions
+# to http or https servers if the personal_mail_address has been defined via
+# the 'o'ptions menu. The compilation default is TRUE (no From header is
+# sent) and the default can be changed here. The default can be toggled at
+# run time via the -from switch. Note that transmissions of From headers
+# have become widely considered to create an invasion of privacy risk.
+#
+#NO_FROM_HEADER:TRUE
+
+.h2 NO_REFERER_HEADER
+# If NO_REFERER_HEADER is TRUE, Referer headers never will be sent in
+# transmissions to servers. Lynx normally sends the URL of the document
+# from which the link was derived, but not for startfile URLs, 'g'oto
+# URLs, 'j'ump shortcuts, bookmark file links, history list links, or
+# URLs that include the content from form submissions with method GET.
+# If left FALSE here, it can be set TRUE at run time via the -noreferer
+# switch.
+#
+#NO_REFERER_HEADER:FALSE
+
+.h1 Internal Behavior
+
+.h2 NO_FILE_REFERER
+# If NO_FILE_REFERER is TRUE, Referer headers never will be sent in
+# transmissions to servers for links or actions derived from documents
+# or forms with file URLs. This ensures that paths associated with
+# the local file system are never indicated to servers, even if
+# NO_REFERER_HEADER is FALSE. If set to FALSE here, it can still be
+# set TRUE at run time via the -nofilereferer switch.
+#
+#NO_FILE_REFERER:TRUE
+
+.h2 REFERER_WITH_QUERY
+# REFERER_WITH_QUERY controls what happens when the URL in a Referer
+# header to be sent would contain a query part in the form of a '?'
+# character followed by one or more attribute=value pairs. Query parts
+# often contain sensitive or personal information resulting from filling
+# out forms, or other info that allows tracking of a user's browsing path
+# through a site, an thus should not be put in a Referer header (which may
+# get sent to an unrelated third-party site). On the other hand, some
+# sites (improperly) rely on browsers sending Referer headers, even when
+# the user is coming from a page whose URL has a query part.
+#
+# If REFERER_WITH_QUERY is SEND, full Referer headers will be sent
+# including the query part (unless sending of Referer is disabled in
+# general, see NO_REFERER_HEADER above). If REFERER_WITH_QUERY is
+# PARTIAL, the Referer header will contain a partial URL, with the query
+# part stripped off. This is not strictly correct, but should satisfy
+# those sites that check only whether the user arrived at a page from an
+# "outside" link. If REFERER_WITH_QUERY is set to DROP (or anything else
+# unrecognized), the default, no Referer header is sent at all in this
+# situation.
+#
+#REFERER_WITH_QUERY:DROP
+
+.h1 Appearance
+
+.h2 VERBOSE_IMAGES
+# VERBOSE_IMAGES controls whether Lynx replaces [LINK], [INLINE] and [IMAGE]
+# (for images without ALT) with filenames of these images.
+# This can be useful in determining what images are important
+# and which are mere decorations, e.g. button.gif, line.gif,
+# provided the author uses meaningful names.
+#
+# The definition here will override the setting in userdefs.h.
+#
+#VERBOSE_IMAGES:TRUE
+
+.h2 MAKE_LINKS_FOR_ALL_IMAGES
+# If MAKE_LINKS_FOR_ALL_IMAGES is TRUE, all images will be given links
+# which can be ACTIVATEd. For inlines, the ALT or pseudo-ALT ("[INLINE]")
+# strings will be links for the resolved SRC rather than just text.
+# For ISMAP or other graphic links, ALT or pseudo-ALT ("[ISMAP]" or "[LINK]")
+# will have '-' and a link labeled "[IMAGE]" for the resolved SRC appended.
+# See also VERBOSE_IMAGES flag.
+#
+# The definition here will override that in userdefs.h
+# and can be toggled via an "-image_links" command-line switch.
+# The user can also use the LYK_IMAGE_TOGGLE key (default `*')
+# or `Show Images' in the Form-based Options Menu.
+#
+#MAKE_LINKS_FOR_ALL_IMAGES:FALSE
+
+.h2 MAKE_PSEUDO_ALTS_FOR_INLINES
+# If MAKE_PSEUDO_ALTS_FOR_INLINES is FALSE, inline images which don't specify
+# an ALT string will not have "[INLINE]" inserted as a pseudo-ALT,
+# i.e. they'll be treated as having ALT="".
+# Otherwise (if TRUE), pseudo-ALTs will be created for inlines,
+# so that they can be used as links to the SRCs.
+# See also VERBOSE_IMAGES flag.
+#
+# The definition here will override that in userdefs.h
+# and can be toggled via a "-pseudo_inlines" command-line switch.
+# The user can also use the LYK_INLINE_TOGGLE key (default `[')
+# or `Show Images' in the Form-based Options Menu.
+#
+#MAKE_PSEUDO_ALTS_FOR_INLINES:TRUE
+
+.h2 SUBSTITUTE_UNDERSCORES
+# If SUBSTITUTE_UNDERSCORES is TRUE, the _underline_ format will be used
+# for emphasis tags in dumps.
+#
+# The default defined here will override that in userdefs.h, and the user
+# can toggle the default via a "-underscore" command line switch.
+#
+#SUBSTITUTE_UNDERSCORES:FALSE
+
+.h1 Interaction
+
+.h2 QUIT_DEFAULT_YES
+# If QUIT_DEFAULT_YES is TRUE then when the QUIT command is entered, any
+# response other than n or N will confirm. It should be FALSE if you
+# prefer the more conservative action of requiring an explicit Y or y to
+# confirm. The default defined here will override that in userdefs.h.
+#
+#QUIT_DEFAULT_YES:TRUE
+
+.h1 HTML Parsing
+
+.h2 HISTORICAL_COMMENTS
+# If HISTORICAL_COMMENTS is TRUE, Lynx will revert to the "Historical"
+# behavior of treating any '>' as a terminator for comments, instead of
+# seeking a valid '-->' terminator (note that white space can be present
+# between the '--' and '>' in valid terminators). The compilation default
+# is FALSE.
+#
+# The compilation default, or default defined here, can be toggled via a
+# "-historical" command line switch, and via the LYK_HISTORICAL command key.
+#
+#HISTORICAL_COMMENTS:FALSE
+
+.h2 MINIMAL_COMMENTS
+# If MINIMAL_COMMENTS is TRUE, Lynx will not use Valid comment parsing
+# of '--' pairs as serial comments within an overall comment element,
+# and instead will seek only a '-->' terminator for the overall comment
+# element. This emulates the Netscape v2.0 comment parsing bug, and
+# will help Lynx cope with the use of dashes as "decorations", which
+# consequently has become common in so-called "Enhanced for Netscape"
+# pages. Note that setting Historical comments on will override the
+# Minimal or Valid setting.
+#
+# The compilation default for MINIMAL_COMMENTS is FALSE, but we'll
+# set it TRUE here, until Netscape gets its comment parsing right,
+# and "decorative" dashes cease to be so common.
+#
+# The compilation default, or default defined here, can be toggled via a
+# "-minimal" command line switch, and via the LYK_MINIMAL command key.
+#
+MINIMAL_COMMENTS:TRUE
+
+.h2 SOFT_DQUOTES
+# If SOFT_DQUOTES is TRUE, Lynx will emulate the invalid behavior of
+# treating '>' as a co-terminator of a double-quoted attribute value
+# and the tag which contains it, as was done in old versions of Netscape
+# and Mosaic. The compilation default is FALSE.
+#
+# The compilation default, or default defined here, can be toggled via
+# a "-soft_dquotes" command line switch.
+#
+#SOFT_DQUOTES:FALSE
+
+.h2 STRIP_DOTDOT_URLS
+# If STRIP_DOTDOT_URLS is TRUE, Lynx emulates the invalid behavior of many
+# browsers to strip a leading "../" segment from relative URLs in HTML
+# documents with a http or https base URL, if this would otherwise lead to
+# an absolute URLs with those characters still in it. Such URLs are normally
+# erroneous and not what is intended by page authors. Lynx will issue
+# a warning message when this occurs.
+#
+# If STRIP_DOTDOT_URLS is FALSE, Lynx will use those URLs for requests
+# without taking any special actions or issuing Warnings, in most cases
+# this will result in an error response from the server.
+#
+# Note that Lynx never tries to fix similar URLs for protocols other than
+# http and https, since they are less common and may actually be valid in
+# some cases.
+#
+#STRIP_DOTDOT_URLS:TRUE
+
+.h1 Appearance
+
+.h2 ENABLE_SCROLLBACK
+# If ENABLE_SCROLLBACK is TRUE, Lynx will clear the entire screen before
+# displaying each new screenful of text. Though less efficient for normal
+# use, this allows programs that maintain a buffer of previously-displayed
+# text to recognize the continuity of what has been displayed, so that
+# previous screenfuls can be reviewed by whatever method the program uses
+# to scroll back through previous text. For example, the PC comm program
+# QModem has a key that can be pressed to scroll back; if ENABLE_SCROLLBACK
+# is TRUE, pressing the scrollback key will access previous screenfuls which
+# will have been stored on the local PC and will therefore be displayed
+# instantaneously, instead of needing to be retransmitted by Lynx at the
+# speed of the comm connection (but Lynx will not know about the change,
+# so you must restore the last screen before resuming with Lynx commands).
+#
+# The default compilation or configuration setting can be toggled via an
+# "-enable_scrollback" command line switch.
+#
+#ENABLE_SCROLLBACK:FALSE
+
+.h2 SCAN_FOR_BURIED_NEWS_REFS
+# If SCAN_FOR_BURIED_NEWS_REFS is set to TRUE, Lynx will scan the bodies
+# of news articles for buried article and URL references and convert them
+# to links. The compilation default is TRUE, but some email addresses
+# enclosed in angle brackets ("<user@address>") might be converted to false
+# news links, and uuencoded messages might be corrupted. The conversion is
+# not done when the display is toggled to source or when 'd'ownloading, so
+# uuencoded articles can be saved intact regardless of these settings.
+#
+# The default setting can be toggled via a "-buried_news" command line
+# switch.
+#
+#SCAN_FOR_BURIED_NEWS_REFS:TRUE
+
+.h2 PREPEND_BASE_TO_SOURCE
+# If PREPEND_BASE_TO_SOURCE is set to FALSE, Lynx will not prepend a
+# Request URL comment and BASE element to text/html source files when
+# they are retrieved for 'd'ownloading or passed to 'p'rint functions.
+# The compilation default is TRUE. Note that this prepending is not
+# done for -source dumps, unless the -base switch also was included on
+# the command line, and the latter switch overrides the setting of the
+# PREPEND_BASE_TO_SOURCE configuration variable.
+#
+#PREPEND_BASE_TO_SOURCE:TRUE
+
+.h1 External Programs
+# MIME types and viewers!
+#
+# file extensions may be assigned to MIME types using
+# the SUFFIX: definition.
+#
+# NOTE: It is normally preferable to define new extension mappings in
+# EXTENSION_MAP files (see below) instead of here: Definitions
+# here are overridden by those in EXTENSION_MAP files and even by
+# some built-in defaults in src/HTInit.c. On the other hand,
+# definitions here allow some more fields that are not possible
+# in those files.
+#
+# Extension mappings have an effect mostly for ftp and local files,
+# they are NOT used to determine the type of content for URLs with
+# the http protocol. This is because HTTP servers already specify
+# the MIME type in the Content-Type header. [It may still be
+# necessary to set up an appropriate suffix for some MIME types,
+# even if they are accessed only via the HTTP protocol, if the viewer
+# (see below) for those MIME types requires a certain suffix for the
+# temporary file passed to it.]
+
+.h2 GLOBAL_EXTENSION_MAP
+.h2 PERSONAL_EXTENSION_MAP
+# The global and personal EXTENSION_MAP files allow you to assign extensions
+# to MIME types which will override any of the suffix maps in this (lynx.cfg)
+# configuration file, or in src/HTInit.c. See the example mime.types file
+# in the samples subdirectory.
+#
+# Unix:
+# ====
+#GLOBAL_EXTENSION_MAP:/usr/local/lib/mosaic/mime.types
+# VMS:
+# ===
+#GLOBAL_EXTENSION_MAP:Lynx_Dir:mime.types
+#
+# Unix (sought in user's home directory):
+#PERSONAL_EXTENSION_MAP:.mime.types
+# VMS (sought in user's sys$login directory):
+#PERSONAL_EXTENSION_MAP:mime.types
+
+.h2 SUFFIX_ORDER
+# With SUFFIX_ORDER the precedence of suffix mappings can be changed.
+# Two kinds of settings are recognized:
+#
+# PRECEDENCE_OTHER or PRECEDENCE_HERE
+# Suffix mappings can come from four sources: (1) SUFFIX rules
+# given here - see below, (2) built-in defaults (HTInit.c), and the
+# (3) GLOBAL_EXTENSION_MAP and (4) PERSONAL_EXTENSION_MAP files.
+# The order of precedence is normally as listed: (1) has the
+# *lowest*, (4) has the *highest* precedence if there are conflicts.
+# In other words, SUFFIX mappings here are overridden by conflicting
+# ones elsewhere. This default ordering is called PRECEDENCE_OTHER.
+# With PRECEDENCE_HERE, the order becomes (2) (3) (4) (1), i.e.
+# mappings here override others made elsewhere.
+#
+# NO_BUILTIN
+# This disables all built-in default rules. In other words, (2) in the
+# list above is skipped. Some recognition for compressed files (".gz",
+# ".Z") is still hardwired. A mapping for some basic types, at least
+# for text/html is probably necessary to get a usable configuration,
+# it can be given in a SUFFIX rule below or an extension map file.
+# Both kinds of settings can be combined, separated by comma as in
+# SUFFIX_ORDER:PRECEDENCE_HERE,NO_BUILTIN
+# Note: Using PRECEDENCE_HERE has only an effect on SUFFIX rules that follow.
+# Moreover, if GLOBAL_EXTENSION_MAP or PERSONAL_EXTENSION_MAP directives
+# are used, they should come *before* a SUFFIX_ORDER:PRECEDENCE_HERE.
+#
+#SUFFIX_ORDER:PRECEDENCE_OTHER
+
+.h2 SUFFIX
+# The SUFFIX definition takes the form of:
+#
+# SUFFIX:<file extension>:<mime type>:<encoding>:<quality>:<description>
+#
+# All fields after <mime type> are optional (including the separators
+# if no more fields follow).
+#
+# <file extension> trailing end of file name. This need not strictly
+# be a file extension as understood by the OS, a dot
+# has to be given explicitly if it is indented, for
+# some uses one could even match full filenames here.
+# In addition, two forms are special: "*.*" and "*"
+# refer to the defaults for otherwise unmatched files
+# (the first for filenames with a dot somewhere in
+# the name, the second without), these are currently
+# mapped to text/plain in the (HTInit.c) built-in code.
+# Lynx compares the file-extensions ignoring case.
+#
+# <mime type> a MIME content type. It can also contain a charset
+# parameter, see example below. This should be given in
+# all lowercase, use <description> for more fancy labels.
+# It can be left empty if an HTTP style encoding is given.
+#
+# Fields in addition to the usual ones are
+#
+# <encoding> either a mail style trivial encoding (7bit, 8bit, binary)
+# which could be used on some systems to determine how to
+# open local files (currently it isn't), and is used to
+# determine transfer mode for some FTP URLs; or a HTTP style
+# content encoding (gzip (equivalent to x-gzip), compress)
+#
+# <quality> a floating point quality factor, usually between 0.0 and 1.0
+# currently unused in most situations.
+#
+# <description> text that can appear in FTP directory listings, and in
+# local directory listings (see LIST_FORMAT, code %t)
+#
+# For instance the following definition maps the
+# extension ".gif" to the mime type "image/gif"
+.ex
+# SUFFIX:.gif:image/gif
+#
+# The following can be used if you have a convention to label
+# HTML files in some character set that differs from your local
+# default (see also ASSUME_LOCAL_CHARSET) with a different
+# extension, here ".html-u8". It also demonstrates use of the
+# description field, note extra separators for omitted fields:
+.ex
+# SUFFIX:.html-u8:text/html;charset=utf-8:::UTF-8 HTML
+#
+# The following shows how a suffix can indicate a combination
+# of MIME type and compression method. (The ending ".ps.gz" should
+# already be recognized by default; the form below could be used on
+# systems that don't allow more than one dot in filenames.)
+.ex
+# SUFFIX:.ps_gz:application/postscript:gzip::gzip'd Postscript
+#
+# The following is meant to match a full filename (but can match
+# any file ending in "core", so be careful):
+.ex
+# SUFFIX:core:application/x-core-file
+#
+# file suffixes are case INsensitive!
+#
+# The suffix definitions listed here in the default lynx.cfg file are
+# similar to those normally established via src/HTInit.c. You can change
+# the defaults by editing that file or disable them, or via the global or
+# personal mime.types files at run time (except for the additional fields).
+# Assignments made here are overridden by entries in those files
+# unless preceded with a SUFFIX_ORDER:PRECEDENCE_HERE.
+#
+.ex 29
+#SUFFIX:.ps:application/postscript
+#SUFFIX:.eps:application/postscript
+#SUFFIX:.ai:application/postscript
+#SUFFIX:.rtf:application/rtf
+#SUFFIX:.snd:audio/basic
+#SUFFIX:.gif:image/gif
+#SUFFIX:.rgb:image/x-rgb
+#SUFFIX:.png:image/png
+#SUFFIX:.xbm:image/x-xbitmap
+#SUFFIX:.tiff:image/tiff
+#SUFFIX:.jpg:image/jpeg
+#SUFFIX:.jpeg:image/jpeg
+#SUFFIX:.mpg:video/mpeg
+#SUFFIX:.mpeg:video/mpeg
+#SUFFIX:.mov:video/quicktime
+#SUFFIX:.hqx:application/mac-binhex40
+#SUFFIX:.bin:application/octet-stream
+#SUFFIX:.exe:application/octet-stream
+#SUFFIX:.tar:application/x-tar
+#SUFFIX:.tgz:application/x-tar:gzip
+#SUFFIX:.Z::compress
+#SUFFIX:.gz::gzip
+#SUFFIX:.bz2:application/x-bzip2
+#SUFFIX:.zip:application/zip
+#SUFFIX:.lzh:application/x-lzh
+#SUFFIX:.lha:application/x-lha
+#SUFFIX:.dms:application/x-dms
+#SUFFIX:.html:text/html
+#SUFFIX:.txt:text/plain
+
+.h2 XLOADIMAGE_COMMAND
+# VMS:
+# ====
+# XLOADIMAGE_COMMAND will be used as a default in src/HTInit.c
+# for viewing image content types when the DECW$DISPLAY logical
+# is set. Make it the foreign command for your system's X image
+# viewer (commonly, "xv"). It can be anything that will handle GIF,
+# TIFF and other popular image formats. Freeware ports of xv for
+# VMS were available in the ftp://ftp.wku.edu/vms/unsupported and
+# http://www.openvms.digital.com/cd/XV310A/ subdirectories. You
+# must also have a "%s" for the filename. The default is defined
+# in userdefs.h and can be overridden here, or via the global or
+# personal mailcap files (see below).
+#
+# Make this empty (but not commented out) if you don't have such a viewer or
+# want to disable the built-in default viewer mappings for image types.
+#
+#XLOADIMAGE_COMMAND:xv %s
+#
+# Unix:
+# =====
+# XLOADIMAGE_COMMAND will be used as a default in src/HTInit.c for
+# viewing image content types when the DISPLAY environment variable
+# is set. Make it the full path and name of the xli (also know as
+# xloadimage or xview) command, or other image viewer. It can be
+# anything that will handle GIF, TIFF and other popular image formats
+# (xli does). The freeware distribution of xli is available in the
+# ftp://ftp.x.org/contrib subdirectory. The shareware, xv, also is
+# suitable. You must also have a "%s" for the filename; "&" for
+# background is optional. The default is defined in userdefs.h and can be
+# overridden here, or via the global or personal mailcap files (see below).
+# Make this empty (but not commented out) if you don't have such a
+# viewer or don't want to disable the built-in default viewer
+# mappings for image types.
+# Note that open is used as the default for NeXT, instead of the
+# XLOADIMAGE_COMMAND definition.
+# If you use xli, you may want to add the -quiet flag.
+#
+#XLOADIMAGE_COMMAND:xli %s &
+
+.h2 VIEWER
+# MIME types may be assigned to external viewers using
+# the VIEWER definition.
+#
+# NOTE: if you do not define a viewer to a new MIME type
+# that you assigned above then it will be saved to
+# disk by default.
+# It is normally preferable to define new viewers in
+# MAILCAP files (see below) instead of here: Definitions
+# here are overridden by those in MAILCAP files and even
+# by some built-in defaults in src/HTInit.c.
+#
+# The VIEWER definition takes the form of:
+# VIEWER:<mime type>:<viewer command>[:<environment>]
+# where -mime type is the MIME content type of the file
+# -viewer command is a system command that can be
+# used to display the file where %s is replaced
+# within the command with the physical filename
+# (e.g., "ghostview %s" becomes "ghostview /tmp/temppsfile")
+# -environment is optional. The only valid keywords
+# are currently XWINDOWS and NON_XWINDOWS. If the XWINDOWS
+# environment is specified then the viewer will only be
+# defined when the user has the environment variable DISPLAY
+# (DECW$DISPLAY on VMS) defined. If the NON_XWINDOWS environment
+# is specified the specified viewer will only be defined when the
+# user DOES NOT have the environment variable DISPLAY defined.
+# examples:
+# VIEWER:image/gif:xli %s:XWINDOWS
+# VIEWER:image/gif:ascii-view %s:NON_XWINDOWS
+# VIEWER:application/start-elm:elm
+#
+# You must put the whole definition on one line.
+#
+# If you must use a colon in the viewer command, precede it with a backslash!
+#
+# The MIME_type:viewer:XWINDOWS definitions listed here in the lynx.cfg
+# file are among those established via src/HTInit.c. For the image types,
+# HTInit.c uses the XLOADIMAGE_COMMAND definition in userdefs.h or above
+# (open is used for NeXT). You can change any of these defaults via the
+# global or personal mailcap files. Assignments made here will be overridden
+# by entries in those files.
+#
+.ex 7
+#VIEWER:application/postscript:ghostview %s&:XWINDOWS
+#VIEWER:image/gif:xli %s&:XWINDOWS
+#VIEWER:image/x-xbm:xli %s&:XWINDOWS
+#VIEWER:image/png:xli %s&:XWINDOWS
+#VIEWER:image/tiff:xli %s&:XWINDOWS
+#VIEWER:image/jpeg:xli %s&:XWINDOWS
+#VIEWER:video/mpeg:mpeg_play %s &:XWINDOWS
+
+.h2 GLOBAL_MAILCAP
+.h2 PERSONAL_MAILCAP
+# The global and personal MAILCAP files allow you to specify external
+# viewers to be spawned when Lynx encounters different MIME types, which
+# will override any of the suffix maps in this (lynx.cfg) configuration
+# file, or in src/HTInit.c. See
+.url http://tools.ietf.org/html/rfc1524
+# and the example mailcap file in the samples subdirectory.
+#
+# Unix:
+# ====
+#GLOBAL_MAILCAP:/usr/local/lib/mosaic/mailcap
+# VMS:
+# ===
+#GLOBAL_MAILCAP:Lynx_Dir:mailcap
+#
+# Sought in user's home (Unix) or sys$login (VMS) directory.
+#PERSONAL_MAILCAP:.mailcap
+
+.h2 PREFERRED_MEDIA_TYPES
+# When doing a GET, lynx lists the MIME types which it knows how to present
+# (the "Accept:" string). Depending on your system configuration, the
+# mime.types or other data given by the GLOBAL_EXTENSION_MAP may include many
+# entries that lynx really does not handle. Use this option to select one
+# of the built-in subsets of the MIME types that lynx could list in the
+# Accept.
+#
+# Values for this option are keywords:
+# INTERNAL lynx's built-in types for internal conversions
+# CONFIGFILE adds lynx.cfg
+# USER adds PERSONAL_EXTENSION_MAP settings
+# SYSTEM adds GLOBAL_EXTENSION_MAP settings
+# ALL adds lynx's built-in types for external conversions
+#
+#PREFERRED_MEDIA_TYPES:internal
+
+.h2 PREFERRED_ENCODING
+# When doing a GET, lynx tells what types of compressed data it can decompress
+# (the "Accept-Encoding:" string). This is determined by compiled-in support
+# for decompression or external decompression programs.
+#
+# Values for this option are keywords:
+# NONE Do not request compressed data
+# GZIP For gzip
+# COMPRESS For compress
+# BZIP2 For bzip2
+# ALL All of the above.
+#PREFERRED_ENCODING:all
+
+.h2 PREFERRED_CONTENT_TYPE
+# When doing a GET, lynx expects the server to provide a Content-Type, i.e.,
+# the MIME name which tells it how to present data. When that is missing
+# lynx uses this value.
+#PREFERRED_CONTENT_TYPE: text/plain
+
+.h1 Keyboard Input
+
+.h2 KEYBOARD_LAYOUT
+# If your terminal (or terminal emulator, or operating system) does not
+# support 8-bit input (at all or in easy way), you can use Lynx to
+# generate 8-bit characters from 7-bit ones output by terminal.
+#
+# Currently available keyboard layouts:
+# ROT13'd keyboard layout
+# JCUKEN Cyrillic, for AT 101-key kbd
+# YAWERTY Cyrillic, for DEC LK201 kbd
+#
+# This feature is ifdef'd with EXP_KEYBOARD_LAYOUT.
+#KEYBOARD_LAYOUT:JCUKEN Cyrillic, for AT 101-key kbd
+
+.h2 KEYMAP
+# Key remapping definitions!
+#
+# You may redefine the keymapping of any function in Lynx by
+# using the KEYMAP option. The basic form of KEYMAP is:
+# KEYMAP:<KEYSTROKE>:<LYNX FUNCTION>
+# (See below for an extended format.)
+#
+# You must map upper and lowercase keys separately.
+#
+# A representative list of functions mapped to their default keys is
+# provided below. All of the mappings are commented out by default
+# since they just repeat the default mappings, except for TOGGLE_HELP
+# (see below). See LYKeymap.c for the complete key mapping. Use the
+# 'K'eymap command when running Lynx for a list of the _current_ keymappings.
+#
+# You can disable any of the default key-mappings by mapping the key to
+# "UNMAPPED".
+#
+# (However, in contrast to the output of 'K' command,
+# 'H'elp (lynx_help/*.html and lynx_help/keystrokes/*.html files) shows
+# the default mapping unless you change that files manually,
+# so you are responsible for possible deviations
+# when you are changing any KEYMAP below).
+#
+# Lynx accepts special keys either by name, or by lynx-specific codes. These
+# names and codes are listed below, with a brief description:
+.nf
+# UPARROW: 0x100 (Up Arrow)
+# DNARROW: 0x101 (Down Arrow)
+# RTARROW: 0x102 (Right Arrow)
+# LTARROW: 0x103 (Left Arrow)
+# PGDOWN: 0x104 (Page Down)
+# PGUP: 0x105 (Page Up)
+# HOME: 0x106 (Keypad Home)
+# END: 0x107 (Keypad End)
+# F1: 0x108 (VT220 Function-key 1, also Help Key)
+# DO_KEY: 0x109 (VT220 Function key 16, also "Do" Key)
+# FIND_KEY: 0x10A (VT220 key with label "Home" may be treated as Find)
+# SELECT_KEY: 0x10B (VT220 key with label "End" may be treated as Select)
+# INSERT_KEY: 0x10C (VT220 Insert Key)
+# REMOVE_KEY: 0x10D (VT220 Remove (DEL) Key)
+# DO_NOTHING: 0x10E (reserved for internal use, DO_NOTHING)
+# BACKTAB_KEY: 0x10F (Back Tab, e.g., using Shift)
+# F2: 0x110 (VT220 Function-key 2)
+# F3: 0x111 (VT220 Function-key 3)
+# F4: 0x112 (VT220 Function-key 4)
+# F5: 0x113 (VT220 Function-key 5)
+# F6: 0x114 (VT220 Function-key 6)
+# F7: 0x115 (VT220 Function-key 7)
+# F8: 0x116 (VT220 Function-key 8)
+# F9: 0x117 (VT220 Function-key 9)
+# F10: 0x118 (VT220 Function-key 10)
+# F11: 0x119 (VT220 Function-key 11)
+# F12: 0x11A (VT220 Function-key 12)
+# MOUSE: 0x11D (reserved for internal use with -use_mouse)
+.fi
+# Other codes not listed above may be available for additional keys,
+# depending on operating system and libraries used to compile Lynx.
+# On Unix-like systems, if compiled with slang or ncurses, an additional
+# level of key mapping is supported via an external ".lynx-keymaps" file.
+# This file, if found in the home directory at startup, will always be
+# used under those conditions; see lynx-keymaps distributed in the samples
+# subdirectory for further explanation. Note that mapping via
+# .lynx-keymaps, if applicable, is a step that logically comes before the
+# mappings done here: KEYMAP maps the result of that step (which still
+# represents a key) to a function (which represents an action that Lynx
+# should perform).
+.nf
+#
+#KEYMAP:0x5C:SOURCE # Toggle source viewing mode (show HTML source)
+#KEYMAP:^R:RELOAD # Reload the current document and redisplay
+#KEYMAP:^U:NEXT_DOC # Undo PREV_DOC)
+#KEYMAP:q:QUIT # Ask the user to quit
+#KEYMAP:Q:ABORT # Quit without verification
+#KEYMAP:0x20:NEXT_PAGE # Move down to next page
+#KEYMAP:-:PREV_PAGE # Move up to previous page
+#KEYMAP:^P:UP_TWO # Move display up two lines
+#KEYMAP:INSERT_KEY:UP_TWO # Function key Insert - Move display up two lines
+#KEYMAP:^N:DOWN_TWO # Move display down two lines
+#KEYMAP:REMOVE_KEY:DOWN_TWO # Function key Remove - Move display down two lines
+#KEYMAP:(:UP_HALF # Move display up half a page
+#KEYMAP:):DOWN_HALF # Move display down half a page
+#KEYMAP:^W:REFRESH # Refresh the screen
+#KEYMAP:^A:HOME # Go to top of current document
+#KEYMAP:HOME:HOME # Keypad Home - Go to top of current document
+#KEYMAP:FIND_KEY:HOME # Function key Find - Go to top of current document
+#KEYMAP:^E:END # Go to bottom of current document
+#KEYMAP:END:END # Keypad End - Go to bottom of current document
+#KEYMAP:SELECT_KEY:END # Function key Select - Go to bottom of current document
+#KEYMAP:UPARROW:PREV_LINK # Move to the previous link or page
+#KEYMAP:DNARROW:NEXT_LINK # Move to the next link or page
+#KEYMAP:BACKTAB_KEY:FASTBACKW_LINK # Back Tab - Move to previous link or text area
+#KEYMAP:^I:FASTFORW_LINK # Tab key - Move always to next link or text area
+#KEYMAP:^:FIRST_LINK # Move to the first link on line
+#KEYMAP:$:LAST_LINK # Move to the last link on line
+#KEYMAP:<:UP_LINK # Move to the link above
+#KEYMAP:>:DOWN_LINK # Move to the link below
+#KEYMAP:0x7F:HISTORY # Show the history list
+#KEYMAP:0x08:HISTORY # Show the history list
+#KEYMAP:LTARROW:PREV_DOC # Return to the previous document in history stack
+#KEYMAP:RTARROW:ACTIVATE # Select the current link
+#KEYMAP:DO_KEY:ACTIVATE # Function key Do - Select the current link
+#KEYMAP:g:GOTO # Goto a random URL
+#KEYMAP:G:ECGOTO # Edit the current document's URL and go to it
+#KEYMAP:H:HELP # Show default help screen
+#KEYMAP:F1:DWIMHELP # Function key Help - Show a help screen
+#KEYMAP:i:INDEX # Show default index
+#*** Edit FORM_LINK_* messages in LYMessages_en.h if you change NOCACHE ***
+#KEYMAP:x:NOCACHE # Force submission of form or link with no-cache
+#*** Do not change INTERRUPT from 'z' & 'Z' ***
+#KEYMAP:z:INTERRUPT # Interrupt network transmission
+#KEYMAP:m:MAIN_MENU # Return to the main menu
+#KEYMAP:o:OPTIONS # Show the options menu
+#KEYMAP:i:INDEX_SEARCH # Search a server based index
+#KEYMAP:/:WHEREIS # Find a string within the current document
+#KEYMAP:n:NEXT # Find next occurrence of string within document
+#KEYMAP:c:COMMENT # Comment to the author of the current document
+#KEYMAP:C:CHDIR # Change current directory
+#KEYMAP:e:EDIT # Edit current document or form's textarea (call: ^Ve)
+#KEYMAP:E:ELGOTO # Edit the current link's URL or ACTION and go to it
+#KEYMAP:=:INFO # Show info about current document
+#KEYMAP:p:PRINT # Show print options
+#KEYMAP:a:ADD_BOOKMARK # Add current document to bookmark list
+#KEYMAP:v:VIEW_BOOKMARK # View the bookmark list
+#KEYMAP:V:VLINKS # List links visited during the current Lynx session
+#KEYMAP:!:SHELL # Spawn default shell
+#KEYMAP:d:DOWNLOAD # Download current link
+#KEYMAP:j:JUMP # Jump to a predefined target
+#KEYMAP:k:KEYMAP # Display the current key map
+#KEYMAP:l:LIST # List the references (links) in the current document
+#KEYMAP:#:TOOLBAR # Go to the Toolbar or Banner in the current document
+#KEYMAP:^T:TRACE_TOGGLE # Toggle detailed tracing for debugging
+#KEYMAP:;:TRACE_LOG # View trace log if available for the current session
+#KEYMAP:*:IMAGE_TOGGLE # Toggle inclusion of links for all images
+#KEYMAP:[:INLINE_TOGGLE # Toggle pseudo-ALTs for inlines with no ALT string
+#KEYMAP:]:HEAD # Send a HEAD request for current document or link
+#*** Must be compiled with USE_EXTERNALS to enable EXTERN_LINK, EXTERN_PAGE ***
+#KEYMAP:,:EXTERN_PAGE # Run external program with current page
+#KEYMAP:.:EXTERN_LINK # Run external program with current link
+#*** Escaping from text input fields with ^V is independent from this: ***
+#KEYMAP:^V:SWITCH_DTD # Toggle between SortaSGML and TagSoup HTML parsing
+#KEYMAP:0x00:DO_NOTHING # Does nothing (ignore this key)
+#KEYMAP:DO_NOTHING:DO_NOTHING # Does nothing (ignore this key)
+#KEYMAP:{:SHIFT_LEFT # shift the screen left
+#KEYMAP:}:SHIFT_RIGHT # shift the screen right
+#KEYMAP:|:LINEWRAP_TOGGLE # toggle linewrap on/off, for shift-commands
+#KEYMAP:~:NESTED_TABLES # toggle nested-tables parsing on/off
+.fi
+# In addition to the bindings available by default, the following functions
+# are not directly mapped to any keys by default, although some of them may
+# be mapped in specific line-editor bindings (effective while in text input
+# fields):
+.nf
+#
+#KEYMAP:???:RIGHT_LINK # Move to the link to the right
+#KEYMAP:???:LEFT_LINK # Move to the link to the left
+#KEYMAP:???:LPOS_PREV_LINK # Like PREV_LINK, last column pos if form input
+#KEYMAP:???:LPOS_NEXT_LINK # Like NEXT_LINK, last column pos if form input
+#*** Only useful in form text fields , need PASS or prefixing with ^V: ***
+#KEYMAP:???:DWIMHELP # Display help page that may depend on context
+#KEYMAP:???:DWIMEDIT # Use external editor for context-dependent purpose
+#*** Only useful in a form textarea, need PASS or prefixing with ^V: ***
+#KEYMAP:???:EDITTEXTAREA # use external editor to edit a form textarea
+#KEYMAP:???:GROWTEXTAREA # Add some blank lines to bottom of textarea
+#KEYMAP:???:INSERTFILE # Insert file into a textarea (just above cursor)
+#*** Only useful with dired support and OK_INSTALL: ***
+#KEYMAP:???:INSTALL # install (i.e. copy) local files to new location
+.fi
+#
+# If TOGGLE_HELP is mapped, in novice mode the second help menu line
+# can be toggled among NOVICE_LINE_TWO_A, _B, and _C, as defined in
+# LYMessages_en.h Otherwise, it will be NOVICE_LINE_TWO.
+#
+#KEYMAP:O:TOGGLE_HELP # Show other commands in the novice help menu
+#
+# KEYMAP lines can have one or two additional fields. The extended format is
+# KEYMAP:<KEYSTROKE>:[<MAIN LYNX FUNCTION>]:<OTHER BINDING>[:<SELECT>]
+#
+# If the additional field OTHER BINDING specifies DIRED, then the function is
+# mapped in the override table used only in DIRED mode. This is only valid
+# if lynx was compiled with dired support and OK_OVERRIDE defined. A
+# MAIN LYNX FUNCTION must be given (it should of course be one that makes
+# sense in Dired mode), and SELECT is meaningless. Default built-in override
+# mappings are
+#
+#KEYMAP:^U:NEXT_DOC:DIRED # Undo going back to the previous document
+#KEYMAP:.:TAG_LINK:DIRED # Tag a file or directory for later action
+#KEYMAP:c:CREATE:DIRED # Create a new file or directory
+#KEYMAP:C:CHDIR:DIRED # change current directory
+#KEYMAP:f:DIRED_MENU:DIRED # Display a menu of file operations
+#KEYMAP:m:MODIFY:DIRED # Modify name or location of a file or directory
+#KEYMAP:r:REMOVE:DIRED # Remove files or directories
+#KEYMAP:t:TAG_LINK:DIRED # Tag a file or directory for later action
+#KEYMAP:u:UPLOAD:DIRED # Show menu of "Upload Options"
+#
+# If the OTHER BINDING field does not specify DIRED, then it is taken as a
+# line-editor action. It is possible to keep the MAIN LYNX FUNCTION field
+# empty in that case, for changing only the line-editing behavior.
+# If alternative line edit styles are compiled in, and modifying a key's
+# line-editor binding on a per style basis is possible, then SELECT can be
+# used to specify which styles are affected. By default, or if SELECT is
+# 0, all line edit styles are affected. If SELECT is a positive integer
+# number, only the binding for the numbered style is changed (numbering
+# is in the order in which styles are shown in the Options Menu, starting
+# with 1 for the Default style). If SELECT is negative (-n), all styles
+# except n are affected.
+.nf
+#
+# NOP # Do Nothing
+# ABORT # Input cancelled
+#
+# BOL # Go to begin of line
+# EOL # Go to end of line
+# FORW # Cursor forwards
+# FORW_RL # Cursor forwards or right link
+# BACK # Cursor backwards
+# FORWW # Word forward
+# BACKW # Word back
+# BACK_LL # Cursor backwards or left link
+#
+# DELN # Delete next/curr char
+# DELP # Delete prev char
+# DELNW # Delete next word
+# DELPW # Delete prev word
+# DELBL # Delete back to BOL
+# DELEL # Delete thru EOL
+# ERASE # Erase the line
+# LOWER # Lower case the line
+# UPPER # Upper case the line
+#
+# LKCMD # In fields: Invoke key command prompt (default for ^V)
+# PASS # In fields: handle as non-lineedit key; in prompts: ignore
+#
+.fi
+# Modify following key (prefixing only works within line-editing, edit actions
+# of some resulting prefixed keys are built-in, see Line Editor help pages)
+# SETM1 # Set modifier 1 flag (default for ^X - key prefix)
+# SETM2 # Set modifier 2 flag (another key prefix - same effect)
+#
+# May not always be compiled in:
+.nf
+#
+# TPOS # Transpose characters
+# SETMARK # emacs-like set-mark-command
+# XPMARK # emacs-like exchange-point-and-mark
+# KILLREG # emacs-like kill-region
+# YANK # emacs-like yank
+# SWMAP # Switch input keymap
+# PASTE # ClipBoard to Lynx - Windows Extension
+#
+.fi
+# May work differently from expected if not bound to their expected keys:
+.nf
+#
+# CHAR # Insert printable char (default for all ASCII printable)
+# ENTER # Input complete, return char/lynxkeycode (for RETURN/ENTER)
+# TAB # Input complete, return TAB (for ASCII TAB char ^I)
+#
+.fi
+# Internal use, probably not useful for binding, listed for completeness:
+.nf
+#
+# UNMOD # Fall back to no-modifier command
+# AIX # Hex 97
+# C1CHAR # Insert C1 char if printable
+#
+.fi
+# If OTHER BINDING specifies PASS, then if the key is pressed in a text input
+# field it is passed by the built-in line-editor to normal KEYMAP handling,
+# i.e. this flag acts like an implied ^V escape (always overrides line-editor
+# behavior of the key). For example,
+#KEYMAP:INSERT_KEY:UP_TWO:PASS # Function key Insert - Move display up two lines
+#
+# Other examples (repeating built-in bindings)
+#KEYMAP:^V::LKCMD # set (only) line-edit action for ^V
+#KEYMAP:^V:SWITCH_DTD:LKCMD # set main lynxaction and line-edit action for ^V
+#KEYMAP:^U::ERASE:1 # set line-edit binding for ^U, for default style
+#KEYMAP:^[::SETM2:3 # use escape key as modifier - works only sometimes
+
+.h1 External Programs
+# These settings control the ability of Lynx to invoke various programs for
+# the user.
+
+.h2 CSWING_PATH
+# VMS ONLY:
+#==========
+# On VMS, CSwing (an XTree emulation for VTxxx terminals) is intended for
+# use as the Directory/File Manager (sources, objects, or executables were
+# available from ftp://narnia.memst.edu/). CSWING_PATH should be defined
+# here or in userdefs.h to your foreign command for CSwing, with any
+# regulatory switches you want included. If not defined, or defined as
+# a zero-length string ("") or "none" (case-insensitive), the support
+# will be disabled. It will also be disabled if the -nobrowse or
+# -selective switches are used, or if the file_url restriction is set.
+#
+# When enabled, the DIRED_MENU command (normally 'f' or 'F') will invoke
+# CSwing, normally with the current default directory as an argument to
+# position the user on that node of the directory tree. However, if the
+# current document is a local directory listing, or a local file and not
+# one of the temporary menu or list files, the associated directory will
+# be passed as an argument, to position the user on that node of the tree.
+#
+#CSWING_PATH:swing
+
+.h1 Internal Behavior
+
+.h2 AUTO_UNCACHE_DIRLISTS
+# AUTO_UNCACHE_DIRLISTS determines when local file directory listings are
+# automatically regenerated (by re-reading the actual directory from disk).
+# Set the value to 0 to avoid automatic regeneration in most cases. This is
+# useful for browsing large directories that take some time to read and format.
+# An update can still always be forced with the RELOAD key, and specific DIRED
+# actions may cause a refresh anyway. Set the value to 1 to force regeneration
+# after commands that usually change the directory or some files and would make
+# the displayed info stale, like EDIT and REMOVE. Set it to 2 (the default) or
+# greater to force regeneration even after leaving the displayed directory
+# listing by some action that usually causes no change, like GOTO or entering a
+# file with the ACTIVATE key. This option is only honored in DIRED mode (i.e.
+# when lynx is compiled with DIRED_SUPPORT and it is not disabled with a
+# -restriction). Local directories displayed without DIRED normally act as if
+# AUTO_UNCACHE_DIRLISTS:0 was in effect.
+#
+#AUTO_UNCACHE_DIRLISTS:2
+
+.h1 Appearance
+
+.h2 LIST_FORMAT
+# LIST_FORMAT defines the display for local files when Lynx has been
+# compiled with LONG_LIST defined in the Makefile. The default is set
+# in userdefs.h, normally to "ls -l" format, and can be changed here
+# by uncommenting the indicated lines, or adding a definition with a
+# modified parameter list.
+#
+# This feature is not available for VMS.
+#
+# The percent items in the list are interpreted as follows:
+.nf
+#
+# %p Unix-style permission bits
+# %l link count
+# %o owner of file
+# %g group of file
+# %d date of last modification
+# %a anchor pointing to file or directory
+# %A as above but don't show symbolic links
+# %t type of file (description derived from MIME type)
+# %T MIME type as known by Lynx (from mime.types or default)
+# %k size of file in Kilobytes
+# %K as above but omit size for directories
+# %s size of file in bytes
+#
+.fi
+# Anything between the percent and the letter is passed on to sprintf.
+# A double percent yields a literal percent on output. Other characters
+# are passed through literally.
+#
+# If you want only the filename:
+#
+.ex
+#LIST_FORMAT: %a
+#
+# If you want a brief output:
+#
+.ex
+#LIST_FORMAT: %4K %-12.12d %a
+#
+# If you want the Unix "ls -l" format:
+#
+.ex
+#LIST_FORMAT: %p %4l %-8.8o %-8.8g %7s %-12.12d %a
+
+.h1 External Programs
+
+.h2 DIRED_MENU
+# Unix ONLY:
+#===========
+# DIRED_MENU items are used to compose the F)ull menu list in DIRED mode
+# The behavior of the default configuration given here is much the same
+# as it was when this menu was hard-coded but these items can now be adjusted
+# to suit local needs. In particular, many of the LYNXDIRED actions can be
+# replaced with lynxexec, lynxprog and lynxcgi script references.
+#
+# NOTE that defining even one DIRED_MENU line overrides all the built-in
+# definitions, so a complete set must then be defined here.
+#
+# Each line consists of the following fields:
+.nf
+#
+# DIRED_MENU:type:suffix:link text:extra text:action
+#
+# type: TAG: list only when one or more files are tagged
+# FILE: list only when the current selection is a regular file
+# DIR: list only when the current selection is a directory
+# LINK: list only when the current selection is a symbolic link
+#
+# suffix: list only if the current selection ends in this pattern
+#
+# link text: the displayed text of the link
+#
+# extra text: the text displayed following the link
+#
+# action: the URL to be followed upon selection
+#
+# link text and action are scanned for % sequences that are expanded
+# at display time as follows:
+#
+# %p path of current selection
+# %f filename (last component) of current selection
+# %t tagged list (full paths)
+# %l list of tagged file names
+# %d the current directory
+#
+.fi
+#DIRED_MENU:::New File:(in current directory):LYNXDIRED://NEW_FILE%d
+#DIRED_MENU:::New Directory:(in current directory):LYNXDIRED://NEW_FOLDER%d
+#
+# Following depends on OK_INSTALL
+#DIRED_MENU:FILE::Install:selected file to new location:LYNXDIRED://INSTALL_SRC%p
+#DIRED_MENU:DIR::Install:selected directory to new location:LYNXDIRED://INSTALL_SRC%p
+#
+#DIRED_MENU:FILE::Modify File Name:(of current selection):LYNXDIRED://MODIFY_NAME%p
+#DIRED_MENU:DIR::Modify Directory Name:(of current selection):LYNXDIRED://MODIFY_NAME%p
+#DIRED_MENU:LINK::Modify Name:(of selected symbolic link):LYNXDIRED://MODIFY_NAME%p
+#
+# Following depends on OK_PERMIT
+#DIRED_MENU:FILE::Modify File Permissions:(of current selection):LYNXDIRED://PERMIT_SRC%p
+#DIRED_MENU:DIR::Modify Directory Permissions:(of current selection):LYNXDIRED://PERMIT_SRC%p
+#
+#DIRED_MENU:FILE::Change Location:(of selected file):LYNXDIRED://MODIFY_LOCATION%p
+#DIRED_MENU:DIR::Change Location:(of selected directory):LYNXDIRED://MODIFY_LOCATION%p
+#DIRED_MENU:LINK::Change Location:(of selected symbolic link):LYNXDIRED://MODIFY_LOCATION%p
+#DIRED_MENU:FILE::Remove File:(current selection):LYNXDIRED://REMOVE_SINGLE%p
+#DIRED_MENU:DIR::Remove Directory:(current selection):LYNXDIRED://REMOVE_SINGLE%p
+#DIRED_MENU:LINK::Remove Symbolic Link:(current selection):LYNXDIRED://REMOVE_SINGLE%p
+#
+# Following depends on OK_UUDECODE and !ARCHIVE_ONLY
+#DIRED_MENU:FILE::UUDecode:(current selection):LYNXDIRED://UUDECODE%p
+#
+# Following depends on OK_TAR and !ARCHIVE_ONLY
+#DIRED_MENU:FILE:.tar.Z:Expand:(current selection):LYNXDIRED://UNTAR_Z%p
+#
+# Following depend on OK_TAR and OK_GZIP and !ARCHIVE_ONLY
+#DIRED_MENU:FILE:.tar.gz:Expand:(current selection):LYNXDIRED://UNTAR_GZ%p
+#DIRED_MENU:FILE:.tgz:Expand:(current selection):LYNXDIRED://UNTAR_GZ%p
+#
+# Following depends on !ARCHIVE_ONLY
+#DIRED_MENU:FILE:.Z:Uncompress:(current selection):LYNXDIRED://DECOMPRESS%p
+#
+# Following depends on OK_GZIP and !ARCHIVE_ONLY
+#DIRED_MENU:FILE:.gz:Uncompress:(current selection):LYNXDIRED://UNGZIP%p
+#
+# Following depends on OK_ZIP and !ARCHIVE_ONLY
+#DIRED_MENU:FILE:.zip:Uncompress:(current selection):LYNXDIRED://UNZIP%p
+#
+# Following depends on OK_TAR and !ARCHIVE_ONLY
+#DIRED_MENU:FILE:.tar:UnTar:(current selection):LYNXDIRED://UNTAR%p
+#
+# Following depends on OK_TAR
+#DIRED_MENU:DIR::Tar:(current selection):LYNXDIRED://TAR%p
+#
+# Following depends on OK_TAR and OK_GZIP
+#DIRED_MENU:DIR::Tar and compress:(using GNU gzip):LYNXDIRED://TAR_GZ%p
+#
+# Following depends on OK_ZIP
+#DIRED_MENU:DIR::Package and compress:(using zip):LYNXDIRED://ZIP%p
+#
+#DIRED_MENU:FILE::Compress:(using Unix compress):LYNXDIRED://COMPRESS%p
+#
+# Following depends on OK_GZIP
+#DIRED_MENU:FILE::Compress:(using gzip):LYNXDIRED://GZIP%p
+#
+# Following depends on OK_ZIP
+#DIRED_MENU:FILE::Compress:(using zip):LYNXDIRED://ZIP%p
+#
+#DIRED_MENU:TAG::Move all tagged items to another location.::LYNXDIRED://MOVE_TAGGED%d
+#
+# Following depends on OK_INSTALL
+#DIRED_MENU:TAG::Install tagged files into another directory.::LYNXDIRED://INSTALL_SRC%00
+#
+#DIRED_MENU:TAG::Remove all tagged files and directories.::LYNXDIRED://REMOVE_TAGGED
+#DIRED_MENU:TAG::Untag all tagged items.::LYNXDIRED://CLEAR_TAGGED
+
+.h1 Internal Behavior
+
+.h2 NONRESTARTING_SIGWINCH
+# Some systems only:
+#===================
+# Lynx tries to detect window size changes with a signal handler for
+# SIGWINCH if supported. If NONRESTARTING_SIGWINCH is set to TRUE,
+# and the sigaction interface is available on the system, the handler
+# is installed as 'non-restarting'. On some systems (depending on the
+# library used for handling keyboard input, e.g. ncurses), this allows
+# more immediate notification of window size change events. If the value
+# is set to FALSE, the signal() interface is used; this normally makes
+# the handler 'restarting', with the effect that lynx can react to size
+# changes only after some key is pressed. The value can also be set to
+# XWINDOWS; this is equivalent to TRUE when the user has the environment
+# variable DISPLAY defined *at program start*, and equivalent to FALSE
+# otherwise. The non-restarting behavior can also be changed to TRUE
+# or FALSE with the -nonrestarting_sigwinch switch, which overrides the
+# value in this file.
+#
+# Note that Lynx never re-parses document text purely as a result of a
+# window size change, so text lines may appear truncated after narrowing
+# the window, until the document is reloaded with ^R or a similar key
+# or until a different text is loaded.
+#
+# The default is FALSE since there is a possibility that non-restarting
+# interrupts may be mis-interpreted as fatal input errors in some
+# configurations (leading to an abrupt program exit), and since this
+# option is useful mostly only for users running Lynx under xterm or a
+# similar X terminal emulator. On systems where the preconditions don't
+# apply this option is ignored.
+#
+#NONRESTARTING_SIGWINCH:FALSE
+
+.h2 NO_FORCED_CORE_DUMP
+# Unix ONLY:
+#===========
+# If NO_FORCED_CORE_DUMP is set to TRUE, Lynx will not force
+# core dumps via abort() calls on fatal errors or assert()
+# calls to check potentially fatal errors. The compilation
+# default normally is FALSE, and can be changed here. The
+# compilation or configuration default can be toggled via
+# the -core command line switch.
+# Note that this setting cannot be used to prevent core dumps
+# with certainty. If this is important, means provided by the
+# operating system or kernel should be used.
+#
+#NO_FORCED_CORE_DUMP:FALSE
+
+.h1 Appearance
+
+.h2 COLOR
+# COLORS are only available if compiled with SVr4 curses or slang. This is
+# the old color configuration. The COLOR_STYLE configuration is compiled-in
+# and can simulate this if the ".lss" filename is empty.
+#
+# The line must be of the form:
+#
+# COLOR:Integer:Foreground:Background
+.nf
+#
+# The Integer value is interpreted as follows:
+# 0 - normal - normal text
+# 1 - bold - hyperlinks, see also BOLD_* options above
+# 2 - reverse - statusline
+# 3 - bold + reverse (not used)
+# 4 - underline - text emphasis (EM, I, B tags etc.)
+# 5 - bold + underline - hyperlinks within text emphasis
+# 6 - reverse + underline - currently selected hyperlink
+# 7 - reverse + underline + bold - WHEREIS search hits
+#
+# Each Foreground and Background value must be one of:
+# black red green brown
+# blue magenta cyan lightgray
+# gray brightred brightgreen yellow
+# brightblue brightmagenta brightcyan white
+.fi
+# or (if you have configured using -enable-default-colors with ncurses or
+# slang), "default" may be used for foreground and background.
+#
+# Note that in most cases a white background is really "lightgray", since
+# terminals generally do not implement bright backgrounds.
+#
+# Uncomment and change any of the compilation defaults.
+#
+#COLOR:0:black:white
+#COLOR:1:blue:white
+#COLOR:2:yellow:blue
+#COLOR:3:green:white
+#COLOR:4:magenta:white
+#COLOR:5:blue:white
+#COLOR:6:red:white
+COLOR:6:brightred:black
+#COLOR:7:magenta:cyan
+
+.h2 COLOR_STYLE
+# Also known as "lss" (lynx style-sheet), the color-style file assigns color
+# combination to tags and combinations of tags. Normally a non-empty value
+# is compiled into lynx, and the user can override that using the -lss
+# command-line option. The configure script allows one to compile in an
+# empty string. If lynx finds no value for this setting, it simulates the
+# non-color-style assignments using the COLOR settings.
+#
+# If neither the command-line "-lss" or this COLOR_STYLE setting are given,
+# lynx tries the environment variables "LYNX_LSS" and "lynx_lss". If neither
+# is set, lynx uses the first compiled-in value (which as noted, may be empty).
+#
+# At startup, lynx remembers the name of the color-style file which was used,
+# and together with each file specified, provides those as choices in the
+# O)ptions menu.
+#
+#COLOR_STYLE: lynx.lss
+#COLOR_STYLE: blue-background.lss
+#COLOR_STYLE: bright-blue.lss
+#COLOR_STYLE: midnight.lss
+#COLOR_STYLE: mild-colors.lss
+#COLOR_STYLE: opaque.lss
+
+.h2 NESTED_TABLES
+# This is an experimental feature for improving table layout.
+# It is enabled by default when the COLOR_STYLE configuration is used,
+# and false otherwise.
+#
+NESTED_TABLES:TRUE
+
+.h2 ASSUMED_COLOR
+# If built with a library that recognizes default colors (usually ncurses or
+# slang), and if the corresponding option is compiled into lynx, lynx
+# initializes it to assume the corresponding foreground and background colors.
+# Default colors are those that the terminal (emulator) itself is initialized
+# to. For instance, you might have an xterm running with black text on a white
+# background, and want lynx to display colored text on the white background,
+# but leave the possibility of using the same configuration to draw colored
+# text on a different xterm, this time using its background set to black.
+#
+# If built with conventional SVr3/SVr4 curses, tells lynx to use color pair 0
+# when the given colors match this setting. That gives a similar effect,
+# though not as flexible. You will get the best results by setting the
+# terminal's default colors to match the prevailing text and background colors
+# that you have setup with lynx, and then alter the ASSUMED_COLOR setting to
+# match that. If you do not alter the ASSUMED_COLOR setting, curses assumes
+# color pair 0's background is black, which implies that its foreground (text)
+# is white.
+#
+# The first value given is the foreground, the second is the background.
+#ASSUMED_COLOR:default:default
+
+.h2 DEFAULT_COLORS
+# If built with a library that recognizes default colors (usually ncurses or
+# slang), and if the corresponding option is compiled into lynx, lynx
+# initializes it to assume the corresponding foreground and background colors.
+# Default colors are those that the terminal (emulator) itself is initialized
+# to.
+#
+# Use this feature to disable the default-colors feature at runtime.
+# This is useful for constructing scripts which use the non-color-style
+# scheme, e.g., the oldlynx script.
+#
+# This should precede ASSUMED_COLOR settings.
+#DEFAULT_COLORS:true
+
+.h1 External Programs
+
+.h2 EXTERNAL
+# External application support. This feature allows Lynx to pass a given
+# URL to an external program. It was written for three reasons.
+#
+# 1) To overcome the deficiency of Lynx_386 not supporting ftp and news.
+# External programs can be used instead by passing the URL.
+#
+# 2) To allow for background transfers in multitasking systems.
+# I use wget for http and ftp transfers via the external command.
+#
+# 3) To allow for new URLs to be used through Lynx.
+# URLs can be made up such as mymail: to spawn desired applications
+# via the external command.
+#
+# Restrictions can be imposed using -restrictions=externals at the Lynx command
+# line. This will disallow all EXTERNAL lines in lynx.cfg that have FALSE in
+# the 3rd field (not counting the name of the setting). TRUE lines will still
+# function.
+#
+# The lynx.cfg line is as follows:
+#
+# EXTERNAL:<url>:<command> %s:<norestriction>:<allow_for_activate>[:environment]
+#
+# <url> Any given URL. This can be normal ones like ftp or http or it
+# can be one made up like mymail.
+#
+# <command> The command to run with %s being the URL that will be passed.
+# In Linux I use "wget -q %s &" (no quotes) to spawn a copy of wget for
+# downloading http and ftp files in the background. In Win95 I use
+# "start ncftp %s" to spawn ncftp in a new window.
+#
+# <norestriction> This complements the -restrictions=externals feature to allow
+# for certain externals to be enabled while restricting others. TRUE means
+# a command will still function while Lynx is restricted. WB
+#
+# <allow_for_activate> Setting this to TRUE allows the use of this command not
+# only when EXTERN key is pressed, but also when ACTIVATE command is invoked
+# (i.e., activating the link with the given prefix will be equivalent to
+# pressing EXTERN key on it). If this component of the line is absent, then
+# FALSE is assumed.
+#
+# [:environment] Optional, if XWINDOWS then command is allowed only if
+# $DISPLAY environment variable is set, else if NON_XWINDOWS then command
+# is allowed only if $DISPLAY environment variable is not set, if absent or
+# anything else command is always allowed.
+#
+# For invoking the command use the EXTERN_LINK or EXTERN_PAGE key. By default
+# EXTERN_LINK is mapped to '.', and EXTERN_PAGE to ',' (if the feature is
+# enabled), see the KEYMAP section above.
+#
+#EXTERNAL:ftp:wget %s &:TRUE
+
+.h2 EXTERNAL_MENU
+# Like EXTERNAL, but allows customizing the menu name.
+# Here is the syntax:
+.ex 1
+# EXTERNAL_MENU:<url>:<menu>:<command> %s:<norestriction>:<allow_for_activate>[:environment]
+
+.h1 Internal Behavior
+
+.h2 RULE
+.h2 RULESFILE
+# CERN-style rules, EXPERIMENTAL - URL-specific rules
+#
+# A CERN-style rules file can be given with RULESFILE. Use the system's
+# native format for filenames, on Unix '~' is also recognized. If a filename
+# is given, the file must exist.
+#
+# Single CERN-style rules can be specified with RULES.
+#
+# Both options can be repeated, rules accumulate in the order
+# given, they will be applied in first-to-last order. See cernrules.txt
+# in the samples subdirectory for further explanation.
+#
+# Examples:
+.ex 5
+# RULESFILE:/etc/lynx/cernrules
+# RULE:Fail gopher:* # reject by scheme
+# RULE:Pass finger://*@localhost/ # allow this,
+# RULE:Fail finger:* # but not others
+# RULE:Redirect http://old.server/* http://new.server/*
+
+.h1 Appearance
+
+.h2 PRETTYSRC
+# Enable pretty source view
+#PRETTYSRC:FALSE
+
+.h2 PRETTYSRC_SPEC
+# Pretty source view settings. These settings are in effect when -prettysrc
+# is specified.
+# The following lexical elements (lexemes) are recognized:
+# comment, tag, attribute, attribute value, generalized angle brackets (
+# '<' '>' '</' ), entity, hyperlink destination, entire file, bad sequence,
+# bad tag, bad attribute, sgml special.
+# The following group of option tells which styles will surround each
+# lexeme. The syntax of option in this group is:
+#PRETTYSRC_SPEC:<LEXEMENAME>:<TAGSPEC>:<TAGSPEC>
+# The first <TAGSPEC> specifies what tags will precede lexemes of that class
+# in the internal html markup. The second - what will be placed (internally)
+# after it.
+# TAGSPEC has the following syntax:
+# <TAGSPEC>:= [ (<TAGOPEN> | <TAGCLOSE>) <SPACE>+ ]*
+# <TAGOPEN>:= tagname[.classname]
+# <TAGCLOSE>:= !tagname
+#
+# The following table gives correspondence between lexeme and lexeme name
+.nf
+# Lexeme LEXEMENAME FURTHER EXPLANATION
+# =========================================================
+# comment COMM
+# tag TAG recognized tag name only
+# attribute ATTRIB
+# attribute value ATTRVAL
+# generalized brackets ABRACKET < > </
+# entity ENTITY
+# hyperlink destination HREF
+# entire file ENTIRE
+# bad sequence BADSEQ bad entity or invalid construct at text
+# level.
+# bad tag BADTAG Unrecognized construct in generalized
+# brackets.
+# bad attribute BADATTR The name of the attribute unknown to lynx
+# of the tag known to lynx. (i.e.,
+# attributes of unknown tags will have
+# markup of ATTRIB)
+# sgml special SGMLSPECIAL doctype, sgmlelt, sgmlele,
+# sgmlattlist, marked section, identifier
+.fi
+#
+# Notes:
+#
+# 1) The markup for HTML_ENTIRE will be emitted only once - it will surround
+# entire file source.
+#
+# 2) The tagnames specified by TAGSPEC should be valid html tag names.
+#
+# 3) If the tag/class combination given by TAGOPEN is not assigned a color
+# style in lss file (for lynx compiled with lss support), that tag/class
+# combination will be emitted anyway during internal html markup. Such
+# combinations will be also reported to the trace log.
+#
+# 4) Lexeme 'tag' means tag name only
+#
+# 5) Angle brackets of html specials won't be surrounded by markup for ABRACKET
+#
+.ex
+# PRETTYSRC_SPEC:COMM:B I:!I !B
+# HTML comments will be surrounded by <b><i> and </i></b> in the
+# internal html markup
+.ex
+# PRETTYSRC_SPEC:ATTRVAL: span.attrval : !span
+# Values of the attributes will be surrounded by the
+# <SPAN class=attrval> </SPAN>
+.ex
+# PRETTYSRC_SPEC:HREF::
+# No special html markup will surround hyperlink destinations (
+# this means that only default color style for hrefs will be applied
+# to them)
+#
+# For lynx compiled with lss support, the following settings are the default:
+#PRETTYSRC_SPEC:COMM:span.htmlsrc_comment:!span
+#PRETTYSRC_SPEC:TAG:span.htmlsrc_tag:!span
+#PRETTYSRC_SPEC:ATTRIB:span.htmlsrc_attrib:!span
+#PRETTYSRC_SPEC:ATTRVAL:span.htmlsrc_attrval:!span
+#PRETTYSRC_SPEC:ABRACKET:span.htmlsrc_abracket:!span
+#PRETTYSRC_SPEC:ENTITY:span.htmlsrc_entity:!span
+#PRETTYSRC_SPEC:HREF:span.htmlsrc_href:!span
+#PRETTYSRC_SPEC:ENTIRE:span.htmlsrc_entire:!span
+#PRETTYSRC_SPEC:BADSEQ:span.htmlsrc_badseq:!span
+#PRETTYSRC_SPEC:BADTAG:span.htmlsrc_badtag:!span
+#PRETTYSRC_SPEC:BADATTR:span.htmlsrc_badattr:!span
+#PRETTYSRC_SPEC:SGMLSPECIAL:span.htmlsrc_sgmlspecial:!span
+# the styles corresponding to them are present in sample .lss file.
+# For lynx compiled without lss support, the following settings are the default:
+#PRETTYSRC_SPEC:COMM:b:!b
+#PRETTYSRC_SPEC:TAG:b:!b
+#PRETTYSRC_SPEC:ATTRIB:b:!b
+#PRETTYSRC_SPEC:ATTRVAL::
+#PRETTYSRC_SPEC:ABRACKET:b:!b
+#PRETTYSRC_SPEC:ENTITY:b:!b
+#PRETTYSRC_SPEC:HREF::
+#PRETTYSRC_SPEC:ENTIRE::
+#PRETTYSRC_SPEC:BADSEQ:b:!b
+#PRETTYSRC_SPEC:BADTAG::
+#PRETTYSRC_SPEC:BADATTR::
+#PRETTYSRC_SPEC:SGMLSPECIAL:b:!b
+
+.h2 HTMLSRC_ATTRNAME_XFORM
+.h2 HTMLSRC_TAGNAME_XFORM
+# Options HTMLSRC_TAGNAME_XFORM and HTMLSRC_ATTRNAME_XFORM control the way the
+# names of tags and names of attributes are transformed correspondingly.
+# Possible values: 0 - lowercase, 1 - leave as is, 2 - uppercase.
+#HTMLSRC_TAGNAME_XFORM:2
+#HTMLSRC_ATTRNAME_XFORM:2
+
+.h2 PRETTYSRC_VIEW_NO_ANCHOR_NUMBERING
+# PRETTYSRC_VIEW_NO_ANCHOR_NUMBERING - pretty source view setting
+# If "keypad mode" in 'O'ptions screen is "Links are numbered" or
+# "Links and form fields are numbered", and PRETTYSRC_VIEW_NO_ANCHOR_NUMBERING is
+# TRUE, then links won't be numbered in psrc view and will be numbered
+# otherwise. Set this setting to TRUE if you prefer numbered links, but wish
+# to get valid HTML source when printing or mailing when in psrc view.
+# Default is FALSE.
+#PRETTYSRC_VIEW_NO_ANCHOR_NUMBERING:FALSE
+
+.h1 HTML Parsing
+
+.h2 FORCE_EMPTY_HREFLESS_A
+# FORCE_EMPTY_HREFLESS_A - HTML parsing
+# This option mirrors command-line option with the same name. Default is
+# FALSE. If true, then any 'A' element without HREF will be closed
+# immediately. This is useful when viewing documentation produced by broken
+# translator that doesn't emit balanced A elements. If lynx was compiled with
+# color styles, setting this option to TRUE will make lynx screen much more
+# reasonable (otherwise all text will probably have color corresponding to the
+# A element).
+#
+#FORCE_EMPTY_HREFLESS_A:FALSE
+
+.h2 HIDDEN_LINK_MARKER
+# HIDDEN_LINK_MARKER - HTML parsing
+# This option defines the string that will be used as title of hidden link (a
+# link that otherwise will have no label associated with it). Using an empty
+# string as the value will cause lynx to behave in the old way - hidden links
+# will be handled according to other settings (mostly the parameter of
+# -hiddenlinks command-line switch). If the value is non-empty string, hidden
+# link becomes non-hidden so it won't be handled as hidden link, e.g., listed
+# among hidden links on 'l'isting page.
+#
+#HIDDEN_LINK_MARKER:
+
+.h2 XHTML_PARSING
+# XHTML_PARSING - HTML parsing
+# When true, tells lynx that it can ignore certain tags which have no content
+# in an XHTML 1.0 document. For example
+# <p />
+# <a />
+# When the option is false, lynx will not treat the tag as an ending.
+#XHTML_PARSING:FALSE
+
+.h1 Appearance
+
+.h2 JUSTIFY
+# JUSTIFY - Appearance
+# This option mirrors command-line option with same name. Default is TRUE. If
+# true, most of text (except headers and like this) will be justified. This
+# has no influence on CJK text rendering.
+#
+# This option is only available if Lynx was compiled with USE_JUSTIFY_ELTS.
+#
+#JUSTIFY:FALSE
+
+.h2 JUSTIFY_MAX_VOID_PERCENT
+# JUSTIFY_MAX_VOID_PERCENT - Appearance
+# This option controls the maximum allowed value for ratio (in percents) of
+# 'the number of spaces to spread across the line to justify it' to
+# 'max line size for current style and nesting' when justification is allowed.
+# When that ratio exceeds the value specified, that particular line won't be
+# justified. I.e. the value 28 for this setting will mean maximum value for
+# that ratio is 0.28.
+#
+#JUSTIFY_MAX_VOID_PERCENT:35
+
+.h1 Interaction
+
+.h2 TEXTFIELDS_NEED_ACTIVATION
+# If TEXTFIELDS_NEED_ACTIVATION is set to TRUE, and lynx was compiled with
+# TEXTFIELDS_MAY_NEED_ACTIVATION defined, then text input form fields need
+# to be activated (by pressing the Enter key or similar) before the user
+# can enter or modify input. By default, input fields become automatically
+# activated when selected. Requiring explicit activation can be desired for
+# users who use alphanumeric keys for navigation (or other keys that have
+# special meaning in the line editor - ' ', 'b', INS, DEL, etc), and don't
+# want to 'get stuck' in form fields. Instead of setting the option here,
+# explicit activation can also be requested with the -tna command line
+# option.
+#
+#TEXTFIELDS_NEED_ACTIVATION:FALSE
+
+.h2 LEFTARROW_IN_TEXTFIELD_PROMPT
+# LEFTARROW_IN_TEXTFIELD_PROMPT
+# This option controls what happens when a Left Arrow key is pressed while
+# in the first position of an active text input field. By default, Lynx
+# asks for confirmation ("Do you want to go back to the previous document?")
+# only if the contents of the fields have been changed since entering it.
+# If set to TRUE, the confirmation prompt is always issued.
+#
+#LEFTARROW_IN_TEXTFIELD_PROMPT:FALSE
+
+.h1 Timeouts
+
+.h2 CONNECT_TIMEOUT
+# Specifies (in seconds) connect timeout. Default value is rather huge.
+#CONNECT_TIMEOUT:18000
+
+.h2 READ_TIMEOUT
+# Specifies (in seconds) read-timeout. Default value is rather huge.
+#READ_TIMEOUT:18000
+
+.h1 Internal Behavior
+# These settings control internal lynx behavior - the way it interacts with the
+# operating system and Internet. Modifying these settings will not change
+# the rendition of documents that you browse with lynx, but can change various
+# delays and resource utilization.
+
+.h2 FTP_PASSIVE
+# Set FTP_PASSIVE to TRUE if you want to use passive mode ftp transfers.
+# You might have to do this if you're behind a restrictive firewall.
+#FTP_PASSIVE:TRUE
+
+.h2 ENABLE_LYNXRC
+# The forms-based O'ptions menu shows a (!) marker beside items which are not
+# saved to ~/.lynxrc -- the reason for disabling some of these items is that
+# they are likely to cause confusion if they are read from the .lynxrc file for
+# each session. However, they can be enabled or disabled using the
+# ENABLE_LYNXRC settings. The default (compiled-in) settings are shown below.
+# The second column is the name by which a setting is saved to .lynxrc (which
+# is chosen where possible to correspond with lynx.cfg). Use "OFF" to disable
+# writing a setting, "ON" to enable it. Settings are read from .lynxrc after
+# the corresponding data from lynx.cfg, so they override lynx.cfg, which is
+# probably what users expect.
+#
+# Note that a few settings (Cookies and Show images) are comprised of more than
+# one lynx.cfg setting.
+.nf
+ENABLE_LYNXRC:ACCEPT_ALL_COOKIES:OFF
+ENABLE_LYNXRC:ASSUME_CHARSET:OFF
+ENABLE_LYNXRC:AUTO_SESSION:OFF
+ENABLE_LYNXRC:BOOKMARK_FILE:ON
+ENABLE_LYNXRC:CASE_SENSITIVE_SEARCHING:ON
+ENABLE_LYNXRC:CHARACTER_SET:ON
+ENABLE_LYNXRC:COLLAPSE_BR_TAGS:ON
+ENABLE_LYNXRC:COOKIE_ACCEPT_DOMAINS:OFF
+ENABLE_LYNXRC:COOKIE_FILE:OFF
+ENABLE_LYNXRC:COOKIE_LOOSE_INVALID_DOMAINS:OFF
+ENABLE_LYNXRC:COOKIE_QUERY_INVALID_DOMAINS:OFF
+ENABLE_LYNXRC:COOKIE_REJECT_DOMAINS:OFF
+ENABLE_LYNXRC:COOKIE_STRICT_INVALID_DOMAIN:OFF
+ENABLE_LYNXRC:DIR_LIST_STYLE:ON
+ENABLE_LYNXRC:DISPLAY:OFF
+ENABLE_LYNXRC:EMACS_KEYS:ON
+ENABLE_LYNXRC:FILE_EDITOR:ON
+ENABLE_LYNXRC:FILE_SORTING_METHOD:ON
+ENABLE_LYNXRC:FORCE_COOKIE_PROMPT:OFF
+ENABLE_LYNXRC:FORCE_SSL_PROMPT:OFF
+ENABLE_LYNXRC:FTP_PASSIVE:OFF
+ENABLE_LYNXRC:HTML5_CHARSETS:OFF
+ENABLE_LYNXRC:HTTP_PROTOCOL:1.0
+ENABLE_LYNXRC:KBLAYOUT:ON
+ENABLE_LYNXRC:KEYPAD_MODE:ON
+ENABLE_LYNXRC:LINEEDIT_MODE:ON
+ENABLE_LYNXRC:LOCALE_CHARSET:ON
+ENABLE_LYNXRC:MAKE_LINKS_FOR_ALL_IMAGES:ON
+ENABLE_LYNXRC:MAKE_PSEUDO_ALTS_FOR_INLINES:ON
+ENABLE_LYNXRC:MULTI_BOOKMARK:ON
+ENABLE_LYNXRC:NO_PAUSE:OFF
+ENABLE_LYNXRC:PERSONAL_MAIL_ADDRESS:ON
+ENABLE_LYNXRC:PREFERRED_CHARSET:ON
+ENABLE_LYNXRC:PREFERRED_ENCODING:OFF
+ENABLE_LYNXRC:PREFERRED_LANGUAGE:ON
+ENABLE_LYNXRC:PREFERRED_MEDIA_TYPES:OFF
+ENABLE_LYNXRC:RAW_MODE:OFF
+ENABLE_LYNXRC:RUN_ALL_EXECUTION_LINKS:ON
+ENABLE_LYNXRC:RUN_EXECUTION_LINKS_LOCAL:ON
+ENABLE_LYNXRC:SCROLLBAR:OFF
+ENABLE_LYNXRC:SELECT_POPUPS:ON
+ENABLE_LYNXRC:SEND_USERAGENT:OFF
+ENABLE_LYNXRC:SESSION_FILE:OFF
+ENABLE_LYNXRC:SET_COOKIES:OFF
+ENABLE_LYNXRC:SHOW_COLOR:ON
+ENABLE_LYNXRC:SHOW_CURSOR:ON
+ENABLE_LYNXRC:SHOW_DOTFILES:ON
+ENABLE_LYNXRC:SHOW_KB_RATE:ON
+ENABLE_LYNXRC:SUB_BOOKMARKS:ON
+ENABLE_LYNXRC:TAGSOUP:OFF
+ENABLE_LYNXRC:UNDERLINE_LINKS:OFF
+ENABLE_LYNXRC:USER_MODE:ON
+ENABLE_LYNXRC:USERAGENT:OFF
+ENABLE_LYNXRC:VERBOSE_IMAGES:ON
+ENABLE_LYNXRC:VI_KEYS:ON
+ENABLE_LYNXRC:VISITED_LINKS:ON
+.fi
+INCLUDE:/etc/lynx-site.cfg
+
+.h1 External Programs
+# Any of the compiled-in pathnames of external programs can be overridden
+# by specifying the corresponding xxx_PATH variable. If the variable is
+# given as an empty string, lynx will not use the program. For a few cases,
+# there are internal functions which can be used instead.
+
+.h2 BZIP2_PATH
+# This is the path used for DIRED mode and web connections to compress a file
+# to ".bz2", e.g., the Unix command "bzip2".
+
+.h2 CHMOD_PATH
+# This is the path used for DIRED mode to change file protection, e.g., the
+# Unix command "chmod".
+#
+# Setting this to an empty string will let lynx use a built-in version.
+
+.h2 COMPRESS_PATH
+# This is the path used for DIRED mode and web connections to compress a file
+# to ".Z", e.g., the Unix command "compress".
+
+.h2 COPY_PATH
+# This is the path used for DIRED mode to copy a file, e.g., the
+# Unix command "cp".
+#
+# Setting this to an empty string will let lynx use a built-in version.
+
+.h2 GZIP_PATH
+# This is the path used for DIRED mode and web connections to compress a file
+# to ".gz", e.g., the Unix command "gzip".
+
+.h2 INFLATE_PATH
+# This is the path used for web connections to compress a file using "inflate"
+# compression.
+
+.h2 INSTALL_PATH
+# This is the path used for DIRED mode to install files, e.g., the
+# Unix command "install".
+
+.h2 MKDIR_PATH
+# This is the path used for DIRED mode to create a directory, e.g., the
+# Unix command "mkdir".
+#
+# Setting this to an empty string will let lynx use a built-in version.
+
+.h2 MV_PATH
+# This is the path used for DIRED mode to move a file, e.g., the
+# Unix command "mv".
+#
+# Setting this to an empty string will let lynx use a built-in version.
+
+.h2 RLOGIN_PATH
+# This is the path used for DIRED mode to login remotely, e.g., the
+# Unix command "rlogin".
+
+.h2 RMDIR_PATH
+# This is the path used for DIRED mode to remove a directory, e.g., the
+# Unix command "rmdir".
+#
+# Setting this to an empty string will let lynx use a built-in version.
+
+.h2 RM_PATH
+# This is the path used for DIRED mode to remove a file, e.g., the
+# Unix command "rm".
+#
+# Setting this to an empty string will let lynx use a built-in version.
+
+.h2 SETFONT_PATH
+# This is the path used for a command which can be used to load a console font
+# for the experimental font-switch feature, e.g., the program "setfont".
+
+.h2 TAR_PATH
+# This is the path used for DIRED mode to create a tar archive from one or more
+# files.
+
+.h2 TELNET_PATH
+# This is the path for a program which can be used to make a "telnet" connection
+# to a remote host.
+
+.h2 TN3270_PATH
+# This is the path for a program which can be used to make an "IBM 3270"
+# connection to a remote host.
+
+.h2 TOUCH_PATH
+# This is the path used for DIRED mode to update the modification time of a
+# file to the current time,, e.g., the Unix command "touch".
+#
+# Setting this to an empty string will let lynx use a built-in version.
+
+.h2 UNCOMPRESS_PATH
+# This is the path used for DIRED mode and web connections to decompress a file
+# with ".Z" suffix, e.g., the Unix command "uncompress".
+
+.h2 UNZIP_PATH
+# This is the path used for DIRED mode to extract files from a zip-archive the
+# program "unzip".
+
+.h2 UUDECODE_PATH
+# This is the path used for DIRED mode to extract files from uuencoded files
+# e.g., the program "uudecode".
+
+.h2 ZCAT_PATH
+# This is the path used for DIRED mode to decompress files, writing the result
+# to a pipe as part of a shell command, e.g., the program "zcat".
+
+.h2 ZIP_PATH
+# This is the path used for DIRED mode to create a zip-archive from one or more
+# files, e.g., the program "unzip".
+
+.h1 Interaction
+
+.h2 FORCE_SSL_PROMPT
+# If FORCE_SSL_PROMPT is set to "yes", then questionable conditions, such as
+# self-signed certificates will be ignored. If set to "no", these will be
+# reported, but not attempted. The default "prompt" permits the user to make
+# this choice on a case-by-case basis.
+#
+#FORCE_SSL_PROMPT:PROMPT
+
+.h2 FORCE_COOKIE_PROMPT
+# If FORCE_COOKIE_PROMPT is set to "yes", then questionable conditions, such as
+# cookies with invalid syntax will be ignored. If set to "no", these will be
+# reported, but not attempted. The default "prompt" permits the user to make
+# this choice on a case-by-case basis.
+#
+#FORCE_COOKIE_PROMPT:PROMPT
+
+.h2 SSL_CERT_FILE
+# Set SSL_CERT_FILE to the file that contains all valid CA certificates lynx
+# should accept, in case the $SSL_CERT_FILE environment variable is not set,
+# e.g.,
+#
+#SSL_CERT_FILE:/etc/ssl/certs/ca-certificates.crt
+#SSL_CERT_FILE:NULL
+
+.h2 SSL_CLIENT_CERT_FILE
+# Set SSL_CLIENT_CERT_FILE to the file that contains a client certificate
+# (in PEM format) in case the $SSL_CLIENT_CERT_FILE environment variable is
+# not set, e.g.,
+#
+#SSL_CLIENT_CERT_FILE:/home/qux/certs/cert.crt
+#SSL_CLIENT_CERT_FILE:NULL
+
+.h2 SSL_CLIENT_KEY_FILE
+# Set SSL_CLIENT_KEY_FILE to the file that contains a client certificate
+# key (in PEM format), in case the $SSL_CLIENT_KEY_FILE environment variable
+# is not set, e.g.,
+#
+#SSL_CLIENT_KEY_FILE:/home/qux/certs/cert.key
+#SSL_CLIENT_KEY_FILE:NULL
+
+.h1 Appearance
+
+.h2 SCREEN_SIZE
+# For win32, allow the console window to be resized to the given values. This
+# requires PDCurses 2.5. The values given are width,height.
+#SCREEN_SIZE:80,24
+
+.h2 NO_MARGINS
+# Disable left/right margins in the default style sheet.
+# This is the same as the command-line "-nomargins" option.
+#NO_MARGINS:FALSE
+
+.h2 NO_TITLE
+# Disable title and blank line from top of page.
+# This is the same as the command-line "-notitle" option.
+#NO_TITLE:FALSE
+
+.h1 External Programs
+
+.h2 SYSLOG_REQUESTED_URLS
+# Log the requested URLs using the syslog interface.
+#SYSLOG_REQUESTED_URLS:TRUE
+
+.h2 SYSLOG_TEXT
+# Add the given text to calls made to syslog, to distinguish Lynx from other
+# applications which use that interface.
+#SYSLOG_TEXT:
+
+.h1 Internal Behavior
+.h2 BROKEN_FTP_RETR
+# Some ftp servers are known to have a broken implementation of RETR. If asked
+# to retrieve a directory, they get confused and fails subsequent commands such
+# as CWD and LIST. Workaround: reconnect after a failed RETR, which is slow.
+#
+# Each BROKEN_FTP_RETR gives a string match for the reported FTP server version
+#BROKEN_FTP_RETR:ProFTPD 1.2.5
+#BROKEN_FTP_RETR:spftp/
+
+.h2 BROKEN_FTP_EPSV
+# Some ftp servers are known to have a broken implementation of EPSV. The
+# server will hang for a long time when we attempt to connect after issuing
+# this command. Workaround: do not use EPSV, just use PASV.
+#
+# Each BROKEN_FTP_EPSV gives a string match for the reported FTP server version
+#BROKEN_FTP_EPSV:(Version wu-2.6.2-12)
+
+.h1 Appearance
+.h2 FTP_FORMAT
+# FTP_FORMAT defines the display for remote files.
+# It uses the same "%" codes as LIST_FORMAT.
+#FTP_FORMAT:%d %-16.16t %a %K
+
+.h1 Internal Behavior
+
+.h2 STATUS_BUFFER_SIZE
+# STATUS_BUFFER_SIZE controls the size of the buffer used for the LYNXMESSAGES
+# special url.
+#
+# The default size is 40.
+#STATUS_BUFFER_SIZE:40
+
+.h2 MAX_URI_SIZE
+# MAX_URI_SIZE controls the size of the buffer used for parsing URIs, e.g., the
+# HREF value in an anchor.
+#
+# The default size is 8192.
+#MAX_URI_SIZE:8192
+
+.h1 Appearance
+.h2 UNIQUE_URLS
+# UNIQUE_URLS can be set to tell Lynx to check for duplicate link numbers in
+# the page and corresponding lists, and reusing the original link number.
+# This can be set via command-line "-unique-urls".
+#UNIQUE_URLS:FALSE
+
+.h1 Character Sets
+.h2 MESSAGE_LANGUAGE
+# MESSAGE_LANGUAGE can be set to set the LANG environment variable explicitly.
+# This is mainly useful in non-Unix environments, e.g., Windows, since normally
+# LC_ALL is set, overriding LANG (as well as the more apt LC_MESSAGES variable).
+#MESSAGE_LANGUAGE:
+
+.h2 CONV_JISX0201KANA
+# If CONV_JISX0201KANA is set, Lynx will convert JIS X0201 Kana to JIS X0208
+# Kana, i.e., convert half-width kana to full-width.
+#CONV_JISX0201KANA:TRUE
+
+.h1 External Programs
+.h2 WAIT_VIEWER_TERMINATION
+# The WAIT_VIEWER_TERMINATION is used in the Windows environment to tell Lynx
+# to wait until a viewer has terminated.
+#WAIT_VIEWER_TERMINATION:FALSE
+
+.h1 Mail-related
+.h2 BLAT_MAIL
+# BLAT_MAIL is used in the Win32 port. It tells Lynx whether to use the
+# "blat" mailer, or the "sendmail" utility. Normally the "blat" mailer is
+# used for Win32, because the sendmail look-alikes have fewer features.
+# This feature can also be set/reset via the command-line "-noblat" option.
+#
+# Blat is available from
+.url http://www.blat.net
+#
+# See also ALT_BLAT_MAIL and SYSTEM_MAIL flags.
+#BLAT_MAIL:TRUE
+
+.h2 ALT_BLAT_MAIL
+# BLAT_MAIL is used in the Win32 port. It tells Lynx whether to use the
+# "blat" mailer, or the "blatj" utility. This feature can also be set/reset
+# via the command-line "-altblat" option.
+#
+# Some users prefer blatj, which can handle Japanese characters. It is
+# available from
+.url http://www.piedey.co.jp/blatj/
+# (caution - the page is in Japanese).
+#
+# See also BLAT_MAIL and SYSTEM_MAIL flags.
+#ALT_BLAT_MAIL:FALSE
+
+.h1 Internal Behavior
+.h2 TRACK_INTERNAL_LINKS
+# With `internal links' (links within a document to a location within the same
+# document) enabled, Lynx will distinguish between, for example, `<A
+# HREF="foo#frag">' and `<A HREF="#frag">' within a document whose URL is
+# `foo'. It may handle such links differently, although practical differences
+# would appear only if the document containing them resulted from a POST
+# request or had a no-cache flag set. This feature attempts to interpret
+# URL-references as suggested by RFC 2396, and to prevent mistaken
+# resubmissions of form content with the POST method. An alternate opinion
+# asserts that the feature could actually result in inappropriate resubmission
+# of form content.
+#TRACK_INTERNAL_LINKS:FALSE
+
+.h1 HTML Parsing
+
+.h2 DONT_WRAP_PRE
+# Inhibit wrapping of text when -dump'ing and -crawl'ing, mark
+# wrapped lines of <pre> in interactive session.
+#DONT_WRAP_PRE:FALSE
+
+.h2 FORCE_HTML
+# When true, this forces the first document specified on the command-line
+# to be interpreted as HTML.
+#FORCE_HTML:FALSE
+
+.h2 HIDDENLINKS
+# Control the display of hidden links, using one of the following names:
+#
+# MERGE
+# hidden links show up as bracketed numbers and are numbered
+# together with other links in the sequence of their occurrence
+# in the document.
+#
+# LISTONLY
+# hidden links are shown only on L)ist screens and listings
+# generated by -dump or from the P)rint menu, but appear
+# separately at the end of those lists. This is the default
+# behavior.
+#
+# IGNORE
+# hidden links do not appear even in listings.
+#
+#HIDDENLINKS:LISTONLY
+
+.h1 Appearance
+.h2 SHORT_URL
+# If true, show very long URLs in the status line with "..." to represent the
+# portion which cannot be displayed. The beginning and end of the URL are
+# displayed, rather than suppressing the end.
+#SHORT_URL:FALSE
+
+.h1 Dump/Crawl
+.h2 LISTONLY
+# For -dump, show only the list of links.
+#LISTONLY:FALSE
+
+.h2 LIST_INLINE
+# For -dump, show the links inline with the text.
+#LIST_INLINE:FALSE
+
+.h2 LOCALHOST
+# When true, this disables URLs that point to remote hosts.
+#LOCALHOST:FALSE
+
+.h2 WITH_BACKSPACES
+# Emit backspaces in output if -dump'ing or -crawl'ing (like 'man' does).
+#WITH_BACKSPACES:FALSE
+
+.h1 Internal Behavior
+.h2 HTTP_PROTOCOL
+# Normally Lynx negotiates HTTP/1.0, because it does not support chunked
+# transfer (a requirement for all HTTP/1.1 clients), although it supports
+# several other features of HTTP/1.1. You may encounter a server which does
+# not support HTTP/1.0 which can be used by switching to the later protocol.
+#HTTP_PROTOCOL:1.0
+
+.h2 GUESS_SCHEME
+# When true, Lynx may fill in a missing "scheme" for URIs which you provide.
+# This is different from URL_DOMAIN_PREFIXES and URL_DOMAIN_SUFFIXES.
+#
+# If no "scheme" (such as "http:", "ftp:") is given in a URI, Lynx first checks
+# if there is a corresponding local file which can be accessed directly.
+# Failing that, Lynx may inspect the URI to see if it begins with a prefix
+# which implies a scheme.
+#
+# Lynx uses these schemes for the corresponding prefixes:
+#
+# cso:
+# "cso."
+# "ns."
+# "ph."
+# ftp:
+# "ftp."
+# gopher:
+# "gopher."
+# http:
+# "www".
+# news:
+# "news."
+# nntp:
+# "nntp."
+# wais:
+# "wais."
+#
+# The default value FALSE disables this guess, telling Lynx to just assume that
+# "http:" was intended.
+#GUESS_SCHEME:FALSE
diff --git a/lynx.lss b/lynx.lss
new file mode 100644
index 0000000..5269e0e
--- /dev/null
+++ b/lynx.lss
@@ -0,0 +1,112 @@
+# https://github.com/whiteinge/dotfiles/blob/master/.lynx.lss
+# It's best to put these in a .lss file and use "lynx -lss=file.lss whatever"
+# for now.
+#
+# Normal type styles correspond to HTML tags.
+#
+# The next line (beginning with "em") means: use bold if mono, otherwise
+# brightblue on <defaultbackground>
+em:bold:brightblue
+strong:bold:brightred
+b:bold:red
+i:bold:brightblue
+a:bold:green
+img:dim:brown
+fig:normal:gray
+caption:reverse:brown
+hr:normal:yellow
+blockquote:normal:brightblue
+ul:normal:brown
+address:normal:magenta
+title:normal:magenta
+tt:dim:brightmagenta:default
+h1:bold:yellow:blue
+h2:normal:brown:blue
+h3:normal:green:blue
+h4:normal:cyan:blue
+label:normal:magenta
+q:normal:yellow:magenta
+small:dim:default
+big:bold:yellow
+sup:bold:yellow
+sub:dim:gray
+lh:bold:yellow:magenta
+li:normal:magenta
+code:normal:cyan
+cite:normal:cyan
+
+table:normal:brightcyan
+tr:bold:brown
+td:normal:default
+br:normal:default
+
+# Special styles - not corresponding directly to HTML tags
+# alert - status bar, when message begins "Alert".
+# alink - active link
+# normal - default attributes
+# status - status bar
+# whereis - whereis search target
+#
+#normal:normal:default:blue
+alink:reverse:yellow:black
+status:reverse:yellow:blue
+alert:bold:yellow:red
+whereis:reverse+underline:magenta:cyan
+# currently not used
+#value:normal:green
+#high:bold:brightmagenta
+forwbackw.arrow:reverse
+
+menu.bg:normal:black:lightgray
+menu.frame:normal:black:lightgray
+menu.entry:normal:lightgray:black
+menu.n:normal:red:gray
+menu.active:normal:yellow:black
+menu.sb:normal:brightred:lightgray
+
+# Styles with classes - <ul class=red> etc.
+ul.red:underline:brightred
+ul.blue:bold:brightblue
+li.red:reverse:red:yellow
+li.blue:bold:blue
+strong.a:bold:black:red
+em.a:reverse:black:blue
+strong.b:bold:white:red
+em.b:reverse:white:blue
+strong.debug:reverse:green
+font.letter:normal:default:blue
+input.submit:normal:cyan
+tr.baone:bold:yellow
+tr.batwo:bold:green
+tr.bathree:bold:red
+#
+# Special handling for link.
+link:normal:white
+link.green:bold:brightgreen
+link.red:bold:black:red
+link.blue:bold:white:blue
+link.toc:bold:black:white
+# Special cases for link - the rel or title is appended after the class.
+# <link rel=next class=red href="1">
+link.red.next:bold:red
+link.red.prev:bold:yellow:red
+link.blue.prev:bold:yellow:blue
+link.blue.next:bold:blue
+link.green.toc:bold:white:green
+#
+# Define styles that will be used when syntax highlighting is requested
+# (commandline option -prettysrc).
+span.htmlsrc_comment:normal:white
+span.htmlsrc_tag:normal:white
+#If you don't like that the tag name and attribute name are displayed
+#in different colors, comment the following line.
+span.htmlsrc_attrib:normal:cyan
+span.htmlsrc_attrval:normal:magenta
+span.htmlsrc_abracket:normal:white
+span.htmlsrc_entity:normal:white
+##span.htmlsrc_href:
+##span.htmlsrc_entire:
+span.htmlsrc_badseq:normal:red
+span.htmlsrc_badtag:normal:red
+span.htmlsrc_badattr:normal:red
+span.htmlsrc_sgmlspecial:normal:yellow
diff --git a/makefile b/makefile
new file mode 100644
index 0000000..2f3db80
--- /dev/null
+++ b/makefile
@@ -0,0 +1,102 @@
+SOLC?=solc
+NODE?=node
+NPM?=npm
+PKG_MAN?=dnf
+TEST_SERVER?=testrpc
+TEST_SERVER_OPTS?=-d &>/dev/null &
+NODEJS_TEST?=test.js
+LINTER?=solium
+DOX?=doxity
+EXTRA_BIN_FLAGS?=
+EXTRA_ABI_FLAGS?=
+CONTRACT_DIR?=./contracts
+NODE_MIN_VERSION=7.6.0
+SHELL?=/bin/bash
+
+CONTRACTS=$(wildcard *.sol)
+BIN_DIRS=$(wildcard *.bin)
+BIN_FLAGS= --bin --overwrite
+ABI_FLAGS= --abi --overwrite
+
+BIN_FLAGS+=$(EXTRA_BIN_FLAGS)
+ABI_FLAGS+=$(EXTRA_ABI_FLAGS)
+
+.PHONY: all clean run runtestserver requirements rungeth loadgethjs killserver doxity solium init buld checknodeversion
+
+.DEFAULT: all
+
+all: $(patsubst %.sol, %.bin, $(wildcard *.sol)) runtestserver run
+
+build: $(patsubst $(CONTRACT_DIR)/%.sol, $(CONTRACT_DIR)/%.bin, $(wildcard $(CONTRACT_DIR)/*.sol))
+
+%.bin:%.sol
+ $(SOLC) $(BIN_FLAGS) -o $@ $<
+ $(SOLC) $(ABI_FLAGS) -o $@ $<
+
+run:
+ $(NODE) $(NODEJS_TEST)
+
+init:
+ mkdir .devi
+ $(NPM) install
+
+rungeth: makeattach
+ geth --verbosity 6 --dev --rpc --rpcapi admin,miner,eth,net,web3,personal --rpcaddr "localhost" --rpcport "8545" --port "30303" --datadir /tmp/ethereum_dev_mode &>/dev/null &
+ PID=$!
+ sleep 2
+ geth --exec 'loadScript("./.devi/gethconfig.js")' attach http://127.0.0.1:8545
+ node $(NODEJS_TEST)
+ kill -9 $(pgrep geth)
+ kill -9 $$PID
+
+makeattach:
+ @echo "miner.setEtherbase(eth.accounts[0])" > ./.devi/gethconfig.js
+ @echo "miner.start(2)" >> ./.devi/gethconfig.js
+
+runparity:
+ parity --chain dev --unlock 0x00a329c0648769a73afac7f9381e08fb43dbea72 --password ./password.txt 2>&1 &
+ PID=$!
+
+clean:
+ rm -rf $(CONTRACT_DIR)/*.bin
+
+doxity:
+ if [[ -d ./scripts/doxity ]]; then :;else doxity init;fi && doxity build && doxity publish
+
+lint:
+ if [[ -d ./soliumrc.json ]]; then :; else solium --init;fi && solium --dir .
+
+checknodeversion:
+ @./vimeth/checknodeversion.sh
+
+requirements:
+ $(NPM) --version
+ if [[ $$? != 0 ]]; then sudo $(PKG_MAN) install npm
+ $(NODE) --version
+ if [[ $$? != 0 ]]; then sudo $(PKG_MAN) install nodejs
+ # npm is known not to be able to install web3 globally on all systems
+ $(NPM) install web3
+ $(NPM) install log4js
+ # install ethereum-testrpc
+ sudo $(NPM) install -g ethereum-testrpc
+
+runtestserver:
+ $(shell if ! pgrep -x "testrpc" > /dev/null; then $(TEST_SERVER) $(TEST_SERVER_OPTS), disown, echo disowned, sleep 2; else :; fi)
+
+killserver:
+ $(shell kill -9 $(pgrep -x "testrpc"))
+
+help:
+ @echo ' the ide part thats missing for eth dev from vim.'
+ @echo ' all: is the default target. builds bin, abi and runs node.'
+ @echo ' build: builds the solidity contracts.'
+ @echo ' run: just runs node on test.js.'
+ @echo ' rungeth: will run geth.'
+ @echo ' kilgeth: will kill geth.'
+ @echo ' runtestserver: runs your test server. the default is testrpc.'
+ @echo ' killserver will kill the testrpc server.'
+ @echo ' requirements: installs the requiremnts.'
+ @echo ' clean: remove the bin and abi folder.'
+ @echo ' lint will run the solium linter.'
+ @echo ' doxity will build the docs.'
+ @echo ' if you are not running an ancient shell, tab will give you the macros that you can change.'
diff --git a/makefilec b/makefilec
new file mode 100644
index 0000000..3fe1eff
--- /dev/null
+++ b/makefilec
@@ -0,0 +1,233 @@
+TARGET?=main
+SHELL=bash
+SHELL?=bash
+CC=clang
+CC?=clang
+ifdef OS
+CC_FLAGS=
+else
+CC_FLAGS=-fpic
+endif
+CC_EXTRA?=
+CTAGS_I_PATH?=./
+LD_FLAGS=
+EXTRA_LD_FLAGS?=
+ADD_SANITIZERS_CC= -g -fsanitize=address -fno-omit-frame-pointer
+ADD_SANITIZERS_LD= -g -fsanitize=address
+MEM_SANITIZERS_CC= -g -fsanitize=memory -fno-omit-frame-pointer
+MEM_SANITIZERS_LD= -g -fsanitize=memory
+UB_SANITIZERS_CC= -g -fsanitize=undefined -fno-omit-frame-pointer
+UB_SANITIZERS_LD= -g -fsanitize=undefined
+FUZZ_SANITIZERS_CC= -fsanitize=fuzzer,address -g -fno-omit-frame-pointer
+FUZZ_SANITIZERS_LD= -fsanitize=fuzzer,address -g -fno-omit-frame-pointer
+COV_CC= -fprofile-instr-generate -fcoverage-mapping
+COV_LD= -fprofile-instr-generate
+# BUILD_MODES are=RELEASE(default), DEBUG,ADDSAN,MEMSAN,UBSAN,FUZZ
+BUILD_MODE?=RELEASE
+#EXCLUSION_LIST='(\bdip)|(\bdim)'
+EXCLUSION_LIST='xxxxxx'
+OBJ_LIST:=$(patsubst %.c, %.o, $(shell find . -name '*.c' | grep -Ev $(EXCLUSION_LIST)))
+OBJ_COV_LIST:=$(patsubst %.c, %.ocov, $(shell find . -name '*.c' | grep -Ev $(EXCLUSION_LIST)))
+OBJ_DBG_LIST:=$(patsubst %.c, %.odbg, $(shell find . -name '*.c' | grep -Ev $(EXCLUSION_LIST)))
+ASM_LIST:=$(patsubst %.c, %.dis, $(shell find . -name '*.c' | grep -Ev $(EXCLUSION_LIST)))
+WASM_LIST:=$(patsubst %.c, %.wasm, $(shell find . -name '*.c' | grep -Ev $(EXCLUSION_LIST)))
+WAST_LIST:=$(patsubst %.c, %.wast, $(shell find . -name '*.c' | grep -Ev $(EXCLUSION_LIST)))
+IR_LIST:=$(patsubst %.c, %.ir, $(shell find . -name '*.c' | grep -Ev $(EXCLUSION_LIST)))
+JS_LIST:=$(patsubst %.c, %.js, $(shell find . -name '*.c' | grep -Ev $(EXCLUSION_LIST)))
+AST_LIST:=$(patsubst %.c, %.ast, $(shell find . -name '*.c' | grep -Ev $(EXCLUSION_LIST)))
+
+ifeq ($(BUILD_MODE), ADDSAN)
+ifeq ($(CC), gcc)
+$(error This build mode is only useable with clang.)
+endif
+CC_EXTRA+=$(ADD_SANITIZERS_CC)
+EXTRA_LD_FLAGS+=$(ADD_SANITIZERS_LD)
+endif
+
+ifeq ($(BUILD_MODE), MEMSAN)
+ifeq ($(CC), gcc)
+$(error This build mode is only useable with clang.)
+endif
+CC_EXTRA+=$(MEM_SANITIZERS_CC)
+EXTRA_LD_FLAGS+=$(MEM_SANITIZERS_LD)
+endif
+
+ifeq ($(BUILD_MODE), UBSAN)
+ifeq ($(CC), gcc)
+$(error This build mode is only useable with clang.)
+endif
+CC_EXTRA+=$(UB_SANITIZERS_CC)
+EXTRA_LD_FLAGS+=$(UB_SANITIZERS_LD)
+endif
+
+ifeq ($(BUILD_MODE), FUZZ)
+ifeq ($(CXX), g++)
+$(error This build mode is only useable with clang++.)
+endif
+CXX_EXTRA+=$(FUZZ_SANITIZERS_CC)
+EXTRA_LD_FLAGS+=$(FUZZ_SANITIZERS_LD)
+endif
+
+SRCS:=$(wildcard *.c)
+HDRS:=$(wildcard *.h)
+CC_FLAGS+=$(CC_EXTRA)
+LD_FLAGS+=$(EXTRA_LD_FLAGS)
+
+.DEFAULT:all
+
+.PHONY:all clean help ASM SO TAGS WASM JS IR WAST A ADBG AST cppcheck
+
+all:$(TARGET)
+
+everything:$(TARGET) A ASM SO $(TARGET)-static $(TARGET)-dbg ADBG TAGS $(TARGET)-cov WASM JS IR WAST AST
+
+depend:.depend
+
+.depend:$(SRCS)
+ rm -rf .depend
+ $(CC) -MM $(CC_FLAGS) $^ > ./.depend
+ echo $(patsubst %.o:, %.odbg:, $(shell $(CC) -MM $(CC_FLAGS) $^)) | sed -r 's/[A-Za-z0-9\-\_]+\.odbg/\n&/g' >> ./.depend
+ echo $(patsubst %.o:, %.ocov:, $(shell $(CC) -MM $(CC_FLAGS) $^)) | sed -r 's/[A-Za-z0-9\-\_]+\.ocov/\n&/g' >> ./.depend
+
+-include ./.depend
+
+.c.o:
+ $(CC) $(CC_FLAGS) -c $< -o $@
+
+%.odbg:%.c
+ $(CC) $(CC_FLAGS) -g -c $< -o $@
+
+%.ocov:%.c
+ $(CC) $(CC_FLAGS) $(COV_CC) -c $< -o $@
+
+$(TARGET): $(OBJ_LIST)
+ $(CC) $(LD_FLAGS) $^ -o $@
+
+$(TARGET)-static: $(OBJ_LIST)
+ $(CC) $(LD_FLAGS) $^ -static -o $@
+
+$(TARGET)-dbg: $(OBJ_DBG_LIST)
+ $(CC) $(LD_FLAGS) $^ -g -o $@
+
+$(TARGET)-cov: $(OBJ_COV_LIST)
+ $(CC) $(LD_FLAGS) $^ $(COV_LD) -o $@
+
+cov: runcov
+ @llvm-profdata merge -sparse ./default.profraw -o ./default.profdata
+ @llvm-cov show $(TARGET)-cov -instr-profile=default.profdata
+
+covrep: runcov
+ @llvm-profdata merge -sparse ./default.profraw -o ./default.profdata
+ @llvm-cov report $(TARGET)-cov -instr-profile=default.profdata
+
+ASM:$(ASM_LIST)
+
+SO:$(TARGET).so
+
+A:$(TARGET).a
+
+ADBG:$(TARGET).adbg
+
+IR:$(IR_LIST)
+
+WASM:$(WASM_LIST)
+
+WAST:$(WAST_LIST)
+
+JS:$(JS_LIST)
+
+AST:$(AST_LIST)
+
+TAGS:tags
+
+#https://github.com/rizsotto/Bear
+BEAR: clean
+ bear make
+
+tags:$(SRCS)
+ $(shell $(CC) -c -I $(CTAGS_I_PATH) -M $(SRCS)|\
+ sed -e 's/[\\ ]/\n/g'|sed -e '/^$$/d' -e '/\.o:[ \t]*$$/d'|\
+ ctags -L - --c++-kinds=+p --fields=+iaS --extra=+q)
+
+%.dis: %.o
+ objdump -r -d -M intel -S $< > $@
+
+%.ir: %.c
+ $(CC) -emit-llvm -S -o $@ $<
+
+%.wasm: %.c
+ emcc $< -o $@
+
+%.wast: %.wasm
+ wasm2wat $< > $@
+
+%.js: %.c
+ emcc $< -s FORCE_FILESYSTEM=1 -s EXIT_RUNTIME=1 -o $@
+
+%.ast: %.c
+ $(CC) -Xclang -ast-dump -fsyntax-only $< > $@
+
+$(TARGET).so: $(OBJ_LIST)
+ $(CC) $(LD_FLAGS) $^ -shared -o $@
+
+$(TARGET).a: $(OBJ_LIST)
+ ar rcs $(TARGET).a $(OBJ_LIST)
+
+$(TARGET).adbg: $(OBJ_DBG_LIST)
+ ar rcs $(TARGET).adbg $(OBJ_DBG_LIST)
+
+runcov: $(TARGET)-cov
+ $(TARGET)-cov
+
+test: $(TARGET)
+ $(TARGET)
+
+run: $(TARGET)
+ $(TARGET)
+
+valgrind: $(TARGET)
+ - valgrind --track-origins=yes --leak-check=full --show-leak-kinds=all $(TARGET)
+
+cppcheck:
+ cppcheck $(SRCS)
+
+rundbg: $(TARGET)-dbg
+ gdb --batch --command=./debug.dbg --args $(TARGET)-dbg
+
+format:
+ - clang-format -i $(SRCS) $(HDRS)
+
+clean:
+ - rm -f *.o *.dis *.odbg *.ocov *.js *.ir *~ $(TARGET) $(TARGET).so $(TARGET)-static \
+ $(TARGET)-dbg $(TARGET).a $(TARGET)-cov *.wasm *.wast $(TARGET).adbg *.ast
+
+deepclean: clean
+ - rm tags
+ - rm .depend
+ - rm ./default.profraw ./default.profdata
+ - rm vgcore.*
+ - rm compile_commands.json
+ - rm *.gch
+
+help:
+ @echo "--all is the default target, runs $(TARGET) target"
+ @echo "--everything will build everything"
+ @echo "--SO will generate the so"
+ @echo "--ASM will generate assembly files"
+ @echo "--TAGS will generate tags file"
+ @echo "--BEAR will generate a compilation database"
+ @echo "--IR will generate llvm IR"
+ @echo "--JS will make the js file"
+ @echo "--AST will make the llvm ast file"
+ @echo "--WASM will make the wasm file"
+ @echo "--WAST will make the wasm text debug file"
+ @echo "--$(TARGET) builds the dynamically-linked executable"
+ @echo "--$(TARGET)-dbg will generate the debug build. BUILD_MODE should be set to DEBUG to work"
+ @echo "--$(TARGET)-static will statically link the executable to the libraries"
+ @echo "--$(TARGET)-cov is the coverage build"
+ @echo "--cov will print the coverage report"
+ @echo "--covrep will print the line coverage report"
+ @echo "--A will build the static library"
+ @echo "--TAGS will build the tags file"
+ @echo "--clean"
+ @echo "--deepclean will clean almost everything"
diff --git a/makefilecpp b/makefilecpp
new file mode 100644
index 0000000..8855fa8
--- /dev/null
+++ b/makefilecpp
@@ -0,0 +1,234 @@
+TARGET?=main
+SHELL=bash
+SHELL?=bash
+CXX=clang++
+CXX?=clang++
+ifdef OS
+CXX_FLAGS=-std=c++17
+else
+CXX_FLAGS=-std=c++17 -fpic
+endif
+CXX_EXTRA?=
+CTAGS_I_PATH?=./
+LD_FLAGS= -include-pch header.hpp.gch
+EXTRA_LD_FLAGS?=
+ADD_SANITIZERS_CC= -g -fsanitize=address -fno-omit-frame-pointer
+ADD_SANITIZERS_LD= -g -fsanitize=address
+MEM_SANITIZERS_CC= -g -fsanitize=memory -fno-omit-frame-pointer
+MEM_SANITIZERS_LD= -g -fsanitize=memory
+UB_SANITIZERS_CC= -g -fsanitize=undefined -fno-omit-frame-pointer
+UB_SANITIZERS_LD= -g -fsanitize=undefined
+FUZZ_SANITIZERS_CC= -fsanitize=fuzzer,address -g -fno-omit-frame-pointer
+FUZZ_SANITIZERS_LD= -fsanitize=fuzzer,address -g -fno-omit-frame-pointer
+COV_CXX= -fprofile-instr-generate -fcoverage-mapping
+COV_LD= -fprofile-instr-generate
+# BUILD_MODES are=RELEASE(default), DEBUG,ADDSAN,MEMSAN,UBSAN,FUZZ
+BUILD_MODE?=RELEASE
+#EXCLUSION_LIST='(\bdip)|(\bdim)'
+EXCLUSION_LIST='xxxxxx'
+OBJ_LIST:=$(patsubst %.cpp, %.o, $(shell find . -name '*.cpp' | grep -Ev $(EXCLUSION_LIST)))
+OBJ_COV_LIST:=$(patsubst %.cpp, %.ocov, $(shell find . -name '*.cpp' | grep -Ev $(EXCLUSION_LIST)))
+OBJ_DBG_LIST:=$(patsubst %.cpp, %.odbg, $(shell find . -name '*.cpp' | grep -Ev $(EXCLUSION_LIST)))
+ASM_LIST:=$(patsubst %.cpp, %.dis, $(shell find . -name '*.cpp' | grep -Ev $(EXCLUSION_LIST)))
+WASM_LIST:=$(patsubst %.cpp, %.wasm, $(shell find . -name '*.cpp' | grep -Ev $(EXCLUSION_LIST)))
+WAST_LIST:=$(patsubst %.cpp, %.wast, $(shell find . -name '*.cpp' | grep -Ev $(EXCLUSION_LIST)))
+IR_LIST:=$(patsubst %.cpp, %.ir, $(shell find . -name '*.cpp' | grep -Ev $(EXCLUSION_LIST)))
+JS_LIST:=$(patsubst %.cpp, %.js, $(shell find . -name '*.cpp' | grep -Ev $(EXCLUSION_LIST)))
+AST_LIST:=$(patsubst %.cpp, %.ast, $(shell find . -name '*.cpp' | grep -Ev $(EXCLUSION_LIST)))
+
+ifeq ($(BUILD_MODE), ADDSAN)
+ifeq ($(CXX), g++)
+$(error This build mode is only useable with clang++.)
+endif
+CXX_EXTRA+=$(ADD_SANITIZERS_CC)
+EXTRA_LD_FLAGS+=$(ADD_SANITIZERS_LD)
+endif
+
+ifeq ($(BUILD_MODE), MEMSAN)
+ifeq ($(CXX), g++)
+$(error This build mode is only useable with clang++.)
+endif
+CXX_EXTRA+=$(MEM_SANITIZERS_CC)
+EXTRA_LD_FLAGS+=$(MEM_SANITIZERS_LD)
+endif
+
+ifeq ($(BUILD_MODE), UBSAN)
+ifeq ($(CXX), g++)
+$(error This build mode is only useable with clang++.)
+endif
+CXX_EXTRA+=$(UB_SANITIZERS_CC)
+EXTRA_LD_FLAGS+=$(UB_SANITIZERS_LD)
+endif
+
+ifeq ($(BUILD_MODE), FUZZ)
+ifeq ($(CXX), g++)
+$(error This build mode is only useable with clang++.)
+endif
+CXX_EXTRA+=$(FUZZ_SANITIZERS_CC)
+EXTRA_LD_FLAGS+=$(FUZZ_SANITIZERS_LD)
+endif
+
+SRCS:=$(wildcard *.cpp)
+HDRS:=$(wildcard *.h)
+CXX_FLAGS+=$(CXX_EXTRA)
+LD_FLAGS+=$(EXTRA_LD_FLAGS)
+
+.DEFAULT:all
+
+.PHONY:all clean help ASM SO TAGS WASM JS exe IR WAST A ADBG AST cppcheck
+
+all:exe
+
+everything:$(TARGET) A ASM SO $(TARGET)-static $(TARGET)-dbg ADBG TAGS $(TARGET)-cov WASM JS IR WAST AST
+
+depend:.depend
+
+.depend:$(SRCS)
+ rm -rf .depend
+ $(CXX) -MM $(CXX_FLAGS) $^ > ./.depend
+ echo $(patsubst %.o:, %.odbg:, $(shell $(CXX) -MM $(CXX_FLAGS) $^)) | sed -r 's/[A-Za-z0-9\-\_]+\.odbg/\n&/g' >> ./.depend
+ echo $(patsubst %.o:, %.ocov:, $(shell $(CXX) -MM $(CXX_FLAGS) $^)) | sed -r 's/[A-Za-z0-9\-\_]+\.ocov/\n&/g' >> ./.depend
+
+-include ./.depend
+
+.cpp.o: header.hpp.gch
+ $(CXX) $(CXX_FLAGS) -c $< -o $@
+
+%.odbg:%.cpp
+ $(CXX) $(CXX_FLAGS) -g -c $< -o $@
+
+%.ocov:%.cpp
+ $(CXX) $(CXX_FLAGS) $(COV_CXX) -c $< -o $@
+
+header.hpp.gch:header.hpp
+ $(CXX) $(CXX_FLAGS) -c $< -o $@
+
+exe: header.hpp.gch $(TARGET)
+
+$(TARGET): $(OBJ_LIST)
+ $(CXX) $(LD_FLAGS) $^ -o $@
+
+$(TARGET)-static: $(OBJ_LIST)
+ $(CXX) $(LD_FLAGS) $^ -static -o $@
+
+$(TARGET)-dbg: $(OBJ_DBG_LIST)
+ $(CXX) $(LD_FLAGS) $^ -g -o $@
+
+$(TARGET)-cov: $(OBJ_COV_LIST)
+ $(CXX) $(LD_FLAGS) $^ $(COV_LD) -o $@
+
+cov: runcov
+ @llvm-profdata merge -sparse ./default.profraw -o ./default.profdata
+ @llvm-cov show $(TARGET)-cov -instr-profile=default.profdata
+
+covrep: runcov
+ @llvm-profdata merge -sparse ./default.profraw -o ./default.profdata
+ @llvm-cov report $(TARGET)-cov -instr-profile=default.profdata
+
+ASM:$(ASM_LIST)
+
+SO:$(TARGET).so
+
+A:$(TARGET).a
+
+ADBG:$(TARGET).adbg
+
+IR:$(IR_LIST)
+
+WASM:$(WASM_LIST)
+
+WAST:$(WAST_LIST)
+
+JS:$(JS_LIST)
+
+AST:$(AST_LIST)
+
+TAGS:tags
+
+#https://github.com/rizsotto/Bear
+BEAR: clean
+ bear make
+
+tags:$(SRCS)
+ $(shell $(CXX) -c -I $(CTAGS_I_PATH) -M $(SRCS)|\
+ sed -e 's/[\\ ]/\n/g'|sed -e '/^$$/d' -e '/\.o:[ \t]*$$/d'|\
+ ctags -L - --c++-kinds=+p --fields=+iaS --extra=+q)
+
+%.dis: %.o
+ objdump -r -d -M intel -S $< > $@
+
+%.ir: %.cpp
+ $(CXX) -emit-llvm -S -o $@ $<
+
+%.wasm: %.cpp
+ em++ $< -o $@
+
+%.wast: %.wasm
+ wasm2wat $< > $@
+
+%.js: %.cpp
+ em++ $< -s FORCE_FILESYSTEM=1 -s EXIT_RUNTIME=1 -o $@
+
+%.ast: %.cpp
+ $(CXX) -Xclang -ast-dump -fsyntax-only $< > $@
+
+$(TARGET).so: $(OBJ_LIST)
+ $(CXX) $(LD_FLAGS) $^ -shared -o $@
+
+$(TARGET).a: $(OBJ_LIST)
+ ar rcs $(TARGET).a $(OBJ_LIST)
+
+$(TARGET).adbg: $(OBJ_DBG_LIST)
+ ar rcs $(TARGET).adbg $(OBJ_DBG_LIST)
+
+runcov: $(TARGET)-cov
+ $(TARGET)-cov
+
+test: $(TARGET)
+ $(TARGET)
+
+run: $(TARGET)
+ $(TARGET)
+
+valgrind: $(TARGET)
+ - valgrind --track-origins=yes --leak-check=full --show-leak-kinds=all $(TARGET)
+
+cppcheck:
+ cppcheck $(SRCS)
+
+rundbg: $(TARGET)-dbg
+ gdb --batch --command=./debug.dbg --args $(TARGET)-dbg
+
+format:
+ - clang-format -i $(SRCS) $(HDRS)
+
+clean:
+ - rm -f *.o *.dis *.odbg *.ocov *.js *.ir *~ $(TARGET) $(TARGET).so $(TARGET)-static \
+ $(TARGET)-dbg $(TARGET).a $(TARGET)-cov *.wasm *.wast $(TARGET).adbg *.ast
+
+deepclean: clean
+ - rm tags
+ - rm .depend
+ - rm ./default.profraw ./default.profdata
+ - rm vgcore.*
+ - rm compile_commands.json
+ - rm *.gch
+
+help:
+ @echo "--all is the default target, runs $(TARGET) target"
+ @echo "--everything will build everything"
+ @echo "--SO will generate the so"
+ @echo "--ASM will generate assembly files"
+ @echo "--TAGS will generate tags file"
+ @echo "--BEAR will generate a compilation database"
+ @echo "--IR will generate llvm IR"
+ @echo "--$(TARGET) builds the dynamically-linked executable"
+ @echo "--$(TARGET)-dbg will generate the debug build. BUILD_MODE should be set to DEBUG to work"
+ @echo "--$(TARGET)-static will statically link the executable to the libraries"
+ @echo "--$(TARGET)-cov is the coverage build"
+ @echo "--cov will print the coverage report"
+ @echo "--covrep will print the line coverage report"
+ @echo "--A will build the static library"
+ @echo "--TAGS will build the tags file"
+ @echo "--clean"
+ @echo "--deepclean will clean almost everything"
diff --git a/misc.sh b/misc.sh
new file mode 100755
index 0000000..8139000
--- /dev/null
+++ b/misc.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+#sudo kbdrate -r 20
+#sudo kbdrate -d 250
+sudo mount /dev/sdb1 ~/extra
+setxkbmap -option ctrl:nocaps
+# font size is 11.3
diff --git a/mushi.py b/mushi.py
new file mode 100755
index 0000000..1f8a659
--- /dev/null
+++ b/mushi.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python3
+
+import argparse
+import socket
+import code
+import readline
+import signal
+import sys
+
+def SigHandler_SIGINT(signum, frame):
+ print()
+ sys.exit(0)
+
+def SigHandler_Timeout(signum, frame):
+ print("mushi timed out.")
+ raise Exception("time out")
+
+class Argparser(object):
+ def __init__(self):
+ self.parser = argparse.ArgumentParser()
+ self.parser.add_argument("--bool", action="store_true", help="bool", default=False)
+ self.parser.add_argument("--dbg", action="store_true", help="debug", default=False)
+
+ def parse(self, args):
+ self.args, self.rest = self.parser.parse_known_args(args)
+
+# write code here
+def premain(argparser):
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ server_address = ("", 10111)
+ sock.connect(server_address)
+ msg = " ".join(argparser.rest)
+ sock.sendall(bytes(msg, "utf-8"))
+ output = sock.recv(4096)
+ out2 = [c for c in output.decode("utf-8") if c != "\0"]
+ print("".join(out2))
+ sock.close()
+
+def main(argv):
+ argparser = Argparser()
+ argparser.parse(argv)
+ if argparser.args.dbg:
+ try:
+ premain(argparser)
+ except:
+ variables = globals().copy()
+ variables.update(locals())
+ shell = code.InteractiveConsole(variables)
+ shell.interact(banner="DEBUG REPL")
+ else:
+ premain(argparser)
+
+if __name__ == "__main__":
+ main(sys.argv[1:])
diff --git a/postit b/postit
new file mode 100644
index 0000000..b89e869
--- /dev/null
+++ b/postit
@@ -0,0 +1,16 @@
+/ignore -channels #go-nuts * JOINS PARTS QUITS NICKS
+sudo ip link set dev eth0 mtu 1420
+netsh int ipv4 show excludedportrange protocol=tcp
+ssh 192.168.1.110 -l u0_a263 -p 8022
+docker export -o fedora-33-rootfs.tar fedora33
+stty sane
+export LIBGL_ALWAYS_INDIRECT=1
+echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
+export DISPLAY=192.168.1.103:0
+sshfs -o idmap=user vagrant@192.168.1.100:/home/vagrant /home/devi/devi/vagrantfed33
+https://blog.packagecloud.io/eng/2016/06/22/monitoring-tuning-linux-networking-stack-receiving-data/
+https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-networking-stack-sending-data/
+https://www.ctrl.blog/entry/unbound-tls-forwarding.html
+script -q -c "sudo tcpdump -l port 53 2>/dev/null | grep --line-buffered ' A? '"
+st -f "DejaVuSansMono-11.3"
+https://wigle.net/
diff --git a/pygitty.py b/pygitty.py
new file mode 100755
index 0000000..2f348e1
--- /dev/null
+++ b/pygitty.py
@@ -0,0 +1,21 @@
+#!/usr/bin/env python3
+
+from github import Github
+import json
+import argparse
+
+class Argparser(object):
+ def __init__(self):
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--repo", type=str, help="repo to look for")
+ self.args = parser.parse_args()
+
+def main():
+ argparser = Argparser()
+ passwd = json.load(open("/home/bloodstalker/scripts/github.json"))["pass"]
+ g = Github(passwd)
+ repo = g.get_repo(argparser.args.repo)
+ print(repo.stargazers_count)
+
+if __name__ == "__main__":
+ main()
diff --git a/python/deviutil.py b/python/deviutil.py
new file mode 100755
index 0000000..efbfe8b
--- /dev/null
+++ b/python/deviutil.py
@@ -0,0 +1,229 @@
+#!/usr/bin/python3
+
+import argparse
+import code
+import signal
+import sys
+import socket
+from abc import ABCMeta, abstractmethod
+
+
+class Colors:
+ purple = '\033[95m'
+ blue = '\033[94m'
+ green = '\033[92m'
+ yellow = '\033[93m'
+ red = '\033[91m'
+ grey = '\033[1;37m'
+ darkgrey = '\033[1;30m'
+ cyan = '\033[1;36m'
+ ENDC = '\033[0m'
+ BOLD = '\033[1m'
+ UNDERLINE = '\033[4m'
+
+
+def SigHandler_SIGINT(signum, frame):
+ print()
+ sys.exit(0)
+
+
+class Argparser(object):
+ def __init__(self):
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--string", type=str, help="string")
+ parser.add_argument("--bool", action="store_true",
+ help="bool", default=False)
+ parser.add_argument("--dbg", action="store_true",
+ help="debug", default=False)
+ self.args = parser.parse_args()
+
+
+def ffs(offset, header_list, numbered, *args):
+ cn = Colors.green
+ ch = Colors.cyan
+ cd = Colors.blue
+ cb = Colors.BOLD
+ ci = Colors.red
+ ce = Colors.ENDC
+ max_column_width = []
+ lines = []
+ numbers_f = []
+ dummy = []
+
+ if numbered:
+ numbers_f.extend(range(1, len(args[-1])+1))
+ max_column_width.append(
+ max([len(repr(number)) for number in numbers_f]))
+ header_list.insert(0, "idx")
+
+ for arg in args:
+ max_column_width.append(max([len(repr(argette)) for argette in arg]))
+
+ index = range(0, len(header_list))
+ for header, width, i in zip(header_list, max_column_width, index):
+ max_column_width[i] = max(len(header), width) + offset
+
+ for i in index:
+ dummy.append(ch + cb + header_list[i].ljust(max_column_width[i]) + ce)
+ lines.append("".join(dummy))
+ dummy.clear()
+
+ index2 = range(0, len(args[-1]))
+ for i in index2:
+ if numbered:
+ dummy.append(ci+cb+repr(i).ljust(max_column_width[0])+ce)
+ for arg, width in zip(args, max_column_width[1:]):
+ dummy.append(cd+repr(arg[i]).ljust(width)+ce)
+ else:
+ for arg, width in zip(args, max_column_width):
+ dummy.append(cd+repr(arg[i]).ljust(width)+ce)
+ lines.append("".join(dummy))
+ dummy.clear()
+ return lines
+
+
+class Demon_Father:
+ __metalclass__ = ABCMeta
+
+ def __init__(self, pidfile):
+ self.pidfile = pidfile
+ self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ self.server_address = ('localhost', 10000)
+
+ def daemonize(self):
+ try:
+ pid = os.fork()
+ if pid > 0:
+ sys.exit(0)
+ except OSError as err:
+ sys.stderr.write('fork #1 failed: {0}\n'.format(err))
+ sys.exit(1)
+ os.chdir('/')
+ os.setsid()
+ os.umask(0)
+ try:
+ pid = os.fork()
+ if pid > 0:
+ sys.exit(0)
+ except OSError as err:
+ sys.stderr.write('fork #2 failed: {0}\n'.format(err))
+ sys.exit(1)
+ sys.stdout.flush()
+ sys.stderr.flush()
+ si = open(os.devnull, 'r')
+ so = open(os.devnull, 'a+')
+ se = open(os.devnull, 'a+')
+ os.dup2(si.fileno(), sys.stdin.fileno())
+ os.dup2(so.fileno(), sys.stdout.fileno())
+ os.dup2(se.fileno(), sys.stderr.fileno())
+ atexit.register(self.delpid)
+ pid = str(os.getpid())
+ with open(self.pidfile, 'w+') as f:
+ f.write(pid + '\n')
+
+ def delpid(self):
+ self.pidfile.close()
+ os.remove(self.pidfile)
+
+ def start(self):
+ self.daemonize()
+ try:
+ with open(self.pidfile, 'r') as pf:
+ pid = int(pf.read().strip())
+ except IOError:
+ pid = None
+ '''
+ if pid:
+ message = "pidfile {0} already exist. " + "Daemon already running?\n"
+ sys.stderr.write(message.format(self.pidfile))
+ sys.exit(1)
+ '''
+ self.run()
+
+ def stop(self):
+ try:
+ with open(self.pidfile, 'r') as pf:
+ pid = int(pf.read().strip())
+ except IOError:
+ pid = None
+ if not pid:
+ message = "pidfile {0} does not exist. " + "Daemon not running?\n"
+ sys.stderr.write(message.format(self.pidfile))
+ return
+ try:
+ while 1:
+ os.kill(pid, signal.SIGTERM)
+ time.sleep(0.1)
+ except OSError as err:
+ e = str(err.args)
+ if e.find("No such process") > 0:
+ if os.path.exists(self.pidfile):
+ os.remove(self.pidfile)
+ else:
+ print(str(err.args))
+ sys.exit(1)
+
+ def restart(self):
+ self.stop()
+ self.start()
+
+ @abstractmethod
+ def run(self):
+ pass
+
+
+def hexdump(obj):
+ count = int()
+ strrep = []
+ for byte in obj:
+ if count % 16 == 0:
+ for ch in strrep:
+ if ord(ch) > 32 and ord(ch) < 127:
+ print(ch, end='')
+ else:
+ pass
+ print()
+ strrep = []
+ print(format(count, "06x"), ': ', end='')
+ strrep.append(str(chr(byte)))
+ print(format(byte, '02x') + ' ', end='')
+ else:
+ pass
+ strrep += str(chr(byte))
+ print(format(byte, '02x') + ' ', end='')
+ count += 1
+ for i in range(0, 16-count % 16):
+ print(" ", end="")
+ for ch in strrep:
+ if ord(ch) > 32 and ord(ch) < 127:
+ print(ch, end='')
+ else:
+ pass
+ print()
+
+
+# write code here
+def premain(argparser):
+ signal.signal(signal.SIGINT, SigHandler_SIGINT)
+ # here
+ a = [0x2f, 0x6c, 0x69, 0x62, 0x36, 0x34, 0x2f, 0x6c, 0x64, 0x2d, 0x6c,
+ 0x69, 0x6e, 0x75, 0x78, 0x2d, 0x78, 0x38, 0x36, 0x2d, 0x36, 0x34, 0x2e, 0x73, 0x6f, 0x2e, 0x32, 0x00]
+ hexdump(a)
+
+
+def main():
+ argparser = Argparser()
+ if argparser.args.dbg:
+ try:
+ premain(argparser)
+ except:
+ variables = globals().copy()
+ variables.update(locals())
+ shell = code.InteractiveConsole(variables)
+ shell.interact(banner="DEBUG REPL")
+ else:
+ premain(argparser)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/python/main.py b/python/main.py
new file mode 100755
index 0000000..6649cb2
--- /dev/null
+++ b/python/main.py
@@ -0,0 +1,52 @@
+#!/usr/bin/env python3
+# _*_ coding=utf-8 _*_
+
+import argparse
+import code
+import signal
+import sys
+
+
+def SigHandler_SIGINT(signum, frame):
+ print()
+ sys.exit(0)
+
+
+class Argparser(object):
+ def __init__(self):
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--string", type=str, help="string")
+ parser.add_argument("--bool", action="store_true",
+ help="bool", default=False)
+ parser.add_argument("--dbg", action="store_true",
+ help="debug", default=False)
+ self.args = parser.parse_args()
+
+# write code here
+
+
+def premain(argparser):
+ signal.signal(signal.SIGINT, SigHandler_SIGINT)
+ # here
+
+
+def main():
+ argparser = Argparser()
+ if argparser.args.dbg:
+ try:
+ premain(argparser)
+ except Exception as e:
+ if hasattr(e, "__doc__"):
+ print(e.__doc__)
+ if hasattr(e, "message"):
+ print(e.message)
+ variables = globals().copy()
+ variables.update(locals())
+ shell = code.InteractiveConsole(variables)
+ shell.interact(banner="DEBUG REPL")
+ else:
+ premain(argparser)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/qtbrowser/config.py b/qtbrowser/config.py
new file mode 100644
index 0000000..e82b0a5
--- /dev/null
+++ b/qtbrowser/config.py
@@ -0,0 +1,100 @@
+import os
+solarized = {
+ 'base03': '#002b36',
+ 'base02': '#073642',
+ 'base01': '#586e75',
+ 'base00': '#657b83',
+ 'base0': '#839496',
+ 'base1': '#93a1a1',
+ 'base2': '#eee8d5',
+ 'base3': '#fdf6e3',
+ 'yellow': '#b58900',
+ 'orange': '#cb4b16',
+ 'red': '#dc322f',
+ 'magenta': '#d33682',
+ 'violet': '#6c71c4',
+ 'blue': '#268bd2',
+ 'cyan': '#2aa198',
+ 'green': '#859900'
+}
+
+c.colors.completion.category.bg = solarized['base03']
+c.colors.completion.category.border.bottom = solarized['base03']
+c.colors.completion.category.border.top = solarized['base03']
+c.colors.completion.category.fg = solarized['base3']
+c.colors.completion.even.bg = solarized['base02']
+c.colors.completion.fg = solarized['base3']
+c.colors.completion.item.selected.bg = solarized['violet']
+c.colors.completion.item.selected.border.bottom = solarized['violet']
+c.colors.completion.item.selected.border.top = solarized['violet']
+c.colors.completion.item.selected.fg = solarized['base3']
+c.colors.completion.match.fg = solarized['base2']
+c.colors.completion.odd.bg = solarized['base02']
+c.colors.completion.scrollbar.bg = solarized['base0']
+c.colors.completion.scrollbar.fg = solarized['base2']
+c.colors.downloads.bar.bg = solarized['base03']
+c.colors.downloads.error.bg = solarized['red']
+c.colors.downloads.error.fg = solarized['base3']
+c.colors.downloads.start.bg = '#0000aa'
+c.colors.downloads.start.fg = solarized['base3']
+c.colors.downloads.stop.bg = '#00aa00'
+c.colors.downloads.stop.fg = solarized['base3']
+c.colors.downloads.system.bg = 'rgb'
+c.colors.downloads.system.fg = 'rgb'
+c.colors.hints.bg = solarized['violet']
+c.colors.hints.fg = solarized['base3']
+c.colors.hints.match.fg = solarized['base2']
+c.colors.keyhint.bg = 'rgba(0, 0, 0, 80%)'
+c.colors.keyhint.fg = solarized['base3']
+c.colors.keyhint.suffix.fg = solarized['yellow']
+c.colors.messages.error.bg = solarized['red']
+c.colors.messages.error.border = solarized['red']
+c.colors.messages.error.fg = solarized['base3']
+c.colors.messages.info.bg = solarized['base03']
+c.colors.messages.info.border = solarized['base03']
+c.colors.messages.info.fg = solarized['base3']
+c.colors.messages.warning.bg = solarized['orange']
+c.colors.messages.warning.border = solarized['orange']
+c.colors.messages.warning.fg = solarized['base3']
+c.colors.prompts.bg = solarized['base02']
+c.colors.prompts.border = '1px solid ' + solarized['base3']
+c.colors.prompts.fg = solarized['base3']
+c.colors.prompts.selected.bg = solarized['base01']
+c.colors.statusbar.caret.bg = solarized['blue']
+c.colors.statusbar.caret.fg = solarized['base3']
+c.colors.statusbar.caret.selection.bg = solarized['violet']
+c.colors.statusbar.caret.selection.fg = solarized['base3']
+c.colors.statusbar.command.bg = solarized['base03']
+c.colors.statusbar.command.fg = solarized['base3']
+c.colors.statusbar.command.private.bg = solarized['base01']
+c.colors.statusbar.command.private.fg = solarized['base3']
+c.colors.statusbar.insert.bg = solarized['green']
+c.colors.statusbar.insert.fg = solarized['base3']
+c.colors.statusbar.normal.bg = solarized['base03']
+c.colors.statusbar.normal.fg = solarized['base3']
+c.colors.statusbar.passthrough.bg = solarized['magenta']
+c.colors.statusbar.passthrough.fg = solarized['base3']
+c.colors.statusbar.private.bg = solarized['base01']
+c.colors.statusbar.private.fg = solarized['base3']
+c.colors.statusbar.progress.bg = solarized['base3']
+c.colors.statusbar.url.error.fg = solarized['red']
+c.colors.statusbar.url.fg = solarized['base3']
+c.colors.statusbar.url.hover.fg = solarized['base2']
+c.colors.statusbar.url.success.http.fg = solarized['base3']
+c.colors.statusbar.url.success.https.fg = solarized['base3']
+c.colors.statusbar.url.warn.fg = solarized['yellow']
+c.colors.tabs.bar.bg = '#555555'
+c.colors.tabs.even.bg = solarized['base01']
+c.colors.tabs.even.fg = solarized['base2']
+c.colors.tabs.indicator.error = solarized['red']
+c.colors.tabs.indicator.start = solarized['violet']
+c.colors.tabs.indicator.stop = solarized['orange']
+c.colors.tabs.odd.bg = solarized['base01']
+c.colors.tabs.odd.fg = solarized['base2']
+c.colors.tabs.selected.even.bg = solarized['base03']
+c.colors.tabs.selected.even.fg = solarized['base3']
+c.colors.tabs.selected.odd.bg = solarized['base03']
+c.colors.tabs.selected.odd.fg = solarized['base3']
+
+c.auto_save.session = True
+c.content.user_stylesheets = "/home/bloodstalker/solarized-everything-css/css/solarized-all-sites-dark.css"
diff --git a/rpi/configmap.yaml b/rpi/configmap.yaml
new file mode 100644
index 0000000..551ee23
--- /dev/null
+++ b/rpi/configmap.yaml
@@ -0,0 +1,7 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: k3s-rpi-configmap
+data:
+ pihole_tz: iran/tehran
+ squid_config_vol: /etc/squid/
diff --git a/rpi/ntp/ntp.conf b/rpi/ntp/ntp.conf
new file mode 100644
index 0000000..b81b065
--- /dev/null
+++ b/rpi/ntp/ntp.conf
@@ -0,0 +1,65 @@
+# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help
+
+driftfile /var/lib/ntp/ntp.drift
+
+# Leap seconds definition provided by tzdata
+leapfile /usr/share/zoneinfo/leap-seconds.list
+
+# Enable this if you want statistics to be logged.
+#statsdir /var/log/ntpstats/
+logfile /var/log/ntp.log
+
+statistics loopstats peerstats clockstats
+filegen loopstats file loopstats type day enable
+filegen peerstats file peerstats type day enable
+filegen clockstats file clockstats type day enable
+
+# Specify one or more NTP servers.
+
+# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
+# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
+# more information.
+pool 0.ubuntu.pool.ntp.org iburst
+pool 1.ubuntu.pool.ntp.org iburst
+pool 2.ubuntu.pool.ntp.org iburst
+pool 3.ubuntu.pool.ntp.org iburst
+
+# Use Ubuntu's ntp server as a fallback.
+pool ntp.ubuntu.com
+
+# Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for
+# details. The web page <http://support.ntp.org/bin/view/Support/AccessRestrictions>
+# might also be helpful.
+#
+# Note that "restrict" applies to both servers and clients, so a configuration
+# that might be intended to block requests from certain clients could also end
+# up blocking replies from your own upstream servers.
+
+# By default, exchange time with everybody, but don't allow configuration.
+restrict -4 default kod notrap nomodify nopeer noquery limited
+restrict -6 default kod notrap nomodify nopeer noquery limited
+
+# Local users may interrogate the ntp server more closely.
+restrict 127.0.0.1
+restrict ::1
+
+# Needed for adding pool entries
+restrict source notrap nomodify noquery
+
+# Clients from this (example!) subnet have unlimited access, but only if
+# cryptographically authenticated.
+#restrict 192.168.123.0 mask 255.255.255.0 notrust
+restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
+
+
+# If you want to provide time to your local subnet, change the next line.
+# (Again, the address is an example only.)
+#broadcast 192.168.123.255
+
+# If you want to listen to time broadcasts on your local subnet, de-comment the
+# next lines. Please do this only if you trust everybody on the network!
+#disable auth
+#broadcastclient
+
+server 127.127.1.0 # local clock
+fudge 127.127.1.0 statrum 10
diff --git a/rpi/pihole-deployment.yaml b/rpi/pihole-deployment.yaml
new file mode 100644
index 0000000..49e44fe
--- /dev/null
+++ b/rpi/pihole-deployment.yaml
@@ -0,0 +1,65 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: pihole
+ lables:
+ app: pihole
+spec:
+ replicas: 1
+ selctor:
+ matchlabels:
+ app: pihole
+ template:
+ metadata:
+ labels:
+ app: pihole
+ spec:
+ containers:
+ - name: pihole
+ image: pihole/pihole
+ ports:
+ - containerPort: 53
+ - containerPort: 67
+ - containerPort: 80
+ - containerPort: 443
+ env:
+ - name: TZ
+ valueFrom:
+ configMapKeyRef:
+ name: k3s-rpi-configmap
+ key: pihole_tz
+ - name: WEBPASSWORD
+ valueFrom:
+ secretKeyRef:
+ name: k3s-rpi-secrets
+ key: pihole-webpassword
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: pihole-service
+spec:
+ selector:
+ app: pihole
+ type: LoadBalancer
+ ports:
+ - protocol: TCP
+ port: 53
+ targetPort: 53
+ nodePort: 53
+ - protocol: UDP
+ port: 53
+ targetPort: 53
+ nodePort: 53
+ - protocol: UDP
+ port: 67
+ targetPort: 67
+ nodePort: 67
+ - protocol: TCP
+ port: 80
+ targetPort: 80
+ nodePort: 80
+ - protocol: TCP
+ port: 443
+ targetPort: 443
+ nodePort: 443
diff --git a/rpi/squid-proxy-deployment.yaml b/rpi/squid-proxy-deployment.yaml
new file mode 100644
index 0000000..70ec65e
--- /dev/null
+++ b/rpi/squid-proxy-deployment.yaml
@@ -0,0 +1,56 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: squid
+ lables:
+ app: squid
+spec:
+ replicas: 1
+ selctor:
+ matchlabels:
+ app: squid
+ template:
+ metadata:
+ labels:
+ app: squid
+ spec:
+ containers:
+ - name: squid
+ image: bloodstalker/squid:apline-5.0
+ ports:
+ - containerPort: 80
+ env:
+ - name: TZ
+ valueFrom:
+ configMapKeyRef:
+ name: k3s-rpi-configmap
+ key: pihole_tz
+ - name: WEBPASSWORD
+ valueFrom:
+ secretKeyRef:
+ name: k3s-rpi-secrets
+ key: pihole-webpassword
+ volumes:
+ - name: squid-config-volume
+ valueFrom:
+ configMapKeyRef:
+ name: k3s-rpi-configmap
+ key: squid_config_vol
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: squid-service
+spec:
+ selector:
+ app: squid
+ type: LoadBalancer
+ ports:
+ - protocol: UDP
+ port: 80
+ targetPort: 80
+ nodePort: 80
+ - protocol: TCP
+ port: 80
+ targetPort: 80
+ nodePort: 80
diff --git a/rpi/squid/squid.conf b/rpi/squid/squid.conf
new file mode 100644
index 0000000..5099bbc
--- /dev/null
+++ b/rpi/squid/squid.conf
@@ -0,0 +1,7963 @@
+# WELCOME TO SQUID 3.5.23
+# ----------------------------
+#
+# This is the documentation for the Squid configuration file.
+# This documentation can also be found online at:
+# http://www.squid-cache.org/Doc/config/
+#
+# You may wish to look at the Squid home page and wiki for the
+# FAQ and other documentation:
+# http://www.squid-cache.org/
+# http://wiki.squid-cache.org/SquidFaq
+# http://wiki.squid-cache.org/ConfigExamples
+#
+# This documentation shows what the defaults for various directives
+# happen to be. If you don't need to change the default, you should
+# leave the line out of your squid.conf in most cases.
+#
+# In some cases "none" refers to no default setting at all,
+# while in other cases it refers to the value of the option
+# - the comments for that keyword indicate if this is the case.
+#
+
+# Configuration options can be included using the "include" directive.
+# Include takes a list of files to include. Quoting and wildcards are
+# supported.
+#
+# For example,
+#
+# include /path/to/included/file/squid.acl.config
+#
+# Includes can be nested up to a hard-coded depth of 16 levels.
+# This arbitrary restriction is to prevent recursive include references
+# from causing Squid entering an infinite loop whilst trying to load
+# configuration files.
+#
+# Values with byte units
+#
+# Squid accepts size units on some size related directives. All
+# such directives are documented with a default value displaying
+# a unit.
+#
+# Units accepted by Squid are:
+# bytes - byte
+# KB - Kilobyte (1024 bytes)
+# MB - Megabyte
+# GB - Gigabyte
+#
+# Values with spaces, quotes, and other special characters
+#
+# Squid supports directive parameters with spaces, quotes, and other
+# special characters. Surround such parameters with "double quotes". Use
+# the configuration_includes_quoted_values directive to enable or
+# disable that support.
+#
+# Squid supports reading configuration option parameters from external
+# files using the syntax:
+# parameters("/path/filename")
+# For example:
+# acl whitelist dstdomain parameters("/etc/squid/whitelist.txt")
+#
+# Conditional configuration
+#
+# If-statements can be used to make configuration directives
+# depend on conditions:
+#
+# if <CONDITION>
+# ... regular configuration directives ...
+# [else
+# ... regular configuration directives ...]
+# endif
+#
+# The else part is optional. The keywords "if", "else", and "endif"
+# must be typed on their own lines, as if they were regular
+# configuration directives.
+#
+# NOTE: An else-if condition is not supported.
+#
+# These individual conditions types are supported:
+#
+# true
+# Always evaluates to true.
+# false
+# Always evaluates to false.
+# <integer> = <integer>
+# Equality comparison of two integer numbers.
+#
+#
+# SMP-Related Macros
+#
+# The following SMP-related preprocessor macros can be used.
+#
+# ${process_name} expands to the current Squid process "name"
+# (e.g., squid1, squid2, or cache1).
+#
+# ${process_number} expands to the current Squid process
+# identifier, which is an integer number (e.g., 1, 2, 3) unique
+# across all Squid processes of the current service instance.
+#
+# ${service_name} expands into the current Squid service instance
+# name identifier which is provided by -n on the command line.
+#
+
+# TAG: broken_vary_encoding
+# This option is not yet supported by Squid-3.
+#Default:
+# none
+
+# TAG: cache_vary
+# This option is not yet supported by Squid-3.
+#Default:
+# none
+
+# TAG: error_map
+# This option is not yet supported by Squid-3.
+#Default:
+# none
+
+# TAG: external_refresh_check
+# This option is not yet supported by Squid-3.
+#Default:
+# none
+
+# TAG: location_rewrite_program
+# This option is not yet supported by Squid-3.
+#Default:
+# none
+
+# TAG: refresh_stale_hit
+# This option is not yet supported by Squid-3.
+#Default:
+# none
+
+# TAG: hierarchy_stoplist
+# Remove this line. Use always_direct or cache_peer_access ACLs instead if you need to prevent cache_peer use.
+#Default:
+# none
+
+# TAG: log_access
+# Remove this line. Use acls with access_log directives to control access logging
+#Default:
+# none
+
+# TAG: log_icap
+# Remove this line. Use acls with icap_log directives to control icap logging
+#Default:
+# none
+
+# TAG: ignore_ims_on_miss
+# Remove this line. The HTTP/1.1 feature is now configured by 'cache_miss_revalidate'.
+#Default:
+# none
+
+# TAG: chunked_request_body_max_size
+# Remove this line. Squid is now HTTP/1.1 compliant.
+#Default:
+# none
+
+# TAG: dns_v4_fallback
+# Remove this line. Squid performs a 'Happy Eyeballs' algorithm, the 'fallback' algorithm is no longer relevant.
+#Default:
+# none
+
+# TAG: emulate_httpd_log
+# Replace this with an access_log directive using the format 'common' or 'combined'.
+#Default:
+# none
+
+# TAG: forward_log
+# Use a regular access.log with ACL limiting it to MISS events.
+#Default:
+# none
+
+# TAG: ftp_list_width
+# Remove this line. Configure FTP page display using the CSS controls in errorpages.css instead.
+#Default:
+# none
+
+# TAG: ignore_expect_100
+# Remove this line. The HTTP/1.1 feature is now fully supported by default.
+#Default:
+# none
+
+# TAG: log_fqdn
+# Remove this option from your config. To log FQDN use %>A in the log format.
+#Default:
+# none
+
+# TAG: log_ip_on_direct
+# Remove this option from your config. To log server or peer names use %<A in the log format.
+#Default:
+# none
+
+# TAG: maximum_single_addr_tries
+# Replaced by connect_retries. The behaviour has changed, please read the documentation before altering.
+#Default:
+# none
+
+# TAG: referer_log
+# Replace this with an access_log directive using the format 'referrer'.
+#Default:
+# none
+
+# TAG: update_headers
+# Remove this line. The feature is supported by default in storage types where update is implemented.
+#Default:
+# none
+
+# TAG: url_rewrite_concurrency
+# Remove this line. Set the 'concurrency=' option of url_rewrite_children instead.
+#Default:
+# none
+
+# TAG: useragent_log
+# Replace this with an access_log directive using the format 'useragent'.
+#Default:
+# none
+
+# TAG: dns_testnames
+# Remove this line. DNS is no longer tested on startup.
+#Default:
+# none
+
+# TAG: extension_methods
+# Remove this line. All valid methods for HTTP are accepted by default.
+#Default:
+# none
+
+# TAG: zero_buffers
+#Default:
+# none
+
+# TAG: incoming_rate
+#Default:
+# none
+
+# TAG: server_http11
+# Remove this line. HTTP/1.1 is supported by default.
+#Default:
+# none
+
+# TAG: upgrade_http0.9
+# Remove this line. ICY/1.0 streaming protocol is supported by default.
+#Default:
+# none
+
+# TAG: zph_local
+# Alter these entries. Use the qos_flows directive instead.
+#Default:
+# none
+
+# TAG: header_access
+# Since squid-3.0 replace with request_header_access or reply_header_access
+# depending on whether you wish to match client requests or server replies.
+#Default:
+# none
+
+# TAG: httpd_accel_no_pmtu_disc
+# Since squid-3.0 use the 'disable-pmtu-discovery' flag on http_port instead.
+#Default:
+# none
+
+# TAG: wais_relay_host
+# Replace this line with 'cache_peer' configuration.
+#Default:
+# none
+
+# TAG: wais_relay_port
+# Replace this line with 'cache_peer' configuration.
+#Default:
+# none
+
+# OPTIONS FOR SMP
+# -----------------------------------------------------------------------------
+
+# TAG: workers
+# Number of main Squid processes or "workers" to fork and maintain.
+# 0: "no daemon" mode, like running "squid -N ..."
+# 1: "no SMP" mode, start one main Squid process daemon (default)
+# N: start N main Squid process daemons (i.e., SMP mode)
+#
+# In SMP mode, each worker does nearly all what a single Squid daemon
+# does (e.g., listen on http_port and forward HTTP requests).
+#Default:
+# SMP support disabled.
+
+# TAG: cpu_affinity_map
+# Usage: cpu_affinity_map process_numbers=P1,P2,... cores=C1,C2,...
+#
+# Sets 1:1 mapping between Squid processes and CPU cores. For example,
+#
+# cpu_affinity_map process_numbers=1,2,3,4 cores=1,3,5,7
+#
+# affects processes 1 through 4 only and places them on the first
+# four even cores, starting with core #1.
+#
+# CPU cores are numbered starting from 1. Requires support for
+# sched_getaffinity(2) and sched_setaffinity(2) system calls.
+#
+# Multiple cpu_affinity_map options are merged.
+#
+# See also: workers
+#Default:
+# Let operating system decide.
+
+# OPTIONS FOR AUTHENTICATION
+# -----------------------------------------------------------------------------
+
+# TAG: auth_param
+# This is used to define parameters for the various authentication
+# schemes supported by Squid.
+#
+# format: auth_param scheme parameter [setting]
+#
+# The order in which authentication schemes are presented to the client is
+# dependent on the order the scheme first appears in config file. IE
+# has a bug (it's not RFC 2617 compliant) in that it will use the basic
+# scheme if basic is the first entry presented, even if more secure
+# schemes are presented. For now use the order in the recommended
+# settings section below. If other browsers have difficulties (don't
+# recognize the schemes offered even if you are using basic) either
+# put basic first, or disable the other schemes (by commenting out their
+# program entry).
+#
+# Once an authentication scheme is fully configured, it can only be
+# shutdown by shutting squid down and restarting. Changes can be made on
+# the fly and activated with a reconfigure. I.E. You can change to a
+# different helper, but not unconfigure the helper completely.
+#
+# Please note that while this directive defines how Squid processes
+# authentication it does not automatically activate authentication.
+# To use authentication you must in addition make use of ACLs based
+# on login name in http_access (proxy_auth, proxy_auth_regex or
+# external with %LOGIN used in the format tag). The browser will be
+# challenged for authentication on the first such acl encountered
+# in http_access processing and will also be re-challenged for new
+# login credentials if the request is being denied by a proxy_auth
+# type acl.
+#
+# WARNING: authentication can't be used in a transparently intercepting
+# proxy as the client then thinks it is talking to an origin server and
+# not the proxy. This is a limitation of bending the TCP/IP protocol to
+# transparently intercepting port 80, not a limitation in Squid.
+# Ports flagged 'transparent', 'intercept', or 'tproxy' have
+# authentication disabled.
+#
+# === Parameters common to all schemes. ===
+#
+# "program" cmdline
+# Specifies the command for the external authenticator.
+#
+# By default, each authentication scheme is not used unless a
+# program is specified.
+#
+# See http://wiki.squid-cache.org/Features/AddonHelpers for
+# more details on helper operations and creating your own.
+#
+# "key_extras" format
+# Specifies a string to be append to request line format for
+# the authentication helper. "Quoted" format values may contain
+# spaces and logformat %macros. In theory, any logformat %macro
+# can be used. In practice, a %macro expands as a dash (-) if
+# the helper request is sent before the required macro
+# information is available to Squid.
+#
+# By default, Squid uses request formats provided in
+# scheme-specific examples below (search for %credentials).
+#
+# The expanded key_extras value is added to the Squid credentials
+# cache and, hence, will affect authentication. It can be used to
+# autenticate different users with identical user names (e.g.,
+# when user authentication depends on http_port).
+#
+# Avoid adding frequently changing information to key_extras. For
+# example, if you add user source IP, and it changes frequently
+# in your environment, then max_user_ip ACL is going to treat
+# every user+IP combination as a unique "user", breaking the ACL
+# and wasting a lot of memory on those user records. It will also
+# force users to authenticate from scratch whenever their IP
+# changes.
+#
+# "realm" string
+# Specifies the protection scope (aka realm name) which is to be
+# reported to the client for the authentication scheme. It is
+# commonly part of the text the user will see when prompted for
+# their username and password.
+#
+# For Basic the default is "Squid proxy-caching web server".
+# For Digest there is no default, this parameter is mandatory.
+# For NTLM and Negotiate this parameter is ignored.
+#
+# "children" numberofchildren [startup=N] [idle=N] [concurrency=N]
+#
+# The maximum number of authenticator processes to spawn. If
+# you start too few Squid will have to wait for them to process
+# a backlog of credential verifications, slowing it down. When
+# password verifications are done via a (slow) network you are
+# likely to need lots of authenticator processes.
+#
+# The startup= and idle= options permit some skew in the exact
+# amount run. A minimum of startup=N will begin during startup
+# and reconfigure. Squid will start more in groups of up to
+# idle=N in an attempt to meet traffic needs and to keep idle=N
+# free above those traffic needs up to the maximum.
+#
+# The concurrency= option sets the number of concurrent requests
+# the helper can process. The default of 0 is used for helpers
+# who only supports one request at a time. Setting this to a
+# number greater than 0 changes the protocol used to include a
+# channel ID field first on the request/response line, allowing
+# multiple requests to be sent to the same helper in parallel
+# without waiting for the response.
+#
+# Concurrency must not be set unless it's known the helper
+# supports the input format with channel-ID fields.
+#
+# NOTE: NTLM and Negotiate schemes do not support concurrency
+# in the Squid code module even though some helpers can.
+#
+#
+#
+# === Example Configuration ===
+#
+# This configuration displays the recommended authentication scheme
+# order from most to least secure with recommended minimum configuration
+# settings for each scheme:
+#
+##auth_param negotiate program <uncomment and complete this line to activate>
+##auth_param negotiate children 20 startup=0 idle=1
+##auth_param negotiate keep_alive on
+##
+##auth_param digest program <uncomment and complete this line to activate>
+##auth_param digest children 20 startup=0 idle=1
+##auth_param digest realm Squid proxy-caching web server
+##auth_param digest nonce_garbage_interval 5 minutes
+##auth_param digest nonce_max_duration 30 minutes
+##auth_param digest nonce_max_count 50
+##
+##auth_param ntlm program <uncomment and complete this line to activate>
+##auth_param ntlm children 20 startup=0 idle=1
+##auth_param ntlm keep_alive on
+##
+##auth_param basic program <uncomment and complete this line>
+##auth_param basic children 5 startup=5 idle=1
+##auth_param basic realm Squid proxy-caching web server
+##auth_param basic credentialsttl 2 hours
+#Default:
+# none
+
+# TAG: authenticate_cache_garbage_interval
+# The time period between garbage collection across the username cache.
+# This is a trade-off between memory utilization (long intervals - say
+# 2 days) and CPU (short intervals - say 1 minute). Only change if you
+# have good reason to.
+#Default:
+# authenticate_cache_garbage_interval 1 hour
+
+# TAG: authenticate_ttl
+# The time a user & their credentials stay in the logged in
+# user cache since their last request. When the garbage
+# interval passes, all user credentials that have passed their
+# TTL are removed from memory.
+#Default:
+# authenticate_ttl 1 hour
+
+# TAG: authenticate_ip_ttl
+# If you use proxy authentication and the 'max_user_ip' ACL,
+# this directive controls how long Squid remembers the IP
+# addresses associated with each user. Use a small value
+# (e.g., 60 seconds) if your users might change addresses
+# quickly, as is the case with dialup. You might be safe
+# using a larger value (e.g., 2 hours) in a corporate LAN
+# environment with relatively static address assignments.
+#Default:
+# authenticate_ip_ttl 1 second
+
+# ACCESS CONTROLS
+# -----------------------------------------------------------------------------
+
+# TAG: external_acl_type
+# This option defines external acl classes using a helper program
+# to look up the status
+#
+# external_acl_type name [options] FORMAT.. /path/to/helper [helper arguments..]
+#
+# Options:
+#
+# ttl=n TTL in seconds for cached results (defaults to 3600
+# for 1 hour)
+#
+# negative_ttl=n
+# TTL for cached negative lookups (default same
+# as ttl)
+#
+# grace=n Percentage remaining of TTL where a refresh of a
+# cached entry should be initiated without needing to
+# wait for a new reply. (default is for no grace period)
+#
+# cache=n The maximum number of entries in the result cache. The
+# default limit is 262144 entries. Each cache entry usually
+# consumes at least 256 bytes. Squid currently does not remove
+# expired cache entries until the limit is reached, so a proxy
+# will sooner or later reach the limit. The expanded FORMAT
+# value is used as the cache key, so if the details in FORMAT
+# are highly variable, a larger cache may be needed to produce
+# reduction in helper load.
+#
+# children-max=n
+# Maximum number of acl helper processes spawned to service
+# external acl lookups of this type. (default 5)
+#
+# children-startup=n
+# Minimum number of acl helper processes to spawn during
+# startup and reconfigure to service external acl lookups
+# of this type. (default 0)
+#
+# children-idle=n
+# Number of acl helper processes to keep ahead of traffic
+# loads. Squid will spawn this many at once whenever load
+# rises above the capabilities of existing processes.
+# Up to the value of children-max. (default 1)
+#
+# concurrency=n concurrency level per process. Only used with helpers
+# capable of processing more than one query at a time.
+#
+# protocol=2.5 Compatibility mode for Squid-2.5 external acl helpers.
+#
+# ipv4 / ipv6 IP protocol used to communicate with this helper.
+# The default is to auto-detect IPv6 and use it when available.
+#
+#
+# FORMAT specifications
+#
+# %LOGIN Authenticated user login name
+# %un A user name. Expands to the first available name
+# from the following list of information sources:
+# - authenticated user name, like %ul or %LOGIN
+# - user name sent by an external ACL, like %EXT_USER
+# - SSL client name, like %us in logformat
+# - ident user name, like %ui in logformat
+# %EXT_USER Username from previous external acl
+# %EXT_LOG Log details from previous external acl
+# %EXT_TAG Tag from previous external acl
+# %IDENT Ident user name
+# %SRC Client IP
+# %SRCPORT Client source port
+# %URI Requested URI
+# %DST Requested host
+# %PROTO Requested URL scheme
+# %PORT Requested port
+# %PATH Requested URL path
+# %METHOD Request method
+# %MYADDR Squid interface address
+# %MYPORT Squid http_port number
+# %PATH Requested URL-path (including query-string if any)
+# %USER_CERT SSL User certificate in PEM format
+# %USER_CERTCHAIN SSL User certificate chain in PEM format
+# %USER_CERT_xx SSL User certificate subject attribute xx
+# %USER_CA_CERT_xx SSL User certificate issuer attribute xx
+# %ssl::>sni SSL client SNI sent to Squid
+# %ssl::<cert_subject SSL server certificate DN
+# %ssl::<cert_issuer SSL server certificate issuer DN
+#
+# %>{Header} HTTP request header "Header"
+# %>{Hdr:member}
+# HTTP request header "Hdr" list member "member"
+# %>{Hdr:;member}
+# HTTP request header list member using ; as
+# list separator. ; can be any non-alphanumeric
+# character.
+#
+# %<{Header} HTTP reply header "Header"
+# %<{Hdr:member}
+# HTTP reply header "Hdr" list member "member"
+# %<{Hdr:;member}
+# HTTP reply header list member using ; as
+# list separator. ; can be any non-alphanumeric
+# character.
+#
+# %ACL The name of the ACL being tested.
+# %DATA The ACL arguments. If not used then any arguments
+# is automatically added at the end of the line
+# sent to the helper.
+# NOTE: this will encode the arguments as one token,
+# whereas the default will pass each separately.
+#
+# %% The percent sign. Useful for helpers which need
+# an unchanging input format.
+#
+#
+# General request syntax:
+#
+# [channel-ID] FORMAT-values [acl-values ...]
+#
+#
+# FORMAT-values consists of transaction details expanded with
+# whitespace separation per the config file FORMAT specification
+# using the FORMAT macros listed above.
+#
+# acl-values consists of any string specified in the referencing
+# config 'acl ... external' line. see the "acl external" directive.
+#
+# Request values sent to the helper are URL escaped to protect
+# each value in requests against whitespaces.
+#
+# If using protocol=2.5 then the request sent to the helper is not
+# URL escaped to protect against whitespace.
+#
+# NOTE: protocol=3.0 is deprecated as no longer necessary.
+#
+# When using the concurrency= option the protocol is changed by
+# introducing a query channel tag in front of the request/response.
+# The query channel tag is a number between 0 and concurrency-1.
+# This value must be echoed back unchanged to Squid as the first part
+# of the response relating to its request.
+#
+#
+# The helper receives lines expanded per the above format specification
+# and for each input line returns 1 line starting with OK/ERR/BH result
+# code and optionally followed by additional keywords with more details.
+#
+#
+# General result syntax:
+#
+# [channel-ID] result keyword=value ...
+#
+# Result consists of one of the codes:
+#
+# OK
+# the ACL test produced a match.
+#
+# ERR
+# the ACL test does not produce a match.
+#
+# BH
+# An internal error occurred in the helper, preventing
+# a result being identified.
+#
+# The meaning of 'a match' is determined by your squid.conf
+# access control configuration. See the Squid wiki for details.
+#
+# Defined keywords:
+#
+# user= The users name (login)
+#
+# password= The users password (for login= cache_peer option)
+#
+# message= Message describing the reason for this response.
+# Available as %o in error pages.
+# Useful on (ERR and BH results).
+#
+# tag= Apply a tag to a request. Only sets a tag once,
+# does not alter existing tags.
+#
+# log= String to be logged in access.log. Available as
+# %ea in logformat specifications.
+#
+# clt_conn_tag= Associates a TAG with the client TCP connection.
+# Please see url_rewrite_program related documentation
+# for this kv-pair.
+#
+# Any keywords may be sent on any response whether OK, ERR or BH.
+#
+# All response keyword values need to be a single token with URL
+# escaping, or enclosed in double quotes (") and escaped using \ on
+# any double quotes or \ characters within the value. The wrapping
+# double quotes are removed before the value is interpreted by Squid.
+# \r and \n are also replace by CR and LF.
+#
+# Some example key values:
+#
+# user=John%20Smith
+# user="John Smith"
+# user="J. \"Bob\" Smith"
+#Default:
+# none
+
+# TAG: acl
+# Defining an Access List
+#
+# Every access list definition must begin with an aclname and acltype,
+# followed by either type-specific arguments or a quoted filename that
+# they are read from.
+#
+# acl aclname acltype argument ...
+# acl aclname acltype "file" ...
+#
+# When using "file", the file should contain one item per line.
+#
+# Some acl types supports options which changes their default behaviour.
+# The available options are:
+#
+# -i,+i By default, regular expressions are CASE-SENSITIVE. To make them
+# case-insensitive, use the -i option. To return case-sensitive
+# use the +i option between patterns, or make a new ACL line
+# without -i.
+#
+# -n Disable lookups and address type conversions. If lookup or
+# conversion is required because the parameter type (IP or
+# domain name) does not match the message address type (domain
+# name or IP), then the ACL would immediately declare a mismatch
+# without any warnings or lookups.
+#
+# -- Used to stop processing all options, in the case the first acl
+# value has '-' character as first character (for example the '-'
+# is a valid domain name)
+#
+# Some acl types require suspending the current request in order
+# to access some external data source.
+# Those which do are marked with the tag [slow], those which
+# don't are marked as [fast].
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl
+# for further information
+#
+# ***** ACL TYPES AVAILABLE *****
+#
+# acl aclname src ip-address/mask ... # clients IP address [fast]
+# acl aclname src addr1-addr2/mask ... # range of addresses [fast]
+# acl aclname dst [-n] ip-address/mask ... # URL host's IP address [slow]
+# acl aclname localip ip-address/mask ... # IP address the client connected to [fast]
+#
+# acl aclname arp mac-address ... (xx:xx:xx:xx:xx:xx notation)
+# # [fast]
+# # The 'arp' ACL code is not portable to all operating systems.
+# # It works on Linux, Solaris, Windows, FreeBSD, and some other
+# # BSD variants.
+# #
+# # NOTE: Squid can only determine the MAC/EUI address for IPv4
+# # clients that are on the same subnet. If the client is on a
+# # different subnet, then Squid cannot find out its address.
+# #
+# # NOTE 2: IPv6 protocol does not contain ARP. MAC/EUI is either
+# # encoded directly in the IPv6 address or not available.
+#
+# acl aclname srcdomain .foo.com ...
+# # reverse lookup, from client IP [slow]
+# acl aclname dstdomain [-n] .foo.com ...
+# # Destination server from URL [fast]
+# acl aclname srcdom_regex [-i] \.foo\.com ...
+# # regex matching client name [slow]
+# acl aclname dstdom_regex [-n] [-i] \.foo\.com ...
+# # regex matching server [fast]
+# #
+# # For dstdomain and dstdom_regex a reverse lookup is tried if a IP
+# # based URL is used and no match is found. The name "none" is used
+# # if the reverse lookup fails.
+#
+# acl aclname src_as number ...
+# acl aclname dst_as number ...
+# # [fast]
+# # Except for access control, AS numbers can be used for
+# # routing of requests to specific caches. Here's an
+# # example for routing all requests for AS#1241 and only
+# # those to mycache.mydomain.net:
+# # acl asexample dst_as 1241
+# # cache_peer_access mycache.mydomain.net allow asexample
+# # cache_peer_access mycache_mydomain.net deny all
+#
+# acl aclname peername myPeer ...
+# # [fast]
+# # match against a named cache_peer entry
+# # set unique name= on cache_peer lines for reliable use.
+#
+# acl aclname time [day-abbrevs] [h1:m1-h2:m2]
+# # [fast]
+# # day-abbrevs:
+# # S - Sunday
+# # M - Monday
+# # T - Tuesday
+# # W - Wednesday
+# # H - Thursday
+# # F - Friday
+# # A - Saturday
+# # h1:m1 must be less than h2:m2
+#
+# acl aclname url_regex [-i] ^http:// ...
+# # regex matching on whole URL [fast]
+# acl aclname urllogin [-i] [^a-zA-Z0-9] ...
+# # regex matching on URL login field
+# acl aclname urlpath_regex [-i] \.gif$ ...
+# # regex matching on URL path [fast]
+#
+# acl aclname port 80 70 21 0-1024... # destination TCP port [fast]
+# # ranges are alloed
+# acl aclname localport 3128 ... # TCP port the client connected to [fast]
+# # NP: for interception mode this is usually '80'
+#
+# acl aclname myportname 3128 ... # *_port name [fast]
+#
+# acl aclname proto HTTP FTP ... # request protocol [fast]
+#
+# acl aclname method GET POST ... # HTTP request method [fast]
+#
+# acl aclname http_status 200 301 500- 400-403 ...
+# # status code in reply [fast]
+#
+# acl aclname browser [-i] regexp ...
+# # pattern match on User-Agent header (see also req_header below) [fast]
+#
+# acl aclname referer_regex [-i] regexp ...
+# # pattern match on Referer header [fast]
+# # Referer is highly unreliable, so use with care
+#
+# acl aclname ident username ...
+# acl aclname ident_regex [-i] pattern ...
+# # string match on ident output [slow]
+# # use REQUIRED to accept any non-null ident.
+#
+# acl aclname proxy_auth [-i] username ...
+# acl aclname proxy_auth_regex [-i] pattern ...
+# # perform http authentication challenge to the client and match against
+# # supplied credentials [slow]
+# #
+# # takes a list of allowed usernames.
+# # use REQUIRED to accept any valid username.
+# #
+# # Will use proxy authentication in forward-proxy scenarios, and plain
+# # http authenticaiton in reverse-proxy scenarios
+# #
+# # NOTE: when a Proxy-Authentication header is sent but it is not
+# # needed during ACL checking the username is NOT logged
+# # in access.log.
+# #
+# # NOTE: proxy_auth requires a EXTERNAL authentication program
+# # to check username/password combinations (see
+# # auth_param directive).
+# #
+# # NOTE: proxy_auth can't be used in a transparent/intercepting proxy
+# # as the browser needs to be configured for using a proxy in order
+# # to respond to proxy authentication.
+#
+# acl aclname snmp_community string ...
+# # A community string to limit access to your SNMP Agent [fast]
+# # Example:
+# #
+# # acl snmppublic snmp_community public
+#
+# acl aclname maxconn number
+# # This will be matched when the client's IP address has
+# # more than <number> TCP connections established. [fast]
+# # NOTE: This only measures direct TCP links so X-Forwarded-For
+# # indirect clients are not counted.
+#
+# acl aclname max_user_ip [-s] number
+# # This will be matched when the user attempts to log in from more
+# # than <number> different ip addresses. The authenticate_ip_ttl
+# # parameter controls the timeout on the ip entries. [fast]
+# # If -s is specified the limit is strict, denying browsing
+# # from any further IP addresses until the ttl has expired. Without
+# # -s Squid will just annoy the user by "randomly" denying requests.
+# # (the counter is reset each time the limit is reached and a
+# # request is denied)
+# # NOTE: in acceleration mode or where there is mesh of child proxies,
+# # clients may appear to come from multiple addresses if they are
+# # going through proxy farms, so a limit of 1 may cause user problems.
+#
+# acl aclname random probability
+# # Pseudo-randomly match requests. Based on the probability given.
+# # Probability may be written as a decimal (0.333), fraction (1/3)
+# # or ratio of matches:non-matches (3:5).
+#
+# acl aclname req_mime_type [-i] mime-type ...
+# # regex match against the mime type of the request generated
+# # by the client. Can be used to detect file upload or some
+# # types HTTP tunneling requests [fast]
+# # NOTE: This does NOT match the reply. You cannot use this
+# # to match the returned file type.
+#
+# acl aclname req_header header-name [-i] any\.regex\.here
+# # regex match against any of the known request headers. May be
+# # thought of as a superset of "browser", "referer" and "mime-type"
+# # ACL [fast]
+#
+# acl aclname rep_mime_type [-i] mime-type ...
+# # regex match against the mime type of the reply received by
+# # squid. Can be used to detect file download or some
+# # types HTTP tunneling requests. [fast]
+# # NOTE: This has no effect in http_access rules. It only has
+# # effect in rules that affect the reply data stream such as
+# # http_reply_access.
+#
+# acl aclname rep_header header-name [-i] any\.regex\.here
+# # regex match against any of the known reply headers. May be
+# # thought of as a superset of "browser", "referer" and "mime-type"
+# # ACLs [fast]
+#
+# acl aclname external class_name [arguments...]
+# # external ACL lookup via a helper class defined by the
+# # external_acl_type directive [slow]
+#
+# acl aclname user_cert attribute values...
+# # match against attributes in a user SSL certificate
+# # attribute is one of DN/C/O/CN/L/ST or a numerical OID [fast]
+#
+# acl aclname ca_cert attribute values...
+# # match against attributes a users issuing CA SSL certificate
+# # attribute is one of DN/C/O/CN/L/ST or a numerical OID [fast]
+#
+# acl aclname ext_user username ...
+# acl aclname ext_user_regex [-i] pattern ...
+# # string match on username returned by external acl helper [slow]
+# # use REQUIRED to accept any non-null user name.
+#
+# acl aclname tag tagvalue ...
+# # string match on tag returned by external acl helper [fast]
+# # DEPRECATED. Only the first tag will match with this ACL.
+# # Use the 'note' ACL instead for handling multiple tag values.
+#
+# acl aclname hier_code codename ...
+# # string match against squid hierarchy code(s); [fast]
+# # e.g., DIRECT, PARENT_HIT, NONE, etc.
+# #
+# # NOTE: This has no effect in http_access rules. It only has
+# # effect in rules that affect the reply data stream such as
+# # http_reply_access.
+#
+# acl aclname note name [value ...]
+# # match transaction annotation [fast]
+# # Without values, matches any annotation with a given name.
+# # With value(s), matches any annotation with a given name that
+# # also has one of the given values.
+# # Names and values are compared using a string equality test.
+# # Annotation sources include note and adaptation_meta directives
+# # as well as helper and eCAP responses.
+#
+# acl aclname adaptation_service service ...
+# # Matches the name of any icap_service, ecap_service,
+# # adaptation_service_set, or adaptation_service_chain that Squid
+# # has used (or attempted to use) for the master transaction.
+# # This ACL must be defined after the corresponding adaptation
+# # service is named in squid.conf. This ACL is usable with
+# # adaptation_meta because it starts matching immediately after
+# # the service has been selected for adaptation.
+#
+# acl aclname any-of acl1 acl2 ...
+# # match any one of the acls [fast or slow]
+# # The first matching ACL stops further ACL evaluation.
+# #
+# # ACLs from multiple any-of lines with the same name are ORed.
+# # For example, A = (a1 or a2) or (a3 or a4) can be written as
+# # acl A any-of a1 a2
+# # acl A any-of a3 a4
+# #
+# # This group ACL is fast if all evaluated ACLs in the group are fast
+# # and slow otherwise.
+#
+# acl aclname all-of acl1 acl2 ...
+# # match all of the acls [fast or slow]
+# # The first mismatching ACL stops further ACL evaluation.
+# #
+# # ACLs from multiple all-of lines with the same name are ORed.
+# # For example, B = (b1 and b2) or (b3 and b4) can be written as
+# # acl B all-of b1 b2
+# # acl B all-of b3 b4
+# #
+# # This group ACL is fast if all evaluated ACLs in the group are fast
+# # and slow otherwise.
+#
+# Examples:
+# acl macaddress arp 09:00:2b:23:45:67
+# acl myexample dst_as 1241
+# acl password proxy_auth REQUIRED
+# acl fileupload req_mime_type -i ^multipart/form-data$
+# acl javascript rep_mime_type -i ^application/x-javascript$
+#
+#Default:
+# ACLs all, manager, localhost, and to_localhost are predefined.
+#
+#
+# Recommended minimum configuration:
+#
+
+# Example rule allowing access from your local networks.
+# Adapt to list your (internal) IP networks from where browsing
+# should be allowed
+#acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
+#acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
+acl localnet src 192.168.1.0/24 # RFC1918 possible internal network
+acl localhost src 127.0.0.1
+#acl localnet src fc00::/7 # RFC 4193 local private network range
+#acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
+
+acl SSL_ports port 443
+acl Safe_ports port 80 # http
+acl Safe_ports port 21 # ftp
+acl Safe_ports port 443 # https
+acl Safe_ports port 70 # gopher
+acl Safe_ports port 210 # wais
+acl Safe_ports port 1025-65535 # unregistered ports
+acl Safe_ports port 280 # http-mgmt
+acl Safe_ports port 488 # gss-http
+acl Safe_ports port 591 # filemaker
+acl Safe_ports port 777 # multiling http
+acl CONNECT method CONNECT
+
+# TAG: proxy_protocol_access
+# Determine which client proxies can be trusted to provide correct
+# information regarding real client IP address using PROXY protocol.
+#
+# Requests may pass through a chain of several other proxies
+# before reaching us. The original source details may by sent in:
+# * HTTP message Forwarded header, or
+# * HTTP message X-Forwarded-For header, or
+# * PROXY protocol connection header.
+#
+# This directive is solely for validating new PROXY protocol
+# connections received from a port flagged with require-proxy-header.
+# It is checked only once after TCP connection setup.
+#
+# A deny match results in TCP connection closure.
+#
+# An allow match is required for Squid to permit the corresponding
+# TCP connection, before Squid even looks for HTTP request headers.
+# If there is an allow match, Squid starts using PROXY header information
+# to determine the source address of the connection for all future ACL
+# checks, logging, etc.
+#
+# SECURITY CONSIDERATIONS:
+#
+# Any host from which we accept client IP details can place
+# incorrect information in the relevant header, and Squid
+# will use the incorrect information as if it were the
+# source address of the request. This may enable remote
+# hosts to bypass any access control restrictions that are
+# based on the client's source addresses.
+#
+# This clause only supports fast acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#Default:
+# all TCP connections to ports with require-proxy-header will be denied
+
+# TAG: follow_x_forwarded_for
+# Determine which client proxies can be trusted to provide correct
+# information regarding real client IP address.
+#
+# Requests may pass through a chain of several other proxies
+# before reaching us. The original source details may by sent in:
+# * HTTP message Forwarded header, or
+# * HTTP message X-Forwarded-For header, or
+# * PROXY protocol connection header.
+#
+# PROXY protocol connections are controlled by the proxy_protocol_access
+# directive which is checked before this.
+#
+# If a request reaches us from a source that is allowed by this
+# directive, then we trust the information it provides regarding
+# the IP of the client it received from (if any).
+#
+# For the purpose of ACLs used in this directive the src ACL type always
+# matches the address we are testing and srcdomain matches its rDNS.
+#
+# On each HTTP request Squid checks for X-Forwarded-For header fields.
+# If found the header values are iterated in reverse order and an allow
+# match is required for Squid to continue on to the next value.
+# The verification ends when a value receives a deny match, cannot be
+# tested, or there are no more values to test.
+# NOTE: Squid does not yet follow the Forwarded HTTP header.
+#
+# The end result of this process is an IP address that we will
+# refer to as the indirect client address. This address may
+# be treated as the client address for access control, ICAP, delay
+# pools and logging, depending on the acl_uses_indirect_client,
+# icap_uses_indirect_client, delay_pool_uses_indirect_client,
+# log_uses_indirect_client and tproxy_uses_indirect_client options.
+#
+# This clause only supports fast acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#
+# SECURITY CONSIDERATIONS:
+#
+# Any host from which we accept client IP details can place
+# incorrect information in the relevant header, and Squid
+# will use the incorrect information as if it were the
+# source address of the request. This may enable remote
+# hosts to bypass any access control restrictions that are
+# based on the client's source addresses.
+#
+# For example:
+#
+# acl localhost src 127.0.0.1
+# acl my_other_proxy srcdomain .proxy.example.com
+# follow_x_forwarded_for allow localhost
+# follow_x_forwarded_for allow my_other_proxy
+#Default:
+# X-Forwarded-For header will be ignored.
+
+# TAG: acl_uses_indirect_client on|off
+# Controls whether the indirect client address
+# (see follow_x_forwarded_for) is used instead of the
+# direct client address in acl matching.
+#
+# NOTE: maxconn ACL considers direct TCP links and indirect
+# clients will always have zero. So no match.
+#Default:
+# acl_uses_indirect_client on
+
+# TAG: delay_pool_uses_indirect_client on|off
+# Controls whether the indirect client address
+# (see follow_x_forwarded_for) is used instead of the
+# direct client address in delay pools.
+#Default:
+# delay_pool_uses_indirect_client on
+
+# TAG: log_uses_indirect_client on|off
+# Controls whether the indirect client address
+# (see follow_x_forwarded_for) is used instead of the
+# direct client address in the access log.
+#Default:
+# log_uses_indirect_client on
+
+# TAG: tproxy_uses_indirect_client on|off
+# Controls whether the indirect client address
+# (see follow_x_forwarded_for) is used instead of the
+# direct client address when spoofing the outgoing client.
+#
+# This has no effect on requests arriving in non-tproxy
+# mode ports.
+#
+# SECURITY WARNING: Usage of this option is dangerous
+# and should not be used trivially. Correct configuration
+# of follow_x_forwarded_for with a limited set of trusted
+# sources is required to prevent abuse of your proxy.
+#Default:
+# tproxy_uses_indirect_client off
+
+# TAG: spoof_client_ip
+# Control client IP address spoofing of TPROXY traffic based on
+# defined access lists.
+#
+# spoof_client_ip allow|deny [!]aclname ...
+#
+# If there are no "spoof_client_ip" lines present, the default
+# is to "allow" spoofing of any suitable request.
+#
+# Note that the cache_peer "no-tproxy" option overrides this ACL.
+#
+# This clause supports fast acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#Default:
+# Allow spoofing on all TPROXY traffic.
+
+# TAG: http_access
+# Allowing or Denying access based on defined access lists
+#
+# To allow or deny a message received on an HTTP, HTTPS, or FTP port:
+# http_access allow|deny [!]aclname ...
+#
+# NOTE on default values:
+#
+# If there are no "access" lines present, the default is to deny
+# the request.
+#
+# If none of the "access" lines cause a match, the default is the
+# opposite of the last line in the list. If the last line was
+# deny, the default is allow. Conversely, if the last line
+# is allow, the default will be deny. For these reasons, it is a
+# good idea to have an "deny all" entry at the end of your access
+# lists to avoid potential confusion.
+#
+# This clause supports both fast and slow acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#
+#Default:
+# Deny, unless rules exist in squid.conf.
+#
+
+#
+# Recommended minimum Access Permission configuration:
+#
+# Deny requests to certain unsafe ports
+http_access deny !Safe_ports
+
+# Deny CONNECT to other than secure SSL ports
+#http_access deny CONNECT !SSL_ports
+
+# Only allow cachemgr access from localhost
+http_access allow localhost manager
+http_access deny manager
+http_access allow localnet
+
+# We strongly recommend the following be uncommented to protect innocent
+# web applications running on the proxy server who think the only
+# one who can access services on "localhost" is a local user
+#http_access deny to_localhost
+
+#
+# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
+#
+
+# Example rule allowing access from your local networks.
+# Adapt localnet in the ACL section to list your (internal) IP networks
+# from where browsing should be allowed
+#http_access allow localnet
+
+# And finally deny all other access to this proxy
+#http_access deny all
+
+# TAG: adapted_http_access
+# Allowing or Denying access based on defined access lists
+#
+# Essentially identical to http_access, but runs after redirectors
+# and ICAP/eCAP adaptation. Allowing access control based on their
+# output.
+#
+# If not set then only http_access is used.
+#Default:
+# Allow, unless rules exist in squid.conf.
+
+# TAG: http_reply_access
+# Allow replies to client requests. This is complementary to http_access.
+#
+# http_reply_access allow|deny [!] aclname ...
+#
+# NOTE: if there are no access lines present, the default is to allow
+# all replies.
+#
+# If none of the access lines cause a match the opposite of the
+# last line will apply. Thus it is good practice to end the rules
+# with an "allow all" or "deny all" entry.
+#
+# This clause supports both fast and slow acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#Default:
+# Allow, unless rules exist in squid.conf.
+
+# TAG: icp_access
+# Allowing or Denying access to the ICP port based on defined
+# access lists
+#
+# icp_access allow|deny [!]aclname ...
+#
+# NOTE: The default if no icp_access lines are present is to
+# deny all traffic. This default may cause problems with peers
+# using ICP.
+#
+# This clause only supports fast acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#
+## Allow ICP queries from local networks only
+##icp_access allow localnet
+##icp_access deny all
+#Default:
+# Deny, unless rules exist in squid.conf.
+
+# TAG: htcp_access
+# Allowing or Denying access to the HTCP port based on defined
+# access lists
+#
+# htcp_access allow|deny [!]aclname ...
+#
+# See also htcp_clr_access for details on access control for
+# cache purge (CLR) HTCP messages.
+#
+# NOTE: The default if no htcp_access lines are present is to
+# deny all traffic. This default may cause problems with peers
+# using the htcp option.
+#
+# This clause only supports fast acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#
+## Allow HTCP queries from local networks only
+##htcp_access allow localnet
+##htcp_access deny all
+#Default:
+# Deny, unless rules exist in squid.conf.
+
+# TAG: htcp_clr_access
+# Allowing or Denying access to purge content using HTCP based
+# on defined access lists.
+# See htcp_access for details on general HTCP access control.
+#
+# htcp_clr_access allow|deny [!]aclname ...
+#
+# This clause only supports fast acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#
+## Allow HTCP CLR requests from trusted peers
+#acl htcp_clr_peer src 192.0.2.2 2001:DB8::2
+#htcp_clr_access allow htcp_clr_peer
+#htcp_clr_access deny all
+#Default:
+# Deny, unless rules exist in squid.conf.
+
+# TAG: miss_access
+# Determines whether network access is permitted when satisfying a request.
+#
+# For example;
+# to force your neighbors to use you as a sibling instead of
+# a parent.
+#
+# acl localclients src 192.0.2.0/24 2001:DB8::a:0/64
+# miss_access deny !localclients
+# miss_access allow all
+#
+# This means only your local clients are allowed to fetch relayed/MISS
+# replies from the network and all other clients can only fetch cached
+# objects (HITs).
+#
+# The default for this setting allows all clients who passed the
+# http_access rules to relay via this proxy.
+#
+# This clause only supports fast acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#Default:
+# Allow, unless rules exist in squid.conf.
+
+# TAG: ident_lookup_access
+# A list of ACL elements which, if matched, cause an ident
+# (RFC 931) lookup to be performed for this request. For
+# example, you might choose to always perform ident lookups
+# for your main multi-user Unix boxes, but not for your Macs
+# and PCs. By default, ident lookups are not performed for
+# any requests.
+#
+# To enable ident lookups for specific client addresses, you
+# can follow this example:
+#
+# acl ident_aware_hosts src 198.168.1.0/24
+# ident_lookup_access allow ident_aware_hosts
+# ident_lookup_access deny all
+#
+# Only src type ACL checks are fully supported. A srcdomain
+# ACL might work at times, but it will not always provide
+# the correct result.
+#
+# This clause only supports fast acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#Default:
+# Unless rules exist in squid.conf, IDENT is not fetched.
+
+# TAG: reply_body_max_size size [acl acl...]
+# This option specifies the maximum size of a reply body. It can be
+# used to prevent users from downloading very large files, such as
+# MP3's and movies. When the reply headers are received, the
+# reply_body_max_size lines are processed, and the first line where
+# all (if any) listed ACLs are true is used as the maximum body size
+# for this reply.
+#
+# This size is checked twice. First when we get the reply headers,
+# we check the content-length value. If the content length value exists
+# and is larger than the allowed size, the request is denied and the
+# user receives an error message that says "the request or reply
+# is too large." If there is no content-length, and the reply
+# size exceeds this limit, the client's connection is just closed
+# and they will receive a partial reply.
+#
+# WARNING: downstream caches probably can not detect a partial reply
+# if there is no content-length header, so they will cache
+# partial responses and give them out as hits. You should NOT
+# use this option if you have downstream caches.
+#
+# WARNING: A maximum size smaller than the size of squid's error messages
+# will cause an infinite loop and crash squid. Ensure that the smallest
+# non-zero value you use is greater that the maximum header size plus
+# the size of your largest error page.
+#
+# If you set this parameter none (the default), there will be
+# no limit imposed.
+#
+# Configuration Format is:
+# reply_body_max_size SIZE UNITS [acl ...]
+# ie.
+# reply_body_max_size 10 MB
+#
+#Default:
+# No limit is applied.
+
+# NETWORK OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: http_port
+# Usage: port [mode] [options]
+# hostname:port [mode] [options]
+# 1.2.3.4:port [mode] [options]
+#
+# The socket addresses where Squid will listen for HTTP client
+# requests. You may specify multiple socket addresses.
+# There are three forms: port alone, hostname with port, and
+# IP address with port. If you specify a hostname or IP
+# address, Squid binds the socket to that specific
+# address. Most likely, you do not need to bind to a specific
+# address, so you can use the port number alone.
+#
+# If you are running Squid in accelerator mode, you
+# probably want to listen on port 80 also, or instead.
+#
+# The -a command line option may be used to specify additional
+# port(s) where Squid listens for proxy request. Such ports will
+# be plain proxy ports with no options.
+#
+# You may specify multiple socket addresses on multiple lines.
+#
+# Modes:
+#
+# intercept Support for IP-Layer NAT interception delivering
+# traffic to this Squid port.
+# NP: disables authentication on the port.
+#
+# tproxy Support Linux TPROXY (or BSD divert-to) with spoofing
+# of outgoing connections using the client IP address.
+# NP: disables authentication on the port.
+#
+# accel Accelerator / reverse proxy mode
+#
+# ssl-bump For each CONNECT request allowed by ssl_bump ACLs,
+# establish secure connection with the client and with
+# the server, decrypt HTTPS messages as they pass through
+# Squid, and treat them as unencrypted HTTP messages,
+# becoming the man-in-the-middle.
+#
+# The ssl_bump option is required to fully enable
+# bumping of CONNECT requests.
+#
+# Omitting the mode flag causes default forward proxy mode to be used.
+#
+#
+# Accelerator Mode Options:
+#
+# defaultsite=domainname
+# What to use for the Host: header if it is not present
+# in a request. Determines what site (not origin server)
+# accelerators should consider the default.
+#
+# no-vhost Disable using HTTP/1.1 Host header for virtual domain support.
+#
+# protocol= Protocol to reconstruct accelerated and intercepted
+# requests with. Defaults to HTTP/1.1 for http_port and
+# HTTPS/1.1 for https_port.
+# When an unsupported value is configured Squid will
+# produce a FATAL error.
+# Values: HTTP or HTTP/1.1, HTTPS or HTTPS/1.1
+#
+# vport Virtual host port support. Using the http_port number
+# instead of the port passed on Host: headers.
+#
+# vport=NN Virtual host port support. Using the specified port
+# number instead of the port passed on Host: headers.
+#
+# act-as-origin
+# Act as if this Squid is the origin server.
+# This currently means generate new Date: and Expires:
+# headers on HIT instead of adding Age:.
+#
+# ignore-cc Ignore request Cache-Control headers.
+#
+# WARNING: This option violates HTTP specifications if
+# used in non-accelerator setups.
+#
+# allow-direct Allow direct forwarding in accelerator mode. Normally
+# accelerated requests are denied direct forwarding as if
+# never_direct was used.
+#
+# WARNING: this option opens accelerator mode to security
+# vulnerabilities usually only affecting in interception
+# mode. Make sure to protect forwarding with suitable
+# http_access rules when using this.
+#
+#
+# SSL Bump Mode Options:
+# In addition to these options ssl-bump requires TLS/SSL options.
+#
+# generate-host-certificates[=<on|off>]
+# Dynamically create SSL server certificates for the
+# destination hosts of bumped CONNECT requests.When
+# enabled, the cert and key options are used to sign
+# generated certificates. Otherwise generated
+# certificate will be selfsigned.
+# If there is a CA certificate lifetime of the generated
+# certificate equals lifetime of the CA certificate. If
+# generated certificate is selfsigned lifetime is three
+# years.
+# This option is disabled by default. See the ssl-bump
+# option above for more information.
+#
+# dynamic_cert_mem_cache_size=SIZE
+# Approximate total RAM size spent on cached generated
+# certificates. If set to zero, caching is disabled.
+#
+# TLS / SSL Options:
+#
+# cert= Path to SSL certificate (PEM format).
+#
+# key= Path to SSL private key file (PEM format)
+# if not specified, the certificate file is
+# assumed to be a combined certificate and
+# key file.
+#
+# version= The version of SSL/TLS supported
+# 1 automatic (default)
+# 2 SSLv2 only
+# 3 SSLv3 only
+# 4 TLSv1.0 only
+# 5 TLSv1.1 only
+# 6 TLSv1.2 only
+#
+# cipher= Colon separated list of supported ciphers.
+# NOTE: some ciphers such as EDH ciphers depend on
+# additional settings. If those settings are
+# omitted the ciphers may be silently ignored
+# by the OpenSSL library.
+#
+# options= Various SSL implementation options. The most important
+# being:
+# NO_SSLv2 Disallow the use of SSLv2
+# NO_SSLv3 Disallow the use of SSLv3
+# NO_TLSv1 Disallow the use of TLSv1.0
+# NO_TLSv1_1 Disallow the use of TLSv1.1
+# NO_TLSv1_2 Disallow the use of TLSv1.2
+# SINGLE_DH_USE Always create a new key when using
+# temporary/ephemeral DH key exchanges
+# NO_TICKET Disables TLS tickets extension
+#
+# SINGLE_ECDH_USE
+# Enable ephemeral ECDH key exchange.
+# The adopted curve should be specified
+# using the tls-dh option.
+#
+# ALL Enable various bug workarounds
+# suggested as "harmless" by OpenSSL
+# Be warned that this reduces SSL/TLS
+# strength to some attacks.
+# See OpenSSL SSL_CTX_set_options documentation for a
+# complete list of options.
+#
+# clientca= File containing the list of CAs to use when
+# requesting a client certificate.
+#
+# cafile= File containing additional CA certificates to
+# use when verifying client certificates. If unset
+# clientca will be used.
+#
+# capath= Directory containing additional CA certificates
+# and CRL lists to use when verifying client certificates.
+#
+# crlfile= File of additional CRL lists to use when verifying
+# the client certificate, in addition to CRLs stored in
+# the capath. Implies VERIFY_CRL flag below.
+#
+# tls-dh=[curve:]file
+# File containing DH parameters for temporary/ephemeral DH key
+# exchanges, optionally prefixed by a curve for ephemeral ECDH
+# key exchanges.
+# See OpenSSL documentation for details on how to create the
+# DH parameter file. Supported curves for ECDH can be listed
+# using the "openssl ecparam -list_curves" command.
+# WARNING: EDH and EECDH ciphers will be silently disabled if
+# this option is not set.
+#
+# sslflags= Various flags modifying the use of SSL:
+# DELAYED_AUTH
+# Don't request client certificates
+# immediately, but wait until acl processing
+# requires a certificate (not yet implemented).
+# NO_DEFAULT_CA
+# Don't use the default CA lists built in
+# to OpenSSL.
+# NO_SESSION_REUSE
+# Don't allow for session reuse. Each connection
+# will result in a new SSL session.
+# VERIFY_CRL
+# Verify CRL lists when accepting client
+# certificates.
+# VERIFY_CRL_ALL
+# Verify CRL lists for all certificates in the
+# client certificate chain.
+#
+# sslcontext= SSL session ID context identifier.
+#
+# Other Options:
+#
+# connection-auth[=on|off]
+# use connection-auth=off to tell Squid to prevent
+# forwarding Microsoft connection oriented authentication
+# (NTLM, Negotiate and Kerberos)
+#
+# disable-pmtu-discovery=
+# Control Path-MTU discovery usage:
+# off lets OS decide on what to do (default).
+# transparent disable PMTU discovery when transparent
+# support is enabled.
+# always disable always PMTU discovery.
+#
+# In many setups of transparently intercepting proxies
+# Path-MTU discovery can not work on traffic towards the
+# clients. This is the case when the intercepting device
+# does not fully track connections and fails to forward
+# ICMP must fragment messages to the cache server. If you
+# have such setup and experience that certain clients
+# sporadically hang or never complete requests set
+# disable-pmtu-discovery option to 'transparent'.
+#
+# name= Specifies a internal name for the port. Defaults to
+# the port specification (port or addr:port)
+#
+# tcpkeepalive[=idle,interval,timeout]
+# Enable TCP keepalive probes of idle connections.
+# In seconds; idle is the initial time before TCP starts
+# probing the connection, interval how often to probe, and
+# timeout the time before giving up.
+#
+# require-proxy-header
+# Require PROXY protocol version 1 or 2 connections.
+# The proxy_protocol_access is required to whitelist
+# downstream proxies which can be trusted.
+#
+# If you run Squid on a dual-homed machine with an internal
+# and an external interface we recommend you to specify the
+# internal address:port in http_port. This way Squid will only be
+# visible on the internal address.
+#
+#
+
+# Squid normally listens to port 3128
+http_port 0.0.0.0:3128
+#https-port 0.0.0.0:3129 intercept ssl-bump cert=/etc/squid/certs/squid-ca-cert-key.pem generate-host-certificates=on dynamic-cert-mem-cache-size=16MB
+
+# TAG: https_port
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# Usage: [ip:]port cert=certificate.pem [key=key.pem] [mode] [options...]
+#
+# The socket address where Squid will listen for client requests made
+# over TLS or SSL connections. Commonly referred to as HTTPS.
+#
+# This is most useful for situations where you are running squid in
+# accelerator mode and you want to do the SSL work at the accelerator level.
+#
+# You may specify multiple socket addresses on multiple lines,
+# each with their own SSL certificate and/or options.
+#
+# Modes:
+#
+# accel Accelerator / reverse proxy mode
+#
+# intercept Support for IP-Layer interception of
+# outgoing requests without browser settings.
+# NP: disables authentication and IPv6 on the port.
+#
+# tproxy Support Linux TPROXY for spoofing outgoing
+# connections using the client IP address.
+# NP: disables authentication and maybe IPv6 on the port.
+#
+# ssl-bump For each intercepted connection allowed by ssl_bump
+# ACLs, establish a secure connection with the client and with
+# the server, decrypt HTTPS messages as they pass through
+# Squid, and treat them as unencrypted HTTP messages,
+# becoming the man-in-the-middle.
+#
+# An "ssl_bump server-first" match is required to
+# fully enable bumping of intercepted SSL connections.
+#
+# Requires tproxy or intercept.
+#
+# Omitting the mode flag causes default forward proxy mode to be used.
+#
+#
+# See http_port for a list of generic options
+#
+#
+# SSL Options:
+#
+# cert= Path to SSL certificate (PEM format).
+#
+# key= Path to SSL private key file (PEM format)
+# if not specified, the certificate file is
+# assumed to be a combined certificate and
+# key file.
+#
+# version= The version of SSL/TLS supported
+# 1 automatic (default)
+# 2 SSLv2 only
+# 3 SSLv3 only
+# 4 TLSv1 only
+#
+# cipher= Colon separated list of supported ciphers.
+#
+# options= Various SSL engine options. The most important
+# being:
+# NO_SSLv2 Disallow the use of SSLv2
+# NO_SSLv3 Disallow the use of SSLv3
+# NO_TLSv1 Disallow the use of TLSv1
+#
+# SINGLE_DH_USE Always create a new key when using
+# temporary/ephemeral DH key exchanges
+#
+# SINGLE_ECDH_USE
+# Enable ephemeral ECDH key exchange.
+# The adopted curve should be specified
+# using the tls-dh option.
+#
+# See src/ssl_support.c or OpenSSL SSL_CTX_set_options
+# documentation for a complete list of options.
+#
+# clientca= File containing the list of CAs to use when
+# requesting a client certificate.
+#
+# cafile= File containing additional CA certificates to
+# use when verifying client certificates. If unset
+# clientca will be used.
+#
+# capath= Directory containing additional CA certificates
+# and CRL lists to use when verifying client certificates.
+#
+# crlfile= File of additional CRL lists to use when verifying
+# the client certificate, in addition to CRLs stored in
+# the capath. Implies VERIFY_CRL flag below.
+#
+# tls-dh=[curve:]file
+# File containing DH parameters for temporary/ephemeral DH key
+# exchanges, optionally prefixed by a curve for ephemeral ECDH
+# key exchanges.
+#
+# sslflags= Various flags modifying the use of SSL:
+# DELAYED_AUTH
+# Don't request client certificates
+# immediately, but wait until acl processing
+# requires a certificate (not yet implemented).
+# NO_DEFAULT_CA
+# Don't use the default CA lists built in
+# to OpenSSL.
+# NO_SESSION_REUSE
+# Don't allow for session reuse. Each connection
+# will result in a new SSL session.
+# VERIFY_CRL
+# Verify CRL lists when accepting client
+# certificates.
+# VERIFY_CRL_ALL
+# Verify CRL lists for all certificates in the
+# client certificate chain.
+#
+# sslcontext= SSL session ID context identifier.
+#
+# generate-host-certificates[=<on|off>]
+# Dynamically create SSL server certificates for the
+# destination hosts of bumped SSL requests.When
+# enabled, the cert and key options are used to sign
+# generated certificates. Otherwise generated
+# certificate will be selfsigned.
+# If there is CA certificate life time of generated
+# certificate equals lifetime of CA certificate. If
+# generated certificate is selfsigned lifetime is three
+# years.
+# This option is disabled by default. See the ssl-bump
+# option above for more information.
+#
+# dynamic_cert_mem_cache_size=SIZE
+# Approximate total RAM size spent on cached generated
+# certificates. If set to zero, caching is disabled.
+#
+# See http_port for a list of available options.
+#Default:
+# none
+
+# TAG: ftp_port
+# Enables Native FTP proxy by specifying the socket address where Squid
+# listens for FTP client requests. See http_port directive for various
+# ways to specify the listening address and mode.
+#
+# Usage: ftp_port address [mode] [options]
+#
+# WARNING: This is a new, experimental, complex feature that has seen
+# limited production exposure. Some Squid modules (e.g., caching) do not
+# currently work with native FTP proxying, and many features have not
+# even been tested for compatibility. Test well before deploying!
+#
+# Native FTP proxying differs substantially from proxying HTTP requests
+# with ftp:// URIs because Squid works as an FTP server and receives
+# actual FTP commands (rather than HTTP requests with FTP URLs).
+#
+# Native FTP commands accepted at ftp_port are internally converted or
+# wrapped into HTTP-like messages. The same happens to Native FTP
+# responses received from FTP origin servers. Those HTTP-like messages
+# are shoveled through regular access control and adaptation layers
+# between the FTP client and the FTP origin server. This allows Squid to
+# examine, adapt, block, and log FTP exchanges. Squid reuses most HTTP
+# mechanisms when shoveling wrapped FTP messages. For example,
+# http_access and adaptation_access directives are used.
+#
+# Modes:
+#
+# intercept Same as http_port intercept. The FTP origin address is
+# determined based on the intended destination of the
+# intercepted connection.
+#
+# tproxy Support Linux TPROXY for spoofing outgoing
+# connections using the client IP address.
+# NP: disables authentication and maybe IPv6 on the port.
+#
+# By default (i.e., without an explicit mode option), Squid extracts the
+# FTP origin address from the login@origin parameter of the FTP USER
+# command. Many popular FTP clients support such native FTP proxying.
+#
+# Options:
+#
+# name=token Specifies an internal name for the port. Defaults to
+# the port address. Usable with myportname ACL.
+#
+# ftp-track-dirs
+# Enables tracking of FTP directories by injecting extra
+# PWD commands and adjusting Request-URI (in wrapping
+# HTTP requests) to reflect the current FTP server
+# directory. Tracking is disabled by default.
+#
+# protocol=FTP Protocol to reconstruct accelerated and intercepted
+# requests with. Defaults to FTP. No other accepted
+# values have been tested with. An unsupported value
+# results in a FATAL error. Accepted values are FTP,
+# HTTP (or HTTP/1.1), and HTTPS (or HTTPS/1.1).
+#
+# Other http_port modes and options that are not specific to HTTP and
+# HTTPS may also work.
+#Default:
+# none
+
+# TAG: tcp_outgoing_tos
+# Allows you to select a TOS/Diffserv value for packets outgoing
+# on the server side, based on an ACL.
+#
+# tcp_outgoing_tos ds-field [!]aclname ...
+#
+# Example where normal_service_net uses the TOS value 0x00
+# and good_service_net uses 0x20
+#
+# acl normal_service_net src 10.0.0.0/24
+# acl good_service_net src 10.0.1.0/24
+# tcp_outgoing_tos 0x00 normal_service_net
+# tcp_outgoing_tos 0x20 good_service_net
+#
+# TOS/DSCP values really only have local significance - so you should
+# know what you're specifying. For more information, see RFC2474,
+# RFC2475, and RFC3260.
+#
+# The TOS/DSCP byte must be exactly that - a octet value 0 - 255, or
+# "default" to use whatever default your host has.
+# Note that only multiples of 4 are usable as the two rightmost bits have
+# been redefined for use by ECN (RFC 3168 section 23.1).
+# The squid parser will enforce this by masking away the ECN bits.
+#
+# Processing proceeds in the order specified, and stops at first fully
+# matching line.
+#
+# Only fast ACLs are supported.
+#Default:
+# none
+
+# TAG: clientside_tos
+# Allows you to select a TOS/DSCP value for packets being transmitted
+# on the client-side, based on an ACL.
+#
+# clientside_tos ds-field [!]aclname ...
+#
+# Example where normal_service_net uses the TOS value 0x00
+# and good_service_net uses 0x20
+#
+# acl normal_service_net src 10.0.0.0/24
+# acl good_service_net src 10.0.1.0/24
+# clientside_tos 0x00 normal_service_net
+# clientside_tos 0x20 good_service_net
+#
+# Note: This feature is incompatible with qos_flows. Any TOS values set here
+# will be overwritten by TOS values in qos_flows.
+#
+# The TOS/DSCP byte must be exactly that - a octet value 0 - 255, or
+# "default" to use whatever default your host has.
+# Note that only multiples of 4 are usable as the two rightmost bits have
+# been redefined for use by ECN (RFC 3168 section 23.1).
+# The squid parser will enforce this by masking away the ECN bits.
+#
+#Default:
+# none
+
+# TAG: tcp_outgoing_mark
+# Note: This option is only available if Squid is rebuilt with the
+# Packet MARK (Linux)
+#
+# Allows you to apply a Netfilter mark value to outgoing packets
+# on the server side, based on an ACL.
+#
+# tcp_outgoing_mark mark-value [!]aclname ...
+#
+# Example where normal_service_net uses the mark value 0x00
+# and good_service_net uses 0x20
+#
+# acl normal_service_net src 10.0.0.0/24
+# acl good_service_net src 10.0.1.0/24
+# tcp_outgoing_mark 0x00 normal_service_net
+# tcp_outgoing_mark 0x20 good_service_net
+#
+# Only fast ACLs are supported.
+#Default:
+# none
+
+# TAG: clientside_mark
+# Note: This option is only available if Squid is rebuilt with the
+# Packet MARK (Linux)
+#
+# Allows you to apply a Netfilter mark value to packets being transmitted
+# on the client-side, based on an ACL.
+#
+# clientside_mark mark-value [!]aclname ...
+#
+# Example where normal_service_net uses the mark value 0x00
+# and good_service_net uses 0x20
+#
+# acl normal_service_net src 10.0.0.0/24
+# acl good_service_net src 10.0.1.0/24
+# clientside_mark 0x00 normal_service_net
+# clientside_mark 0x20 good_service_net
+#
+# Note: This feature is incompatible with qos_flows. Any mark values set here
+# will be overwritten by mark values in qos_flows.
+#Default:
+# none
+
+# TAG: qos_flows
+# Allows you to select a TOS/DSCP value to mark outgoing
+# connections to the client, based on where the reply was sourced.
+# For platforms using netfilter, allows you to set a netfilter mark
+# value instead of, or in addition to, a TOS value.
+#
+# By default this functionality is disabled. To enable it with the default
+# settings simply use "qos_flows mark" or "qos_flows tos". Default
+# settings will result in the netfilter mark or TOS value being copied
+# from the upstream connection to the client. Note that it is the connection
+# CONNMARK value not the packet MARK value that is copied.
+#
+# It is not currently possible to copy the mark or TOS value from the
+# client to the upstream connection request.
+#
+# TOS values really only have local significance - so you should
+# know what you're specifying. For more information, see RFC2474,
+# RFC2475, and RFC3260.
+#
+# The TOS/DSCP byte must be exactly that - a octet value 0 - 255.
+# Note that only multiples of 4 are usable as the two rightmost bits have
+# been redefined for use by ECN (RFC 3168 section 23.1).
+# The squid parser will enforce this by masking away the ECN bits.
+#
+# Mark values can be any unsigned 32-bit integer value.
+#
+# This setting is configured by setting the following values:
+#
+# tos|mark Whether to set TOS or netfilter mark values
+#
+# local-hit=0xFF Value to mark local cache hits.
+#
+# sibling-hit=0xFF Value to mark hits from sibling peers.
+#
+# parent-hit=0xFF Value to mark hits from parent peers.
+#
+# miss=0xFF[/mask] Value to mark cache misses. Takes precedence
+# over the preserve-miss feature (see below), unless
+# mask is specified, in which case only the bits
+# specified in the mask are written.
+#
+# The TOS variant of the following features are only possible on Linux
+# and require your kernel to be patched with the TOS preserving ZPH
+# patch, available from http://zph.bratcheda.org
+# No patch is needed to preserve the netfilter mark, which will work
+# with all variants of netfilter.
+#
+# disable-preserve-miss
+# This option disables the preservation of the TOS or netfilter
+# mark. By default, the existing TOS or netfilter mark value of
+# the response coming from the remote server will be retained
+# and masked with miss-mark.
+# NOTE: in the case of a netfilter mark, the mark must be set on
+# the connection (using the CONNMARK target) not on the packet
+# (MARK target).
+#
+# miss-mask=0xFF
+# Allows you to mask certain bits in the TOS or mark value
+# received from the remote server, before copying the value to
+# the TOS sent towards clients.
+# Default for tos: 0xFF (TOS from server is not changed).
+# Default for mark: 0xFFFFFFFF (mark from server is not changed).
+#
+# All of these features require the --enable-zph-qos compilation flag
+# (enabled by default). Netfilter marking also requires the
+# libnetfilter_conntrack libraries (--with-netfilter-conntrack) and
+# libcap 2.09+ (--with-libcap).
+#
+#Default:
+# none
+
+# TAG: tcp_outgoing_address
+# Allows you to map requests to different outgoing IP addresses
+# based on the username or source address of the user making
+# the request.
+#
+# tcp_outgoing_address ipaddr [[!]aclname] ...
+#
+# For example;
+# Forwarding clients with dedicated IPs for certain subnets.
+#
+# acl normal_service_net src 10.0.0.0/24
+# acl good_service_net src 10.0.2.0/24
+#
+# tcp_outgoing_address 2001:db8::c001 good_service_net
+# tcp_outgoing_address 10.1.0.2 good_service_net
+#
+# tcp_outgoing_address 2001:db8::beef normal_service_net
+# tcp_outgoing_address 10.1.0.1 normal_service_net
+#
+# tcp_outgoing_address 2001:db8::1
+# tcp_outgoing_address 10.1.0.3
+#
+# Processing proceeds in the order specified, and stops at first fully
+# matching line.
+#
+# Squid will add an implicit IP version test to each line.
+# Requests going to IPv4 websites will use the outgoing 10.1.0.* addresses.
+# Requests going to IPv6 websites will use the outgoing 2001:db8:* addresses.
+#
+#
+# NOTE: The use of this directive using client dependent ACLs is
+# incompatible with the use of server side persistent connections. To
+# ensure correct results it is best to set server_persistent_connections
+# to off when using this directive in such configurations.
+#
+# NOTE: The use of this directive to set a local IP on outgoing TCP links
+# is incompatible with using TPROXY to set client IP out outbound TCP links.
+# When needing to contact peers use the no-tproxy cache_peer option and the
+# client_dst_passthru directive re-enable normal forwarding such as this.
+#
+#Default:
+# Address selection is performed by the operating system.
+
+# TAG: host_verify_strict
+# Regardless of this option setting, when dealing with intercepted
+# traffic, Squid always verifies that the destination IP address matches
+# the Host header domain or IP (called 'authority form URL').
+#
+# This enforcement is performed to satisfy a MUST-level requirement in
+# RFC 2616 section 14.23: "The Host field value MUST represent the naming
+# authority of the origin server or gateway given by the original URL".
+#
+# When set to ON:
+# Squid always responds with an HTTP 409 (Conflict) error
+# page and logs a security warning if there is no match.
+#
+# Squid verifies that the destination IP address matches
+# the Host header for forward-proxy and reverse-proxy traffic
+# as well. For those traffic types, Squid also enables the
+# following checks, comparing the corresponding Host header
+# and Request-URI components:
+#
+# * The host names (domain or IP) must be identical,
+# but valueless or missing Host header disables all checks.
+# For the two host names to match, both must be either IP
+# or FQDN.
+#
+# * Port numbers must be identical, but if a port is missing
+# the scheme-default port is assumed.
+#
+#
+# When set to OFF (the default):
+# Squid allows suspicious requests to continue but logs a
+# security warning and blocks caching of the response.
+#
+# * Forward-proxy traffic is not checked at all.
+#
+# * Reverse-proxy traffic is not checked at all.
+#
+# * Intercepted traffic which passes verification is handled
+# according to client_dst_passthru.
+#
+# * Intercepted requests which fail verification are sent
+# to the client original destination instead of DIRECT.
+# This overrides 'client_dst_passthru off'.
+#
+# For now suspicious intercepted CONNECT requests are always
+# responded to with an HTTP 409 (Conflict) error page.
+#
+#
+# SECURITY NOTE:
+#
+# As described in CVE-2009-0801 when the Host: header alone is used
+# to determine the destination of a request it becomes trivial for
+# malicious scripts on remote websites to bypass browser same-origin
+# security policy and sandboxing protections.
+#
+# The cause of this is that such applets are allowed to perform their
+# own HTTP stack, in which case the same-origin policy of the browser
+# sandbox only verifies that the applet tries to contact the same IP
+# as from where it was loaded at the IP level. The Host: header may
+# be different from the connected IP and approved origin.
+#
+#Default:
+# host_verify_strict off
+
+# TAG: client_dst_passthru
+# With NAT or TPROXY intercepted traffic Squid may pass the request
+# directly to the original client destination IP or seek a faster
+# source using the HTTP Host header.
+#
+# Using Host to locate alternative servers can provide faster
+# connectivity with a range of failure recovery options.
+# But can also lead to connectivity trouble when the client and
+# server are attempting stateful interactions unaware of the proxy.
+#
+# This option (on by default) prevents alternative DNS entries being
+# located to send intercepted traffic DIRECT to an origin server.
+# The clients original destination IP and port will be used instead.
+#
+# Regardless of this option setting, when dealing with intercepted
+# traffic Squid will verify the Host: header and any traffic which
+# fails Host verification will be treated as if this option were ON.
+#
+# see host_verify_strict for details on the verification process.
+#Default:
+# client_dst_passthru on
+
+# SSL OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: ssl_unclean_shutdown
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# Some browsers (especially MSIE) bugs out on SSL shutdown
+# messages.
+#Default:
+# ssl_unclean_shutdown off
+
+# TAG: ssl_engine
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# The OpenSSL engine to use. You will need to set this if you
+# would like to use hardware SSL acceleration for example.
+#Default:
+# none
+
+# TAG: sslproxy_client_certificate
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# Client SSL Certificate to use when proxying https:// URLs
+#Default:
+# none
+
+# TAG: sslproxy_client_key
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# Client SSL Key to use when proxying https:// URLs
+#Default:
+# none
+
+# TAG: sslproxy_version
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# SSL version level to use when proxying https:// URLs
+#
+# The versions of SSL/TLS supported:
+#
+# 1 automatic (default)
+# 2 SSLv2 only
+# 3 SSLv3 only
+# 4 TLSv1.0 only
+# 5 TLSv1.1 only
+# 6 TLSv1.2 only
+#Default:
+# automatic SSL/TLS version negotiation
+
+# TAG: sslproxy_options
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# Colon (:) or comma (,) separated list of SSL implementation options
+# to use when proxying https:// URLs
+#
+# The most important being:
+#
+# NO_SSLv2 Disallow the use of SSLv2
+# NO_SSLv3 Disallow the use of SSLv3
+# NO_TLSv1 Disallow the use of TLSv1.0
+# NO_TLSv1_1 Disallow the use of TLSv1.1
+# NO_TLSv1_2 Disallow the use of TLSv1.2
+#
+# SINGLE_DH_USE
+# Always create a new key when using temporary/ephemeral
+# DH key exchanges
+#
+# NO_TICKET
+# Disable use of RFC5077 session tickets. Some servers
+# may have problems understanding the TLS extension due
+# to ambiguous specification in RFC4507.
+#
+# ALL Enable various bug workarounds suggested as "harmless"
+# by OpenSSL. Be warned that this may reduce SSL/TLS
+# strength to some attacks.
+#
+# See the OpenSSL SSL_CTX_set_options documentation for a
+# complete list of possible options.
+#
+# WARNING: This directive takes a single token. If a space is used
+# the value(s) after that space are SILENTLY IGNORED.
+#Default:
+# none
+
+# TAG: sslproxy_cipher
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# SSL cipher list to use when proxying https:// URLs
+#
+# Colon separated list of supported ciphers.
+#Default:
+# none
+
+# TAG: sslproxy_cafile
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# file containing CA certificates to use when verifying server
+# certificates while proxying https:// URLs
+#Default:
+# none
+
+# TAG: sslproxy_capath
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# directory containing CA certificates to use when verifying
+# server certificates while proxying https:// URLs
+#Default:
+# none
+
+# TAG: sslproxy_session_ttl
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# Sets the timeout value for SSL sessions
+#Default:
+# sslproxy_session_ttl 300
+
+# TAG: sslproxy_session_cache_size
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# Sets the cache size to use for ssl session
+#Default:
+# sslproxy_session_cache_size 2 MB
+
+# TAG: sslproxy_foreign_intermediate_certs
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# Many origin servers fail to send their full server certificate
+# chain for verification, assuming the client already has or can
+# easily locate any missing intermediate certificates.
+#
+# Squid uses the certificates from the specified file to fill in
+# these missing chains when trying to validate origin server
+# certificate chains.
+#
+# The file is expected to contain zero or more PEM-encoded
+# intermediate certificates. These certificates are not treated
+# as trusted root certificates, and any self-signed certificate in
+# this file will be ignored.
+#Default:
+# none
+
+# TAG: sslproxy_cert_sign_hash
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# Sets the hashing algorithm to use when signing generated certificates.
+# Valid algorithm names depend on the OpenSSL library used. The following
+# names are usually available: sha1, sha256, sha512, and md5. Please see
+# your OpenSSL library manual for the available hashes. By default, Squids
+# that support this option use sha256 hashes.
+#
+# Squid does not forcefully purge cached certificates that were generated
+# with an algorithm other than the currently configured one. They remain
+# in the cache, subject to the regular cache eviction policy, and become
+# useful if the algorithm changes again.
+#Default:
+# none
+
+# TAG: ssl_bump
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# This option is consulted when a CONNECT request is received on
+# an http_port (or a new connection is intercepted at an
+# https_port), provided that port was configured with an ssl-bump
+# flag. The subsequent data on the connection is either treated as
+# HTTPS and decrypted OR tunneled at TCP level without decryption,
+# depending on the first matching bumping "action".
+#
+# ssl_bump <action> [!]acl ...
+#
+# The following bumping actions are currently supported:
+#
+# splice
+# Become a TCP tunnel without decrypting proxied traffic.
+# This is the default action.
+#
+# bump
+# Establish a secure connection with the server and, using a
+# mimicked server certificate, with the client.
+#
+# peek
+# Receive client (step SslBump1) or server (step SslBump2)
+# certificate while preserving the possibility of splicing the
+# connection. Peeking at the server certificate (during step 2)
+# usually precludes bumping of the connection at step 3.
+#
+# stare
+# Receive client (step SslBump1) or server (step SslBump2)
+# certificate while preserving the possibility of bumping the
+# connection. Staring at the server certificate (during step 2)
+# usually precludes splicing of the connection at step 3.
+#
+# terminate
+# Close client and server connections.
+#
+# Backward compatibility actions available at step SslBump1:
+#
+# client-first
+# Bump the connection. Establish a secure connection with the
+# client first, then connect to the server. This old mode does
+# not allow Squid to mimic server SSL certificate and does not
+# work with intercepted SSL connections.
+#
+# server-first
+# Bump the connection. Establish a secure connection with the
+# server first, then establish a secure connection with the
+# client, using a mimicked server certificate. Works with both
+# CONNECT requests and intercepted SSL connections, but does
+# not allow to make decisions based on SSL handshake info.
+#
+# peek-and-splice
+# Decide whether to bump or splice the connection based on
+# client-to-squid and server-to-squid SSL hello messages.
+# XXX: Remove.
+#
+# none
+# Same as the "splice" action.
+#
+# All ssl_bump rules are evaluated at each of the supported bumping
+# steps. Rules with actions that are impossible at the current step are
+# ignored. The first matching ssl_bump action wins and is applied at the
+# end of the current step. If no rules match, the splice action is used.
+# See the at_step ACL for a list of the supported SslBump steps.
+#
+# This clause supports both fast and slow acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#
+# See also: http_port ssl-bump, https_port ssl-bump, and acl at_step.
+#
+#
+# # Example: Bump all TLS connections except those originating from
+# # localhost or those going to example.com.
+#
+# acl broken_sites ssl::server_name .example.com
+# ssl_bump splice localhost
+# ssl_bump splice broken_sites
+# ssl_bump bump all
+#Default:
+# Become a TCP tunnel without decrypting proxied traffic.
+
+# TAG: sslproxy_flags
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# Various flags modifying the use of SSL while proxying https:// URLs:
+# DONT_VERIFY_PEER Accept certificates that fail verification.
+# For refined control, see sslproxy_cert_error.
+# NO_DEFAULT_CA Don't use the default CA list built in
+# to OpenSSL.
+#Default:
+# none
+
+# TAG: sslproxy_cert_error
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# Use this ACL to bypass server certificate validation errors.
+#
+# For example, the following lines will bypass all validation errors
+# when talking to servers for example.com. All other
+# validation errors will result in ERR_SECURE_CONNECT_FAIL error.
+#
+# acl BrokenButTrustedServers dstdomain example.com
+# sslproxy_cert_error allow BrokenButTrustedServers
+# sslproxy_cert_error deny all
+#
+# This clause only supports fast acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+# Using slow acl types may result in server crashes
+#
+# Without this option, all server certificate validation errors
+# terminate the transaction to protect Squid and the client.
+#
+# SQUID_X509_V_ERR_INFINITE_VALIDATION error cannot be bypassed
+# but should not happen unless your OpenSSL library is buggy.
+#
+# SECURITY WARNING:
+# Bypassing validation errors is dangerous because an
+# error usually implies that the server cannot be trusted
+# and the connection may be insecure.
+#
+# See also: sslproxy_flags and DONT_VERIFY_PEER.
+#Default:
+# Server certificate errors terminate the transaction.
+
+# TAG: sslproxy_cert_sign
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+#
+# sslproxy_cert_sign <signing algorithm> acl ...
+#
+# The following certificate signing algorithms are supported:
+#
+# signTrusted
+# Sign using the configured CA certificate which is usually
+# placed in and trusted by end-user browsers. This is the
+# default for trusted origin server certificates.
+#
+# signUntrusted
+# Sign to guarantee an X509_V_ERR_CERT_UNTRUSTED browser error.
+# This is the default for untrusted origin server certificates
+# that are not self-signed (see ssl::certUntrusted).
+#
+# signSelf
+# Sign using a self-signed certificate with the right CN to
+# generate a X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT error in the
+# browser. This is the default for self-signed origin server
+# certificates (see ssl::certSelfSigned).
+#
+# This clause only supports fast acl types.
+#
+# When sslproxy_cert_sign acl(s) match, Squid uses the corresponding
+# signing algorithm to generate the certificate and ignores all
+# subsequent sslproxy_cert_sign options (the first match wins). If no
+# acl(s) match, the default signing algorithm is determined by errors
+# detected when obtaining and validating the origin server certificate.
+#
+# WARNING: SQUID_X509_V_ERR_DOMAIN_MISMATCH and ssl:certDomainMismatch can
+# be used with sslproxy_cert_adapt, but if and only if Squid is bumping a
+# CONNECT request that carries a domain name. In all other cases (CONNECT
+# to an IP address or an intercepted SSL connection), Squid cannot detect
+# the domain mismatch at certificate generation time when
+# bump-server-first is used.
+#Default:
+# none
+
+# TAG: sslproxy_cert_adapt
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+#
+# sslproxy_cert_adapt <adaptation algorithm> acl ...
+#
+# The following certificate adaptation algorithms are supported:
+#
+# setValidAfter
+# Sets the "Not After" property to the "Not After" property of
+# the CA certificate used to sign generated certificates.
+#
+# setValidBefore
+# Sets the "Not Before" property to the "Not Before" property of
+# the CA certificate used to sign generated certificates.
+#
+# setCommonName or setCommonName{CN}
+# Sets Subject.CN property to the host name specified as a
+# CN parameter or, if no explicit CN parameter was specified,
+# extracted from the CONNECT request. It is a misconfiguration
+# to use setCommonName without an explicit parameter for
+# intercepted or tproxied SSL connections.
+#
+# This clause only supports fast acl types.
+#
+# Squid first groups sslproxy_cert_adapt options by adaptation algorithm.
+# Within a group, when sslproxy_cert_adapt acl(s) match, Squid uses the
+# corresponding adaptation algorithm to generate the certificate and
+# ignores all subsequent sslproxy_cert_adapt options in that algorithm's
+# group (i.e., the first match wins within each algorithm group). If no
+# acl(s) match, the default mimicking action takes place.
+#
+# WARNING: SQUID_X509_V_ERR_DOMAIN_MISMATCH and ssl:certDomainMismatch can
+# be used with sslproxy_cert_adapt, but if and only if Squid is bumping a
+# CONNECT request that carries a domain name. In all other cases (CONNECT
+# to an IP address or an intercepted SSL connection), Squid cannot detect
+# the domain mismatch at certificate generation time when
+# bump-server-first is used.
+#Default:
+# none
+
+# TAG: sslpassword_program
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# Specify a program used for entering SSL key passphrases
+# when using encrypted SSL certificate keys. If not specified
+# keys must either be unencrypted, or Squid started with the -N
+# option to allow it to query interactively for the passphrase.
+#
+# The key file name is given as argument to the program allowing
+# selection of the right password if you have multiple encrypted
+# keys.
+#Default:
+# none
+
+# OPTIONS RELATING TO EXTERNAL SSL_CRTD
+# -----------------------------------------------------------------------------
+
+# TAG: sslcrtd_program
+# Note: This option is only available if Squid is rebuilt with the
+# --enable-ssl-crtd
+#
+# Specify the location and options of the executable for ssl_crtd process.
+# /usr/lib/squid/ssl_crtd program requires -s and -M parameters
+# For more information use:
+# /usr/lib/squid/ssl_crtd -h
+#Default:
+# sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB
+
+# TAG: sslcrtd_children
+# Note: This option is only available if Squid is rebuilt with the
+# --enable-ssl-crtd
+#
+# The maximum number of processes spawn to service ssl server.
+# The maximum this may be safely set to is 32.
+#
+# The startup= and idle= options allow some measure of skew in your
+# tuning.
+#
+# startup=N
+#
+# Sets the minimum number of processes to spawn when Squid
+# starts or reconfigures. When set to zero the first request will
+# cause spawning of the first child process to handle it.
+#
+# Starting too few children temporary slows Squid under load while it
+# tries to spawn enough additional processes to cope with traffic.
+#
+# idle=N
+#
+# Sets a minimum of how many processes Squid is to try and keep available
+# at all times. When traffic begins to rise above what the existing
+# processes can handle this many more will be spawned up to the maximum
+# configured. A minimum setting of 1 is required.
+#
+# You must have at least one ssl_crtd process.
+#Default:
+# sslcrtd_children 32 startup=5 idle=1
+
+# TAG: sslcrtvalidator_program
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# Specify the location and options of the executable for ssl_crt_validator
+# process.
+#
+# Usage: sslcrtvalidator_program [ttl=n] [cache=n] path ...
+#
+# Options:
+# ttl=n TTL in seconds for cached results. The default is 60 secs
+# cache=n limit the result cache size. The default value is 2048
+#Default:
+# none
+
+# TAG: sslcrtvalidator_children
+# Note: This option is only available if Squid is rebuilt with the
+# --with-openssl
+#
+# The maximum number of processes spawn to service SSL server.
+# The maximum this may be safely set to is 32.
+#
+# The startup= and idle= options allow some measure of skew in your
+# tuning.
+#
+# startup=N
+#
+# Sets the minimum number of processes to spawn when Squid
+# starts or reconfigures. When set to zero the first request will
+# cause spawning of the first child process to handle it.
+#
+# Starting too few children temporary slows Squid under load while it
+# tries to spawn enough additional processes to cope with traffic.
+#
+# idle=N
+#
+# Sets a minimum of how many processes Squid is to try and keep available
+# at all times. When traffic begins to rise above what the existing
+# processes can handle this many more will be spawned up to the maximum
+# configured. A minimum setting of 1 is required.
+#
+# concurrency=
+#
+# The number of requests each certificate validator helper can handle in
+# parallel. A value of 0 indicates the certficate validator does not
+# support concurrency. Defaults to 1.
+#
+# When this directive is set to a value >= 1 then the protocol
+# used to communicate with the helper is modified to include
+# a request ID in front of the request/response. The request
+# ID from the request must be echoed back with the response
+# to that request.
+#
+# You must have at least one ssl_crt_validator process.
+#Default:
+# sslcrtvalidator_children 32 startup=5 idle=1 concurrency=1
+
+# OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM
+# -----------------------------------------------------------------------------
+
+# TAG: cache_peer
+# To specify other caches in a hierarchy, use the format:
+#
+# cache_peer hostname type http-port icp-port [options]
+#
+# For example,
+#
+# # proxy icp
+# # hostname type port port options
+# # -------------------- -------- ----- ----- -----------
+# cache_peer parent.foo.net parent 3128 3130 default
+# cache_peer sib1.foo.net sibling 3128 3130 proxy-only
+# cache_peer sib2.foo.net sibling 3128 3130 proxy-only
+# cache_peer example.com parent 80 0 default
+# cache_peer cdn.example.com sibling 3128 0
+#
+# type: either 'parent', 'sibling', or 'multicast'.
+#
+# proxy-port: The port number where the peer accept HTTP requests.
+# For other Squid proxies this is usually 3128
+# For web servers this is usually 80
+#
+# icp-port: Used for querying neighbor caches about objects.
+# Set to 0 if the peer does not support ICP or HTCP.
+# See ICP and HTCP options below for additional details.
+#
+#
+# ==== ICP OPTIONS ====
+#
+# You MUST also set icp_port and icp_access explicitly when using these options.
+# The defaults will prevent peer traffic using ICP.
+#
+#
+# no-query Disable ICP queries to this neighbor.
+#
+# multicast-responder
+# Indicates the named peer is a member of a multicast group.
+# ICP queries will not be sent directly to the peer, but ICP
+# replies will be accepted from it.
+#
+# closest-only Indicates that, for ICP_OP_MISS replies, we'll only forward
+# CLOSEST_PARENT_MISSes and never FIRST_PARENT_MISSes.
+#
+# background-ping
+# To only send ICP queries to this neighbor infrequently.
+# This is used to keep the neighbor round trip time updated
+# and is usually used in conjunction with weighted-round-robin.
+#
+#
+# ==== HTCP OPTIONS ====
+#
+# You MUST also set htcp_port and htcp_access explicitly when using these options.
+# The defaults will prevent peer traffic using HTCP.
+#
+#
+# htcp Send HTCP, instead of ICP, queries to the neighbor.
+# You probably also want to set the "icp-port" to 4827
+# instead of 3130. This directive accepts a comma separated
+# list of options described below.
+#
+# htcp=oldsquid Send HTCP to old Squid versions (2.5 or earlier).
+#
+# htcp=no-clr Send HTCP to the neighbor but without
+# sending any CLR requests. This cannot be used with
+# only-clr.
+#
+# htcp=only-clr Send HTCP to the neighbor but ONLY CLR requests.
+# This cannot be used with no-clr.
+#
+# htcp=no-purge-clr
+# Send HTCP to the neighbor including CLRs but only when
+# they do not result from PURGE requests.
+#
+# htcp=forward-clr
+# Forward any HTCP CLR requests this proxy receives to the peer.
+#
+#
+# ==== PEER SELECTION METHODS ====
+#
+# The default peer selection method is ICP, with the first responding peer
+# being used as source. These options can be used for better load balancing.
+#
+#
+# default This is a parent cache which can be used as a "last-resort"
+# if a peer cannot be located by any of the peer-selection methods.
+# If specified more than once, only the first is used.
+#
+# round-robin Load-Balance parents which should be used in a round-robin
+# fashion in the absence of any ICP queries.
+# weight=N can be used to add bias.
+#
+# weighted-round-robin
+# Load-Balance parents which should be used in a round-robin
+# fashion with the frequency of each parent being based on the
+# round trip time. Closer parents are used more often.
+# Usually used for background-ping parents.
+# weight=N can be used to add bias.
+#
+# carp Load-Balance parents which should be used as a CARP array.
+# The requests will be distributed among the parents based on the
+# CARP load balancing hash function based on their weight.
+#
+# userhash Load-balance parents based on the client proxy_auth or ident username.
+#
+# sourcehash Load-balance parents based on the client source IP.
+#
+# multicast-siblings
+# To be used only for cache peers of type "multicast".
+# ALL members of this multicast group have "sibling"
+# relationship with it, not "parent". This is to a multicast
+# group when the requested object would be fetched only from
+# a "parent" cache, anyway. It's useful, e.g., when
+# configuring a pool of redundant Squid proxies, being
+# members of the same multicast group.
+#
+#
+# ==== PEER SELECTION OPTIONS ====
+#
+# weight=N use to affect the selection of a peer during any weighted
+# peer-selection mechanisms.
+# The weight must be an integer; default is 1,
+# larger weights are favored more.
+# This option does not affect parent selection if a peering
+# protocol is not in use.
+#
+# basetime=N Specify a base amount to be subtracted from round trip
+# times of parents.
+# It is subtracted before division by weight in calculating
+# which parent to fectch from. If the rtt is less than the
+# base time the rtt is set to a minimal value.
+#
+# ttl=N Specify a TTL to use when sending multicast ICP queries
+# to this address.
+# Only useful when sending to a multicast group.
+# Because we don't accept ICP replies from random
+# hosts, you must configure other group members as
+# peers with the 'multicast-responder' option.
+#
+# no-delay To prevent access to this neighbor from influencing the
+# delay pools.
+#
+# digest-url=URL Tell Squid to fetch the cache digest (if digests are
+# enabled) for this host from the specified URL rather
+# than the Squid default location.
+#
+#
+# ==== CARP OPTIONS ====
+#
+# carp-key=key-specification
+# use a different key than the full URL to hash against the peer.
+# the key-specification is a comma-separated list of the keywords
+# scheme, host, port, path, params
+# Order is not important.
+#
+# ==== ACCELERATOR / REVERSE-PROXY OPTIONS ====
+#
+# originserver Causes this parent to be contacted as an origin server.
+# Meant to be used in accelerator setups when the peer
+# is a web server.
+#
+# forceddomain=name
+# Set the Host header of requests forwarded to this peer.
+# Useful in accelerator setups where the server (peer)
+# expects a certain domain name but clients may request
+# others. ie example.com or www.example.com
+#
+# no-digest Disable request of cache digests.
+#
+# no-netdb-exchange
+# Disables requesting ICMP RTT database (NetDB).
+#
+#
+# ==== AUTHENTICATION OPTIONS ====
+#
+# login=user:password
+# If this is a personal/workgroup proxy and your parent
+# requires proxy authentication.
+#
+# Note: The string can include URL escapes (i.e. %20 for
+# spaces). This also means % must be written as %%.
+#
+# login=PASSTHRU
+# Send login details received from client to this peer.
+# Both Proxy- and WWW-Authorization headers are passed
+# without alteration to the peer.
+# Authentication is not required by Squid for this to work.
+#
+# Note: This will pass any form of authentication but
+# only Basic auth will work through a proxy unless the
+# connection-auth options are also used.
+#
+# login=PASS Send login details received from client to this peer.
+# Authentication is not required by this option.
+#
+# If there are no client-provided authentication headers
+# to pass on, but username and password are available
+# from an external ACL user= and password= result tags
+# they may be sent instead.
+#
+# Note: To combine this with proxy_auth both proxies must
+# share the same user database as HTTP only allows for
+# a single login (one for proxy, one for origin server).
+# Also be warned this will expose your users proxy
+# password to the peer. USE WITH CAUTION
+#
+# login=*:password
+# Send the username to the upstream cache, but with a
+# fixed password. This is meant to be used when the peer
+# is in another administrative domain, but it is still
+# needed to identify each user.
+# The star can optionally be followed by some extra
+# information which is added to the username. This can
+# be used to identify this proxy to the peer, similar to
+# the login=username:password option above.
+#
+# login=NEGOTIATE
+# If this is a personal/workgroup proxy and your parent
+# requires a secure proxy authentication.
+# The first principal from the default keytab or defined by
+# the environment variable KRB5_KTNAME will be used.
+#
+# WARNING: The connection may transmit requests from multiple
+# clients. Negotiate often assumes end-to-end authentication
+# and a single-client. Which is not strictly true here.
+#
+# login=NEGOTIATE:principal_name
+# If this is a personal/workgroup proxy and your parent
+# requires a secure proxy authentication.
+# The principal principal_name from the default keytab or
+# defined by the environment variable KRB5_KTNAME will be
+# used.
+#
+# WARNING: The connection may transmit requests from multiple
+# clients. Negotiate often assumes end-to-end authentication
+# and a single-client. Which is not strictly true here.
+#
+# connection-auth=on|off
+# Tell Squid that this peer does or not support Microsoft
+# connection oriented authentication, and any such
+# challenges received from there should be ignored.
+# Default is auto to automatically determine the status
+# of the peer.
+#
+#
+# ==== SSL / HTTPS / TLS OPTIONS ====
+#
+# ssl Encrypt connections to this peer with SSL/TLS.
+#
+# sslcert=/path/to/ssl/certificate
+# A client SSL certificate to use when connecting to
+# this peer.
+#
+# sslkey=/path/to/ssl/key
+# The private SSL key corresponding to sslcert above.
+# If 'sslkey' is not specified 'sslcert' is assumed to
+# reference a combined file containing both the
+# certificate and the key.
+#
+# sslversion=1|2|3|4|5|6
+# The SSL version to use when connecting to this peer
+# 1 = automatic (default)
+# 2 = SSL v2 only
+# 3 = SSL v3 only
+# 4 = TLS v1.0 only
+# 5 = TLS v1.1 only
+# 6 = TLS v1.2 only
+#
+# sslcipher=... The list of valid SSL ciphers to use when connecting
+# to this peer.
+#
+# ssloptions=... Specify various SSL implementation options:
+#
+# NO_SSLv2 Disallow the use of SSLv2
+# NO_SSLv3 Disallow the use of SSLv3
+# NO_TLSv1 Disallow the use of TLSv1.0
+# NO_TLSv1_1 Disallow the use of TLSv1.1
+# NO_TLSv1_2 Disallow the use of TLSv1.2
+#
+# SINGLE_DH_USE
+# Always create a new key when using
+# temporary/ephemeral DH key exchanges
+#
+# NO_TICKET
+# Disable use of RFC5077 session tickets. Some servers
+# may have problems understanding the TLS extension due
+# to ambiguous specification in RFC4507.
+#
+# ALL Enable various bug workarounds
+# suggested as "harmless" by OpenSSL
+# Be warned that this reduces SSL/TLS
+# strength to some attacks.
+#
+# See the OpenSSL SSL_CTX_set_options documentation for a
+# more complete list.
+#
+# sslcafile=... A file containing additional CA certificates to use
+# when verifying the peer certificate.
+#
+# sslcapath=... A directory containing additional CA certificates to
+# use when verifying the peer certificate.
+#
+# sslcrlfile=... A certificate revocation list file to use when
+# verifying the peer certificate.
+#
+# sslflags=... Specify various flags modifying the SSL implementation:
+#
+# DONT_VERIFY_PEER
+# Accept certificates even if they fail to
+# verify.
+# NO_DEFAULT_CA
+# Don't use the default CA list built in
+# to OpenSSL.
+# DONT_VERIFY_DOMAIN
+# Don't verify the peer certificate
+# matches the server name
+#
+# ssldomain= The peer name as advertised in it's certificate.
+# Used for verifying the correctness of the received peer
+# certificate. If not specified the peer hostname will be
+# used.
+#
+# front-end-https
+# Enable the "Front-End-Https: On" header needed when
+# using Squid as a SSL frontend in front of Microsoft OWA.
+# See MS KB document Q307347 for details on this header.
+# If set to auto the header will only be added if the
+# request is forwarded as a https:// URL.
+#
+#
+# ==== GENERAL OPTIONS ====
+#
+# connect-timeout=N
+# A peer-specific connect timeout.
+# Also see the peer_connect_timeout directive.
+#
+# connect-fail-limit=N
+# How many times connecting to a peer must fail before
+# it is marked as down. Standby connection failures
+# count towards this limit. Default is 10.
+#
+# allow-miss Disable Squid's use of only-if-cached when forwarding
+# requests to siblings. This is primarily useful when
+# icp_hit_stale is used by the sibling. Excessive use
+# of this option may result in forwarding loops. One way
+# to prevent peering loops when using this option, is to
+# deny cache peer usage on requests from a peer:
+# acl fromPeer ...
+# cache_peer_access peerName deny fromPeer
+#
+# max-conn=N Limit the number of concurrent connections the Squid
+# may open to this peer, including already opened idle
+# and standby connections. There is no peer-specific
+# connection limit by default.
+#
+# A peer exceeding the limit is not used for new
+# requests unless a standby connection is available.
+#
+# max-conn currently works poorly with idle persistent
+# connections: When a peer reaches its max-conn limit,
+# and there are idle persistent connections to the peer,
+# the peer may not be selected because the limiting code
+# does not know whether Squid can reuse those idle
+# connections.
+#
+# standby=N Maintain a pool of N "hot standby" connections to an
+# UP peer, available for requests when no idle
+# persistent connection is available (or safe) to use.
+# By default and with zero N, no such pool is maintained.
+# N must not exceed the max-conn limit (if any).
+#
+# At start or after reconfiguration, Squid opens new TCP
+# standby connections until there are N connections
+# available and then replenishes the standby pool as
+# opened connections are used up for requests. A used
+# connection never goes back to the standby pool, but
+# may go to the regular idle persistent connection pool
+# shared by all peers and origin servers.
+#
+# Squid never opens multiple new standby connections
+# concurrently. This one-at-a-time approach minimizes
+# flooding-like effect on peers. Furthermore, just a few
+# standby connections should be sufficient in most cases
+# to supply most new requests with a ready-to-use
+# connection.
+#
+# Standby connections obey server_idle_pconn_timeout.
+# For the feature to work as intended, the peer must be
+# configured to accept and keep them open longer than
+# the idle timeout at the connecting Squid, to minimize
+# race conditions typical to idle used persistent
+# connections. Default request_timeout and
+# server_idle_pconn_timeout values ensure such a
+# configuration.
+#
+# name=xxx Unique name for the peer.
+# Required if you have multiple peers on the same host
+# but different ports.
+# This name can be used in cache_peer_access and similar
+# directives to identify the peer.
+# Can be used by outgoing access controls through the
+# peername ACL type.
+#
+# no-tproxy Do not use the client-spoof TPROXY support when forwarding
+# requests to this peer. Use normal address selection instead.
+# This overrides the spoof_client_ip ACL.
+#
+# proxy-only objects fetched from the peer will not be stored locally.
+#
+#Default:
+# none
+
+# TAG: cache_peer_domain
+# Use to limit the domains for which a neighbor cache will be
+# queried.
+#
+# Usage:
+# cache_peer_domain cache-host domain [domain ...]
+# cache_peer_domain cache-host !domain
+#
+# For example, specifying
+#
+# cache_peer_domain parent.foo.net .edu
+#
+# has the effect such that UDP query packets are sent to
+# 'bigserver' only when the requested object exists on a
+# server in the .edu domain. Prefixing the domainname
+# with '!' means the cache will be queried for objects
+# NOT in that domain.
+#
+# NOTE: * Any number of domains may be given for a cache-host,
+# either on the same or separate lines.
+# * When multiple domains are given for a particular
+# cache-host, the first matched domain is applied.
+# * Cache hosts with no domain restrictions are queried
+# for all requests.
+# * There are no defaults.
+# * There is also a 'cache_peer_access' tag in the ACL
+# section.
+#Default:
+# none
+
+# TAG: cache_peer_access
+# Restricts usage of cache_peer proxies.
+#
+# Usage:
+# cache_peer_access peer-name allow|deny [!]aclname ...
+#
+# For the required peer-name parameter, use either the value of the
+# cache_peer name=value parameter or, if name=value is missing, the
+# cache_peer hostname parameter.
+#
+# This directive narrows down the selection of peering candidates, but
+# does not determine the order in which the selected candidates are
+# contacted. That order is determined by the peer selection algorithms
+# (see PEER SELECTION sections in the cache_peer documentation).
+#
+# If a deny rule matches, the corresponding peer will not be contacted
+# for the current transaction -- Squid will not send ICP queries and
+# will not forward HTTP requests to that peer. An allow match leaves
+# the corresponding peer in the selection. The first match for a given
+# peer wins for that peer.
+#
+# The relative order of cache_peer_access directives for the same peer
+# matters. The relative order of any two cache_peer_access directives
+# for different peers does not matter. To ease interpretation, it is a
+# good idea to group cache_peer_access directives for the same peer
+# together.
+#
+# A single cache_peer_access directive may be evaluated multiple times
+# for a given transaction because individual peer selection algorithms
+# may check it independently from each other. These redundant checks
+# may be optimized away in future Squid versions.
+#
+# This clause only supports fast acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#Default:
+# No peer usage restrictions.
+
+# TAG: neighbor_type_domain
+# Modify the cache_peer neighbor type when passing requests
+# about specific domains to the peer.
+#
+# Usage:
+# neighbor_type_domain neighbor parent|sibling domain domain ...
+#
+# For example:
+# cache_peer foo.example.com parent 3128 3130
+# neighbor_type_domain foo.example.com sibling .au .de
+#
+# The above configuration treats all requests to foo.example.com as a
+# parent proxy unless the request is for a .au or .de ccTLD domain name.
+#Default:
+# The peer type from cache_peer directive is used for all requests to that peer.
+
+# TAG: dead_peer_timeout (seconds)
+# This controls how long Squid waits to declare a peer cache
+# as "dead." If there are no ICP replies received in this
+# amount of time, Squid will declare the peer dead and not
+# expect to receive any further ICP replies. However, it
+# continues to send ICP queries, and will mark the peer as
+# alive upon receipt of the first subsequent ICP reply.
+#
+# This timeout also affects when Squid expects to receive ICP
+# replies from peers. If more than 'dead_peer' seconds have
+# passed since the last ICP reply was received, Squid will not
+# expect to receive an ICP reply on the next query. Thus, if
+# your time between requests is greater than this timeout, you
+# will see a lot of requests sent DIRECT to origin servers
+# instead of to your parents.
+#Default:
+# dead_peer_timeout 10 seconds
+
+# TAG: forward_max_tries
+# Controls how many different forward paths Squid will try
+# before giving up. See also forward_timeout.
+#
+# NOTE: connect_retries (default: none) can make each of these
+# possible forwarding paths be tried multiple times.
+#Default:
+# forward_max_tries 25
+
+# MEMORY CACHE OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: cache_mem (bytes)
+# NOTE: THIS PARAMETER DOES NOT SPECIFY THE MAXIMUM PROCESS SIZE.
+# IT ONLY PLACES A LIMIT ON HOW MUCH ADDITIONAL MEMORY SQUID WILL
+# USE AS A MEMORY CACHE OF OBJECTS. SQUID USES MEMORY FOR OTHER
+# THINGS AS WELL. SEE THE SQUID FAQ SECTION 8 FOR DETAILS.
+#
+# 'cache_mem' specifies the ideal amount of memory to be used
+# for:
+# * In-Transit objects
+# * Hot Objects
+# * Negative-Cached objects
+#
+# Data for these objects are stored in 4 KB blocks. This
+# parameter specifies the ideal upper limit on the total size of
+# 4 KB blocks allocated. In-Transit objects take the highest
+# priority.
+#
+# In-transit objects have priority over the others. When
+# additional space is needed for incoming data, negative-cached
+# and hot objects will be released. In other words, the
+# negative-cached and hot objects will fill up any unused space
+# not needed for in-transit objects.
+#
+# If circumstances require, this limit will be exceeded.
+# Specifically, if your incoming request rate requires more than
+# 'cache_mem' of memory to hold in-transit objects, Squid will
+# exceed this limit to satisfy the new requests. When the load
+# decreases, blocks will be freed until the high-water mark is
+# reached. Thereafter, blocks will be used to store hot
+# objects.
+#
+# If shared memory caching is enabled, Squid does not use the shared
+# cache space for in-transit objects, but they still consume as much
+# local memory as they need. For more details about the shared memory
+# cache, see memory_cache_shared.
+#Default:
+cache_mem 256 MB
+
+# TAG: maximum_object_size_in_memory (bytes)
+# Objects greater than this size will not be attempted to kept in
+# the memory cache. This should be set high enough to keep objects
+# accessed frequently in memory to improve performance whilst low
+# enough to keep larger objects from hoarding cache_mem.
+#Default:
+maximum_object_size_in_memory 8192 KB
+
+# TAG: memory_cache_shared on|off
+# Controls whether the memory cache is shared among SMP workers.
+#
+# The shared memory cache is meant to occupy cache_mem bytes and replace
+# the non-shared memory cache, although some entities may still be
+# cached locally by workers for now (e.g., internal and in-transit
+# objects may be served from a local memory cache even if shared memory
+# caching is enabled).
+#
+# By default, the memory cache is shared if and only if all of the
+# following conditions are satisfied: Squid runs in SMP mode with
+# multiple workers, cache_mem is positive, and Squid environment
+# supports required IPC primitives (e.g., POSIX shared memory segments
+# and GCC-style atomic operations).
+#
+# To avoid blocking locks, shared memory uses opportunistic algorithms
+# that do not guarantee that every cachable entity that could have been
+# shared among SMP workers will actually be shared.
+#Default:
+# "on" where supported if doing memory caching with multiple SMP workers.
+
+# TAG: memory_cache_mode
+# Controls which objects to keep in the memory cache (cache_mem)
+#
+# always Keep most recently fetched objects in memory (default)
+#
+# disk Only disk cache hits are kept in memory, which means
+# an object must first be cached on disk and then hit
+# a second time before cached in memory.
+#
+# network Only objects fetched from network is kept in memory
+#Default:
+# Keep the most recently fetched objects in memory
+
+# TAG: memory_replacement_policy
+# The memory replacement policy parameter determines which
+# objects are purged from memory when memory space is needed.
+#
+# See cache_replacement_policy for details on algorithms.
+#Default:
+# memory_replacement_policy lru
+
+# DISK CACHE OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: cache_replacement_policy
+# The cache replacement policy parameter determines which
+# objects are evicted (replaced) when disk space is needed.
+#
+# lru : Squid's original list based LRU policy
+# heap GDSF : Greedy-Dual Size Frequency
+# heap LFUDA: Least Frequently Used with Dynamic Aging
+# heap LRU : LRU policy implemented using a heap
+#
+# Applies to any cache_dir lines listed below this directive.
+#
+# The LRU policies keeps recently referenced objects.
+#
+# The heap GDSF policy optimizes object hit rate by keeping smaller
+# popular objects in cache so it has a better chance of getting a
+# hit. It achieves a lower byte hit rate than LFUDA though since
+# it evicts larger (possibly popular) objects.
+#
+# The heap LFUDA policy keeps popular objects in cache regardless of
+# their size and thus optimizes byte hit rate at the expense of
+# hit rate since one large, popular object will prevent many
+# smaller, slightly less popular objects from being cached.
+#
+# Both policies utilize a dynamic aging mechanism that prevents
+# cache pollution that can otherwise occur with frequency-based
+# replacement policies.
+#
+# NOTE: if using the LFUDA replacement policy you should increase
+# the value of maximum_object_size above its default of 4 MB to
+# to maximize the potential byte hit rate improvement of LFUDA.
+#
+# For more information about the GDSF and LFUDA cache replacement
+# policies see http://www.hpl.hp.com/techreports/1999/HPL-1999-69.html
+# and http://fog.hpl.external.hp.com/techreports/98/HPL-98-173.html.
+#Default:
+# cache_replacement_policy lru
+
+# TAG: minimum_object_size (bytes)
+# Objects smaller than this size will NOT be saved on disk. The
+# value is specified in bytes, and the default is 0 KB, which
+# means all responses can be stored.
+#Default:
+# no limit
+
+# TAG: maximum_object_size (bytes)
+# Set the default value for max-size parameter on any cache_dir.
+# The value is specified in bytes, and the default is 4 MB.
+#
+# If you wish to get a high BYTES hit ratio, you should probably
+# increase this (one 32 MB object hit counts for 3200 10KB
+# hits).
+#
+# If you wish to increase hit ratio more than you want to
+# save bandwidth you should leave this low.
+#
+# NOTE: if using the LFUDA replacement policy you should increase
+# this value to maximize the byte hit rate improvement of LFUDA!
+# See cache_replacement_policy for a discussion of this policy.
+#Default:
+maximum_object_size 128 MB
+
+# TAG: cache_dir
+# Format:
+# cache_dir Type Directory-Name Fs-specific-data [options]
+#
+# You can specify multiple cache_dir lines to spread the
+# cache among different disk partitions.
+#
+# Type specifies the kind of storage system to use. Only "ufs"
+# is built by default. To enable any of the other storage systems
+# see the --enable-storeio configure option.
+#
+# 'Directory' is a top-level directory where cache swap
+# files will be stored. If you want to use an entire disk
+# for caching, this can be the mount-point directory.
+# The directory must exist and be writable by the Squid
+# process. Squid will NOT create this directory for you.
+#
+# In SMP configurations, cache_dir must not precede the workers option
+# and should use configuration macros or conditionals to give each
+# worker interested in disk caching a dedicated cache directory.
+#
+#
+# ==== The ufs store type ====
+#
+# "ufs" is the old well-known Squid storage format that has always
+# been there.
+#
+# Usage:
+# cache_dir ufs Directory-Name Mbytes L1 L2 [options]
+#
+# 'Mbytes' is the amount of disk space (MB) to use under this
+# directory. The default is 100 MB. Change this to suit your
+# configuration. Do NOT put the size of your disk drive here.
+# Instead, if you want Squid to use the entire disk drive,
+# subtract 20% and use that value.
+#
+# 'L1' is the number of first-level subdirectories which
+# will be created under the 'Directory'. The default is 16.
+#
+# 'L2' is the number of second-level subdirectories which
+# will be created under each first-level directory. The default
+# is 256.
+#
+#
+# ==== The aufs store type ====
+#
+# "aufs" uses the same storage format as "ufs", utilizing
+# POSIX-threads to avoid blocking the main Squid process on
+# disk-I/O. This was formerly known in Squid as async-io.
+#
+# Usage:
+# cache_dir aufs Directory-Name Mbytes L1 L2 [options]
+#
+# see argument descriptions under ufs above
+#
+#
+# ==== The diskd store type ====
+#
+# "diskd" uses the same storage format as "ufs", utilizing a
+# separate process to avoid blocking the main Squid process on
+# disk-I/O.
+#
+# Usage:
+# cache_dir diskd Directory-Name Mbytes L1 L2 [options] [Q1=n] [Q2=n]
+#
+# see argument descriptions under ufs above
+#
+# Q1 specifies the number of unacknowledged I/O requests when Squid
+# stops opening new files. If this many messages are in the queues,
+# Squid won't open new files. Default is 64
+#
+# Q2 specifies the number of unacknowledged messages when Squid
+# starts blocking. If this many messages are in the queues,
+# Squid blocks until it receives some replies. Default is 72
+#
+# When Q1 < Q2 (the default), the cache directory is optimized
+# for lower response time at the expense of a decrease in hit
+# ratio. If Q1 > Q2, the cache directory is optimized for
+# higher hit ratio at the expense of an increase in response
+# time.
+#
+#
+# ==== The rock store type ====
+#
+# Usage:
+# cache_dir rock Directory-Name Mbytes [options]
+#
+# The Rock Store type is a database-style storage. All cached
+# entries are stored in a "database" file, using fixed-size slots.
+# A single entry occupies one or more slots.
+#
+# If possible, Squid using Rock Store creates a dedicated kid
+# process called "disker" to avoid blocking Squid worker(s) on disk
+# I/O. One disker kid is created for each rock cache_dir. Diskers
+# are created only when Squid, running in daemon mode, has support
+# for the IpcIo disk I/O module.
+#
+# swap-timeout=msec: Squid will not start writing a miss to or
+# reading a hit from disk if it estimates that the swap operation
+# will take more than the specified number of milliseconds. By
+# default and when set to zero, disables the disk I/O time limit
+# enforcement. Ignored when using blocking I/O module because
+# blocking synchronous I/O does not allow Squid to estimate the
+# expected swap wait time.
+#
+# max-swap-rate=swaps/sec: Artificially limits disk access using
+# the specified I/O rate limit. Swap out requests that
+# would cause the average I/O rate to exceed the limit are
+# delayed. Individual swap in requests (i.e., hits or reads) are
+# not delayed, but they do contribute to measured swap rate and
+# since they are placed in the same FIFO queue as swap out
+# requests, they may wait longer if max-swap-rate is smaller.
+# This is necessary on file systems that buffer "too
+# many" writes and then start blocking Squid and other processes
+# while committing those writes to disk. Usually used together
+# with swap-timeout to avoid excessive delays and queue overflows
+# when disk demand exceeds available disk "bandwidth". By default
+# and when set to zero, disables the disk I/O rate limit
+# enforcement. Currently supported by IpcIo module only.
+#
+# slot-size=bytes: The size of a database "record" used for
+# storing cached responses. A cached response occupies at least
+# one slot and all database I/O is done using individual slots so
+# increasing this parameter leads to more disk space waste while
+# decreasing it leads to more disk I/O overheads. Should be a
+# multiple of your operating system I/O page size. Defaults to
+# 16KBytes. A housekeeping header is stored with each slot and
+# smaller slot-sizes will be rejected. The header is smaller than
+# 100 bytes.
+#
+#
+# ==== COMMON OPTIONS ====
+#
+# no-store no new objects should be stored to this cache_dir.
+#
+# min-size=n the minimum object size in bytes this cache_dir
+# will accept. It's used to restrict a cache_dir
+# to only store large objects (e.g. AUFS) while
+# other stores are optimized for smaller objects
+# (e.g. Rock).
+# Defaults to 0.
+#
+# max-size=n the maximum object size in bytes this cache_dir
+# supports.
+# The value in maximum_object_size directive sets
+# the default unless more specific details are
+# available (ie a small store capacity).
+#
+# Note: To make optimal use of the max-size limits you should order
+# the cache_dir lines with the smallest max-size value first.
+#
+#Default:
+# No disk cache. Store cache ojects only in memory.
+#
+
+# Uncomment and adjust the following to add a disk cache directory.
+cache_dir ufs /var/spool/squid 8192 16 256
+
+# TAG: store_dir_select_algorithm
+# How Squid selects which cache_dir to use when the response
+# object will fit into more than one.
+#
+# Regardless of which algorithm is used the cache_dir min-size
+# and max-size parameters are obeyed. As such they can affect
+# the selection algorithm by limiting the set of considered
+# cache_dir.
+#
+# Algorithms:
+#
+# least-load
+#
+# This algorithm is suited to caches with similar cache_dir
+# sizes and disk speeds.
+#
+# The disk with the least I/O pending is selected.
+# When there are multiple disks with the same I/O load ranking
+# the cache_dir with most available capacity is selected.
+#
+# When a mix of cache_dir sizes are configured the faster disks
+# have a naturally lower I/O loading and larger disks have more
+# capacity. So space used to store objects and data throughput
+# may be very unbalanced towards larger disks.
+#
+#
+# round-robin
+#
+# This algorithm is suited to caches with unequal cache_dir
+# disk sizes.
+#
+# Each cache_dir is selected in a rotation. The next suitable
+# cache_dir is used.
+#
+# Available cache_dir capacity is only considered in relation
+# to whether the object will fit and meets the min-size and
+# max-size parameters.
+#
+# Disk I/O loading is only considered to prevent overload on slow
+# disks. This algorithm does not spread objects by size, so any
+# I/O loading per-disk may appear very unbalanced and volatile.
+#
+# If several cache_dirs use similar min-size, max-size, or other
+# limits to to reject certain responses, then do not group such
+# cache_dir lines together, to avoid round-robin selection bias
+# towards the first cache_dir after the group. Instead, interleave
+# cache_dir lines from different groups. For example:
+#
+# store_dir_select_algorithm round-robin
+# cache_dir rock /hdd1 ... min-size=100000
+# cache_dir rock /ssd1 ... max-size=99999
+# cache_dir rock /hdd2 ... min-size=100000
+# cache_dir rock /ssd2 ... max-size=99999
+# cache_dir rock /hdd3 ... min-size=100000
+# cache_dir rock /ssd3 ... max-size=99999
+#Default:
+# store_dir_select_algorithm least-load
+
+# TAG: max_open_disk_fds
+# To avoid having disk as the I/O bottleneck Squid can optionally
+# bypass the on-disk cache if more than this amount of disk file
+# descriptors are open.
+#
+# A value of 0 indicates no limit.
+#Default:
+# no limit
+
+# TAG: cache_swap_low (percent, 0-100)
+# The low-water mark for AUFS/UFS/diskd cache object eviction by
+# the cache_replacement_policy algorithm.
+#
+# Removal begins when the swap (disk) usage of a cache_dir is
+# above this low-water mark and attempts to maintain utilization
+# near the low-water mark.
+#
+# As swap utilization increases towards the high-water mark set
+# by cache_swap_high object eviction becomes more agressive.
+#
+# The value difference in percentages between low- and high-water
+# marks represent an eviction rate of 300 objects per second and
+# the rate continues to scale in agressiveness by multiples of
+# this above the high-water mark.
+#
+# Defaults are 90% and 95%. If you have a large cache, 5% could be
+# hundreds of MB. If this is the case you may wish to set these
+# numbers closer together.
+#
+# See also cache_swap_high and cache_replacement_policy
+#Default:
+# cache_swap_low 90
+
+# TAG: cache_swap_high (percent, 0-100)
+# The high-water mark for AUFS/UFS/diskd cache object eviction by
+# the cache_replacement_policy algorithm.
+#
+# Removal begins when the swap (disk) usage of a cache_dir is
+# above the low-water mark set by cache_swap_low and attempts to
+# maintain utilization near the low-water mark.
+#
+# As swap utilization increases towards this high-water mark object
+# eviction becomes more agressive.
+#
+# The value difference in percentages between low- and high-water
+# marks represent an eviction rate of 300 objects per second and
+# the rate continues to scale in agressiveness by multiples of
+# this above the high-water mark.
+#
+# Defaults are 90% and 95%. If you have a large cache, 5% could be
+# hundreds of MB. If this is the case you may wish to set these
+# numbers closer together.
+#
+# See also cache_swap_low and cache_replacement_policy
+#Default:
+# cache_swap_high 95
+
+# LOGFILE OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: logformat
+# Usage:
+#
+# logformat <name> <format specification>
+#
+# Defines an access log format.
+#
+# The <format specification> is a string with embedded % format codes
+#
+# % format codes all follow the same basic structure where all but
+# the formatcode is optional. Output strings are automatically escaped
+# as required according to their context and the output format
+# modifiers are usually not needed, but can be specified if an explicit
+# output format is desired.
+#
+# % ["|[|'|#] [-] [[0]width] [{argument}] formatcode
+#
+# " output in quoted string format
+# [ output in squid text log format as used by log_mime_hdrs
+# # output in URL quoted format
+# ' output as-is
+#
+# - left aligned
+#
+# width minimum and/or maximum field width:
+# [width_min][.width_max]
+# When minimum starts with 0, the field is zero-padded.
+# String values exceeding maximum width are truncated.
+#
+# {arg} argument such as header name etc
+#
+# Format codes:
+#
+# % a literal % character
+# sn Unique sequence number per log line entry
+# err_code The ID of an error response served by Squid or
+# a similar internal error identifier.
+# err_detail Additional err_code-dependent error information.
+# note The annotation specified by the argument. Also
+# logs the adaptation meta headers set by the
+# adaptation_meta configuration parameter.
+# If no argument given all annotations logged.
+# The argument may include a separator to use with
+# annotation values:
+# name[:separator]
+# By default, multiple note values are separated with ","
+# and multiple notes are separated with "\r\n".
+# When logging named notes with %{name}note, the
+# explicitly configured separator is used between note
+# values. When logging all notes with %note, the
+# explicitly configured separator is used between
+# individual notes. There is currently no way to
+# specify both value and notes separators when logging
+# all notes with %note.
+#
+# Connection related format codes:
+#
+# >a Client source IP address
+# >A Client FQDN
+# >p Client source port
+# >eui Client source EUI (MAC address, EUI-48 or EUI-64 identifier)
+# >la Local IP address the client connected to
+# >lp Local port number the client connected to
+# >qos Client connection TOS/DSCP value set by Squid
+# >nfmark Client connection netfilter mark set by Squid
+#
+# la Local listening IP address the client connection was connected to.
+# lp Local listening port number the client connection was connected to.
+#
+# <a Server IP address of the last server or peer connection
+# <A Server FQDN or peer name
+# <p Server port number of the last server or peer connection
+# <la Local IP address of the last server or peer connection
+# <lp Local port number of the last server or peer connection
+# <qos Server connection TOS/DSCP value set by Squid
+# <nfmark Server connection netfilter mark set by Squid
+#
+# Time related format codes:
+#
+# ts Seconds since epoch
+# tu subsecond time (milliseconds)
+# tl Local time. Optional strftime format argument
+# default %d/%b/%Y:%H:%M:%S %z
+# tg GMT time. Optional strftime format argument
+# default %d/%b/%Y:%H:%M:%S %z
+# tr Response time (milliseconds)
+# dt Total time spent making DNS lookups (milliseconds)
+# tS Approximate master transaction start time in
+# <full seconds since epoch>.<fractional seconds> format.
+# Currently, Squid considers the master transaction
+# started when a complete HTTP request header initiating
+# the transaction is received from the client. This is
+# the same value that Squid uses to calculate transaction
+# response time when logging %tr to access.log. Currently,
+# Squid uses millisecond resolution for %tS values,
+# similar to the default access.log "current time" field
+# (%ts.%03tu).
+#
+# Access Control related format codes:
+#
+# et Tag returned by external acl
+# ea Log string returned by external acl
+# un User name (any available)
+# ul User name from authentication
+# ue User name from external acl helper
+# ui User name from ident
+# un A user name. Expands to the first available name
+# from the following list of information sources:
+# - authenticated user name, like %ul
+# - user name supplied by an external ACL, like %ue
+# - SSL client name, like %us
+# - ident user name, like %ui
+# credentials Client credentials. The exact meaning depends on
+# the authentication scheme: For Basic authentication,
+# it is the password; for Digest, the realm sent by the
+# client; for NTLM and Negotiate, the client challenge
+# or client credentials prefixed with "YR " or "KK ".
+#
+# HTTP related format codes:
+#
+# REQUEST
+#
+# [http::]rm Request method (GET/POST etc)
+# [http::]>rm Request method from client
+# [http::]<rm Request method sent to server or peer
+# [http::]ru Request URL from client (historic, filtered for logging)
+# [http::]>ru Request URL from client
+# [http::]<ru Request URL sent to server or peer
+# [http::]>rs Request URL scheme from client
+# [http::]<rs Request URL scheme sent to server or peer
+# [http::]>rd Request URL domain from client
+# [http::]<rd Request URL domain sent to server or peer
+# [http::]>rP Request URL port from client
+# [http::]<rP Request URL port sent to server or peer
+# [http::]rp Request URL path excluding hostname
+# [http::]>rp Request URL path excluding hostname from client
+# [http::]<rp Request URL path excluding hostname sent to server or peer
+# [http::]rv Request protocol version
+# [http::]>rv Request protocol version from client
+# [http::]<rv Request protocol version sent to server or peer
+#
+# [http::]>h Original received request header.
+# Usually differs from the request header sent by
+# Squid, although most fields are often preserved.
+# Accepts optional header field name/value filter
+# argument using name[:[separator]element] format.
+# [http::]>ha Received request header after adaptation and
+# redirection (pre-cache REQMOD vectoring point).
+# Usually differs from the request header sent by
+# Squid, although most fields are often preserved.
+# Optional header name argument as for >h
+#
+#
+# RESPONSE
+#
+# [http::]<Hs HTTP status code received from the next hop
+# [http::]>Hs HTTP status code sent to the client
+#
+# [http::]<h Reply header. Optional header name argument
+# as for >h
+#
+# [http::]mt MIME content type
+#
+#
+# SIZE COUNTERS
+#
+# [http::]st Total size of request + reply traffic with client
+# [http::]>st Total size of request received from client.
+# Excluding chunked encoding bytes.
+# [http::]<st Total size of reply sent to client (after adaptation)
+#
+# [http::]>sh Size of request headers received from client
+# [http::]<sh Size of reply headers sent to client (after adaptation)
+#
+# [http::]<sH Reply high offset sent
+# [http::]<sS Upstream object size
+#
+# [http::]<bs Number of HTTP-equivalent message body bytes
+# received from the next hop, excluding chunked
+# transfer encoding and control messages.
+# Generated FTP/Gopher listings are treated as
+# received bodies.
+#
+#
+# TIMING
+#
+# [http::]<pt Peer response time in milliseconds. The timer starts
+# when the last request byte is sent to the next hop
+# and stops when the last response byte is received.
+# [http::]<tt Total time in milliseconds. The timer
+# starts with the first connect request (or write I/O)
+# sent to the first selected peer. The timer stops
+# with the last I/O with the last peer.
+#
+# Squid handling related format codes:
+#
+# Ss Squid request status (TCP_MISS etc)
+# Sh Squid hierarchy status (DEFAULT_PARENT etc)
+#
+# SSL-related format codes:
+#
+# ssl::bump_mode SslBump decision for the transaction:
+#
+# For CONNECT requests that initiated bumping of
+# a connection and for any request received on
+# an already bumped connection, Squid logs the
+# corresponding SslBump mode ("server-first" or
+# "client-first"). See the ssl_bump option for
+# more information about these modes.
+#
+# A "none" token is logged for requests that
+# triggered "ssl_bump" ACL evaluation matching
+# either a "none" rule or no rules at all.
+#
+# In all other cases, a single dash ("-") is
+# logged.
+#
+# ssl::>sni SSL client SNI sent to Squid. Available only
+# after the peek, stare, or splice SSL bumping
+# actions.
+#
+# If ICAP is enabled, the following code becomes available (as
+# well as ICAP log codes documented with the icap_log option):
+#
+# icap::tt Total ICAP processing time for the HTTP
+# transaction. The timer ticks when ICAP
+# ACLs are checked and when ICAP
+# transaction is in progress.
+#
+# If adaptation is enabled the following three codes become available:
+#
+# adapt::<last_h The header of the last ICAP response or
+# meta-information from the last eCAP
+# transaction related to the HTTP transaction.
+# Like <h, accepts an optional header name
+# argument.
+#
+# adapt::sum_trs Summed adaptation transaction response
+# times recorded as a comma-separated list in
+# the order of transaction start time. Each time
+# value is recorded as an integer number,
+# representing response time of one or more
+# adaptation (ICAP or eCAP) transaction in
+# milliseconds. When a failed transaction is
+# being retried or repeated, its time is not
+# logged individually but added to the
+# replacement (next) transaction. See also:
+# adapt::all_trs.
+#
+# adapt::all_trs All adaptation transaction response times.
+# Same as adaptation_strs but response times of
+# individual transactions are never added
+# together. Instead, all transaction response
+# times are recorded individually.
+#
+# You can prefix adapt::*_trs format codes with adaptation
+# service name in curly braces to record response time(s) specific
+# to that service. For example: %{my_service}adapt::sum_trs
+#
+# If SSL is enabled, the following formating codes become available:
+#
+# %ssl::>cert_subject The Subject field of the received client
+# SSL certificate or a dash ('-') if Squid has
+# received an invalid/malformed certificate or
+# no certificate at all. Consider encoding the
+# logged value because Subject often has spaces.
+#
+# %ssl::>cert_issuer The Issuer field of the received client
+# SSL certificate or a dash ('-') if Squid has
+# received an invalid/malformed certificate or
+# no certificate at all. Consider encoding the
+# logged value because Issuer often has spaces.
+#
+# The default formats available (which do not need re-defining) are:
+#
+#logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt
+#logformat common %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st %Ss:%Sh
+#logformat combined %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
+#logformat referrer %ts.%03tu %>a %{Referer}>h %ru
+#logformat useragent %>a [%tl] "%{User-Agent}>h"
+#
+# NOTE: When the log_mime_hdrs directive is set to ON.
+# The squid, common and combined formats have a safely encoded copy
+# of the mime headers appended to each line within a pair of brackets.
+#
+# NOTE: The common and combined formats are not quite true to the Apache definition.
+# The logs from Squid contain an extra status and hierarchy code appended.
+#
+#Default:
+# The format definitions squid, common, combined, referrer, useragent are built in.
+
+# TAG: access_log
+# Configures whether and how Squid logs HTTP and ICP transactions.
+# If access logging is enabled, a single line is logged for every
+# matching HTTP or ICP request. The recommended directive formats are:
+#
+# access_log <module>:<place> [option ...] [acl acl ...]
+# access_log none [acl acl ...]
+#
+# The following directive format is accepted but may be deprecated:
+# access_log <module>:<place> [<logformat name> [acl acl ...]]
+#
+# In most cases, the first ACL name must not contain the '=' character
+# and should not be equal to an existing logformat name. You can always
+# start with an 'all' ACL to work around those restrictions.
+#
+# Will log to the specified module:place using the specified format (which
+# must be defined in a logformat directive) those entries which match
+# ALL the acl's specified (which must be defined in acl clauses).
+# If no acl is specified, all requests will be logged to this destination.
+#
+# ===== Available options for the recommended directive format =====
+#
+# logformat=name Names log line format (either built-in or
+# defined by a logformat directive). Defaults
+# to 'squid'.
+#
+# buffer-size=64KB Defines approximate buffering limit for log
+# records (see buffered_logs). Squid should not
+# keep more than the specified size and, hence,
+# should flush records before the buffer becomes
+# full to avoid overflows under normal
+# conditions (the exact flushing algorithm is
+# module-dependent though). The on-error option
+# controls overflow handling.
+#
+# on-error=die|drop Defines action on unrecoverable errors. The
+# 'drop' action ignores (i.e., does not log)
+# affected log records. The default 'die' action
+# kills the affected worker. The drop action
+# support has not been tested for modules other
+# than tcp.
+#
+# ===== Modules Currently available =====
+#
+# none Do not log any requests matching these ACL.
+# Do not specify Place or logformat name.
+#
+# stdio Write each log line to disk immediately at the completion of
+# each request.
+# Place: the filename and path to be written.
+#
+# daemon Very similar to stdio. But instead of writing to disk the log
+# line is passed to a daemon helper for asychronous handling instead.
+# Place: varies depending on the daemon.
+#
+# log_file_daemon Place: the file name and path to be written.
+#
+# syslog To log each request via syslog facility.
+# Place: The syslog facility and priority level for these entries.
+# Place Format: facility.priority
+#
+# where facility could be any of:
+# authpriv, daemon, local0 ... local7 or user.
+#
+# And priority could be any of:
+# err, warning, notice, info, debug.
+#
+# udp To send each log line as text data to a UDP receiver.
+# Place: The destination host name or IP and port.
+# Place Format: //host:port
+#
+# tcp To send each log line as text data to a TCP receiver.
+# Lines may be accumulated before sending (see buffered_logs).
+# Place: The destination host name or IP and port.
+# Place Format: //host:port
+#
+# Default:
+# access_log daemon:/var/log/squid/access.log squid
+#Default:
+# access_log daemon:/var/log/squid/access.log squid
+
+# TAG: icap_log
+# ICAP log files record ICAP transaction summaries, one line per
+# transaction.
+#
+# The icap_log option format is:
+# icap_log <filepath> [<logformat name> [acl acl ...]]
+# icap_log none [acl acl ...]]
+#
+# Please see access_log option documentation for details. The two
+# kinds of logs share the overall configuration approach and many
+# features.
+#
+# ICAP processing of a single HTTP message or transaction may
+# require multiple ICAP transactions. In such cases, multiple
+# ICAP transaction log lines will correspond to a single access
+# log line.
+#
+# ICAP log supports many access.log logformat %codes. In ICAP context,
+# HTTP message-related %codes are applied to the HTTP message embedded
+# in an ICAP message. Logformat "%http::>..." codes are used for HTTP
+# messages embedded in ICAP requests while "%http::<..." codes are used
+# for HTTP messages embedded in ICAP responses. For example:
+#
+# http::>h To-be-adapted HTTP message headers sent by Squid to
+# the ICAP service. For REQMOD transactions, these are
+# HTTP request headers. For RESPMOD, these are HTTP
+# response headers, but Squid currently cannot log them
+# (i.e., %http::>h will expand to "-" for RESPMOD).
+#
+# http::<h Adapted HTTP message headers sent by the ICAP
+# service to Squid (i.e., HTTP request headers in regular
+# REQMOD; HTTP response headers in RESPMOD and during
+# request satisfaction in REQMOD).
+#
+# ICAP OPTIONS transactions do not embed HTTP messages.
+#
+# Several logformat codes below deal with ICAP message bodies. An ICAP
+# message body, if any, typically includes a complete HTTP message
+# (required HTTP headers plus optional HTTP message body). When
+# computing HTTP message body size for these logformat codes, Squid
+# either includes or excludes chunked encoding overheads; see
+# code-specific documentation for details.
+#
+# For Secure ICAP services, all size-related information is currently
+# computed before/after TLS encryption/decryption, as if TLS was not
+# in use at all.
+#
+# The following format codes are also available for ICAP logs:
+#
+# icap::<A ICAP server IP address. Similar to <A.
+#
+# icap::<service_name ICAP service name from the icap_service
+# option in Squid configuration file.
+#
+# icap::ru ICAP Request-URI. Similar to ru.
+#
+# icap::rm ICAP request method (REQMOD, RESPMOD, or
+# OPTIONS). Similar to existing rm.
+#
+# icap::>st The total size of the ICAP request sent to the ICAP
+# server (ICAP headers + ICAP body), including chunking
+# metadata (if any).
+#
+# icap::<st The total size of the ICAP response received from the
+# ICAP server (ICAP headers + ICAP body), including
+# chunking metadata (if any).
+#
+# icap::<bs The size of the ICAP response body received from the
+# ICAP server, excluding chunking metadata (if any).
+#
+# icap::tr Transaction response time (in
+# milliseconds). The timer starts when
+# the ICAP transaction is created and
+# stops when the transaction is completed.
+# Similar to tr.
+#
+# icap::tio Transaction I/O time (in milliseconds). The
+# timer starts when the first ICAP request
+# byte is scheduled for sending. The timers
+# stops when the last byte of the ICAP response
+# is received.
+#
+# icap::to Transaction outcome: ICAP_ERR* for all
+# transaction errors, ICAP_OPT for OPTION
+# transactions, ICAP_ECHO for 204
+# responses, ICAP_MOD for message
+# modification, and ICAP_SAT for request
+# satisfaction. Similar to Ss.
+#
+# icap::Hs ICAP response status code. Similar to Hs.
+#
+# icap::>h ICAP request header(s). Similar to >h.
+#
+# icap::<h ICAP response header(s). Similar to <h.
+#
+# The default ICAP log format, which can be used without an explicit
+# definition, is called icap_squid:
+#
+#logformat icap_squid %ts.%03tu %6icap::tr %>A %icap::to/%03icap::Hs %icap::<st %icap::rm %icap::ru %un -/%icap::<A -
+#
+# See also: logformat and %adapt::<last_h
+#Default:
+# none
+
+# TAG: logfile_daemon
+# Specify the path to the logfile-writing daemon. This daemon is
+# used to write the access and store logs, if configured.
+#
+# Squid sends a number of commands to the log daemon:
+# L<data>\n - logfile data
+# R\n - rotate file
+# T\n - truncate file
+# O\n - reopen file
+# F\n - flush file
+# r<n>\n - set rotate count to <n>
+# b<n>\n - 1 = buffer output, 0 = don't buffer output
+#
+# No responses is expected.
+#Default:
+# logfile_daemon /usr/lib/squid/log_file_daemon
+
+# TAG: stats_collection allow|deny acl acl...
+# This options allows you to control which requests gets accounted
+# in performance counters.
+#
+# This clause only supports fast acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#Default:
+# Allow logging for all transactions.
+
+# TAG: cache_store_log
+# Logs the activities of the storage manager. Shows which
+# objects are ejected from the cache, and which objects are
+# saved and for how long.
+# There are not really utilities to analyze this data, so you can safely
+# disable it (the default).
+#
+# Store log uses modular logging outputs. See access_log for the list
+# of modules supported.
+#
+# Example:
+# cache_store_log stdio:/var/log/squid/store.log
+# cache_store_log daemon:/var/log/squid/store.log
+#Default:
+# none
+
+# TAG: cache_swap_state
+# Location for the cache "swap.state" file. This index file holds
+# the metadata of objects saved on disk. It is used to rebuild
+# the cache during startup. Normally this file resides in each
+# 'cache_dir' directory, but you may specify an alternate
+# pathname here. Note you must give a full filename, not just
+# a directory. Since this is the index for the whole object
+# list you CANNOT periodically rotate it!
+#
+# If %s can be used in the file name it will be replaced with a
+# a representation of the cache_dir name where each / is replaced
+# with '.'. This is needed to allow adding/removing cache_dir
+# lines when cache_swap_log is being used.
+#
+# If have more than one 'cache_dir', and %s is not used in the name
+# these swap logs will have names such as:
+#
+# cache_swap_log.00
+# cache_swap_log.01
+# cache_swap_log.02
+#
+# The numbered extension (which is added automatically)
+# corresponds to the order of the 'cache_dir' lines in this
+# configuration file. If you change the order of the 'cache_dir'
+# lines in this file, these index files will NOT correspond to
+# the correct 'cache_dir' entry (unless you manually rename
+# them). We recommend you do NOT use this option. It is
+# better to keep these index files in each 'cache_dir' directory.
+#Default:
+# Store the journal inside its cache_dir
+
+# TAG: logfile_rotate
+# Specifies the number of logfile rotations to make when you
+# type 'squid -k rotate'. The default is 10, which will rotate
+# with extensions 0 through 9. Setting logfile_rotate to 0 will
+# disable the file name rotation, but the logfiles are still closed
+# and re-opened. This will enable you to rename the logfiles
+# yourself just before sending the rotate signal.
+#
+# Note, the 'squid -k rotate' command normally sends a USR1
+# signal to the running squid process. In certain situations
+# (e.g. on Linux with Async I/O), USR1 is used for other
+# purposes, so -k rotate uses another signal. It is best to get
+# in the habit of using 'squid -k rotate' instead of 'kill -USR1
+# <pid>'.
+#
+# Note, from Squid-3.1 this option is only a default for cache.log,
+# that log can be rotated separately by using debug_options.
+#
+# Note2, for Debian/Linux the default of logfile_rotate is
+# zero, since it includes external logfile-rotation methods.
+#Default:
+# logfile_rotate 0
+
+# TAG: mime_table
+# Path to Squid's icon configuration file.
+#
+# You shouldn't need to change this, but the default file contains
+# examples and formatting information if you do.
+#Default:
+# mime_table /usr/share/squid/mime.conf
+
+# TAG: log_mime_hdrs on|off
+# The Cache can record both the request and the response MIME
+# headers for each HTTP transaction. The headers are encoded
+# safely and will appear as two bracketed fields at the end of
+# the access log (for either the native or httpd-emulated log
+# formats). To enable this logging set log_mime_hdrs to 'on'.
+#Default:
+# log_mime_hdrs off
+
+# TAG: pid_filename
+# A filename to write the process-id to. To disable, enter "none".
+#Default:
+# pid_filename /var/run/squid.pid
+
+# TAG: client_netmask
+# A netmask for client addresses in logfiles and cachemgr output.
+# Change this to protect the privacy of your cache clients.
+# A netmask of 255.255.255.0 will log all IP's in that range with
+# the last digit set to '0'.
+#Default:
+# Log full client IP address
+
+# TAG: strip_query_terms
+# By default, Squid strips query terms from requested URLs before
+# logging. This protects your user's privacy and reduces log size.
+#
+# When investigating HIT/MISS or other caching behaviour you
+# will need to disable this to see the full URL used by Squid.
+#Default:
+# strip_query_terms on
+
+# TAG: buffered_logs on|off
+# Whether to write/send access_log records ASAP or accumulate them and
+# then write/send them in larger chunks. Buffering may improve
+# performance because it decreases the number of I/Os. However,
+# buffering increases the delay before log records become available to
+# the final recipient (e.g., a disk file or logging daemon) and,
+# hence, increases the risk of log records loss.
+#
+# Note that even when buffered_logs are off, Squid may have to buffer
+# records if it cannot write/send them immediately due to pending I/Os
+# (e.g., the I/O writing the previous log record) or connectivity loss.
+#
+# Currently honored by 'daemon' and 'tcp' access_log modules only.
+#Default:
+# buffered_logs off
+
+# TAG: netdb_filename
+# Where Squid stores it's netdb journal.
+# When enabled this journal preserves netdb state between restarts.
+#
+# To disable, enter "none".
+#Default:
+# netdb_filename stdio:/var/log/squid/netdb.state
+
+# OPTIONS FOR TROUBLESHOOTING
+# -----------------------------------------------------------------------------
+
+# TAG: cache_log
+# Squid administrative logging file.
+#
+# This is where general information about Squid behavior goes. You can
+# increase the amount of data logged to this file and how often it is
+# rotated with "debug_options"
+#Default:
+# cache_log /var/log/squid/cache.log
+
+# TAG: debug_options
+# Logging options are set as section,level where each source file
+# is assigned a unique section. Lower levels result in less
+# output, Full debugging (level 9) can result in a very large
+# log file, so be careful.
+#
+# The magic word "ALL" sets debugging levels for all sections.
+# The default is to run with "ALL,1" to record important warnings.
+#
+# The rotate=N option can be used to keep more or less of these logs
+# than would otherwise be kept by logfile_rotate.
+# For most uses a single log should be enough to monitor current
+# events affecting Squid.
+#Default:
+# Log all critical and important messages.
+
+# TAG: coredump_dir
+# By default Squid leaves core files in the directory from where
+# it was started. If you set 'coredump_dir' to a directory
+# that exists, Squid will chdir() to that directory at startup
+# and coredump files will be left there.
+#
+#Default:
+# Use the directory from where Squid was started.
+#
+
+# Leave coredumps in the first cache dir
+coredump_dir /var/spool/squid
+
+# OPTIONS FOR FTP GATEWAYING
+# -----------------------------------------------------------------------------
+
+# TAG: ftp_user
+# If you want the anonymous login password to be more informative
+# (and enable the use of picky FTP servers), set this to something
+# reasonable for your domain, like wwwuser@somewhere.net
+#
+# The reason why this is domainless by default is the
+# request can be made on the behalf of a user in any domain,
+# depending on how the cache is used.
+# Some FTP server also validate the email address is valid
+# (for example perl.com).
+#Default:
+# ftp_user Squid@
+
+# TAG: ftp_passive
+# If your firewall does not allow Squid to use passive
+# connections, turn off this option.
+#
+# Use of ftp_epsv_all option requires this to be ON.
+#Default:
+# ftp_passive on
+
+# TAG: ftp_epsv_all
+# FTP Protocol extensions permit the use of a special "EPSV ALL" command.
+#
+# NATs may be able to put the connection on a "fast path" through the
+# translator, as the EPRT command will never be used and therefore,
+# translation of the data portion of the segments will never be needed.
+#
+# When a client only expects to do two-way FTP transfers this may be
+# useful.
+# If squid finds that it must do a three-way FTP transfer after issuing
+# an EPSV ALL command, the FTP session will fail.
+#
+# If you have any doubts about this option do not use it.
+# Squid will nicely attempt all other connection methods.
+#
+# Requires ftp_passive to be ON (default) for any effect.
+#Default:
+# ftp_epsv_all off
+
+# TAG: ftp_epsv
+# FTP Protocol extensions permit the use of a special "EPSV" command.
+#
+# NATs may be able to put the connection on a "fast path" through the
+# translator using EPSV, as the EPRT command will never be used
+# and therefore, translation of the data portion of the segments
+# will never be needed.
+#
+# EPSV is often required to interoperate with FTP servers on IPv6
+# networks. On the other hand, it may break some IPv4 servers.
+#
+# By default, EPSV may try EPSV with any FTP server. To fine tune
+# that decision, you may restrict EPSV to certain clients or servers
+# using ACLs:
+#
+# ftp_epsv allow|deny al1 acl2 ...
+#
+# WARNING: Disabling EPSV may cause problems with external NAT and IPv6.
+#
+# Only fast ACLs are supported.
+# Requires ftp_passive to be ON (default) for any effect.
+#Default:
+# none
+
+# TAG: ftp_eprt
+# FTP Protocol extensions permit the use of a special "EPRT" command.
+#
+# This extension provides a protocol neutral alternative to the
+# IPv4-only PORT command. When supported it enables active FTP data
+# channels over IPv6 and efficient NAT handling.
+#
+# Turning this OFF will prevent EPRT being attempted and will skip
+# straight to using PORT for IPv4 servers.
+#
+# Some devices are known to not handle this extension correctly and
+# may result in crashes. Devices which suport EPRT enough to fail
+# cleanly will result in Squid attempting PORT anyway. This directive
+# should only be disabled when EPRT results in device failures.
+#
+# WARNING: Doing so will convert Squid back to the old behavior with all
+# the related problems with external NAT devices/layers and IPv4-only FTP.
+#Default:
+# ftp_eprt on
+
+# TAG: ftp_sanitycheck
+# For security and data integrity reasons Squid by default performs
+# sanity checks of the addresses of FTP data connections ensure the
+# data connection is to the requested server. If you need to allow
+# FTP connections to servers using another IP address for the data
+# connection turn this off.
+#Default:
+# ftp_sanitycheck on
+
+# TAG: ftp_telnet_protocol
+# The FTP protocol is officially defined to use the telnet protocol
+# as transport channel for the control connection. However, many
+# implementations are broken and does not respect this aspect of
+# the FTP protocol.
+#
+# If you have trouble accessing files with ASCII code 255 in the
+# path or similar problems involving this ASCII code you can
+# try setting this directive to off. If that helps, report to the
+# operator of the FTP server in question that their FTP server
+# is broken and does not follow the FTP standard.
+#Default:
+# ftp_telnet_protocol on
+
+# OPTIONS FOR EXTERNAL SUPPORT PROGRAMS
+# -----------------------------------------------------------------------------
+
+# TAG: diskd_program
+# Specify the location of the diskd executable.
+# Note this is only useful if you have compiled in
+# diskd as one of the store io modules.
+#Default:
+# diskd_program /usr/lib/squid/diskd
+
+# TAG: unlinkd_program
+# Specify the location of the executable for file deletion process.
+#Default:
+# unlinkd_program /usr/lib/squid/unlinkd
+
+# TAG: pinger_program
+# Specify the location of the executable for the pinger process.
+#Default:
+# pinger_program /usr/lib/squid/pinger
+
+# TAG: pinger_enable
+# Control whether the pinger is active at run-time.
+# Enables turning ICMP pinger on and off with a simple
+# squid -k reconfigure.
+#Default:
+# pinger_enable on
+
+# OPTIONS FOR URL REWRITING
+# -----------------------------------------------------------------------------
+
+# TAG: url_rewrite_program
+# Specify the location of the executable URL rewriter to use.
+# Since they can perform almost any function there isn't one included.
+#
+# For each requested URL, the rewriter will receive on line with the format
+#
+# [channel-ID <SP>] URL [<SP> extras]<NL>
+#
+# See url_rewrite_extras on how to send "extras" with optional values to
+# the helper.
+# After processing the request the helper must reply using the following format:
+#
+# [channel-ID <SP>] result [<SP> kv-pairs]
+#
+# The result code can be:
+#
+# OK status=30N url="..."
+# Redirect the URL to the one supplied in 'url='.
+# 'status=' is optional and contains the status code to send
+# the client in Squids HTTP response. It must be one of the
+# HTTP redirect status codes: 301, 302, 303, 307, 308.
+# When no status is given Squid will use 302.
+#
+# OK rewrite-url="..."
+# Rewrite the URL to the one supplied in 'rewrite-url='.
+# The new URL is fetched directly by Squid and returned to
+# the client as the response to its request.
+#
+# OK
+# When neither of url= and rewrite-url= are sent Squid does
+# not change the URL.
+#
+# ERR
+# Do not change the URL.
+#
+# BH
+# An internal error occurred in the helper, preventing
+# a result being identified. The 'message=' key name is
+# reserved for delivering a log message.
+#
+#
+# In addition to the above kv-pairs Squid also understands the following
+# optional kv-pairs received from URL rewriters:
+# clt_conn_tag=TAG
+# Associates a TAG with the client TCP connection.
+# The TAG is treated as a regular annotation but persists across
+# future requests on the client connection rather than just the
+# current request. A helper may update the TAG during subsequent
+# requests be returning a new kv-pair.
+#
+# When using the concurrency= option the protocol is changed by
+# introducing a query channel tag in front of the request/response.
+# The query channel tag is a number between 0 and concurrency-1.
+# This value must be echoed back unchanged to Squid as the first part
+# of the response relating to its request.
+#
+# WARNING: URL re-writing ability should be avoided whenever possible.
+# Use the URL redirect form of response instead.
+#
+# Re-write creates a difference in the state held by the client
+# and server. Possibly causing confusion when the server response
+# contains snippets of its view state. Embeded URLs, response
+# and content Location headers, etc. are not re-written by this
+# interface.
+#
+# By default, a URL rewriter is not used.
+#Default:
+# none
+
+# TAG: url_rewrite_children
+# The maximum number of redirector processes to spawn. If you limit
+# it too few Squid will have to wait for them to process a backlog of
+# URLs, slowing it down. If you allow too many they will use RAM
+# and other system resources noticably.
+#
+# The startup= and idle= options allow some measure of skew in your
+# tuning.
+#
+# startup=
+#
+# Sets a minimum of how many processes are to be spawned when Squid
+# starts or reconfigures. When set to zero the first request will
+# cause spawning of the first child process to handle it.
+#
+# Starting too few will cause an initial slowdown in traffic as Squid
+# attempts to simultaneously spawn enough processes to cope.
+#
+# idle=
+#
+# Sets a minimum of how many processes Squid is to try and keep available
+# at all times. When traffic begins to rise above what the existing
+# processes can handle this many more will be spawned up to the maximum
+# configured. A minimum setting of 1 is required.
+#
+# concurrency=
+#
+# The number of requests each redirector helper can handle in
+# parallel. Defaults to 0 which indicates the redirector
+# is a old-style single threaded redirector.
+#
+# When this directive is set to a value >= 1 then the protocol
+# used to communicate with the helper is modified to include
+# an ID in front of the request/response. The ID from the request
+# must be echoed back with the response to that request.
+#Default:
+# url_rewrite_children 20 startup=0 idle=1 concurrency=0
+
+# TAG: url_rewrite_host_header
+# To preserve same-origin security policies in browsers and
+# prevent Host: header forgery by redirectors Squid rewrites
+# any Host: header in redirected requests.
+#
+# If you are running an accelerator this may not be a wanted
+# effect of a redirector. This directive enables you disable
+# Host: alteration in reverse-proxy traffic.
+#
+# WARNING: Entries are cached on the result of the URL rewriting
+# process, so be careful if you have domain-virtual hosts.
+#
+# WARNING: Squid and other software verifies the URL and Host
+# are matching, so be careful not to relay through other proxies
+# or inspecting firewalls with this disabled.
+#Default:
+# url_rewrite_host_header on
+
+# TAG: url_rewrite_access
+# If defined, this access list specifies which requests are
+# sent to the redirector processes.
+#
+# This clause supports both fast and slow acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#Default:
+# Allow, unless rules exist in squid.conf.
+
+# TAG: url_rewrite_bypass
+# When this is 'on', a request will not go through the
+# redirector if all the helpers are busy. If this is 'off'
+# and the redirector queue grows too large, Squid will exit
+# with a FATAL error and ask you to increase the number of
+# redirectors. You should only enable this if the redirectors
+# are not critical to your caching system. If you use
+# redirectors for access control, and you enable this option,
+# users may have access to pages they should not
+# be allowed to request.
+#Default:
+# url_rewrite_bypass off
+
+# TAG: url_rewrite_extras
+# Specifies a string to be append to request line format for the
+# rewriter helper. "Quoted" format values may contain spaces and
+# logformat %macros. In theory, any logformat %macro can be used.
+# In practice, a %macro expands as a dash (-) if the helper request is
+# sent before the required macro information is available to Squid.
+#Default:
+# url_rewrite_extras "%>a/%>A %un %>rm myip=%la myport=%lp"
+
+# OPTIONS FOR STORE ID
+# -----------------------------------------------------------------------------
+
+# TAG: store_id_program
+# Specify the location of the executable StoreID helper to use.
+# Since they can perform almost any function there isn't one included.
+#
+# For each requested URL, the helper will receive one line with the format
+#
+# [channel-ID <SP>] URL [<SP> extras]<NL>
+#
+#
+# After processing the request the helper must reply using the following format:
+#
+# [channel-ID <SP>] result [<SP> kv-pairs]
+#
+# The result code can be:
+#
+# OK store-id="..."
+# Use the StoreID supplied in 'store-id='.
+#
+# ERR
+# The default is to use HTTP request URL as the store ID.
+#
+# BH
+# An internal error occured in the helper, preventing
+# a result being identified.
+#
+# In addition to the above kv-pairs Squid also understands the following
+# optional kv-pairs received from URL rewriters:
+# clt_conn_tag=TAG
+# Associates a TAG with the client TCP connection.
+# Please see url_rewrite_program related documentation for this
+# kv-pair
+#
+# Helper programs should be prepared to receive and possibly ignore
+# additional whitespace-separated tokens on each input line.
+#
+# When using the concurrency= option the protocol is changed by
+# introducing a query channel tag in front of the request/response.
+# The query channel tag is a number between 0 and concurrency-1.
+# This value must be echoed back unchanged to Squid as the first part
+# of the response relating to its request.
+#
+# NOTE: when using StoreID refresh_pattern will apply to the StoreID
+# returned from the helper and not the URL.
+#
+# WARNING: Wrong StoreID value returned by a careless helper may result
+# in the wrong cached response returned to the user.
+#
+# By default, a StoreID helper is not used.
+#Default:
+# none
+
+# TAG: store_id_extras
+# Specifies a string to be append to request line format for the
+# StoreId helper. "Quoted" format values may contain spaces and
+# logformat %macros. In theory, any logformat %macro can be used.
+# In practice, a %macro expands as a dash (-) if the helper request is
+# sent before the required macro information is available to Squid.
+#Default:
+# store_id_extras "%>a/%>A %un %>rm myip=%la myport=%lp"
+
+# TAG: store_id_children
+# The maximum number of StoreID helper processes to spawn. If you limit
+# it too few Squid will have to wait for them to process a backlog of
+# requests, slowing it down. If you allow too many they will use RAM
+# and other system resources noticably.
+#
+# The startup= and idle= options allow some measure of skew in your
+# tuning.
+#
+# startup=
+#
+# Sets a minimum of how many processes are to be spawned when Squid
+# starts or reconfigures. When set to zero the first request will
+# cause spawning of the first child process to handle it.
+#
+# Starting too few will cause an initial slowdown in traffic as Squid
+# attempts to simultaneously spawn enough processes to cope.
+#
+# idle=
+#
+# Sets a minimum of how many processes Squid is to try and keep available
+# at all times. When traffic begins to rise above what the existing
+# processes can handle this many more will be spawned up to the maximum
+# configured. A minimum setting of 1 is required.
+#
+# concurrency=
+#
+# The number of requests each storeID helper can handle in
+# parallel. Defaults to 0 which indicates the helper
+# is a old-style single threaded program.
+#
+# When this directive is set to a value >= 1 then the protocol
+# used to communicate with the helper is modified to include
+# an ID in front of the request/response. The ID from the request
+# must be echoed back with the response to that request.
+#Default:
+# store_id_children 20 startup=0 idle=1 concurrency=0
+
+# TAG: store_id_access
+# If defined, this access list specifies which requests are
+# sent to the StoreID processes. By default all requests
+# are sent.
+#
+# This clause supports both fast and slow acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#Default:
+# Allow, unless rules exist in squid.conf.
+
+# TAG: store_id_bypass
+# When this is 'on', a request will not go through the
+# helper if all helpers are busy. If this is 'off'
+# and the helper queue grows too large, Squid will exit
+# with a FATAL error and ask you to increase the number of
+# helpers. You should only enable this if the helperss
+# are not critical to your caching system. If you use
+# helpers for critical caching components, and you enable this
+# option, users may not get objects from cache.
+#Default:
+# store_id_bypass on
+
+# OPTIONS FOR TUNING THE CACHE
+# -----------------------------------------------------------------------------
+
+# TAG: cache
+# Requests denied by this directive will not be served from the cache
+# and their responses will not be stored in the cache. This directive
+# has no effect on other transactions and on already cached responses.
+#
+# This clause supports both fast and slow acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#
+# This and the two other similar caching directives listed below are
+# checked at different transaction processing stages, have different
+# access to response information, affect different cache operations,
+# and differ in slow ACLs support:
+#
+# * cache: Checked before Squid makes a hit/miss determination.
+# No access to reply information!
+# Denies both serving a hit and storing a miss.
+# Supports both fast and slow ACLs.
+# * send_hit: Checked after a hit was detected.
+# Has access to reply (hit) information.
+# Denies serving a hit only.
+# Supports fast ACLs only.
+# * store_miss: Checked before storing a cachable miss.
+# Has access to reply (miss) information.
+# Denies storing a miss only.
+# Supports fast ACLs only.
+#
+# If you are not sure which of the three directives to use, apply the
+# following decision logic:
+#
+# * If your ACL(s) are of slow type _and_ need response info, redesign.
+# Squid does not support that particular combination at this time.
+# Otherwise:
+# * If your directive ACL(s) are of slow type, use "cache"; and/or
+# * if your directive ACL(s) need no response info, use "cache".
+# Otherwise:
+# * If you do not want the response cached, use store_miss; and/or
+# * if you do not want a hit on a cached response, use send_hit.
+#Default:
+# By default, this directive is unused and has no effect.
+
+# TAG: send_hit
+# Responses denied by this directive will not be served from the cache
+# (but may still be cached, see store_miss). This directive has no
+# effect on the responses it allows and on the cached objects.
+#
+# Please see the "cache" directive for a summary of differences among
+# store_miss, send_hit, and cache directives.
+#
+# Unlike the "cache" directive, send_hit only supports fast acl
+# types. See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#
+# For example:
+#
+# # apply custom Store ID mapping to some URLs
+# acl MapMe dstdomain .c.example.com
+# store_id_program ...
+# store_id_access allow MapMe
+#
+# # but prevent caching of special responses
+# # such as 302 redirects that cause StoreID loops
+# acl Ordinary http_status 200-299
+# store_miss deny MapMe !Ordinary
+#
+# # and do not serve any previously stored special responses
+# # from the cache (in case they were already cached before
+# # the above store_miss rule was in effect).
+# send_hit deny MapMe !Ordinary
+#Default:
+# By default, this directive is unused and has no effect.
+
+# TAG: store_miss
+# Responses denied by this directive will not be cached (but may still
+# be served from the cache, see send_hit). This directive has no
+# effect on the responses it allows and on the already cached responses.
+#
+# Please see the "cache" directive for a summary of differences among
+# store_miss, send_hit, and cache directives. See the
+# send_hit directive for a usage example.
+#
+# Unlike the "cache" directive, store_miss only supports fast acl
+# types. See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#Default:
+# By default, this directive is unused and has no effect.
+
+# TAG: max_stale time-units
+# This option puts an upper limit on how stale content Squid
+# will serve from the cache if cache validation fails.
+# Can be overriden by the refresh_pattern max-stale option.
+#Default:
+# max_stale 1 week
+
+# TAG: refresh_pattern
+# usage: refresh_pattern [-i] regex min percent max [options]
+#
+# By default, regular expressions are CASE-SENSITIVE. To make
+# them case-insensitive, use the -i option.
+#
+# 'Min' is the time (in minutes) an object without an explicit
+# expiry time should be considered fresh. The recommended
+# value is 0, any higher values may cause dynamic applications
+# to be erroneously cached unless the application designer
+# has taken the appropriate actions.
+#
+# 'Percent' is a percentage of the objects age (time since last
+# modification age) an object without explicit expiry time
+# will be considered fresh.
+#
+# 'Max' is an upper limit on how long objects without an explicit
+# expiry time will be considered fresh.
+#
+# options: override-expire
+# override-lastmod
+# reload-into-ims
+# ignore-reload
+# ignore-no-store
+# ignore-must-revalidate
+# ignore-private
+# ignore-auth
+# max-stale=NN
+# refresh-ims
+# store-stale
+#
+# override-expire enforces min age even if the server
+# sent an explicit expiry time (e.g., with the
+# Expires: header or Cache-Control: max-age). Doing this
+# VIOLATES the HTTP standard. Enabling this feature
+# could make you liable for problems which it causes.
+#
+# Note: override-expire does not enforce staleness - it only extends
+# freshness / min. If the server returns a Expires time which
+# is longer than your max time, Squid will still consider
+# the object fresh for that period of time.
+#
+# override-lastmod enforces min age even on objects
+# that were modified recently.
+#
+# reload-into-ims changes a client no-cache or ``reload''
+# request for a cached entry into a conditional request using
+# If-Modified-Since and/or If-None-Match headers, provided the
+# cached entry has a Last-Modified and/or a strong ETag header.
+# Doing this VIOLATES the HTTP standard. Enabling this feature
+# could make you liable for problems which it causes.
+#
+# ignore-reload ignores a client no-cache or ``reload''
+# header. Doing this VIOLATES the HTTP standard. Enabling
+# this feature could make you liable for problems which
+# it causes.
+#
+# ignore-no-store ignores any ``Cache-control: no-store''
+# headers received from a server. Doing this VIOLATES
+# the HTTP standard. Enabling this feature could make you
+# liable for problems which it causes.
+#
+# ignore-must-revalidate ignores any ``Cache-Control: must-revalidate``
+# headers received from a server. Doing this VIOLATES
+# the HTTP standard. Enabling this feature could make you
+# liable for problems which it causes.
+#
+# ignore-private ignores any ``Cache-control: private''
+# headers received from a server. Doing this VIOLATES
+# the HTTP standard. Enabling this feature could make you
+# liable for problems which it causes.
+#
+# ignore-auth caches responses to requests with authorization,
+# as if the originserver had sent ``Cache-control: public''
+# in the response header. Doing this VIOLATES the HTTP standard.
+# Enabling this feature could make you liable for problems which
+# it causes.
+#
+# refresh-ims causes squid to contact the origin server
+# when a client issues an If-Modified-Since request. This
+# ensures that the client will receive an updated version
+# if one is available.
+#
+# store-stale stores responses even if they don't have explicit
+# freshness or a validator (i.e., Last-Modified or an ETag)
+# present, or if they're already stale. By default, Squid will
+# not cache such responses because they usually can't be
+# reused. Note that such responses will be stale by default.
+#
+# max-stale=NN provide a maximum staleness factor. Squid won't
+# serve objects more stale than this even if it failed to
+# validate the object. Default: use the max_stale global limit.
+#
+# Basically a cached object is:
+#
+# FRESH if expire > now, else STALE
+# STALE if age > max
+# FRESH if lm-factor < percent, else STALE
+# FRESH if age < min
+# else STALE
+#
+# The refresh_pattern lines are checked in the order listed here.
+# The first entry which matches is used. If none of the entries
+# match the default will be used.
+#
+# Note, you must uncomment all the default lines if you want
+# to change one. The default setting is only active if none is
+# used.
+#
+#
+
+#
+# Add any of your own refresh_pattern entries above these.
+#
+refresh_pattern ^ftp: 1440 20% 10080
+refresh_pattern ^gopher: 1440 0% 1440
+refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
+refresh_pattern . 0 20% 4320
+
+# TAG: quick_abort_min (KB)
+#Default:
+# quick_abort_min 16 KB
+
+# TAG: quick_abort_max (KB)
+#Default:
+# quick_abort_max 16 KB
+
+# TAG: quick_abort_pct (percent)
+# The cache by default continues downloading aborted requests
+# which are almost completed (less than 16 KB remaining). This
+# may be undesirable on slow (e.g. SLIP) links and/or very busy
+# caches. Impatient users may tie up file descriptors and
+# bandwidth by repeatedly requesting and immediately aborting
+# downloads.
+#
+# When the user aborts a request, Squid will check the
+# quick_abort values to the amount of data transferred until
+# then.
+#
+# If the transfer has less than 'quick_abort_min' KB remaining,
+# it will finish the retrieval.
+#
+# If the transfer has more than 'quick_abort_max' KB remaining,
+# it will abort the retrieval.
+#
+# If more than 'quick_abort_pct' of the transfer has completed,
+# it will finish the retrieval.
+#
+# If you do not want any retrieval to continue after the client
+# has aborted, set both 'quick_abort_min' and 'quick_abort_max'
+# to '0 KB'.
+#
+# If you want retrievals to always continue if they are being
+# cached set 'quick_abort_min' to '-1 KB'.
+#Default:
+# quick_abort_pct 95
+
+# TAG: read_ahead_gap buffer-size
+# The amount of data the cache will buffer ahead of what has been
+# sent to the client when retrieving an object from another server.
+#Default:
+# read_ahead_gap 16 KB
+
+# TAG: negative_ttl time-units
+# Set the Default Time-to-Live (TTL) for failed requests.
+# Certain types of failures (such as "connection refused" and
+# "404 Not Found") are able to be negatively-cached for a short time.
+# Modern web servers should provide Expires: header, however if they
+# do not this can provide a minimum TTL.
+# The default is not to cache errors with unknown expiry details.
+#
+# Note that this is different from negative caching of DNS lookups.
+#
+# WARNING: Doing this VIOLATES the HTTP standard. Enabling
+# this feature could make you liable for problems which it
+# causes.
+#Default:
+# negative_ttl 0 seconds
+
+# TAG: positive_dns_ttl time-units
+# Upper limit on how long Squid will cache positive DNS responses.
+# Default is 6 hours (360 minutes). This directive must be set
+# larger than negative_dns_ttl.
+#Default:
+# positive_dns_ttl 6 hours
+
+# TAG: negative_dns_ttl time-units
+# Time-to-Live (TTL) for negative caching of failed DNS lookups.
+# This also sets the lower cache limit on positive lookups.
+# Minimum value is 1 second, and it is not recommendable to go
+# much below 10 seconds.
+#Default:
+# negative_dns_ttl 1 minutes
+
+# TAG: range_offset_limit size [acl acl...]
+# usage: (size) [units] [[!]aclname]
+#
+# Sets an upper limit on how far (number of bytes) into the file
+# a Range request may be to cause Squid to prefetch the whole file.
+# If beyond this limit, Squid forwards the Range request as it is and
+# the result is NOT cached.
+#
+# This is to stop a far ahead range request (lets say start at 17MB)
+# from making Squid fetch the whole object up to that point before
+# sending anything to the client.
+#
+# Multiple range_offset_limit lines may be specified, and they will
+# be searched from top to bottom on each request until a match is found.
+# The first match found will be used. If no line matches a request, the
+# default limit of 0 bytes will be used.
+#
+# 'size' is the limit specified as a number of units.
+#
+# 'units' specifies whether to use bytes, KB, MB, etc.
+# If no units are specified bytes are assumed.
+#
+# A size of 0 causes Squid to never fetch more than the
+# client requested. (default)
+#
+# A size of 'none' causes Squid to always fetch the object from the
+# beginning so it may cache the result. (2.0 style)
+#
+# 'aclname' is the name of a defined ACL.
+#
+# NP: Using 'none' as the byte value here will override any quick_abort settings
+# that may otherwise apply to the range request. The range request will
+# be fully fetched from start to finish regardless of the client
+# actions. This affects bandwidth usage.
+#Default:
+# none
+
+# TAG: minimum_expiry_time (seconds)
+# The minimum caching time according to (Expires - Date)
+# headers Squid honors if the object can't be revalidated.
+# The default is 60 seconds.
+#
+# In reverse proxy environments it might be desirable to honor
+# shorter object lifetimes. It is most likely better to make
+# your server return a meaningful Last-Modified header however.
+#
+# In ESI environments where page fragments often have short
+# lifetimes, this will often be best set to 0.
+#Default:
+# minimum_expiry_time 60 seconds
+
+# TAG: store_avg_object_size (bytes)
+# Average object size, used to estimate number of objects your
+# cache can hold. The default is 13 KB.
+#
+# This is used to pre-seed the cache index memory allocation to
+# reduce expensive reallocate operations while handling clients
+# traffic. Too-large values may result in memory allocation during
+# peak traffic, too-small values will result in wasted memory.
+#
+# Check the cache manager 'info' report metrics for the real
+# object sizes seen by your Squid before tuning this.
+#Default:
+# store_avg_object_size 13 KB
+
+# TAG: store_objects_per_bucket
+# Target number of objects per bucket in the store hash table.
+# Lowering this value increases the total number of buckets and
+# also the storage maintenance rate. The default is 20.
+#Default:
+# store_objects_per_bucket 20
+
+# HTTP OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: request_header_max_size (KB)
+# This specifies the maximum size for HTTP headers in a request.
+# Request headers are usually relatively small (about 512 bytes).
+# Placing a limit on the request header size will catch certain
+# bugs (for example with persistent connections) and possibly
+# buffer-overflow or denial-of-service attacks.
+#Default:
+# request_header_max_size 64 KB
+
+# TAG: reply_header_max_size (KB)
+# This specifies the maximum size for HTTP headers in a reply.
+# Reply headers are usually relatively small (about 512 bytes).
+# Placing a limit on the reply header size will catch certain
+# bugs (for example with persistent connections) and possibly
+# buffer-overflow or denial-of-service attacks.
+#Default:
+# reply_header_max_size 64 KB
+
+# TAG: request_body_max_size (bytes)
+# This specifies the maximum size for an HTTP request body.
+# In other words, the maximum size of a PUT/POST request.
+# A user who attempts to send a request with a body larger
+# than this limit receives an "Invalid Request" error message.
+# If you set this parameter to a zero (the default), there will
+# be no limit imposed.
+#
+# See also client_request_buffer_max_size for an alternative
+# limitation on client uploads which can be configured.
+#Default:
+# No limit.
+
+# TAG: client_request_buffer_max_size (bytes)
+# This specifies the maximum buffer size of a client request.
+# It prevents squid eating too much memory when somebody uploads
+# a large file.
+#Default:
+# client_request_buffer_max_size 512 KB
+
+# TAG: broken_posts
+# A list of ACL elements which, if matched, causes Squid to send
+# an extra CRLF pair after the body of a PUT/POST request.
+#
+# Some HTTP servers has broken implementations of PUT/POST,
+# and rely on an extra CRLF pair sent by some WWW clients.
+#
+# Quote from RFC2616 section 4.1 on this matter:
+#
+# Note: certain buggy HTTP/1.0 client implementations generate an
+# extra CRLF's after a POST request. To restate what is explicitly
+# forbidden by the BNF, an HTTP/1.1 client must not preface or follow
+# a request with an extra CRLF.
+#
+# This clause only supports fast acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#
+#Example:
+# acl buggy_server url_regex ^http://....
+# broken_posts allow buggy_server
+#Default:
+# Obey RFC 2616.
+
+# TAG: adaptation_uses_indirect_client on|off
+# Controls whether the indirect client IP address (instead of the direct
+# client IP address) is passed to adaptation services.
+#
+# See also: follow_x_forwarded_for adaptation_send_client_ip
+#Default:
+# adaptation_uses_indirect_client on
+
+# TAG: via on|off
+# If set (default), Squid will include a Via header in requests and
+# replies as required by RFC2616.
+#Default:
+# via on
+
+# TAG: ie_refresh on|off
+# Microsoft Internet Explorer up until version 5.5 Service
+# Pack 1 has an issue with transparent proxies, wherein it
+# is impossible to force a refresh. Turning this on provides
+# a partial fix to the problem, by causing all IMS-REFRESH
+# requests from older IE versions to check the origin server
+# for fresh content. This reduces hit ratio by some amount
+# (~10% in my experience), but allows users to actually get
+# fresh content when they want it. Note because Squid
+# cannot tell if the user is using 5.5 or 5.5SP1, the behavior
+# of 5.5 is unchanged from old versions of Squid (i.e. a
+# forced refresh is impossible). Newer versions of IE will,
+# hopefully, continue to have the new behavior and will be
+# handled based on that assumption. This option defaults to
+# the old Squid behavior, which is better for hit ratios but
+# worse for clients using IE, if they need to be able to
+# force fresh content.
+#Default:
+# ie_refresh off
+
+# TAG: vary_ignore_expire on|off
+# Many HTTP servers supporting Vary gives such objects
+# immediate expiry time with no cache-control header
+# when requested by a HTTP/1.0 client. This option
+# enables Squid to ignore such expiry times until
+# HTTP/1.1 is fully implemented.
+#
+# WARNING: If turned on this may eventually cause some
+# varying objects not intended for caching to get cached.
+#Default:
+# vary_ignore_expire off
+
+# TAG: request_entities
+# Squid defaults to deny GET and HEAD requests with request entities,
+# as the meaning of such requests are undefined in the HTTP standard
+# even if not explicitly forbidden.
+#
+# Set this directive to on if you have clients which insists
+# on sending request entities in GET or HEAD requests. But be warned
+# that there is server software (both proxies and web servers) which
+# can fail to properly process this kind of request which may make you
+# vulnerable to cache pollution attacks if enabled.
+#Default:
+# request_entities off
+
+# TAG: request_header_access
+# Usage: request_header_access header_name allow|deny [!]aclname ...
+#
+# WARNING: Doing this VIOLATES the HTTP standard. Enabling
+# this feature could make you liable for problems which it
+# causes.
+#
+# This option replaces the old 'anonymize_headers' and the
+# older 'http_anonymizer' option with something that is much
+# more configurable. A list of ACLs for each header name allows
+# removal of specific header fields under specific conditions.
+#
+# This option only applies to outgoing HTTP request headers (i.e.,
+# headers sent by Squid to the next HTTP hop such as a cache peer
+# or an origin server). The option has no effect during cache hit
+# detection. The equivalent adaptation vectoring point in ICAP
+# terminology is post-cache REQMOD.
+#
+# The option is applied to individual outgoing request header
+# fields. For each request header field F, Squid uses the first
+# qualifying sets of request_header_access rules:
+#
+# 1. Rules with header_name equal to F's name.
+# 2. Rules with header_name 'Other', provided F's name is not
+# on the hard-coded list of commonly used HTTP header names.
+# 3. Rules with header_name 'All'.
+#
+# Within that qualifying rule set, rule ACLs are checked as usual.
+# If ACLs of an "allow" rule match, the header field is allowed to
+# go through as is. If ACLs of a "deny" rule match, the header is
+# removed and request_header_replace is then checked to identify
+# if the removed header has a replacement. If no rules within the
+# set have matching ACLs, the header field is left as is.
+#
+# For example, to achieve the same behavior as the old
+# 'http_anonymizer standard' option, you should use:
+#
+# request_header_access From deny all
+# request_header_access Referer deny all
+# request_header_access User-Agent deny all
+#
+# Or, to reproduce the old 'http_anonymizer paranoid' feature
+# you should use:
+#
+# request_header_access Authorization allow all
+# request_header_access Proxy-Authorization allow all
+# request_header_access Cache-Control allow all
+# request_header_access Content-Length allow all
+# request_header_access Content-Type allow all
+# request_header_access Date allow all
+# request_header_access Host allow all
+# request_header_access If-Modified-Since allow all
+# request_header_access Pragma allow all
+# request_header_access Accept allow all
+# request_header_access Accept-Charset allow all
+# request_header_access Accept-Encoding allow all
+# request_header_access Accept-Language allow all
+# request_header_access Connection allow all
+# request_header_access All deny all
+#
+# HTTP reply headers are controlled with the reply_header_access directive.
+#
+# By default, all headers are allowed (no anonymizing is performed).
+#Default:
+# No limits.
+
+# TAG: reply_header_access
+# Usage: reply_header_access header_name allow|deny [!]aclname ...
+#
+# WARNING: Doing this VIOLATES the HTTP standard. Enabling
+# this feature could make you liable for problems which it
+# causes.
+#
+# This option only applies to reply headers, i.e., from the
+# server to the client.
+#
+# This is the same as request_header_access, but in the other
+# direction. Please see request_header_access for detailed
+# documentation.
+#
+# For example, to achieve the same behavior as the old
+# 'http_anonymizer standard' option, you should use:
+#
+# reply_header_access Server deny all
+# reply_header_access WWW-Authenticate deny all
+# reply_header_access Link deny all
+#
+# Or, to reproduce the old 'http_anonymizer paranoid' feature
+# you should use:
+#
+# reply_header_access Allow allow all
+# reply_header_access WWW-Authenticate allow all
+# reply_header_access Proxy-Authenticate allow all
+# reply_header_access Cache-Control allow all
+# reply_header_access Content-Encoding allow all
+# reply_header_access Content-Length allow all
+# reply_header_access Content-Type allow all
+# reply_header_access Date allow all
+# reply_header_access Expires allow all
+# reply_header_access Last-Modified allow all
+# reply_header_access Location allow all
+# reply_header_access Pragma allow all
+# reply_header_access Content-Language allow all
+# reply_header_access Retry-After allow all
+# reply_header_access Title allow all
+# reply_header_access Content-Disposition allow all
+# reply_header_access Connection allow all
+# reply_header_access All deny all
+#
+# HTTP request headers are controlled with the request_header_access directive.
+#
+# By default, all headers are allowed (no anonymizing is
+# performed).
+#Default:
+# No limits.
+
+# TAG: request_header_replace
+# Usage: request_header_replace header_name message
+# Example: request_header_replace User-Agent Nutscrape/1.0 (CP/M; 8-bit)
+#
+# This option allows you to change the contents of headers
+# denied with request_header_access above, by replacing them
+# with some fixed string.
+#
+# This only applies to request headers, not reply headers.
+#
+# By default, headers are removed if denied.
+#Default:
+# none
+
+# TAG: reply_header_replace
+# Usage: reply_header_replace header_name message
+# Example: reply_header_replace Server Foo/1.0
+#
+# This option allows you to change the contents of headers
+# denied with reply_header_access above, by replacing them
+# with some fixed string.
+#
+# This only applies to reply headers, not request headers.
+#
+# By default, headers are removed if denied.
+#Default:
+# none
+
+# TAG: request_header_add
+# Usage: request_header_add field-name field-value acl1 [acl2] ...
+# Example: request_header_add X-Client-CA "CA=%ssl::>cert_issuer" all
+#
+# This option adds header fields to outgoing HTTP requests (i.e.,
+# request headers sent by Squid to the next HTTP hop such as a
+# cache peer or an origin server). The option has no effect during
+# cache hit detection. The equivalent adaptation vectoring point
+# in ICAP terminology is post-cache REQMOD.
+#
+# Field-name is a token specifying an HTTP header name. If a
+# standard HTTP header name is used, Squid does not check whether
+# the new header conflicts with any existing headers or violates
+# HTTP rules. If the request to be modified already contains a
+# field with the same name, the old field is preserved but the
+# header field values are not merged.
+#
+# Field-value is either a token or a quoted string. If quoted
+# string format is used, then the surrounding quotes are removed
+# while escape sequences and %macros are processed.
+#
+# In theory, all of the logformat codes can be used as %macros.
+# However, unlike logging (which happens at the very end of
+# transaction lifetime), the transaction may not yet have enough
+# information to expand a macro when the new header value is needed.
+# And some information may already be available to Squid but not yet
+# committed where the macro expansion code can access it (report
+# such instances!). The macro will be expanded into a single dash
+# ('-') in such cases. Not all macros have been tested.
+#
+# One or more Squid ACLs may be specified to restrict header
+# injection to matching requests. As always in squid.conf, all
+# ACLs in an option ACL list must be satisfied for the insertion
+# to happen. The request_header_add option supports fast ACLs
+# only.
+#Default:
+# none
+
+# TAG: note
+# This option used to log custom information about the master
+# transaction. For example, an admin may configure Squid to log
+# which "user group" the transaction belongs to, where "user group"
+# will be determined based on a set of ACLs and not [just]
+# authentication information.
+# Values of key/value pairs can be logged using %{key}note macros:
+#
+# note key value acl ...
+# logformat myFormat ... %{key}note ...
+#Default:
+# none
+
+# TAG: relaxed_header_parser on|off|warn
+# In the default "on" setting Squid accepts certain forms
+# of non-compliant HTTP messages where it is unambiguous
+# what the sending application intended even if the message
+# is not correctly formatted. The messages is then normalized
+# to the correct form when forwarded by Squid.
+#
+# If set to "warn" then a warning will be emitted in cache.log
+# each time such HTTP error is encountered.
+#
+# If set to "off" then such HTTP errors will cause the request
+# or response to be rejected.
+#Default:
+# relaxed_header_parser on
+
+# TAG: collapsed_forwarding (on|off)
+# When enabled, instead of forwarding each concurrent request for
+# the same URL, Squid just sends the first of them. The other, so
+# called "collapsed" requests, wait for the response to the first
+# request and, if it happens to be cachable, use that response.
+# Here, "concurrent requests" means "received after the first
+# request headers were parsed and before the corresponding response
+# headers were parsed".
+#
+# This feature is disabled by default: enabling collapsed
+# forwarding needlessly delays forwarding requests that look
+# cachable (when they are collapsed) but then need to be forwarded
+# individually anyway because they end up being for uncachable
+# content. However, in some cases, such as acceleration of highly
+# cachable content with periodic or grouped expiration times, the
+# gains from collapsing [large volumes of simultaneous refresh
+# requests] outweigh losses from such delays.
+#
+# Squid collapses two kinds of requests: regular client requests
+# received on one of the listening ports and internal "cache
+# revalidation" requests which are triggered by those regular
+# requests hitting a stale cached object. Revalidation collapsing
+# is currently disabled for Squid instances containing SMP-aware
+# disk or memory caches and for Vary-controlled cached objects.
+#Default:
+# collapsed_forwarding off
+
+# TIMEOUTS
+# -----------------------------------------------------------------------------
+
+# TAG: forward_timeout time-units
+# This parameter specifies how long Squid should at most attempt in
+# finding a forwarding path for the request before giving up.
+#Default:
+# forward_timeout 4 minutes
+
+# TAG: connect_timeout time-units
+# This parameter specifies how long to wait for the TCP connect to
+# the requested server or peer to complete before Squid should
+# attempt to find another path where to forward the request.
+#Default:
+# connect_timeout 1 minute
+
+# TAG: peer_connect_timeout time-units
+# This parameter specifies how long to wait for a pending TCP
+# connection to a peer cache. The default is 30 seconds. You
+# may also set different timeout values for individual neighbors
+# with the 'connect-timeout' option on a 'cache_peer' line.
+#Default:
+# peer_connect_timeout 30 seconds
+
+# TAG: read_timeout time-units
+# Applied on peer server connections.
+#
+# After each successful read(), the timeout will be extended by this
+# amount. If no data is read again after this amount of time,
+# the request is aborted and logged with ERR_READ_TIMEOUT.
+#
+# The default is 15 minutes.
+#Default:
+# read_timeout 15 minutes
+
+# TAG: write_timeout time-units
+# This timeout is tracked for all connections that have data
+# available for writing and are waiting for the socket to become
+# ready. After each successful write, the timeout is extended by
+# the configured amount. If Squid has data to write but the
+# connection is not ready for the configured duration, the
+# transaction associated with the connection is terminated. The
+# default is 15 minutes.
+#Default:
+# write_timeout 15 minutes
+
+# TAG: request_timeout
+# How long to wait for complete HTTP request headers after initial
+# connection establishment.
+#Default:
+# request_timeout 5 minutes
+
+# TAG: client_idle_pconn_timeout
+# How long to wait for the next HTTP request on a persistent
+# client connection after the previous request completes.
+#Default:
+# client_idle_pconn_timeout 2 minutes
+
+# TAG: ftp_client_idle_timeout
+# How long to wait for an FTP request on a connection to Squid ftp_port.
+# Many FTP clients do not deal with idle connection closures well,
+# necessitating a longer default timeout than client_idle_pconn_timeout
+# used for incoming HTTP requests.
+#Default:
+# ftp_client_idle_timeout 30 minutes
+
+# TAG: client_lifetime time-units
+# The maximum amount of time a client (browser) is allowed to
+# remain connected to the cache process. This protects the Cache
+# from having a lot of sockets (and hence file descriptors) tied up
+# in a CLOSE_WAIT state from remote clients that go away without
+# properly shutting down (either because of a network failure or
+# because of a poor client implementation). The default is one
+# day, 1440 minutes.
+#
+# NOTE: The default value is intended to be much larger than any
+# client would ever need to be connected to your cache. You
+# should probably change client_lifetime only as a last resort.
+# If you seem to have many client connections tying up
+# filedescriptors, we recommend first tuning the read_timeout,
+# request_timeout, persistent_request_timeout and quick_abort values.
+#Default:
+# client_lifetime 1 day
+
+# TAG: half_closed_clients
+# Some clients may shutdown the sending side of their TCP
+# connections, while leaving their receiving sides open. Sometimes,
+# Squid can not tell the difference between a half-closed and a
+# fully-closed TCP connection.
+#
+# By default, Squid will immediately close client connections when
+# read(2) returns "no more data to read."
+#
+# Change this option to 'on' and Squid will keep open connections
+# until a read(2) or write(2) on the socket returns an error.
+# This may show some benefits for reverse proxies. But if not
+# it is recommended to leave OFF.
+#Default:
+# half_closed_clients off
+
+# TAG: server_idle_pconn_timeout
+# Timeout for idle persistent connections to servers and other
+# proxies.
+#Default:
+# server_idle_pconn_timeout 1 minute
+
+# TAG: ident_timeout
+# Maximum time to wait for IDENT lookups to complete.
+#
+# If this is too high, and you enabled IDENT lookups from untrusted
+# users, you might be susceptible to denial-of-service by having
+# many ident requests going at once.
+#Default:
+# ident_timeout 10 seconds
+
+# TAG: shutdown_lifetime time-units
+# When SIGTERM or SIGHUP is received, the cache is put into
+# "shutdown pending" mode until all active sockets are closed.
+# This value is the lifetime to set for all open descriptors
+# during shutdown mode. Any active clients after this many
+# seconds will receive a 'timeout' message.
+#Default:
+# shutdown_lifetime 30 seconds
+
+# ADMINISTRATIVE PARAMETERS
+# -----------------------------------------------------------------------------
+
+# TAG: cache_mgr
+# Email-address of local cache manager who will receive
+# mail if the cache dies. The default is "webmaster".
+#Default:
+# cache_mgr webmaster
+
+# TAG: mail_from
+# From: email-address for mail sent when the cache dies.
+# The default is to use 'squid@unique_hostname'.
+#
+# See also: unique_hostname directive.
+#Default:
+# none
+
+# TAG: mail_program
+# Email program used to send mail if the cache dies.
+# The default is "mail". The specified program must comply
+# with the standard Unix mail syntax:
+# mail-program recipient < mailfile
+#
+# Optional command line options can be specified.
+#Default:
+# mail_program mail
+
+# TAG: cache_effective_user
+# If you start Squid as root, it will change its effective/real
+# UID/GID to the user specified below. The default is to change
+# to UID of proxy.
+# see also; cache_effective_group
+#Default:
+# cache_effective_user proxy
+cache_effective_user proxy
+
+# TAG: cache_effective_group
+# Squid sets the GID to the effective user's default group ID
+# (taken from the password file) and supplementary group list
+# from the groups membership.
+#
+# If you want Squid to run with a specific GID regardless of
+# the group memberships of the effective user then set this
+# to the group (or GID) you want Squid to run as. When set
+# all other group privileges of the effective user are ignored
+# and only this GID is effective. If Squid is not started as
+# root the user starting Squid MUST be member of the specified
+# group.
+#
+# This option is not recommended by the Squid Team.
+# Our preference is for administrators to configure a secure
+# user account for squid with UID/GID matching system policies.
+#Default:
+# Use system group memberships of the cache_effective_user account
+
+# TAG: httpd_suppress_version_string on|off
+# Suppress Squid version string info in HTTP headers and HTML error pages.
+#Default:
+# httpd_suppress_version_string off
+
+# TAG: visible_hostname
+# If you want to present a special hostname in error messages, etc,
+# define this. Otherwise, the return value of gethostname()
+# will be used. If you have multiple caches in a cluster and
+# get errors about IP-forwarding you must set them to have individual
+# names with this setting.
+#Default:
+# Automatically detect the system host name
+
+# TAG: unique_hostname
+# If you want to have multiple machines with the same
+# 'visible_hostname' you must give each machine a different
+# 'unique_hostname' so forwarding loops can be detected.
+#Default:
+# Copy the value from visible_hostname
+
+# TAG: hostname_aliases
+# A list of other DNS names your cache has.
+#Default:
+# none
+
+# TAG: umask
+# Minimum umask which should be enforced while the proxy
+# is running, in addition to the umask set at startup.
+#
+# For a traditional octal representation of umasks, start
+# your value with 0.
+#Default:
+# umask 027
+
+# OPTIONS FOR THE CACHE REGISTRATION SERVICE
+# -----------------------------------------------------------------------------
+#
+# This section contains parameters for the (optional) cache
+# announcement service. This service is provided to help
+# cache administrators locate one another in order to join or
+# create cache hierarchies.
+#
+# An 'announcement' message is sent (via UDP) to the registration
+# service by Squid. By default, the announcement message is NOT
+# SENT unless you enable it with 'announce_period' below.
+#
+# The announcement message includes your hostname, plus the
+# following information from this configuration file:
+#
+# http_port
+# icp_port
+# cache_mgr
+#
+# All current information is processed regularly and made
+# available on the Web at http://www.ircache.net/Cache/Tracker/.
+
+# TAG: announce_period
+# This is how frequently to send cache announcements.
+#
+# To enable announcing your cache, just set an announce period.
+#
+# Example:
+# announce_period 1 day
+#Default:
+# Announcement messages disabled.
+
+# TAG: announce_host
+# Set the hostname where announce registration messages will be sent.
+#
+# See also announce_port and announce_file
+#Default:
+# announce_host tracker.ircache.net
+
+# TAG: announce_file
+# The contents of this file will be included in the announce
+# registration messages.
+#Default:
+# none
+
+# TAG: announce_port
+# Set the port where announce registration messages will be sent.
+#
+# See also announce_host and announce_file
+#Default:
+# announce_port 3131
+
+# HTTPD-ACCELERATOR OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: httpd_accel_surrogate_id
+# Surrogates (http://www.esi.org/architecture_spec_1.0.html)
+# need an identification token to allow control targeting. Because
+# a farm of surrogates may all perform the same tasks, they may share
+# an identification token.
+#Default:
+# visible_hostname is used if no specific ID is set.
+
+# TAG: http_accel_surrogate_remote on|off
+# Remote surrogates (such as those in a CDN) honour the header
+# "Surrogate-Control: no-store-remote".
+#
+# Set this to on to have squid behave as a remote surrogate.
+#Default:
+# http_accel_surrogate_remote off
+
+# TAG: esi_parser libxml2|expat|custom
+# ESI markup is not strictly XML compatible. The custom ESI parser
+# will give higher performance, but cannot handle non ASCII character
+# encodings.
+#Default:
+# esi_parser custom
+
+# DELAY POOL PARAMETERS
+# -----------------------------------------------------------------------------
+
+# TAG: delay_pools
+# This represents the number of delay pools to be used. For example,
+# if you have one class 2 delay pool and one class 3 delays pool, you
+# have a total of 2 delay pools.
+#
+# See also delay_parameters, delay_class, delay_access for pool
+# configuration details.
+#Default:
+# delay_pools 0
+
+# TAG: delay_class
+# This defines the class of each delay pool. There must be exactly one
+# delay_class line for each delay pool. For example, to define two
+# delay pools, one of class 2 and one of class 3, the settings above
+# and here would be:
+#
+# Example:
+# delay_pools 4 # 4 delay pools
+# delay_class 1 2 # pool 1 is a class 2 pool
+# delay_class 2 3 # pool 2 is a class 3 pool
+# delay_class 3 4 # pool 3 is a class 4 pool
+# delay_class 4 5 # pool 4 is a class 5 pool
+#
+# The delay pool classes are:
+#
+# class 1 Everything is limited by a single aggregate
+# bucket.
+#
+# class 2 Everything is limited by a single aggregate
+# bucket as well as an "individual" bucket chosen
+# from bits 25 through 32 of the IPv4 address.
+#
+# class 3 Everything is limited by a single aggregate
+# bucket as well as a "network" bucket chosen
+# from bits 17 through 24 of the IP address and a
+# "individual" bucket chosen from bits 17 through
+# 32 of the IPv4 address.
+#
+# class 4 Everything in a class 3 delay pool, with an
+# additional limit on a per user basis. This
+# only takes effect if the username is established
+# in advance - by forcing authentication in your
+# http_access rules.
+#
+# class 5 Requests are grouped according their tag (see
+# external_acl's tag= reply).
+#
+#
+# Each pool also requires a delay_parameters directive to configure the pool size
+# and speed limits used whenever the pool is applied to a request. Along with
+# a set of delay_access directives to determine when it is used.
+#
+# NOTE: If an IP address is a.b.c.d
+# -> bits 25 through 32 are "d"
+# -> bits 17 through 24 are "c"
+# -> bits 17 through 32 are "c * 256 + d"
+#
+# NOTE-2: Due to the use of bitmasks in class 2,3,4 pools they only apply to
+# IPv4 traffic. Class 1 and 5 pools may be used with IPv6 traffic.
+#
+# This clause only supports fast acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#
+# See also delay_parameters and delay_access.
+#Default:
+# none
+
+# TAG: delay_access
+# This is used to determine which delay pool a request falls into.
+#
+# delay_access is sorted per pool and the matching starts with pool 1,
+# then pool 2, ..., and finally pool N. The first delay pool where the
+# request is allowed is selected for the request. If it does not allow
+# the request to any pool then the request is not delayed (default).
+#
+# For example, if you want some_big_clients in delay
+# pool 1 and lotsa_little_clients in delay pool 2:
+#
+# delay_access 1 allow some_big_clients
+# delay_access 1 deny all
+# delay_access 2 allow lotsa_little_clients
+# delay_access 2 deny all
+# delay_access 3 allow authenticated_clients
+#
+# See also delay_parameters and delay_class.
+#
+#Default:
+# Deny using the pool, unless allow rules exist in squid.conf for the pool.
+
+# TAG: delay_parameters
+# This defines the parameters for a delay pool. Each delay pool has
+# a number of "buckets" associated with it, as explained in the
+# description of delay_class.
+#
+# For a class 1 delay pool, the syntax is:
+# delay_class pool 1
+# delay_parameters pool aggregate
+#
+# For a class 2 delay pool:
+# delay_class pool 2
+# delay_parameters pool aggregate individual
+#
+# For a class 3 delay pool:
+# delay_class pool 3
+# delay_parameters pool aggregate network individual
+#
+# For a class 4 delay pool:
+# delay_class pool 4
+# delay_parameters pool aggregate network individual user
+#
+# For a class 5 delay pool:
+# delay_class pool 5
+# delay_parameters pool tagrate
+#
+# The option variables are:
+#
+# pool a pool number - ie, a number between 1 and the
+# number specified in delay_pools as used in
+# delay_class lines.
+#
+# aggregate the speed limit parameters for the aggregate bucket
+# (class 1, 2, 3).
+#
+# individual the speed limit parameters for the individual
+# buckets (class 2, 3).
+#
+# network the speed limit parameters for the network buckets
+# (class 3).
+#
+# user the speed limit parameters for the user buckets
+# (class 4).
+#
+# tagrate the speed limit parameters for the tag buckets
+# (class 5).
+#
+# A pair of delay parameters is written restore/maximum, where restore is
+# the number of bytes (not bits - modem and network speeds are usually
+# quoted in bits) per second placed into the bucket, and maximum is the
+# maximum number of bytes which can be in the bucket at any time.
+#
+# There must be one delay_parameters line for each delay pool.
+#
+#
+# For example, if delay pool number 1 is a class 2 delay pool as in the
+# above example, and is being used to strictly limit each host to 64Kbit/sec
+# (plus overheads), with no overall limit, the line is:
+#
+# delay_parameters 1 none 8000/8000
+#
+# Note that 8 x 8K Byte/sec -> 64K bit/sec.
+#
+# Note that the word 'none' is used to represent no limit.
+#
+#
+# And, if delay pool number 2 is a class 3 delay pool as in the above
+# example, and you want to limit it to a total of 256Kbit/sec (strict limit)
+# with each 8-bit network permitted 64Kbit/sec (strict limit) and each
+# individual host permitted 4800bit/sec with a bucket maximum size of 64Kbits
+# to permit a decent web page to be downloaded at a decent speed
+# (if the network is not being limited due to overuse) but slow down
+# large downloads more significantly:
+#
+# delay_parameters 2 32000/32000 8000/8000 600/8000
+#
+# Note that 8 x 32K Byte/sec -> 256K bit/sec.
+# 8 x 8K Byte/sec -> 64K bit/sec.
+# 8 x 600 Byte/sec -> 4800 bit/sec.
+#
+#
+# Finally, for a class 4 delay pool as in the example - each user will
+# be limited to 128Kbits/sec no matter how many workstations they are logged into.:
+#
+# delay_parameters 4 32000/32000 8000/8000 600/64000 16000/16000
+#
+#
+# See also delay_class and delay_access.
+#
+#Default:
+# none
+
+# TAG: delay_initial_bucket_level (percent, 0-100)
+# The initial bucket percentage is used to determine how much is put
+# in each bucket when squid starts, is reconfigured, or first notices
+# a host accessing it (in class 2 and class 3, individual hosts and
+# networks only have buckets associated with them once they have been
+# "seen" by squid).
+#Default:
+# delay_initial_bucket_level 50
+
+# CLIENT DELAY POOL PARAMETERS
+# -----------------------------------------------------------------------------
+
+# TAG: client_delay_pools
+# This option specifies the number of client delay pools used. It must
+# preceed other client_delay_* options.
+#
+# Example:
+# client_delay_pools 2
+#
+# See also client_delay_parameters and client_delay_access.
+#Default:
+# client_delay_pools 0
+
+# TAG: client_delay_initial_bucket_level (percent, 0-no_limit)
+# This option determines the initial bucket size as a percentage of
+# max_bucket_size from client_delay_parameters. Buckets are created
+# at the time of the "first" connection from the matching IP. Idle
+# buckets are periodically deleted up.
+#
+# You can specify more than 100 percent but note that such "oversized"
+# buckets are not refilled until their size goes down to max_bucket_size
+# from client_delay_parameters.
+#
+# Example:
+# client_delay_initial_bucket_level 50
+#Default:
+# client_delay_initial_bucket_level 50
+
+# TAG: client_delay_parameters
+#
+# This option configures client-side bandwidth limits using the
+# following format:
+#
+# client_delay_parameters pool speed_limit max_bucket_size
+#
+# pool is an integer ID used for client_delay_access matching.
+#
+# speed_limit is bytes added to the bucket per second.
+#
+# max_bucket_size is the maximum size of a bucket, enforced after any
+# speed_limit additions.
+#
+# Please see the delay_parameters option for more information and
+# examples.
+#
+# Example:
+# client_delay_parameters 1 1024 2048
+# client_delay_parameters 2 51200 16384
+#
+# See also client_delay_access.
+#
+#Default:
+# none
+
+# TAG: client_delay_access
+# This option determines the client-side delay pool for the
+# request:
+#
+# client_delay_access pool_ID allow|deny acl_name
+#
+# All client_delay_access options are checked in their pool ID
+# order, starting with pool 1. The first checked pool with allowed
+# request is selected for the request. If no ACL matches or there
+# are no client_delay_access options, the request bandwidth is not
+# limited.
+#
+# The ACL-selected pool is then used to find the
+# client_delay_parameters for the request. Client-side pools are
+# not used to aggregate clients. Clients are always aggregated
+# based on their source IP addresses (one bucket per source IP).
+#
+# This clause only supports fast acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+# Additionally, only the client TCP connection details are available.
+# ACLs testing HTTP properties will not work.
+#
+# Please see delay_access for more examples.
+#
+# Example:
+# client_delay_access 1 allow low_rate_network
+# client_delay_access 2 allow vips_network
+#
+#
+# See also client_delay_parameters and client_delay_pools.
+#Default:
+# Deny use of the pool, unless allow rules exist in squid.conf for the pool.
+
+# WCCPv1 AND WCCPv2 CONFIGURATION OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: wccp_router
+# Use this option to define your WCCP ``home'' router for
+# Squid.
+#
+# wccp_router supports a single WCCP(v1) router
+#
+# wccp2_router supports multiple WCCPv2 routers
+#
+# only one of the two may be used at the same time and defines
+# which version of WCCP to use.
+#Default:
+# WCCP disabled.
+
+# TAG: wccp2_router
+# Use this option to define your WCCP ``home'' router for
+# Squid.
+#
+# wccp_router supports a single WCCP(v1) router
+#
+# wccp2_router supports multiple WCCPv2 routers
+#
+# only one of the two may be used at the same time and defines
+# which version of WCCP to use.
+#Default:
+# WCCPv2 disabled.
+
+# TAG: wccp_version
+# This directive is only relevant if you need to set up WCCP(v1)
+# to some very old and end-of-life Cisco routers. In all other
+# setups it must be left unset or at the default setting.
+# It defines an internal version in the WCCP(v1) protocol,
+# with version 4 being the officially documented protocol.
+#
+# According to some users, Cisco IOS 11.2 and earlier only
+# support WCCP version 3. If you're using that or an earlier
+# version of IOS, you may need to change this value to 3, otherwise
+# do not specify this parameter.
+#Default:
+# wccp_version 4
+
+# TAG: wccp2_rebuild_wait
+# If this is enabled Squid will wait for the cache dir rebuild to finish
+# before sending the first wccp2 HereIAm packet
+#Default:
+# wccp2_rebuild_wait on
+
+# TAG: wccp2_forwarding_method
+# WCCP2 allows the setting of forwarding methods between the
+# router/switch and the cache. Valid values are as follows:
+#
+# gre - GRE encapsulation (forward the packet in a GRE/WCCP tunnel)
+# l2 - L2 redirect (forward the packet using Layer 2/MAC rewriting)
+#
+# Currently (as of IOS 12.4) cisco routers only support GRE.
+# Cisco switches only support the L2 redirect assignment method.
+#Default:
+# wccp2_forwarding_method gre
+
+# TAG: wccp2_return_method
+# WCCP2 allows the setting of return methods between the
+# router/switch and the cache for packets that the cache
+# decides not to handle. Valid values are as follows:
+#
+# gre - GRE encapsulation (forward the packet in a GRE/WCCP tunnel)
+# l2 - L2 redirect (forward the packet using Layer 2/MAC rewriting)
+#
+# Currently (as of IOS 12.4) cisco routers only support GRE.
+# Cisco switches only support the L2 redirect assignment.
+#
+# If the "ip wccp redirect exclude in" command has been
+# enabled on the cache interface, then it is still safe for
+# the proxy server to use a l2 redirect method even if this
+# option is set to GRE.
+#Default:
+# wccp2_return_method gre
+
+# TAG: wccp2_assignment_method
+# WCCP2 allows the setting of methods to assign the WCCP hash
+# Valid values are as follows:
+#
+# hash - Hash assignment
+# mask - Mask assignment
+#
+# As a general rule, cisco routers support the hash assignment method
+# and cisco switches support the mask assignment method.
+#Default:
+# wccp2_assignment_method hash
+
+# TAG: wccp2_service
+# WCCP2 allows for multiple traffic services. There are two
+# types: "standard" and "dynamic". The standard type defines
+# one service id - http (id 0). The dynamic service ids can be from
+# 51 to 255 inclusive. In order to use a dynamic service id
+# one must define the type of traffic to be redirected; this is done
+# using the wccp2_service_info option.
+#
+# The "standard" type does not require a wccp2_service_info option,
+# just specifying the service id will suffice.
+#
+# MD5 service authentication can be enabled by adding
+# "password=<password>" to the end of this service declaration.
+#
+# Examples:
+#
+# wccp2_service standard 0 # for the 'web-cache' standard service
+# wccp2_service dynamic 80 # a dynamic service type which will be
+# # fleshed out with subsequent options.
+# wccp2_service standard 0 password=foo
+#Default:
+# Use the 'web-cache' standard service.
+
+# TAG: wccp2_service_info
+# Dynamic WCCPv2 services require further information to define the
+# traffic you wish to have diverted.
+#
+# The format is:
+#
+# wccp2_service_info <id> protocol=<protocol> flags=<flag>,<flag>..
+# priority=<priority> ports=<port>,<port>..
+#
+# The relevant WCCPv2 flags:
+# + src_ip_hash, dst_ip_hash
+# + source_port_hash, dst_port_hash
+# + src_ip_alt_hash, dst_ip_alt_hash
+# + src_port_alt_hash, dst_port_alt_hash
+# + ports_source
+#
+# The port list can be one to eight entries.
+#
+# Example:
+#
+# wccp2_service_info 80 protocol=tcp flags=src_ip_hash,ports_source
+# priority=240 ports=80
+#
+# Note: the service id must have been defined by a previous
+# 'wccp2_service dynamic <id>' entry.
+#Default:
+# none
+
+# TAG: wccp2_weight
+# Each cache server gets assigned a set of the destination
+# hash proportional to their weight.
+#Default:
+# wccp2_weight 10000
+
+# TAG: wccp_address
+# Use this option if you require WCCPv2 to use a specific
+# interface address.
+#
+# The default behavior is to not bind to any specific address.
+#Default:
+# Address selected by the operating system.
+
+# TAG: wccp2_address
+# Use this option if you require WCCP to use a specific
+# interface address.
+#
+# The default behavior is to not bind to any specific address.
+#Default:
+# Address selected by the operating system.
+
+# PERSISTENT CONNECTION HANDLING
+# -----------------------------------------------------------------------------
+#
+# Also see "pconn_timeout" in the TIMEOUTS section
+
+# TAG: client_persistent_connections
+# Persistent connection support for clients.
+# Squid uses persistent connections (when allowed). You can use
+# this option to disable persistent connections with clients.
+#Default:
+# client_persistent_connections on
+
+# TAG: server_persistent_connections
+# Persistent connection support for servers.
+# Squid uses persistent connections (when allowed). You can use
+# this option to disable persistent connections with servers.
+#Default:
+# server_persistent_connections on
+
+# TAG: persistent_connection_after_error
+# With this directive the use of persistent connections after
+# HTTP errors can be disabled. Useful if you have clients
+# who fail to handle errors on persistent connections proper.
+#Default:
+# persistent_connection_after_error on
+
+# TAG: detect_broken_pconn
+# Some servers have been found to incorrectly signal the use
+# of HTTP/1.0 persistent connections even on replies not
+# compatible, causing significant delays. This server problem
+# has mostly been seen on redirects.
+#
+# By enabling this directive Squid attempts to detect such
+# broken replies and automatically assume the reply is finished
+# after 10 seconds timeout.
+#Default:
+# detect_broken_pconn off
+
+# CACHE DIGEST OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: digest_generation
+# This controls whether the server will generate a Cache Digest
+# of its contents. By default, Cache Digest generation is
+# enabled if Squid is compiled with --enable-cache-digests defined.
+#Default:
+# digest_generation on
+
+# TAG: digest_bits_per_entry
+# This is the number of bits of the server's Cache Digest which
+# will be associated with the Digest entry for a given HTTP
+# Method and URL (public key) combination. The default is 5.
+#Default:
+# digest_bits_per_entry 5
+
+# TAG: digest_rebuild_period (seconds)
+# This is the wait time between Cache Digest rebuilds.
+#Default:
+# digest_rebuild_period 1 hour
+
+# TAG: digest_rewrite_period (seconds)
+# This is the wait time between Cache Digest writes to
+# disk.
+#Default:
+# digest_rewrite_period 1 hour
+
+# TAG: digest_swapout_chunk_size (bytes)
+# This is the number of bytes of the Cache Digest to write to
+# disk at a time. It defaults to 4096 bytes (4KB), the Squid
+# default swap page.
+#Default:
+# digest_swapout_chunk_size 4096 bytes
+
+# TAG: digest_rebuild_chunk_percentage (percent, 0-100)
+# This is the percentage of the Cache Digest to be scanned at a
+# time. By default it is set to 10% of the Cache Digest.
+#Default:
+# digest_rebuild_chunk_percentage 10
+
+# SNMP OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: snmp_port
+# The port number where Squid listens for SNMP requests. To enable
+# SNMP support set this to a suitable port number. Port number
+# 3401 is often used for the Squid SNMP agent. By default it's
+# set to "0" (disabled)
+#
+# Example:
+# snmp_port 3401
+#Default:
+# SNMP disabled.
+
+# TAG: snmp_access
+# Allowing or denying access to the SNMP port.
+#
+# All access to the agent is denied by default.
+# usage:
+#
+# snmp_access allow|deny [!]aclname ...
+#
+# This clause only supports fast acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#
+#Example:
+# snmp_access allow snmppublic localhost
+# snmp_access deny all
+#Default:
+# Deny, unless rules exist in squid.conf.
+
+# TAG: snmp_incoming_address
+# Just like 'udp_incoming_address', but for the SNMP port.
+#
+# snmp_incoming_address is used for the SNMP socket receiving
+# messages from SNMP agents.
+#
+# The default snmp_incoming_address is to listen on all
+# available network interfaces.
+#Default:
+# Accept SNMP packets from all machine interfaces.
+
+# TAG: snmp_outgoing_address
+# Just like 'udp_outgoing_address', but for the SNMP port.
+#
+# snmp_outgoing_address is used for SNMP packets returned to SNMP
+# agents.
+#
+# If snmp_outgoing_address is not set it will use the same socket
+# as snmp_incoming_address. Only change this if you want to have
+# SNMP replies sent using another address than where this Squid
+# listens for SNMP queries.
+#
+# NOTE, snmp_incoming_address and snmp_outgoing_address can not have
+# the same value since they both use the same port.
+#Default:
+# Use snmp_incoming_address or an address selected by the operating system.
+
+# ICP OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: icp_port
+# The port number where Squid sends and receives ICP queries to
+# and from neighbor caches. The standard UDP port for ICP is 3130.
+#
+# Example:
+# icp_port 3130
+#Default:
+# ICP disabled.
+
+# TAG: htcp_port
+# The port number where Squid sends and receives HTCP queries to
+# and from neighbor caches. To turn it on you want to set it to
+# 4827.
+#
+# Example:
+# htcp_port 4827
+#Default:
+# HTCP disabled.
+
+# TAG: log_icp_queries on|off
+# If set, ICP queries are logged to access.log. You may wish
+# do disable this if your ICP load is VERY high to speed things
+# up or to simplify log analysis.
+#Default:
+# log_icp_queries on
+
+# TAG: udp_incoming_address
+# udp_incoming_address is used for UDP packets received from other
+# caches.
+#
+# The default behavior is to not bind to any specific address.
+#
+# Only change this if you want to have all UDP queries received on
+# a specific interface/address.
+#
+# NOTE: udp_incoming_address is used by the ICP, HTCP, and DNS
+# modules. Altering it will affect all of them in the same manner.
+#
+# see also; udp_outgoing_address
+#
+# NOTE, udp_incoming_address and udp_outgoing_address can not
+# have the same value since they both use the same port.
+#Default:
+# Accept packets from all machine interfaces.
+
+# TAG: udp_outgoing_address
+# udp_outgoing_address is used for UDP packets sent out to other
+# caches.
+#
+# The default behavior is to not bind to any specific address.
+#
+# Instead it will use the same socket as udp_incoming_address.
+# Only change this if you want to have UDP queries sent using another
+# address than where this Squid listens for UDP queries from other
+# caches.
+#
+# NOTE: udp_outgoing_address is used by the ICP, HTCP, and DNS
+# modules. Altering it will affect all of them in the same manner.
+#
+# see also; udp_incoming_address
+#
+# NOTE, udp_incoming_address and udp_outgoing_address can not
+# have the same value since they both use the same port.
+#Default:
+# Use udp_incoming_address or an address selected by the operating system.
+
+# TAG: icp_hit_stale on|off
+# If you want to return ICP_HIT for stale cache objects, set this
+# option to 'on'. If you have sibling relationships with caches
+# in other administrative domains, this should be 'off'. If you only
+# have sibling relationships with caches under your control,
+# it is probably okay to set this to 'on'.
+# If set to 'on', your siblings should use the option "allow-miss"
+# on their cache_peer lines for connecting to you.
+#Default:
+# icp_hit_stale off
+
+# TAG: minimum_direct_hops
+# If using the ICMP pinging stuff, do direct fetches for sites
+# which are no more than this many hops away.
+#Default:
+# minimum_direct_hops 4
+
+# TAG: minimum_direct_rtt (msec)
+# If using the ICMP pinging stuff, do direct fetches for sites
+# which are no more than this many rtt milliseconds away.
+#Default:
+# minimum_direct_rtt 400
+
+# TAG: netdb_low
+# The low water mark for the ICMP measurement database.
+#
+# Note: high watermark controlled by netdb_high directive.
+#
+# These watermarks are counts, not percents. The defaults are
+# (low) 900 and (high) 1000. When the high water mark is
+# reached, database entries will be deleted until the low
+# mark is reached.
+#Default:
+# netdb_low 900
+
+# TAG: netdb_high
+# The high water mark for the ICMP measurement database.
+#
+# Note: low watermark controlled by netdb_low directive.
+#
+# These watermarks are counts, not percents. The defaults are
+# (low) 900 and (high) 1000. When the high water mark is
+# reached, database entries will be deleted until the low
+# mark is reached.
+#Default:
+# netdb_high 1000
+
+# TAG: netdb_ping_period
+# The minimum period for measuring a site. There will be at
+# least this much delay between successive pings to the same
+# network. The default is five minutes.
+#Default:
+# netdb_ping_period 5 minutes
+
+# TAG: query_icmp on|off
+# If you want to ask your peers to include ICMP data in their ICP
+# replies, enable this option.
+#
+# If your peer has configured Squid (during compilation) with
+# '--enable-icmp' that peer will send ICMP pings to origin server
+# sites of the URLs it receives. If you enable this option the
+# ICP replies from that peer will include the ICMP data (if available).
+# Then, when choosing a parent cache, Squid will choose the parent with
+# the minimal RTT to the origin server. When this happens, the
+# hierarchy field of the access.log will be
+# "CLOSEST_PARENT_MISS". This option is off by default.
+#Default:
+# query_icmp off
+
+# TAG: test_reachability on|off
+# When this is 'on', ICP MISS replies will be ICP_MISS_NOFETCH
+# instead of ICP_MISS if the target host is NOT in the ICMP
+# database, or has a zero RTT.
+#Default:
+# test_reachability off
+
+# TAG: icp_query_timeout (msec)
+# Normally Squid will automatically determine an optimal ICP
+# query timeout value based on the round-trip-time of recent ICP
+# queries. If you want to override the value determined by
+# Squid, set this 'icp_query_timeout' to a non-zero value. This
+# value is specified in MILLISECONDS, so, to use a 2-second
+# timeout (the old default), you would write:
+#
+# icp_query_timeout 2000
+#Default:
+# Dynamic detection.
+
+# TAG: maximum_icp_query_timeout (msec)
+# Normally the ICP query timeout is determined dynamically. But
+# sometimes it can lead to very large values (say 5 seconds).
+# Use this option to put an upper limit on the dynamic timeout
+# value. Do NOT use this option to always use a fixed (instead
+# of a dynamic) timeout value. To set a fixed timeout see the
+# 'icp_query_timeout' directive.
+#Default:
+# maximum_icp_query_timeout 2000
+
+# TAG: minimum_icp_query_timeout (msec)
+# Normally the ICP query timeout is determined dynamically. But
+# sometimes it can lead to very small timeouts, even lower than
+# the normal latency variance on your link due to traffic.
+# Use this option to put an lower limit on the dynamic timeout
+# value. Do NOT use this option to always use a fixed (instead
+# of a dynamic) timeout value. To set a fixed timeout see the
+# 'icp_query_timeout' directive.
+#Default:
+# minimum_icp_query_timeout 5
+
+# TAG: background_ping_rate time-units
+# Controls how often the ICP pings are sent to siblings that
+# have background-ping set.
+#Default:
+# background_ping_rate 10 seconds
+
+# MULTICAST ICP OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: mcast_groups
+# This tag specifies a list of multicast groups which your server
+# should join to receive multicasted ICP queries.
+#
+# NOTE! Be very careful what you put here! Be sure you
+# understand the difference between an ICP _query_ and an ICP
+# _reply_. This option is to be set only if you want to RECEIVE
+# multicast queries. Do NOT set this option to SEND multicast
+# ICP (use cache_peer for that). ICP replies are always sent via
+# unicast, so this option does not affect whether or not you will
+# receive replies from multicast group members.
+#
+# You must be very careful to NOT use a multicast address which
+# is already in use by another group of caches.
+#
+# If you are unsure about multicast, please read the Multicast
+# chapter in the Squid FAQ (http://www.squid-cache.org/FAQ/).
+#
+# Usage: mcast_groups 239.128.16.128 224.0.1.20
+#
+# By default, Squid doesn't listen on any multicast groups.
+#Default:
+# none
+
+# TAG: mcast_miss_addr
+# Note: This option is only available if Squid is rebuilt with the
+# -DMULTICAST_MISS_STREAM define
+#
+# If you enable this option, every "cache miss" URL will
+# be sent out on the specified multicast address.
+#
+# Do not enable this option unless you are are absolutely
+# certain you understand what you are doing.
+#Default:
+# disabled.
+
+# TAG: mcast_miss_ttl
+# Note: This option is only available if Squid is rebuilt with the
+# -DMULTICAST_MISS_STREAM define
+#
+# This is the time-to-live value for packets multicasted
+# when multicasting off cache miss URLs is enabled. By
+# default this is set to 'site scope', i.e. 16.
+#Default:
+# mcast_miss_ttl 16
+
+# TAG: mcast_miss_port
+# Note: This option is only available if Squid is rebuilt with the
+# -DMULTICAST_MISS_STREAM define
+#
+# This is the port number to be used in conjunction with
+# 'mcast_miss_addr'.
+#Default:
+# mcast_miss_port 3135
+
+# TAG: mcast_miss_encode_key
+# Note: This option is only available if Squid is rebuilt with the
+# -DMULTICAST_MISS_STREAM define
+#
+# The URLs that are sent in the multicast miss stream are
+# encrypted. This is the encryption key.
+#Default:
+# mcast_miss_encode_key XXXXXXXXXXXXXXXX
+
+# TAG: mcast_icp_query_timeout (msec)
+# For multicast peers, Squid regularly sends out ICP "probes" to
+# count how many other peers are listening on the given multicast
+# address. This value specifies how long Squid should wait to
+# count all the replies. The default is 2000 msec, or 2
+# seconds.
+#Default:
+# mcast_icp_query_timeout 2000
+
+# INTERNAL ICON OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: icon_directory
+# Where the icons are stored. These are normally kept in
+# /usr/share/squid/icons
+#Default:
+# icon_directory /usr/share/squid/icons
+
+# TAG: global_internal_static
+# This directive controls is Squid should intercept all requests for
+# /squid-internal-static/ no matter which host the URL is requesting
+# (default on setting), or if nothing special should be done for
+# such URLs (off setting). The purpose of this directive is to make
+# icons etc work better in complex cache hierarchies where it may
+# not always be possible for all corners in the cache mesh to reach
+# the server generating a directory listing.
+#Default:
+# global_internal_static on
+
+# TAG: short_icon_urls
+# If this is enabled Squid will use short URLs for icons.
+# If disabled it will revert to the old behavior of including
+# it's own name and port in the URL.
+#
+# If you run a complex cache hierarchy with a mix of Squid and
+# other proxies you may need to disable this directive.
+#Default:
+# short_icon_urls on
+
+# ERROR PAGE OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: error_directory
+# If you wish to create your own versions of the default
+# error files to customize them to suit your company copy
+# the error/template files to another directory and point
+# this tag at them.
+#
+# WARNING: This option will disable multi-language support
+# on error pages if used.
+#
+# The squid developers are interested in making squid available in
+# a wide variety of languages. If you are making translations for a
+# language that Squid does not currently provide please consider
+# contributing your translation back to the project.
+# http://wiki.squid-cache.org/Translations
+#
+# The squid developers working on translations are happy to supply drop-in
+# translated error files in exchange for any new language contributions.
+#Default:
+# Send error pages in the clients preferred language
+
+# TAG: error_default_language
+# Set the default language which squid will send error pages in
+# if no existing translation matches the clients language
+# preferences.
+#
+# If unset (default) generic English will be used.
+#
+# The squid developers are interested in making squid available in
+# a wide variety of languages. If you are interested in making
+# translations for any language see the squid wiki for details.
+# http://wiki.squid-cache.org/Translations
+#Default:
+# Generate English language pages.
+
+# TAG: error_log_languages
+# Log to cache.log what languages users are attempting to
+# auto-negotiate for translations.
+#
+# Successful negotiations are not logged. Only failures
+# have meaning to indicate that Squid may need an upgrade
+# of its error page translations.
+#Default:
+# error_log_languages on
+
+# TAG: err_page_stylesheet
+# CSS Stylesheet to pattern the display of Squid default error pages.
+#
+# For information on CSS see http://www.w3.org/Style/CSS/
+#Default:
+# err_page_stylesheet /etc/squid/errorpage.css
+
+# TAG: err_html_text
+# HTML text to include in error messages. Make this a "mailto"
+# URL to your admin address, or maybe just a link to your
+# organizations Web page.
+#
+# To include this in your error messages, you must rewrite
+# the error template files (found in the "errors" directory).
+# Wherever you want the 'err_html_text' line to appear,
+# insert a %L tag in the error template file.
+#Default:
+# none
+
+# TAG: email_err_data on|off
+# If enabled, information about the occurred error will be
+# included in the mailto links of the ERR pages (if %W is set)
+# so that the email body contains the data.
+# Syntax is <A HREF="mailto:%w%W">%w</A>
+#Default:
+# email_err_data on
+
+# TAG: deny_info
+# Usage: deny_info err_page_name acl
+# or deny_info http://... acl
+# or deny_info TCP_RESET acl
+#
+# This can be used to return a ERR_ page for requests which
+# do not pass the 'http_access' rules. Squid remembers the last
+# acl it evaluated in http_access, and if a 'deny_info' line exists
+# for that ACL Squid returns a corresponding error page.
+#
+# The acl is typically the last acl on the http_access deny line which
+# denied access. The exceptions to this rule are:
+# - When Squid needs to request authentication credentials. It's then
+# the first authentication related acl encountered
+# - When none of the http_access lines matches. It's then the last
+# acl processed on the last http_access line.
+# - When the decision to deny access was made by an adaptation service,
+# the acl name is the corresponding eCAP or ICAP service_name.
+#
+# NP: If providing your own custom error pages with error_directory
+# you may also specify them by your custom file name:
+# Example: deny_info ERR_CUSTOM_ACCESS_DENIED bad_guys
+#
+# By defaut Squid will send "403 Forbidden". A different 4xx or 5xx
+# may be specified by prefixing the file name with the code and a colon.
+# e.g. 404:ERR_CUSTOM_ACCESS_DENIED
+#
+# Alternatively you can tell Squid to reset the TCP connection
+# by specifying TCP_RESET.
+#
+# Or you can specify an error URL or URL pattern. The browsers will
+# get redirected to the specified URL after formatting tags have
+# been replaced. Redirect will be done with 302 or 307 according to
+# HTTP/1.1 specs. A different 3xx code may be specified by prefixing
+# the URL. e.g. 303:http://example.com/
+#
+# URL FORMAT TAGS:
+# %a - username (if available. Password NOT included)
+# %B - FTP path URL
+# %e - Error number
+# %E - Error description
+# %h - Squid hostname
+# %H - Request domain name
+# %i - Client IP Address
+# %M - Request Method
+# %o - Message result from external ACL helper
+# %p - Request Port number
+# %P - Request Protocol name
+# %R - Request URL path
+# %T - Timestamp in RFC 1123 format
+# %U - Full canonical URL from client
+# (HTTPS URLs terminate with *)
+# %u - Full canonical URL from client
+# %w - Admin email from squid.conf
+# %x - Error name
+# %% - Literal percent (%) code
+#
+#Default:
+# none
+
+# OPTIONS INFLUENCING REQUEST FORWARDING
+# -----------------------------------------------------------------------------
+
+# TAG: nonhierarchical_direct
+# By default, Squid will send any non-hierarchical requests
+# (not cacheable request type) direct to origin servers.
+#
+# When this is set to "off", Squid will prefer to send these
+# requests to parents.
+#
+# Note that in most configurations, by turning this off you will only
+# add latency to these request without any improvement in global hit
+# ratio.
+#
+# This option only sets a preference. If the parent is unavailable a
+# direct connection to the origin server may still be attempted. To
+# completely prevent direct connections use never_direct.
+#Default:
+# nonhierarchical_direct on
+
+# TAG: prefer_direct
+# Normally Squid tries to use parents for most requests. If you for some
+# reason like it to first try going direct and only use a parent if
+# going direct fails set this to on.
+#
+# By combining nonhierarchical_direct off and prefer_direct on you
+# can set up Squid to use a parent as a backup path if going direct
+# fails.
+#
+# Note: If you want Squid to use parents for all requests see
+# the never_direct directive. prefer_direct only modifies how Squid
+# acts on cacheable requests.
+#Default:
+# prefer_direct off
+
+# TAG: cache_miss_revalidate on|off
+# RFC 7232 defines a conditional request mechanism to prevent
+# response objects being unnecessarily transferred over the network.
+# If that mechanism is used by the client and a cache MISS occurs
+# it can prevent new cache entries being created.
+#
+# This option determines whether Squid on cache MISS will pass the
+# client revalidation request to the server or tries to fetch new
+# content for caching. It can be useful while the cache is mostly
+# empty to more quickly have the cache populated by generating
+# non-conditional GETs.
+#
+# When set to 'on' (default), Squid will pass all client If-* headers
+# to the server. This permits server responses without a cacheable
+# payload to be delivered and on MISS no new cache entry is created.
+#
+# When set to 'off' and if the request is cacheable, Squid will
+# remove the clients If-Modified-Since and If-None-Match headers from
+# the request sent to the server. This requests a 200 status response
+# from the server to create a new cache entry with.
+#Default:
+# cache_miss_revalidate on
+
+# TAG: always_direct
+# Usage: always_direct allow|deny [!]aclname ...
+#
+# Here you can use ACL elements to specify requests which should
+# ALWAYS be forwarded by Squid to the origin servers without using
+# any peers. For example, to always directly forward requests for
+# local servers ignoring any parents or siblings you may have use
+# something like:
+#
+# acl local-servers dstdomain my.domain.net
+# always_direct allow local-servers
+#
+# To always forward FTP requests directly, use
+#
+# acl FTP proto FTP
+# always_direct allow FTP
+#
+# NOTE: There is a similar, but opposite option named
+# 'never_direct'. You need to be aware that "always_direct deny
+# foo" is NOT the same thing as "never_direct allow foo". You
+# may need to use a deny rule to exclude a more-specific case of
+# some other rule. Example:
+#
+# acl local-external dstdomain external.foo.net
+# acl local-servers dstdomain .foo.net
+# always_direct deny local-external
+# always_direct allow local-servers
+#
+# NOTE: If your goal is to make the client forward the request
+# directly to the origin server bypassing Squid then this needs
+# to be done in the client configuration. Squid configuration
+# can only tell Squid how Squid should fetch the object.
+#
+# NOTE: This directive is not related to caching. The replies
+# is cached as usual even if you use always_direct. To not cache
+# the replies see the 'cache' directive.
+#
+# This clause supports both fast and slow acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#Default:
+# Prevent any cache_peer being used for this request.
+
+# TAG: never_direct
+# Usage: never_direct allow|deny [!]aclname ...
+#
+# never_direct is the opposite of always_direct. Please read
+# the description for always_direct if you have not already.
+#
+# With 'never_direct' you can use ACL elements to specify
+# requests which should NEVER be forwarded directly to origin
+# servers. For example, to force the use of a proxy for all
+# requests, except those in your local domain use something like:
+#
+# acl local-servers dstdomain .foo.net
+# never_direct deny local-servers
+# never_direct allow all
+#
+# or if Squid is inside a firewall and there are local intranet
+# servers inside the firewall use something like:
+#
+# acl local-intranet dstdomain .foo.net
+# acl local-external dstdomain external.foo.net
+# always_direct deny local-external
+# always_direct allow local-intranet
+# never_direct allow all
+#
+# This clause supports both fast and slow acl types.
+# See http://wiki.squid-cache.org/SquidFaq/SquidAcl for details.
+#Default:
+# Allow DNS results to be used for this request.
+
+# ADVANCED NETWORKING OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: incoming_udp_average
+# Heavy voodoo here. I can't even believe you are reading this.
+# Are you crazy? Don't even think about adjusting these unless
+# you understand the algorithms in comm_select.c first!
+#Default:
+# incoming_udp_average 6
+
+# TAG: incoming_tcp_average
+# Heavy voodoo here. I can't even believe you are reading this.
+# Are you crazy? Don't even think about adjusting these unless
+# you understand the algorithms in comm_select.c first!
+#Default:
+# incoming_tcp_average 4
+
+# TAG: incoming_dns_average
+# Heavy voodoo here. I can't even believe you are reading this.
+# Are you crazy? Don't even think about adjusting these unless
+# you understand the algorithms in comm_select.c first!
+#Default:
+# incoming_dns_average 4
+
+# TAG: min_udp_poll_cnt
+# Heavy voodoo here. I can't even believe you are reading this.
+# Are you crazy? Don't even think about adjusting these unless
+# you understand the algorithms in comm_select.c first!
+#Default:
+# min_udp_poll_cnt 8
+
+# TAG: min_dns_poll_cnt
+# Heavy voodoo here. I can't even believe you are reading this.
+# Are you crazy? Don't even think about adjusting these unless
+# you understand the algorithms in comm_select.c first!
+#Default:
+# min_dns_poll_cnt 8
+
+# TAG: min_tcp_poll_cnt
+# Heavy voodoo here. I can't even believe you are reading this.
+# Are you crazy? Don't even think about adjusting these unless
+# you understand the algorithms in comm_select.c first!
+#Default:
+# min_tcp_poll_cnt 8
+
+# TAG: accept_filter
+# FreeBSD:
+#
+# The name of an accept(2) filter to install on Squid's
+# listen socket(s). This feature is perhaps specific to
+# FreeBSD and requires support in the kernel.
+#
+# The 'httpready' filter delays delivering new connections
+# to Squid until a full HTTP request has been received.
+# See the accf_http(9) man page for details.
+#
+# The 'dataready' filter delays delivering new connections
+# to Squid until there is some data to process.
+# See the accf_dataready(9) man page for details.
+#
+# Linux:
+#
+# The 'data' filter delays delivering of new connections
+# to Squid until there is some data to process by TCP_ACCEPT_DEFER.
+# You may optionally specify a number of seconds to wait by
+# 'data=N' where N is the number of seconds. Defaults to 30
+# if not specified. See the tcp(7) man page for details.
+#EXAMPLE:
+## FreeBSD
+#accept_filter httpready
+## Linux
+#accept_filter data
+#Default:
+# none
+
+# TAG: client_ip_max_connections
+# Set an absolute limit on the number of connections a single
+# client IP can use. Any more than this and Squid will begin to drop
+# new connections from the client until it closes some links.
+#
+# Note that this is a global limit. It affects all HTTP, HTCP, Gopher and FTP
+# connections from the client. For finer control use the ACL access controls.
+#
+# Requires client_db to be enabled (the default).
+#
+# WARNING: This may noticably slow down traffic received via external proxies
+# or NAT devices and cause them to rebound error messages back to their clients.
+#Default:
+# No limit.
+
+# TAG: tcp_recv_bufsize (bytes)
+# Size of receive buffer to set for TCP sockets. Probably just
+# as easy to change your kernel's default.
+# Omit from squid.conf to use the default buffer size.
+#Default:
+# Use operating system TCP defaults.
+
+# ICAP OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: icap_enable on|off
+# If you want to enable the ICAP module support, set this to on.
+#Default:
+# icap_enable off
+
+# TAG: icap_connect_timeout
+# This parameter specifies how long to wait for the TCP connect to
+# the requested ICAP server to complete before giving up and either
+# terminating the HTTP transaction or bypassing the failure.
+#
+# The default for optional services is peer_connect_timeout.
+# The default for essential services is connect_timeout.
+# If this option is explicitly set, its value applies to all services.
+#Default:
+# none
+
+# TAG: icap_io_timeout time-units
+# This parameter specifies how long to wait for an I/O activity on
+# an established, active ICAP connection before giving up and
+# either terminating the HTTP transaction or bypassing the
+# failure.
+#Default:
+# Use read_timeout.
+
+# TAG: icap_service_failure_limit limit [in memory-depth time-units]
+# The limit specifies the number of failures that Squid tolerates
+# when establishing a new TCP connection with an ICAP service. If
+# the number of failures exceeds the limit, the ICAP service is
+# not used for new ICAP requests until it is time to refresh its
+# OPTIONS.
+#
+# A negative value disables the limit. Without the limit, an ICAP
+# service will not be considered down due to connectivity failures
+# between ICAP OPTIONS requests.
+#
+# Squid forgets ICAP service failures older than the specified
+# value of memory-depth. The memory fading algorithm
+# is approximate because Squid does not remember individual
+# errors but groups them instead, splitting the option
+# value into ten time slots of equal length.
+#
+# When memory-depth is 0 and by default this option has no
+# effect on service failure expiration.
+#
+# Squid always forgets failures when updating service settings
+# using an ICAP OPTIONS transaction, regardless of this option
+# setting.
+#
+# For example,
+# # suspend service usage after 10 failures in 5 seconds:
+# icap_service_failure_limit 10 in 5 seconds
+#Default:
+# icap_service_failure_limit 10
+
+# TAG: icap_service_revival_delay
+# The delay specifies the number of seconds to wait after an ICAP
+# OPTIONS request failure before requesting the options again. The
+# failed ICAP service is considered "down" until fresh OPTIONS are
+# fetched.
+#
+# The actual delay cannot be smaller than the hardcoded minimum
+# delay of 30 seconds.
+#Default:
+# icap_service_revival_delay 180
+
+# TAG: icap_preview_enable on|off
+# The ICAP Preview feature allows the ICAP server to handle the
+# HTTP message by looking only at the beginning of the message body
+# or even without receiving the body at all. In some environments,
+# previews greatly speedup ICAP processing.
+#
+# During an ICAP OPTIONS transaction, the server may tell Squid what
+# HTTP messages should be previewed and how big the preview should be.
+# Squid will not use Preview if the server did not request one.
+#
+# To disable ICAP Preview for all ICAP services, regardless of
+# individual ICAP server OPTIONS responses, set this option to "off".
+#Example:
+#icap_preview_enable off
+#Default:
+# icap_preview_enable on
+
+# TAG: icap_preview_size
+# The default size of preview data to be sent to the ICAP server.
+# This value might be overwritten on a per server basis by OPTIONS requests.
+#Default:
+# No preview sent.
+
+# TAG: icap_206_enable on|off
+# 206 (Partial Content) responses is an ICAP extension that allows the
+# ICAP agents to optionally combine adapted and original HTTP message
+# content. The decision to combine is postponed until the end of the
+# ICAP response. Squid supports Partial Content extension by default.
+#
+# Activation of the Partial Content extension is negotiated with each
+# ICAP service during OPTIONS exchange. Most ICAP servers should handle
+# negotation correctly even if they do not support the extension, but
+# some might fail. To disable Partial Content support for all ICAP
+# services and to avoid any negotiation, set this option to "off".
+#
+# Example:
+# icap_206_enable off
+#Default:
+# icap_206_enable on
+
+# TAG: icap_default_options_ttl
+# The default TTL value for ICAP OPTIONS responses that don't have
+# an Options-TTL header.
+#Default:
+# icap_default_options_ttl 60
+
+# TAG: icap_persistent_connections on|off
+# Whether or not Squid should use persistent connections to
+# an ICAP server.
+#Default:
+# icap_persistent_connections on
+
+# TAG: adaptation_send_client_ip on|off
+# If enabled, Squid shares HTTP client IP information with adaptation
+# services. For ICAP, Squid adds the X-Client-IP header to ICAP requests.
+# For eCAP, Squid sets the libecap::metaClientIp transaction option.
+#
+# See also: adaptation_uses_indirect_client
+#Default:
+# adaptation_send_client_ip off
+
+# TAG: adaptation_send_username on|off
+# This sends authenticated HTTP client username (if available) to
+# the adaptation service.
+#
+# For ICAP, the username value is encoded based on the
+# icap_client_username_encode option and is sent using the header
+# specified by the icap_client_username_header option.
+#Default:
+# adaptation_send_username off
+
+# TAG: icap_client_username_header
+# ICAP request header name to use for adaptation_send_username.
+#Default:
+# icap_client_username_header X-Client-Username
+
+# TAG: icap_client_username_encode on|off
+# Whether to base64 encode the authenticated client username.
+#Default:
+# icap_client_username_encode off
+
+# TAG: icap_service
+# Defines a single ICAP service using the following format:
+#
+# icap_service id vectoring_point uri [option ...]
+#
+# id: ID
+# an opaque identifier or name which is used to direct traffic to
+# this specific service. Must be unique among all adaptation
+# services in squid.conf.
+#
+# vectoring_point: reqmod_precache|reqmod_postcache|respmod_precache|respmod_postcache
+# This specifies at which point of transaction processing the
+# ICAP service should be activated. *_postcache vectoring points
+# are not yet supported.
+#
+# uri: icap://servername:port/servicepath
+# ICAP server and service location.
+#
+# ICAP does not allow a single service to handle both REQMOD and RESPMOD
+# transactions. Squid does not enforce that requirement. You can specify
+# services with the same service_url and different vectoring_points. You
+# can even specify multiple identical services as long as their
+# service_names differ.
+#
+# To activate a service, use the adaptation_access directive. To group
+# services, use adaptation_service_chain and adaptation_service_set.
+#
+# Service options are separated by white space. ICAP services support
+# the following name=value options:
+#
+# bypass=on|off|1|0
+# If set to 'on' or '1', the ICAP service is treated as
+# optional. If the service cannot be reached or malfunctions,
+# Squid will try to ignore any errors and process the message as
+# if the service was not enabled. No all ICAP errors can be
+# bypassed. If set to 0, the ICAP service is treated as
+# essential and all ICAP errors will result in an error page
+# returned to the HTTP client.
+#
+# Bypass is off by default: services are treated as essential.
+#
+# routing=on|off|1|0
+# If set to 'on' or '1', the ICAP service is allowed to
+# dynamically change the current message adaptation plan by
+# returning a chain of services to be used next. The services
+# are specified using the X-Next-Services ICAP response header
+# value, formatted as a comma-separated list of service names.
+# Each named service should be configured in squid.conf. Other
+# services are ignored. An empty X-Next-Services value results
+# in an empty plan which ends the current adaptation.
+#
+# Dynamic adaptation plan may cross or cover multiple supported
+# vectoring points in their natural processing order.
+#
+# Routing is not allowed by default: the ICAP X-Next-Services
+# response header is ignored.
+#
+# ipv6=on|off
+# Only has effect on split-stack systems. The default on those systems
+# is to use IPv4-only connections. When set to 'on' this option will
+# make Squid use IPv6-only connections to contact this ICAP service.
+#
+# on-overload=block|bypass|wait|force
+# If the service Max-Connections limit has been reached, do
+# one of the following for each new ICAP transaction:
+# * block: send an HTTP error response to the client
+# * bypass: ignore the "over-connected" ICAP service
+# * wait: wait (in a FIFO queue) for an ICAP connection slot
+# * force: proceed, ignoring the Max-Connections limit
+#
+# In SMP mode with N workers, each worker assumes the service
+# connection limit is Max-Connections/N, even though not all
+# workers may use a given service.
+#
+# The default value is "bypass" if service is bypassable,
+# otherwise it is set to "wait".
+#
+#
+# max-conn=number
+# Use the given number as the Max-Connections limit, regardless
+# of the Max-Connections value given by the service, if any.
+#
+# Older icap_service format without optional named parameters is
+# deprecated but supported for backward compatibility.
+#
+#Example:
+#icap_service svcBlocker reqmod_precache icap://icap1.mydomain.net:1344/reqmod bypass=0
+#icap_service svcLogger reqmod_precache icap://icap2.mydomain.net:1344/respmod routing=on
+#Default:
+# none
+
+# TAG: icap_class
+# This deprecated option was documented to define an ICAP service
+# chain, even though it actually defined a set of similar, redundant
+# services, and the chains were not supported.
+#
+# To define a set of redundant services, please use the
+# adaptation_service_set directive. For service chains, use
+# adaptation_service_chain.
+#Default:
+# none
+
+# TAG: icap_access
+# This option is deprecated. Please use adaptation_access, which
+# has the same ICAP functionality, but comes with better
+# documentation, and eCAP support.
+#Default:
+# none
+
+# eCAP OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: ecap_enable on|off
+# Controls whether eCAP support is enabled.
+#Default:
+# ecap_enable off
+
+# TAG: ecap_service
+# Defines a single eCAP service
+#
+# ecap_service id vectoring_point uri [option ...]
+#
+# id: ID
+# an opaque identifier or name which is used to direct traffic to
+# this specific service. Must be unique among all adaptation
+# services in squid.conf.
+#
+# vectoring_point: reqmod_precache|reqmod_postcache|respmod_precache|respmod_postcache
+# This specifies at which point of transaction processing the
+# eCAP service should be activated. *_postcache vectoring points
+# are not yet supported.
+#
+# uri: ecap://vendor/service_name?custom&cgi=style&parameters=optional
+# Squid uses the eCAP service URI to match this configuration
+# line with one of the dynamically loaded services. Each loaded
+# eCAP service must have a unique URI. Obtain the right URI from
+# the service provider.
+#
+# To activate a service, use the adaptation_access directive. To group
+# services, use adaptation_service_chain and adaptation_service_set.
+#
+# Service options are separated by white space. eCAP services support
+# the following name=value options:
+#
+# bypass=on|off|1|0
+# If set to 'on' or '1', the eCAP service is treated as optional.
+# If the service cannot be reached or malfunctions, Squid will try
+# to ignore any errors and process the message as if the service
+# was not enabled. No all eCAP errors can be bypassed.
+# If set to 'off' or '0', the eCAP service is treated as essential
+# and all eCAP errors will result in an error page returned to the
+# HTTP client.
+#
+# Bypass is off by default: services are treated as essential.
+#
+# routing=on|off|1|0
+# If set to 'on' or '1', the eCAP service is allowed to
+# dynamically change the current message adaptation plan by
+# returning a chain of services to be used next.
+#
+# Dynamic adaptation plan may cross or cover multiple supported
+# vectoring points in their natural processing order.
+#
+# Routing is not allowed by default.
+#
+# Older ecap_service format without optional named parameters is
+# deprecated but supported for backward compatibility.
+#
+#
+#Example:
+#ecap_service s1 reqmod_precache ecap://filters.R.us/leakDetector?on_error=block bypass=off
+#ecap_service s2 respmod_precache ecap://filters.R.us/virusFilter config=/etc/vf.cfg bypass=on
+#Default:
+# none
+
+# TAG: loadable_modules
+# Instructs Squid to load the specified dynamic module(s) or activate
+# preloaded module(s).
+#Example:
+#loadable_modules /usr/lib/MinimalAdapter.so
+#Default:
+# none
+
+# MESSAGE ADAPTATION OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: adaptation_service_set
+#
+# Configures an ordered set of similar, redundant services. This is
+# useful when hot standby or backup adaptation servers are available.
+#
+# adaptation_service_set set_name service_name1 service_name2 ...
+#
+# The named services are used in the set declaration order. The first
+# applicable adaptation service from the set is used first. The next
+# applicable service is tried if and only if the transaction with the
+# previous service fails and the message waiting to be adapted is still
+# intact.
+#
+# When adaptation starts, broken services are ignored as if they were
+# not a part of the set. A broken service is a down optional service.
+#
+# The services in a set must be attached to the same vectoring point
+# (e.g., pre-cache) and use the same adaptation method (e.g., REQMOD).
+#
+# If all services in a set are optional then adaptation failures are
+# bypassable. If all services in the set are essential, then a
+# transaction failure with one service may still be retried using
+# another service from the set, but when all services fail, the master
+# transaction fails as well.
+#
+# A set may contain a mix of optional and essential services, but that
+# is likely to lead to surprising results because broken services become
+# ignored (see above), making previously bypassable failures fatal.
+# Technically, it is the bypassability of the last failed service that
+# matters.
+#
+# See also: adaptation_access adaptation_service_chain
+#
+#Example:
+#adaptation_service_set svcBlocker urlFilterPrimary urlFilterBackup
+#adaptation service_set svcLogger loggerLocal loggerRemote
+#Default:
+# none
+
+# TAG: adaptation_service_chain
+#
+# Configures a list of complementary services that will be applied
+# one-by-one, forming an adaptation chain or pipeline. This is useful
+# when Squid must perform different adaptations on the same message.
+#
+# adaptation_service_chain chain_name service_name1 svc_name2 ...
+#
+# The named services are used in the chain declaration order. The first
+# applicable adaptation service from the chain is used first. The next
+# applicable service is applied to the successful adaptation results of
+# the previous service in the chain.
+#
+# When adaptation starts, broken services are ignored as if they were
+# not a part of the chain. A broken service is a down optional service.
+#
+# Request satisfaction terminates the adaptation chain because Squid
+# does not currently allow declaration of RESPMOD services at the
+# "reqmod_precache" vectoring point (see icap_service or ecap_service).
+#
+# The services in a chain must be attached to the same vectoring point
+# (e.g., pre-cache) and use the same adaptation method (e.g., REQMOD).
+#
+# A chain may contain a mix of optional and essential services. If an
+# essential adaptation fails (or the failure cannot be bypassed for
+# other reasons), the master transaction fails. Otherwise, the failure
+# is bypassed as if the failed adaptation service was not in the chain.
+#
+# See also: adaptation_access adaptation_service_set
+#
+#Example:
+#adaptation_service_chain svcRequest requestLogger urlFilter leakDetector
+#Default:
+# none
+
+# TAG: adaptation_access
+# Sends an HTTP transaction to an ICAP or eCAP adaptation service.
+#
+# adaptation_access service_name allow|deny [!]aclname...
+# adaptation_access set_name allow|deny [!]aclname...
+#
+# At each supported vectoring point, the adaptation_access
+# statements are processed in the order they appear in this
+# configuration file. Statements pointing to the following services
+# are ignored (i.e., skipped without checking their ACL):
+#
+# - services serving different vectoring points
+# - "broken-but-bypassable" services
+# - "up" services configured to ignore such transactions
+# (e.g., based on the ICAP Transfer-Ignore header).
+#
+# When a set_name is used, all services in the set are checked
+# using the same rules, to find the first applicable one. See
+# adaptation_service_set for details.
+#
+# If an access list is checked and there is a match, the
+# processing stops: For an "allow" rule, the corresponding
+# adaptation service is used for the transaction. For a "deny"
+# rule, no adaptation service is activated.
+#
+# It is currently not possible to apply more than one adaptation
+# service at the same vectoring point to the same HTTP transaction.
+#
+# See also: icap_service and ecap_service
+#
+#Example:
+#adaptation_access service_1 allow all
+#Default:
+# Allow, unless rules exist in squid.conf.
+
+# TAG: adaptation_service_iteration_limit
+# Limits the number of iterations allowed when applying adaptation
+# services to a message. If your longest adaptation set or chain
+# may have more than 16 services, increase the limit beyond its
+# default value of 16. If detecting infinite iteration loops sooner
+# is critical, make the iteration limit match the actual number
+# of services in your longest adaptation set or chain.
+#
+# Infinite adaptation loops are most likely with routing services.
+#
+# See also: icap_service routing=1
+#Default:
+# adaptation_service_iteration_limit 16
+
+# TAG: adaptation_masterx_shared_names
+# For each master transaction (i.e., the HTTP request and response
+# sequence, including all related ICAP and eCAP exchanges), Squid
+# maintains a table of metadata. The table entries are (name, value)
+# pairs shared among eCAP and ICAP exchanges. The table is destroyed
+# with the master transaction.
+#
+# This option specifies the table entry names that Squid must accept
+# from and forward to the adaptation transactions.
+#
+# An ICAP REQMOD or RESPMOD transaction may set an entry in the
+# shared table by returning an ICAP header field with a name
+# specified in adaptation_masterx_shared_names.
+#
+# An eCAP REQMOD or RESPMOD transaction may set an entry in the
+# shared table by implementing the libecap::visitEachOption() API
+# to provide an option with a name specified in
+# adaptation_masterx_shared_names.
+#
+# Squid will store and forward the set entry to subsequent adaptation
+# transactions within the same master transaction scope.
+#
+# Only one shared entry name is supported at this time.
+#
+#Example:
+## share authentication information among ICAP services
+#adaptation_masterx_shared_names X-Subscriber-ID
+#Default:
+# none
+
+# TAG: adaptation_meta
+# This option allows Squid administrator to add custom ICAP request
+# headers or eCAP options to Squid ICAP requests or eCAP transactions.
+# Use it to pass custom authentication tokens and other
+# transaction-state related meta information to an ICAP/eCAP service.
+#
+# The addition of a meta header is ACL-driven:
+# adaptation_meta name value [!]aclname ...
+#
+# Processing for a given header name stops after the first ACL list match.
+# Thus, it is impossible to add two headers with the same name. If no ACL
+# lists match for a given header name, no such header is added. For
+# example:
+#
+# # do not debug transactions except for those that need debugging
+# adaptation_meta X-Debug 1 needs_debugging
+#
+# # log all transactions except for those that must remain secret
+# adaptation_meta X-Log 1 !keep_secret
+#
+# # mark transactions from users in the "G 1" group
+# adaptation_meta X-Authenticated-Groups "G 1" authed_as_G1
+#
+# The "value" parameter may be a regular squid.conf token or a "double
+# quoted string". Within the quoted string, use backslash (\) to escape
+# any character, which is currently only useful for escaping backslashes
+# and double quotes. For example,
+# "this string has one backslash (\\) and two \"quotes\""
+#
+# Used adaptation_meta header values may be logged via %note
+# logformat code. If multiple adaptation_meta headers with the same name
+# are used during master transaction lifetime, the header values are
+# logged in the order they were used and duplicate values are ignored
+# (only the first repeated value will be logged).
+#Default:
+# none
+
+# TAG: icap_retry
+# This ACL determines which retriable ICAP transactions are
+# retried. Transactions that received a complete ICAP response
+# and did not have to consume or produce HTTP bodies to receive
+# that response are usually retriable.
+#
+# icap_retry allow|deny [!]aclname ...
+#
+# Squid automatically retries some ICAP I/O timeouts and errors
+# due to persistent connection race conditions.
+#
+# See also: icap_retry_limit
+#Default:
+# icap_retry deny all
+
+# TAG: icap_retry_limit
+# Limits the number of retries allowed.
+#
+# Communication errors due to persistent connection race
+# conditions are unavoidable, automatically retried, and do not
+# count against this limit.
+#
+# See also: icap_retry
+#Default:
+# No retries are allowed.
+
+# DNS OPTIONS
+# -----------------------------------------------------------------------------
+
+# TAG: check_hostnames
+# For security and stability reasons Squid can check
+# hostnames for Internet standard RFC compliance. If you want
+# Squid to perform these checks turn this directive on.
+#Default:
+# check_hostnames off
+
+# TAG: allow_underscore
+# Underscore characters is not strictly allowed in Internet hostnames
+# but nevertheless used by many sites. Set this to off if you want
+# Squid to be strict about the standard.
+# This check is performed only when check_hostnames is set to on.
+#Default:
+# allow_underscore on
+
+# TAG: dns_retransmit_interval
+# Initial retransmit interval for DNS queries. The interval is
+# doubled each time all configured DNS servers have been tried.
+#Default:
+# dns_retransmit_interval 5 seconds
+
+# TAG: dns_timeout
+# DNS Query timeout. If no response is received to a DNS query
+# within this time all DNS servers for the queried domain
+# are assumed to be unavailable.
+#Default:
+# dns_timeout 30 seconds
+
+# TAG: dns_packet_max
+# Maximum number of bytes packet size to advertise via EDNS.
+# Set to "none" to disable EDNS large packet support.
+#
+# For legacy reasons DNS UDP replies will default to 512 bytes which
+# is too small for many responses. EDNS provides a means for Squid to
+# negotiate receiving larger responses back immediately without having
+# to failover with repeat requests. Responses larger than this limit
+# will retain the old behaviour of failover to TCP DNS.
+#
+# Squid has no real fixed limit internally, but allowing packet sizes
+# over 1500 bytes requires network jumbogram support and is usually not
+# necessary.
+#
+# WARNING: The RFC also indicates that some older resolvers will reply
+# with failure of the whole request if the extension is added. Some
+# resolvers have already been identified which will reply with mangled
+# EDNS response on occasion. Usually in response to many-KB jumbogram
+# sizes being advertised by Squid.
+# Squid will currently treat these both as an unable-to-resolve domain
+# even if it would be resolvable without EDNS.
+#Default:
+# EDNS disabled
+
+# TAG: dns_defnames on|off
+# Normally the RES_DEFNAMES resolver option is disabled
+# (see res_init(3)). This prevents caches in a hierarchy
+# from interpreting single-component hostnames locally. To allow
+# Squid to handle single-component names, enable this option.
+#Default:
+# Search for single-label domain names is disabled.
+
+# TAG: dns_multicast_local on|off
+# When set to on, Squid sends multicast DNS lookups on the local
+# network for domains ending in .local and .arpa.
+# This enables local servers and devices to be contacted in an
+# ad-hoc or zero-configuration network environment.
+#Default:
+# Search for .local and .arpa names is disabled.
+
+# TAG: dns_nameservers
+# Use this if you want to specify a list of DNS name servers
+# (IP addresses) to use instead of those given in your
+# /etc/resolv.conf file.
+#
+# On Windows platforms, if no value is specified here or in
+# the /etc/resolv.conf file, the list of DNS name servers are
+# taken from the Windows registry, both static and dynamic DHCP
+# configurations are supported.
+#
+# Example: dns_nameservers 10.0.0.1 192.172.0.4
+#Default:
+# Use operating system definitions
+
+# TAG: hosts_file
+# Location of the host-local IP name-address associations
+# database. Most Operating Systems have such a file on different
+# default locations:
+# - Un*X & Linux: /etc/hosts
+# - Windows NT/2000: %SystemRoot%\system32\drivers\etc\hosts
+# (%SystemRoot% value install default is c:\winnt)
+# - Windows XP/2003: %SystemRoot%\system32\drivers\etc\hosts
+# (%SystemRoot% value install default is c:\windows)
+# - Windows 9x/Me: %windir%\hosts
+# (%windir% value is usually c:\windows)
+# - Cygwin: /etc/hosts
+#
+# The file contains newline-separated definitions, in the
+# form ip_address_in_dotted_form name [name ...] names are
+# whitespace-separated. Lines beginning with an hash (#)
+# character are comments.
+#
+# The file is checked at startup and upon configuration.
+# If set to 'none', it won't be checked.
+# If append_domain is used, that domain will be added to
+# domain-local (i.e. not containing any dot character) host
+# definitions.
+#Default:
+# hosts_file /etc/hosts
+
+# TAG: append_domain
+# Appends local domain name to hostnames without any dots in
+# them. append_domain must begin with a period.
+#
+# Be warned there are now Internet names with no dots in
+# them using only top-domain names, so setting this may
+# cause some Internet sites to become unavailable.
+#
+#Example:
+# append_domain .yourdomain.com
+#Default:
+# Use operating system definitions
+
+# TAG: ignore_unknown_nameservers
+# By default Squid checks that DNS responses are received
+# from the same IP addresses they are sent to. If they
+# don't match, Squid ignores the response and writes a warning
+# message to cache.log. You can allow responses from unknown
+# nameservers by setting this option to 'off'.
+#Default:
+# ignore_unknown_nameservers on
+
+# TAG: dns_v4_first
+# With the IPv6 Internet being as fast or faster than IPv4 Internet
+# for most networks Squid prefers to contact websites over IPv6.
+#
+# This option reverses the order of preference to make Squid contact
+# dual-stack websites over IPv4 first. Squid will still perform both
+# IPv6 and IPv4 DNS lookups before connecting.
+#
+# WARNING:
+# This option will restrict the situations under which IPv6
+# connectivity is used (and tested), potentially hiding network
+# problems which would otherwise be detected and warned about.
+#Default:
+# dns_v4_first off
+
+# TAG: ipcache_size (number of entries)
+# Maximum number of DNS IP cache entries.
+#Default:
+# ipcache_size 1024
+
+# TAG: ipcache_low (percent)
+#Default:
+# ipcache_low 90
+
+# TAG: ipcache_high (percent)
+# The size, low-, and high-water marks for the IP cache.
+#Default:
+# ipcache_high 95
+
+# TAG: fqdncache_size (number of entries)
+# Maximum number of FQDN cache entries.
+#Default:
+# fqdncache_size 1024
+
+# MISCELLANEOUS
+# -----------------------------------------------------------------------------
+
+# TAG: configuration_includes_quoted_values on|off
+# If set, Squid will recognize each "quoted string" after a configuration
+# directive as a single parameter. The quotes are stripped before the
+# parameter value is interpreted or used.
+# See "Values with spaces, quotes, and other special characters"
+# section for more details.
+#Default:
+# configuration_includes_quoted_values off
+
+# TAG: memory_pools on|off
+# If set, Squid will keep pools of allocated (but unused) memory
+# available for future use. If memory is a premium on your
+# system and you believe your malloc library outperforms Squid
+# routines, disable this.
+#Default:
+# memory_pools on
+
+# TAG: memory_pools_limit (bytes)
+# Used only with memory_pools on:
+# memory_pools_limit 50 MB
+#
+# If set to a non-zero value, Squid will keep at most the specified
+# limit of allocated (but unused) memory in memory pools. All free()
+# requests that exceed this limit will be handled by your malloc
+# library. Squid does not pre-allocate any memory, just safe-keeps
+# objects that otherwise would be free()d. Thus, it is safe to set
+# memory_pools_limit to a reasonably high value even if your
+# configuration will use less memory.
+#
+# If set to none, Squid will keep all memory it can. That is, there
+# will be no limit on the total amount of memory used for safe-keeping.
+#
+# To disable memory allocation optimization, do not set
+# memory_pools_limit to 0 or none. Set memory_pools to "off" instead.
+#
+# An overhead for maintaining memory pools is not taken into account
+# when the limit is checked. This overhead is close to four bytes per
+# object kept. However, pools may actually _save_ memory because of
+# reduced memory thrashing in your malloc library.
+#Default:
+# memory_pools_limit 5 MB
+
+# TAG: forwarded_for on|off|transparent|truncate|delete
+# If set to "on", Squid will append your client's IP address
+# in the HTTP requests it forwards. By default it looks like:
+#
+# X-Forwarded-For: 192.1.2.3
+#
+# If set to "off", it will appear as
+#
+# X-Forwarded-For: unknown
+#
+# If set to "transparent", Squid will not alter the
+# X-Forwarded-For header in any way.
+#
+# If set to "delete", Squid will delete the entire
+# X-Forwarded-For header.
+#
+# If set to "truncate", Squid will remove all existing
+# X-Forwarded-For entries, and place the client IP as the sole entry.
+#Default:
+# forwarded_for on
+
+# TAG: cachemgr_passwd
+# Specify passwords for cachemgr operations.
+#
+# Usage: cachemgr_passwd password action action ...
+#
+# Some valid actions are (see cache manager menu for a full list):
+# 5min
+# 60min
+# asndb
+# authenticator
+# cbdata
+# client_list
+# comm_incoming
+# config *
+# counters
+# delay
+# digest_stats
+# dns
+# events
+# filedescriptors
+# fqdncache
+# histograms
+# http_headers
+# info
+# io
+# ipcache
+# mem
+# menu
+# netdb
+# non_peers
+# objects
+# offline_toggle *
+# pconn
+# peer_select
+# reconfigure *
+# redirector
+# refresh
+# server_list
+# shutdown *
+# store_digest
+# storedir
+# utilization
+# via_headers
+# vm_objects
+#
+# * Indicates actions which will not be performed without a
+# valid password, others can be performed if not listed here.
+#
+# To disable an action, set the password to "disable".
+# To allow performing an action without a password, set the
+# password to "none".
+#
+# Use the keyword "all" to set the same password for all actions.
+#
+#Example:
+# cachemgr_passwd secret shutdown
+# cachemgr_passwd lesssssssecret info stats/objects
+# cachemgr_passwd disable all
+#Default:
+# No password. Actions which require password are denied.
+
+# TAG: client_db on|off
+# If you want to disable collecting per-client statistics,
+# turn off client_db here.
+#Default:
+# client_db on
+
+# TAG: refresh_all_ims on|off
+# When you enable this option, squid will always check
+# the origin server for an update when a client sends an
+# If-Modified-Since request. Many browsers use IMS
+# requests when the user requests a reload, and this
+# ensures those clients receive the latest version.
+#
+# By default (off), squid may return a Not Modified response
+# based on the age of the cached version.
+#Default:
+# refresh_all_ims off
+
+# TAG: reload_into_ims on|off
+# When you enable this option, client no-cache or ``reload''
+# requests will be changed to If-Modified-Since requests.
+# Doing this VIOLATES the HTTP standard. Enabling this
+# feature could make you liable for problems which it
+# causes.
+#
+# see also refresh_pattern for a more selective approach.
+#Default:
+# reload_into_ims off
+
+# TAG: connect_retries
+# This sets the maximum number of connection attempts made for each
+# TCP connection. The connect_retries attempts must all still
+# complete within the connection timeout period.
+#
+# The default is not to re-try if the first connection attempt fails.
+# The (not recommended) maximum is 10 tries.
+#
+# A warning message will be generated if it is set to a too-high
+# value and the configured value will be over-ridden.
+#
+# Note: These re-tries are in addition to forward_max_tries
+# which limit how many different addresses may be tried to find
+# a useful server.
+#Default:
+# Do not retry failed connections.
+
+# TAG: retry_on_error
+# If set to ON Squid will automatically retry requests when
+# receiving an error response with status 403 (Forbidden),
+# 500 (Internal Error), 501 or 503 (Service not available).
+# Status 502 and 504 (Gateway errors) are always retried.
+#
+# This is mainly useful if you are in a complex cache hierarchy to
+# work around access control errors.
+#
+# NOTE: This retry will attempt to find another working destination.
+# Which is different from the server which just failed.
+#Default:
+# retry_on_error off
+
+# TAG: as_whois_server
+# WHOIS server to query for AS numbers. NOTE: AS numbers are
+# queried only when Squid starts up, not for every request.
+#Default:
+# as_whois_server whois.ra.net
+
+# TAG: offline_mode
+# Enable this option and Squid will never try to validate cached
+# objects.
+#Default:
+# offline_mode off
+
+# TAG: uri_whitespace
+# What to do with requests that have whitespace characters in the
+# URI. Options:
+#
+# strip: The whitespace characters are stripped out of the URL.
+# This is the behavior recommended by RFC2396 and RFC3986
+# for tolerant handling of generic URI.
+# NOTE: This is one difference between generic URI and HTTP URLs.
+#
+# deny: The request is denied. The user receives an "Invalid
+# Request" message.
+# This is the behaviour recommended by RFC2616 for safe
+# handling of HTTP request URL.
+#
+# allow: The request is allowed and the URI is not changed. The
+# whitespace characters remain in the URI. Note the
+# whitespace is passed to redirector processes if they
+# are in use.
+# Note this may be considered a violation of RFC2616
+# request parsing where whitespace is prohibited in the
+# URL field.
+#
+# encode: The request is allowed and the whitespace characters are
+# encoded according to RFC1738.
+#
+# chop: The request is allowed and the URI is chopped at the
+# first whitespace.
+#
+#
+# NOTE the current Squid implementation of encode and chop violates
+# RFC2616 by not using a 301 redirect after altering the URL.
+#Default:
+# uri_whitespace strip
+
+# TAG: chroot
+# Specifies a directory where Squid should do a chroot() while
+# initializing. This also causes Squid to fully drop root
+# privileges after initializing. This means, for example, if you
+# use a HTTP port less than 1024 and try to reconfigure, you may
+# get an error saying that Squid can not open the port.
+#Default:
+# none
+
+# TAG: balance_on_multiple_ip
+# Modern IP resolvers in squid sort lookup results by preferred access.
+# By default squid will use these IP in order and only rotates to
+# the next listed when the most preffered fails.
+#
+# Some load balancing servers based on round robin DNS have been
+# found not to preserve user session state across requests
+# to different IP addresses.
+#
+# Enabling this directive Squid rotates IP's per request.
+#Default:
+# balance_on_multiple_ip off
+
+# TAG: pipeline_prefetch
+# HTTP clients may send a pipeline of 1+N requests to Squid using a
+# single connection, without waiting for Squid to respond to the first
+# of those requests. This option limits the number of concurrent
+# requests Squid will try to handle in parallel. If set to N, Squid
+# will try to receive and process up to 1+N requests on the same
+# connection concurrently.
+#
+# Defaults to 0 (off) for bandwidth management and access logging
+# reasons.
+#
+# NOTE: pipelining requires persistent connections to clients.
+#
+# WARNING: pipelining breaks NTLM and Negotiate/Kerberos authentication.
+#Default:
+# Do not pre-parse pipelined requests.
+
+# TAG: high_response_time_warning (msec)
+# If the one-minute median response time exceeds this value,
+# Squid prints a WARNING with debug level 0 to get the
+# administrators attention. The value is in milliseconds.
+#Default:
+# disabled.
+
+# TAG: high_page_fault_warning
+# If the one-minute average page fault rate exceeds this
+# value, Squid prints a WARNING with debug level 0 to get
+# the administrators attention. The value is in page faults
+# per second.
+#Default:
+# disabled.
+
+# TAG: high_memory_warning
+# Note: This option is only available if Squid is rebuilt with the
+# GNU Malloc with mstats()
+#
+# If the memory usage (as determined by gnumalloc, if available and used)
+# exceeds this amount, Squid prints a WARNING with debug level 0 to get
+# the administrators attention.
+#Default:
+# disabled.
+
+# TAG: sleep_after_fork (microseconds)
+# When this is set to a non-zero value, the main Squid process
+# sleeps the specified number of microseconds after a fork()
+# system call. This sleep may help the situation where your
+# system reports fork() failures due to lack of (virtual)
+# memory. Note, however, if you have a lot of child
+# processes, these sleep delays will add up and your
+# Squid will not service requests for some amount of time
+# until all the child processes have been started.
+# On Windows value less then 1000 (1 milliseconds) are
+# rounded to 1000.
+#Default:
+# sleep_after_fork 0
+
+# TAG: windows_ipaddrchangemonitor on|off
+# Note: This option is only available if Squid is rebuilt with the
+# MS Windows
+#
+# On Windows Squid by default will monitor IP address changes and will
+# reconfigure itself after any detected event. This is very useful for
+# proxies connected to internet with dial-up interfaces.
+# In some cases (a Proxy server acting as VPN gateway is one) it could be
+# desiderable to disable this behaviour setting this to 'off'.
+# Note: after changing this, Squid service must be restarted.
+#Default:
+# windows_ipaddrchangemonitor on
+
+# TAG: eui_lookup
+# Whether to lookup the EUI or MAC address of a connected client.
+#Default:
+# eui_lookup on
+
+# TAG: max_filedescriptors
+# Reduce the maximum number of filedescriptors supported below
+# the usual operating system defaults.
+#
+# Remove from squid.conf to inherit the current ulimit setting.
+#
+# Note: Changing this requires a restart of Squid. Also
+# not all I/O types supports large values (eg on Windows).
+#Default:
+# Use operating system limits set by ulimit.
+
+cache_effective_group proxy
diff --git a/rpi/unbound-deployment.yaml b/rpi/unbound-deployment.yaml
new file mode 100644
index 0000000..26f8997
--- /dev/null
+++ b/rpi/unbound-deployment.yaml
@@ -0,0 +1,35 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: unbound
+ lables:
+ app: unbound
+spec:
+ replicas: 1
+ selctor:
+ matchlabels:
+ app: unbound
+ template:
+ metadata:
+ labels:
+ app: unbound
+ spec:
+ containers:
+ - name: unbound
+ image: klutchell/unbound
+ ports:
+ - containerPort: 53
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: unbound-service
+spec:
+ selector:
+ app: unbound
+ type: LoadBalancer
+ ports:
+ - protocol: UDP
+ port: 53
+ targetPort: 53
+ nodePort: 53
diff --git a/snippets/cmain.c b/snippets/cmain.c
new file mode 100644
index 0000000..e276249
--- /dev/null
+++ b/snippets/cmain.c
@@ -0,0 +1,3 @@
+int main(int argc, char** argv) {
+ return 0;
+}
diff --git a/snippets/cppmain.cpp b/snippets/cppmain.cpp
new file mode 100644
index 0000000..e276249
--- /dev/null
+++ b/snippets/cppmain.cpp
@@ -0,0 +1,3 @@
+int main(int argc, char** argv) {
+ return 0;
+}
diff --git a/snippets/main.py b/snippets/main.py
new file mode 100644
index 0000000..4c8170d
--- /dev/null
+++ b/snippets/main.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+# _*_ coding=utf-8 _*_
+
+import argparse
+import code
+import readline
+import signal
+import sys
+
+def SigHandler_SIGINT(signum, frame):
+ print()
+ sys.exit(0)
+
+class Argparser(object):
+ def __init__(self):
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--string", type=str, help="string")
+ parser.add_argument("--bool", action="store_true", help="bool", default=False)
+ parser.add_argument("--dbg", action="store_true", help="debug", default=False)
+ self.args = parser.parse_args()
+
+# write code here
+def premain(argparser):
+ signal.signal(signal.SIGINT, SigHandler_SIGINT)
+ #here
+
+def main():
+ argparser = Argparser()
+ if argparser.args.dbg:
+ try:
+ premain(argparser)
+ except Exception as e:
+ if hasattr(e, "__doc__"):
+ print(e.__doc__)
+ if hasattr(e, "message"):
+ print(e.message)
+ variables = globals().copy()
+ variables.update(locals())
+ shell = code.InteractiveConsole(variables)
+ shell.interact(banner="DEBUG REPL")
+ else:
+ premain(argparser)
+
+if __name__ == "__main__":
+ main()
diff --git a/snippets/shebang.sh b/snippets/shebang.sh
new file mode 100644
index 0000000..13d8196
--- /dev/null
+++ b/snippets/shebang.sh
@@ -0,0 +1 @@
+#!/usr/bin/sh
diff --git a/tagger.sh b/tagger.sh
new file mode 100755
index 0000000..f0b0d17
--- /dev/null
+++ b/tagger.sh
@@ -0,0 +1,60 @@
+#!/usr/bin/sh
+
+CC=clang
+CXX=clang++
+C_EXT=c
+CXX_EXT=cpp
+EXTENSION=
+CTAGS_I_PATH=./
+RECURSIVE=false
+while [[ $# -gt 0 ]]
+do
+ passarg="$1"
+ case $passarg in
+ --dir)
+ CTAGS_I_PATH="$2"
+ shift
+ ;;
+ --lang)
+ LANG="$2"
+ shift
+ ;;
+ --cc)
+ CC="$2"
+ shift
+ ;;
+ --cxx)
+ CXX="$2"
+ shift
+ ;;
+ --recursive|-r)
+ RECURSIVE=true
+ ;;
+ --ex)
+ EXTENSION="$2"
+ shift
+ ;;
+ esac
+ shift
+done
+
+if [[ $LANG == "c" ]];then
+ if [[ $EXTENSION == "" ]];then
+ EXTENSION="c"
+ fi
+elif [[ $LANG == "cpp" ]];then
+ if [[ $EXTENSION == "" ]];then
+ EXTENSION="cpp"
+ fi
+fi
+
+for file in $CTAGS_I_PATH/*.$EXTENSION;do
+ TEMP_FILE=$(mktemp)
+ echo $file > $TEMP_FILE
+done
+
+if [[ $LANG == "cpp" ]];then
+ $CXX -c -I $CTAGS_I_PATH -M $TEMP_FILE| sed -e 's/[\\ ]/\n/g'|sed -e '/^$$/d' -e '/\.o:[ \t]*$$/d'|ctags -L - --c++-kinds=+p --fields=+iaS --extra=+q
+elif [[ $LANG == "c" ]];then
+ $CC -c -I $CTAGS_I_PATH -M $TEMP_FILE|sed -e 's/[\\ ]/\n/g'|sed -e '/^$$/d' -e '/\.o:[ \t]*$$/d'|ctags -L - --c++-kinds=+p --fields=+iaS --extra=+q
+fi
diff --git a/telebot.py b/telebot.py
new file mode 100755
index 0000000..47dfdf1
--- /dev/null
+++ b/telebot.py
@@ -0,0 +1,126 @@
+#!/usr/bin/python3
+
+import argparse
+import code
+import readline
+import signal
+import sys
+from telegram.ext import Updater, CommandHandler
+import logging
+import imp
+import json
+sys.path.insert(0, "./python")
+from deviutil import Demon_Father
+hived = imp.load_source("hived", "./hived")
+from hived import networth, highpercentdump_bot
+sys.path.insert(0, "/home/rooot/devi/kaminokumo")
+kaminokumo = imp.load_source("kaminokumo", "/home/rooot/devi/kaminokumo")
+from kaminokumo import mrg import json
+import threading
+from io import TextIOWrapper, BytesIO
+
+telekey_json = "./telekey.json"
+json_key = json.load(open(telekey_json))
+API_TOKEN = json_key['telekey']
+
+class Mg_thread(threading.Thread):
+ def __init__(self, bot, update):
+ self.bot = bot
+ self.update = update
+
+ def run(self):
+ url = json.load(open("/home/bloodstalker/extra/kaminokumo/data.json"))
+ res = mrg(url["1"])
+ text_str = str()
+ if res: text_str = "marge is up"
+ else: text_str = "no marge"
+ res = mrg(url["2"])
+ text_str = str()
+ if res: text_str = "obk is up"
+ else: text_str = "no obk"
+ self.bot.send_message(chat_id=self.update.message.chat_id, text=text_str)
+
+def start(bot, update):
+ bot.send_message(chat_id=update.message.chat_id, text="Hey... nice to make your acquaintance.")
+
+def net(bot, update):
+ total = networth()
+ bot.send_message(chat_id=update.message.chat_id, text=total)
+
+def high(bot, update):
+ total = highpercentdump_bot()
+ total_str = "".join(total)
+ bot.send_message(chat_id=update.message.chat_id, text=total_str)
+
+def mg(bot, update):
+ url = json.load(open("/home/bloodstalker/extra/kaminokumo/data.json"))
+ res = mrg(url["1"])
+ text_str = str()
+ if res: text_str += "marge is up"
+ else: text_str += "no marge\t"
+ res = mrg(url["2"])
+ if res: text_str += "obk is up"
+ else: text_str += "no obk\t"
+ bot.send_message(chat_id=update.message.chat_id, text=text_str)
+
+def generic(bot, update, args):
+ import mushi
+ print(repr(args))
+ old_stdout = sys.stdout
+ sys.stdout = TextIOWrapper(BytesIO(), sys.stdout.encoding)
+ mushi.main(args)
+ sys.stdout.seek(0)
+ out = sys.stdout.read()
+ print(repr(out))
+ bot.send_message(chat_id=update.message.chat_id, text=out)
+ sys.stdout.close()
+ sys.stdout = old_stdout
+
+class Argparser(object):
+ def __init__(self):
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--string", type=str, help="string")
+ parser.add_argument("--bool", action="store_true", help="bool", default=False)
+ parser.add_argument("--dbg", action="store_true", help="debug", default=False)
+ self.args = parser.parse_args()
+
+class Demon(Demon_Father):
+ def run(self):
+ updater = Updater(token=API_TOKEN)
+ bot = updater.bot
+ dispatcher = updater.dispatcher
+ logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
+ start_handler = CommandHandler("start", start)
+ net_handler = CommandHandler("net", net)
+ high_handler = CommandHandler("high", high)
+ mg_handler = CommandHandler("mg", mg)
+ generic_handler = CommandHandler("cc", generic, pass_args=True)
+ dispatcher.add_handler(start_handler)
+ dispatcher.add_handler(net_handler)
+ dispatcher.add_handler(high_handler)
+ dispatcher.add_handler(mg_handler)
+ dispatcher.add_handler(generic_handler)
+ updater.start_polling()
+
+# write code here
+def premain(argparser):
+ #here
+ pidfile = open("/tmp/telebot_temp", "w")
+ demon = Demon(pidfile)
+ demon.run()
+
+def main():
+ argparser = Argparser()
+ if argparser.args.dbg:
+ try:
+ premain(argparser)
+ except:
+ variables = globals().copy()
+ variables.update(locals())
+ shell = code.InteractiveConsole(variables)
+ shell.interact(banner="DEBUG REPL")
+ else:
+ premain(argparser)
+
+if __name__ == "__main__":
+ main()
diff --git a/tg.lua b/tg.lua
new file mode 100644
index 0000000..51a22c9
--- /dev/null
+++ b/tg.lua
@@ -0,0 +1,109 @@
+started = 0
+our_id = 0
+os = require("os")
+now = os.time()
+print("now is "..os.date("%m/%d/%Y %I:%M %p"))
+
+function on_binlog_replay_end()
+ --started = 1
+ local a = get_dialog_list(ok_cb, result)
+ -- quits telegram-cli
+ -- you would probably wasnt this if you dont want telegram up all the time and
+ -- have set up a cronjob to handle updating your unread messages
+ -- safe_quit()
+end
+
+function on_get_difference_end()
+end
+
+function on_our_id(our_id)
+ --print("our id is "..our_id)
+end
+
+function on_user_update(user,what_changed)
+ --[[
+ if user.print_name == "Mahsa" then
+ print("Mahsa update:\n")
+ print("user:")
+ for k,v in pairs(user) do
+ print(k,v)
+ end
+ print(user.print_name)
+ print("what changed:")
+ for k,v in pairs(what_changed) do
+ print(k,v)
+ end
+ print(what_changed["flags"])
+ end
+ ]]--
+end
+
+function on_chat_update(user,what_changed)
+ --[[
+ print(type(user))
+ print(type(what_changed))
+ for k,v in pairs(user) do
+ print(k,v)
+ end
+ for k,v in pairs(what_changed) do
+ print(k,v)
+ end
+ ]]--
+end
+
+function on_secret_chat_update(user,what_changed)
+end
+
+-- this callback is handling the call to dialog_list which is called in on_binlog_replay_end
+-- essentially here is where we check how many unread messages we have since on_msg_recieve
+-- only handles the messages we newly receive, not older unread ones.
+function ok_cb(extra, success, result)
+ for k, v in pairs(result) do
+ if v["peer"]["username"] == "mahsafatehii" then
+ if v["unread"] ~= 0. then
+ local socket = require("socket")
+ local host, port = "localhost", 11111
+ local tcp = assert(socket.tcp())
+ tcp:connect(host, port)
+ tcp:send("Mahsa".."\n")
+ tcp:close()
+ end
+ end
+ end
+end
+
+-- when we recieve a new message
+function on_msg_receive(msg)
+ --for k,v in pairs(msg) do
+ --print(k, v)
+ --end
+ if (msg.from.print_name ~= "Mahsa") then
+ return
+ end
+ local socket = require("socket")
+ local host, port = "localhost", 11111
+ local tcp = assert(socket.tcp())
+ tcp:connect(host, port)
+ --print(msg.from.print_name)
+ tcp:send("Mahsa".."\n")
+ --[[
+ if (msg.text == 'hey') then
+ if (msg.to.id == our_id) then
+ send_msg (msg.from.print_name, 'you', ok_cb, false)
+ else
+ send_msg (msg.to.print_name, 'you', ok_cb, false)
+ end
+ return
+ end
+ ]]--
+ tcp:close()
+end
+
+function send_msg_cb(cb_extra, success, result)
+end
+
+function postpone_cb(cb_extra, success, result)
+end
+
+function history_cb(msg_list, peer, success, msgs)
+end
diff --git a/tmux/common.sh b/tmux/common.sh
new file mode 100644
index 0000000..2c637ce
--- /dev/null
+++ b/tmux/common.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+SEPARATOR_LEFT_BOLD=""
+SEPARATOR_LEFT_THIN=""
+SEPARATOR_RIGHT_BOLD=""
+SEPARATOR_RIGHT_THIN=""
+
diff --git a/tmux/date.sh b/tmux/date.sh
new file mode 100755
index 0000000..1c08e47
--- /dev/null
+++ b/tmux/date.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+
+# source common.sh
+SEPARATOR_LEFT_BOLD=""
+SEPARATOR_LEFT_THIN=""
+
+RESULT=$(date +"%a %D %H:%M")
+
+DAY="#[fg=colour255 bg=colour31]"$(echo $RESULT | gawk '{print $1}')
+DATE="#[fg=colour255 bg=colour31]"$(echo $RESULT | gawk '{print $2}')
+TIME="#[fg=colour255 bg=colour31]"$(echo $RESULT | gawk '{print $3}')
+UTC_TIME="#[fg=colour255 bg=colour75]"$(date -u +"%H:%I")
+# JDATE="#[fg=colour255 bg=colour29]"$(jdate | gawk '{print $2" "$3}')
+JDATE="#[fg=colour255 bg=colour29]"$(jdate | gawk '{print $2" "$3}')
+
+echo "#[fg=colour29 bg=colour16]$SEPARATOR_LEFT_BOLD$JDATE #[fg=colour31 bg=colour29]$SEPARATOR_LEFT_BOLD$DAY $SEPARATOR_LEFT_THIN $DATE $SEPARATOR_LEFT_THIN $TIME #[fg=colour75 bg=colour31]$SEPARATOR_LEFT_BOLD$UTC_TIME "
diff --git a/tmux/jdat.sh b/tmux/jdat.sh
new file mode 100755
index 0000000..3f8f378
--- /dev/null
+++ b/tmux/jdat.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+JDATE=$(jdate | gawk '{print $2" "$3}')
+
+echo $JDATE
diff --git a/tmux/vcs_info.sh b/tmux/vcs_info.sh
new file mode 100755
index 0000000..1369b3d
--- /dev/null
+++ b/tmux/vcs_info.sh
@@ -0,0 +1,66 @@
+#!/usr/bin/env bash
+
+source common.sh
+SEPARATOR_RIGHT_BOLD=""
+SEPARATOR_RIGHT_THIN=""
+
+MIN_MAJOR_VERSION="2"
+MIN_MINOR_VERSION="1"
+TMUX_VERSION="$(tmux -V)"
+
+get_tmux_cwd() {
+ tmux display -p -F "#{pane_current_path}"
+}
+tmux_path=$(get_tmux_cwd)
+cd $tmux_path
+IFS='/' read -ra tmux_path_array <<< "$tmux_path"
+pos=$(( ${#tmux_path_array[*]} - 1 ))
+last=${tmux_path_array[$pos]}
+for i in "${tmux_path_array[@]}"
+do
+ if [[ $i == $last ]]; then
+ shortened_path+=$i
+ else
+ shortened_path+=${i:0:1}/
+ fi
+done
+
+function gitadditions {
+ git rev-parse --git-dir > /dev/null 2>&1
+ if [[ $? == 0 ]]; then
+ insertions=$(git --no-pager diff --numstat | awk '{sum1+=$1}END{print sum1}')
+ echo + $insertions
+ fi
+}
+
+function gitdeletions {
+ git rev-parse --git-dir > /dev/null 2>&1
+ if [[ $? == 0 ]]; then
+ deletions=$(git --no-pager diff --numstat | awk '{sum2+=$2}END{print sum2}')
+ echo - $deletions
+ fi
+}
+
+function git_untracked_info {
+ git rev-parse --git-dir > /dev/null 2>&1
+ if [[ $? == 0 ]]; then
+ untracked=$(git ls-files --others --exclude-standard | wc -w)
+ echo ⋯ $untracked
+ fi
+}
+
+function git_branch_info {
+ git rev-parse --git-dir > /dev/null 2>&1
+ if [[ $? == 0 ]]; then
+ branch=$(git rev-parse --abbrev-ref HEAD)
+ echo " "$branch
+ fi
+}
+
+tmux_session_info=" #S:#I.#P"
+branch_info="#[fg=colour24]#[fg=colour255 bg=colour65]"$(git_branch_info)
+untracked_info="#[fg=colour255 bg=colour244]"$(git_untracked_info)
+deletions_info="#[fg=colour255 bg=colour1]"$(gitdeletions)
+additions__info="#[fg=colour255 bg=colour22]"$(gitadditions)
+
+echo "#[fg=colour255 bg=colour61]$shortened_path #[fg=colour61 bg=colour26]$SEPARATOR_RIGHT_BOLD#[fg=colour255 bg=colour26]$tmux_session_info #[fg=colour26 bg=colour65]$SEPARATOR_RIGHT_BOLD $branch_info #[fg=colour65 bg=colour22]$SEPARATOR_RIGHT_BOLD $additions__info #[fg=colour22 bg=colour1]$SEPARATOR_RIGHT_BOLD $deletions_info #[fg=colour1 bg=colour244]$SEPARATOR_RIGHT_BOLD $untracked_info #[fg=colour244 bg=colour16]$SEPARATOR_RIGHT_BOLD"
diff --git a/torrc b/torrc
new file mode 100644
index 0000000..8b5fad9
--- /dev/null
+++ b/torrc
@@ -0,0 +1,255 @@
+## Configuration file for a typical Tor user
+## Last updated 28 February 2019 for Tor 0.3.5.1-alpha.
+## (may or may not work for much older or much newer versions of Tor.)
+##
+## Lines that begin with "## " try to explain what's going on. Lines
+## that begin with just "#" are disabled commands: you can enable them
+## by removing the "#" symbol.
+##
+## See 'man tor', or https://www.torproject.org/docs/tor-manual.html,
+## for more options you can use in this file.
+##
+## Tor will look for this file in various places based on your platform:
+## https://www.torproject.org/docs/faq#torrc
+
+ControlSocket /run/tor/control
+ControlSocketsGroupWritable 1
+CookieAuthentication 1
+CookieAuthFile /run/tor/control.authcookie
+CookieAuthFileGroupReadable 1
+
+## Tor opens a SOCKS proxy on port 9050 by default -- even if you don't
+## configure one below. Set "SOCKSPort 0" if you plan to run Tor only
+## as a relay, and not make any local application connections yourself.
+#SOCKSPort 9050 # Default: Bind to localhost:9050 for local connections.
+#SOCKSPort 192.168.0.1:9100 # Bind to this address:port too.
+
+## Entry policies to allow/deny SOCKS requests based on IP address.
+## First entry that matches wins. If no SOCKSPolicy is set, we accept
+## all (and only) requests that reach a SOCKSPort. Untrusted users who
+## can access your SOCKSPort may be able to learn about the connections
+## you make.
+#SOCKSPolicy accept 192.168.0.0/16
+#SOCKSPolicy accept6 FC00::/7
+#SOCKSPolicy reject *
+
+## Logs go to stdout at level "notice" unless redirected by something
+## else, like one of the below lines. You can have as many Log lines as
+## you want.
+##
+## We advise using "notice" in most cases, since anything more verbose
+## may provide sensitive information to an attacker who obtains the logs.
+##
+## Send all messages of level 'notice' or higher to /var/log/tor/notices.log
+#Log notice file /var/log/tor/notices.log
+## Send every possible message to /var/log/tor/debug.log
+#Log debug file /var/log/tor/debug.log
+## Use the system log instead of Tor's logfiles
+#Log notice syslog
+## To send all messages to stderr:
+#Log debug stderr
+
+## Uncomment this to start the process in the background... or use
+## --runasdaemon 1 on the command line. This is ignored on Windows;
+## see the FAQ entry if you want Tor to run as an NT service.
+#RunAsDaemon 1
+
+## The directory for keeping all the keys/etc. By default, we store
+## things in $HOME/.tor on Unix, and in Application Data\tor on Windows.
+#DataDirectory /var/lib/tor
+
+## The port on which Tor will listen for local connections from Tor
+## controller applications, as documented in control-spec.txt.
+#ControlPort 9051
+## If you enable the controlport, be sure to enable one of these
+## authentication methods, to prevent attackers from accessing it.
+#HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C
+#CookieAuthentication 1
+
+############### This section is just for location-hidden services ###
+
+## Once you have configured a hidden service, you can look at the
+## contents of the file ".../hidden_service/hostname" for the address
+## to tell people.
+##
+## HiddenServicePort x y:z says to redirect requests on port x to the
+## address y:z.
+
+#HiddenServiceDir /var/lib/tor/hidden_service/
+#HiddenServicePort 80 127.0.0.1:80
+
+#HiddenServiceDir /var/lib/tor/other_hidden_service/
+#HiddenServicePort 80 127.0.0.1:80
+#HiddenServicePort 22 127.0.0.1:22
+
+################ This section is just for relays #####################
+#
+## See https://www.torproject.org/docs/tor-doc-relay for details.
+
+## Required: what port to advertise for incoming Tor connections.
+#ORPort 9001
+## If you want to listen on a port other than the one advertised in
+## ORPort (e.g. to advertise 443 but bind to 9090), you can do it as
+## follows. You'll need to do ipchains or other port forwarding
+## yourself to make this work.
+#ORPort 443 NoListen
+#ORPort 127.0.0.1:9090 NoAdvertise
+
+## The IP address or full DNS name for incoming connections to your
+## relay. Leave commented out and Tor will guess.
+#Address noname.example.com
+
+## If you have multiple network interfaces, you can specify one for
+## outgoing traffic to use.
+## OutboundBindAddressExit will be used for all exit traffic, while
+## OutboundBindAddressOR will be used for all OR and Dir connections
+## (DNS connections ignore OutboundBindAddress).
+## If you do not wish to differentiate, use OutboundBindAddress to
+## specify the same address for both in a single line.
+#OutboundBindAddressExit 10.0.0.4
+#OutboundBindAddressOR 10.0.0.5
+
+## A handle for your relay, so people don't have to refer to it by key.
+## Nicknames must be between 1 and 19 characters inclusive, and must
+## contain only the characters [a-zA-Z0-9].
+## If not set, "Unnamed" will be used.
+#Nickname ididnteditheconfig
+
+## Define these to limit how much relayed traffic you will allow. Your
+## own traffic is still unthrottled. Note that RelayBandwidthRate must
+## be at least 75 kilobytes per second.
+## Note that units for these config options are bytes (per second), not
+## bits (per second), and that prefixes are binary prefixes, i.e. 2^10,
+## 2^20, etc.
+#RelayBandwidthRate 100 KBytes # Throttle traffic to 100KB/s (800Kbps)
+#RelayBandwidthBurst 200 KBytes # But allow bursts up to 200KB (1600Kb)
+
+## Use these to restrict the maximum traffic per day, week, or month.
+## Note that this threshold applies separately to sent and received bytes,
+## not to their sum: setting "40 GB" may allow up to 80 GB total before
+## hibernating.
+##
+## Set a maximum of 40 gigabytes each way per period.
+#AccountingMax 40 GBytes
+## Each period starts daily at midnight (AccountingMax is per day)
+#AccountingStart day 00:00
+## Each period starts on the 3rd of the month at 15:00 (AccountingMax
+## is per month)
+#AccountingStart month 3 15:00
+
+## Administrative contact information for this relay or bridge. This line
+## can be used to contact you if your relay or bridge is misconfigured or
+## something else goes wrong. Note that we archive and publish all
+## descriptors containing these lines and that Google indexes them, so
+## spammers might also collect them. You may want to obscure the fact that
+## it's an email address and/or generate a new address for this purpose.
+##
+## If you are running multiple relays, you MUST set this option.
+##
+#ContactInfo Random Person <nobody AT example dot com>
+## You might also include your PGP or GPG fingerprint if you have one:
+#ContactInfo 0xFFFFFFFF Random Person <nobody AT example dot com>
+
+## Uncomment this to mirror directory information for others. Please do
+## if you have enough bandwidth.
+#DirPort 9030 # what port to advertise for directory connections
+## If you want to listen on a port other than the one advertised in
+## DirPort (e.g. to advertise 80 but bind to 9091), you can do it as
+## follows. below too. You'll need to do ipchains or other port
+## forwarding yourself to make this work.
+#DirPort 80 NoListen
+#DirPort 127.0.0.1:9091 NoAdvertise
+## Uncomment to return an arbitrary blob of html on your DirPort. Now you
+## can explain what Tor is if anybody wonders why your IP address is
+## contacting them. See contrib/tor-exit-notice.html in Tor's source
+## distribution for a sample.
+#DirPortFrontPage /etc/tor/tor-exit-notice.html
+
+## Uncomment this if you run more than one Tor relay, and add the identity
+## key fingerprint of each Tor relay you control, even if they're on
+## different networks. You declare it here so Tor clients can avoid
+## using more than one of your relays in a single circuit. See
+## https://www.torproject.org/docs/faq#MultipleRelays
+## However, you should never include a bridge's fingerprint here, as it would
+## break its concealability and potentially reveal its IP/TCP address.
+##
+## If you are running multiple relays, you MUST set this option.
+##
+## Note: do not use MyFamily on bridge relays.
+#MyFamily $keyid,$keyid,...
+
+## Uncomment this if you want your relay to be an exit, with the default
+## exit policy (or whatever exit policy you set below).
+## (If ReducedExitPolicy, ExitPolicy, or IPv6Exit are set, relays are exits.
+## If none of these options are set, relays are non-exits.)
+#ExitRelay 1
+
+## Uncomment this if you want your relay to allow IPv6 exit traffic.
+## (Relays do not allow any exit traffic by default.)
+#IPv6Exit 1
+
+## Uncomment this if you want your relay to be an exit, with a reduced set
+## of exit ports.
+#ReducedExitPolicy 1
+
+## Uncomment these lines if you want your relay to be an exit, with the
+## specified set of exit IPs and ports.
+##
+## A comma-separated list of exit policies. They're considered first
+## to last, and the first match wins.
+##
+## If you want to allow the same ports on IPv4 and IPv6, write your rules
+## using accept/reject *. If you want to allow different ports on IPv4 and
+## IPv6, write your IPv6 rules using accept6/reject6 *6, and your IPv4 rules
+## using accept/reject *4.
+##
+## If you want to _replace_ the default exit policy, end this with either a
+## reject *:* or an accept *:*. Otherwise, you're _augmenting_ (prepending to)
+## the default exit policy. Leave commented to just use the default, which is
+## described in the man page or at
+## https://www.torproject.org/documentation.html
+##
+## Look at https://www.torproject.org/faq-abuse.html#TypicalAbuses
+## for issues you might encounter if you use the default exit policy.
+##
+## If certain IPs and ports are blocked externally, e.g. by your firewall,
+## you should update your exit policy to reflect this -- otherwise Tor
+## users will be told that those destinations are down.
+##
+## For security, by default Tor rejects connections to private (local)
+## networks, including to the configured primary public IPv4 and IPv6 addresses,
+## and any public IPv4 and IPv6 addresses on any interface on the relay.
+## See the man page entry for ExitPolicyRejectPrivate if you want to allow
+## "exit enclaving".
+##
+#ExitPolicy accept *:6660-6667,reject *:* # allow irc ports on IPv4 and IPv6 but no more
+#ExitPolicy accept *:119 # accept nntp ports on IPv4 and IPv6 as well as default exit policy
+#ExitPolicy accept *4:119 # accept nntp ports on IPv4 only as well as default exit policy
+#ExitPolicy accept6 *6:119 # accept nntp ports on IPv6 only as well as default exit policy
+#ExitPolicy reject *:* # no exits allowed
+
+## Bridge relays (or "bridges") are Tor relays that aren't listed in the
+## main directory. Since there is no complete public list of them, even an
+## ISP that filters connections to all the known Tor relays probably
+## won't be able to block all the bridges. Also, websites won't treat you
+## differently because they won't know you're running Tor. If you can
+## be a real relay, please do; but if not, be a bridge!
+##
+## Warning: when running your Tor as a bridge, make sure than MyFamily is
+## NOT configured.
+#BridgeRelay 1
+## By default, Tor will advertise your bridge to users through various
+## mechanisms like https://bridges.torproject.org/. If you want to run
+## a private bridge, for example because you'll give out your bridge
+## address manually to your friends, uncomment this line:
+#PublishServerDescriptor 0
+
+## Configuration options can be imported from files or folders using the %include
+## option with the value being a path. If the path is a file, the options from the
+## file will be parsed as if they were written where the %include option is. If
+## the path is a folder, all files on that folder will be parsed following lexical
+## order. Files starting with a dot are ignored. Files on subfolders are ignored.
+## The %include option can be used recursively.
+#%include /etc/torrc.d/
+#%include /etc/torrc.custom
+
diff --git a/vim/install.sh b/vim/install.sh
new file mode 100755
index 0000000..5114105
--- /dev/null
+++ b/vim/install.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env sh
+
+VIM_VERSION=8.2.2536
+
+sudo apt remove --purge vim vim-runtime vim-gnome vim-tiny vim-gui-common
+sudo rm -rf /usr/local/share/vim /usr/bin/vim
+sudo apt-get install -y liblua5.1-dev luajit libluajit-5.1 python-dev ruby-dev libperl-dev libncurses5-dev libatk1.0-dev libx11-dev libxpm-dev libxt-dev
+
+mkdir -p ~/vimsrc && \
+ cd ~/vimsrc && \
+ wget https://github.com/vim/vim/archive/v"$VIM_VERSION".tar.gz && \
+ tar -xvf v"$VIM_VERSION".tar.gz -C ~/vimsrc
+
+cd vim-"$VIM_VERSION" && ./configure \
+ --with-features=huge \
+ --enable-multibyte \
+ --enable-perlinterp=yes \
+ --enable-rubyinterp=yes \
+ --with-ruby-command=/usr/bin/ruby \
+ --enable-luainterp=yes \
+ --with-luajit \
+ --enable-python3interp=yes \
+ --with-python3-config-dir=/usr/lib/python3.8/config-3.8m-x86_64-linux-gnu \
+ --with-python3-command=python3 \
+ --enable-cscope \
+ --enable-gui=auto \
+ --with-features=huge \
+ --with-x \
+ --enable-fontset \
+ --enable-largefile \
+ --disable-netbeans \
+ --prefix=/usr/local \
+ --enable-terminal \
+ --with-compiledby="farzadsadeghi <thabogre@gmail.com>" \
+ --enable-fail-if-missing
+# --enable-pythoninterp=yes \
+# --with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu \
+
+make -j4 && sudo make install
+# run :helptags path-to-where-the-docs-are
+sudo vim -c "helptags $VIMRUNRIME"
diff --git a/vimium-options.json b/vimium-options.json
new file mode 100755
index 0000000..193a6e6
--- /dev/null
+++ b/vimium-options.json
@@ -0,0 +1,42 @@
+{
+ "settingsVersion": "1.66",
+ "exclusionRules": [
+ {
+ "pattern": "https?://mail.google.com/*",
+ "passKeys": ""
+ },
+ {
+ "pattern": "https?://localhost:9000/*",
+ "passKeys": ""
+ },
+ {
+ "pattern": "https?://localhost:9000/*",
+ "passKeys": ""
+ },
+ {
+ "pattern": "https?://fscdn.r2games.com/*",
+ "passKeys": ""
+ },
+ {
+ "pattern": "https?://fscdn.r2games.com/*",
+ "passKeys": ""
+ }
+ ],
+ "filterLinkHints": false,
+ "waitForEnterForFilteredHints": true,
+ "hideHud": false,
+ "keyMappings": "# Insert your preferred key mappings here.\nmap <C-f> scrollFullPageDown\nmap <C-b> scrollFullPageUp",
+ "linkHintCharacters": "sadfjklewcmpgh",
+ "linkHintNumbers": "0123456789",
+ "newTabUrl": "about:newtab",
+ "nextPatterns": "next,more,newer,>,›,→,»,≫,>>",
+ "previousPatterns": "prev,previous,back,older,<,‹,←,«,≪,<<",
+ "regexFindMode": false,
+ "ignoreKeyboardLayout": false,
+ "scrollStepSize": 60,
+ "smoothScroll": true,
+ "grabBackFocus": false,
+ "searchEngines": "w: https://www.wikipedia.org/w/index.php?title=Special:Search&search=%s Wikipedia\n\n# More examples.\n#\n# (Vimium supports search completion Wikipedia, as\n# above, and for these.)\n#\n# g: https://www.google.com/search?q=%s Google\n# l: https://www.google.com/search?q=%s&btnI I'm feeling lucky...\n# y: https://www.youtube.com/results?search_query=%s Youtube\n# gm: https://www.google.com/maps?q=%s Google maps\n# b: https://www.bing.com/search?q=%s Bing\n# d: https://duckduckgo.com/?q=%s DuckDuckGo\n# az: https://www.amazon.com/s/?field-keywords=%s Amazon\n# qw: https://www.qwant.com/?q=%s Qwant",
+ "searchUrl": "https://duckduckgo.com/?q=",
+ "userDefinedLinkHintCss": "/*\nDracula theme for Vimium\nby Trollwut (trollwut@trollwut.org). This code is in the public domain.\nTo use:\n 1. Copy the code.\n 2. Go to the Vimium options.\n 3. Click Show Advanced Options.\n 4. Under Advanced Options, scroll down to CSS for link hints.\n 5. Paste the code in the text field.\n 6. Click Save Changes.\n 7. Go to the website of your choice (or, if you have it open already, reload it) and check out the results.\n*/\n\n/* Link hint boxes */\ndiv > .vimiumHintMarker {\n background: #282a36;\n font-size: 12px;\n border: 0.25em solid #ffb86c;\n border-radius: 0.34em;\n box-shadow: 0em 0.1em 0.6em 0.1em rgba(0, 0, 0, 0.4);\n}\n\n/* Link hint text */\ndiv > .vimiumHintMarker span {\n color: #f8f8f2;\n font-size: inherit;\n text-shadow: none;\n}\n\n/* Link hint matching characters */\ndiv > .vimiumHintMarker > .matchingCharacter {\n color: #6272a4;\n}\n\n/* HUD (\"heads-up display\") bar */\ndiv.vimiumHUD {\n background: #282a36;\n border: 1px solid #6272a4;\n}\n\ndiv.vimiumHUD .vimiumHUDSearchArea {\n background: #282a36;\n}\n\ndiv.vimiumHUD .hud-find {\n background: #282a36;\n border: none;\n color: #f8f8f2;\n}\n\ndiv.vimiumHUD span#hud-find-input{\n color: #f8f8f2; /* 'Foreground' color */\n}\n\ndiv.vimiumHUD span#hud-match-count {\n color: #6272a4; /* 'Comment' color */\n}\n\ndiv.vimiumHUD .vimiumHUDSearchAreaInner {\n color: #6272a4; /* 'Comment' color */\n}\n\n#vomnibar{\n background-color: #44475A;\n}\n\n#vomnibar input {\n color: #f8f8f2;\n font: -moz-window;\n /*font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;*/\n font-size: 20px;\n height: 34px;\n margin-bottom: 0;\n padding: 4px;\n background-color: #282a36;\n border-radius: 3px;\n border: 1px solid #6272a4;\n box-shadow: #bd93f9 0px 0px 1px;\n width: 100%;\n outline: none;\n box-sizing: border-box;\n}\n\n#vomnibar .vomnibarSearchArea {\n display: block;\n padding: 10px;\n background-color: #6272a4;\n border-radius: 4px 4px 0 0;\n border-bottom: 0px solid #bd93f9;\n}\n\n#vomnibar ul {\n background-color: #44475a;\n border-radius: 0 0 4px 4px;\n list-style: none;\n padding-top: 0;\n padding-bottom: 0;\n margin-block-start: 2px;\n margin-block-end: 0px;\n}\n\n#vomnibar li {\n border-bottom: 1px solid #6272a4;\n line-height: 1.1em;\n padding: 7px 10px;\n font-size: 16px;\n color: #f8f8f2;\n position: relative;\n display: list-item;\n margin: auto;\n}\n\n#vomnibar li .vomnibarBottomHalf {\n font-size: 15px;\n margin-top: 3px;\n padding: 2px 0;\n}\n\n#vomnibar li .vomnibarSource {\n color: #bd93f9;\n margin-right: 4px;\n}\n#vomnibar li .vomnibarRelevancy {\n position: absolute;\n right: 0;\n top: 0;\n padding: 5px;\n background-color: #282a36;\n color: #f8f8f2;\n font-family: monospace;\n width: 100px;\n overflow: hidden;\n}\n\n#vomnibar li .vomnibarUrl {\n white-space: nowrap;\n color: #50fa7b;\n}\n\n#vomnibar li .vomnibarMatch {\n font-weight: bold;\n color: #ffb86c;\n}\n\n#vomnibar li em, #vomnibar li .vomnibarTitle {\n color: #f8f8f2;\n margin-left: 4px;\n font-weight: normal;\n}\n#vomnibar li em { font-style: italic; }\n#vomnibar li em .vomnibarMatch, #vomnibar li .vomnibarTitle .vomnibarMatch {\n color: #ffb86c;\n}\n\n#vomnibar li.vomnibarSelected {\n background-color: #6272a4;\n font-weight: normal;\n}\n\n#vomnibarInput::selection {\n background-color: #8be9fd;\n}"
+} \ No newline at end of file
diff --git a/voice.sh b/voice.sh
new file mode 100755
index 0000000..db4e923
--- /dev/null
+++ b/voice.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/bash
+cd $(dirname $0)
+"ogg123" $1 2> /dev/null
diff --git a/zathurarc b/zathurarc
new file mode 100644
index 0000000..61e36dd
--- /dev/null
+++ b/zathurarc
@@ -0,0 +1,51 @@
+# Zathura configuration file
+# See man `man zathurarc'
+# Open document in fit-width mode by default
+set adjust-open "best-fit"
+# One page per row by default
+set pages-per-row 1
+#stop at page boundries
+set scroll-page-aware "true"
+set smooth-scroll "true"
+set scroll-full-overlap 0.01
+set scroll-step 100
+#zoom settings
+set zoom-min 10
+set guioptions "sc"
+# zathurarc-dark
+set font "inconsolata 10"
+set default-bg "#000000" #00
+set default-fg "#F7F7F6" #01
+set statusbar-fg "#B0B0B0" #04
+set statusbar-bg "#202020" #01
+set inputbar-bg "#151515" #00 currently not used
+set inputbar-fg "#FFFFFF" #02
+set notification-error-bg "#AC4142" #08
+set notification-error-fg "#151515" #00
+set notification-warning-bg "#AC4142" #08
+set notification-warning-fg "#151515" #00
+set highlight-color "#F4BF75" #0A
+set highlight-active-color "#6A9FB5" #0D
+set completion-highlight-fg "#151515" #02
+set completion-highlight-bg "#90A959" #0C
+set completion-bg "#303030" #02
+set completion-fg "#E0E0E0" #0C
+set notification-bg "#90A959" #0B
+set notification-fg "#151515" #00
+set recolor "true"
+set recolor-lightcolor "#000000" #00
+set recolor-darkcolor "#E0E0E0" #06
+set recolor-reverse-video "true"
+set recolor-keephue "true"
+set render-loading "false"
+set scroll-step 50
+set show-hidden "true"
+set show-recent 20
+set window-title-home-tilde "true"
+set window-title-page "true"
+set statusbar-home-tilde "true"
+set window-icon-document "true"
+unmap f
+map f toggle_fullscreen
+map [fullscreen] f toggle_fullscreen]
+map b recolor
diff --git a/zshrc_stripped.sh b/zshrc_stripped.sh
new file mode 100644
index 0000000..4c60e2e
--- /dev/null
+++ b/zshrc_stripped.sh
@@ -0,0 +1,114 @@
+#!/usr/bin/env zsh
+
+alias "$SHELL"="echo $SHELL"
+alias la="ls -A"
+alias ee="nautilus ."
+alias updaterc="cp ~/scripts/.zshrc ~/.zshrc"
+alias fixvimrc='cp ~/scripts/.vimrc ~/.vimrc'
+alias fixtmuxrc='cp ~/scripts/.tmux.conf ~/.tmux.conf'
+alias fixtmuxpowerline='cp ~/scripts/default.sh ~/tmux-powerline/themes/default.sh'
+alias fixctagsrc='cp ~/scripts/.ctags ~/.ctags'
+alias fixtvrc='cp ~/scripts/.tvrc ~/.tvrc'
+alias tmuxpowerline='vim ~/scripts/default.sh'
+alias lss="ls -s"
+alias speedtest="curl -o /dev/null http://speedtest.sea01.softlayer.com/downloads/test100.zip"
+alias zshrc="vim ~/scripts/.zshrc"
+alias vimrc="vim ~/scripts/.vimrc"
+alias tmuxrc="vim ~/scripts/.tmux.conf"
+alias zshtheme="vim ~/scripts/devi.zsh-theme"
+alias quit="exit"
+alias xx="dtrx"
+alias angband="/home/bloodstalker/angband-4.1.0/angband-master/src/angband"
+alias startdocker="sudo systemctl start docker"
+alias vv="vim"
+alias mm="cmatrix -s -C blue"
+alias contest="ping 4.2.2.4 -c 7; ping google.com -c 7"
+alias solide="vim ~/scripts/makefile"
+alias dropsolide="cp ~/scripts/makefile ./"
+alias genjctags="find . -type f -iregex \".*\.js$\" -not -path \"./node_modules/*\" -exec jsctags {} -f \; | sed '/^$/d' | sort > tags"
+alias isup="ps -aux | grep "
+alias ipfsd="ipfs daemon > /dev/null 2>&1 &; disown"
+alias i3rc="vim ~/scripts/.config/i3/config"
+alias fixi3rc="cp ~/scripts/.config/i3/config ~/.config/i3/config && i3-msg restart"
+alias muttrc="vim ~/scripts/.muttrc"
+alias fixmuttrc="cp ~/scripts/.muttrc ~/.muttrc"
+alias dropcmake="cp ~/scripts/makefilec ./makefile"
+alias dropcppmake="cp ~/scripts/makefilecpp ./makefile"
+alias droppy="cp ~/scripts/python/main.py ./main.py"
+alias diff="colordiff"
+alias yy="~/scripts/hived"
+alias fixurls="cp ~/scripts/urls ~/.newsbeuter/urls"
+alias qtrc="vim ~/scripts/qtbrowser/config.py"
+alias fixqtrc="cp ~/scripts/qtbrowser/config.py ~/.config/qutebrowser/config.py"
+alias dropcextra="cp ~/scripts/c/devi_extra.h ./devi_extra.h"
+alias dropcmain="cp ~/scripts/c/main.c ./"
+alias dropcppmain="cp ~/scripts/c/main.cpp ./"
+alias tg="telegram-cli"
+alias telebot="/home/bloodstalker/scripts/telebot.py > /dev/null 2>&1 &"
+alias dw="~/df/df_linux/df"
+alias clean="clear"
+alias hplovecraft="lynx http://www.hplovecraft.com/writings/texts/"
+alias casmith="lynx http://www.eldritchdark.com/writings/short-stories/"
+alias tt="transmission-cli -u 1 -w ~/winshare/"
+alias mv="mv -i"
+alias cp="cp -i"
+alias nuke="rm -rf * .[!.]* ..?*"
+alias lynx="lynx -lss ~/scripts/lynx.lss -cfg ~/scripts/lynx.cfg -prettysrc"
+alias bruiser="bruiser --history ~/.bruiser/history.lua"
+alias digg="dig && clear"
+alias ogg="ogg123"
+alias jupyterlocal="jupyter notebook --NotebookApp.allow_origin='https://colab.research.google.com' --port=8775"
+alias mupdf="/home/bloodstalker/extra/mupdf/build/release/mupdf-x11 -D red -P black -I"
+alias googler="~/extra/googler/googler --colors GKmexy -c us -l en --count 7 --exact "
+alias ddgr="ddgr --colorize always -r us-en -n 15"
+alias pirate-get="pirate-get -S ~/magnets/"
+alias vps="ssh 5.56.132.89 -l ubuntu"
+alias pytags="ctags --fields=+l --languages=python --python-kinds=-iv -R ."
+alias v="vim"
+alias kshrc="vim ~/scripts/.kshrc"
+alias fixkshrc="cp ~/scripts/.kshrc ~/.kshrc"
+alias rangerrc="vim ~/scripts/.config/ranger/rc.conf"
+alias fixrangerrc="cp ~/scripts/.config/ranger/rc.conf ~/.config/ranger/rc.conf"
+alias zathurarc="vim ~/scripts/zathurarc"
+alias fixzathurarc="cp ~/scripts/zathurarc ~/.config/zathura/"
+
+function math {
+ echo $(($@))
+}
+
+REPORTTIME=4
+STARDICT_DATA_DIR="/home/bloodstalker/.stardict"
+export STARDICT_DATA_DIR
+alias def="sdcv --color"
+
+export LESS='-R'
+export LESSOPEN='|~/scripts/lesscolor.sh %s'
+
+export PATH=$PATH:/home/bloodstalker/extra/cov-analysis-linux64-2019.03/bin
+export PATH=:$PATH:/home/bloodstalker/extra/llvm-11/llvm-project/build/bin
+export PATH=:$PATH:/home/bloodstalker/extra/llvm-11/llvm-project/build/lib
+export PATH=:$PATH:/home/bloodstalker/arcanist/arcanist/bin
+export PATH=:$PATH:/home/bloodstalker/devi/abbatoir/hole58/solidity_0.4.18/build/solc
+export PATH=:$PATH:/home/bloodstalker/binaryen/bin
+export PATH=:$PATH:/home/bloodstalker/extra/go-ethereum/build/bin
+export PATH=:$PATH:/home/bloodstalker/.cargo/bin
+export PATH=:$PATH:/home/bloodstalker/extra/parity/target/release
+export PATH=:$PATH:/home/bloodstalker/extra/wasm-jit-prototype/build/bin
+export PATH=:$PATH:/home/bloodstalker/scripts/bin
+export PATH=:$PATH:/home/bloodstalker/extra/android-ndk/android-ndk-r16b
+export PATH=:$PATH:/home/bloodstalker/.cargo/bin/racer
+export PATH=:$PATH:/home/bloodstalker/extra/phantomjs-2.1.1-linux-i686/bin
+export PATH=:$PATH:/home/bloodstalker/rigetti/forest-sdk_2.0.1-linux-barebones
+export PATH=:$PATH:/home/bloodstalker/extra/tg/bin
+export PATH=:$PATH:/home/bloodstalker/extra/Nim/bin
+export PATH=:$PATH:/home/bloodstalker/extra/geckodriver
+export PATH=:$PATH:/home/bloodstalker/extra/cppcheck
+export PATH=:$PATH:/home/bloodstalker/extra/binaryen-version_91
+export PATH=:$PATH:/home/bloodstalker/extra/wabt-1.0.13/
+export PATH=:$PATH:/home/bloodstalker/extra/emscripten
+export PATH=:$PATH:/home/bloodstalker/extra/emscripten/clang/tag-e1.39.11/build_tag-e1.39.11_64/bin
+export PATH=:$PATH:/home/bloodstalker/extra/emscripten/node/8.9.1_64bit/bin
+export PATH=:$PATH:/home/bloodstalker/extra/emscripten/emscripten/tag-1.39.11
+
+export EDITOR=vim
+export BROWSER=lynx