dotfiles

Beau's configuration files
Log | Files | Refs

commit d68d09fa5e71b41d6504c9031339167ffad41803
Author: C. Beau Hilton <cbeauhilton@gmail.com>
Date:   Sun, 21 Jun 2020 06:35:02 -0500

test

Diffstat:
A.exhaust/profile.bak | 86+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.exhaust/progs.csv | 90+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.gitignore | 25+++++++++++++++++++++++++
AQtProject.conf | 8++++++++
AR/Renviron | 4++++
AR/Rprofile | 9+++++++++
ARStudio/desktop.ini | 6++++++
AX11/xinitrc | 9+++++++++
Aaliasrc | 39+++++++++++++++++++++++++++++++++++++++
Aautostart | 157+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abash/.bash_logout | 3+++
Abash/.bash_profile | 2++
Abash/.bashrc | 37+++++++++++++++++++++++++++++++++++++
Abmdirs | 10++++++++++
Abmfiles | 13+++++++++++++
Acalcurse/conf | 33+++++++++++++++++++++++++++++++++
Acalcurse/keys | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aconda/.condarc | 7+++++++
Aconfigstore/update-notifier-npm.json | 5+++++
Acron/crontab.bak | 33+++++++++++++++++++++++++++++++++
Adunst/dunstrc | 152+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aemoji | 1644+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Afontawesome | 1483+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Afontconfig/fonts.conf | 30++++++++++++++++++++++++++++++
Agdfuse/bh/config | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agdfuse/cwru/config | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agdfuse/default/config | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Agit/config | 3+++
Agtk-2.0/gtkfilechooser.ini | 11+++++++++++
Agtk-2.0/gtkrc-2.0 | 19+++++++++++++++++++
Agtk-3.0/settings.ini | 16++++++++++++++++
Ahtop/htoprc | 26++++++++++++++++++++++++++
Ainputrc | 19+++++++++++++++++++
Aisync/mbsyncrc | 25+++++++++++++++++++++++++
Ajupyter/profile_default/startup/README | 11+++++++++++
Amimeapps.list | 11+++++++++++
Ampd/mpd.conf | 28++++++++++++++++++++++++++++
Ampv/input.conf | 199+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Amsmtp/config | 14++++++++++++++
Amutt/.mailsynclastrun | 0
Amutt/accounts/1-gmail.muttrc | 35+++++++++++++++++++++++++++++++++++
Amutt/muttrc | 17+++++++++++++++++
Ancmpcpp/bindings | 624+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ancmpcpp/config | 600+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aneofetch/config.conf | 849+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Anewsboat/config | 41+++++++++++++++++++++++++++++++++++++++++
Anewsboat/read_articles | 2483++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Anewsboat/urls | 41+++++++++++++++++++++++++++++++++++++++++
Anotmuch-config | 14++++++++++++++
Anpm/npmrc | 4++++
Anvim/.netrwhist | 3+++
Anvim/autoload/plug.vim | 2597+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Anvim/autoload/plug.vim.old | 2541+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Anvim/cache/citation_vim_cache | 0
Anvim/colors/selenized_bw.vim | 723+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Anvim/init.vim | 238+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Anvim/spell/en.utf-8.add | 12++++++++++++
Anvim/spell/en.utf-8.add.spl | 0
Apam/pam_environment | 3+++
Aprofile | 86+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Arclone/rclone.conf | 10++++++++++
Ashortcutrc | 23+++++++++++++++++++++++
Asxhkd/sxhkdrc | 150+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asxiv/exec/key-handler | 32++++++++++++++++++++++++++++++++
Asystemd/user/ssh-agent.service | 23+++++++++++++++++++++++
Atmux/tmux.conf | 49+++++++++++++++++++++++++++++++++++++++++++++++++
Atuir/mailcap | 70++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atuir/tuir.cfg | 186+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Auser-dirs.dirs | 1+
Avlc/vlc-qt-interface.conf | 24++++++++++++++++++++++++
Avlc/vlcrc | 4814+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Awall.png | 0
Awget/wgetrc | 1+
Axprofile | 14++++++++++++++
Axterm/selenized-black.xdefaults | 24++++++++++++++++++++++++
Ayoutube-dl/config | 8++++++++
Azathura/zathurarc | 12++++++++++++
Azsh/.zcompdump | 1968+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Azsh/.zshrc | 159+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
79 files changed, 22999 insertions(+), 0 deletions(-)

diff --git a/.exhaust/profile.bak b/.exhaust/profile.bak @@ -0,0 +1,86 @@ +#!/usr/bin/env sh + +# Profile file. Runs on login. + +# Adds ruby to path +PATH="$PATH:$(ruby -e 'puts Gem.user_dir')/bin" + +# Adds `~/.local/bin/` and all subdirectories to $PATH +export PATH="$PATH:$(du "$HOME/.local/bin/" | cut -f2 | tr '\n' ':' | sed 's/:*$//')" + +export EDITOR="nvim" +export TERMINAL="st" +export BROWSER="chromium" +export READER="zathura" +export FILE="nnn" + +export XDG_CONFIG_HOME="$HOME/.config" +export XDG_DATA_HOME="$HOME/.local/share" +export XDG_CACHE_HOME="$HOME/.cache" + +# export XAUTHORITY="$XDG_RUNTIME_DIR/Xauthority" # mess with this sometime + +export BIB="$HOME/repos/life/dox/acad.bib" +export REFER="$HOME/repos/life/dox/thesis/thesis.refer" + +export CARGO_HOME="$XDG_DATA_HOME"/cargo +export GEM_HOME="$XDG_DATA_HOME"/gem +export GEM_SPEC_CACHE="$XDG_CACHE_HOME"/gem +export NPM_CONFIG_USERCONFIG=$XDG_CONFIG_HOME/npm/npmrc + +export LESSHISTFILE="-" +export SUDO_ASKPASS="$HOME/.local/bin/tools/dmenupass" +export NOTMUCH_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/notmuch-config" +export GTK2_RC_FILES="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-2.0/gtkrc-2.0" +export ZDOTDIR="${XDG_CONFIG_HOME:-$HOME/.config}/zsh" +export WGETRC="${XDG_CONFIG_HOME:-$HOME/.config}/wget/wgetrc" +export INPUTRC="${XDG_CONFIG_HOME:-$HOME/.config}/inputrc" +export PASSWORD_STORE_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/password-store" +export XINITRC="$XDG_CONFIG_HOME"/X11/xinitrc +export WAKATIME_HOME="$XDG_CONFIG_HOME"/wakatime +export MAILCAPS="$XDG_CONFIG_HOME"/tuir/mailcap + +export CONDARC="${XDG_CONFIG_HOME:-$HOME/.config}/conda/.condarc" +export IPYTHONDIR="${XDG_CONFIG_HOME:-$HOME/.config}/jupyter" +export JUPYTER_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/jupyter" + +export R_ENVIRON_USER="${XDG_CONFIG_HOME:-$HOME/.config}/R/Renviron" + +export GPG_TTY=$(tty) +export GPG_AGENT_INFO="" + +# less/man colors +export LESS=-R +export LESS_TERMCAP_mb="$(printf '%b' '')"; a="${a%_}" +export LESS_TERMCAP_md="$(printf '%b' '')"; a="${a%_}" +export LESS_TERMCAP_me="$(printf '%b' '')"; a="${a%_}" +export LESS_TERMCAP_so="$(printf '%b' '')"; a="${a%_}" +export LESS_TERMCAP_se="$(printf '%b' '')"; a="${a%_}" +export LESS_TERMCAP_us="$(printf '%b' '')"; a="${a%_}" +export LESS_TERMCAP_ue="$(printf '%b' '')"; a="${a%_}" + +mpd >/dev/null 2>&1 & + +[ ! -f ~/.config/shortcutrc ] && shortcuts >/dev/null 2>&1 + + +# Start SSH Agent automatically on login +if [ -z "$SSH_AUTH_SOCK" ] +then + # Check for a currently running instance of the agent + RUNNING_AGENT="`ps -ax | grep 'ssh-agent -s' | grep -v grep | wc -l | tr -d '[:space:]'`" + if [ "$RUNNING_AGENT" = "0" ] + then + # Launch a new instance of the agent + ssh-agent -s &> .ssh/ssh-agent + fi + eval `cat .ssh/ssh-agent` +fi + +# Start graphical server on tty1 if not already running. +[ "$(tty)" = "/dev/tty1" ] && ! ps -e | grep -qw Xorg && exec startx "$XDG_CONFIG_HOME/X11/xinitrc" -- + +# Switch escape and caps if tty: +sudo -n loadkeys ~/.local/bin/ttymaps.kmap 2>/dev/null + +gpg-connect-agent updatestartuptty /bye >/dev/null diff --git a/.exhaust/progs.csv b/.exhaust/progs.csv @@ -0,0 +1,90 @@ +#TAG,NAME IN REPO (or git url),PURPOSE (should be a verb phrase to sound right while installing) +,xorg-server,"is the graphical server." +,xorg-xwininfo,"allows querying information about windows." +,xorg-xinit,"starts the graphical server." +,sxhkd,"binds key." +,ttf-inconsolata,"is the monospace font of LARBS." +,ttf-linux-libertine,"provides the sans and serif fonts for LARBS." +,ed,"is the standard editor!" +,tree,"lists directory contents like trees." +,arandr,"is a UI for screen adjustment." +,bc,"is used for a dropdown calculator." +,calcurse,"is a lightweight terminal-based calendar." +,xcompmgr,"is for transparency and removing screen-tearing." +,xorg-xprop,"is a tool for detecting window properties." +,dosfstools,"allows your computer to access dos-like filesystems." +,libnotify,"allows desktop notifications." +,dunst,"is a suckless notification system." +,exfat-utils,"allows management of FAT drives." +,sxiv,"is a minimalist image viewer." +,xwallpaper,"sets the wallpaper." +,ffmpeg,"can record and splice video and audio on the command line." +,gnome-keyring,"serves as the system keyring." +A,gtk-theme-arc-gruvbox-git,"gives the dark GTK theme used in LARBS." +,neovim,"a tidier vim with some useful features" +,i3lock,"is the screen lock." +,mpd,"is a lightweight music daemon." +,mpc,"is a terminal interface for mpd." +,mpv,"is the patrician's choice video player." +,ncmpcpp,"a ncurses interface for music with multiple formats and a powerful tag editor." +,networkmanager,"does exactly what it sounds like." +,newsboat,"is a terminal RSS client." +,chromium,"is the only program on LARBS your girlfriend has ever heard of." +,ttf-joypixels,"is a package that gives the system unicode symbols and emojis used in the status bar and elsewhere." +A,ttf-symbola,"provides unicode and emoji symbols." +,ntfs-3g,"allows accessing NTFS partitions." +,pulseaudio,"is the audio system (>inb4 bloat)." +,pulseaudio-alsa,"is an audio interface with ALSA." +,pulsemixer,"is an intuitive ncurses audio controller." +,imagemagick,"is a terminal image-manipulator providing some convenient shortcuts and the lockscreen in LARBS." +A,sc-im,"is an Excel-like terminal spreadsheet manager." +A,htop-vim-git,"provides system usage information and displays processes." +,maim,"can take quick screenshots at your request." +,socat,"is a socket utility." +,tmux,"is a terminal multiplexer and the dropdown window in LARBS." +,unclutter,"hides an inactive mouse." +,unrar,"extracts rar's." +,unzip,"unzips zips." +A,urlscan,"parses URLs in the terminal allowing keyboard-based selection." +,w3m,"is a terminal browser which can also view images." +,xcape,"gives the special escape/super mappings of LARBS." +,xclip,"allows for copying and pasting from the command line." +,xdotool,"provides window action utilities on the command line." +,xorg-xdpyinfo,"aids with resolution determination and screen recording." +,youtube-dl,"can download any YouTube video (or playlist or channel) when given the link." +,zathura,"is a pdf viewer with vim-like bindings." +,zathura-djvu,"gives zathura the ability to read .djvu files." +,zathura-pdf-mupdf,"allows mupdf pdf compatibility in zathura." +A,python-ueberzug,"generates image previews in vifm and other terminal programs." +,poppler,"manipulates .pdfs and gives .pdf previews and other .pdf functions." +,mediainfo,"shows audio and video information and is used by vifm as well." +,atool,"manages and gives information about archives." +,fzf,"is a fuzzy finder tool." +,highlight,"can highlight code output." +,xorg-xbacklight,"enables changing screen brightness levels." +A,task-spooler,"queues commands or files for download." +A,simple-mtpfs,"enables the mounting of cell phones." +G,https://github.com/lukesmithxyz/dmenu.git,"runs commands and provides a UI for selection." +G,https://github.com/lukesmithxyz/st.git,"is Luke's custom build of suckless's terminal emulator." +,docx2txt,"enables .docx file previews in vifm." +,odt2txt,"enables .odt file previews in vifm." +A,zoom,"keeps you from skipping out on all those hot vid confs." +,qrencode,"makes QR codes." +,pandoc-citeproc,"does the cites." +,r,"is for statistics and other goodies." +,cronie,"makes your cronjobs easy-peasy." +,anki,"is for remembering all the things." +,texlive-most,"is a huge package with all the LaTeX." +,feh,"is another nice image viewer." +,python-pillow,"is an image library for Python." +,python-yaml,"is what it sounds like." +,python-pybtex,"also does the cites." +,figlet,"makes text into text pics." +,ncdu,"n-curses disc utility." +,system-config-printer,"makes it easy to install printers." +A,mutt-wizard-git,"installs and configures mutt for email." +A,visual-studio-code-insiders,"is a bloated IDE that I still like." +,tlp,"is THE power management tool." +,tlp-rdw,"is a set of tools for power managing radio devices." +,tcl,"is required for some R packages and other things." +,tk,"is required for some R packages and other things." diff --git a/.gitignore b/.gitignore @@ -0,0 +1,25 @@ +gnupg/ +VirtualBox/ +nvim/plugged/ +odrive/ +pulse/ +chromium/ +transmission/ +coc/ +Code/ +GIMP/ +menus/ +calcurse/notes/ +calcurse/apts +calcurse/todo +calcurse/config +mpd/database +mpd/log +mpd/pid +mpd/state +mpd/sticker.sql +pam/pam_gnupg +*.sqlite +*.*history +*.log + diff --git a/QtProject.conf b/QtProject.conf @@ -0,0 +1,8 @@ +[FileDialog] +history=file:///home/beau/dl, file:///home/beau/vids/mov, file:///home/beau/game, file:///home/beau/.local/share, file:///home/beau/.local/share/virtualbox +lastVisited=file:///home/beau/dl +qtVersion=5.15.0 +shortcuts=file:, file:///home/beau +sidebarWidth=82 +treeViewHeader=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1\xd9\0\0\0\x4\x1\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x4\0\0\0\xe5\0\0\0\x1\0\0\0\0\0\0\0O\0\0\0\x1\0\0\0\0\0\0\0O\0\0\0\x1\0\0\0\0\0\0\0V\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\xff\xff\xff\xff) +viewMode=Detail diff --git a/R/Renviron b/R/Renviron @@ -0,0 +1,4 @@ +CENSUS_API_KEY='c92c0a70527edc1d91a8c7272af0cb463a4251cf' +R_PROFILE_USER =${XDG_CONFIG_HOME:-$HOME/.config}/R/Rprofile +R_LIBS_USER = ${XDG_CONFIG_HOME:-$HOME/.config}/R/library +R_HISTFILE = ${XDG_CONFIG_HOME:-$HOME/.config}/R/history.Rhistory diff --git a/R/Rprofile b/R/Rprofile @@ -0,0 +1,9 @@ +local({ + repos <- c(CRAN = "https://cran.case.edu") + if (.Platform$OS.type == "windows") { + repos["CRANextra"] <- "https://www.stats.ox.ac.uk/pub/RWin" + } + options(repos = c(repos, getOption("repos"))) + options(browser = "reload_html") +}) + diff --git a/RStudio/desktop.ini b/RStudio/desktop.ini @@ -0,0 +1,6 @@ +[General] +desktop.renderingEngine=auto +font.fixedWidth=Inconsolata + +[mainwindow] +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\x5U\0\0\x2\xff\0\0\0\x2\0\0\0\x16\0\0\x5S\0\0\x2\xfd\0\0\0\0\0\0\0\0\x5V\0\0\0\x2\0\0\0\x16\0\0\x5S\0\0\x2\xfd) diff --git a/X11/xinitrc b/X11/xinitrc @@ -0,0 +1,9 @@ +#!/usr/bin/env sh + +[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/xprofile" ] && . "${XDG_CONFIG_HOME:-$HOME/.config}/xprofile" + +while true; do + #cwm 2> /dev/null + dwm 2> /dev/null + dwmblocks 2> /dev/null +done diff --git a/aliasrc b/aliasrc @@ -0,0 +1,39 @@ +#!/usr/bin/env sh +alias ka="killall" \ + mkd="mkdir -pv" \ + mpv="mpv --input-ipc-server=/tmp/mpvsoc$(date +%s)" \ + calcurse="calcurse -D ~/.config/calcurse" \ + magit="nvim -c MagitOnly" \ + p="sudo pacman" \ + SS="sudo systemctl" \ + f="$FILE" \ + g="git" \ + gp="git push" \ + trem="transmission-remote" \ + e="$EDITOR" \ + v="$EDITOR" \ + x="sxiv -ft *" \ + sdn="sudo shutdown -h now" \ + gua="git remote | xargs -L1 git push --all" \ + ls="ls -hN --color=auto --group-directories-first" \ + grep="grep --color=auto" \ + diff="diff --color=auto" \ + ccat="highlight --out-format=ansi" \ + yt="youtube-dl --add-metadata -i -o '%(upload_date)s-%(title)s.%(ext)s'" \ + yta="yt -x -f bestaudio/best" \ + YT="youtube-viewer" \ + ref="shortcuts >/dev/null; source ~/.config/shortcutrc" \ + upc="sudo pacman -Syu" \ + lsp="pacman -Qett --color=always | less" \ + ffmpeg="ffmpeg -hide_banner" \ + abook="abook --config $XDG_CONFIG_HOME/abook/abookrc --datafile $XDG_DATA_HOME/abook/addressbook" \ + mbsync="mbsync -c ${XDG_CONFIG_HOME:-$HOME/.config}/isync/mbsyncrc" \ + tmux="tmux -f ${XDG_CONFIG_HOME:-$HOME/.config}/tmux/tmux.conf" \ + wget="wget --hsts-file=$XDG_CACHE_HOME/wget-hsts" + + + + +command -v nvim >/dev/null && alias vim="nvim" vimdiff="nvim -d" # Use neovim for vim if present. + +vf() { fzf | xargs -r -I % $EDITOR % ;} diff --git a/autostart b/autostart @@ -0,0 +1,157 @@ +[Desktop Entry] +Type=Application +Name[af]=SSH-sleutelagent +Name[ar]=عميل مفاتيح SSH +Name[as]=SSH কি সহায়ক +Name[ast]=Axente de claves SSH +Name[be]=SSH-агент ключоў +Name[bg]=Агентът на SSH за ключове +Name[bn]=SSH কী এজেন্ট +Name[bn_IN]=SSH কি এজেন্ট +Name[bs]=Agent za SSH ključeve +Name[ca]=Agent de claus SSH +Name[ca@valencia]=Agent de claus SSH +Name[cs]=Agent klíčů SSH +Name[da]=SSH-nøgleagent +Name[de]=SSH-Schlüsselagent +Name[el]=Πράκτορας κλειδιού SSH +Name[en_GB]=SSH Key Agent +Name[eo]=SSH-ŝlosila agento +Name[es]=Agente de claves SSH +Name[et]=SSH-võtmete agent +Name[eu]=SSH gako-agentea +Name[fa]=عامل کلید SSH +Name[fi]=SSH-avainten agentti +Name[fr]=Agent de clés SSH +Name[fur]=Agjent clâfs SSH +Name[gd]=Àidseant iuchair SSH +Name[gl]=Axente de chave SSH +Name[gu]=SSH કી ઍજન્ટ +Name[he]=סוכן מפתחות SSH +Name[hi]=AFS कुँजी प्रतिनिधि +Name[hr]=Agent SSH ključa +Name[hu]=SSH-kulcs ügynök +Name[id]=Agen Kunci SSH +Name[it]=Agente chiavi SSH +Name[ja]=SSH 鍵エージェント +Name[kk]=SSH кілттер агенті +Name[km]=ភ្នាក់ងារ​សោ SSH +Name[kn]=SSH ಕೀಲಿ ಮಧ್ಯವರ್ತಿ +Name[ko]=SSH 키 에이전트 +Name[lt]=SSH raktų tarnyba +Name[lv]=SSH atslēgu aģents +Name[mjw]=SSH Key Agent +Name[mk]=Агент за SSH клучеви +Name[ml]=എസ്എസ്എച് കീ ഏജന്റ് +Name[mr]=SSH कि एजंट +Name[ms]=Agen Kekunci SSH +Name[nb]=SSH-nøkkelagent +Name[nl]=SSH-sleutelagent +Name[nn]=Nøkkelagent for SSH +Name[oc]=Agent de claus SSH +Name[or]=SSH କି ସଦସ୍ୟ +Name[pa]=SSH ਕੁੰਜੀ ਏਜੰਟ +Name[pl]=Agent kluczy SSH +Name[pt]=Agente de chaves SSH +Name[pt_BR]=Agente de chaves SSH +Name[ro]=Agent pentru chei SSH +Name[ru]=Агент ключей SSH +Name[sk]=Agent kľúčov SSH +Name[sl]=Agent ključev SSH +Name[sr]=Агент за ССХ кључеве +Name[sr@latin]=Agent za SSH ključeve +Name[sv]=SSH-nyckelagent +Name[ta]=SSH முகவர் +Name[te]=SSH కీ వాహకము +Name[th]=เอเจนต์กุญแจ SSH +Name[tr]=SSH Anahtar Aracı +Name[ug]=SSH ئاچقۇچ ياردەمچىسى +Name[uk]=Агент ключів SSH +Name[vi]=Đại diện khóa SSH +Name[zh_CN]=SSH 密钥代理 +Name[zh_HK]=SSH 密碼匙代理程式 +Name[zh_TW]=SSH 金鑰代理程式 +Name=SSH Key Agent +Comment[af]=GNOME-sleutelring: SSH-agent +Comment[ar]=حلقة مفاتيح جنوم: عميل SSH +Comment[as]=GNOME Keyring: SSH সহায়ক +Comment[ast]=Depósitu de claves de GNOME: axente SSH +Comment[be]=Вязкі ключоў GNOME: SSH-агент +Comment[bg]=Ключодържател на GNOME: агент на SSH +Comment[bn]=GNOME কী রিং: SSH এজেন্ট +Comment[bn_IN]=GNOME Keyring: SSH এজেন্ট +Comment[bs]=Gnomovi privjesci: SSH agent +Comment[ca]=Anell de claus del GNOME: agent SSH +Comment[ca@valencia]=Anell de claus del GNOME: agent SSH +Comment[cs]=Klíčenka GNOME: Agent SSH +Comment[da]=GNOME-nøgleringsdæmon: SSH-agent +Comment[de]=GNOME-Schlüsselbunddienst: SSH-Agent +Comment[el]=Κλειδοθήκη GNOME: Πράκτορας SSH +Comment[en_GB]=GNOME Keyring: SSH Agent +Comment[eo]=GNOME Ŝlosilaro: SSH-agento +Comment[es]=Depósito de claves de GNOME: agente SSH +Comment[et]=GNOME võtmerõngas: SSH-agent +Comment[eu]=GNOMEren gako-sorta: SSH agentea +Comment[fa]=دسته‌کلید گنوم: عامل SSH +Comment[fi]=Gnomen avainnippu: SSH-agentti +Comment[fr]=Trousseau de clés de GNOME : agent SSH +Comment[fur]=Puarteclâfs di GNOME: agjent SSH +Comment[gd]=Dul-iuchrach: Àidseant SSH +Comment[gl]=GNOME Keyring: Axente SSH +Comment[gu]=GNOME કીરીંગ: SSH ઍજન્ટ +Comment[he]=קבוצת מפתחות של GNOME: סוכן SSH +Comment[hi]=गनोम कीरिंग: SSH प्रतिनिधि +Comment[hr]=GNOME skup ključeva: SSH agent +Comment[hu]=GNOME kulcstartó – SSH-ügynök +Comment[id]=Ring Kunci GNOME: Agen SSH +Comment[it]=Portachiavi di GNOME: agente SSH +Comment[ja]=GNOME キーリング: SSH エージェント +Comment[kk]=GNOME Keyring: SSH агенті +Comment[km]=GNOME Keyring ៖ ភ្នាក់ងារ SSH +Comment[kn]=GNOME ಕೀಲಿಗೊಂಚಲು: SSH ಮಧ್ಯವರ್ತಿ +Comment[ko]=그놈 키 모음: SSH 에이전트 +Comment[lt]=GNOME raktinė: SSH tarnyba +Comment[lv]=GNOME atslēgu saišķis — SSH aģents +Comment[mjw]=GNOME Keyring: SSH Agent +Comment[mk]=Приврзок на GNOME: SSH агент +Comment[ml]=ഗ്നോം കീറിങ്: എസ്എസ്എച് ഏജന്റ് +Comment[mr]=GNOME किरिंग: SSH एजंट +Comment[ms]=GNOME Keyring: Agen SSH +Comment[nb]=GNOME nøkkelring: SSH-agent +Comment[ne]=जिनोम किरिङ : SSH एजेन्ट +Comment[nl]=Sleutelbos-service: SSH-agent +Comment[nn]=GNOME Nøkkelring: SSH-agent +Comment[oc]=Trossèl de claus GNOME : agent SSH +Comment[or]=GNOME କି ରିଙ୍ଗ: SSH ସଦସ୍ୟ +Comment[pa]=ਗਨੋਮ ਕੀਰਿੰਗ: SSH ਏਜੰਟ +Comment[pl]=Baza kluczy dla środowiska GNOME: agent SSH +Comment[pt]=GNOME Keyring: agente SSH +Comment[pt_BR]=Chaveiro do GNOME: Agente SSH +Comment[ro]=Inelul de chei GNOME: Agent SSH +Comment[ru]=Связка ключей GNOME: SSH-агент +Comment[sk]=SSH agent zväzku kľúčov GNOME +Comment[sl]=Zbirka ključev GNOME: agent SSH +Comment[sr]=Гномови привесци: ССХ агент +Comment[sr@latin]=Gnomovi privesci: SSH agent +Comment[sv]=GNOME-nyckelring: SSH-agent +Comment[ta]=GNOME கீரிங்: SSH முகவர் +Comment[te]=GNOME కీరింగ్: SSH వాహకం +Comment[th]=พวงกุญแจของ GNOME: เอเจนต์ SSH +Comment[tr]=GNOME Anahtarlığı: SSH Aracı +Comment[ug]=گىنوم ئاچقۇچ ھالقىسى:SSH ياردەمچىسى +Comment[uk]=Служба в'язки ключів GNOME: агент SSH +Comment[vi]=Chùm chìa khóa GNOME: Đại diện SSH +Comment[zh_CN]=GNOME 密钥环:SSH 代理 +Comment[zh_HK]=GNOME 密碼匙圈:SSH 代理程式 +Comment[zh_TW]=GNOME 鑰匙圈:SSH 代理程式 +Comment=GNOME Keyring: SSH Agent +Exec=/usr/bin/gnome-keyring-daemon --start --components=ssh +OnlyShowIn=GNOME;Unity;MATE;Cinnamon; +X-GNOME-Autostart-Phase=PreDisplayServer +X-GNOME-AutoRestart=false +X-GNOME-Autostart-Notify=true +X-GNOME-Bugzilla-Bugzilla=GNOME +X-GNOME-Bugzilla-Product=gnome-keyring +X-GNOME-Bugzilla-Component=general +X-GNOME-Bugzilla-Version=3.34.0 +Hidden=true diff --git a/bash/.bash_logout b/bash/.bash_logout @@ -0,0 +1,3 @@ +# +# ~/.bash_logout +# diff --git a/bash/.bash_profile b/bash/.bash_profile @@ -0,0 +1 @@ +.profile+ \ No newline at end of file diff --git a/bash/.bashrc b/bash/.bashrc @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +stty -ixon # Disable ctrl-s and ctrl-q. +shopt -s autocd #Allows you to cd into directory merely by typing the directory name. + +# Infinite history. +HISTSIZE= +HISTFILESIZE= + +export PS1="\[$(tput bold)\]\[$(tput setaf 1)\][\[$(tput setaf 3)\]\u\[$(tput setaf 2)\]@\[$(tput setaf 4)\]\h \[$(tput setaf 5)\]\W\[$(tput setaf 1)\]]\[$(tput setaf 7)\]\\$ \[$(tput sgr0)\]" + +[ -f "$HOME/.config/shortcutrc" ] && source "$HOME/.config/shortcutrc" # Load shortcut aliases +[ -f "$HOME/.config/aliasrc" ] && source "$HOME/.config/aliasrc" + +if [ ! -S ~/.ssh/ssh_auth_sock ]; then + eval `ssh-agent` + ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock +fi +export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock +ssh-add -l > /dev/null || ssh-add + +# export PASSWORD_STORE_GPG_OPTS="--pinentry-mode loopback --passphrase YOUR_PASSPHRASE" + +# >>> conda initialize >>> +# !! Contents within this block are managed by 'conda init' !! +__conda_setup="$('/home/beau/sci/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)" +if [ $? -eq 0 ]; then + eval "$__conda_setup" +else + if [ -f "/home/beau/sci/miniconda3/etc/profile.d/conda.sh" ]; then + . "/home/beau/sci/miniconda3/etc/profile.d/conda.sh" + else + export PATH="/home/beau/sci/miniconda3/bin:$PATH" + fi +fi +unset __conda_setup +# <<< conda initialize <<< + diff --git a/bmdirs b/bmdirs @@ -0,0 +1,10 @@ +# You can add comments to these files with # +h ~/ +d ~/dox +D ~/dl +m ~/tunes +pp ~/pix +vv ~/vids +cf ~/.config +sc ~/.local/bin +mn /mnt diff --git a/bmfiles b/bmfiles @@ -0,0 +1,13 @@ +bf ~/.config/bmfiles +bd ~/.config/bmdirs +cfb ~/.bashrc +cfa ~/.config/aliasrc +cfz ~/.zshrc +cfv ~/.config/nvim/init.vim +cfm ~/.config/mutt/muttrc +cfd ~/.Xdefaults +cfu ~/.config/newsboat/urls +cfn ~/.config/newsboat/config +cfmb ~/.config/ncmpcpp/bindings +cfmc ~/.config/ncmpcpp/config +cfk ~/.config/sxhkd/sxhkdrc diff --git a/calcurse/conf b/calcurse/conf @@ -0,0 +1,33 @@ +appearance.calendarview=monthly +appearance.compactpanels=no +appearance.defaultpanel=calendar +appearance.layout=7 +appearance.notifybar=yes +appearance.sidebarwidth=1 +appearance.theme=red on default +appearance.todoview=show-completed +daemon.enable=no +daemon.log=no +format.inputdate=1 +format.notifydate=%a %F +format.notifytime=%T +format.outputdate=%D +general.autogc=no +general.autosave=yes +general.confirmdelete=yes +general.confirmquit=no +general.firstdayofweek=sunday +general.periodicsave=0 +general.systemdialogs=no +notification.command=printf '\a' +notification.notifyall=flagged-only +notification.warning=300 +appearance.headerline=yes +appearance.eventseparator=yes +appearance.dayseparator=yes +appearance.emptyline=yes +appearance.emptyday=-- +appearance.headingpos=right-justified +format.dayheading=%B %e, %Y +general.multipledays=yes +general.systemevents=yes diff --git a/calcurse/keys b/calcurse/keys @@ -0,0 +1,55 @@ +# +# Calcurse keys configuration file +# +# In this file the keybindings used by Calcurse are defined. +# It is generated automatically by Calcurse and is maintained +# via the key configuration menu of the interactive user +# interface. It should not be edited directly. + +generic-cancel ESC +generic-select SPC +generic-credits @ +generic-help ? +generic-quit q Q +generic-save s S ^S +generic-reload R +generic-copy c +generic-paste p ^V +generic-change-view TAB +generic-import i I +generic-export x X +generic-goto g G +generic-other-cmd o O +generic-config-menu C +generic-redraw ^R +generic-add-appt ^A +generic-add-todo ^T +generic-prev-day T ^H +generic-next-day t ^L +generic-prev-week W ^K +generic-next-week w RET +generic-prev-month M +generic-next-month m +generic-prev-year Y +generic-next-year y +generic-scroll-down ^N +generic-scroll-up ^P +generic-goto-today ^G +generic-command : +move-right l L RGT +move-left h H LFT +move-down j J DWN +move-up k K UP +start-of-week 0 +end-of-week $ +add-item a A +del-item d D +edit-item e E +view-item v V +pipe-item | +flag-item ! +repeat r +edit-note n N +view-note > +raise-priority + +lower-priority - diff --git a/conda/.condarc b/conda/.condarc @@ -0,0 +1,7 @@ +pkgs_dirs = $XDG_DATA_HOME/conda/pkgs +envs_dirs = $XDG_DATA_HOME/conda/envs +auto_activate_base: false +channel_priority: strict +channels: + - conda-forge + - defaults diff --git a/configstore/update-notifier-npm.json b/configstore/update-notifier-npm.json @@ -0,0 +1,4 @@ +{ + "optOut": false, + "lastUpdateCheck": 1588593812780 +}+ \ No newline at end of file diff --git a/cron/crontab.bak b/cron/crontab.bak @@ -0,0 +1,33 @@ +### updates ## +# sync mail +*/10 * * * * export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus; export DISPLAY=:0; . $HOME/.profile; /usr/bin/mailsync +# update music library +0,15,30,45 * * * * /usr/bin/mpc update +# download packages (but do not install) +5 */3 * * * eval "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus"; /home/beau/.local/bin/cron/checkup +# update newsboat +10 */2 * * * eval "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus"; /home/beau/.local/bin/cron/newsup + +### backups ### + +# crontab backup +9 15 * * * crontab -l > .config/cron/crontab.bak +# newsboat read articles backup +3 13 * * * newsboat -E "/home/beau/.config/newsboat/read_articles" +# newsboat sync read articles +2 14 * * * newsboat -I "/home/beau/.config/newsboat/read_articles" +# regularly git push dotfiles +7 16 * * * cd /home/beau/ ; git add -u ; git commit -m "crontab autocommit" ; git push + +################===YT-DL===################ +# Luke Smith +#* */2 * * * cd /home/beau/vids/instructional/luke_smith && /bin/youtube-dl --add-metadata --download-archive '/home/beau/vids/instructional/luke_smith/downloadedxyz.txt' -f best -ciw -o "\%(upload_date)s_\%(uploader)s_\%(title)s.\%(ext)s" -v https://www.youtube.com/channel/UC2eYFnH61tmytImy1mTYvhA/ && rm *.part +# fastai +#* * */2 * * mkdir -p /home/beau/vids/instructional/fastai && cd /home/beau/vids/instructional/fastai && /bin/youtube-dl --add-metadata --download-archive '/home/beau/vids/instructional/fastai/downloadedfai.txt' -f best -ciw -o "\%(upload_date)s_\%(uploader)s_\%(title)s.\%(ext)s" -v https://www.youtube.com/playlist?list=PLfYUBJiXbdtSIJb-Qd3pw0cqCbkGeS0xn && rm *.part +################===========################ +# +# * * * * * export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus; export DISPLAY=:0; . $HOME/.profile; ~/.scripts/cron/newsup +# */4 * * * * export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus; export DISPLAY=:0; . $HOME/.profile; ~/.scripts/cron/cronbat +# */31 * * * * export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus; export DISPLAY=:0; . $HOME/.profile; ~/.scripts/cron/getforecast +# 7 */3 * * * export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus; export DISPLAY=:0; . $HOME/.profile; ~/.scripts/cron/checkup +# * * * * * ~/.scripts/cron/getforecast && /bin/echo "getforecast works!" >> /tmp/file && /bin/date >> /tmp/file diff --git a/dunst/dunstrc b/dunst/dunstrc @@ -0,0 +1,152 @@ +[global] + monitor = 0 + follow = keyboard + geometry = "350x5-0+24" + indicate_hidden = yes + shrink = yes + transparency = 20 + notification_height = 0 + separator_height = 2 + padding = 0 + horizontal_padding = 8 + frame_width = 3 + frame_color = "#252525" + + # Define a color for the separator. + # possible values are: + # * auto: dunst tries to find a color fitting to the background; + # * foreground: use the same color as the foreground; + # * frame: use the same color as the frame; + # * anything else will be interpreted as a X color. + separator_color = frame + + # Sort messages by urgency. + sort = yes + + idle_threshold = 120 + font = Monospace 14 + line_height = 0 + markup = full + + # The format of the message. Possible variables are: + # %a appname + # %s summary + # %b body + # %i iconname (including its path) + # %I iconname (without its path) + # %p progress value if set ([ 0%] to [100%]) or nothing + # %n progress value if set without any extra characters + # %% Literal % + # Markup is allowed + format = "<b>%s</b>\n%b" + + alignment = left + show_age_threshold = 60 + word_wrap = yes + ellipsize = middle + ignore_newline = no + stack_duplicates = true + hide_duplicate_count = true + show_indicators = yes + icon_position = left + max_icon_size = 40 + #icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/:/usr/share/icons/Adwaita/256x256/status/ + sticky_history = yes + history_length = 20 + dmenu = /usr/bin/dmenu -p dunst: + browser = /usr/bin/chromium -new-tab + + # Always run rule-defined scripts, even if the notification is suppressed + always_run_script = true + + title = Dunst + class = Dunst + startup_notification = false + force_xinerama = false +[experimental] + per_monitor_dpi = false + +[shortcuts] + close = ctrl+space + close_all = ctrl+shift+space + history = ctrl+grave + context = ctrl+shift+period + +[urgency_low] + # IMPORTANT: colors have to be defined in quotation marks. + # Otherwise the "#" and following would be interpreted as a comment. + background = "#282828" + foreground = "#928374" + timeout = 5 + # Icon for notifications with low urgency, uncomment to enable + #icon = /path/to/icon + +[urgency_normal] + background = "#458588" + foreground = "#ebdbb2" + timeout = 5 + +[urgency_critical] + background = "#cc2421" + foreground = "#ebdbb2" + frame_color = "#fabd2f" + timeout = 0 + +# Every section that isn't one of the above is interpreted as a rules to +# override settings for certain messages. +# Messages can be matched by "appname", "summary", "body", "icon", "category", +# "msg_urgency" and you can override the "timeout", "urgency", "foreground", +# "background", "new_icon" and "format". +# Shell-like globbing will get expanded. +# +# SCRIPTING +# You can specify a script that gets run when the rule matches by +# setting the "script" option. +# The script will be called as follows: +# script appname summary body icon urgency +# where urgency can be "LOW", "NORMAL" or "CRITICAL". +# +# NOTE: if you don't want a notification to be displayed, set the format +# to "". +# NOTE: It might be helpful to run dunst -print in a terminal in order +# to find fitting options for rules. + +#[espeak] +# summary = "*" +# script = dunst_espeak.sh + +#[script-test] +# summary = "*script*" +# script = dunst_test.sh + +#[ignore] +# # This notification will not be displayed +# summary = "foobar" +# format = "" + +#[history-ignore] +# # This notification will not be saved in history +# summary = "foobar" +# history_ignore = yes + +#[signed_on] +# appname = Pidgin +# summary = "*signed on*" +# urgency = low +# +#[signed_off] +# appname = Pidgin +# summary = *signed off* +# urgency = low +# +#[says] +# appname = Pidgin +# summary = *says* +# urgency = critical +# +#[twitter] +# appname = Pidgin +# summary = *twitter.com* +# urgency = normal +# +# vim: ft=cfg diff --git a/emoji b/emoji @@ -0,0 +1,1644 @@ +😀 grinning face; U+1F600 +😃 grinning face with big eyes; U+1F603 +😄 grinning face with smiling eyes; U+1F604 +😁 beaming face with smiling eyes; U+1F601 +😆 grinning squinting face; U+1F606 +😅 grinning face with sweat; U+1F605 +🤣 rolling on the floor laughing; U+1F923 +😂 face with tears of joy; U+1F602 +🙂 slightly smiling face; U+1F642 +🙃 upside-down face; U+1F643 +😉 winking face; U+1F609 +😊 smiling face with smiling eyes; U+1F60A +😇 smiling face with halo; U+1F607 +🥰 smiling face with 3 hearts; U+1F970 +😍 smiling face with heart-eyes; U+1F60D +🤩 star-struck; U+1F929 +😘 face blowing a kiss; U+1F618 +😗 kissing face; U+1F617 +☺ smiling face; U+263A +😚 kissing face with closed eyes; U+1F61A +😙 kissing face with smiling eyes; U+1F619 +😋 face savoring food; U+1F60B +😛 face with tongue; U+1F61B +😜 winking face with tongue; U+1F61C +🤪 zany face; U+1F92A +😝 squinting face with tongue; U+1F61D +🤑 money-mouth face; U+1F911 +🤗 hugging face; U+1F917 +🤭 face with hand over mouth; U+1F92D +🤫 shushing face; U+1F92B +🤔 thinking face; U+1F914 +🤐 zipper-mouth face; U+1F910 +🤨 face with raised eyebrow; U+1F928 +😐 neutral face; U+1F610 +😑 expressionless face; U+1F611 +😶 face without mouth; U+1F636 +😏 smirking face; U+1F60F +😒 unamused face; U+1F612 +🙄 face with rolling eyes; U+1F644 +😬 grimacing face; U+1F62C +🤥 lying face; U+1F925 +😌 relieved face; U+1F60C +😔 pensive face; U+1F614 +😪 sleepy face; U+1F62A +🤤 drooling face; U+1F924 +😴 sleeping face; U+1F634 +😷 face with medical mask; U+1F637 +🤒 face with thermometer; U+1F912 +🤕 face with head-bandage; U+1F915 +🤢 nauseated face; U+1F922 +🤮 face vomiting; U+1F92E +🤧 sneezing face; U+1F927 +🥵 hot face; U+1F975 +🥶 cold face; U+1F976 +🥴 woozy face; U+1F974 +😵 dizzy face; U+1F635 +🤯 exploding head; U+1F92F +🤠 cowboy hat face; U+1F920 +🥳 partying face; U+1F973 +😎 smiling face with sunglasses; U+1F60E +🤓 nerd face; U+1F913 +🧐 face with monocle; U+1F9D0 +😕 confused face; U+1F615 +😟 worried face; U+1F61F +🙁 slightly frowning face; U+1F641 +☹ frowning face; U+2639 +😮 face with open mouth; U+1F62E +😯 hushed face; U+1F62F +😲 astonished face; U+1F632 +😳 flushed face; U+1F633 +🥺 pleading face; U+1F97A +😦 frowning face with open mouth; U+1F626 +😧 anguished face; U+1F627 +😨 fearful face; U+1F628 +😰 anxious face with sweat; U+1F630 +😥 sad but relieved face; U+1F625 +😢 crying face; U+1F622 +😭 loudly crying face; U+1F62D +😱 face screaming in fear; U+1F631 +😖 confounded face; U+1F616 +😣 persevering face; U+1F623 +😞 disappointed face; U+1F61E +😓 downcast face with sweat; U+1F613 +😩 weary face; U+1F629 +😫 tired face; U+1F62B +😤 face with steam from nose; U+1F624 +😡 pouting face; U+1F621 +😠 angry face; U+1F620 +🤬 face with symbols on mouth; U+1F92C +😈 smiling face with horns; U+1F608 +👿 angry face with horns; U+1F47F +💀 skull; U+1F480 +☠ skull and crossbones; U+2620 +💩 pile of poo; U+1F4A9 +🤡 clown face; U+1F921 +👹 ogre; U+1F479 +👺 goblin; U+1F47A +👻 ghost; U+1F47B +👽 alien; U+1F47D +👾 alien monster; U+1F47E +🤖 robot face; U+1F916 +😺 grinning cat face; U+1F63A +😸 grinning cat face with smiling eyes; U+1F638 +😹 cat face with tears of joy; U+1F639 +😻 smiling cat face with heart-eyes; U+1F63B +😼 cat face with wry smile; U+1F63C +😽 kissing cat face; U+1F63D +🙀 weary cat face; U+1F640 +😿 crying cat face; U+1F63F +😾 pouting cat face; U+1F63E +🙈 see-no-evil monkey; U+1F648 +🙉 hear-no-evil monkey; U+1F649 +🙊 speak-no-evil monkey; U+1F64A +💋 kiss mark; U+1F48B +💌 love letter; U+1F48C +💘 heart with arrow; U+1F498 +💝 heart with ribbon; U+1F49D +💖 sparkling heart; U+1F496 +💗 growing heart; U+1F497 +💓 beating heart; U+1F493 +💞 revolving hearts; U+1F49E +💕 two hearts; U+1F495 +💟 heart decoration; U+1F49F +❣ heavy heart exclamation; U+2763 +💔 broken heart; U+1F494 +❤ red heart; U+2764 +🧡 orange heart; U+1F9E1 +💛 yellow heart; U+1F49B +💚 green heart; U+1F49A +💙 blue heart; U+1F499 +💜 purple heart; U+1F49C +🖤 black heart; U+1F5A4 +💯 hundred points; U+1F4AF +💢 anger symbol; U+1F4A2 +💥 collision; U+1F4A5 +💫 dizzy; U+1F4AB +💦 sweat droplets; U+1F4A6 +💨 dashing away; U+1F4A8 +🕳 hole; U+1F573 +💣 bomb; U+1F4A3 +💬 speech balloon; U+1F4AC +👁️‍🗨️ eye in speech bubble; U+1F441 U+FE0F U+200D U+1F5E8 U+FE0F +🗨 left speech bubble; U+1F5E8 +🗯 right anger bubble; U+1F5EF +💭 thought balloon; U+1F4AD +💤 zzz; U+1F4A4 +👋 waving hand; U+1F44B +🤚 raised back of hand; U+1F91A +🖐 hand with fingers splayed; U+1F590 +✋ raised hand; U+270B +🖖 vulcan salute; U+1F596 +👌 OK hand; U+1F44C +✌ victory hand; U+270C +🤞 crossed fingers; U+1F91E +🤟 love-you gesture; U+1F91F +🤘 sign of the horns; U+1F918 +🤙 call me hand; U+1F919 +👈 backhand index pointing left; U+1F448 +👉 backhand index pointing right; U+1F449 +👆 backhand index pointing up; U+1F446 +🖕 middle finger; U+1F595 +👇 backhand index pointing down; U+1F447 +☝ index pointing up; U+261D +👍 thumbs up; U+1F44D +👎 thumbs down; U+1F44E +✊ raised fist; U+270A +👊 oncoming fist; U+1F44A +🤛 left-facing fist; U+1F91B +🤜 right-facing fist; U+1F91C +👏 clapping hands; U+1F44F +🙌 raising hands; U+1F64C +👐 open hands; U+1F450 +🤲 palms up together; U+1F932 +🤝 handshake; U+1F91D +🙏 folded hands; U+1F64F +✍ writing hand; U+270D +💅 nail polish; U+1F485 +🤳 selfie; U+1F933 +💪 flexed biceps; U+1F4AA +🦵 leg; U+1F9B5 +🦶 foot; U+1F9B6 +👂 ear; U+1F442 +👃 nose; U+1F443 +🧠 brain; U+1F9E0 +🦷 tooth; U+1F9B7 +🦴 bone; U+1F9B4 +👀 eyes; U+1F440 +👁 eye; U+1F441 +👅 tongue; U+1F445 +👄 mouth; U+1F444 +👶 baby; U+1F476 +🧒 child; U+1F9D2 +👦 boy; U+1F466 +👧 girl; U+1F467 +🧑 person; U+1F9D1 +👱 person: blond hair; U+1F471 +👨 man; U+1F468 +👱‍♂️ man: blond hair; U+1F471 U+200D U+2642 U+FE0F +👨‍🦰 man: red hair; U+1F468 U+200D U+1F9B0 +👨‍🦱 man: curly hair; U+1F468 U+200D U+1F9B1 +👨‍🦳 man: white hair; U+1F468 U+200D U+1F9B3 +👨‍🦲 man: bald; U+1F468 U+200D U+1F9B2 +🧔 man: beard; U+1F9D4 +👩 woman; U+1F469 +👱‍♀️ woman: blond hair; U+1F471 U+200D U+2640 U+FE0F +👩‍🦰 woman: red hair; U+1F469 U+200D U+1F9B0 +👩‍🦱 woman: curly hair; U+1F469 U+200D U+1F9B1 +👩‍🦳 woman: white hair; U+1F469 U+200D U+1F9B3 +👩‍🦲 woman: bald; U+1F469 U+200D U+1F9B2 +🧓 older person; U+1F9D3 +👴 old man; U+1F474 +👵 old woman; U+1F475 +🙍 person frowning; U+1F64D +🙍‍♂️ man frowning; U+1F64D U+200D U+2642 U+FE0F +🙍‍♀️ woman frowning; U+1F64D U+200D U+2640 U+FE0F +🙎 person pouting; U+1F64E +🙎‍♂️ man pouting; U+1F64E U+200D U+2642 U+FE0F +🙎‍♀️ woman pouting; U+1F64E U+200D U+2640 U+FE0F +🙅 person gesturing NO; U+1F645 +🙅‍♂️ man gesturing NO; U+1F645 U+200D U+2642 U+FE0F +🙅‍♀️ woman gesturing NO; U+1F645 U+200D U+2640 U+FE0F +🙆 person gesturing OK; U+1F646 +🙆‍♂️ man gesturing OK; U+1F646 U+200D U+2642 U+FE0F +🙆‍♀️ woman gesturing OK; U+1F646 U+200D U+2640 U+FE0F +💁 person tipping hand; U+1F481 +💁‍♂️ man tipping hand; U+1F481 U+200D U+2642 U+FE0F +💁‍♀️ woman tipping hand; U+1F481 U+200D U+2640 U+FE0F +🙋 person raising hand; U+1F64B +🙋‍♂️ man raising hand; U+1F64B U+200D U+2642 U+FE0F +🙋‍♀️ woman raising hand; U+1F64B U+200D U+2640 U+FE0F +🙇 person bowing; U+1F647 +🙇‍♂️ man bowing; U+1F647 U+200D U+2642 U+FE0F +🙇‍♀️ woman bowing; U+1F647 U+200D U+2640 U+FE0F +🤦 person facepalming; U+1F926 +🤦‍♂️ man facepalming; U+1F926 U+200D U+2642 U+FE0F +🤦‍♀️ woman facepalming; U+1F926 U+200D U+2640 U+FE0F +🤷 person shrugging; U+1F937 +🤷‍♂️ man shrugging; U+1F937 U+200D U+2642 U+FE0F +🤷‍♀️ woman shrugging; U+1F937 U+200D U+2640 U+FE0F +👨‍⚕️ man health worker; U+1F468 U+200D U+2695 U+FE0F +👩‍⚕️ woman health worker; U+1F469 U+200D U+2695 U+FE0F +👨‍🎓 man student; U+1F468 U+200D U+1F393 +👩‍🎓 woman student; U+1F469 U+200D U+1F393 +👨‍🏫 man teacher; U+1F468 U+200D U+1F3EB +👩‍🏫 woman teacher; U+1F469 U+200D U+1F3EB +👨‍⚖️ man judge; U+1F468 U+200D U+2696 U+FE0F +👩‍⚖️ woman judge; U+1F469 U+200D U+2696 U+FE0F +👨‍🌾 man farmer; U+1F468 U+200D U+1F33E +👩‍🌾 woman farmer; U+1F469 U+200D U+1F33E +👨‍🍳 man cook; U+1F468 U+200D U+1F373 +👩‍🍳 woman cook; U+1F469 U+200D U+1F373 +👨‍🔧 man mechanic; U+1F468 U+200D U+1F527 +👩‍🔧 woman mechanic; U+1F469 U+200D U+1F527 +👨‍🏭 man factory worker; U+1F468 U+200D U+1F3ED +👩‍🏭 woman factory worker; U+1F469 U+200D U+1F3ED +👨‍💼 man office worker; U+1F468 U+200D U+1F4BC +👩‍💼 woman office worker; U+1F469 U+200D U+1F4BC +👨‍🔬 man scientist; U+1F468 U+200D U+1F52C +👩‍🔬 woman scientist; U+1F469 U+200D U+1F52C +👨‍💻 man technologist; U+1F468 U+200D U+1F4BB +👩‍💻 woman technologist; U+1F469 U+200D U+1F4BB +👨‍🎤 man singer; U+1F468 U+200D U+1F3A4 +👩‍🎤 woman singer; U+1F469 U+200D U+1F3A4 +👨‍🎨 man artist; U+1F468 U+200D U+1F3A8 +👩‍🎨 woman artist; U+1F469 U+200D U+1F3A8 +👨‍✈️ man pilot; U+1F468 U+200D U+2708 U+FE0F +👩‍✈️ woman pilot; U+1F469 U+200D U+2708 U+FE0F +👨‍🚀 man astronaut; U+1F468 U+200D U+1F680 +👩‍🚀 woman astronaut; U+1F469 U+200D U+1F680 +👨‍🚒 man firefighter; U+1F468 U+200D U+1F692 +👩‍🚒 woman firefighter; U+1F469 U+200D U+1F692 +👮 police officer; U+1F46E +👮‍♂️ man police officer; U+1F46E U+200D U+2642 U+FE0F +👮‍♀️ woman police officer; U+1F46E U+200D U+2640 U+FE0F +🕵 detective; U+1F575 +🕵️‍♂️ man detective; U+1F575 U+FE0F U+200D U+2642 U+FE0F +🕵️‍♀️ woman detective; U+1F575 U+FE0F U+200D U+2640 U+FE0F +💂 guard; U+1F482 +💂‍♂️ man guard; U+1F482 U+200D U+2642 U+FE0F +💂‍♀️ woman guard; U+1F482 U+200D U+2640 U+FE0F +👷 construction worker; U+1F477 +👷‍♂️ man construction worker; U+1F477 U+200D U+2642 U+FE0F +👷‍♀️ woman construction worker; U+1F477 U+200D U+2640 U+FE0F +🤴 prince; U+1F934 +👸 princess; U+1F478 +👳 person wearing turban; U+1F473 +👳‍♂️ man wearing turban; U+1F473 U+200D U+2642 U+FE0F +👳‍♀️ woman wearing turban; U+1F473 U+200D U+2640 U+FE0F +👲 man with Chinese cap; U+1F472 +🧕 woman with headscarf; U+1F9D5 +🤵 man in tuxedo; U+1F935 +👰 bride with veil; U+1F470 +🤰 pregnant woman; U+1F930 +🤱 breast-feeding; U+1F931 +👼 baby angel; U+1F47C +🎅 Santa Claus; U+1F385 +🤶 Mrs. Claus; U+1F936 +🦸 superhero; U+1F9B8 +🦸‍♂️ man superhero; U+1F9B8 U+200D U+2642 U+FE0F +🦸‍♀️ woman superhero; U+1F9B8 U+200D U+2640 U+FE0F +🦹 supervillain; U+1F9B9 +🦹‍♂️ man supervillain; U+1F9B9 U+200D U+2642 U+FE0F +🦹‍♀️ woman supervillain; U+1F9B9 U+200D U+2640 U+FE0F +🧙 mage; U+1F9D9 +🧙‍♂️ man mage; U+1F9D9 U+200D U+2642 U+FE0F +🧙‍♀️ woman mage; U+1F9D9 U+200D U+2640 U+FE0F +🧚 fairy; U+1F9DA +🧚‍♂️ man fairy; U+1F9DA U+200D U+2642 U+FE0F +🧚‍♀️ woman fairy; U+1F9DA U+200D U+2640 U+FE0F +🧛 vampire; U+1F9DB +🧛‍♂️ man vampire; U+1F9DB U+200D U+2642 U+FE0F +🧛‍♀️ woman vampire; U+1F9DB U+200D U+2640 U+FE0F +🧜 merperson; U+1F9DC +🧜‍♂️ merman; U+1F9DC U+200D U+2642 U+FE0F +🧜‍♀️ mermaid; U+1F9DC U+200D U+2640 U+FE0F +🧝 elf; U+1F9DD +🧝‍♂️ man elf; U+1F9DD U+200D U+2642 U+FE0F +🧝‍♀️ woman elf; U+1F9DD U+200D U+2640 U+FE0F +🧞 genie; U+1F9DE +🧞‍♂️ man genie; U+1F9DE U+200D U+2642 U+FE0F +🧞‍♀️ woman genie; U+1F9DE U+200D U+2640 U+FE0F +🧟 zombie; U+1F9DF +🧟‍♂️ man zombie; U+1F9DF U+200D U+2642 U+FE0F +🧟‍♀️ woman zombie; U+1F9DF U+200D U+2640 U+FE0F +💆 person getting massage; U+1F486 +💆‍♂️ man getting massage; U+1F486 U+200D U+2642 U+FE0F +💆‍♀️ woman getting massage; U+1F486 U+200D U+2640 U+FE0F +💇 person getting haircut; U+1F487 +💇‍♂️ man getting haircut; U+1F487 U+200D U+2642 U+FE0F +💇‍♀️ woman getting haircut; U+1F487 U+200D U+2640 U+FE0F +🚶 person walking; U+1F6B6 +🚶‍♂️ man walking; U+1F6B6 U+200D U+2642 U+FE0F +🚶‍♀️ woman walking; U+1F6B6 U+200D U+2640 U+FE0F +🏃 person running; U+1F3C3 +🏃‍♂️ man running; U+1F3C3 U+200D U+2642 U+FE0F +🏃‍♀️ woman running; U+1F3C3 U+200D U+2640 U+FE0F +💃 woman dancing; U+1F483 +🕺 man dancing; U+1F57A +🕴 man in suit levitating; U+1F574 +👯 people with bunny ears; U+1F46F +👯‍♂️ men with bunny ears; U+1F46F U+200D U+2642 U+FE0F +👯‍♀️ women with bunny ears; U+1F46F U+200D U+2640 U+FE0F +🧖 person in steamy room; U+1F9D6 +🧖‍♂️ man in steamy room; U+1F9D6 U+200D U+2642 U+FE0F +🧖‍♀️ woman in steamy room; U+1F9D6 U+200D U+2640 U+FE0F +🧗 person climbing; U+1F9D7 +🧗‍♂️ man climbing; U+1F9D7 U+200D U+2642 U+FE0F +🧗‍♀️ woman climbing; U+1F9D7 U+200D U+2640 U+FE0F +🤺 person fencing; U+1F93A +🏇 horse racing; U+1F3C7 +⛷ skier; U+26F7 +🏂 snowboarder; U+1F3C2 +🏌 person golfing; U+1F3CC +🏌️‍♂️ man golfing; U+1F3CC U+FE0F U+200D U+2642 U+FE0F +🏌️‍♀️ woman golfing; U+1F3CC U+FE0F U+200D U+2640 U+FE0F +🏄 person surfing; U+1F3C4 +🏄‍♂️ man surfing; U+1F3C4 U+200D U+2642 U+FE0F +🏄‍♀️ woman surfing; U+1F3C4 U+200D U+2640 U+FE0F +🚣 person rowing boat; U+1F6A3 +🚣‍♂️ man rowing boat; U+1F6A3 U+200D U+2642 U+FE0F +🚣‍♀️ woman rowing boat; U+1F6A3 U+200D U+2640 U+FE0F +🏊 person swimming; U+1F3CA +🏊‍♂️ man swimming; U+1F3CA U+200D U+2642 U+FE0F +🏊‍♀️ woman swimming; U+1F3CA U+200D U+2640 U+FE0F +⛹ person bouncing ball; U+26F9 +⛹️‍♂️ man bouncing ball; U+26F9 U+FE0F U+200D U+2642 U+FE0F +⛹️‍♀️ woman bouncing ball; U+26F9 U+FE0F U+200D U+2640 U+FE0F +🏋 person lifting weights; U+1F3CB +🏋️‍♂️ man lifting weights; U+1F3CB U+FE0F U+200D U+2642 U+FE0F +🏋️‍♀️ woman lifting weights; U+1F3CB U+FE0F U+200D U+2640 U+FE0F +🚴 person biking; U+1F6B4 +🚴‍♂️ man biking; U+1F6B4 U+200D U+2642 U+FE0F +🚴‍♀️ woman biking; U+1F6B4 U+200D U+2640 U+FE0F +🚵 person mountain biking; U+1F6B5 +🚵‍♂️ man mountain biking; U+1F6B5 U+200D U+2642 U+FE0F +🚵‍♀️ woman mountain biking; U+1F6B5 U+200D U+2640 U+FE0F +🤸 person cartwheeling; U+1F938 +🤸‍♂️ man cartwheeling; U+1F938 U+200D U+2642 U+FE0F +🤸‍♀️ woman cartwheeling; U+1F938 U+200D U+2640 U+FE0F +🤼 people wrestling; U+1F93C +🤼‍♂️ men wrestling; U+1F93C U+200D U+2642 U+FE0F +🤼‍♀️ women wrestling; U+1F93C U+200D U+2640 U+FE0F +🤽 person playing water polo; U+1F93D +🤽‍♂️ man playing water polo; U+1F93D U+200D U+2642 U+FE0F +🤽‍♀️ woman playing water polo; U+1F93D U+200D U+2640 U+FE0F +🤾 person playing handball; U+1F93E +🤾‍♂️ man playing handball; U+1F93E U+200D U+2642 U+FE0F +🤾‍♀️ woman playing handball; U+1F93E U+200D U+2640 U+FE0F +🤹 person juggling; U+1F939 +🤹‍♂️ man juggling; U+1F939 U+200D U+2642 U+FE0F +🤹‍♀️ woman juggling; U+1F939 U+200D U+2640 U+FE0F +🧘 person in lotus position; U+1F9D8 +🧘‍♂️ man in lotus position; U+1F9D8 U+200D U+2642 U+FE0F +🧘‍♀️ woman in lotus position; U+1F9D8 U+200D U+2640 U+FE0F +🛀 person taking bath; U+1F6C0 +🛌 person in bed; U+1F6CC +👭 women holding hands; U+1F46D +👫 woman and man holding hands; U+1F46B +👬 men holding hands; U+1F46C +💏 kiss; U+1F48F +👩‍❤️‍💋‍👨 kiss: woman, man; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F468 +👨‍❤️‍💋‍👨 kiss: man, man; U+1F468 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F468 +👩‍❤️‍💋‍👩 kiss: woman, woman; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F469 +💑 couple with heart; U+1F491 +👩‍❤️‍👨 couple with heart: woman, man; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F468 +👨‍❤️‍👨 couple with heart: man, man; U+1F468 U+200D U+2764 U+FE0F U+200D U+1F468 +👩‍❤️‍👩 couple with heart: woman, woman; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F469 +👪 family; U+1F46A +👨‍👩‍👦 family: man, woman, boy; U+1F468 U+200D U+1F469 U+200D U+1F466 +👨‍👩‍👧 family: man, woman, girl; U+1F468 U+200D U+1F469 U+200D U+1F467 +👨‍👩‍👧‍👦 family: man, woman, girl, boy; U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466 +👨‍👩‍👦‍👦 family: man, woman, boy, boy; U+1F468 U+200D U+1F469 U+200D U+1F466 U+200D U+1F466 +👨‍👩‍👧‍👧 family: man, woman, girl, girl; U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F467 +👨‍👨‍👦 family: man, man, boy; U+1F468 U+200D U+1F468 U+200D U+1F466 +👨‍👨‍👧 family: man, man, girl; U+1F468 U+200D U+1F468 U+200D U+1F467 +👨‍👨‍👧‍👦 family: man, man, girl, boy; U+1F468 U+200D U+1F468 U+200D U+1F467 U+200D U+1F466 +👨‍👨‍👦‍👦 family: man, man, boy, boy; U+1F468 U+200D U+1F468 U+200D U+1F466 U+200D U+1F466 +👨‍👨‍👧‍👧 family: man, man, girl, girl; U+1F468 U+200D U+1F468 U+200D U+1F467 U+200D U+1F467 +👩‍👩‍👦 family: woman, woman, boy; U+1F469 U+200D U+1F469 U+200D U+1F466 +👩‍👩‍👧 family: woman, woman, girl; U+1F469 U+200D U+1F469 U+200D U+1F467 +👩‍👩‍👧‍👦 family: woman, woman, girl, boy; U+1F469 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466 +👩‍👩‍👦‍👦 family: woman, woman, boy, boy; U+1F469 U+200D U+1F469 U+200D U+1F466 U+200D U+1F466 +👩‍👩‍👧‍👧 family: woman, woman, girl, girl; U+1F469 U+200D U+1F469 U+200D U+1F467 U+200D U+1F467 +👨‍👦 family: man, boy; U+1F468 U+200D U+1F466 +👨‍👦‍👦 family: man, boy, boy; U+1F468 U+200D U+1F466 U+200D U+1F466 +👨‍👧 family: man, girl; U+1F468 U+200D U+1F467 +👨‍👧‍👦 family: man, girl, boy; U+1F468 U+200D U+1F467 U+200D U+1F466 +👨‍👧‍👧 family: man, girl, girl; U+1F468 U+200D U+1F467 U+200D U+1F467 +👩‍👦 family: woman, boy; U+1F469 U+200D U+1F466 +👩‍👦‍👦 family: woman, boy, boy; U+1F469 U+200D U+1F466 U+200D U+1F466 +👩‍👧 family: woman, girl; U+1F469 U+200D U+1F467 +👩‍👧‍👦 family: woman, girl, boy; U+1F469 U+200D U+1F467 U+200D U+1F466 +👩‍👧‍👧 family: woman, girl, girl; U+1F469 U+200D U+1F467 U+200D U+1F467 +🗣 speaking head; U+1F5E3 +👤 bust in silhouette; U+1F464 +👥 busts in silhouette; U+1F465 +👣 footprints; U+1F463 +🦰 red hair; U+1F9B0 +🦱 curly hair; U+1F9B1 +🦳 white hair; U+1F9B3 +🦲 bald; U+1F9B2 +🐵 monkey face; U+1F435 +🐒 monkey; U+1F412 +🦍 gorilla; U+1F98D +🐶 dog face; U+1F436 +🐕 dog; U+1F415 +🐩 poodle; U+1F429 +🐺 wolf face; U+1F43A +🦊 fox face; U+1F98A +🦝 raccoon; U+1F99D +🐱 cat face; U+1F431 +🐈 cat; U+1F408 +🦁 lion face; U+1F981 +🐯 tiger face; U+1F42F +🐅 tiger; U+1F405 +🐆 leopard; U+1F406 +🐴 horse face; U+1F434 +🐎 horse; U+1F40E +🦄 unicorn face; U+1F984 +🦓 zebra; U+1F993 +🦌 deer; U+1F98C +🐮 cow face; U+1F42E +🐂 ox; U+1F402 +🐃 water buffalo; U+1F403 +🐄 cow; U+1F404 +🐷 pig face; U+1F437 +🐖 pig; U+1F416 +🐗 boar; U+1F417 +🐽 pig nose; U+1F43D +🐏 ram; U+1F40F +🐑 ewe; U+1F411 +🐐 goat; U+1F410 +🐪 camel; U+1F42A +🐫 two-hump camel; U+1F42B +🦙 llama; U+1F999 +🦒 giraffe; U+1F992 +🐘 elephant; U+1F418 +🦏 rhinoceros; U+1F98F +🦛 hippopotamus; U+1F99B +🐭 mouse face; U+1F42D +🐁 mouse; U+1F401 +🐀 rat; U+1F400 +🐹 hamster face; U+1F439 +🐰 rabbit face; U+1F430 +🐇 rabbit; U+1F407 +🐿 chipmunk; U+1F43F +🦔 hedgehog; U+1F994 +🦇 bat; U+1F987 +🐻 bear face; U+1F43B +🐨 koala; U+1F428 +🐼 panda face; U+1F43C +🦘 kangaroo; U+1F998 +🦡 badger; U+1F9A1 +🐾 paw prints; U+1F43E +🦃 turkey; U+1F983 +🐔 chicken; U+1F414 +🐓 rooster; U+1F413 +🐣 hatching chick; U+1F423 +🐤 baby chick; U+1F424 +🐥 front-facing baby chick; U+1F425 +🐦 bird; U+1F426 +🐧 penguin; U+1F427 +🕊 dove; U+1F54A +🦅 eagle; U+1F985 +🦆 duck; U+1F986 +🦢 swan; U+1F9A2 +🦉 owl; U+1F989 +🦚 peacock; U+1F99A +🦜 parrot; U+1F99C +🐸 frog face; U+1F438 +🐊 crocodile; U+1F40A +🐢 turtle; U+1F422 +🦎 lizard; U+1F98E +🐍 snake; U+1F40D +🐲 dragon face; U+1F432 +🐉 dragon; U+1F409 +🦕 sauropod; U+1F995 +🦖 T-Rex; U+1F996 +🐳 spouting whale; U+1F433 +🐋 whale; U+1F40B +🐬 dolphin; U+1F42C +🐟 fish; U+1F41F +🐠 tropical fish; U+1F420 +🐡 blowfish; U+1F421 +🦈 shark; U+1F988 +🐙 octopus; U+1F419 +🐚 spiral shell; U+1F41A +🐌 snail; U+1F40C +🦋 butterfly; U+1F98B +🐛 bug; U+1F41B +🐜 ant; U+1F41C +🐝 honeybee; U+1F41D +🐞 lady beetle; U+1F41E +🦗 cricket; U+1F997 +🕷 spider; U+1F577 +🕸 spider web; U+1F578 +🦂 scorpion; U+1F982 +🦟 mosquito; U+1F99F +🦠 microbe; U+1F9A0 +💐 bouquet; U+1F490 +🌸 cherry blossom; U+1F338 +💮 white flower; U+1F4AE +🏵 rosette; U+1F3F5 +🌹 rose; U+1F339 +🥀 wilted flower; U+1F940 +🌺 hibiscus; U+1F33A +🌻 sunflower; U+1F33B +🌼 blossom; U+1F33C +🌷 tulip; U+1F337 +🌱 seedling; U+1F331 +🌲 evergreen tree; U+1F332 +🌳 deciduous tree; U+1F333 +🌴 palm tree; U+1F334 +🌵 cactus; U+1F335 +🌾 sheaf of rice; U+1F33E +🌿 herb; U+1F33F +☘ shamrock; U+2618 +🍀 four leaf clover; U+1F340 +🍁 maple leaf; U+1F341 +🍂 fallen leaf; U+1F342 +🍃 leaf fluttering in wind; U+1F343 +🍇 grapes; U+1F347 +🍈 melon; U+1F348 +🍉 watermelon; U+1F349 +🍊 tangerine; U+1F34A +🍋 lemon; U+1F34B +🍌 banana; U+1F34C +🍍 pineapple; U+1F34D +🥭 mango; U+1F96D +🍎 red apple; U+1F34E +🍏 green apple; U+1F34F +🍐 pear; U+1F350 +🍑 peach; U+1F351 +🍒 cherries; U+1F352 +🍓 strawberry; U+1F353 +🥝 kiwi fruit; U+1F95D +🍅 tomato; U+1F345 +🥥 coconut; U+1F965 +🥑 avocado; U+1F951 +🍆 eggplant; U+1F346 +🥔 potato; U+1F954 +🥕 carrot; U+1F955 +🌽 ear of corn; U+1F33D +🌶 hot pepper; U+1F336 +🥒 cucumber; U+1F952 +🥬 leafy green; U+1F96C +🥦 broccoli; U+1F966 +🍄 mushroom; U+1F344 +🥜 peanuts; U+1F95C +🌰 chestnut; U+1F330 +🍞 bread; U+1F35E +🥐 croissant; U+1F950 +🥖 baguette bread; U+1F956 +🥨 pretzel; U+1F968 +🥯 bagel; U+1F96F +🥞 pancakes; U+1F95E +🧀 cheese wedge; U+1F9C0 +🍖 meat on bone; U+1F356 +🍗 poultry leg; U+1F357 +🥩 cut of meat; U+1F969 +🥓 bacon; U+1F953 +🍔 hamburger; U+1F354 +🍟 french fries; U+1F35F +🍕 pizza; U+1F355 +🌭 hot dog; U+1F32D +🥪 sandwich; U+1F96A +🌮 taco; U+1F32E +🌯 burrito; U+1F32F +🥙 stuffed flatbread; U+1F959 +🥚 egg; U+1F95A +🍳 cooking; U+1F373 +🥘 shallow pan of food; U+1F958 +🍲 pot of food; U+1F372 +🥣 bowl with spoon; U+1F963 +🥗 green salad; U+1F957 +🍿 popcorn; U+1F37F +🧂 salt; U+1F9C2 +🥫 canned food; U+1F96B +🍱 bento box; U+1F371 +🍘 rice cracker; U+1F358 +🍙 rice ball; U+1F359 +🍚 cooked rice; U+1F35A +🍛 curry rice; U+1F35B +🍜 steaming bowl; U+1F35C +🍝 spaghetti; U+1F35D +🍠 roasted sweet potato; U+1F360 +🍢 oden; U+1F362 +🍣 sushi; U+1F363 +🍤 fried shrimp; U+1F364 +🍥 fish cake with swirl; U+1F365 +🥮 moon cake; U+1F96E +🍡 dango; U+1F361 +🥟 dumpling; U+1F95F +🥠 fortune cookie; U+1F960 +🥡 takeout box; U+1F961 +🦀 crab; U+1F980 +🦞 lobster; U+1F99E +🦐 shrimp; U+1F990 +🦑 squid; U+1F991 +🍦 soft ice cream; U+1F366 +🍧 shaved ice; U+1F367 +🍨 ice cream; U+1F368 +🍩 doughnut; U+1F369 +🍪 cookie; U+1F36A +🎂 birthday cake; U+1F382 +🍰 shortcake; U+1F370 +🧁 cupcake; U+1F9C1 +🥧 pie; U+1F967 +🍫 chocolate bar; U+1F36B +🍬 candy; U+1F36C +🍭 lollipop; U+1F36D +🍮 custard; U+1F36E +🍯 honey pot; U+1F36F +🍼 baby bottle; U+1F37C +🥛 glass of milk; U+1F95B +☕ hot beverage; U+2615 +🍵 teacup without handle; U+1F375 +🍶 sake; U+1F376 +🍾 bottle with popping cork; U+1F37E +🍷 wine glass; U+1F377 +🍸 cocktail glass; U+1F378 +🍹 tropical drink; U+1F379 +🍺 beer mug; U+1F37A +🍻 clinking beer mugs; U+1F37B +🥂 clinking glasses; U+1F942 +🥃 tumbler glass; U+1F943 +🥤 cup with straw; U+1F964 +🥢 chopsticks; U+1F962 +🍽 fork and knife with plate; U+1F37D +🍴 fork and knife; U+1F374 +🥄 spoon; U+1F944 +🔪 kitchen knife; U+1F52A +🏺 amphora; U+1F3FA +🌍 globe showing Europe-Africa; U+1F30D +🌎 globe showing Americas; U+1F30E +🌏 globe showing Asia-Australia; U+1F30F +🌐 globe with meridians; U+1F310 +🗺 world map; U+1F5FA +🗾 map of Japan; U+1F5FE +🧭 compass; U+1F9ED +🏔 snow-capped mountain; U+1F3D4 +⛰ mountain; U+26F0 +🌋 volcano; U+1F30B +🗻 mount fuji; U+1F5FB +🏕 camping; U+1F3D5 +🏖 beach with umbrella; U+1F3D6 +🏜 desert; U+1F3DC +🏝 desert island; U+1F3DD +🏞 national park; U+1F3DE +🏟 stadium; U+1F3DF +🏛 classical building; U+1F3DB +🏗 building construction; U+1F3D7 +🧱 brick; U+1F9F1 +🏘 houses; U+1F3D8 +🏚 derelict house; U+1F3DA +🏠 house; U+1F3E0 +🏡 house with garden; U+1F3E1 +🏢 office building; U+1F3E2 +🏣 Japanese post office; U+1F3E3 +🏤 post office; U+1F3E4 +🏥 hospital; U+1F3E5 +🏦 bank; U+1F3E6 +🏨 hotel; U+1F3E8 +🏩 love hotel; U+1F3E9 +🏪 convenience store; U+1F3EA +🏫 school; U+1F3EB +🏬 department store; U+1F3EC +🏭 factory; U+1F3ED +🏯 Japanese castle; U+1F3EF +🏰 castle; U+1F3F0 +💒 wedding; U+1F492 +🗼 Tokyo tower; U+1F5FC +🗽 Statue of Liberty; U+1F5FD +⛪ church; U+26EA +🕌 mosque; U+1F54C +🕍 synagogue; U+1F54D +⛩ shinto shrine; U+26E9 +🕋 kaaba; U+1F54B +⛲ fountain; U+26F2 +⛺ tent; U+26FA +🌁 foggy; U+1F301 +🌃 night with stars; U+1F303 +🏙 cityscape; U+1F3D9 +🌄 sunrise over mountains; U+1F304 +🌅 sunrise; U+1F305 +🌆 cityscape at dusk; U+1F306 +🌇 sunset; U+1F307 +🌉 bridge at night; U+1F309 +♨ hot springs; U+2668 +🌌 milky way; U+1F30C +🎠 carousel horse; U+1F3A0 +🎡 ferris wheel; U+1F3A1 +🎢 roller coaster; U+1F3A2 +💈 barber pole; U+1F488 +🎪 circus tent; U+1F3AA +🚂 locomotive; U+1F682 +🚃 railway car; U+1F683 +🚄 high-speed train; U+1F684 +🚅 bullet train; U+1F685 +🚆 train; U+1F686 +🚇 metro; U+1F687 +🚈 light rail; U+1F688 +🚉 station; U+1F689 +🚊 tram; U+1F68A +🚝 monorail; U+1F69D +🚞 mountain railway; U+1F69E +🚋 tram car; U+1F68B +🚌 bus; U+1F68C +🚍 oncoming bus; U+1F68D +🚎 trolleybus; U+1F68E +🚐 minibus; U+1F690 +🚑 ambulance; U+1F691 +🚒 fire engine; U+1F692 +🚓 police car; U+1F693 +🚔 oncoming police car; U+1F694 +🚕 taxi; U+1F695 +🚖 oncoming taxi; U+1F696 +🚗 automobile; U+1F697 +🚘 oncoming automobile; U+1F698 +🚙 sport utility vehicle; U+1F699 +🚚 delivery truck; U+1F69A +🚛 articulated lorry; U+1F69B +🚜 tractor; U+1F69C +🏎 racing car; U+1F3CE +🏍 motorcycle; U+1F3CD +🛵 motor scooter; U+1F6F5 +🚲 bicycle; U+1F6B2 +🛴 kick scooter; U+1F6F4 +🛹 skateboard; U+1F6F9 +🚏 bus stop; U+1F68F +🛣 motorway; U+1F6E3 +🛤 railway track; U+1F6E4 +🛢 oil drum; U+1F6E2 +⛽ fuel pump; U+26FD +🚨 police car light; U+1F6A8 +🚥 horizontal traffic light; U+1F6A5 +🚦 vertical traffic light; U+1F6A6 +🛑 stop sign; U+1F6D1 +🚧 construction; U+1F6A7 +⚓ anchor; U+2693 +⛵ sailboat; U+26F5 +🛶 canoe; U+1F6F6 +🚤 speedboat; U+1F6A4 +🛳 passenger ship; U+1F6F3 +⛴ ferry; U+26F4 +🛥 motor boat; U+1F6E5 +🚢 ship; U+1F6A2 +✈ airplane; U+2708 +🛩 small airplane; U+1F6E9 +🛫 airplane departure; U+1F6EB +🛬 airplane arrival; U+1F6EC +💺 seat; U+1F4BA +🚁 helicopter; U+1F681 +🚟 suspension railway; U+1F69F +🚠 mountain cableway; U+1F6A0 +🚡 aerial tramway; U+1F6A1 +🛰 satellite; U+1F6F0 +🚀 rocket; U+1F680 +🛸 flying saucer; U+1F6F8 +🛎 bellhop bell; U+1F6CE +🧳 luggage; U+1F9F3 +⌛ hourglass done; U+231B +⏳ hourglass not done; U+23F3 +⌚ watch; U+231A +⏰ alarm clock; U+23F0 +⏱ stopwatch; U+23F1 +⏲ timer clock; U+23F2 +🕰 mantelpiece clock; U+1F570 +🕛 twelve o’clock; U+1F55B +🕧 twelve-thirty; U+1F567 +🕐 one o’clock; U+1F550 +🕜 one-thirty; U+1F55C +🕑 two o’clock; U+1F551 +🕝 two-thirty; U+1F55D +🕒 three o’clock; U+1F552 +🕞 three-thirty; U+1F55E +🕓 four o’clock; U+1F553 +🕟 four-thirty; U+1F55F +🕔 five o’clock; U+1F554 +🕠 five-thirty; U+1F560 +🕕 six o’clock; U+1F555 +🕡 six-thirty; U+1F561 +🕖 seven o’clock; U+1F556 +🕢 seven-thirty; U+1F562 +🕗 eight o’clock; U+1F557 +🕣 eight-thirty; U+1F563 +🕘 nine o’clock; U+1F558 +🕤 nine-thirty; U+1F564 +🕙 ten o’clock; U+1F559 +🕥 ten-thirty; U+1F565 +🕚 eleven o’clock; U+1F55A +🕦 eleven-thirty; U+1F566 +🌑 new moon; U+1F311 +🌒 waxing crescent moon; U+1F312 +🌓 first quarter moon; U+1F313 +🌔 waxing gibbous moon; U+1F314 +🌕 full moon; U+1F315 +🌖 waning gibbous moon; U+1F316 +🌗 last quarter moon; U+1F317 +🌘 waning crescent moon; U+1F318 +🌙 crescent moon; U+1F319 +🌚 new moon face; U+1F31A +🌛 first quarter moon face; U+1F31B +🌜 last quarter moon face; U+1F31C +🌡 thermometer; U+1F321 +☀ sun; U+2600 +🌝 full moon face; U+1F31D +🌞 sun with face; U+1F31E +⭐ star; U+2B50 +🌟 glowing star; U+1F31F +🌠 shooting star; U+1F320 +☁ cloud; U+2601 +⛅ sun behind cloud; U+26C5 +⛈ cloud with lightning and rain; U+26C8 +🌤 sun behind small cloud; U+1F324 +🌥 sun behind large cloud; U+1F325 +🌦 sun behind rain cloud; U+1F326 +🌧 cloud with rain; U+1F327 +🌨 cloud with snow; U+1F328 +🌩 cloud with lightning; U+1F329 +🌪 tornado; U+1F32A +🌫 fog; U+1F32B +🌬 wind face; U+1F32C +🌀 cyclone; U+1F300 +🌈 rainbow; U+1F308 +🌂 closed umbrella; U+1F302 +☂ umbrella; U+2602 +☔ umbrella with rain drops; U+2614 +⛱ umbrella on ground; U+26F1 +⚡ high voltage; U+26A1 +❄ snowflake; U+2744 +☃ snowman; U+2603 +⛄ snowman without snow; U+26C4 +☄ comet; U+2604 +🔥 fire; U+1F525 +💧 droplet; U+1F4A7 +🌊 water wave; U+1F30A +🎃 jack-o-lantern; U+1F383 +🎄 Christmas tree; U+1F384 +🎆 fireworks; U+1F386 +🎇 sparkler; U+1F387 +🧨 firecracker; U+1F9E8 +✨ sparkles; U+2728 +🎈 balloon; U+1F388 +🎉 party popper; U+1F389 +🎊 confetti ball; U+1F38A +🎋 tanabata tree; U+1F38B +🎍 pine decoration; U+1F38D +🎎 Japanese dolls; U+1F38E +🎏 carp streamer; U+1F38F +🎐 wind chime; U+1F390 +🎑 moon viewing ceremony; U+1F391 +🧧 red envelope; U+1F9E7 +🎀 ribbon; U+1F380 +🎁 wrapped gift; U+1F381 +🎗 reminder ribbon; U+1F397 +🎟 admission tickets; U+1F39F +🎫 ticket; U+1F3AB +🎖 military medal; U+1F396 +🏆 trophy; U+1F3C6 +🏅 sports medal; U+1F3C5 +1st place medal; U+1F947 🥇 +2nd place medal; U+1F948 🥈 +3rd place medal; U+1F949 🥉 +⚽ soccer ball; U+26BD +⚾ baseball; U+26BE +🥎 softball; U+1F94E +🏀 basketball; U+1F3C0 +🏐 volleyball; U+1F3D0 +🏈 american football; U+1F3C8 +🏉 rugby football; U+1F3C9 +🎾 tennis; U+1F3BE +🥏 flying disc; U+1F94F +🎳 bowling; U+1F3B3 +🏏 cricket game; U+1F3CF +🏑 field hockey; U+1F3D1 +🏒 ice hockey; U+1F3D2 +🥍 lacrosse; U+1F94D +🏓 ping pong; U+1F3D3 +🏸 badminton; U+1F3F8 +🥊 boxing glove; U+1F94A +🥋 martial arts uniform; U+1F94B +🥅 goal net; U+1F945 +⛳ flag in hole; U+26F3 +⛸ ice skate; U+26F8 +🎣 fishing pole; U+1F3A3 +🎽 running shirt; U+1F3BD +🎿 skis; U+1F3BF +🛷 sled; U+1F6F7 +🥌 curling stone; U+1F94C +🎯 direct hit; U+1F3AF +🎱 pool 8 ball; U+1F3B1 +🔮 crystal ball; U+1F52E +🧿 nazar amulet; U+1F9FF +🎮 video game; U+1F3AE +🕹 joystick; U+1F579 +🎰 slot machine; U+1F3B0 +🎲 game die; U+1F3B2 +🧩 jigsaw; U+1F9E9 +🧸 teddy bear; U+1F9F8 +♠ spade suit; U+2660 +♥ heart suit; U+2665 +♦ diamond suit; U+2666 +♣ club suit; U+2663 +♟ chess pawn; U+265F +🃏 joker; U+1F0CF +🀄 mahjong red dragon; U+1F004 +🎴 flower playing cards; U+1F3B4 +🎭 performing arts; U+1F3AD +🖼 framed picture; U+1F5BC +🎨 artist palette; U+1F3A8 +🧵 thread; U+1F9F5 +🧶 yarn; U+1F9F6 +👓 glasses; U+1F453 +🕶 sunglasses; U+1F576 +🥽 goggles; U+1F97D +🥼 lab coat; U+1F97C +👔 necktie; U+1F454 +👕 t-shirt; U+1F455 +👖 jeans; U+1F456 +🧣 scarf; U+1F9E3 +🧤 gloves; U+1F9E4 +🧥 coat; U+1F9E5 +🧦 socks; U+1F9E6 +👗 dress; U+1F457 +👘 kimono; U+1F458 +👙 bikini; U+1F459 +👚 woman’s clothes; U+1F45A +👛 purse; U+1F45B +👜 handbag; U+1F45C +👝 clutch bag; U+1F45D +🛍 shopping bags; U+1F6CD +🎒 backpack; U+1F392 +👞 man’s shoe; U+1F45E +👟 running shoe; U+1F45F +🥾 hiking boot; U+1F97E +🥿 flat shoe; U+1F97F +👠 high-heeled shoe; U+1F460 +👡 woman’s sandal; U+1F461 +👢 woman’s boot; U+1F462 +👑 crown; U+1F451 +👒 woman’s hat; U+1F452 +🎩 top hat; U+1F3A9 +🎓 graduation cap; U+1F393 +🧢 billed cap; U+1F9E2 +⛑ rescue worker’s helmet; U+26D1 +📿 prayer beads; U+1F4FF +💄 lipstick; U+1F484 +💍 ring; U+1F48D +💎 gem stone; U+1F48E +🔇 muted speaker; U+1F507 +🔈 speaker low volume; U+1F508 +🔉 speaker medium volume; U+1F509 +🔊 speaker high volume; U+1F50A +📢 loudspeaker; U+1F4E2 +📣 megaphone; U+1F4E3 +📯 postal horn; U+1F4EF +🔔 bell; U+1F514 +🔕 bell with slash; U+1F515 +🎼 musical score; U+1F3BC +🎵 musical note; U+1F3B5 +🎶 musical notes; U+1F3B6 +🎙 studio microphone; U+1F399 +🎚 level slider; U+1F39A +🎛 control knobs; U+1F39B +🎤 microphone; U+1F3A4 +🎧 headphone; U+1F3A7 +📻 radio; U+1F4FB +🎷 saxophone; U+1F3B7 +🎸 guitar; U+1F3B8 +🎹 musical keyboard; U+1F3B9 +🎺 trumpet; U+1F3BA +🎻 violin; U+1F3BB +🥁 drum; U+1F941 +📱 mobile phone; U+1F4F1 +📲 mobile phone with arrow; U+1F4F2 +☎ telephone; U+260E +📞 telephone receiver; U+1F4DE +📟 pager; U+1F4DF +📠 fax machine; U+1F4E0 +🔋 battery; U+1F50B +🔌 electric plug; U+1F50C +💻 laptop computer; U+1F4BB +🖥 desktop computer; U+1F5A5 +🖨 printer; U+1F5A8 +⌨ keyboard; U+2328 +🖱 computer mouse; U+1F5B1 +🖲 trackball; U+1F5B2 +💽 computer disk; U+1F4BD +💾 floppy disk; U+1F4BE +💿 optical disk; U+1F4BF +📀 dvd; U+1F4C0 +🧮 abacus; U+1F9EE +🎥 movie camera; U+1F3A5 +🎞 film frames; U+1F39E +📽 film projector; U+1F4FD +🎬 clapper board; U+1F3AC +📺 television; U+1F4FA +📷 camera; U+1F4F7 +📸 camera with flash; U+1F4F8 +📹 video camera; U+1F4F9 +📼 videocassette; U+1F4FC +🔍 magnifying glass tilted left; U+1F50D +🔎 magnifying glass tilted right; U+1F50E +🕯 candle; U+1F56F +💡 light bulb; U+1F4A1 +🔦 flashlight; U+1F526 +🏮 red paper lantern; U+1F3EE +📔 notebook with decorative cover; U+1F4D4 +📕 closed book; U+1F4D5 +📖 open book; U+1F4D6 +📗 green book; U+1F4D7 +📘 blue book; U+1F4D8 +📙 orange book; U+1F4D9 +📚 books; U+1F4DA +📓 notebook; U+1F4D3 +📒 ledger; U+1F4D2 +📃 page with curl; U+1F4C3 +📜 scroll; U+1F4DC +📄 page facing up; U+1F4C4 +📰 newspaper; U+1F4F0 +🗞 rolled-up newspaper; U+1F5DE +📑 bookmark tabs; U+1F4D1 +🔖 bookmark; U+1F516 +🏷 label; U+1F3F7 +💰 money bag; U+1F4B0 +💴 yen banknote; U+1F4B4 +💵 dollar banknote; U+1F4B5 +💶 euro banknote; U+1F4B6 +💷 pound banknote; U+1F4B7 +💸 money with wings; U+1F4B8 +💳 credit card; U+1F4B3 +🧾 receipt; U+1F9FE +💹 chart increasing with yen; U+1F4B9 +💱 currency exchange; U+1F4B1 +💲 heavy dollar sign; U+1F4B2 +✉ envelope; U+2709 +📧 e-mail; U+1F4E7 +📨 incoming envelope; U+1F4E8 +📩 envelope with arrow; U+1F4E9 +📤 outbox tray; U+1F4E4 +📥 inbox tray; U+1F4E5 +📦 package; U+1F4E6 +📫 closed mailbox with raised flag; U+1F4EB +📪 closed mailbox with lowered flag; U+1F4EA +📬 open mailbox with raised flag; U+1F4EC +📭 open mailbox with lowered flag; U+1F4ED +📮 postbox; U+1F4EE +🗳 ballot box with ballot; U+1F5F3 +✏ pencil; U+270F +✒ black nib; U+2712 +🖋 fountain pen; U+1F58B +🖊 pen; U+1F58A +🖌 paintbrush; U+1F58C +🖍 crayon; U+1F58D +📝 memo; U+1F4DD +💼 briefcase; U+1F4BC +📁 file folder; U+1F4C1 +📂 open file folder; U+1F4C2 +🗂 card index dividers; U+1F5C2 +📅 calendar; U+1F4C5 +📆 tear-off calendar; U+1F4C6 +🗒 spiral notepad; U+1F5D2 +🗓 spiral calendar; U+1F5D3 +📇 card index; U+1F4C7 +📈 chart increasing; U+1F4C8 +📉 chart decreasing; U+1F4C9 +📊 bar chart; U+1F4CA +📋 clipboard; U+1F4CB +📌 pushpin; U+1F4CC +📍 round pushpin; U+1F4CD +📎 paperclip; U+1F4CE +🖇 linked paperclips; U+1F587 +📏 straight ruler; U+1F4CF +📐 triangular ruler; U+1F4D0 +✂ scissors; U+2702 +🗃 card file box; U+1F5C3 +🗄 file cabinet; U+1F5C4 +🗑 wastebasket; U+1F5D1 +🔒 locked; U+1F512 +🔓 unlocked; U+1F513 +🔏 locked with pen; U+1F50F +🔐 locked with key; U+1F510 +🔑 key; U+1F511 +🗝 old key; U+1F5DD +🔨 hammer; U+1F528 +⛏ pick; U+26CF +⚒ hammer and pick; U+2692 +🛠 hammer and wrench; U+1F6E0 +🗡 dagger; U+1F5E1 +⚔ crossed swords; U+2694 +🔫 pistol; U+1F52B +🏹 bow and arrow; U+1F3F9 +🛡 shield; U+1F6E1 +🔧 wrench; U+1F527 +🔩 nut and bolt; U+1F529 +⚙ gear; U+2699 +🗜 clamp; U+1F5DC +⚖ balance scale; U+2696 +🔗 link; U+1F517 +⛓ chains; U+26D3 +🧰 toolbox; U+1F9F0 +🧲 magnet; U+1F9F2 +⚗ alembic; U+2697 +🧪 test tube; U+1F9EA +🧫 petri dish; U+1F9EB +🧬 dna; U+1F9EC +🔬 microscope; U+1F52C +🔭 telescope; U+1F52D +📡 satellite antenna; U+1F4E1 +💉 syringe; U+1F489 +💊 pill; U+1F48A +🚪 door; U+1F6AA +🛏 bed; U+1F6CF +🛋 couch and lamp; U+1F6CB +🚽 toilet; U+1F6BD +🚿 shower; U+1F6BF +🛁 bathtub; U+1F6C1 +🧴 lotion bottle; U+1F9F4 +🧷 safety pin; U+1F9F7 +🧹 broom; U+1F9F9 +🧺 basket; U+1F9FA +🧻 roll of paper; U+1F9FB +🧼 soap; U+1F9FC +🧽 sponge; U+1F9FD +🧯 fire extinguisher; U+1F9EF +🛒 shopping cart; U+1F6D2 +🚬 cigarette; U+1F6AC +⚰ coffin; U+26B0 +⚱ funeral urn; U+26B1 +🗿 moai; U+1F5FF +🏧 ATM sign; U+1F3E7 +🚮 litter in bin sign; U+1F6AE +🚰 potable water; U+1F6B0 +♿ wheelchair symbol; U+267F +🚹 men’s room; U+1F6B9 +🚺 women’s room; U+1F6BA +🚻 restroom; U+1F6BB +🚼 baby symbol; U+1F6BC +🚾 water closet; U+1F6BE +🛂 passport control; U+1F6C2 +🛃 customs; U+1F6C3 +🛄 baggage claim; U+1F6C4 +🛅 left luggage; U+1F6C5 +⚠ warning; U+26A0 +🚸 children crossing; U+1F6B8 +⛔ no entry; U+26D4 +🚫 prohibited; U+1F6AB +🚳 no bicycles; U+1F6B3 +🚭 no smoking; U+1F6AD +🚯 no littering; U+1F6AF +🚱 non-potable water; U+1F6B1 +🚷 no pedestrians; U+1F6B7 +📵 no mobile phones; U+1F4F5 +🔞 no one under eighteen; U+1F51E +☢ radioactive; U+2622 +☣ biohazard; U+2623 +⬆ up arrow; U+2B06 +↗ up-right arrow; U+2197 +➡ right arrow; U+27A1 +↘ down-right arrow; U+2198 +⬇ down arrow; U+2B07 +↙ down-left arrow; U+2199 +⬅ left arrow; U+2B05 +↖ up-left arrow; U+2196 +↕ up-down arrow; U+2195 +↔ left-right arrow; U+2194 +↩ right arrow curving left; U+21A9 +↪ left arrow curving right; U+21AA +⤴ right arrow curving up; U+2934 +⤵ right arrow curving down; U+2935 +🔃 clockwise vertical arrows; U+1F503 +🔄 counterclockwise arrows button; U+1F504 +🔙 BACK arrow; U+1F519 +🔚 END arrow; U+1F51A +🔛 ON! arrow; U+1F51B +🔜 SOON arrow; U+1F51C +🔝 TOP arrow; U+1F51D +🛐 place of worship; U+1F6D0 +⚛ atom symbol; U+269B +🕉 om; U+1F549 +✡ star of David; U+2721 +☸ wheel of dharma; U+2638 +☯ yin yang; U+262F +✝ latin cross; U+271D +☦ orthodox cross; U+2626 +☪ star and crescent; U+262A +☮ peace symbol; U+262E +🕎 menorah; U+1F54E +🔯 dotted six-pointed star; U+1F52F +♈ Aries; U+2648 +♉ Taurus; U+2649 +♊ Gemini; U+264A +♋ Cancer; U+264B +♌ Leo; U+264C +♍ Virgo; U+264D +♎ Libra; U+264E +♏ Scorpio; U+264F +♐ Sagittarius; U+2650 +♑ Capricorn; U+2651 +♒ Aquarius; U+2652 +♓ Pisces; U+2653 +⛎ Ophiuchus; U+26CE +🔀 shuffle tracks button; U+1F500 +🔁 repeat button; U+1F501 +🔂 repeat single button; U+1F502 +▶ play button; U+25B6 +⏩ fast-forward button; U+23E9 +⏭ next track button; U+23ED +⏯ play or pause button; U+23EF +◀ reverse button; U+25C0 +⏪ fast reverse button; U+23EA +⏮ last track button; U+23EE +🔼 upwards button; U+1F53C +⏫ fast up button; U+23EB +🔽 downwards button; U+1F53D +⏬ fast down button; U+23EC +⏸ pause button; U+23F8 +⏹ stop button; U+23F9 +⏺ record button; U+23FA +⏏ eject button; U+23CF +🎦 cinema; U+1F3A6 +🔅 dim button; U+1F505 +🔆 bright button; U+1F506 +📶 antenna bars; U+1F4F6 +📳 vibration mode; U+1F4F3 +📴 mobile phone off; U+1F4F4 +♀ female sign; U+2640 +♂ male sign; U+2642 +⚕ medical symbol; U+2695 +♾ infinity; U+267E +♻ recycling symbol; U+267B +⚜ fleur-de-lis; U+269C +🔱 trident emblem; U+1F531 +📛 name badge; U+1F4DB +🔰 Japanese symbol for beginner; U+1F530 +⭕ heavy large circle; U+2B55 +✅ white heavy check mark; U+2705 +☑ ballot box with check; U+2611 +✔ heavy check mark; U+2714 +✖ heavy multiplication x; U+2716 +❌ cross mark; U+274C +❎ cross mark button; U+274E +➕ heavy plus sign; U+2795 +➖ heavy minus sign; U+2796 +➗ heavy division sign; U+2797 +➰ curly loop; U+27B0 +➿ double curly loop; U+27BF +〽 part alternation mark; U+303D +✳ eight-spoked asterisk; U+2733 +✴ eight-pointed star; U+2734 +❇ sparkle; U+2747 +‼ double exclamation mark; U+203C +⁉ exclamation question mark; U+2049 +❓ question mark; U+2753 +❔ white question mark; U+2754 +❕ white exclamation mark; U+2755 +❗ exclamation mark; U+2757 +〰 wavy dash; U+3030 +© copyright; U+00A9 +® registered; U+00AE +™ trade mark; U+2122 +#️⃣ keycap: #; U+0023 U+FE0F U+20E3 +*️⃣ keycap: *; U+002A U+FE0F U+20E3 +0️⃣ keycap: 0; U+0030 U+FE0F U+20E3 +1️⃣ keycap: 1; U+0031 U+FE0F U+20E3 +2️⃣ keycap: 2; U+0032 U+FE0F U+20E3 +3️⃣ keycap: 3; U+0033 U+FE0F U+20E3 +4️⃣ keycap: 4; U+0034 U+FE0F U+20E3 +5️⃣ keycap: 5; U+0035 U+FE0F U+20E3 +6️⃣ keycap: 6; U+0036 U+FE0F U+20E3 +7️⃣ keycap: 7; U+0037 U+FE0F U+20E3 +8️⃣ keycap: 8; U+0038 U+FE0F U+20E3 +9️⃣ keycap: 9; U+0039 U+FE0F U+20E3 +🔟 keycap: 10; U+1F51F +🔠 input latin uppercase; U+1F520 +🔡 input latin lowercase; U+1F521 +🔢 input numbers; U+1F522 +🔣 input symbols; U+1F523 +🔤 input latin letters; U+1F524 +🅰 A button (blood type); U+1F170 +🆎 AB button (blood type); U+1F18E +🅱 B button (blood type); U+1F171 +🆑 CL button; U+1F191 +🆒 COOL button; U+1F192 +🆓 FREE button; U+1F193 +ℹ information; U+2139 +🆔 ID button; U+1F194 +Ⓜ circled M; U+24C2 +🆕 NEW button; U+1F195 +🆖 NG button; U+1F196 +🅾 O button (blood type); U+1F17E +🆗 OK button; U+1F197 +🅿 P button; U+1F17F +🆘 SOS button; U+1F198 +🆙 UP! button; U+1F199 +🆚 VS button; U+1F19A +🈁 Japanese “here” button; U+1F201 +🈂 Japanese “service charge” button; U+1F202 +🈷 Japanese “monthly amount” button; U+1F237 +🈶 Japanese “not free of charge” button; U+1F236 +🈯 Japanese “reserved” button; U+1F22F +🉐 Japanese “bargain” button; U+1F250 +🈹 Japanese “discount” button; U+1F239 +🈚 Japanese “free of charge” button; U+1F21A +🈲 Japanese “prohibited” button; U+1F232 +🉑 Japanese “acceptable” button; U+1F251 +🈸 Japanese “application” button; U+1F238 +🈴 Japanese “passing grade” button; U+1F234 +🈳 Japanese “vacancy” button; U+1F233 +㊗ Japanese “congratulations” button; U+3297 +㊙ Japanese “secret” button; U+3299 +🈺 Japanese “open for business” button; U+1F23A +🈵 Japanese “no vacancy” button; U+1F235 +🔴 red circle; U+1F534 +🔵 blue circle; U+1F535 +⚪ white circle; U+26AA +⚫ black circle; U+26AB +⬜ white large square; U+2B1C +⬛ black large square; U+2B1B +◼ black medium square; U+25FC +◻ white medium square; U+25FB +◽ white medium-small square; U+25FD +◾ black medium-small square; U+25FE +▫ white small square; U+25AB +▪ black small square; U+25AA +🔶 large orange diamond; U+1F536 +🔷 large blue diamond; U+1F537 +🔸 small orange diamond; U+1F538 +🔹 small blue diamond; U+1F539 +🔺 red triangle pointed up; U+1F53A +🔻 red triangle pointed down; U+1F53B +💠 diamond with a dot; U+1F4A0 +🔘 radio button; U+1F518 +🔲 black square button; U+1F532 +🔳 white square button; U+1F533 +🏁 chequered flag; U+1F3C1 +🚩 triangular flag; U+1F6A9 +🎌 crossed flags; U+1F38C +🏴 black flag; U+1F3F4 +🏳 white flag; U+1F3F3 +🏳️‍🌈 rainbow flag; U+1F3F3 U+FE0F U+200D U+1F308 +🏴‍☠️ pirate flag; U+1F3F4 U+200D U+2620 U+FE0F +🇦🇨 flag: Ascension Island; U+1F1E6 U+1F1E8 +🇦🇩 flag: Andorra; U+1F1E6 U+1F1E9 +🇦🇪 flag: United Arab Emirates; U+1F1E6 U+1F1EA +🇦🇫 flag: Afghanistan; U+1F1E6 U+1F1EB +🇦🇬 flag: Antigua & Barbuda; U+1F1E6 U+1F1EC +🇦🇮 flag: Anguilla; U+1F1E6 U+1F1EE +🇦🇱 flag: Albania; U+1F1E6 U+1F1F1 +🇦🇲 flag: Armenia; U+1F1E6 U+1F1F2 +🇦🇴 flag: Angola; U+1F1E6 U+1F1F4 +🇦🇶 flag: Antarctica; U+1F1E6 U+1F1F6 +🇦🇷 flag: Argentina; U+1F1E6 U+1F1F7 +🇦🇸 flag: American Samoa; U+1F1E6 U+1F1F8 +🇦🇹 flag: Austria; U+1F1E6 U+1F1F9 +🇦🇺 flag: Australia; U+1F1E6 U+1F1FA +🇦🇼 flag: Aruba; U+1F1E6 U+1F1FC +🇦🇽 flag: Åland Islands; U+1F1E6 U+1F1FD +🇦🇿 flag: Azerbaijan; U+1F1E6 U+1F1FF +🇧🇦 flag: Bosnia & Herzegovina; U+1F1E7 U+1F1E6 +🇧🇧 flag: Barbados; U+1F1E7 U+1F1E7 +🇧🇩 flag: Bangladesh; U+1F1E7 U+1F1E9 +🇧🇪 flag: Belgium; U+1F1E7 U+1F1EA +🇧🇫 flag: Burkina Faso; U+1F1E7 U+1F1EB +🇧🇬 flag: Bulgaria; U+1F1E7 U+1F1EC +🇧🇭 flag: Bahrain; U+1F1E7 U+1F1ED +🇧🇮 flag: Burundi; U+1F1E7 U+1F1EE +🇧🇯 flag: Benin; U+1F1E7 U+1F1EF +🇧🇱 flag: St. Barthélemy; U+1F1E7 U+1F1F1 +🇧🇲 flag: Bermuda; U+1F1E7 U+1F1F2 +🇧🇳 flag: Brunei; U+1F1E7 U+1F1F3 +🇧🇴 flag: Bolivia; U+1F1E7 U+1F1F4 +🇧🇶 flag: Caribbean Netherlands; U+1F1E7 U+1F1F6 +🇧🇷 flag: Brazil; U+1F1E7 U+1F1F7 +🇧🇸 flag: Bahamas; U+1F1E7 U+1F1F8 +🇧🇹 flag: Bhutan; U+1F1E7 U+1F1F9 +🇧🇻 flag: Bouvet Island; U+1F1E7 U+1F1FB +🇧🇼 flag: Botswana; U+1F1E7 U+1F1FC +🇧🇾 flag: Belarus; U+1F1E7 U+1F1FE +🇧🇿 flag: Belize; U+1F1E7 U+1F1FF +🇨🇦 flag: Canada; U+1F1E8 U+1F1E6 +🇨🇨 flag: Cocos (Keeling) Islands; U+1F1E8 U+1F1E8 +🇨🇩 flag: Congo - Kinshasa; U+1F1E8 U+1F1E9 +🇨🇫 flag: Central African Republic; U+1F1E8 U+1F1EB +🇨🇬 flag: Congo - Brazzaville; U+1F1E8 U+1F1EC +🇨🇭 flag: Switzerland; U+1F1E8 U+1F1ED +🇨🇮 flag: Côte d’Ivoire; U+1F1E8 U+1F1EE +🇨🇰 flag: Cook Islands; U+1F1E8 U+1F1F0 +🇨🇱 flag: Chile; U+1F1E8 U+1F1F1 +🇨🇲 flag: Cameroon; U+1F1E8 U+1F1F2 +🇨🇳 flag: China; U+1F1E8 U+1F1F3 +🇨🇴 flag: Colombia; U+1F1E8 U+1F1F4 +🇨🇵 flag: Clipperton Island; U+1F1E8 U+1F1F5 +🇨🇷 flag: Costa Rica; U+1F1E8 U+1F1F7 +🇨🇺 flag: Cuba; U+1F1E8 U+1F1FA +🇨🇻 flag: Cape Verde; U+1F1E8 U+1F1FB +🇨🇼 flag: Curaçao; U+1F1E8 U+1F1FC +🇨🇽 flag: Christmas Island; U+1F1E8 U+1F1FD +🇨🇾 flag: Cyprus; U+1F1E8 U+1F1FE +🇨🇿 flag: Czechia; U+1F1E8 U+1F1FF +🇩🇪 flag: Germany; U+1F1E9 U+1F1EA +🇩🇬 flag: Diego Garcia; U+1F1E9 U+1F1EC +🇩🇯 flag: Djibouti; U+1F1E9 U+1F1EF +🇩🇰 flag: Denmark; U+1F1E9 U+1F1F0 +🇩🇲 flag: Dominica; U+1F1E9 U+1F1F2 +🇩🇴 flag: Dominican Republic; U+1F1E9 U+1F1F4 +🇩🇿 flag: Algeria; U+1F1E9 U+1F1FF +🇪🇦 flag: Ceuta & Melilla; U+1F1EA U+1F1E6 +🇪🇨 flag: Ecuador; U+1F1EA U+1F1E8 +🇪🇪 flag: Estonia; U+1F1EA U+1F1EA +🇪🇬 flag: Egypt; U+1F1EA U+1F1EC +🇪🇭 flag: Western Sahara; U+1F1EA U+1F1ED +🇪🇷 flag: Eritrea; U+1F1EA U+1F1F7 +🇪🇸 flag: Spain; U+1F1EA U+1F1F8 +🇪🇹 flag: Ethiopia; U+1F1EA U+1F1F9 +🇪🇺 flag: European Union; U+1F1EA U+1F1FA +🇫🇮 flag: Finland; U+1F1EB U+1F1EE +🇫🇯 flag: Fiji; U+1F1EB U+1F1EF +🇫🇰 flag: Falkland Islands; U+1F1EB U+1F1F0 +🇫🇲 flag: Micronesia; U+1F1EB U+1F1F2 +🇫🇴 flag: Faroe Islands; U+1F1EB U+1F1F4 +🇫🇷 flag: France; U+1F1EB U+1F1F7 +🇬🇦 flag: Gabon; U+1F1EC U+1F1E6 +🇬🇧 flag: United Kingdom; U+1F1EC U+1F1E7 +🇬🇩 flag: Grenada; U+1F1EC U+1F1E9 +🇬🇪 flag: Georgia; U+1F1EC U+1F1EA +🇬🇫 flag: French Guiana; U+1F1EC U+1F1EB +🇬🇬 flag: Guernsey; U+1F1EC U+1F1EC +🇬🇭 flag: Ghana; U+1F1EC U+1F1ED +🇬🇮 flag: Gibraltar; U+1F1EC U+1F1EE +🇬🇱 flag: Greenland; U+1F1EC U+1F1F1 +🇬🇲 flag: Gambia; U+1F1EC U+1F1F2 +🇬🇳 flag: Guinea; U+1F1EC U+1F1F3 +🇬🇵 flag: Guadeloupe; U+1F1EC U+1F1F5 +🇬🇶 flag: Equatorial Guinea; U+1F1EC U+1F1F6 +🇬🇷 flag: Greece; U+1F1EC U+1F1F7 +🇬🇸 flag: South Georgia & South Sandwich Islands; U+1F1EC U+1F1F8 +🇬🇹 flag: Guatemala; U+1F1EC U+1F1F9 +🇬🇺 flag: Guam; U+1F1EC U+1F1FA +🇬🇼 flag: Guinea-Bissau; U+1F1EC U+1F1FC +🇬🇾 flag: Guyana; U+1F1EC U+1F1FE +🇭🇰 flag: Hong Kong SAR China; U+1F1ED U+1F1F0 +🇭🇲 flag: Heard & McDonald Islands; U+1F1ED U+1F1F2 +🇭🇳 flag: Honduras; U+1F1ED U+1F1F3 +🇭🇷 flag: Croatia; U+1F1ED U+1F1F7 +🇭🇹 flag: Haiti; U+1F1ED U+1F1F9 +🇭🇺 flag: Hungary; U+1F1ED U+1F1FA +🇮🇨 flag: Canary Islands; U+1F1EE U+1F1E8 +🇮🇩 flag: Indonesia; U+1F1EE U+1F1E9 +🇮🇪 flag: Ireland; U+1F1EE U+1F1EA +🇮🇱 flag: Israel; U+1F1EE U+1F1F1 +🇮🇲 flag: Isle of Man; U+1F1EE U+1F1F2 +🇮🇳 flag: India; U+1F1EE U+1F1F3 +🇮🇴 flag: British Indian Ocean Territory; U+1F1EE U+1F1F4 +🇮🇶 flag: Iraq; U+1F1EE U+1F1F6 +🇮🇷 flag: Iran; U+1F1EE U+1F1F7 +🇮🇸 flag: Iceland; U+1F1EE U+1F1F8 +🇮🇹 flag: Italy; U+1F1EE U+1F1F9 +🇯🇪 flag: Jersey; U+1F1EF U+1F1EA +🇯🇲 flag: Jamaica; U+1F1EF U+1F1F2 +🇯🇴 flag: Jordan; U+1F1EF U+1F1F4 +🇯🇵 flag: Japan; U+1F1EF U+1F1F5 +🇰🇪 flag: Kenya; U+1F1F0 U+1F1EA +🇰🇬 flag: Kyrgyzstan; U+1F1F0 U+1F1EC +🇰🇭 flag: Cambodia; U+1F1F0 U+1F1ED +🇰🇮 flag: Kiribati; U+1F1F0 U+1F1EE +🇰🇲 flag: Comoros; U+1F1F0 U+1F1F2 +🇰🇳 flag: St. Kitts & Nevis; U+1F1F0 U+1F1F3 +🇰🇵 flag: North Korea; U+1F1F0 U+1F1F5 +🇰🇷 flag: South Korea; U+1F1F0 U+1F1F7 +🇰🇼 flag: Kuwait; U+1F1F0 U+1F1FC +🇰🇾 flag: Cayman Islands; U+1F1F0 U+1F1FE +🇰🇿 flag: Kazakhstan; U+1F1F0 U+1F1FF +🇱🇦 flag: Laos; U+1F1F1 U+1F1E6 +🇱🇧 flag: Lebanon; U+1F1F1 U+1F1E7 +🇱🇨 flag: St. Lucia; U+1F1F1 U+1F1E8 +🇱🇮 flag: Liechtenstein; U+1F1F1 U+1F1EE +🇱🇰 flag: Sri Lanka; U+1F1F1 U+1F1F0 +🇱🇷 flag: Liberia; U+1F1F1 U+1F1F7 +🇱🇸 flag: Lesotho; U+1F1F1 U+1F1F8 +🇱🇹 flag: Lithuania; U+1F1F1 U+1F1F9 +🇱🇺 flag: Luxembourg; U+1F1F1 U+1F1FA +🇱🇻 flag: Latvia; U+1F1F1 U+1F1FB +🇱🇾 flag: Libya; U+1F1F1 U+1F1FE +🇲🇦 flag: Morocco; U+1F1F2 U+1F1E6 +🇲🇨 flag: Monaco; U+1F1F2 U+1F1E8 +🇲🇩 flag: Moldova; U+1F1F2 U+1F1E9 +🇲🇪 flag: Montenegro; U+1F1F2 U+1F1EA +🇲🇫 flag: St. Martin; U+1F1F2 U+1F1EB +🇲🇬 flag: Madagascar; U+1F1F2 U+1F1EC +🇲🇭 flag: Marshall Islands; U+1F1F2 U+1F1ED +🇲🇰 flag: Macedonia; U+1F1F2 U+1F1F0 +🇲🇱 flag: Mali; U+1F1F2 U+1F1F1 +🇲🇲 flag: Myanmar (Burma); U+1F1F2 U+1F1F2 +🇲🇳 flag: Mongolia; U+1F1F2 U+1F1F3 +🇲🇴 flag: Macau SAR China; U+1F1F2 U+1F1F4 +🇲🇵 flag: Northern Mariana Islands; U+1F1F2 U+1F1F5 +🇲🇶 flag: Martinique; U+1F1F2 U+1F1F6 +🇲🇷 flag: Mauritania; U+1F1F2 U+1F1F7 +🇲🇸 flag: Montserrat; U+1F1F2 U+1F1F8 +🇲🇹 flag: Malta; U+1F1F2 U+1F1F9 +🇲🇺 flag: Mauritius; U+1F1F2 U+1F1FA +🇲🇻 flag: Maldives; U+1F1F2 U+1F1FB +🇲🇼 flag: Malawi; U+1F1F2 U+1F1FC +🇲🇽 flag: Mexico; U+1F1F2 U+1F1FD +🇲🇾 flag: Malaysia; U+1F1F2 U+1F1FE +🇲🇿 flag: Mozambique; U+1F1F2 U+1F1FF +🇳🇦 flag: Namibia; U+1F1F3 U+1F1E6 +🇳🇨 flag: New Caledonia; U+1F1F3 U+1F1E8 +🇳🇪 flag: Niger; U+1F1F3 U+1F1EA +🇳🇫 flag: Norfolk Island; U+1F1F3 U+1F1EB +🇳🇬 flag: Nigeria; U+1F1F3 U+1F1EC +🇳🇮 flag: Nicaragua; U+1F1F3 U+1F1EE +🇳🇱 flag: Netherlands; U+1F1F3 U+1F1F1 +🇳🇴 flag: Norway; U+1F1F3 U+1F1F4 +🇳🇵 flag: Nepal; U+1F1F3 U+1F1F5 +🇳🇷 flag: Nauru; U+1F1F3 U+1F1F7 +🇳🇺 flag: Niue; U+1F1F3 U+1F1FA +🇳🇿 flag: New Zealand; U+1F1F3 U+1F1FF +🇴🇲 flag: Oman; U+1F1F4 U+1F1F2 +🇵🇦 flag: Panama; U+1F1F5 U+1F1E6 +🇵🇪 flag: Peru; U+1F1F5 U+1F1EA +🇵🇫 flag: French Polynesia; U+1F1F5 U+1F1EB +🇵🇬 flag: Papua New Guinea; U+1F1F5 U+1F1EC +🇵🇭 flag: Philippines; U+1F1F5 U+1F1ED +🇵🇰 flag: Pakistan; U+1F1F5 U+1F1F0 +🇵🇱 flag: Poland; U+1F1F5 U+1F1F1 +🇵🇲 flag: St. Pierre & Miquelon; U+1F1F5 U+1F1F2 +🇵🇳 flag: Pitcairn Islands; U+1F1F5 U+1F1F3 +🇵🇷 flag: Puerto Rico; U+1F1F5 U+1F1F7 +🇵🇸 flag: Palestinian Territories; U+1F1F5 U+1F1F8 +🇵🇹 flag: Portugal; U+1F1F5 U+1F1F9 +🇵🇼 flag: Palau; U+1F1F5 U+1F1FC +🇵🇾 flag: Paraguay; U+1F1F5 U+1F1FE +🇶🇦 flag: Qatar; U+1F1F6 U+1F1E6 +🇷🇪 flag: Réunion; U+1F1F7 U+1F1EA +🇷🇴 flag: Romania; U+1F1F7 U+1F1F4 +🇷🇸 flag: Serbia; U+1F1F7 U+1F1F8 +🇷🇺 flag: Russia; U+1F1F7 U+1F1FA +🇷🇼 flag: Rwanda; U+1F1F7 U+1F1FC +🇸🇦 flag: Saudi Arabia; U+1F1F8 U+1F1E6 +🇸🇧 flag: Solomon Islands; U+1F1F8 U+1F1E7 +🇸🇨 flag: Seychelles; U+1F1F8 U+1F1E8 +🇸🇩 flag: Sudan; U+1F1F8 U+1F1E9 +🇸🇪 flag: Sweden; U+1F1F8 U+1F1EA +🇸🇬 flag: Singapore; U+1F1F8 U+1F1EC +🇸🇭 flag: St. Helena; U+1F1F8 U+1F1ED +🇸🇮 flag: Slovenia; U+1F1F8 U+1F1EE +🇸🇯 flag: Svalbard & Jan Mayen; U+1F1F8 U+1F1EF +🇸🇰 flag: Slovakia; U+1F1F8 U+1F1F0 +🇸🇱 flag: Sierra Leone; U+1F1F8 U+1F1F1 +🇸🇲 flag: San Marino; U+1F1F8 U+1F1F2 +🇸🇳 flag: Senegal; U+1F1F8 U+1F1F3 +🇸🇴 flag: Somalia; U+1F1F8 U+1F1F4 +🇸🇷 flag: Suriname; U+1F1F8 U+1F1F7 +🇸🇸 flag: South Sudan; U+1F1F8 U+1F1F8 +🇸🇹 flag: São Tomé & Príncipe; U+1F1F8 U+1F1F9 +🇸🇻 flag: El Salvador; U+1F1F8 U+1F1FB +🇸🇽 flag: Sint Maarten; U+1F1F8 U+1F1FD +🇸🇾 flag: Syria; U+1F1F8 U+1F1FE +🇸🇿 flag: Swaziland; U+1F1F8 U+1F1FF +🇹🇦 flag: Tristan da Cunha; U+1F1F9 U+1F1E6 +🇹🇨 flag: Turks & Caicos Islands; U+1F1F9 U+1F1E8 +🇹🇩 flag: Chad; U+1F1F9 U+1F1E9 +🇹🇫 flag: French Southern Territories; U+1F1F9 U+1F1EB +🇹🇬 flag: Togo; U+1F1F9 U+1F1EC +🇹🇭 flag: Thailand; U+1F1F9 U+1F1ED +🇹🇯 flag: Tajikistan; U+1F1F9 U+1F1EF +🇹🇰 flag: Tokelau; U+1F1F9 U+1F1F0 +🇹🇱 flag: Timor-Leste; U+1F1F9 U+1F1F1 +🇹🇲 flag: Turkmenistan; U+1F1F9 U+1F1F2 +🇹🇳 flag: Tunisia; U+1F1F9 U+1F1F3 +🇹🇴 flag: Tonga; U+1F1F9 U+1F1F4 +🇹🇷 flag: Turkey; U+1F1F9 U+1F1F7 +🇹🇹 flag: Trinidad & Tobago; U+1F1F9 U+1F1F9 +🇹🇻 flag: Tuvalu; U+1F1F9 U+1F1FB +🇹🇼 flag: Taiwan; U+1F1F9 U+1F1FC +🇹🇿 flag: Tanzania; U+1F1F9 U+1F1FF +🇺🇦 flag: Ukraine; U+1F1FA U+1F1E6 +🇺🇬 flag: Uganda; U+1F1FA U+1F1EC +🇺🇲 flag: U.S. Outlying Islands; U+1F1FA U+1F1F2 +🇺🇳 flag: United Nations; U+1F1FA U+1F1F3 +🇺🇸 flag: United States; U+1F1FA U+1F1F8 +🇺🇾 flag: Uruguay; U+1F1FA U+1F1FE +🇺🇿 flag: Uzbekistan; U+1F1FA U+1F1FF +🇻🇦 flag: Vatican City; U+1F1FB U+1F1E6 +🇻🇨 flag: St. Vincent & Grenadines; U+1F1FB U+1F1E8 +🇻🇪 flag: Venezuela; U+1F1FB U+1F1EA +🇻🇬 flag: British Virgin Islands; U+1F1FB U+1F1EC +🇻🇮 flag: U.S. Virgin Islands; U+1F1FB U+1F1EE +🇻🇳 flag: Vietnam; U+1F1FB U+1F1F3 +🇻🇺 flag: Vanuatu; U+1F1FB U+1F1FA +🇼🇫 flag: Wallis & Futuna; U+1F1FC U+1F1EB +🇼🇸 flag: Samoa; U+1F1FC U+1F1F8 +🇽🇰 flag: Kosovo; U+1F1FD U+1F1F0 +🇾🇪 flag: Yemen; U+1F1FE U+1F1EA +🇾🇹 flag: Mayotte; U+1F1FE U+1F1F9 +🇿🇦 flag: South Africa; U+1F1FF U+1F1E6 +🇿🇲 flag: Zambia; U+1F1FF U+1F1F2 +🇿🇼 flag: Zimbabwe; U+1F1FF U+1F1FC +🏴󠁧󠁢󠁥󠁮󠁧󠁿 flag: England; U+1F3F4 U+E0067 U+E0062 U+E0065 U+E006E U+E0067 U+E007F +🏴󠁧󠁢󠁳󠁣󠁴󠁿 flag: Scotland; U+1F3F4 U+E0067 U+E0062 U+E0073 U+E0063 U+E0074 U+E007F +🏴󠁧󠁢󠁷󠁬󠁳󠁿 flag: Wales; U+1F3F4 U+E0067 U+E0062 U+E0077 U+E006C U+E0073 U+E007F diff --git a/fontawesome b/fontawesome @@ -0,0 +1,1483 @@ + fa-ad; U+F641 + fa-address-book; U+F2B9 + fa-address-card; U+F2BB + fa-adjust; U+F042 + fa-air-freshener; U+F5D0 + fa-align-center; U+F037 + fa-align-justify; U+F039 + fa-align-left; U+F036 + fa-align-right; U+F038 + fa-allergies; U+F461 + fa-ambulance; U+F0F9 + fa-american-sign-language-interpreting; U+F2A3 + fa-anchor; U+F13D + fa-angle-double-down; U+F103 + fa-angle-double-left; U+F100 + fa-angle-double-right; U+F101 + fa-angle-double-up; U+F102 + fa-angle-down; U+F107 + fa-angle-left; U+F104 + fa-angle-right; U+F105 + fa-angle-up; U+F106 + fa-angry; U+F556 + fa-ankh; U+F644 + fa-apple-alt; U+F5D1 + fa-archive; U+F187 + fa-archway; U+F557 + fa-arrow-alt-circle-down; U+F358 + fa-arrow-alt-circle-left; U+F359 + fa-arrow-alt-circle-right; U+F35A + fa-arrow-alt-circle-up; U+F35B + fa-arrow-circle-down; U+F0AB + fa-arrow-circle-left; U+F0A8 + fa-arrow-circle-right; U+F0A9 + fa-arrow-circle-up; U+F0AA + fa-arrow-down; U+F063 + fa-arrow-left; U+F060 + fa-arrow-right; U+F061 + fa-arrow-up; U+F062 + fa-arrows-alt; U+F0B2 + fa-arrows-alt-h; U+F337 + fa-arrows-alt-v; U+F338 + fa-assistive-listening-systems; U+F2A2 + fa-asterisk; U+F069 + fa-at; U+F1FA + fa-atlas; U+F558 + fa-atom; U+F5D2 + fa-audio-description; U+F29E + fa-award; U+F559 + fa-baby; U+F77C + fa-baby-carriage; U+F77D + fa-backspace; U+F55A + fa-backward; U+F04A + fa-balance-scale; U+F24E + fa-ban; U+F05E + fa-band-aid; U+F462 + fa-barcode; U+F02A + fa-bars; U+F0C9 + fa-baseball-ball; U+F433 + fa-basketball-ball; U+F434 + fa-bath; U+F2CD + fa-battery-empty; U+F244 + fa-battery-full; U+F240 + fa-battery-half; U+F242 + fa-battery-quarter; U+F243 + fa-battery-three-quarters; U+F241 + fa-bed; U+F236 + fa-beer; U+F0FC + fa-bell; U+F0F3 + fa-bell-slash; U+F1F6 + fa-bezier-curve; U+F55B + fa-bible; U+F647 + fa-bicycle; U+F206 + fa-binoculars; U+F1E5 + fa-biohazard; U+F780 + fa-birthday-cake; U+F1FD + fa-blender; U+F517 + fa-blender-phone; U+F6B6 + fa-blind; U+F29D + fa-blog; U+F781 + fa-bold; U+F032 + fa-bolt; U+F0E7 + fa-bomb; U+F1E2 + fa-bone; U+F5D7 + fa-bong; U+F55C + fa-book; U+F02D + fa-book-dead; U+F6B7 + fa-book-open; U+F518 + fa-book-reader; U+F5DA + fa-bookmark; U+F02E + fa-bowling-ball; U+F436 + fa-box; U+F466 + fa-box-open; U+F49E + fa-boxes; U+F468 + fa-braille; U+F2A1 + fa-brain; U+F5DC + fa-briefcase; U+F0B1 + fa-briefcase-medical; U+F469 + fa-broadcast-tower; U+F519 + fa-broom; U+F51A + fa-brush; U+F55D + fa-bug; U+F188 + fa-building; U+F1AD + fa-bullhorn; U+F0A1 + fa-bullseye; U+F140 + fa-burn; U+F46A + fa-bus; U+F207 + fa-bus-alt; U+F55E + fa-business-time; U+F64A + fa-calculator; U+F1EC + fa-calendar; U+F133 + fa-calendar-alt; U+F073 + fa-calendar-check; U+F274 + fa-calendar-day; U+F783 + fa-calendar-minus; U+F272 + fa-calendar-plus; U+F271 + fa-calendar-times; U+F273 + fa-calendar-week; U+F784 + fa-camera; U+F030 + fa-camera-retro; U+F083 + fa-campground; U+F6BB + fa-candy-cane; U+F786 + fa-cannabis; U+F55F + fa-capsules; U+F46B + fa-car; U+F1B9 + fa-car-alt; U+F5DE + fa-car-battery; U+F5DF + fa-car-crash; U+F5E1 + fa-car-side; U+F5E4 + fa-caret-down; U+F0D7 + fa-caret-left; U+F0D9 + fa-caret-right; U+F0DA + fa-caret-square-down; U+F150 + fa-caret-square-left; U+F191 + fa-caret-square-right; U+F152 + fa-caret-square-up; U+F151 + fa-caret-up; U+F0D8 + fa-carrot; U+F787 + fa-cart-arrow-down; U+F218 + fa-cart-plus; U+F217 + fa-cash-register; U+F788 + fa-cat; U+F6BE + fa-certificate; U+F0A3 + fa-chair; U+F6C0 + fa-chalkboard; U+F51B + fa-chalkboard-teacher; U+F51C + fa-charging-station; U+F5E7 + fa-chart-area; U+F1FE + fa-chart-bar; U+F080 + fa-chart-line; U+F201 + fa-chart-pie; U+F200 + fa-check; U+F00C + fa-check-circle; U+F058 + fa-check-double; U+F560 + fa-check-square; U+F14A + fa-chess; U+F439 + fa-chess-bishop; U+F43A + fa-chess-board; U+F43C + fa-chess-king; U+F43F + fa-chess-knight; U+F441 + fa-chess-pawn; U+F443 + fa-chess-queen; U+F445 + fa-chess-rook; U+F447 + fa-chevron-circle-down; U+F13A + fa-chevron-circle-left; U+F137 + fa-chevron-circle-right; U+F138 + fa-chevron-circle-up; U+F139 + fa-chevron-down; U+F078 + fa-chevron-left; U+F053 + fa-chevron-right; U+F054 + fa-chevron-up; U+F077 + fa-child; U+F1AE + fa-church; U+F51D + fa-circle; U+F111 + fa-circle-notch; U+F1CE + fa-city; U+F64F + fa-clipboard; U+F328 + fa-clipboard-check; U+F46C + fa-clipboard-list; U+F46D + fa-clock; U+F017 + fa-clone; U+F24D + fa-closed-captioning; U+F20A + fa-cloud; U+F0C2 + fa-cloud-download-alt; U+F381 + fa-cloud-meatball; U+F73B + fa-cloud-moon; U+F6C3 + fa-cloud-moon-rain; U+F73C + fa-cloud-rain; U+F73D + fa-cloud-showers-heavy; U+F740 + fa-cloud-sun; U+F6C4 + fa-cloud-sun-rain; U+F743 + fa-cloud-upload-alt; U+F382 + fa-cocktail; U+F561 + fa-code; U+F121 + fa-code-branch; U+F126 + fa-coffee; U+F0F4 + fa-cog; U+F013 + fa-cogs; U+F085 + fa-coins; U+F51E + fa-columns; U+F0DB + fa-comment; U+F075 + fa-comment-alt; U+F27A + fa-comment-dollar; U+F651 + fa-comment-dots; U+F4AD + fa-comment-slash; U+F4B3 + fa-comments; U+F086 + fa-comments-dollar; U+F653 + fa-compact-disc; U+F51F + fa-compass; U+F14E + fa-compress; U+F066 + fa-compress-arrows-alt; U+F78C + fa-concierge-bell; U+F562 + fa-cookie; U+F563 + fa-cookie-bite; U+F564 + fa-copy; U+F0C5 + fa-copyright; U+F1F9 + fa-couch; U+F4B8 + fa-credit-card; U+F09D + fa-crop; U+F125 + fa-crop-alt; U+F565 + fa-cross; U+F654 + fa-crosshairs; U+F05B + fa-crow; U+F520 + fa-crown; U+F521 + fa-cube; U+F1B2 + fa-cubes; U+F1B3 + fa-cut; U+F0C4 + fa-database; U+F1C0 + fa-deaf; U+F2A4 + fa-democrat; U+F747 + fa-desktop; U+F108 + fa-dharmachakra; U+F655 + fa-diagnoses; U+F470 + fa-dice; U+F522 + fa-dice-d20; U+F6CF + fa-dice-d6; U+F6D1 + fa-dice-five; U+F523 + fa-dice-four; U+F524 + fa-dice-one; U+F525 + fa-dice-six; U+F526 + fa-dice-three; U+F527 + fa-dice-two; U+F528 + fa-digital-tachograph; U+F566 + fa-directions; U+F5EB + fa-divide; U+F529 + fa-dizzy; U+F567 + fa-dna; U+F471 + fa-dog; U+F6D3 + fa-dollar-sign; U+F155 + fa-dolly; U+F472 + fa-dolly-flatbed; U+F474 + fa-donate; U+F4B9 + fa-door-closed; U+F52A + fa-door-open; U+F52B + fa-dot-circle; U+F192 + fa-dove; U+F4BA + fa-download; U+F019 + fa-drafting-compass; U+F568 + fa-dragon; U+F6D5 + fa-draw-polygon; U+F5EE + fa-drum; U+F569 + fa-drum-steelpan; U+F56A + fa-drumstick-bite; U+F6D7 + fa-dumbbell; U+F44B + fa-dumpster; U+F793 + fa-dumpster-fire; U+F794 + fa-dungeon; U+F6D9 + fa-edit; U+F044 + fa-eject; U+F052 + fa-ellipsis-h; U+F141 + fa-ellipsis-v; U+F142 + fa-envelope; U+F0E0 + fa-envelope-open; U+F2B6 + fa-envelope-open-text; U+F658 + fa-envelope-square; U+F199 + fa-equals; U+F52C + fa-eraser; U+F12D + fa-ethernet; U+F796 + fa-euro-sign; U+F153 + fa-exchange-alt; U+F362 + fa-exclamation; U+F12A + fa-exclamation-circle; U+F06A + fa-exclamation-triangle; U+F071 + fa-expand; U+F065 + fa-expand-arrows-alt; U+F31E + fa-external-link-alt; U+F35D + fa-external-link-square-alt; U+F360 + fa-eye; U+F06E + fa-eye-dropper; U+F1FB + fa-eye-slash; U+F070 + fa-fast-backward; U+F049 + fa-fast-forward; U+F050 + fa-fax; U+F1AC + fa-feather; U+F52D + fa-feather-alt; U+F56B + fa-female; U+F182 + fa-fighter-jet; U+F0FB + fa-file; U+F15B + fa-file-alt; U+F15C + fa-file-archive; U+F1C6 + fa-file-audio; U+F1C7 + fa-file-code; U+F1C9 + fa-file-contract; U+F56C + fa-file-csv; U+F6DD + fa-file-download; U+F56D + fa-file-excel; U+F1C3 + fa-file-export; U+F56E + fa-file-image; U+F1C5 + fa-file-import; U+F56F + fa-file-invoice; U+F570 + fa-file-invoice-dollar; U+F571 + fa-file-medical; U+F477 + fa-file-medical-alt; U+F478 + fa-file-pdf; U+F1C1 + fa-file-powerpoint; U+F1C4 + fa-file-prescription; U+F572 + fa-file-signature; U+F573 + fa-file-upload; U+F574 + fa-file-video; U+F1C8 + fa-file-word; U+F1C2 + fa-fill; U+F575 + fa-fill-drip; U+F576 + fa-film; U+F008 + fa-filter; U+F0B0 + fa-fingerprint; U+F577 + fa-fire; U+F06D + fa-fire-alt; U+F7E4 + fa-fire-extinguisher; U+F134 + fa-first-aid; U+F479 + fa-fish; U+F578 + fa-fist-raised; U+F6DE + fa-flag; U+F024 + fa-flag-checkered; U+F11E + fa-flag-usa; U+F74D + fa-flask; U+F0C3 + fa-flushed; U+F579 + fa-folder; U+F07B + fa-folder-minus; U+F65D + fa-folder-open; U+F07C + fa-folder-plus; U+F65E + fa-font; U+F031 + fa-font-awesome-logo-full; U+F4E6 + fa-football-ball; U+F44E + fa-forward; U+F04E + fa-frog; U+F52E + fa-frown; U+F119 + fa-frown-open; U+F57A + fa-funnel-dollar; U+F662 + fa-futbol; U+F1E3 + fa-gamepad; U+F11B + fa-gas-pump; U+F52F + fa-gavel; U+F0E3 + fa-gem; U+F3A5 + fa-genderless; U+F22D + fa-ghost; U+F6E2 + fa-gift; U+F06B + fa-gifts; U+F79C + fa-glass-cheers; U+F79F + fa-glass-martini; U+F000 + fa-glass-martini-alt; U+F57B + fa-glass-whiskey; U+F7A0 + fa-glasses; U+F530 + fa-globe; U+F0AC + fa-globe-africa; U+F57C + fa-globe-americas; U+F57D + fa-globe-asia; U+F57E + fa-globe-europe; U+F7A2 + fa-golf-ball; U+F450 + fa-gopuram; U+F664 + fa-graduation-cap; U+F19D + fa-greater-than; U+F531 + fa-greater-than-equal; U+F532 + fa-grimace; U+F57F + fa-grin; U+F580 + fa-grin-alt; U+F581 + fa-grin-beam; U+F582 + fa-grin-beam-sweat; U+F583 + fa-grin-hearts; U+F584 + fa-grin-squint; U+F585 + fa-grin-squint-tears; U+F586 + fa-grin-stars; U+F587 + fa-grin-tears; U+F588 + fa-grin-tongue; U+F589 + fa-grin-tongue-squint; U+F58A + fa-grin-tongue-wink; U+F58B + fa-grin-wink; U+F58C + fa-grip-horizontal; U+F58D + fa-grip-lines; U+F7A4 + fa-grip-lines-vertical; U+F7A5 + fa-grip-vertical; U+F58E + fa-guitar; U+F7A6 + fa-h-square; U+F0FD + fa-hammer; U+F6E3 + fa-hamsa; U+F665 + fa-hand-holding; U+F4BD + fa-hand-holding-heart; U+F4BE + fa-hand-holding-usd; U+F4C0 + fa-hand-lizard; U+F258 + fa-hand-paper; U+F256 + fa-hand-peace; U+F25B + fa-hand-point-down; U+F0A7 + fa-hand-point-left; U+F0A5 + fa-hand-point-right; U+F0A4 + fa-hand-point-up; U+F0A6 + fa-hand-pointer; U+F25A + fa-hand-rock; U+F255 + fa-hand-scissors; U+F257 + fa-hand-spock; U+F259 + fa-hands; U+F4C2 + fa-hands-helping; U+F4C4 + fa-handshake; U+F2B5 + fa-hanukiah; U+F6E6 + fa-hashtag; U+F292 + fa-hat-wizard; U+F6E8 + fa-haykal; U+F666 + fa-hdd; U+F0A0 + fa-heading; U+F1DC + fa-headphones; U+F025 + fa-headphones-alt; U+F58F + fa-headset; U+F590 + fa-heart; U+F004 + fa-heart-broken; U+F7A9 + fa-heartbeat; U+F21E + fa-helicopter; U+F533 + fa-highlighter; U+F591 + fa-hiking; U+F6EC + fa-hippo; U+F6ED + fa-history; U+F1DA + fa-hockey-puck; U+F453 + fa-holly-berry; U+F7AA + fa-home; U+F015 + fa-horse; U+F6F0 + fa-horse-head; U+F7AB + fa-hospital; U+F0F8 + fa-hospital-alt; U+F47D + fa-hospital-symbol; U+F47E + fa-hot-tub; U+F593 + fa-hotel; U+F594 + fa-hourglass; U+F254 + fa-hourglass-end; U+F253 + fa-hourglass-half; U+F252 + fa-hourglass-start; U+F251 + fa-house-damage; U+F6F1 + fa-hryvnia; U+F6F2 + fa-i-cursor; U+F246 + fa-icicles; U+F7AD + fa-id-badge; U+F2C1 + fa-id-card; U+F2C2 + fa-id-card-alt; U+F47F + fa-igloo; U+F7AE + fa-image; U+F03E + fa-images; U+F302 + fa-inbox; U+F01C + fa-indent; U+F03C + fa-industry; U+F275 + fa-infinity; U+F534 + fa-info; U+F129 + fa-info-circle; U+F05A + fa-italic; U+F033 + fa-jedi; U+F669 + fa-joint; U+F595 + fa-journal-whills; U+F66A + fa-kaaba; U+F66B + fa-key; U+F084 + fa-keyboard; U+F11C + fa-khanda; U+F66D + fa-kiss; U+F596 + fa-kiss-beam; U+F597 + fa-kiss-wink-heart; U+F598 + fa-kiwi-bird; U+F535 + fa-landmark; U+F66F + fa-language; U+F1AB + fa-laptop; U+F109 + fa-laptop-code; U+F5FC + fa-laugh; U+F599 + fa-laugh-beam; U+F59A + fa-laugh-squint; U+F59B + fa-laugh-wink; U+F59C + fa-layer-group; U+F5FD + fa-leaf; U+F06C + fa-lemon; U+F094 + fa-less-than; U+F536 + fa-less-than-equal; U+F537 + fa-level-down-alt; U+F3BE + fa-level-up-alt; U+F3BF + fa-life-ring; U+F1CD + fa-lightbulb; U+F0EB + fa-link; U+F0C1 + fa-lira-sign; U+F195 + fa-list; U+F03A + fa-list-alt; U+F022 + fa-list-ol; U+F0CB + fa-list-ul; U+F0CA + fa-location-arrow; U+F124 + fa-lock; U+F023 + fa-lock-open; U+F3C1 + fa-long-arrow-alt-down; U+F309 + fa-long-arrow-alt-left; U+F30A + fa-long-arrow-alt-right; U+F30B + fa-long-arrow-alt-up; U+F30C + fa-low-vision; U+F2A8 + fa-luggage-cart; U+F59D + fa-magic; U+F0D0 + fa-magnet; U+F076 + fa-mail-bulk; U+F674 + fa-male; U+F183 + fa-map; U+F279 + fa-map-marked; U+F59F + fa-map-marked-alt; U+F5A0 + fa-map-marker; U+F041 + fa-map-marker-alt; U+F3C5 + fa-map-pin; U+F276 + fa-map-signs; U+F277 + fa-marker; U+F5A1 + fa-mars; U+F222 + fa-mars-double; U+F227 + fa-mars-stroke; U+F229 + fa-mars-stroke-h; U+F22B + fa-mars-stroke-v; U+F22A + fa-mask; U+F6FA + fa-medal; U+F5A2 + fa-medkit; U+F0FA + fa-meh; U+F11A + fa-meh-blank; U+F5A4 + fa-meh-rolling-eyes; U+F5A5 + fa-memory; U+F538 + fa-menorah; U+F676 + fa-mercury; U+F223 + fa-meteor; U+F753 + fa-microchip; U+F2DB + fa-microphone; U+F130 + fa-microphone-alt; U+F3C9 + fa-microphone-alt-slash; U+F539 + fa-microphone-slash; U+F131 + fa-microscope; U+F610 + fa-minus; U+F068 + fa-minus-circle; U+F056 + fa-minus-square; U+F146 + fa-mitten; U+F7B5 + fa-mobile; U+F10B + fa-mobile-alt; U+F3CD + fa-money-bill; U+F0D6 + fa-money-bill-alt; U+F3D1 + fa-money-bill-wave; U+F53A + fa-money-bill-wave-alt; U+F53B + fa-money-check; U+F53C + fa-money-check-alt; U+F53D + fa-monument; U+F5A6 + fa-moon; U+F186 + fa-mortar-pestle; U+F5A7 + fa-mosque; U+F678 + fa-motorcycle; U+F21C + fa-mountain; U+F6FC + fa-mouse-pointer; U+F245 + fa-mug-hot; U+F7B6 + fa-music; U+F001 + fa-network-wired; U+F6FF + fa-neuter; U+F22C + fa-newspaper; U+F1EA + fa-not-equal; U+F53E + fa-notes-medical; U+F481 + fa-object-group; U+F247 + fa-object-ungroup; U+F248 + fa-oil-can; U+F613 + fa-om; U+F679 + fa-otter; U+F700 + fa-outdent; U+F03B + fa-paint-brush; U+F1FC + fa-paint-roller; U+F5AA + fa-palette; U+F53F + fa-pallet; U+F482 + fa-paper-plane; U+F1D8 + fa-paperclip; U+F0C6 + fa-parachute-box; U+F4CD + fa-paragraph; U+F1DD + fa-parking; U+F540 + fa-passport; U+F5AB + fa-pastafarianism; U+F67B + fa-paste; U+F0EA + fa-pause; U+F04C + fa-pause-circle; U+F28B + fa-paw; U+F1B0 + fa-peace; U+F67C + fa-pen; U+F304 + fa-pen-alt; U+F305 + fa-pen-fancy; U+F5AC + fa-pen-nib; U+F5AD + fa-pen-square; U+F14B + fa-pencil-alt; U+F303 + fa-pencil-ruler; U+F5AE + fa-people-carry; U+F4CE + fa-percent; U+F295 + fa-percentage; U+F541 + fa-person-booth; U+F756 + fa-phone; U+F095 + fa-phone-slash; U+F3DD + fa-phone-square; U+F098 + fa-phone-volume; U+F2A0 + fa-piggy-bank; U+F4D3 + fa-pills; U+F484 + fa-place-of-worship; U+F67F + fa-plane; U+F072 + fa-plane-arrival; U+F5AF + fa-plane-departure; U+F5B0 + fa-play; U+F04B + fa-play-circle; U+F144 + fa-plug; U+F1E6 + fa-plus; U+F067 + fa-plus-circle; U+F055 + fa-plus-square; U+F0FE + fa-podcast; U+F2CE + fa-poll; U+F681 + fa-poll-h; U+F682 + fa-poo; U+F2FE + fa-poo-storm; U+F75A + fa-poop; U+F619 + fa-portrait; U+F3E0 + fa-pound-sign; U+F154 + fa-power-off; U+F011 + fa-pray; U+F683 + fa-praying-hands; U+F684 + fa-prescription; U+F5B1 + fa-prescription-bottle; U+F485 + fa-prescription-bottle-alt; U+F486 + fa-print; U+F02F + fa-procedures; U+F487 + fa-project-diagram; U+F542 + fa-puzzle-piece; U+F12E + fa-qrcode; U+F029 + fa-question; U+F128 + fa-question-circle; U+F059 + fa-quidditch; U+F458 + fa-quote-left; U+F10D + fa-quote-right; U+F10E + fa-quran; U+F687 + fa-radiation; U+F7B9 + fa-radiation-alt; U+F7BA + fa-rainbow; U+F75B + fa-random; U+F074 + fa-receipt; U+F543 + fa-recycle; U+F1B8 + fa-redo; U+F01E + fa-redo-alt; U+F2F9 + fa-registered; U+F25D + fa-reply; U+F3E5 + fa-reply-all; U+F122 + fa-republican; U+F75E + fa-restroom; U+F7BD + fa-retweet; U+F079 + fa-ribbon; U+F4D6 + fa-ring; U+F70B + fa-road; U+F018 + fa-robot; U+F544 + fa-rocket; U+F135 + fa-route; U+F4D7 + fa-rss; U+F09E + fa-rss-square; U+F143 + fa-ruble-sign; U+F158 + fa-ruler; U+F545 + fa-ruler-combined; U+F546 + fa-ruler-horizontal; U+F547 + fa-ruler-vertical; U+F548 + fa-running; U+F70C + fa-rupee-sign; U+F156 + fa-sad-cry; U+F5B3 + fa-sad-tear; U+F5B4 + fa-satellite; U+F7BF + fa-satellite-dish; U+F7C0 + fa-save; U+F0C7 + fa-school; U+F549 + fa-screwdriver; U+F54A + fa-scroll; U+F70E + fa-sd-card; U+F7C2 + fa-search; U+F002 + fa-search-dollar; U+F688 + fa-search-location; U+F689 + fa-search-minus; U+F010 + fa-search-plus; U+F00E + fa-seedling; U+F4D8 + fa-server; U+F233 + fa-shapes; U+F61F + fa-share; U+F064 + fa-share-alt; U+F1E0 + fa-share-alt-square; U+F1E1 + fa-share-square; U+F14D + fa-shekel-sign; U+F20B + fa-shield-alt; U+F3ED + fa-ship; U+F21A + fa-shipping-fast; U+F48B + fa-shoe-prints; U+F54B + fa-shopping-bag; U+F290 + fa-shopping-basket; U+F291 + fa-shopping-cart; U+F07A + fa-shower; U+F2CC + fa-shuttle-van; U+F5B6 + fa-sign; U+F4D9 + fa-sign-in-alt; U+F2F6 + fa-sign-language; U+F2A7 + fa-sign-out-alt; U+F2F5 + fa-signal; U+F012 + fa-signature; U+F5B7 + fa-sim-card; U+F7C4 + fa-sitemap; U+F0E8 + fa-skating; U+F7C5 + fa-skiing; U+F7C9 + fa-skiing-nordic; U+F7CA + fa-skull; U+F54C + fa-skull-crossbones; U+F714 + fa-slash; U+F715 + fa-sleigh; U+F7CC + fa-sliders-h; U+F1DE + fa-smile; U+F118 + fa-smile-beam; U+F5B8 + fa-smile-wink; U+F4DA + fa-smog; U+F75F + fa-smoking; U+F48D + fa-smoking-ban; U+F54D + fa-sms; U+F7CD + fa-snowboarding; U+F7CE + fa-snowflake; U+F2DC + fa-snowman; U+F7D0 + fa-snowplow; U+F7D2 + fa-socks; U+F696 + fa-solar-panel; U+F5BA + fa-sort; U+F0DC + fa-sort-alpha-down; U+F15D + fa-sort-alpha-up; U+F15E + fa-sort-amount-down; U+F160 + fa-sort-amount-up; U+F161 + fa-sort-down; U+F0DD + fa-sort-numeric-down; U+F162 + fa-sort-numeric-up; U+F163 + fa-sort-up; U+F0DE + fa-spa; U+F5BB + fa-space-shuttle; U+F197 + fa-spider; U+F717 + fa-spinner; U+F110 + fa-splotch; U+F5BC + fa-spray-can; U+F5BD + fa-square; U+F0C8 + fa-square-full; U+F45C + fa-square-root-alt; U+F698 + fa-stamp; U+F5BF + fa-star; U+F005 + fa-star-and-crescent; U+F699 + fa-star-half; U+F089 + fa-star-half-alt; U+F5C0 + fa-star-of-david; U+F69A + fa-star-of-life; U+F621 + fa-step-backward; U+F048 + fa-step-forward; U+F051 + fa-stethoscope; U+F0F1 + fa-sticky-note; U+F249 + fa-stop; U+F04D + fa-stop-circle; U+F28D + fa-stopwatch; U+F2F2 + fa-store; U+F54E + fa-store-alt; U+F54F + fa-stream; U+F550 + fa-street-view; U+F21D + fa-strikethrough; U+F0CC + fa-stroopwafel; U+F551 + fa-subscript; U+F12C + fa-subway; U+F239 + fa-suitcase; U+F0F2 + fa-suitcase-rolling; U+F5C1 + fa-sun; U+F185 + fa-superscript; U+F12B + fa-surprise; U+F5C2 + fa-swatchbook; U+F5C3 + fa-swimmer; U+F5C4 + fa-swimming-pool; U+F5C5 + fa-synagogue; U+F69B + fa-sync; U+F021 + fa-sync-alt; U+F2F1 + fa-syringe; U+F48E + fa-table; U+F0CE + fa-table-tennis; U+F45D + fa-tablet; U+F10A + fa-tablet-alt; U+F3FA + fa-tablets; U+F490 + fa-tachometer-alt; U+F3FD + fa-tag; U+F02B + fa-tags; U+F02C + fa-tape; U+F4DB + fa-tasks; U+F0AE + fa-taxi; U+F1BA + fa-teeth; U+F62E + fa-teeth-open; U+F62F + fa-temperature-high; U+F769 + fa-temperature-low; U+F76B + fa-tenge; U+F7D7 + fa-terminal; U+F120 + fa-text-height; U+F034 + fa-text-width; U+F035 + fa-th; U+F00A + fa-th-large; U+F009 + fa-th-list; U+F00B + fa-theater-masks; U+F630 + fa-thermometer; U+F491 + fa-thermometer-empty; U+F2CB + fa-thermometer-full; U+F2C7 + fa-thermometer-half; U+F2C9 + fa-thermometer-quarter; U+F2CA + fa-thermometer-three-quarters; U+F2C8 + fa-thumbs-down; U+F165 + fa-thumbs-up; U+F164 + fa-thumbtack; U+F08D + fa-ticket-alt; U+F3FF + fa-times; U+F00D + fa-times-circle; U+F057 + fa-tint; U+F043 + fa-tint-slash; U+F5C7 + fa-tired; U+F5C8 + fa-toggle-off; U+F204 + fa-toggle-on; U+F205 + fa-toilet; U+F7D8 + fa-toilet-paper; U+F71E + fa-toolbox; U+F552 + fa-tools; U+F7D9 + fa-tooth; U+F5C9 + fa-torah; U+F6A0 + fa-torii-gate; U+F6A1 + fa-tractor; U+F722 + fa-trademark; U+F25C + fa-traffic-light; U+F637 + fa-train; U+F238 + fa-tram; U+F7DA + fa-transgender; U+F224 + fa-transgender-alt; U+F225 + fa-trash; U+F1F8 + fa-trash-alt; U+F2ED + fa-tree; U+F1BB + fa-trophy; U+F091 + fa-truck; U+F0D1 + fa-truck-loading; U+F4DE + fa-truck-monster; U+F63B + fa-truck-moving; U+F4DF + fa-truck-pickup; U+F63C + fa-tshirt; U+F553 + fa-tty; U+F1E4 + fa-tv; U+F26C + fa-umbrella; U+F0E9 + fa-umbrella-beach; U+F5CA + fa-underline; U+F0CD + fa-undo; U+F0E2 + fa-undo-alt; U+F2EA + fa-universal-access; U+F29A + fa-university; U+F19C + fa-unlink; U+F127 + fa-unlock; U+F09C + fa-unlock-alt; U+F13E + fa-upload; U+F093 + fa-user; U+F007 + fa-user-alt; U+F406 + fa-user-alt-slash; U+F4FA + fa-user-astronaut; U+F4FB + fa-user-check; U+F4FC + fa-user-circle; U+F2BD + fa-user-clock; U+F4FD + fa-user-cog; U+F4FE + fa-user-edit; U+F4FF + fa-user-friends; U+F500 + fa-user-graduate; U+F501 + fa-user-injured; U+F728 + fa-user-lock; U+F502 + fa-user-md; U+F0F0 + fa-user-minus; U+F503 + fa-user-ninja; U+F504 + fa-user-plus; U+F234 + fa-user-secret; U+F21B + fa-user-shield; U+F505 + fa-user-slash; U+F506 + fa-user-tag; U+F507 + fa-user-tie; U+F508 + fa-user-times; U+F235 + fa-users; U+F0C0 + fa-users-cog; U+F509 + fa-utensil-spoon; U+F2E5 + fa-utensils; U+F2E7 + fa-vector-square; U+F5CB + fa-venus; U+F221 + fa-venus-double; U+F226 + fa-venus-mars; U+F228 + fa-vial; U+F492 + fa-vials; U+F493 + fa-video; U+F03D + fa-video-slash; U+F4E2 + fa-vihara; U+F6A7 + fa-volleyball-ball; U+F45F + fa-volume-down; U+F027 + fa-volume-mute; U+F6A9 + fa-volume-off; U+F026 + fa-volume-up; U+F028 + fa-vote-yea; U+F772 + fa-vr-cardboard; U+F729 + fa-walking; U+F554 + fa-wallet; U+F555 + fa-warehouse; U+F494 + fa-water; U+F773 + fa-weight; U+F496 + fa-weight-hanging; U+F5CD + fa-wheelchair; U+F193 + fa-wifi; U+F1EB + fa-wind; U+F72E + fa-window-close; U+F410 + fa-window-maximize; U+F2D0 + fa-window-minimize; U+F2D1 + fa-window-restore; U+F2D2 + fa-wine-bottle; U+F72F + fa-wine-glass; U+F4E3 + fa-wine-glass-alt; U+F5CE + fa-won-sign; U+F159 + fa-wrench; U+F0AD + fa-x-ray; U+F497 + fa-yen-sign; U+F157 + fa-yin-yang; U+F6AD + fa-address-book; U+F2B9 + fa-address-card; U+F2BB + fa-angry; U+F556 + fa-arrow-alt-circle-down; U+F358 + fa-arrow-alt-circle-left; U+F359 + fa-arrow-alt-circle-right; U+F35A + fa-arrow-alt-circle-up; U+F35B + fa-bell; U+F0F3 + fa-bell-slash; U+F1F6 + fa-bookmark; U+F02E + fa-building; U+F1AD + fa-calendar; U+F133 + fa-calendar-alt; U+F073 + fa-calendar-check; U+F274 + fa-calendar-minus; U+F272 + fa-calendar-plus; U+F271 + fa-calendar-times; U+F273 + fa-caret-square-down; U+F150 + fa-caret-square-left; U+F191 + fa-caret-square-right; U+F152 + fa-caret-square-up; U+F151 + fa-chart-bar; U+F080 + fa-check-circle; U+F058 + fa-check-square; U+F14A + fa-circle; U+F111 + fa-clipboard; U+F328 + fa-clock; U+F017 + fa-clone; U+F24D + fa-closed-captioning; U+F20A + fa-comment; U+F075 + fa-comment-alt; U+F27A + fa-comment-dots; U+F4AD + fa-comments; U+F086 + fa-compass; U+F14E + fa-copy; U+F0C5 + fa-copyright; U+F1F9 + fa-credit-card; U+F09D + fa-dizzy; U+F567 + fa-dot-circle; U+F192 + fa-edit; U+F044 + fa-envelope; U+F0E0 + fa-envelope-open; U+F2B6 + fa-eye; U+F06E + fa-eye-slash; U+F070 + fa-file; U+F15B + fa-file-alt; U+F15C + fa-file-archive; U+F1C6 + fa-file-audio; U+F1C7 + fa-file-code; U+F1C9 + fa-file-excel; U+F1C3 + fa-file-image; U+F1C5 + fa-file-pdf; U+F1C1 + fa-file-powerpoint; U+F1C4 + fa-file-video; U+F1C8 + fa-file-word; U+F1C2 + fa-flag; U+F024 + fa-flushed; U+F579 + fa-folder; U+F07B + fa-folder-open; U+F07C + fa-font-awesome-logo-full; U+F4E6 + fa-frown; U+F119 + fa-frown-open; U+F57A + fa-futbol; U+F1E3 + fa-gem; U+F3A5 + fa-grimace; U+F57F + fa-grin; U+F580 + fa-grin-alt; U+F581 + fa-grin-beam; U+F582 + fa-grin-beam-sweat; U+F583 + fa-grin-hearts; U+F584 + fa-grin-squint; U+F585 + fa-grin-squint-tears; U+F586 + fa-grin-stars; U+F587 + fa-grin-tears; U+F588 + fa-grin-tongue; U+F589 + fa-grin-tongue-squint; U+F58A + fa-grin-tongue-wink; U+F58B + fa-grin-wink; U+F58C + fa-hand-lizard; U+F258 + fa-hand-paper; U+F256 + fa-hand-peace; U+F25B + fa-hand-point-down; U+F0A7 + fa-hand-point-left; U+F0A5 + fa-hand-point-right; U+F0A4 + fa-hand-point-up; U+F0A6 + fa-hand-pointer; U+F25A + fa-hand-rock; U+F255 + fa-hand-scissors; U+F257 + fa-hand-spock; U+F259 + fa-handshake; U+F2B5 + fa-hdd; U+F0A0 + fa-heart; U+F004 + fa-hospital; U+F0F8 + fa-hourglass; U+F254 + fa-id-badge; U+F2C1 + fa-id-card; U+F2C2 + fa-image; U+F03E + fa-images; U+F302 + fa-keyboard; U+F11C + fa-kiss; U+F596 + fa-kiss-beam; U+F597 + fa-kiss-wink-heart; U+F598 + fa-laugh; U+F599 + fa-laugh-beam; U+F59A + fa-laugh-squint; U+F59B + fa-laugh-wink; U+F59C + fa-lemon; U+F094 + fa-life-ring; U+F1CD + fa-lightbulb; U+F0EB + fa-list-alt; U+F022 + fa-map; U+F279 + fa-meh; U+F11A + fa-meh-blank; U+F5A4 + fa-meh-rolling-eyes; U+F5A5 + fa-minus-square; U+F146 + fa-money-bill-alt; U+F3D1 + fa-moon; U+F186 + fa-newspaper; U+F1EA + fa-object-group; U+F247 + fa-object-ungroup; U+F248 + fa-paper-plane; U+F1D8 + fa-pause-circle; U+F28B + fa-play-circle; U+F144 + fa-plus-square; U+F0FE + fa-question-circle; U+F059 + fa-registered; U+F25D + fa-sad-cry; U+F5B3 + fa-sad-tear; U+F5B4 + fa-save; U+F0C7 + fa-share-square; U+F14D + fa-smile; U+F118 + fa-smile-beam; U+F5B8 + fa-smile-wink; U+F4DA + fa-snowflake; U+F2DC + fa-square; U+F0C8 + fa-star; U+F005 + fa-star-half; U+F089 + fa-sticky-note; U+F249 + fa-stop-circle; U+F28D + fa-sun; U+F185 + fa-surprise; U+F5C2 + fa-thumbs-down; U+F165 + fa-thumbs-up; U+F164 + fa-times-circle; U+F057 + fa-tired; U+F5C8 + fa-trash-alt; U+F2ED + fa-user; U+F007 + fa-user-circle; U+F2BD + fa-window-close; U+F410 + fa-window-maximize; U+F2D0 + fa-window-minimize; U+F2D1 + fa-window-restore; U+F2D2 + fa-500px; U+F26E + fa-accessible-icon; U+F368 + fa-accusoft; U+F369 + fa-acquisitions-incorporated; U+F6AF + fa-adn; U+F170 + fa-adobe; U+F778 + fa-adversal; U+F36A + fa-affiliatetheme; U+F36B + fa-algolia; U+F36C + fa-alipay; U+F642 + fa-amazon; U+F270 + fa-amazon-pay; U+F42C + fa-amilia; U+F36D + fa-android; U+F17B + fa-angellist; U+F209 + fa-angrycreative; U+F36E + fa-angular; U+F420 + fa-app-store; U+F36F + fa-app-store-ios; U+F370 + fa-apper; U+F371 + fa-apple; U+F179 + fa-apple-pay; U+F415 + fa-artstation; U+F77A + fa-asymmetrik; U+F372 + fa-atlassian; U+F77B + fa-audible; U+F373 + fa-autoprefixer; U+F41C + fa-avianex; U+F374 + fa-aviato; U+F421 + fa-aws; U+F375 + fa-bandcamp; U+F2D5 + fa-behance; U+F1B4 + fa-behance-square; U+F1B5 + fa-bimobject; U+F378 + fa-bitbucket; U+F171 + fa-bitcoin; U+F379 + fa-bity; U+F37A + fa-black-tie; U+F27E + fa-blackberry; U+F37B + fa-blogger; U+F37C + fa-blogger-b; U+F37D + fa-bluetooth; U+F293 + fa-bluetooth-b; U+F294 + fa-btc; U+F15A + fa-buromobelexperte; U+F37F + fa-buysellads; U+F20D + fa-canadian-maple-leaf; U+F785 + fa-cc-amazon-pay; U+F42D + fa-cc-amex; U+F1F3 + fa-cc-apple-pay; U+F416 + fa-cc-diners-club; U+F24C + fa-cc-discover; U+F1F2 + fa-cc-jcb; U+F24B + fa-cc-mastercard; U+F1F1 + fa-cc-paypal; U+F1F4 + fa-cc-stripe; U+F1F5 + fa-cc-visa; U+F1F0 + fa-centercode; U+F380 + fa-centos; U+F789 + fa-chrome; U+F268 + fa-cloudscale; U+F383 + fa-cloudsmith; U+F384 + fa-cloudversify; U+F385 + fa-codepen; U+F1CB + fa-codiepie; U+F284 + fa-confluence; U+F78D + fa-connectdevelop; U+F20E + fa-contao; U+F26D + fa-cpanel; U+F388 + fa-creative-commons; U+F25E + fa-creative-commons-by; U+F4E7 + fa-creative-commons-nc; U+F4E8 + fa-creative-commons-nc-eu; U+F4E9 + fa-creative-commons-nc-jp; U+F4EA + fa-creative-commons-nd; U+F4EB + fa-creative-commons-pd; U+F4EC + fa-creative-commons-pd-alt; U+F4ED + fa-creative-commons-remix; U+F4EE + fa-creative-commons-sa; U+F4EF + fa-creative-commons-sampling; U+F4F0 + fa-creative-commons-sampling-plus; U+F4F1 + fa-creative-commons-share; U+F4F2 + fa-creative-commons-zero; U+F4F3 + fa-critical-role; U+F6C9 + fa-css3; U+F13C + fa-css3-alt; U+F38B + fa-cuttlefish; U+F38C + fa-d-and-d; U+F38D + fa-d-and-d-beyond; U+F6CA + fa-dashcube; U+F210 + fa-delicious; U+F1A5 + fa-deploydog; U+F38E + fa-deskpro; U+F38F + fa-dev; U+F6CC + fa-deviantart; U+F1BD + fa-dhl; U+F790 + fa-diaspora; U+F791 + fa-digg; U+F1A6 + fa-digital-ocean; U+F391 + fa-discord; U+F392 + fa-discourse; U+F393 + fa-dochub; U+F394 + fa-docker; U+F395 + fa-draft2digital; U+F396 + fa-dribbble; U+F17D + fa-dribbble-square; U+F397 + fa-dropbox; U+F16B + fa-drupal; U+F1A9 + fa-dyalog; U+F399 + fa-earlybirds; U+F39A + fa-ebay; U+F4F4 + fa-edge; U+F282 + fa-elementor; U+F430 + fa-ello; U+F5F1 + fa-ember; U+F423 + fa-empire; U+F1D1 + fa-envira; U+F299 + fa-erlang; U+F39D + fa-ethereum; U+F42E + fa-etsy; U+F2D7 + fa-expeditedssl; U+F23E + fa-facebook; U+F09A + fa-facebook-f; U+F39E + fa-facebook-messenger; U+F39F + fa-facebook-square; U+F082 + fa-fantasy-flight-games; U+F6DC + fa-fedex; U+F797 + fa-fedora; U+F798 + fa-figma; U+F799 + fa-firefox; U+F269 + fa-first-order; U+F2B0 + fa-first-order-alt; U+F50A + fa-firstdraft; U+F3A1 + fa-flickr; U+F16E + fa-flipboard; U+F44D + fa-fly; U+F417 + fa-font-awesome; U+F2B4 + fa-font-awesome-alt; U+F35C + fa-font-awesome-flag; U+F425 + fa-font-awesome-logo-full; U+F4E6 + fa-fonticons; U+F280 + fa-fonticons-fi; U+F3A2 + fa-fort-awesome; U+F286 + fa-fort-awesome-alt; U+F3A3 + fa-forumbee; U+F211 + fa-foursquare; U+F180 + fa-free-code-camp; U+F2C5 + fa-freebsd; U+F3A4 + fa-fulcrum; U+F50B + fa-galactic-republic; U+F50C + fa-galactic-senate; U+F50D + fa-get-pocket; U+F265 + fa-gg; U+F260 + fa-gg-circle; U+F261 + fa-git; U+F1D3 + fa-git-square; U+F1D2 + fa-github; U+F09B + fa-github-alt; U+F113 + fa-github-square; U+F092 + fa-gitkraken; U+F3A6 + fa-gitlab; U+F296 + fa-gitter; U+F426 + fa-glide; U+F2A5 + fa-glide-g; U+F2A6 + fa-gofore; U+F3A7 + fa-goodreads; U+F3A8 + fa-goodreads-g; U+F3A9 + fa-google; U+F1A0 + fa-google-drive; U+F3AA + fa-google-play; U+F3AB + fa-google-plus; U+F2B3 + fa-google-plus-g; U+F0D5 + fa-google-plus-square; U+F0D4 + fa-google-wallet; U+F1EE + fa-gratipay; U+F184 + fa-grav; U+F2D6 + fa-gripfire; U+F3AC + fa-grunt; U+F3AD + fa-gulp; U+F3AE + fa-hacker-news; U+F1D4 + fa-hacker-news-square; U+F3AF + fa-hackerrank; U+F5F7 + fa-hips; U+F452 + fa-hire-a-helper; U+F3B0 + fa-hooli; U+F427 + fa-hornbill; U+F592 + fa-hotjar; U+F3B1 + fa-houzz; U+F27C + fa-html5; U+F13B + fa-hubspot; U+F3B2 + fa-imdb; U+F2D8 + fa-instagram; U+F16D + fa-intercom; U+F7AF + fa-internet-explorer; U+F26B + fa-invision; U+F7B0 + fa-ioxhost; U+F208 + fa-itunes; U+F3B4 + fa-itunes-note; U+F3B5 + fa-java; U+F4E4 + fa-jedi-order; U+F50E + fa-jenkins; U+F3B6 + fa-jira; U+F7B1 + fa-joget; U+F3B7 + fa-joomla; U+F1AA + fa-js; U+F3B8 + fa-js-square; U+F3B9 + fa-jsfiddle; U+F1CC + fa-kaggle; U+F5FA + fa-keybase; U+F4F5 + fa-keycdn; U+F3BA + fa-kickstarter; U+F3BB + fa-kickstarter-k; U+F3BC + fa-korvue; U+F42F + fa-laravel; U+F3BD + fa-lastfm; U+F202 + fa-lastfm-square; U+F203 + fa-leanpub; U+F212 + fa-less; U+F41D + fa-line; U+F3C0 + fa-linkedin; U+F08C + fa-linkedin-in; U+F0E1 + fa-linode; U+F2B8 + fa-linux; U+F17C + fa-lyft; U+F3C3 + fa-magento; U+F3C4 + fa-mailchimp; U+F59E + fa-mandalorian; U+F50F + fa-markdown; U+F60F + fa-mastodon; U+F4F6 + fa-maxcdn; U+F136 + fa-medapps; U+F3C6 + fa-medium; U+F23A + fa-medium-m; U+F3C7 + fa-medrt; U+F3C8 + fa-meetup; U+F2E0 + fa-megaport; U+F5A3 + fa-mendeley; U+F7B3 + fa-microsoft; U+F3CA + fa-mix; U+F3CB + fa-mixcloud; U+F289 + fa-mizuni; U+F3CC + fa-modx; U+F285 + fa-monero; U+F3D0 + fa-napster; U+F3D2 + fa-neos; U+F612 + fa-nimblr; U+F5A8 + fa-nintendo-switch; U+F418 + fa-node; U+F419 + fa-node-js; U+F3D3 + fa-npm; U+F3D4 + fa-ns8; U+F3D5 + fa-nutritionix; U+F3D6 + fa-odnoklassniki; U+F263 + fa-odnoklassniki-square; U+F264 + fa-old-republic; U+F510 + fa-opencart; U+F23D + fa-openid; U+F19B + fa-opera; U+F26A + fa-optin-monster; U+F23C + fa-osi; U+F41A + fa-page4; U+F3D7 + fa-pagelines; U+F18C + fa-palfed; U+F3D8 + fa-patreon; U+F3D9 + fa-paypal; U+F1ED + fa-penny-arcade; U+F704 + fa-periscope; U+F3DA + fa-phabricator; U+F3DB + fa-phoenix-framework; U+F3DC + fa-phoenix-squadron; U+F511 + fa-php; U+F457 + fa-pied-piper; U+F2AE + fa-pied-piper-alt; U+F1A8 + fa-pied-piper-hat; U+F4E5 + fa-pied-piper-pp; U+F1A7 + fa-pinterest; U+F0D2 + fa-pinterest-p; U+F231 + fa-pinterest-square; U+F0D3 + fa-playstation; U+F3DF + fa-product-hunt; U+F288 + fa-pushed; U+F3E1 + fa-python; U+F3E2 + fa-qq; U+F1D6 + fa-quinscape; U+F459 + fa-quora; U+F2C4 + fa-r-project; U+F4F7 + fa-raspberry-pi; U+F7BB + fa-ravelry; U+F2D9 + fa-react; U+F41B + fa-reacteurope; U+F75D + fa-readme; U+F4D5 + fa-rebel; U+F1D0 + fa-red-river; U+F3E3 + fa-reddit; U+F1A1 + fa-reddit-alien; U+F281 + fa-reddit-square; U+F1A2 + fa-redhat; U+F7BC + fa-renren; U+F18B + fa-replyd; U+F3E6 + fa-researchgate; U+F4F8 + fa-resolving; U+F3E7 + fa-rev; U+F5B2 + fa-rocketchat; U+F3E8 + fa-rockrms; U+F3E9 + fa-safari; U+F267 + fa-sass; U+F41E + fa-schlix; U+F3EA + fa-scribd; U+F28A + fa-searchengin; U+F3EB + fa-sellcast; U+F2DA + fa-sellsy; U+F213 + fa-servicestack; U+F3EC + fa-shirtsinbulk; U+F214 + fa-shopware; U+F5B5 + fa-simplybuilt; U+F215 + fa-sistrix; U+F3EE + fa-sith; U+F512 + fa-sketch; U+F7C6 + fa-skyatlas; U+F216 + fa-skype; U+F17E + fa-slack; U+F198 + fa-slack-hash; U+F3EF + fa-slideshare; U+F1E7 + fa-snapchat; U+F2AB + fa-snapchat-ghost; U+F2AC + fa-snapchat-square; U+F2AD + fa-soundcloud; U+F1BE + fa-sourcetree; U+F7D3 + fa-speakap; U+F3F3 + fa-spotify; U+F1BC + fa-squarespace; U+F5BE + fa-stack-exchange; U+F18D + fa-stack-overflow; U+F16C + fa-staylinked; U+F3F5 + fa-steam; U+F1B6 + fa-steam-square; U+F1B7 + fa-steam-symbol; U+F3F6 + fa-sticker-mule; U+F3F7 + fa-strava; U+F428 + fa-stripe; U+F429 + fa-stripe-s; U+F42A + fa-studiovinari; U+F3F8 + fa-stumbleupon; U+F1A4 + fa-stumbleupon-circle; U+F1A3 + fa-superpowers; U+F2DD + fa-supple; U+F3F9 + fa-suse; U+F7D6 + fa-teamspeak; U+F4F9 + fa-telegram; U+F2C6 + fa-telegram-plane; U+F3FE + fa-tencent-weibo; U+F1D5 + fa-the-red-yeti; U+F69D + fa-themeco; U+F5C6 + fa-themeisle; U+F2B2 + fa-think-peaks; U+F731 + fa-trade-federation; U+F513 + fa-trello; U+F181 + fa-tripadvisor; U+F262 + fa-tumblr; U+F173 + fa-tumblr-square; U+F174 + fa-twitch; U+F1E8 + fa-twitter; U+F099 + fa-twitter-square; U+F081 + fa-typo3; U+F42B + fa-uber; U+F402 + fa-ubuntu; U+F7DF + fa-uikit; U+F403 + fa-uniregistry; U+F404 + fa-untappd; U+F405 + fa-ups; U+F7E0 + fa-usb; U+F287 + fa-usps; U+F7E1 + fa-ussunnah; U+F407 + fa-vaadin; U+F408 + fa-viacoin; U+F237 + fa-viadeo; U+F2A9 + fa-viadeo-square; U+F2AA + fa-viber; U+F409 + fa-vimeo; U+F40A + fa-vimeo-square; U+F194 + fa-vimeo-v; U+F27D + fa-vine; U+F1CA + fa-vk; U+F189 + fa-vnv; U+F40B + fa-vuejs; U+F41F + fa-weebly; U+F5CC + fa-weibo; U+F18A + fa-weixin; U+F1D7 + fa-whatsapp; U+F232 + fa-whatsapp-square; U+F40C + fa-whmcs; U+F40D + fa-wikipedia-w; U+F266 + fa-windows; U+F17A + fa-wix; U+F5CF + fa-wizards-of-the-coast; U+F730 + fa-wolf-pack-battalion; U+F514 + fa-wordpress; U+F19A + fa-wordpress-simple; U+F411 + fa-wpbeginner; U+F297 + fa-wpexplorer; U+F2DE + fa-wpforms; U+F298 + fa-wpressr; U+F3E4 + fa-xbox; U+F412 + fa-xing; U+F168 + fa-xing-square; U+F169 + fa-y-combinator; U+F23B + fa-yahoo; U+F19E + fa-yandex; U+F413 + fa-yandex-international; U+F414 + fa-yarn; U+F7E3 + fa-yelp; U+F1E9 + fa-yoast; U+F2B1 + fa-youtube; U+F167 + fa-youtube-square; U+F431 + fa-zhihu; U+F63F diff --git a/fontconfig/fonts.conf b/fontconfig/fonts.conf @@ -0,0 +1,30 @@ +<?xml version='1.0'?> +<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'> +<fontconfig> + + <alias> + <family>serif</family> + <prefer><family>Linux Libertine</family></prefer> + </alias> + <alias> + <family>sans-serif</family> + <prefer><family>Linux Biolinum</family></prefer> + </alias> + <alias> + <family>sans</family> + <prefer><family>Linux Biolinum</family></prefer> + </alias> + <alias> + <family>monospace</family> + <prefer><family>Blex Mono Nerd Font</family></prefer> + </alias> + + <!-- This sets Symbola as the final fallback font for the monospace font family. --> + <match target="pattern"> + <test name="family"><string>monospace</string></test> + <edit name="family" mode="append"><string>Hack</string></edit> + </match> + +</fontconfig> + + diff --git a/gdfuse/bh/config b/gdfuse/bh/config @@ -0,0 +1,66 @@ +acknowledge_abuse=false +apps_script_format=desktop +apps_script_icon= +async_upload_queue=false +async_upload_threads=10 +autodetect_mime=true +cache_directory= +client_id= +client_secret= +connect_timeout_ms=5000 +curl_debug_off=false +data_directory= +debug_buffers=false +delete_forever_in_trash_folder=false +desktop_entry_as_html=false +desktop_entry_exec= +disable_trash=false +docs_file_extension=true +document_format=desktop +document_icon= +download_docs=true +drawing_format=desktop +drawing_icon= +form_format=desktop +form_icon= +fusion_table_format=desktop +fusion_table_icon= +keep_duplicates=false +large_file_read_only=false +large_file_threshold_mb=16 +log_directory= +log_to= +lost_and_found=false +low_speed_limit=0 +low_speed_time=0 +map_format=desktop +map_icon= +max_cache_size_mb=512 +max_download_speed=0 +max_memory_cache_size=10485760 +max_retries=8 +max_upload_chunk_size=1099511627776 +max_upload_speed=0 +memory_buffer_size=1048576 +metadata_cache_time=60 +metadata_memory_cache=true +metadata_memory_cache_saving_interval=30 +mv_keep_target=false +presentation_format=desktop +presentation_icon= +read_ahead_buffers=3 +read_only=false +redirect_uri= +root_folder= +scope= +service_account_credentials_path= +service_account_user_to_impersonate= +shared_with_me=false +spreadsheet_format=desktop +spreadsheet_icon= +sqlite3_busy_timeout=5000 +stream_large_files=false +team_drive_id= +umask=0o022 +verification_code= +write_buffers=false diff --git a/gdfuse/cwru/config b/gdfuse/cwru/config @@ -0,0 +1,66 @@ +acknowledge_abuse=false +apps_script_format=desktop +apps_script_icon= +async_upload_queue=false +async_upload_threads=10 +autodetect_mime=true +cache_directory= +client_id= +client_secret= +connect_timeout_ms=5000 +curl_debug_off=false +data_directory= +debug_buffers=false +delete_forever_in_trash_folder=false +desktop_entry_as_html=false +desktop_entry_exec= +disable_trash=false +docs_file_extension=true +document_format=desktop +document_icon= +download_docs=true +drawing_format=desktop +drawing_icon= +form_format=desktop +form_icon= +fusion_table_format=desktop +fusion_table_icon= +keep_duplicates=false +large_file_read_only=false +large_file_threshold_mb=16 +log_directory= +log_to= +lost_and_found=false +low_speed_limit=0 +low_speed_time=0 +map_format=desktop +map_icon= +max_cache_size_mb=512 +max_download_speed=0 +max_memory_cache_size=10485760 +max_retries=8 +max_upload_chunk_size=1099511627776 +max_upload_speed=0 +memory_buffer_size=1048576 +metadata_cache_time=60 +metadata_memory_cache=true +metadata_memory_cache_saving_interval=30 +mv_keep_target=false +presentation_format=desktop +presentation_icon= +read_ahead_buffers=3 +read_only=false +redirect_uri= +root_folder= +scope= +service_account_credentials_path= +service_account_user_to_impersonate= +shared_with_me=false +spreadsheet_format=desktop +spreadsheet_icon= +sqlite3_busy_timeout=5000 +stream_large_files=false +team_drive_id= +umask=0o022 +verification_code= +write_buffers=false diff --git a/gdfuse/default/config b/gdfuse/default/config @@ -0,0 +1,66 @@ +acknowledge_abuse=false +apps_script_format=desktop +apps_script_icon= +async_upload_queue=false +async_upload_threads=10 +autodetect_mime=true +cache_directory= +client_id= +client_secret= +connect_timeout_ms=5000 +curl_debug_off=false +data_directory= +debug_buffers=false +delete_forever_in_trash_folder=false +desktop_entry_as_html=false +desktop_entry_exec= +disable_trash=false +docs_file_extension=true +document_format=desktop +document_icon= +download_docs=true +drawing_format=desktop +drawing_icon= +form_format=desktop +form_icon= +fusion_table_format=desktop +fusion_table_icon= +keep_duplicates=false +large_file_read_only=false +large_file_threshold_mb=16 +log_directory= +log_to= +lost_and_found=false +low_speed_limit=0 +low_speed_time=0 +map_format=desktop +map_icon= +max_cache_size_mb=512 +max_download_speed=0 +max_memory_cache_size=10485760 +max_retries=8 +max_upload_chunk_size=1099511627776 +max_upload_speed=0 +memory_buffer_size=1048576 +metadata_cache_time=60 +metadata_memory_cache=true +metadata_memory_cache_saving_interval=30 +mv_keep_target=false +presentation_format=desktop +presentation_icon= +read_ahead_buffers=3 +read_only=false +redirect_uri= +root_folder= +scope= +service_account_credentials_path= +service_account_user_to_impersonate= +shared_with_me=false +spreadsheet_format=desktop +spreadsheet_icon= +sqlite3_busy_timeout=5000 +stream_large_files=false +team_drive_id= +umask=0o022 +verification_code= +write_buffers=false diff --git a/git/config b/git/config @@ -0,0 +1,3 @@ +[user] + email = cbeauhilton@gmail.com + name = C. Beau Hilton diff --git a/gtk-2.0/gtkfilechooser.ini b/gtk-2.0/gtkfilechooser.ini @@ -0,0 +1,11 @@ +[Filechooser Settings] +LocationMode=filename-entry +ShowHidden=false +ShowSizeColumn=true +GeometryX=0 +GeometryY=0 +GeometryWidth=948 +GeometryHeight=642 +SortColumn=name +SortOrder=ascending +StartupMode=recent diff --git a/gtk-2.0/gtkrc-2.0 b/gtk-2.0/gtkrc-2.0 @@ -0,0 +1,19 @@ +# DO NOT EDIT! This file will be overwritten by LXAppearance. +# Any customization should be done in ~/.gtkrc-2.0.mine instead. + +include "/home/luke/.gtkrc-2.0.mine" +gtk-theme-name="Arc-Gruvbox" +gtk-icon-theme-name="Adwaita" +gtk-font-name="Sans 10" +gtk-cursor-theme-name="Adwaita" +gtk-cursor-theme-size=0 +gtk-toolbar-style=GTK_TOOLBAR_TEXT +gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR +gtk-button-images=0 +gtk-menu-images=1 +gtk-enable-event-sounds=1 +gtk-enable-input-feedback-sounds=1 +gtk-xft-antialias=1 +gtk-xft-hinting=1 +gtk-xft-hintstyle="hintfull" +gtk-xft-rgba="rgb" diff --git a/gtk-3.0/settings.ini b/gtk-3.0/settings.ini @@ -0,0 +1,16 @@ +[Settings] +gtk-theme-name=Arc-Gruvbox +gtk-icon-theme-name=Adwaita +gtk-font-name=Sans 10 +gtk-cursor-theme-size=0 +gtk-toolbar-style=GTK_TOOLBAR_TEXT +gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR +gtk-button-images=0 +gtk-menu-images=1 +gtk-enable-event-sounds=1 +gtk-enable-input-feedback-sounds=1 +gtk-xft-antialias=1 +gtk-xft-hinting=1 +gtk-xft-hintstyle=hintfull +gtk-xft-rgba=rgb +gtk-cursor-theme-name=Adwaita diff --git a/htop/htoprc b/htop/htoprc @@ -0,0 +1,26 @@ +# Beware! This file is rewritten by htop when settings are changed in the interface. +# The parser is also very primitive, and not human-friendly. +fields=0 48 17 18 38 39 40 2 46 47 49 1 +sort_key=47 +sort_direction=1 +hide_threads=0 +hide_kernel_threads=1 +hide_userland_threads=0 +shadow_other_users=0 +show_thread_names=0 +show_program_path=1 +highlight_base_name=0 +highlight_megabytes=1 +highlight_threads=1 +tree_view=0 +header_margin=1 +detailed_cpu_time=0 +cpu_count_from_zero=0 +update_process_names=0 +account_guest_in_cpu_meter=0 +color_scheme=0 +delay=15 +left_meters=AllCPUs Memory Swap +left_meter_modes=1 1 1 +right_meters=Tasks LoadAverage Uptime +right_meter_modes=2 2 2 diff --git a/inputrc b/inputrc @@ -0,0 +1,19 @@ +$include /etc/inputrc +set editing-mode vi +$if mode=vi + +set show-mode-in-prompt on +set vi-ins-mode-string \1\e[6 q\2 +set vi-cmd-mode-string \1\e[2 q\2 + +set keymap vi-command +# these are for vi-command mode +Control-l: clear-screen +Control-a: beginning-of-line + +set keymap vi-insert +# these are for vi-insert mode +Control-l: clear-screen +Control-a: beginning-of-line + +$endif diff --git a/isync/mbsyncrc b/isync/mbsyncrc @@ -0,0 +1,25 @@ +IMAPStore gmail-remote +Host imap.gmail.com +Port 993 +User cbeauhilton@gmail.com +PassCmd "pass mutt-wizard-gmail" +SSLType IMAPS +CertificateFile /etc/ssl/certs/ca-certificates.crt + +MaildirStore gmail-local +Subfolders Verbatim +Path ~/.local/share/mail/gmail/ +Inbox ~/.local/share/mail/gmail/INBOX +Flatten . + +Channel gmail +Expunge Both +Master :gmail-remote: +Slave :gmail-local: +Patterns * !"[Gmail]/All\ Mail" +Create Both +SyncState * +MaxMessages 0 +ExpireUnread no +# End profile + diff --git a/jupyter/profile_default/startup/README b/jupyter/profile_default/startup/README @@ -0,0 +1,11 @@ +This is the IPython startup directory + +.py and .ipy files in this directory will be run *prior* to any code or files specified +via the exec_lines or exec_files configurables whenever you load this profile. + +Files will be run in lexicographical order, so you can control the execution order of files +with a prefix, e.g.:: + + 00-first.py + 50-middle.py + 99-last.ipy diff --git a/mimeapps.list b/mimeapps.list @@ -0,0 +1,11 @@ +[Default Applications] +x-scheme-handler/magnet=torrent.desktop; +x-scheme-handler/mailto=chromium.desktop +text/plain=text.desktop; +text/x-shellscript=text.desktop; +application/pdf=pdf.desktop; +image/png=img.desktop; +image/jpeg=img.desktop; +image/gif=img.desktop; +application/rss+xml=rss.desktop +x-scheme-handler/webcal=chromium.desktop diff --git a/mpd/mpd.conf b/mpd/mpd.conf @@ -0,0 +1,28 @@ +db_file "~/.config/mpd/database" +log_file "~/.config/mpd/log" +music_directory "~/tunes" +playlist_directory "~/.config/mpd/playlists" +pid_file "~/.config/mpd/pid" +state_file "~/.config/mpd/state" +sticker_file "~/.config/mpd/sticker.sql" + +##user "beau" + +auto_update "yes" + +bind_to_address "127.0.0.1" +restore_paused "yes" +max_output_buffer_size "16384" + +audio_output { + type "pulse" + name "pulse audio" + mixer_type "software" +} + +audio_output { +type "fifo" +name "my_fifo" +path "/tmp/mpd.fifo" +format "44100:16:2" +} diff --git a/mpv/input.conf b/mpv/input.conf @@ -0,0 +1,199 @@ +# mpv keybindings +# +# Location of user-defined bindings: ~/.config/mpv/input.conf +# +# Lines starting with # are comments. Use SHARP to assign the # key. +# Copy this file and uncomment and edit the bindings you want to change. +# +# List of commands and further details: DOCS/man/input.rst +# List of special keys: --input-keylist +# Keybindings testing mode: mpv --input-test --force-window --idle +# +# Use 'ignore' to unbind a key fully (e.g. 'ctrl+a ignore'). +# +# Strings need to be quoted and escaped: +# KEY show-text "This is a single backslash: \\ and a quote: \" !" +# +# You can use modifier-key combinations like Shift+Left or Ctrl+Alt+x with +# the modifiers Shift, Ctrl, Alt and Meta (may not work on the terminal). +# +# The default keybindings are hardcoded into the mpv binary. +# You can disable them completely with: --no-input-default-bindings + +# Developer note: +# On compilation, this file is baked into the mpv binary, and all lines are +# uncommented (unless '#' is followed by a space) - thus this file defines the +# default key bindings. + +# If this is enabled, treat all the following bindings as default. +#default-bindings start + +#MOUSE_BTN0 ignore # don't do anything +#MOUSE_BTN0_DBL cycle fullscreen # toggle fullscreen on/off +#MOUSE_BTN2 cycle pause # toggle pause on/off +#MOUSE_BTN3 seek 10 +#MOUSE_BTN4 seek -10 +#MOUSE_BTN5 add volume -2 +#MOUSE_BTN6 add volume 2 + +# Mouse wheels, touchpad or other input devices that have axes +# if the input devices supports precise scrolling it will also scale the +# numeric value accordingly +#AXIS_UP seek 10 +#AXIS_DOWN seek -10 +#AXIS_LEFT seek 5 +#AXIS_RIGHT seek -5 + +## Seek units are in seconds, but note that these are limited by keyframes +#RIGHT seek 5 +#LEFT seek -5 +#UP seek 60 +#DOWN seek -60 +# Do smaller, always exact (non-keyframe-limited), seeks with shift. +# Don't show them on the OSD (no-osd). +#Shift+RIGHT no-osd seek 1 exact +#Shift+LEFT no-osd seek -1 exact +#Shift+UP no-osd seek 5 exact +#Shift+DOWN no-osd seek -5 exact +# Skip to previous/next subtitle (subject to some restrictions; see manpage) +#Ctrl+LEFT no-osd sub-seek -1 +#Ctrl+RIGHT no-osd sub-seek 1 +#PGUP add chapter 1 # skip to next chapter +#PGDWN add chapter -1 # skip to previous chapter +#Shift+PGUP seek 600 +#Shift+PGDWN seek -600 +#[ multiply speed 0.9091 # scale playback speed +#] multiply speed 1.1 +#{ multiply speed 0.5 +#} multiply speed 2.0 +#BS set speed 1.0 # reset speed to normal +#q quit +#Q quit-watch-later +#q {encode} quit 4 +#ESC set fullscreen no +#ESC {encode} quit 4 +#p cycle pause # toggle pause/playback mode +#. frame-step # advance one frame and pause +#, frame-back-step # go back by one frame and pause +#SPACE cycle pause +#> playlist-next # skip to next file +#ENTER playlist-next # skip to next file +#< playlist-prev # skip to previous file +#O no-osd cycle-values osd-level 3 1 # cycle through OSD mode +#o show-progress +#P show-progress +#I show-text "${filename}" # display filename in osd +#z add sub-delay -0.1 # subtract 100 ms delay from subs +#x add sub-delay +0.1 # add +#ctrl++ add audio-delay 0.100 # this changes audio/video sync +#ctrl+- add audio-delay -0.100 +#9 add volume -2 +#/ add volume -2 +#0 add volume 2 +#* add volume 2 +#m cycle mute +#1 add contrast -1 +#2 add contrast 1 +#3 add brightness -1 +#4 add brightness 1 +#5 add gamma -1 +#6 add gamma 1 +#7 add saturation -1 +#8 add saturation 1 +#Alt+0 set window-scale 0.5 +#Alt+1 set window-scale 1.0 +#Alt+2 set window-scale 2.0 +# toggle deinterlacer (automatically inserts or removes required filter) +#d cycle deinterlace +#r add sub-pos -1 # move subtitles up +#t add sub-pos +1 # down +#v cycle sub-visibility +# stretch SSA/ASS subtitles with anamorphic videos to match historical +#V cycle sub-ass-vsfilter-aspect-compat +# switch between applying no style overrides to SSA/ASS subtitles, and +# overriding them almost completely with the normal subtitle style +#u cycle-values sub-ass-style-override "force" "no" +#j cycle sub # cycle through subtitles +#J cycle sub down # ...backwards +#SHARP cycle audio # switch audio streams +#_ cycle video +#T cycle ontop # toggle video window ontop of other windows +#f cycle fullscreen # toggle fullscreen +#s screenshot # take a screenshot +#S screenshot video # ...without subtitles +#Ctrl+s screenshot window # ...with subtitles and OSD, and scaled +#Alt+s screenshot each-frame # automatically screenshot every frame +#w add panscan -0.1 # zoom out with -panscan 0 -fs +#e add panscan +0.1 # in +# cycle video aspect ratios; "-1" is the container aspect +#A cycle-values video-aspect "16:9" "4:3" "2.35:1" "-1" +#POWER quit +#PLAY cycle pause +#PAUSE cycle pause +#PLAYPAUSE cycle pause +#STOP quit +#FORWARD seek 60 +#REWIND seek -60 +#NEXT playlist-next +#PREV playlist-prev +#VOLUME_UP add volume 2 +#VOLUME_DOWN add volume -2 +#MUTE cycle mute +#CLOSE_WIN quit +#CLOSE_WIN {encode} quit 4 +#E cycle edition # next edition +#l ab-loop # Set/clear A-B loop points +#L cycle-values loop "inf" "no" # toggle infinite looping +#ctrl+c quit 4 + +# Apple Remote section +#AR_PLAY cycle pause +#AR_PLAY_HOLD quit +#AR_CENTER cycle pause +#AR_CENTER_HOLD quit +#AR_NEXT seek 10 +#AR_NEXT_HOLD seek 120 +#AR_PREV seek -10 +#AR_PREV_HOLD seek -120 +#AR_MENU show-progress +#AR_MENU_HOLD cycle mute +#AR_VUP add volume 2 +#AR_VUP_HOLD add chapter 1 +#AR_VDOWN add volume -2 +#AR_VDOWN_HOLD add chapter -1 + +# For tv:// +#h cycle tv-channel -1 # previous channel +#k cycle tv-channel +1 # next channel + +# For dvb:// +#H cycle dvb-channel-name -1 # previous channel +#K cycle dvb-channel-name +1 # next channel + +# +# Legacy bindings (may or may not be removed in the future) +# +#! add chapter -1 # skip to previous chapter +#@ add chapter 1 # next + +# +# Not assigned by default +# (not an exhaustive list of unbound commands) +# + +# ? add sub-scale +0.1 # increase subtitle font size +# ? add sub-scale -0.1 # decrease subtitle font size +# ? sub-step -1 # immediately display next subtitle +# ? sub-step +1 # previous +# ? cycle angle # switch DVD/Bluray angle +# ? add balance -0.1 # adjust audio balance in favor of left +# ? add balance 0.1 # right +# ? cycle sub-forced-only # toggle DVD forced subs +# ? cycle program # cycle transport stream programs +# ? stop # stop playback (quit or enter idle mode) + +l seek 5 +h seek -5 +j seek -60 +k seek 60 +S cycle sub diff --git a/msmtp/config b/msmtp/config @@ -0,0 +1,14 @@ +defaults +auth on +tls on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +logfile ~/.config/msmtp/msmtp.log + +account gmail +host smtp.gmail.com +port 587 +from cbeauhilton@gmail.com +user cbeauhilton@gmail.com +passwordeval "pass mutt-wizard-gmail" + + diff --git a/mutt/.mailsynclastrun b/mutt/.mailsynclastrun diff --git a/mutt/accounts/1-gmail.muttrc b/mutt/accounts/1-gmail.muttrc @@ -0,0 +1,35 @@ +# vim: filetype=neomuttrc +# muttrc file for account gmail +set realname = "Beau Hilton" +set from = "cbeauhilton@gmail.com" +set sendmail = "msmtp -a gmail" +alias me Beau Hilton <cbeauhilton@gmail.com> +set folder = "/home/beau/.local/share/mail/gmail" +set header_cache = /home/beau/.cache/mutt-wizard/gmail/headers +set message_cachedir = /home/beau/.cache/mutt-wizard/gmail/bodies +set mbox_type = Maildir + +bind index,pager gg noop +bind index,pager g noop +bind index,pager M noop +bind index,pager C noop +bind index gg first-entry +macro index o "<shell-escape>mailsync -V gmail<enter>" "run mbsync to sync gmail" +unmailboxes * + +set spoolfile = "+INBOX" +set record = "+[Gmail].Sent\ Mail" +set postponed = "+[Gmail].Drafts" +set trash = "+[Gmail].All\ Mail" +mailboxes "=INBOX" "=[Gmail].Drafts" "=newsletters" "=[Gmail].Sent\ Mail" "=eras" "=NoteToSelf" "=[Gmail].Spam" "=stuff" "=[Gmail].Important" "=[Gmail].Starred" "=[Gmail].Trash" "=newsletters.github" "=newsletters.medicine" "=[Gmail].All\ Mail" +macro index,pager gi "<change-folder>=INBOX<enter>" "go to inbox" # mw-autogenerated +macro index,pager Mi ";<save-message>=INBOX<enter>" "move mail to inbox" # mw-autogenerated +macro index,pager Ci ";<copy-message>=INBOX<enter>" "copy mail to inbox" # mw-autogenerated +macro index,pager gs "<change-folder>=[Gmail].Sent\ Mail<enter>" "go to sent" # mw-autogenerated +macro index,pager gd "<change-folder>=[Gmail].Drafts<enter>" "go to drafts" # mw-autogenerated +macro index,pager gt "<change-folder>=[Gmail].Trash<enter>" "go to trash" # mw-autogenerated +macro index,pager gS "<change-folder>=[Gmail].Spam<enter>" "go to spam" # mw-autogenerated +macro index,pager gs "<change-folder>=[Gmail]/Starred<enter>" "Go to starred messages" +macro index,pager ga "<change-folder>=[Gmail].All\ Mail<enter>" "Go to all mail" +macro index,pager d "<save-message>=[Gmail].All\ Mail<enter><enter>" "Trash (archive)" +macro index,pager y "<save-message>=[Gmail].All\ Mail<enter><enter>" "Archive" diff --git a/mutt/muttrc b/mutt/muttrc @@ -0,0 +1,17 @@ +# vim: filetype=neomuttrc +source /usr/share/mutt-wizard/mutt-wizard.muttrc # mw-autogenerated +source /home/beau/.config/mutt/accounts/1-gmail.muttrc # mw-autogenerated +macro index,pager i1 '<sync-mailbox><enter-command>source /home/beau/.config/mutt/accounts/1-gmail.muttrc<enter><change-folder>!<enter>;<check-stats>' "switch to cbeauhilton@gmail.com" # mw-autogenerated + +set move = no +set fast_reply = yes +set include = yes +set pager_index_lines = 10 # number of index lines to show +set pager_context = 3 # number of context lines to show +set pager_stop = yes # don't go to next message automatically +set menu_scroll = yes # scroll in menus +set tilde = yes # show tildes like in vim +set markers = no # no ugly plus signs +macro index,pager \cw "<pipe-message> urlscan<Enter>" "call urlscan to extract URLs out of a message" + +macro attach,compose \cw "<pipe-entry> urlscan<Enter>" "call urlscan to extract URLs out of a message" diff --git a/ncmpcpp/bindings b/ncmpcpp/bindings @@ -0,0 +1,624 @@ +############################################################## +## This is the example bindings file. Copy it to ## +## ~/.ncmpcpp/bindings or $XDG_CONFIG_HOME/ncmpcpp/bindings ## +## and set up your preferences ## +############################################################## +## +##### General rules ##### +## +## 1) Because each action has runtime checks whether it's +## ok to run it, a few actions can be bound to one key. +## Actions will be bound in order given in configuration +## file. When a key is pressed, first action in order +## will test itself whether it's possible to run it. If +## test succeeds, action is executed and other actions +## bound to this key are ignored. If it doesn't, next +## action in order tests itself etc. +## +## 2) It's possible to bind more that one action at once +## to a key. It can be done using the following syntax: +## +## def_key "key" +## action1 +## action2 +## ... +## +## This creates a chain of actions. When such chain is +## executed, each action in chain is run until the end of +## chain is reached or one of its actions fails to execute +## due to its requirements not being met. If multiple actions +## and/or chains are bound to the same key, they will be +## consecutively run until one of them gets fully executed. +## +## 3) When ncmpcpp starts, bindings configuration file is +## parsed and then ncmpcpp provides "missing pieces" +## of default keybindings. If you want to disable some +## bindings, there is a special action called 'dummy' +## for that purpose. Eg. if you want to disable ability +## to crop playlists, you need to put the following +## into configuration file: +## +## def_key "C" +## dummy +## +## After that ncmpcpp will not bind any default action +## to this key. +## +## 4) To let you write simple macros, the following special +## actions are provided: +## +## - push_character "character" - pushes given special +## character into input queue, so it will be immediately +## picked by ncmpcpp upon next call to readKey function. +## Accepted values: mouse, up, down, page_up, page_down, +## home, end, space, enter, insert, delete, left, right, +## tab, ctrl-a, ctrl-b, ..., ctrl-z, ctrl-[, ctrl-\\, +## ctrl-], ctrl-^, ctrl-_, f1, f2, ..., f12, backspace. +## In addition, most of these names can be prefixed with +## alt-/ctrl-/shift- to be recognized with the appropriate +## modifier key(s). +## +## - push_characters "string" - pushes given string into +## input queue. +## +## - require_runnable "action" - checks whether given action +## is runnable and fails if it isn't. This is especially +## useful when mixed with previous two functions. Consider +## the following macro definition: +## +## def_key "key" +## push_characters "custom_filter" +## apply_filter +## +## If apply_filter can't be currently run, we end up with +## sequence of characters in input queue which will be +## treated just as we typed them. This may lead to unexpected +## results (in this case 'c' will most likely clear current +## playlist, 'u' will trigger database update, 's' will stop +## playback etc.). To prevent such thing from happening, we +## need to change above definition to this one: +## +## def_key "key" +## require_runnable "apply_filter" +## push_characters "custom_filter" +## apply_filter +## +## Here, first we test whether apply_filter can be actually run +## before we stuff characters into input queue, so if condition +## is not met, whole chain is aborted and we're fine. +## +## - require_screen "screen" - checks whether given screen is +## currently active. accepted values: browser, clock, help, +## media_library, outputs, playlist, playlist_editor, +## search_engine, tag_editor, visualizer, last_fm, lyrics, +## selected_items_adder, server_info, song_info, +## sort_playlist_dialog, tiny_tag_editor. +## +## - run_external_command "command" - runs given command using +## system() function. +## +## 5) In addition to binding to a key, you can also bind actions +## or chains of actions to a command. If it comes to commands, +## syntax is very similar to defining keys. Here goes example +## definition of a command: +## +## def_command "quit" [deferred] +## stop +## quit +## +## If you execute the above command (which can be done by +## invoking action execute_command, typing 'quit' and pressing +## enter), ncmpcpp will stop the player and then quit. Note the +## presence of word 'deferred' enclosed in square brackets. It +## tells ncmpcpp to wait for confirmation (ie. pressing enter) +## after you typed quit. Instead of 'deferred', 'immediate' +## could be used. Then ncmpcpp will not wait for confirmation +## (enter) and will execute the command the moment it sees it. +## +## Note: while command chains are executed, internal environment +## update (which includes current window refresh and mpd status +## update) is not performed for performance reasons. However, it +## may be desirable to do so in some situration. Therefore it's +## possible to invoke by hand by performing 'update enviroment' +## action. +## +## Note: There is a difference between: +## +## def_key "key" +## action1 +## +## def_key "key" +## action2 +## +## and +## +## def_key "key" +## action1 +## action2 +## +## First one binds two single actions to the same key whilst +## second one defines a chain of actions. The behavior of +## these two is different and is described in (1) and (2). +## +## Note: Function def_key accepts non-ascii characters. +## +##### List of unbound actions ##### +## +## The following actions are not bound to any key/command: +## +## - set_volume +## +# +#def_key "mouse" +# mouse_event +# +#def_key "up" +# scroll_up +# +#def_key "shift-up" +# select_item +# scroll_up +# +#def_key "down" +# scroll_down +# +#def_key "shift-down" +# select_item +# scroll_down +# +#def_key "[" +# scroll_up_album +# +#def_key "]" +# scroll_down_album +# +#def_key "{" +# scroll_up_artist +# +#def_key "}" +# scroll_down_artist +# +#def_key "page_up" +# page_up +# +#def_key "page_down" +# page_down +# +#def_key "home" +# move_home +# +#def_key "end" +# move_end +# +#def_key "insert" +# select_item +# +#def_key "enter" +# enter_directory +# +#def_key "enter" +# toggle_output +# +#def_key "enter" +# run_action +# +#def_key "enter" +# play_item +# +#def_key "space" +# add_item_to_playlist +# +#def_key "space" +# toggle_lyrics_update_on_song_change +# +#def_key "space" +# toggle_visualization_type +# +#def_key "delete" +# delete_playlist_items +# +#def_key "delete" +# delete_browser_items +# +#def_key "delete" +# delete_stored_playlist +# +#def_key "right" +# next_column +# +#def_key "right" +# slave_screen +# +#def_key "right" +# volume_up +# +#def_key "+" +# volume_up +# +#def_key "left" +# previous_column +# +#def_key "left" +# master_screen +# +#def_key "left" +# volume_down +# +#def_key "-" +# volume_down +# +#def_key ":" +# execute_command +# +#def_key "tab" +# next_screen +# +#def_key "shift-tab" +# previous_screen +# +#def_key "f1" +# show_help +# +#def_key "1" +# show_playlist +# +#def_key "2" +# show_browser +# +#def_key "2" +# change_browse_mode +# +#def_key "3" +# show_search_engine +# +#def_key "3" +# reset_search_engine +# +#def_key "4" +# show_media_library +# +#def_key "4" +# toggle_media_library_columns_mode +# +#def_key "5" +# show_playlist_editor +# +#def_key "6" +# show_tag_editor +# +#def_key "7" +# show_outputs +# +#def_key "8" +# show_visualizer +# +#def_key "=" +# show_clock +# +#def_key "@" +# show_server_info +# +#def_key "s" +# stop +# +#def_key "p" +# pause +# +#def_key ">" +# next +# +#def_key "<" +# previous +# +#def_key "ctrl-h" +# jump_to_parent_directory +# +#def_key "ctrl-h" +# replay_song +# +#def_key "backspace" +# jump_to_parent_directory +# +#def_key "backspace" +# replay_song +# +#def_key "f" +# seek_forward +# +#def_key "b" +# seek_backward +# +#def_key "r" +# toggle_repeat +# +#def_key "z" +# toggle_random +# +#def_key "y" +# save_tag_changes +# +#def_key "y" +# start_searching +# +#def_key "y" +# toggle_single +# +#def_key "R" +# toggle_consume +# +#def_key "Y" +# toggle_replay_gain_mode +# +#def_key "T" +# toggle_add_mode +# +#def_key "|" +# toggle_mouse +# +#def_key "#" +# toggle_bitrate_visibility +# +#def_key "Z" +# shuffle +# +#def_key "x" +# toggle_crossfade +# +#def_key "X" +# set_crossfade +# +#def_key "u" +# update_database +# +#def_key "ctrl-s" +# sort_playlist +# +#def_key "ctrl-s" +# toggle_browser_sort_mode +# +#def_key "ctrl-s" +# toggle_media_library_sort_mode +# +#def_key "ctrl-r" +# reverse_playlist +# +#def_key "ctrl-f" +# apply_filter +# +#def_key "ctrl-_" +# select_found_items +# +#def_key "/" +# find +# +#def_key "/" +# find_item_forward +# +#def_key "?" +# find +# +#def_key "?" +# find_item_backward +# +#def_key "." +# next_found_item +# +#def_key "," +# previous_found_item +# +#def_key "w" +# toggle_find_mode +# +#def_key "e" +# edit_song +# +#def_key "e" +# edit_library_tag +# +#def_key "e" +# edit_library_album +# +#def_key "e" +# edit_directory_name +# +#def_key "e" +# edit_playlist_name +# +#def_key "e" +# edit_lyrics +# +#def_key "i" +# show_song_info +# +#def_key "I" +# show_artist_info +# +#def_key "g" +# jump_to_position_in_song +# +#def_key "l" +# show_lyrics +# +#def_key "ctrl-v" +# select_range +# +#def_key "v" +# reverse_selection +# +#def_key "V" +# remove_selection +# +#def_key "B" +# select_album +# +#def_key "a" +# add_selected_items +# +#def_key "c" +# clear_playlist +# +#def_key "c" +# clear_main_playlist +# +#def_key "C" +# crop_playlist +# +#def_key "C" +# crop_main_playlist +# +#def_key "m" +# move_sort_order_up +# +#def_key "m" +# move_selected_items_up +# +#def_key "n" +# move_sort_order_down +# +#def_key "n" +# move_selected_items_down +# +#def_key "M" +# move_selected_items_to +# +#def_key "A" +# add +# +#def_key "S" +# save_playlist +# +#def_key "o" +# jump_to_playing_song +# +#def_key "G" +# jump_to_browser +# +#def_key "G" +# jump_to_playlist_editor +# +#def_key "~" +# jump_to_media_library +# +#def_key "E" +# jump_to_tag_editor +# +#def_key "U" +# toggle_playing_song_centering +# +#def_key "P" +# toggle_display_mode +# +#def_key "\\" +# toggle_interface +# +#def_key "!" +# toggle_separators_between_albums +# +#def_key "L" +# toggle_lyrics_fetcher +# +#def_key "F" +# fetch_lyrics_in_background +# +#def_key "alt-l" +# toggle_fetching_lyrics_in_background +# +#def_key "ctrl-l" +# toggle_screen_lock +# +#def_key "`" +# toggle_library_tag_type +# +#def_key "`" +# refetch_lyrics +# +#def_key "`" +# add_random_items +# +#def_key "ctrl-p" +# set_selected_items_priority +# +#def_key "q" +# quit +# +# +#def_key "f" +# find +#def_key "f" +# find_item_forward + +def_key "+" + show_clock +def_key "=" + volume_up + +def_key "j" + scroll_down +def_key "k" + scroll_up + +def_key "ctrl-u" + page_up +#push_characters "kkkkkkkkkkkkkkk" +def_key "ctrl-d" + page_down +#push_characters "jjjjjjjjjjjjjjj" +def_key "u" + page_up +#push_characters "kkkkkkkkkkkkkkk" +def_key "d" + page_down +#push_characters "jjjjjjjjjjjjjjj" +def_key "h" + previous_column +def_key "l" + next_column + +def_key "." + show_lyrics + +def_key "n" + next_found_item +def_key "N" + previous_found_item + +# not used but bound +def_key "J" + move_sort_order_down +def_key "K" + move_sort_order_up +def_key "h" + jump_to_parent_directory +def_key "l" + enter_directory +def_key "l" + run_action +def_key "l" + play_item +def_key "m" + show_media_library +def_key "m" + toggle_media_library_columns_mode +def_key "t" + show_tag_editor +def_key "v" + show_visualizer +def_key "G" + move_end +def_key "g" + move_home +#jump_to_position_in_song +def_key "U" + update_database +def_key "s" + reset_search_engine +def_key "s" + show_search_engine +def_key "f" + show_browser +def_key "f" + change_browse_mode +def_key "x" + delete_playlist_items +def_key "P" + show_playlist diff --git a/ncmpcpp/config b/ncmpcpp/config @@ -0,0 +1,600 @@ +############################################################################## +## This is the example configuration file. Copy it to $HOME/.ncmpcpp/config ## +## or $XDG_CONFIG_HOME/ncmpcpp/config and set up your preferences. ## +############################################################################## +# +##### active settings ##### + +ncmpcpp_directory = ~/.config/ncmpcpp + +visualizer_fifo_path = "/tmp/mpd.fifo" +visualizer_output_name = "my_fifo" +visualizer_sync_interval = "30" +visualizer_in_stereo = "yes" +visualizer_type = "spectrum" +visualizer_look = "+|" + +lyrics_directory = ~/.config/lyrics + +mpd_music_dir = "~/tunes" + +message_delay_time = 1 + +song_list_format = {$4%a - }{%t}|{$8%f$9}$R{$3(%l)$9} +song_status_format = $b{{$8"%t"}} $3by {$4%a{ $3in $7%b{ (%y)}} $3}|{$8%f} +song_library_format = {%n - }{%t}|{%f} +alternative_header_first_line_format = $b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b +alternative_header_second_line_format = {{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D} +current_item_prefix = $(cyan)$r$b +current_item_suffix = $/r$(end)$/b +current_item_inactive_column_prefix = $(magenta)$r +current_item_inactive_column_suffix = $/r$(end) + +playlist_display_mode = columns +browser_display_mode = columns + +progressbar_look = -> + +media_library_primary_tag = album_artist +media_library_albums_split_by_date = no + +startup_screen = visualizer + +display_volume_level = no + +ignore_leading_the = yes +external_editor = vim +use_console_editor = yes + +empty_tag_color = magenta +main_window_color = white +progressbar_color = black:b +progressbar_elapsed_color = blue:b +statusbar_color = red +statusbar_time_color = cyan:b + +##### directories ###### +## +## Directory for storing ncmpcpp related files. Changing it is useful if you +## want to store everything somewhere else and provide command line setting for +## alternative location to config file which defines that while launching +## ncmpcpp. +## +# +# ncmpcpp_directory = ~/.config/ncmpcpp +# +## +## Directory for storing downloaded lyrics. It defaults to ~/.lyrics since other +## MPD clients (eg. ncmpc) also use that location. +## +# +# lyrics_directory = ~/.config/lyrics +# +##### connection settings ##### +# +#mpd_host = localhost +# +#mpd_port = 6600 +# +#mpd_connection_timeout = 5 +# +## Needed for tag editor and file operations to work. +## +#mpd_music_dir = "~/tunes" +# +#mpd_crossfade_time = 5 +# +##### music visualizer ##### +## +## Note: In order to make music visualizer work you'll need to use mpd fifo +## output, whose format parameter has to be set to 44100:16:1 for mono +## visualization or 44100:16:2 for stereo visualization. Example configuration +## (it has to be put into mpd.conf): +## +## audio_output { +## type "fifo" +## name "Visualizer feed" +## path "/tmp/mpd.fifo" +## format "44100:16:2" +## } +## +# +#visualizer_fifo_path = "/tmp/mpd.fifo" +#visualizer_output_name = "my_fifo" +#visualizer_sync_interval = "20" +#visualizer_in_stereo = "yes" +#visualizer_type = "spectrum" +#visualizer_look = "+|" +# +## +## Note: Below parameter is needed for ncmpcpp to determine which output +## provides data for visualizer and thus allow syncing between visualization and +## sound as currently there are some problems with it. +## +# +#visualizer_output_name = Visualizer feed +# +## +## If you set format to 44100:16:2, make it 'yes'. +## +#visualizer_in_stereo = yes +# +## +## Note: Below parameter defines how often ncmpcpp has to "synchronize" +## visualizer and audio outputs. 30 seconds is optimal value, but if you +## experience synchronization problems, set it to lower value. Keep in mind +## that sane values start with >=10. +## +# +#visualizer_sync_interval = 30 +# +## +## Note: To enable spectrum frequency visualization you need to compile ncmpcpp +## with fftw3 support. +## +# +## Available values: spectrum, wave, wave_filled, ellipse. +## +#visualizer_type = spectrum +# +#visualizer_look = ●卐 +#visualizer_look = 卐 +# +#visualizer_color = blue, cyan, green, yellow, magenta, red +# +## Alternative subset of 256 colors for terminals that support it. +## +#visualizer_color = 41, 83, 119, 155, 185, 215, 209, 203, 197, 161 +# +##### system encoding ##### +## +## ncmpcpp should detect your charset encoding but if it failed to do so, you +## can specify charset encoding you are using here. +## +## Note: You can see whether your ncmpcpp build supports charset detection by +## checking output of `ncmpcpp --version`. +## +## Note: Since MPD uses UTF-8 by default, setting this option makes sense only +## if your encoding is different. +## +# +#system_encoding = "" +# +##### delays ##### +# +## Time of inactivity (in seconds) after playlist highlighting will be disabled +## (0 = always on). +## +#playlist_disable_highlight_delay = 5 +# +## Defines how long messages are supposed to be visible. +## +#message_delay_time = 1 +# +##### song format ##### +## +## For a song format you can use: +## +## %l - length +## %f - filename +## %D - directory +## %a - artist +## %A - album artist +## %t - title +## %b - album +## %y - date +## %n - track number (01/12 -> 01) +## %N - full track info (01/12 -> 01/12) +## %g - genre +## %c - composer +## %p - performer +## %d - disc +## %C - comment +## %P - priority +## $R - begin right alignment +## +## If you want to make sure that a part of the format is displayed only when +## certain tags are present, you can archieve it by grouping them with brackets, +## e.g. '{%a - %t}' will be evaluated to 'ARTIST - TITLE' if both tags are +## present or '' otherwise. It is also possible to define a list of +## alternatives by providing several groups and separating them with '|', +## e.g. '{%t}|{%f}' will be evaluated to 'TITLE' or 'FILENAME' if the former is +## not present. +## +## Note: If you want to set limit on maximal length of a tag, just put the +## appropriate number between % and character that defines tag type, e.g. to +## make album take max. 20 terminal cells, use '%20b'. +## +## In addition, formats support markers used for text attributes. They are +## followed by character '$'. After that you can put: +## +## - 0 - default window color (discards all other colors) +## - 1 - black +## - 2 - red +## - 3 - green +## - 4 - yellow +## - 5 - blue +## - 6 - magenta +## - 7 - cyan +## - 8 - white +## - 9 - end of current color +## - b - bold text +## - u - underline text +## - r - reverse colors +## - a - use alternative character set +## +## If you don't want to use a non-color attribute anymore, just put it again, +## but this time insert character '/' between '$' and attribute character, +## e.g. {$b%t$/b}|{$r%f$/r} will display bolded title tag or filename with +## reversed colors. +## +## If you want to use 256 colors and/or background colors in formats (the naming +## scheme is described below in section about color definitions), it can be done +## with the syntax $(COLOR), e.g. to set the artist tag to one of the +## non-standard colors and make it have yellow background, you need to write +## $(197_yellow)%a$(end). Note that for standard colors this is interchangable +## with attributes listed above. +## +## Note: colors can be nested. +## +# +#song_list_format = {$4%a - }{%t}|{$8%f$9}$R{$3(%l)$9} +# +#song_status_format = $b{{$8"%t"}} $3by {$4%a{ $3in $7%b{ (%y)}} $3}|{$8%f} +# +#song_library_format = {%n - }{%t}|{%f} +# +#alternative_header_first_line_format = $b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b +# +#alternative_header_second_line_format = {{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D} +# +#current_item_prefix = $(cyan)$r$b +# +#current_item_suffix = $/r$(end)$/b +# +#current_item_inactive_column_prefix = $(magenta)$r +# +#current_item_inactive_column_suffix = $/r$(end) +# +#now_playing_prefix = $b +# +#now_playing_suffix = $/b +# +#browser_playlist_prefix = "$2playlist$9 " +# +#selected_item_prefix = $6 +# +#selected_item_suffix = $9 +# +#modified_item_prefix = $3> $9 +# +## +## Note: attributes are not supported for the following variables. +## +#song_window_title_format = {%a - }{%t}|{%f} +## +## Note: Below variables are used for sorting songs in browser. The sort mode +## determines how songs are sorted, and can be used in combination with a sort +## format to specify a custom sorting format. Available values for +## browser_sort_mode are "name", "mtime", "format" and "noop". +## +# +#browser_sort_mode = name +# +#browser_sort_format = {%a - }{%t}|{%f} {(%l)} +# +##### columns settings ##### +## +## syntax of song columns list format is "column column etc." +## +## - syntax for each column is: +## +## (width of the column)[color of the column]{displayed tag} +## +## Note: Width is by default in %, if you want a column to have fixed size, add +## 'f' after the value, e.g. (10)[white]{a} will be the column that take 10% of +## screen (so the real width will depend on actual screen size), whereas +## (10f)[white]{a} will take 10 terminal cells, no matter how wide the screen +## is. +## +## - color is optional (if you want the default one, leave the field empty). +## +## Note: You can give a column additional attributes by putting appropriate +## character after displayed tag character. Available attributes are: +## +## - r - column will be right aligned +## - E - if tag is empty, empty tag marker won't be displayed +## +## You can also: +## +## - give a column custom name by putting it after attributes, separated with +## character ':', e.g. {lr:Length} gives you right aligned column of lengths +## named "Length". +## +## - define sequence of tags, that have to be displayed in case predecessor is +## empty in a way similar to the one in classic song format, i.e. using '|' +## character, e.g. {a|c|p:Owner} creates column named "Owner" that tries to +## display artist tag and then composer and performer if previous ones are not +## available. +## +# +#song_columns_list_format = (20)[]{a} (6f)[green]{NE} (50)[white]{t|f:Title} (20)[cyan]{b} (7f)[magenta]{l} +# +##### various settings ##### +# +## +## Note: Custom command that will be executed each time song changes. Useful for +## notifications etc. +## +#execute_on_song_change = "" +# +## +## Note: Custom command that will be executed each time player state +## changes. The environment variable MPD_PLAYER_STATE is set to the current +## state (either unknown, play, pause, or stop) for its duration. +## +# +#execute_on_player_state_change = "" +# +#playlist_show_mpd_host = no +# +#playlist_show_remaining_time = no +# +#playlist_shorten_total_times = no +# +#playlist_separate_albums = no +# +## +## Note: Possible display modes: classic, columns. +## +#playlist_display_mode = columns +# +#browser_display_mode = columns +# +#search_engine_display_mode = classic +# +#playlist_editor_display_mode = classic +# +#discard_colors_if_item_is_selected = yes +# +#show_duplicate_tags = true +# +#incremental_seeking = yes +# +#seek_time = 1 +# +#volume_change_step = 2 +# +#autocenter_mode = no +# +#centered_cursor = no +# +## +## Note: You can specify third character which will be used to build 'empty' +## part of progressbar. +## +#progressbar_look = -> +# +## Available values: database, playlist. +## +#default_place_to_search_in = database +# +## Available values: classic, alternative. +## +#user_interface = classic +# +#data_fetching_delay = yes +# +## Available values: artist, album_artist, date, genre, composer, performer. +## +#media_library_primary_tag = album_artist +# +#media_library_albums_split_by_date = no +# +## Available values: wrapped, normal. +## +#default_find_mode = wrapped +# +#default_tag_editor_pattern = %n - %t +# +#header_visibility = yes +# +#statusbar_visibility = yes +# +#titles_visibility = yes +# +#header_text_scrolling = yes +# +#cyclic_scrolling = no +# +#lines_scrolled = 2 +# +#lyrics_fetchers = lyricwiki, azlyrics, genius, sing365, lyricsmania, metrolyrics, justsomelyrics, jahlyrics, plyrics, tekstowo, internet +# +#follow_now_playing_lyrics = no +# +#fetch_lyrics_for_current_song_in_background = no +# +#store_lyrics_in_song_dir = no +# +#generate_win32_compatible_filenames = yes +# +#allow_for_physical_item_deletion = no +# +## +## Note: If you set this variable, ncmpcpp will try to get info from last.fm in +## language you set and if it fails, it will fall back to english. Otherwise it +## will use english the first time. +## +## Note: Language has to be expressed as an ISO 639 alpha-2 code. +## +#lastfm_preferred_language = en +# +#space_add_mode = add_remove +# +#show_hidden_files_in_local_browser = no +# +## +## How shall screen switcher work? +## +## - "previous" - switch between the current and previous screen. +## - "screen1,...,screenN" - switch between given sequence of screens. +## +## Screens available for use: help, playlist, browser, search_engine, +## media_library, playlist_editor, tag_editor, outputs, visualizer, clock, +## lyrics, last_fm. +## +#screen_switcher_mode = playlist, browser +# +## +## Note: You can define startup screen by choosing screen from the list above. +## +#startup_screen = visualizer +# +## +## Note: You can define startup slave screen by choosing screen from the list +## above or an empty value for no slave screen. +## +#startup_slave_screen = "" +# +#startup_slave_screen_focus = no +# +## +## Default width of locked screen (in %). Acceptable values are from 20 to 80. +## +# +#locked_screen_width_part = 50 +# +#ask_for_locked_screen_width_part = yes +# +#jump_to_now_playing_song_at_start = yes +# +#ask_before_clearing_playlists = yes +# +#clock_display_seconds = no +# +#display_volume_level = no +# +#display_bitrate = no +# +#display_remaining_time = no +# +## Available values: none, basic, extended, perl. +## +#regular_expressions = perl +# +## +## Note: if below is enabled, ncmpcpp will ignore leading "The" word while +## sorting items in browser, tags in media library, etc. +## +#ignore_leading_the = yes +# +## +## Note: if below is enabled, ncmpcpp will ignore diacritics while searching and +## filtering lists. This takes an effect only if boost was compiled with ICU +## support. +## +#ignore_diacritics = no +# +#block_search_constraints_change_if_items_found = yes +# +#mouse_support = yes +# +#mouse_list_scroll_whole_page = yes +# +#empty_tag_marker = <empty> +# +#tags_separator = " | " +# +#tag_editor_extended_numeration = no +# +#media_library_sort_by_mtime = no +# +#enable_window_title = yes +# +## +## Note: You can choose default search mode for search engine. Available modes +## are: +## +## - 1 - use mpd built-in searching (no regexes, pattern matching) +## +## - 2 - use ncmpcpp searching (pattern matching with support for regexes, but +## if your mpd is on a remote machine, downloading big database to process +## it can take a while +## +## - 3 - match only exact values (this mode uses mpd function for searching in +## database and local one for searching in current playlist) +## +# +#search_engine_default_search_mode = 1 +# +#external_editor = vim +# +## Note: set to yes if external editor is a console application. +## +#use_console_editor = yes +# +##### colors definitions ##### +## +## It is possible to set a background color by setting a color value +## "<foreground>_<background>", e.g. red_black will set foregound color to red +## and background color to black. +## +## In addition, for terminals that support 256 colors it is possible to set one +## of them by using a number in range [1, 256] instead of color name, +## e.g. numerical value corresponding to red_black is 2_1. To find out if the +## terminal supports 256 colors, run ncmpcpp and check out the bottom of the +## help screen for list of available colors and their numerical values. +## +## What is more, there are two special values for the background color: +## "transparent" and "current". The first one explicitly sets the background to +## be transparent, while the second one allows you to preserve current +## background color and change only the foreground one. It's used implicitly +## when background color is not specified. +## +## Moreover, it is possible to attach format information to selected color +## variables by appending to their end a colon followed by one or more format +## flags, e.g. black:b or red:ur. The following variables support this syntax: +## visualizer_color, color1, color2, empty_tag_color, volume_color, +## state_line_color, state_flags_color, progressbar_color, +## progressbar_elapsed_color, player_state_color, statusbar_time_color, +## alternative_ui_separator_color. +## +## Note: due to technical limitations of older ncurses version, if 256 colors +## are used there is a possibility that you'll be able to use only colors with +## transparent background. +# +#colors_enabled = yes +# +#empty_tag_color = magenta +# +#header_window_color = magenta +# +#volume_color = default +# +#state_line_color = default +# +#state_flags_color = default:b +# +#main_window_color = white +# +#color1 = white +# +#color2 = green +# +#progressbar_color = black:b +# +#progressbar_elapsed_color = blue:b +# +#statusbar_color = red +# +#statusbar_time_color = cyan:b +# +#player_state_color = default:b +# +#alternative_ui_separator_color = black:b +# +#window_border_color = green +# +#active_window_border = red +# diff --git a/neofetch/config.conf b/neofetch/config.conf @@ -0,0 +1,849 @@ +# See this wiki page for more info: +# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info +print_info() { + info title + info underline + + info "OS" distro + info "Host" model + info "Kernel" kernel + info "Uptime" uptime + info "Packages" packages + info "Shell" shell + info "Resolution" resolution + info "DE" de + info "WM" wm + info "WM Theme" wm_theme + info "Theme" theme + info "Icons" icons + info "Terminal" term + info "Terminal Font" term_font + info "CPU" cpu + info "GPU" gpu + info "Memory" memory + + # info "GPU Driver" gpu_driver # Linux/macOS only + # info "CPU Usage" cpu_usage + # info "Disk" disk + # info "Battery" battery + # info "Font" font + # info "Song" song + # [[ "$player" ]] && prin "Music Player" "$player" + # info "Local IP" local_ip + # info "Public IP" public_ip + # info "Users" users + # info "Locale" locale # This only works on glibc systems. + + info cols +} + +# Title + + +# Hide/Show Fully qualified domain name. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --title_fqdn +title_fqdn="off" + + +# Kernel + + +# Shorten the output of the kernel function. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --kernel_shorthand +# Supports: Everything except *BSDs (except PacBSD and PC-BSD) +# +# Example: +# on: '4.8.9-1-ARCH' +# off: 'Linux 4.8.9-1-ARCH' +kernel_shorthand="on" + + +# Distro + + +# Shorten the output of the distro function +# +# Default: 'off' +# Values: 'on', 'tiny', 'off' +# Flag: --distro_shorthand +# Supports: Everything except Windows and Haiku +distro_shorthand="off" + +# Show/Hide OS Architecture. +# Show 'x86_64', 'x86' and etc in 'Distro:' output. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --os_arch +# +# Example: +# on: 'Arch Linux x86_64' +# off: 'Arch Linux' +os_arch="on" + + +# Uptime + + +# Shorten the output of the uptime function +# +# Default: 'on' +# Values: 'on', 'tiny', 'off' +# Flag: --uptime_shorthand +# +# Example: +# on: '2 days, 10 hours, 3 mins' +# tiny: '2d 10h 3m' +# off: '2 days, 10 hours, 3 minutes' +uptime_shorthand="on" + + +# Memory + + +# Show memory pecentage in output. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --memory_percent +# +# Example: +# on: '1801MiB / 7881MiB (22%)' +# off: '1801MiB / 7881MiB' +memory_percent="off" + + +# Packages + + +# Show/Hide Package Manager names. +# +# Default: 'tiny' +# Values: 'on', 'tiny' 'off' +# Flag: --package_managers +# +# Example: +# on: '998 (pacman), 8 (flatpak), 4 (snap)' +# tiny: '908 (pacman, flatpak, snap)' +# off: '908' +package_managers="on" + + +# Shell + + +# Show the path to $SHELL +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --shell_path +# +# Example: +# on: '/bin/bash' +# off: 'bash' +shell_path="off" + +# Show $SHELL version +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --shell_version +# +# Example: +# on: 'bash 4.4.5' +# off: 'bash' +shell_version="on" + + +# CPU + + +# CPU speed type +# +# Default: 'bios_limit' +# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'. +# Flag: --speed_type +# Supports: Linux with 'cpufreq' +# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value. +speed_type="bios_limit" + +# CPU speed shorthand +# +# Default: 'off' +# Values: 'on', 'off'. +# Flag: --speed_shorthand +# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz +# +# Example: +# on: 'i7-6500U (4) @ 3.1GHz' +# off: 'i7-6500U (4) @ 3.100GHz' +speed_shorthand="off" + +# Enable/Disable CPU brand in output. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --cpu_brand +# +# Example: +# on: 'Intel i7-6500U' +# off: 'i7-6500U (4)' +cpu_brand="on" + +# CPU Speed +# Hide/Show CPU speed. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --cpu_speed +# +# Example: +# on: 'Intel i7-6500U (4) @ 3.1GHz' +# off: 'Intel i7-6500U (4)' +cpu_speed="on" + +# CPU Cores +# Display CPU cores in output +# +# Default: 'logical' +# Values: 'logical', 'physical', 'off' +# Flag: --cpu_cores +# Support: 'physical' doesn't work on BSD. +# +# Example: +# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores) +# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores) +# off: 'Intel i7-6500U @ 3.1GHz' +cpu_cores="logical" + +# CPU Temperature +# Hide/Show CPU temperature. +# Note the temperature is added to the regular CPU function. +# +# Default: 'off' +# Values: 'C', 'F', 'off' +# Flag: --cpu_temp +# Supports: Linux, BSD +# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable +# coretemp kernel module. This only supports newer Intel processors. +# +# Example: +# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]' +# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]' +# off: 'Intel i7-6500U (4) @ 3.1GHz' +cpu_temp="off" + + +# GPU + + +# Enable/Disable GPU Brand +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gpu_brand +# +# Example: +# on: 'AMD HD 7950' +# off: 'HD 7950' +gpu_brand="on" + +# Which GPU to display +# +# Default: 'all' +# Values: 'all', 'dedicated', 'integrated' +# Flag: --gpu_type +# Supports: Linux +# +# Example: +# all: +# GPU1: AMD HD 7950 +# GPU2: Intel Integrated Graphics +# +# dedicated: +# GPU1: AMD HD 7950 +# +# integrated: +# GPU1: Intel Integrated Graphics +gpu_type="all" + + +# Resolution + + +# Display refresh rate next to each monitor +# Default: 'off' +# Values: 'on', 'off' +# Flag: --refresh_rate +# Supports: Doesn't work on Windows. +# +# Example: +# on: '1920x1080 @ 60Hz' +# off: '1920x1080' +refresh_rate="off" + + +# Gtk Theme / Icons / Font + + +# Shorten output of GTK Theme / Icons / Font +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --gtk_shorthand +# +# Example: +# on: 'Numix, Adwaita' +# off: 'Numix [GTK2], Adwaita [GTK3]' +gtk_shorthand="off" + + +# Enable/Disable gtk2 Theme / Icons / Font +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gtk2 +# +# Example: +# on: 'Numix [GTK2], Adwaita [GTK3]' +# off: 'Adwaita [GTK3]' +gtk2="on" + +# Enable/Disable gtk3 Theme / Icons / Font +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gtk3 +# +# Example: +# on: 'Numix [GTK2], Adwaita [GTK3]' +# off: 'Numix [GTK2]' +gtk3="on" + + +# IP Address + + +# Website to ping for the public IP +# +# Default: 'http://ident.me' +# Values: 'url' +# Flag: --ip_host +public_ip_host="http://ident.me" + +# Public IP timeout. +# +# Default: '2' +# Values: 'int' +# Flag: --ip_timeout +public_ip_timeout=2 + + +# Desktop Environment + + +# Show Desktop Environment version +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --de_version +de_version="off" + + +# Disk + + +# Which disks to display. +# The values can be any /dev/sdXX, mount point or directory. +# NOTE: By default we only show the disk info for '/'. +# +# Default: '/' +# Values: '/', '/dev/sdXX', '/path/to/drive'. +# Flag: --disk_show +# +# Example: +# disk_show=('/' '/dev/sdb1'): +# 'Disk (/): 74G / 118G (66%)' +# 'Disk (/mnt/Videos): 823G / 893G (93%)' +# +# disk_show=('/'): +# 'Disk (/): 74G / 118G (66%)' +# +disk_show=('/') + +# Disk subtitle. +# What to append to the Disk subtitle. +# +# Default: 'mount' +# Values: 'mount', 'name', 'dir', 'none' +# Flag: --disk_subtitle +# +# Example: +# name: 'Disk (/dev/sda1): 74G / 118G (66%)' +# 'Disk (/dev/sdb2): 74G / 118G (66%)' +# +# mount: 'Disk (/): 74G / 118G (66%)' +# 'Disk (/mnt/Local Disk): 74G / 118G (66%)' +# 'Disk (/mnt/Videos): 74G / 118G (66%)' +# +# dir: 'Disk (/): 74G / 118G (66%)' +# 'Disk (Local Disk): 74G / 118G (66%)' +# 'Disk (Videos): 74G / 118G (66%)' +# +# none: 'Disk: 74G / 118G (66%)' +# 'Disk: 74G / 118G (66%)' +# 'Disk: 74G / 118G (66%)' +disk_subtitle="mount" + +# Disk percent. +# Show/Hide disk percent. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --disk_percent +# +# Example: +# on: 'Disk (/): 74G / 118G (66%)' +# off: 'Disk (/): 74G / 118G' +disk_percent="on" + + +# Song + + +# Manually specify a music player. +# +# Default: 'auto' +# Values: 'auto', 'player-name' +# Flag: --music_player +# +# Available values for 'player-name': +# +# amarok +# audacious +# banshee +# bluemindo +# clementine +# cmus +# deadbeef +# deepin-music +# dragon +# elisa +# exaile +# gnome-music +# gmusicbrowser +# gogglesmm +# guayadeque +# io.elementary.music +# iTunes +# juk +# lollypop +# mocp +# mopidy +# mpd +# muine +# netease-cloud-music +# pogo +# pragha +# qmmp +# quodlibet +# rhythmbox +# sayonara +# smplayer +# spotify +# strawberry +# tomahawk +# vlc +# xmms2d +# xnoise +# yarock +music_player="auto" + +# Format to display song information. +# +# Default: '%artist% - %album% - %title%' +# Values: '%artist%', '%album%', '%title%' +# Flag: --song_format +# +# Example: +# default: 'Song: Jet - Get Born - Sgt Major' +song_format="%artist% - %album% - %title%" + +# Print the Artist, Album and Title on separate lines +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --song_shorthand +# +# Example: +# on: 'Artist: The Fratellis' +# 'Album: Costello Music' +# 'Song: Chelsea Dagger' +# +# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger' +song_shorthand="off" + +# 'mpc' arguments (specify a host, password etc). +# +# Default: '' +# Example: mpc_args=(-h HOST -P PASSWORD) +mpc_args=() + + +# Text Colors + + +# Text Colors +# +# Default: 'distro' +# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' +# Flag: --colors +# +# Each number represents a different part of the text in +# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info' +# +# Example: +# colors=(distro) - Text is colored based on Distro colors. +# colors=(4 6 1 8 8 6) - Text is colored in the order above. +colors=(distro) + + +# Text Options + + +# Toggle bold text +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --bold +bold="on" + +# Enable/Disable Underline +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --underline +underline_enabled="on" + +# Underline character +# +# Default: '-' +# Values: 'string' +# Flag: --underline_char +underline_char="-" + + +# Info Separator +# Replace the default separator with the specified string. +# +# Default: ':' +# Flag: --separator +# +# Example: +# separator="->": 'Shell-> bash' +# separator=" =": 'WM = dwm' +separator=":" + + +# Color Blocks + + +# Color block range +# The range of colors to print. +# +# Default: '0', '15' +# Values: 'num' +# Flag: --block_range +# +# Example: +# +# Display colors 0-7 in the blocks. (8 colors) +# neofetch --block_range 0 7 +# +# Display colors 0-15 in the blocks. (16 colors) +# neofetch --block_range 0 15 +block_range=(0 15) + +# Toggle color blocks +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --color_blocks +color_blocks="on" + +# Color block width in spaces +# +# Default: '3' +# Values: 'num' +# Flag: --block_width +block_width=3 + +# Color block height in lines +# +# Default: '1' +# Values: 'num' +# Flag: --block_height +block_height=1 + +# Color Alignment +# +# Default: 'auto' +# Values: 'auto', 'num' +# Flag: --col_offset +# +# Number specifies how far from the left side of the terminal (in spaces) to +# begin printing the columns, in case you want to e.g. center them under your +# text. +# Example: +# col_offset="auto" - Default behavior of neofetch +# col_offset=7 - Leave 7 spaces then print the colors +col_offset="auto" + +# Progress Bars + + +# Bar characters +# +# Default: '-', '=' +# Values: 'string', 'string' +# Flag: --bar_char +# +# Example: +# neofetch --bar_char 'elapsed' 'total' +# neofetch --bar_char '-' '=' +bar_char_elapsed="-" +bar_char_total="=" + +# Toggle Bar border +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --bar_border +bar_border="on" + +# Progress bar length in spaces +# Number of chars long to make the progress bars. +# +# Default: '15' +# Values: 'num' +# Flag: --bar_length +bar_length=15 + +# Progress bar colors +# When set to distro, uses your distro's logo colors. +# +# Default: 'distro', 'distro' +# Values: 'distro', 'num' +# Flag: --bar_colors +# +# Example: +# neofetch --bar_colors 3 4 +# neofetch --bar_colors distro 5 +bar_color_elapsed="distro" +bar_color_total="distro" + + +# Info display +# Display a bar with the info. +# +# Default: 'off' +# Values: 'bar', 'infobar', 'barinfo', 'off' +# Flags: --cpu_display +# --memory_display +# --battery_display +# --disk_display +# +# Example: +# bar: '[---=======]' +# infobar: 'info [---=======]' +# barinfo: '[---=======] info' +# off: 'info' +cpu_display="off" +memory_display="off" +battery_display="off" +disk_display="off" + + +# Backend Settings + + +# Image backend. +# +# Default: 'ascii' +# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off', +# 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty' +# Flag: --backend +image_backend="ascii" + +# Image Source +# +# Which image or ascii file to display. +# +# Default: 'auto' +# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/' +# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")' +# Flag: --source +# +# NOTE: 'auto' will pick the best image source for whatever image backend is used. +# In ascii mode, distro ascii art will be used and in an image mode, your +# wallpaper will be used. +image_source="auto" + + +# Ascii Options + + +# Ascii distro +# Which distro's ascii art to display. +# +# Default: 'auto' +# Values: 'auto', 'distro_name' +# Flag: --ascii_distro +# NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, AOSC, +# Apricity, ArcoLinux, ArchBox, ARCHlabs, ArchStrike, +# XFerience, ArchMerge, Arch, Artix, Arya, Bedrock, Bitrig, +# BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD, +# BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS, +# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover, +# Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin, +# DesaOS, Devuan, DracOS, DragonFly, Drauger, Elementary, +# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD, +# FreeMiNT, Frugalware, Funtoo, GalliumOS, Gentoo, Pentoo, +# gNewSense, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra, +# Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion, +# Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite, +# LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva, +# Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib, +# Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner, +# NuTyX, OBRevenge, OpenBSD, OpenIndiana, OpenMandriva, +# OpenWrt, osmc, Oracle, PacBSD, Parabola, Pardus, Parrot, +# Parsix, TrueOS, PCLinuxOS, Peppermint, popos, Porteus, +# PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix, Raspbian, +# Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan, Regata, +# Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific, Septor, +# SharkLinux, Siduction, Slackware, SliTaz, SmartOS, Solus, +# Source_Mage, Sparky, Star, SteamOS, SunOS, openSUSE_Leap, +# openSUSE_Tumbleweed, openSUSE, SwagArch, Tails, Trisquel, +# Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio, Ubuntu, +# Void, Obarun, windows10, Windows7, Xubuntu, Zorin, and IRIX +# have ascii logos +# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants. +# Use '{distro name}_old' to use the old logos. +# NOTE: Ubuntu has flavor variants. +# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME, +# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors. +# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu, +# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android, +# Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola, +# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS, +# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian, +# postmarketOS, and Void have a smaller logo variant. +# Use '{distro name}_small' to use the small variants. +ascii_distro="auto" + +# Ascii Colors +# +# Default: 'distro' +# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' +# Flag: --ascii_colors +# +# Example: +# ascii_colors=(distro) - Ascii is colored based on Distro colors. +# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors. +ascii_colors=(distro) + +# Bold ascii logo +# Whether or not to bold the ascii logo. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --ascii_bold +ascii_bold="on" + + +# Image Options + + +# Image loop +# Setting this to on will make neofetch redraw the image constantly until +# Ctrl+C is pressed. This fixes display issues in some terminal emulators. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --loop +image_loop="off" + +# Thumbnail directory +# +# Default: '~/.cache/thumbnails/neofetch' +# Values: 'dir' +thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch" + +# Crop mode +# +# Default: 'normal' +# Values: 'normal', 'fit', 'fill' +# Flag: --crop_mode +# +# See this wiki page to learn about the fit and fill options. +# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F +crop_mode="normal" + +# Crop offset +# Note: Only affects 'normal' crop mode. +# +# Default: 'center' +# Values: 'northwest', 'north', 'northeast', 'west', 'center' +# 'east', 'southwest', 'south', 'southeast' +# Flag: --crop_offset +crop_offset="center" + +# Image size +# The image is half the terminal width by default. +# +# Default: 'auto' +# Values: 'auto', '00px', '00%', 'none' +# Flags: --image_size +# --size +image_size="auto" + +# Gap between image and text +# +# Default: '3' +# Values: 'num', '-num' +# Flag: --gap +gap=3 + +# Image offsets +# Only works with the w3m backend. +# +# Default: '0' +# Values: 'px' +# Flags: --xoffset +# --yoffset +yoffset=0 +xoffset=0 + +# Image background color +# Only works with the w3m backend. +# +# Default: '' +# Values: 'color', 'blue' +# Flag: --bg_color +background_color= + + +# Misc Options + +# Stdout mode +# Turn off all colors and disables image backend (ASCII/Image). +# Useful for piping into another command. +# Default: 'off' +# Values: 'on', 'off' +stdout="off" diff --git a/newsboat/config b/newsboat/config @@ -0,0 +1,41 @@ +#show-read-feeds no +auto-reload yes +datetime-format "%d %b %Y" +external-url-viewer "urlscan -dc -r 'linkhandler {}'" + +bind-key j down +bind-key k up +bind-key j next articlelist +bind-key k prev articlelist +bind-key J next-feed articlelist +bind-key K prev-feed articlelist +bind-key G end +bind-key g home +bind-key d pagedown +bind-key u pageup +bind-key l open +bind-key h quit +bind-key a toggle-article-read +bind-key n next-unread +bind-key N prev-unread +bind-key D pb-download +bind-key U show-urls +bind-key ^W show-urls +bind-key ^B show-urls +bind-key x pb-delete + +color listnormal cyan default +color listfocus black yellow standout bold +color listnormal_unread blue default +color listfocus_unread yellow default bold +color info red black bold +color article cyan default + +browser linkhandler +macro , open-in-browser +macro t set browser "tsp youtube-dl --add-metadata -ic"; open-in-browser ; set browser linkhandler +macro a set browser "tsp youtube-dl --add-metadata -xic -f bestaudio/best"; open-in-browser ; set browser linkhandler +macro v set browser "setsid nohup mpv"; open-in-browser ; set browser linkhandler +macro w set browser "w3m"; open-in-browser ; set browser linkhandler +macro p set browser "dmenuhandler"; open-in-browser ; set browser linkhandler +macro c set browser "xsel -b <<<" ; open-in-browser ; set browser linkhandler diff --git a/newsboat/read_articles b/newsboat/read_articles @@ -0,0 +1,2483 @@ +http://xpenguin.club/The-one-where-uncle-Hamish-hates-on-Windows/ +http://xpenguin.club/The-one-where-Hamish-got-confused/ +http://xpenguin.club/Weekly-Linux-gaming-talk/ +http://xpenguin.club/The-one-with-the-tinfail-hat/ +http://xpenguin.club/The-one-with-fake-Hamish/ +http://xpenguin.club/The-one-with-the-hmmmm/ +http://xpenguin.club/The-one-with-real-Hamish/ +http://xpenguin.club/The-one-from-Craggy-Island/ +http://xpenguin.club/The-one-where-ArchToasty-was-cooler-than-me-(again)/ +http://xpenguin.club/The-one-with-the-pack-of-wine/ +http://xpenguin.club/The-one-where-it-went-all-wobbly-at-the-end/ +http://xpenguin.club/The-one-with-Cyberpunks/ +http://xpenguin.club/The-One-With-All-The-Plugins/ +http://xpenguin.club/The-one-with-the-Astromech/ +http://xpenguin.club/The-one-where-the-USB-misbehaved/ +http://xpenguin.club/The-magical-one/ +http://xpenguin.club/The-one-without-Sim-City-2000/ +http://xpenguin.club/The-one-where-Hex-changed-everything/ +http://xpenguin.club/The-best-toast-is-Archtoast/ +http://xpenguin.club/Steam-Play-Special-Romans-go-home/ +http://xpenguin.club/Samsimilated/ +http://xpenguin.club/Eggroll-and-Wine/ +http://xpenguin.club/Best-Friends-Foreverspace/ +http://xpenguin.club/EGX-and-Toast/ +http://xpenguin.club/Nusueys-voice/ +http://xpenguin.club/Neir-a-Yooka-laylee/ +http://xpenguin.club/The-one-with-Chris-Were/ +http://xpenguin.club/Lost-Cheese/ +http://xpenguin.club/how-long-is-my-x/ +http://xpenguin.club/Games-are-good-like/ +http://xpenguin.club/XLate/ +http://xpenguin.club/Cyberpunk-Vim-surrealism/ +http://xpenguin.club/DreamToast/ +http://xpenguin.club/The-ARTIFACT/ +http://xpenguin.club/I-Emby-that-Unreal-Hat/ +http://xpenguin.club/All-the-Stores,-none-of-the-games/ +http://xpenguin.club/Come-at-me-2019/ +http://xpenguin.club/No-News-is-No-News/ +http://xpenguin.club/I-played-none-of-the-games/ +http://xpenguin.club/2-Guys-1-Proton-(With-NuSuey)/ +http://xpenguin.club/DirectXYZ/ +http://xpenguin.club/CandlePenguin-(With-NuSuey)/ +http://xpenguin.club/Tool-Tips-and-Toasty/ +http://xpenguin.club/XPenguin-Don't-be-Drew/ +http://xpenguin.club/Stress-free,-Content-free,-skill-free-&-Ad-free/ +http://xpenguin.club/I-am-not-a-CARROT!-(With-NuSuey)/ +http://xpenguin.club/Security-by-Hipsterity/ +http://xpenguin.club/A-bundles-of-x's-(Linux-Gaming-talk-with-ArchToasty)/ +http://xpenguin.club/We-don't-talk-about-epic/ +http://xpenguin.club/DOT-EX-GOPHER-(Linux-talk)/ +http://xpenguin.club/No-Risk-of-Borderlands-3-(Linux-Talk)/ +http://xpenguin.club/No-Lag-all-Toast!/ +http://xpenguin.club/Post-Powercut-Penguin!/ +http://xpenguin.club/Red-shirt-of-destiny!/ +http://xpenguin.club/The-Great-Q-and-A-(Volume-1)/ +http://xpenguin.club/Blue-Pigs-and-Toasty-Guests/ +http://xpenguin.club/Episode-241543903-(Contains-strong-language)/ +http://xpenguin.club/XPenguin-with-Cheese-and-Bees!-(Linux-Talk)/ +http://xpenguin.club/Stop-the-Ming-my-(With-ArchToasty)/ +http://xpenguin.club/Stadia-Cantos-(Linux)/ +http://xpenguin.club/XPengiun-16-ish-in-1984/ +http://xpenguin.club/Curses-and-Toast/ +http://xpenguin.club/Games,-shilling,-linux/ +http://xpenguin.club/Hamish-is-here/ +http://xpenguin.club/Xwere-and-some-rambling/ +http://xpenguin.club/Naked-Dog-Baths-(Linux)/ +http://xpenguin.club/Kylinux-Visits/ +http://xpenguin.club/Scratchin-Bandit-(Linux-talk)/ +http://xpenguin.club/Colin-Baker-stopped-me-doing-Show-Notes/ +http://xpenguin.club/Hamish-The-Object-Oriented-Polar-Bear/ +http://xpenguin.club/No-Toast,-No-Time!/ +http://xpenguin.club/HamHamHam-Haaaaaamish/ +http://xpenguin.club/Sticky-(open)-Sauce/ +http://xpenguin.club/NintenDrew-strikes!/ +http://xpenguin.club/HexWolves-(With-Chris-Were)/ +http://xpenguin.club/Xpengiuin-Where-in-the-world-is-Toasty-Sandiego/ +http://xpenguin.club/KyLinux-installs-Ach-Linux-Talk/ +http://xpenguin.club/A-Solo-Ramble,-with-added-ramble/ +http://xpenguin.club/Vulkanised-Rubber/ +http://xpenguin.club/DRM-Disney-Ruins-Media/ +http://xpenguin.club/Hex-and-Chris-27S-Linux-Banter/ +http://xpenguin.club/Kylinux-is-wrong-(Linux)/ +http://distill.pub/2016/augmented-rnns +http://distill.pub/2016/misread-tsne +http://distill.pub/2016/deconv-checkerboard +http://distill.pub/2016/handwriting +https://distill.pub/2017/research-debt +http://distill.pub/2017/momentum +https://distill.pub/2017/feature-visualization +https://distill.pub/2017/ctc +https://distill.pub/2017/aia +https://distill.pub/2018/building-blocks +https://distill.pub/2018/feature-wise-transformations +https://distill.pub/2018/differentiable-parameterizations +https://distill.pub/2018/editorial-update +https://distill.pub/2019/safety-needs-social-scientists +https://distill.pub/2019/activation-atlas +https://distill.pub/2019/memorization-in-rnns +https://distill.pub/2019/visual-exploration-gaussian-processes +https://distill.pub/2019/gan-open-problems +https://distill.pub/2019/advex-bugs-discussion +https://distill.pub/2019/advex-bugs-discussion/response-1 +https://distill.pub/2019/advex-bugs-discussion/response-2 +https://distill.pub/2019/advex-bugs-discussion/response-3 +https://distill.pub/2019/advex-bugs-discussion/response-4 +https://distill.pub/2019/advex-bugs-discussion/response-5 +https://distill.pub/2019/advex-bugs-discussion/response-6 +https://distill.pub/2019/advex-bugs-discussion/original-authors +https://distill.pub/2019/paths-perspective-on-value-learning +https://distill.pub/2019/computing-receptive-fields +http://texblog.org/?p=10145 +http://texblog.org/?p=10183 +http://texblog.org/?p=10214 +http://texblog.org/?p=10295 +http://texblog.org/?p=10407 +http://texblog.org/?p=10474 +http://texblog.org/?p=10652 +http://texblog.org/?p=10673 +http://texblog.org/?p=10705 +http://texblog.org/?p=10756 +http://www.fast.ai/2016/10/07/fastai-launch +http://www.fast.ai/2016/10/08/course-background +http://www.fast.ai/2016/10/08/curriculum +http://www.fast.ai/2016/10/08/teaching-philosophy +http://www.fast.ai/2016/10/08/overview +http://www.fast.ai/2016/10/09/diversity-in-ai +http://www.fast.ai/2016/10/11/fortune +http://www.fast.ai/2016/10/12/international +http://www.fast.ai/2016/11/17/not-all-the-same +http://www.fast.ai/2016/12/08/org-structure +http://www.fast.ai/2016/12/19/favorite-posts +http://www.fast.ai/2016/12/19/gpu-lies +http://www.fast.ai/2016/12/24/mooc +http://www.fast.ai/2016/12/29/uses-of-ai +http://www.fast.ai/2017/01/03/keras +http://www.fast.ai/2017/01/17/curriculum2 +http://www.fast.ai/2017/01/28/diversity-international-part-ii +http://www.fast.ai/2017/02/24/captions-and-notes +http://www.fast.ai/2017/02/27/not-just-silicon-valley +http://www.fast.ai/2017/03/01/changing-careers +http://www.fast.ai/2017/03/17/not-commoditized-no-phd +http://www.fast.ai/2017/03/23/focus-on-coding +http://www.fast.ai/2017/04/06/alternatives +http://www.fast.ai/2017/05/07/parent +http://www.fast.ai/2017/07/17/num-lin-alg +http://www.fast.ai/2017/07/28/deep-learning-part-two-launch +http://www.fast.ai/2017/07/28/killer-robots +http://www.fast.ai/2017/08/15/diversity +http://www.fast.ai/2017/08/16/diversity-crisis +http://www.fast.ai/2017/08/17/diversity-sponsors +http://www.fast.ai/2017/08/21/ai-in-medicine +http://www.fast.ai/2017/08/25/language-modeling-sota +http://www.fast.ai/2017/09/08/international-fellowship +http://www.fast.ai/2017/09/08/introducing-pytorch-for-fastai +http://www.fast.ai/2017/09/13/kosinski +http://www.fast.ai/2017/09/19/accurate-info +http://www.fast.ai/2017/11/02/ethics +http://www.fast.ai/2017/11/13/validation-sets +http://www.fast.ai/2017/11/16/what-you-need +http://www.fast.ai/2017/12/18/personal-brand +http://www.fast.ai/2018/01/02/diversity-2018 +http://www.fast.ai/2018/01/08/startups +http://www.fast.ai/2018/01/09/diversity-sponsors +http://www.fast.ai/2018/01/17/international-spring-2018 +http://www.fast.ai/2018/01/26/v2-launch +http://www.fast.ai/2018/02/27/college-curriculum +http://www.fast.ai/2018/04/10/stanford-salon +http://www.fast.ai/2018/04/19/facebook +http://www.fast.ai/2018/04/29/categorical-embeddings +http://www.fast.ai/2018/04/30/dawnbench-fastai +http://www.fast.ai/2018/05/07/part2-launch +http://www.fast.ai/2018/07/02/adam-weight-decay +http://www.fast.ai/2018/07/12/auto-ml-1 +http://www.fast.ai/2018/07/16/auto-ml2 +http://www.fast.ai/2018/07/23/auto-ml-3 +http://www.fast.ai/2018/08/07/hbr-bias-algorithms +http://www.fast.ai/2018/08/10/fastai-diu-imagenet +http://www.fast.ai/2018/08/16/diversity-fellowships +http://www.fast.ai/2018/08/27/grad-school +http://www.fast.ai/2018/09/24/ai-ethics-resources +http://www.fast.ai/2018/09/26/ml-launch +http://www.fast.ai/2018/10/02/fastai-ai +http://www.fast.ai/2018/10/16/aws-datasets +http://www.fast.ai/2019/01/02/one-year-of-deep-learning +http://www.fast.ai/2019/01/10/swift-numerics +http://www.fast.ai/2019/01/13/swift-random +http://www.fast.ai/2019/01/24/course-v3 +http://www.fast.ai/2019/01/28/diversity-fellowships +http://www.fast.ai/2019/01/29/five-scary-things +http://www.fast.ai/2019/02/15/openai-gp2 +http://www.fast.ai/2019/02/15/fastec2 +http://www.fast.ai/2019/02/15/fastec2-script +http://www.fast.ai/2019/02/21/dl-projects +http://www.fast.ai/2019/03/04/ethics-framework +http://www.fast.ai/2019/03/06/fastai-swift +http://www.fast.ai/2019/04/22/ethics-action-1 +http://www.fast.ai/2019/04/25/ethics-action-2 +http://www.fast.ai/2019/05/03/ethics-action-3 +http://www.fast.ai/2019/05/03/decrappify +http://www.fast.ai/2019/05/13/blogging-advice +http://www.fast.ai/2019/05/28/google-nyt-mohan +http://www.fast.ai/2019/06/17/latex-ppt +http://www.fast.ai/2019/06/28/course-p2v3 +http://www.fast.ai/2019/07/08/fastai-nlp +http://www.fast.ai/2019/08/05/center-applied-data-ethics +http://www.fast.ai/2019/08/06/delegation +http://www.fast.ai/2019/08/07/surveillance +http://www.fast.ai/2019/09/24/metrics +http://www.fast.ai/2019/11/04/CADE-update +yt:video:unqsQJaECv0 +yt:video:7t6iOag6kcE +yt:video:-CiLU9-RAGk +yt:video:MMJVZ48IRkM +yt:video:UWpf4ZSAHBo +yt:video:PSHhmU5hIHA +yt:video:NuS_JLkQbKc +yt:video:BI8m7T5t4sw +yt:video:e3zkGyVEx8I +yt:video:JehxPoS27nU +yt:video:_bVx4E0wlPc +yt:video:_V_-62BVw54 +yt:video:hmB4fd8BRQg +yt:video:FWV3eC3Dr1Y +yt:video:eLEo4OQ-cuQ +https://olgabotvinnik.com/blog/glamorized-exhaustion-is-not-productivity/ +https://olgabotvinnik.com/blog/constancy-and-moderation-wins-the-race/ +https://olgabotvinnik.com/blog/how-to-be-fabulously-successful-eric-lander/ +https://olgabotvinnik.com/blog/ziv-bar-joseph-marathons-and-computational-biology/ +https://olgabotvinnik.com/blog/bam-files-profit/ +https://olgabotvinnik.com/blog/how-to-request-a-letter-of-recommendation/ +https://olgabotvinnik.com/blog/logistic-regression-tutorial/ +https://olgabotvinnik.com/blog/3-boring-ways-to-be-productive/ +https://olgabotvinnik.com/blog/arianna-huffington-on-sleep-she-also-reminds-us/ +https://olgabotvinnik.com/blog/how-to-use-googles-internet-caching-to-your-advantage/ +https://olgabotvinnik.com/blog/how-to-set-helvetica-as-the-default-sans-serif-font-in/ +https://olgabotvinnik.com/blog/startups-life-learning-and-happiness-the-anti-todo/ +https://olgabotvinnik.com/blog/the-essence-of-the-problem/ +https://olgabotvinnik.com/blog/single-cell-genomics-will-change-the-world/ +https://olgabotvinnik.com/blog/implementing-graphic-design-principles-in-pythons/ +https://olgabotvinnik.com/blog/in-india-no-frills-hospitals-offer-800-heart/ +https://olgabotvinnik.com/blog/beautiful-boxplots-and-sassy-small-multiples/ +https://olgabotvinnik.com/blog/how-to-fail-and-sometimes-win-at-graduate-fellowships/ +https://olgabotvinnik.com/blog/the-r-script-that-will-change-your-life/ +https://olgabotvinnik.com/blog/prettyplotlib-painlessly-create-beautiful-matplotlib/ +https://olgabotvinnik.com/blog/science-meet-productivity-turned-1-today-thank/ +https://olgabotvinnik.com/blog/ucsd-scientific-python-user-group/ +https://olgabotvinnik.com/blog/everything-is-a-performance-make-your-fifteen-minutes/ +https://olgabotvinnik.com/blog/succinct-loop-testing-in-python/ +https://olgabotvinnik.com/blog/you-can-code-too/ +https://olgabotvinnik.com/blog/prettyplotlib-update/ +https://olgabotvinnik.com/blog/how-a-developer-learned-not-to-be-racist-and-sexist/ +https://olgabotvinnik.com/blog/most-of-the-time-you-fail/ +https://olgabotvinnik.com/blog/pythonpath-is-a-liar-site-py-and-easy-install-pth-tell/ +https://olgabotvinnik.com/blog/did-you-take-physics-or-chemistry-classes-as-undergrad/ +https://olgabotvinnik.com/blog/implementing-annotation-free-quantification-of-splice/ +https://olgabotvinnik.com/blog/migration-to-github-io/ +https://olgabotvinnik.com/blog/no-longer-actively-developing-prettyplotlib/ +https://olgabotvinnik.com/blog/re-shirtgate/ +https://olgabotvinnik.com/blog/teaching-data-cleaning/ +https://olgabotvinnik.com/blog/how-to-create-a-custom-genome-fasta-from-a-vcf-file/ +https://olgabotvinnik.com/blog/things-said-to-me/ +https://olgabotvinnik.com/blog/codeneuro-nyc-2015/ +https://olgabotvinnik.com/blog/igv-java-lang-nullpointerexception/ +https://olgabotvinnik.com/blog/time-is-citations/ +https://olgabotvinnik.com/blog/migrate-to-hugo/ +https://olgabotvinnik.com/blog/cshl-singlecell-2017/ +https://olgabotvinnik.com/blog/setting-up-aws-access-keys/ +https://olgabotvinnik.com/blog/macbook-setup/ +https://olgabotvinnik.com/blog/googledrive-ubuntu/ +https://olgabotvinnik.com/blog/ucsf-paper-access/ +https://olgabotvinnik.com/blog/job-seq-the-lowest-throughput-sequencing-technology/ +https://fharrell.com/post/new-year-goals/ +https://fharrell.com/post/ml-sample-size/ +https://fharrell.com/post/percent/ +https://fharrell.com/post/ordinal-info/ +https://fharrell.com/post/medml/ +https://fharrell.com/post/improve-research/ +https://fharrell.com/post/ymult/ +https://fharrell.com/post/stat-ml/ +https://fharrell.com/post/stat-ml2/ +https://fharrell.com/post/hteview/ +https://fharrell.com/post/disc/ +https://fharrell.com/post/mlconfusion/ +https://fharrell.com/post/addvalue/ +https://fharrell.com/post/varyor/ +https://fharrell.com/post/demohte/ +https://medium.com/p/c291752e4953 +https://medium.com/p/bb5bc82faaee +https://medium.com/p/2d58ccf12ab1 +https://medium.com/p/b52053dedd32 +https://medium.com/p/ab76dc061833 +https://medium.com/p/354cf140a5a6 +https://medium.com/p/2be3eb3be977 +https://medium.com/p/9e45c1e34b60 +https://medium.com/p/bae679df0f5b +https://medium.com/p/145b395f66c7 +https://medium.com/p/f95683e23c1d +https://medium.com/p/c9e46741041 +https://medium.com/p/6c09de8fd57c +https://medium.com/p/acd716f6450a +https://medium.com/p/da8ed488a8c4 +https://medium.com/p/89053d2855be +https://medium.com/p/1b78af2977df +https://medium.com/p/72d75a9e06c2 +https://medium.com/p/3df7be5cb116 +https://medium.com/p/57060c0d2f19 +https://medium.com/p/ba8a399e9739 +https://medium.com/p/b86bd6ef4b72 +https://medium.com/p/146a67e69f71 +https://medium.com/p/6c974ac49c27 +https://medium.com/p/7546acfa3ceb +https://medium.com/p/396e98e9c136 +https://medium.com/p/c47737de7ed3 +https://medium.com/p/cb8f55af8c30 +https://medium.com/p/3be0f36cdd47 +https://medium.com/p/5c93d0b2c139 +https://medium.com/p/fd02f754b37c +https://medium.com/p/29be608480f +https://medium.com/p/e137416baa05 +https://medium.com/p/450f656b44ca +https://medium.com/p/69a2816c2f12 +http://zachholman.com/posts/three-quotes-from-early-githubbers +http://zachholman.com/posts/women-in-the-room +http://zachholman.com/posts/javacript-haters +http://zachholman.com/posts/integration-tests +http://zachholman.com/posts/the-depression-thing +http://zachholman.com/posts/staying-productive-solo-founder +http://zachholman.com/posts/a-stack-story +http://zachholman.com/posts/apple-accessories-ecosystem-problem +http://zachholman.com/talk/utc-is-enough-for-everyone-right +http://zachholman.com/posts/double-shipping +https://davebucklin.com/play/2016/03/11/mechanical-keyboards.html +https://davebucklin.com/play/2016/04/13/audiophilia.html +https://davebucklin.com/work/2016/06/19/the-purchase-funnel-danger-zone.html +https://davebucklin.com/play/2016/09/25/learning-to-type.html +https://davebucklin.com/play/2016/10/21/using-irssi-with-slack.html +https://davebucklin.com/play/2016/11/02/wordpress-to-jekyll-part-1.html +https://davebucklin.com/play/2016/11/06/wordpress-to-jekyll-part-2.html +https://davebucklin.com/work/2016/11/28/getting-started-part-1.html +https://davebucklin.com/play/2017/03/05/setting-up-twtxt.html +https://davebucklin.com/play/2017/03/24/backing-up-dotfiles-with-stow-and-git.html +https://davebucklin.com/play/2017/05/25/geeknote-evernote-command-line.html +https://davebucklin.com/work/2017/09/11/diagrams-from-text-with-plantuml.html +https://davebucklin.com/work/2017/09/17/information-gathering-management.html +https://davebucklin.com/play/2017/11/02/shoving-off-lightsail.html +https://davebucklin.com/play/2017/11/10/journal-to-timesheet.html +https://davebucklin.com/work/2017/12/17/working-with-recruiters.html +https://davebucklin.com/play/2017/12/31/plain-text.html +https://davebucklin.com/work/2018/01/06/ranger-vim-crm.html +https://davebucklin.com/play/2018/01/20/diy-dropbox.html +https://davebucklin.com/play/2018/03/04/gopher-groff.html +https://davebucklin.com/work/2018/03/12/corporate-it.html +https://davebucklin.com/play/2018/03/31/how-to-gopher.html +https://davebucklin.com/work/2018/04/14/learning-styles.html +https://davebucklin.com/play/2018/04/17/evernote-extraction.html +https://davebucklin.com/play/2018/04/23/vimwiki-inception.html +https://davebucklin.com/play/2018/05/15/mailman-install-commentary.html +https://davebucklin.com/play/2018/06/16/bbook.html +https://davebucklin.com/play/2018/06/29/timeline-of-programming-languages.html +https://davebucklin.com/play/2018/08/24/canon-cat-boxy-but-good.html +https://davebucklin.com/play/2018/08/26/email-application-interface.html +https://davebucklin.com/play/2018/09/03/usenet.html +https://davebucklin.com/work/2018/09/27/casual-programming.html +https://davebucklin.com/play/2018/10/24/maintenance-history-recutils.html +https://davebucklin.com/work/2018/11/30/turning-the-wheel.html +https://davebucklin.com/play/2019/05/18/playlists-cmux-x3.html +https://davebucklin.com/play/2019/06/15/diction.html +https://davebucklin.com/play/2019/06/30/catcam.html +https://davebucklin.com/play/2019/08/10/2048.html +https://davebucklin.com/play/2019/11/01/fastmail.html +https://davebucklin.com/play/2019/11/10/programming-as-craft.html +https://erikbern.com/2012/10/21/luigi-build-complex-pipelines-of-tasks +https://erikbern.com/2012/10/29/a-neat-little-trick-with-time-decay +https://erikbern.com/2012/11/18/tumblrs-awesome-project-names +https://erikbern.com/2012/12/05/calculating-cosine-similarities-using-dimensionality-reduction +https://erikbern.com/2013/01/13/momentum-and-mean-reversion-might-just-be-volatility-bias +https://erikbern.com/2013/01/22/nyc-machine-learning-meetup +https://erikbern.com/2013/01/27/slides-from-nyc-machine-learning-talk +https://erikbern.com/2013/02/06/im-featured-in-mashable +https://erikbern.com/2013/02/27/ml-at-twitter +https://erikbern.com/2013/03/22/more-luigi-pres +https://erikbern.com/2013/04/12/annoy +https://erikbern.com/2013/04/13/being-data-driven +https://erikbern.com/2013/04/26/presentation-about-luigi +https://erikbern.com/2013/04/27/stuff-that-bothers-me-100x-faster-than-hadoop +https://erikbern.com/2013/05/07/snakebite +https://erikbern.com/2013/05/21/fermats-principle +https://erikbern.com/2013/05/31/spotifys-discovery-page +https://erikbern.com/2013/06/02/wikiphilia +https://erikbern.com/2013/06/16/nodoc +https://erikbern.com/2013/06/19/hdfs2cass +https://erikbern.com/2013/06/26/more-luigi +https://erikbern.com/2013/07/24/normalizing-multinomial-distributions +https://erikbern.com/2013/07/27/more-luigi-presentation-from-oscon +https://erikbern.com/2013/07/28/hubspots-creepy-picture-shows-how-to-maintain-monocultures-in-the-21st-century +https://erikbern.com/2013/08/03/mlhadoop-at-nyc-predictive-analytics +https://erikbern.com/2013/08/09/delivering-music-recommendations +https://erikbern.com/2013/08/11/2d-embedding-of-5k-artists-win +https://erikbern.com/2013/08/12/3d +https://erikbern.com/2013/08/17/306 +https://erikbern.com/2013/09/04/vote-for-our-sxsw-panel +https://erikbern.com/2013/09/16/implicit-data-and-collaborative-filtering +https://erikbern.com/2013/10/18/statself-com +https://erikbern.com/2013/11/02/model-benchmarks +https://erikbern.com/2013/12/06/bagging-as-a-regularizer +https://erikbern.com/2013/12/12/microsofts-new-marketing-strategy-give-up +https://erikbern.com/2013/12/20/more-insight-into-recommender-algorithms +https://erikbern.com/2014/01/12/benchmarking-nearest-neighbor-libraries-in-python +https://erikbern.com/2014/01/23/ratio-metrics +https://erikbern.com/2014/03/03/momentum-strategies +https://erikbern.com/2014/03/22/luigi-party +https://erikbern.com/2014/03/22/welcome-echo-nest +https://erikbern.com/2014/04/01/music-recommendations-using-cover-images-part-1 +https://erikbern.com/2014/04/12/mlconf-2014 +https://erikbern.com/2014/04/24/the-power-of-ensembles +https://erikbern.com/2014/06/08/how-to-build-up-a-data-team-everything-i-ever-learned-about-recruiting +https://erikbern.com/2014/06/17/where-do-locals-go-in-nyc +https://erikbern.com/2014/06/28/recurrent-neural-networks-for-collaborative-filtering +https://erikbern.com/2014/07/30/in-defense-of-false-positives-why-you-cant-fail-with-ab-tests +https://erikbern.com/2014/08/19/running-theano-on-ec2 +https://erikbern.com/2014/10/07/detecting-corporate-fraud-using-benfords-law +https://erikbern.com/2014/10/10/the-filter-bubble-is-silly-and-you-cant-guess-what-happened-next +https://erikbern.com/2014/11/11/annoying-blog-post +https://erikbern.com/2014/11/15/luigi-spreading-to-the-west-coast +https://erikbern.com/2014/11/22/optimizing-things-everything-is-a-proxy-for-a-proxy-for-a-proxy +https://erikbern.com/2014/11/29/deep-learning-for-chess +https://erikbern.com/2014/12/08/deep-learning-for-chess-addendum +https://erikbern.com/2014/12/11/deep-learning-for-go +https://erikbern.com/2014/12/16/luigi-talk-tomorrow +https://erikbern.com/2014/12/17/luigi-presentation-nyc-data-science-dec-16-2014 +https://erikbern.com/2014/12/20/a-brief-history-of-hadoop-at-spotify-2008-2009 +https://erikbern.com/2014/12/28/i-already-found-the-best-gifs +https://erikbern.com/2014/12/30/everything-i-learned-about-technical-debt +https://erikbern.com/2015/01/13/scala-data-pipelines-for-music-recommendations +https://erikbern.com/2015/02/11/leaving-spotify +https://erikbern.com/2015/02/22/my-favorite-management-failures +https://erikbern.com/2015/02/26/the-relationship-between-commit-size-and-commit-message-size +https://erikbern.com/2015/03/14/pinterest-open-sources-pinball +https://erikbern.com/2015/04/07/norvigs-claim-that-programming-competitions-correlate-negatively-with-being-good-on-the-job +https://erikbern.com/2015/04/09/its-called-berksons-paradox +https://erikbern.com/2015/04/22/black-box-machine-learning-in-the-cloud +https://erikbern.com/2015/04/26/ping-the-world +https://erikbern.com/2015/05/03/annoy-now-without-boost-dependencies-and-with-python-3-support +https://erikbern.com/2015/05/26/40-better-precision-and-4x-faster-index-building-in-annoy +https://erikbern.com/2015/05/28/the-lane-next-to-you-is-more-likely-to-be-slower-than-yours +https://erikbern.com/2015/06/05/the-hardest-challenge-about-becoming-a-manager +https://erikbern.com/2015/06/21/3d-in-d3 +https://erikbern.com/2015/07/02/more-luigi-alternatives +https://erikbern.com/2015/07/04/benchmark-of-approximate-nearest-neighbor-libraries +https://erikbern.com/2015/07/24/math-problem +https://erikbern.com/2015/08/16/software-engineers-and-automation +https://erikbern.com/2015/09/08/antipodes +https://erikbern.com/2015/09/22/presentations-about-spotify-music-recommendations +https://erikbern.com/2015/09/24/nearest-neighbor-methods-vector-models-part-1 +https://erikbern.com/2015/10/01/nearest-neighbors-and-vector-models-part-2-how-to-search-in-high-dimensional-spaces +https://erikbern.com/2015/10/20/nearest-neighbors-and-vector-models-epilogue-curse-of-dimensionality +https://erikbern.com/2015/10/28/interview-with-a-data-scientist-erik-bernhardsson +https://erikbern.com/2015/10/31/mcmc-for-marketing-data +https://erikbern.com/2015/11/04/looking-for-smart-people +https://erikbern.com/2015/11/12/installing-tensorflow-on-aws +https://erikbern.com/2015/11/28/there-is-no-magic-trick +https://erikbern.com/2015/12/05/more-mcmc-analyzing-a-small-dataset-with-1-5-ratings +https://erikbern.com/2016/01/01/books-i-read-in-2015 +https://erikbern.com/2016/01/08/i-believe-in-the-10x-engineer-but +https://erikbern.com/2016/01/21/analyzing-50k-fonts-using-deep-neural-networks +https://erikbern.com/2016/01/25/some-more-font-links +https://erikbern.com/2016/02/03/my-issue-with-gpu-accelerated-deep-learning +https://erikbern.com/2016/03/02/iterate-or-die +https://erikbern.com/2016/03/12/meta-blogging +https://erikbern.com/2016/03/16/exploding-offers-are-bullshit +https://erikbern.com/2016/04/04/nyc-subway-math +https://erikbern.com/2016/04/18/why-organizations-fail +https://erikbern.com/2016/04/26/dollar-cost-averaging +https://erikbern.com/2016/05/24/what-is-your-motivation +https://erikbern.com/2016/06/02/approximate-nearest-news +https://erikbern.com/2016/07/09/waiting-time-math +https://erikbern.com/2016/08/05/when-machine-learning-matters +https://erikbern.com/2016/09/08/state-drift +https://erikbern.com/2016/10/25/pareto-efficiency +https://erikbern.com/2016/11/01/are-data-sets-the-new-server-rooms +https://erikbern.com/2016/12/05/the-half-life-of-code +https://erikbern.com/2017/01/10/functional-programming-is-the-libertarianism-of-sw-eng +https://erikbern.com/2017/02/01/language-pitch +https://erikbern.com/2017/02/17/why-i-went-into-the-mortgage-industry +https://erikbern.com/2017/03/15/the-eigenvector-of-why-we-moved-from-language-x-to-language-y +https://erikbern.com/2017/04/09/the-mathematical-principles-of-management +https://erikbern.com/2017/05/23/conversion-rates-you-are-most-likely-computing-them-wrong +https://erikbern.com/2017/06/09/blogroll +https://erikbern.com/2017/07/06/optimizing-for-iteration-speed +https://erikbern.com/2017/07/12/the-most-twisted-coastline +https://erikbern.com/2017/08/14/google-diversity-memo-global-warming-pascals-wager +https://erikbern.com/2017/08/19/machine-platform-crowd +https://erikbern.com/2017/08/29/the-software-engineering-rule-of-3 +https://erikbern.com/2017/09/06/the-number-of-letters-in-the-word-for-each-number +https://erikbern.com/2017/09/26/on-the-equifax-breach-and-how-to-really-secure-prevent-theft +https://erikbern.com/2017/10/30/why-conversion-matters-a-toy-model +https://erikbern.com/2017/11/26/annoy-1.10-released-with-hamming-distance-and-windows-support +https://erikbern.com/2017/12/12/learning-from-users-faster-using-machine-learning +https://erikbern.com/2017/12/29/toxic-meeting-culture +https://erikbern.com/2018/01/03/plotting-author-statistics-for-git-repos-using-git-of-theseus +https://erikbern.com/2018/01/17/books-i-consumed-in-2017 +https://erikbern.com/2018/01/28/im-looking-for-data-engineers +https://erikbern.com/2018/02/15/new-benchmarks-for-approximate-nearest-neighbors +https://erikbern.com/2018/03/07/lessons-from-content-marketing-myself-aka-blogging-for-five-years +https://erikbern.com/2018/03/27/waiting-time-load-factor-and-queueing-theory +https://erikbern.com/2018/05/02/interviewing-is-a-noisy-prediction-problem +https://erikbern.com/2018/06/04/missing-the-point-about-microservices +https://erikbern.com/2018/06/17/new-approximate-nearest-neighbor-benchmarks +https://erikbern.com/2018/08/16/business-secrets-from-terrible-people +https://erikbern.com/2018/08/30/i-dont-want-to-learn-your-garbage-query-language +https://erikbern.com/2018/10/08/the-hackers-guide-to-uncertainty-estimates +https://erikbern.com/2019/01/10/data-architecture-vs-backend-architecture +https://erikbern.com/2019/02/21/headcount-targets-feature-factories-and-when-to-hire-those-mythical-10x-people +https://erikbern.com/2019/04/15/why-software-projects-take-longer-than-you-think-a-statistical-model +https://erikbern.com/2019/08/05/modeling-conversion-rates-using-weibull-and-gamma-distributions +https://erikbern.com/2019/09/12/misc-unsolicited-career-advice +https://erikbern.com/2019/10/16/buffet-lines-are-terrible +https://treyhunner.com/2018/02/python-3-s-range-better-than-python-2-s-xrange +https://treyhunner.com/2018/02/python-range-is-not-an-iterator +https://treyhunner.com/2018/03/tuple-unpacking-improves-python-code-readability +https://treyhunner.com/2018/04/keyword-arguments-in-python +https://treyhunner.com/2018/04/how-to-make-the-most-of-your-first-pycon +https://treyhunner.com/2018/06/how-to-make-an-iterator-in-python +https://treyhunner.com/2018/09/stop-writing-lambda-expressions +https://treyhunner.com/2018/10/asterisks-in-python-what-they-are-and-how-to-use-them +https://treyhunner.com/2018/11/python-morsels-sale-52-weeks-of-python +https://treyhunner.com/2018/11/python-cyber-monday-sales +https://treyhunner.com/2018/12/why-you-should-be-using-pathlib +https://treyhunner.com/2019/01/no-really-pathlib-is-great +https://treyhunner.com/2019/03/python-deep-comparisons-and-code-readability +https://treyhunner.com/2019/03/unique-and-sentinel-values-in-python +https://treyhunner.com/2019/03/abusing-and-overusing-list-comprehensions-in-python +https://treyhunner.com/2019/04/making-the-most-of-the-pycon-sprints +https://treyhunner.com/2019/04/why-you-shouldnt-inherit-from-list-and-dict-in-python +https://treyhunner.com/2019/04/is-it-a-class-or-a-function-its-a-callable +https://treyhunner.com/2019/05/python-builtins-worth-learning +https://treyhunner.com/2019/06/loop-better-a-deeper-look-at-iteration-in-python +https://aiweirdness.com/post/185883998702 +https://aiweirdness.com/post/186072231337 +https://aiweirdness.com/post/186235675877 +https://aiweirdness.com/post/186353419952 +https://aiweirdness.com/post/186539822077 +https://aiweirdness.com/post/186656280482 +https://aiweirdness.com/post/186862853387 +https://aiweirdness.com/post/187027270732 +https://aiweirdness.com/post/187189517887 +https://aiweirdness.com/post/187374759802 +https://aiweirdness.com/post/187489831262 +https://aiweirdness.com/post/187645450357 +https://aiweirdness.com/post/187819926757 +https://aiweirdness.com/post/187962817292 +https://aiweirdness.com/post/188214106227 +https://aiweirdness.com/post/188342947482 +https://aiweirdness.com/post/188429765367 +https://aiweirdness.com/post/188520435937 +https://aiweirdness.com/post/188723144977 +https://aiweirdness.com/post/188835401897 +http://inconsolation.wordpress.com/?p=9682 +http://inconsolation.wordpress.com/?p=9685 +http://inconsolation.wordpress.com/?p=9690 +http://inconsolation.wordpress.com/?p=9693 +http://inconsolation.wordpress.com/?p=9698 +http://inconsolation.wordpress.com/?p=9704 +http://inconsolation.wordpress.com/?p=9711 +http://inconsolation.wordpress.com/?p=9717 +http://inconsolation.wordpress.com/?p=9725 +http://inconsolation.wordpress.com/?p=9733 +http://lukeoakdenrayner.wordpress.com/?p=8238 +http://lukeoakdenrayner.wordpress.com/?p=7897 +http://lukeoakdenrayner.wordpress.com/?p=8379 +http://lukeoakdenrayner.wordpress.com/?p=8479 +http://lukeoakdenrayner.wordpress.com/?p=8535 +http://lukeoakdenrayner.wordpress.com/?p=8369 +http://lukeoakdenrayner.wordpress.com/?p=8633 +http://lukeoakdenrayner.wordpress.com/?p=8683 +http://lukeoakdenrayner.wordpress.com/?p=8782 +http://lukeoakdenrayner.wordpress.com/?p=8931 +http://www.calnewport.com/?p=7280 +http://www.calnewport.com/?p=7304 +http://www.calnewport.com/?p=7319 +https://www.calnewport.com/?p=7345 +https://www.calnewport.com/?p=7360 +https://www.calnewport.com/?p=7363 +https://www.calnewport.com/?p=7378 +https://www.calnewport.com/?p=7395 +https://www.calnewport.com/?p=7402 +https://machinelearningmastery.com/?p=8897 +https://machinelearningmastery.com/?p=8902 +https://machinelearningmastery.com/?p=9129 +https://machinelearningmastery.com/?p=8999 +https://machinelearningmastery.com/?p=9010 +PubMed:31618209 +PubMed:31672532 +PubMed:31677334 +PubMed:31685587 +PubMed:31706792 +PubMed:27139377 +PubMed:29298978 +PubMed:30869146 +PubMed:31001455 +https://sanctum.geek.nz/arabesque/?p=1312 +https://sanctum.geek.nz/arabesque/?p=1393 +https://sanctum.geek.nz/arabesque/?p=1453 +https://sanctum.geek.nz/arabesque/?p=1466 +https://sanctum.geek.nz/arabesque/?p=1500 +https://sanctum.geek.nz/arabesque/?p=1695 +https://sanctum.geek.nz/arabesque/?p=1782 +https://sanctum.geek.nz/arabesque/?p=1794 +https://sanctum.geek.nz/arabesque/?p=2108 +https://sanctum.geek.nz/arabesque/?p=2113 +5000subs +first +gopro5000 +corelibre +wallpapers +donei3 +battle1 +i3wmchad +calcurse +vidme +masteringwebsite +managewebsite +muhrss +2yearwointernet +mpdncmpcpp +websitebackend +imminentplans +newlarbssoon +norel1 +outoftownlarbs +podcast +housecleaning +10000subs +lukegoldenage +blockadsporn +libraryhtml +purismlaptops +limitationscause +eoma68on +pandocpres +decentralized +bitchutepattodo +battle2 +thinkpadweek +shortcut2 +whichthinkpad +t420 +sc-im1 +netneut +vimspell +linguisticsvids +urxvt +returningarizona +chadrmarkdown +rmarkdownintro +st +hardreset +urlview +rintro +rfunctions +rdataframes +programsiuse +https +larbssoon +forumrss +torx +i3dropdown +i3webcams +man +forumvid +muttwiznot +muttwizprep +muttwiz +autistic +sucklesssent +destx220 +tripcode +arch2para +funandgames +rssfeedclean +muttwizsync +archisameme +sentvideos +deusexinstall +larbscoming +paninisimin +meetnoam +liberapay +oralssoon +tripcodex220video +aprilfools2018 +dmenu1 +newsboat +arch2 +vimsublimeslave +i3blocks +vpsmove +transfernamecheap +timewaste +linuxfestintro +vimmouse +https://lukesmith.xyz/2018.html#new-turbo-minimalist-site +https://lukesmith.xyz/2018.html#on-my-new-blog-system +https://lukesmith.xyz/2018.html#new-forum-up-and-under-preparation +https://lukesmith.xyz/2018.html#excuse-the-rss-mess +https://lukesmith.xyz/2018.html#check-github-for-the-blog-system +https://lukesmith.xyz/2018.html#more-tinkering-today +https://lukesmith.xyz/2018.html#guests-now-allowed-on-forum-perks-for-supporters. +https://lukesmith.xyz/2018.html#video-on-the-blog-system +https://lukesmith.xyz/2018.html#how-i-write-accent-marks-and-ipa-characters-in-vim +https://lukesmith.xyz/2018.html#forum-now-has-http--ssl-lunduke-btfo-once-again +https://lukesmith.xyz/2018.html#stream-soon +https://lukesmith.xyz/2018.html#series-on-old-norse-and-language-learning +https://lukesmith.xyz/2018.html#whomst-lives-in-georgia +https://lukesmith.xyz/2018.html#exile-in-suburbia +https://lukesmith.xyz/2018.html#lol-linuxfest +https://lukesmith.xyz/2018.html#the-secrets-in-hamlets-mill +https://lukesmith.xyz/2018.html#syncthing-video-also-patreon-changes +https://lukesmith.xyz/2018.html#linuxfest-2018-review +https://lukesmith.xyz/2018.html#linux-is-the-wild-west-talk-is-now-out +https://lukesmith.xyz/2018.html#consciousness-bicamerality-and-book-reviews +https://lukesmith.xyz/2018.html#video-on-gimp-basics +https://lukesmith.xyz/2018.html#updates-about-money-and-patreon +https://lukesmith.xyz/2018.html#first-imagemagick-videos +https://lukesmith.xyz/2018.html#a-journey-to-athens +https://lukesmith.xyz/2018.html#redesign-of-website +https://lukesmith.xyz/2018.html#monetized-with-super-chats +https://lukesmith.xyz/2018.html#i3blocks-reloaded +https://lukesmith.xyz/2018.html#video-on-copying-and-pasting-from-vim +https://lukesmith.xyz/2018.html#in-defense-of-pseudoscience +https://lukesmith.xyz/2018.html#new-st-patches-xresources-and-pywal-compatibility +https://lukesmith.xyz/2018.html#macs-pcs-and-the-power-of-public-relations +https://lukesmith.xyz/2018.html#download-any-academic-article-free-a-one-liner +https://lukesmith.xyz/2018.html#how-let-your-root-user-use-your-main-dotfiles +https://lukesmith.xyz/2018.html#scripting-in-action +https://lukesmith.xyz/2018.html#larbs-is-about-done +https://lukesmith.xyz/2018.html#video-on-cronjobs-for-managing-my-system +https://lukesmith.xyz/2018.html#minor-hack-pausing-all-mpv-videos-on-any-screen +https://lukesmith.xyz/2018.html#dont-be-a-bash-brainlet +https://lukesmith.xyz/2018.html#now-this-is-bash-autism +https://lukesmith.xyz/2018.html#podcast-series-to-begin-shortly +https://lukesmith.xyz/2018.html#minor-blog-addition +https://lukesmith.xyz/2018.html#ive-deleted-my-twitter +https://lukesmith.xyz/2018.html#intro-podcast-episode-up-and-rss-feed-available. +https://lukesmith.xyz/2018.html#mfw-soydevs-would-use-php-for-this +https://lukesmith.xyz/2018.html#full-msmtprc-support-added-to-mutt-wizard +https://lukesmith.xyz/2018.html#the-real-bronze-age-mindset +https://lukesmith.xyz/2018.html#cell-phones-and-the-bronze-age-collapse-1177-bc +https://lukesmith.xyz/2018.html#capitalism-socialism-and-democracy-up +https://lukesmith.xyz/2018.html#my-diet-following-the-memes +https://lukesmith.xyz/2018.html#you-can-now-donate-bitcoin +https://lukesmith.xyz/2018.html#notrelatedxyz-website-is-now-up +https://lukesmith.xyz/2018.html#alex-jones-increasingly-based-now-even-more-banned-from-everything +https://lukesmith.xyz/2018.html#we-need-to-start-studying-npcs-scientifically +https://lukesmith.xyz/2018.html#terry-davis-has-died +https://lukesmith.xyz/2018.html#thicc-podcast-episode-coming +https://lukesmith.xyz/2018.html#le-purityspiral-nationalism +https://lukesmith.xyz/2018.html#ssl-cert-failures-with-gmail-accounts-muttwizard +https://lukesmith.xyz/2018.html#yes-im-doing-a-video-on-it +https://lukesmith.xyz/2018.html#rip-lincucks-some-comments-on-recent-events +https://lukesmith.xyz/2018.html#democracy-the-rule-of-npcs +https://lukesmith.xyz/2018.html#any-paleoanthropologists-or-geneticists-reading-on-the-toba-population-bottleneck +https://lukesmith.xyz/2018.html#break-week +https://lukesmith.xyz/2018.html#video-up-on-bash-settings-and-aliases +https://lukesmith.xyz/2018.html#not-related-episode-will-be-up-soon +https://lukesmith.xyz/2018.html#episode-on-the-10000-year-explosion-and-pandoras-seed +https://lukesmith.xyz/2018.html#trip-up-country-and-looking-for-land +https://lukesmith.xyz/2018.html#livestream-for-those-who-missed-it +https://lukesmith.xyz/2018.html#looking-for-land-for-uncle-lukes-cabin +https://lukesmith.xyz/2018.html#video-review-and-overview-of-the-slice-battery-for-thinkpads +https://lukesmith.xyz/2018.html#when-i-bring-back-the-forum-what-should-its-name-be +https://lukesmith.xyz/2018.html#grofftroff-when-latex-and-pandoc-are-bloat +https://lukesmith.xyz/2018.html#macros-in-groff-and-troff-and-other-basic-formatting +https://lukesmith.xyz/2018.html#easy-emoji-use-with-dmenu +https://lukesmith.xyz/2018.html#new-addresses-for-crypto-ethereum-litecoin-and-dash +https://lukesmith.xyz/2018.html#latex-owned-epic-style-by-logical-unix-compliance-of-groff-and-refer +https://lukesmith.xyz/2018.html#accented-and-other-unicode-characters-in-grofftroff +https://lukesmith.xyz/2018.html#looking-for-larbs-user-submissions- +https://lukesmith.xyz/2018.html#okay--now-this-is-epic---groff-correction- +https://lukesmith.xyz/2018.html#bibliographies-and-references-automatically-with-refer-in-groff +https://lukesmith.xyz/2018.html#possible-email-downage-today +https://lukesmith.xyz/2018.html#some-potentially-relevant-changes-in-larbs-today +https://lukesmith.xyz/2018.html#big-reshuffling-of-scripts-in-larbs-dotfiles +https://lukesmith.xyz/2018.html#-live-streams-coming-back- +https://lukesmith.xyz/2018.html#quick-tutorial-on-generating-qr-codes +https://lukesmith.xyz/2018.html#not-quite-livestream-in-preparation +https://lukesmith.xyz/2018.html#mutt-wizard-protonmail-bridge-compatibility +https://lukesmith.xyz/2018.html#not-related---when-you-re-too-rational-to-be-rational- +https://lukesmith.xyz/2018.html#video-on-eqn--formatting-math-and-statistics-in-groff-and-troff +https://lukesmith.xyz/2018.html#how-do-you-do-urls-or-hyperlinks-in-a-groff-or-troff-document- +https://lukesmith.xyz/2018.html#not-related--site-under-construction +https://lukesmith.xyz/2018.html#adobe-reader-is-literally-hitler +https://lukesmith.xyz/2018.html#battlestation-repair-video- +https://lukesmith.xyz/2018.html#video-up-on-zathura-for-reading-pdfs--djvus--epubs-and-everything-else +https://lukesmith.xyz/2018.html#podcast-syndicated-on-spotify +https://lukesmith.xyz/2018.html#how-to-find-minimalist-programs +https://lukesmith.xyz/2018.html#please-be-on-the-lookout-for-this-phenomenon-among-pretentious-zoomers +https://lukesmith.xyz/2018.html#i-dab-on-all-you-nerds +https://lukesmith.xyz/2018.html#note-to-newfriends--don-t-share-my-content-on-4chan- +https://lukesmith.xyz/2018.html#gdp-and-income-is-a-measure-of-fragility +https://lukesmith.xyz/2018.html#github-dotfiles-and-new-i3-video-soon +https://lukesmith.xyz/2018.html#looking-for-a-new-colorscheme-for-my-terminal--recommendations- +https://lukesmith.xyz/2018.html#lazy-sunday-video-on-cpu--temperature-and-memory-for-general-use +https://lukesmith.xyz/2018.html#video-on-my-vimrc-and-vim-plug-ins-i-use +https://lukesmith.xyz/2018.html#new-video-on-i3-configuration-and-tiling-window-managers +https://lukesmith.xyz/2018.html#my-public-blog-script-lb-is-now-much-improved +https://lukesmith.xyz/2018.html#new-st-build-additions-link-handling-and-xresources-and-pywal-compatibility +https://lukesmith.xyz/2018.html#video-up-on-sed-and-regular-expressions +https://lukesmith.xyz/2018.html#download-any-of-my-thumbnails-easily +https://lukesmith.xyz/2018.html#are-you-thirsty-for-some-social-media-upcummies +https://lukesmith.xyz/2018.html#my-rss-feed-is-getting-too-big +https://lukesmith.xyz/2018.html#physiognomy-is-real-a-request +https://lukesmith.xyz/2018.html#grug-like-new-notrelated-episode +https://lukesmith.xyz/2018.html#luke-smith-in-1080p +https://lukesmith.xyz/2018.html#transparencychroma-keys-in-mpv-or-vlc +https://lukesmith.xyz/2018.html#do-you-hate-patreon-and-paypal +https://lukesmith.xyz/2018.html#im-going-to-use-the-nnn-file-browser +https://lukesmith.xyz/2018.html#running-commands-whenever-a-file-is-changed-with-entr +https://lukesmith.xyz/2018.html#boomer-rants-in-woods-series +https://lukesmith.xyz/2018.html#what-is-the-best-linux-distro +https://lukesmith.xyz/2018.html#merry-christmas-and-bitchute-update +https://lukesmith.xyz/2018.html#year-reviewend-of-year-livestream-incoming +https://lukesmith.xyz/2018.html#the-new-years-livestream-will-be-on-atlantis-time +https://lukesmith.xyz/2018.html#livestream-now-scheduled-on-youtube-and-video-requests +https://lukesmith.xyz/2018.html#new-year-and-new-plans +https://lukesmith.xyz/2019.html#a-hacking-wishlist +https://lukesmith.xyz/2019.html#i-fell-ior-the-suckless-meme-in-image-viewers-too-sxiv +https://lukesmith.xyz/2019.html#why-i-dont-use-polybar-anymore-and-on-ricing +https://lukesmith.xyz/2019.html#nassim-taleb-on-iq-and-what-is-iq-anyway +https://lukesmith.xyz/2019.html#why-i-dont-do-gnulinux-evangelism +https://lukesmith.xyz/2019.html#adding-transparency-and-removing-whitespace-from-images-automatically-with-imagemagick +https://lukesmith.xyz/2019.html#contemplating-a-brief-series-on-creating-a-website +https://lukesmith.xyz/2019.html#hacking-wishlist-addition-moving-all-before-a-match-to-end-of-file +https://lukesmith.xyz/2019.html#anyone-want-the-domain-name-currentyearnet-looking-to-sell +https://lukesmith.xyz/2019.html#suck-on-this-blackpillers +https://lukesmith.xyz/2019.html#anyone-want-to-redo-the-css-for-my-website +https://lukesmith.xyz/2019.html#luke-steps-on-the-python-snek +https://lukesmith.xyz/2019.html#recent-work +https://lukesmith.xyz/2019.html#livestream-now +https://lukesmith.xyz/2019.html#the-horrors-of-the-linux-terminal +https://lukesmith.xyz/2019.html#anyone-got-ueberzug-image-previews-working-in-vifm +https://lukesmith.xyz/2019.html#a-showcase-video-on-fish-as-a-shell +https://lukesmith.xyz/2019.html#unaboomergeocities-livestream-soon +https://lukesmith.xyz/2019.html#audio-problem-fixed-stream-active-immanently +https://lukesmith.xyz/2019.html#some-entry-tips-to-using-suckless-programs +https://lukesmith.xyz/2019.html#do-you-know-the-via-negativa +https://lukesmith.xyz/2019.html#how-to-get-a-domain-name-for-cheap-or-free +https://lukesmith.xyz/2019.html#preinnawoods-livestream-now +https://lukesmith.xyz/2019.html#one-week-in-nowhere +https://lukesmith.xyz/2019.html#some-riverfront-surveying +https://lukesmith.xyz/2019.html#you-dont-choose-who-you-are +https://lukesmith.xyz/2019.html#boomer-larps-in-woods +https://lukesmith.xyz/2019.html#why-you-should-learn-latin +https://lukesmith.xyz/2019.html#fuzzy-finder-fzf-a-dmenu-for-the-terminal +https://lukesmith.xyz/2019.html#new-git-repo-greek-septuagintnew-testament-on-the-command-line +https://lukesmith.xyz/2019.html#wow-what-a-bad-day-for-fedorafriends-luke-smith-btfos-logic-mlg-epic-style +https://lukesmith.xyz/2019.html#the-downsides-of-bloated-software-r-markdown-and-latex +https://lukesmith.xyz/2019.html#thinking-about-getting-a-document-camera-any-suggestions +https://lukesmith.xyz/2019.html#pacman-for-package-management-on-arch-all-the-basics-and-more +https://lukesmith.xyz/2019.html#college-tour-livestream-soon +https://lukesmith.xyz/2019.html#college-stream-starting-now +https://lukesmith.xyz/2019.html#boomer-forest-larp-episode-22 +https://lukesmith.xyz/2019.html#new-latin-vulgate-bible-repository +https://lukesmith.xyz/2019.html#a-visit-to-the-georgia-guidestones +https://lukesmith.xyz/2019.html#plumbing-in-linux-plan-9-from-bell-labs-style +https://lukesmith.xyz/2019.html#my-repos-are-now-on-gitlab-and-will-be-updated-there-as-well +https://lukesmith.xyz/2019.html#yanggangus-website-building-livestream-at-400-est +https://lukesmith.xyz/2019.html#larbs-update-to-vifmuberzug-may-require-manual-intervention +https://lukesmith.xyz/2019.html#livestream-starting-in-less-than-30-minutes +https://lukesmith.xyz/2019.html#in-defense-of-pseudoscience-in-video-form +https://lukesmith.xyz/2019.html#the-bible-on-the-command-line-tutorial +https://lukesmith.xyz/2019.html#not-related-live-coming-soon-tomorrow +https://lukesmith.xyz/2019.html#not-related-live-the-problem-with-academic-statistics-in-1-hour-2pm-edt +https://lukesmith.xyz/2019.html#dont-document-software-if-you-want-to-avoid-pain +https://lukesmith.xyz/2019.html#gnuesotericism-stream-in-an-hour +https://lukesmith.xyz/2019.html#clear-your-rss-cache-error-fix +https://lukesmith.xyz/2019.html#minor-dunst-uglinessbreakage-on-update-in-larbs +https://lukesmith.xyz/2019.html#boomer-rants-in-woods-about-koding-these-days +https://lukesmith.xyz/2019.html#using-shuf-and-random-for-randomization-in-the-command-line +https://lukesmith.xyz/2019.html#boomer-vs-doomer-livestream-starting-imminently +https://lukesmith.xyz/2019.html#blocking-links-from-certain-websites-on-an-apache-web-server +https://lukesmith.xyz/2019.html#before-i-get-to-deep-into-this-does-this-exist-already +https://lukesmith.xyz/2019.html#starting-a-mumble-server-and-unaboomer-cabin-series +https://lukesmith.xyz/2019.html#exclusive-boomers-only-content +https://lukesmith.xyz/2019.html#bibliographical-references-for-latex-groff-and-pandoc-without-the-effort +https://lukesmith.xyz/2019.html#tagging-ogg-or-opus-files +https://lukesmith.xyz/2019.html#why-prefer-free-and-open-source-software +https://lukesmith.xyz/2019.html#pretty-funny-clip-of-alex-jones-harrassed-by-boomer-liberal +https://lukesmith.xyz/2019.html#how-to-mount-and-access-android-phones-on-linux-computers +https://lukesmith.xyz/2019.html#video-on-basic-configuration-of-muttneomutt +https://lukesmith.xyz/2019.html#is-the-terminal-just-for-hipsters-also-livestream-soon +https://lukesmith.xyz/2019.html#get-all-your-email-offline-for-archiving-mutt-etc-using-isync +https://lukesmith.xyz/2019.html#the-right-side-of-history-is-a-spook-on-whig-history-and-selfdeception +https://lukesmith.xyz/2019.html#muttwizard-20-release-everything-is-better-and-easier +https://lukesmith.xyz/2019.html#acshually-some-even-better-muttwizard-changes +https://lukesmith.xyz/2019.html#layin-down-pipes-like-a-unix-chad +https://lukesmith.xyz/2019.html#everything-i-want-to-do-is-illegal-also-another-chadpiping-video +https://lukesmith.xyz/2019.html#luke-digest-for-this-week +https://lukesmith.xyz/2019.html#looking-for-a-comprehensive-book-on-gardening-and-planting-best-if-lindy-too +https://lukesmith.xyz/2019.html#send-me-all-your-suckless-surf-hacks +https://lukesmith.xyz/2019.html#who-needs-a-mouse-to-copy-output-the-extensibility-of-st +https://lukesmith.xyz/2019.html#stream-with-kris-occhipinti +https://lukesmith.xyz/2019.html#technology-meme-review-stream +https://lukesmith.xyz/2019.html#lukes-digest-mid-may +https://lukesmith.xyz/2019.html#larbs-is-going-throught-significant-changes +https://lukesmith.xyz/2019.html#possible-mail-downage-today +https://lukesmith.xyz/2019.html#email-is-still-down +https://lukesmith.xyz/2019.html#a-script-that-automatically-sets-up-your-personal-mail-server +https://lukesmith.xyz/2019.html#you-have-1-unread-mail-from-the-unaboomers-cabin +https://lukesmith.xyz/2019.html#new-crypto-currency-addresses +https://lukesmith.xyz/2019.html#the-stallman-stuff-is-cringe +https://lukesmith.xyz/2019.html#video-on-the-zsh-or-z-shell-whatever-the-z-stands-for +https://lukesmith.xyz/2019.html#little-neomutt-fix-for-muttwizard-users +https://machinelearningmastery.com/?p=9043 +http://xpenguin.club/Xpenguin-Morrowind-Special-(With-Chris-Were-and-Drew)/ +https://www.calnewport.com/?p=7389 +https://aiweirdness.com/post/189170306297 +https://jvns.ca/blog/2019/02/17/organizing-this-blog-into-categories/ +https://jvns.ca/blog/2019/03/15/new-zine--bite-size-networking-/ +https://jvns.ca/blog/2019/03/26/what-are-monoidal-categories/ +https://jvns.ca/blog/2019/06/23/a-few-debugging-resources/ +https://jvns.ca/blog/brag-documents/ +https://jvns.ca/blog/2019/08/27/curl-exercises/ +https://jvns.ca/blog/2019/08/30/git-exercises--navigate-a-repository/ +https://jvns.ca/blog/2019/09/01/ways-to-write-zines-without-fancy-tools/ +https://jvns.ca/blog/2019/09/06/how-to-put-an-html-page-on-the-internet/ +https://jvns.ca/blog/2019/09/12/new-zine-on-http/ +https://jvns.ca/blog/2019/09/13/a-year-explaining-computer-things/ +https://jvns.ca/blog/2019/09/30/notes-on-building-sql-exercises/ +https://jvns.ca/blog/2019/10/01/zine-revenue-2019/ +https://jvns.ca/blog/2019/10/03/sql-queries-don-t-start-with-select/ +https://jvns.ca/blog/2019/10/28/sqlite-is-really-easy-to-compile/ +https://jvns.ca/blog/2019/10/28/some-research-on-shipping-print-zines/ +https://jvns.ca/blog/2019/11/18/some-notes-on-vector-drawing-apps/ +https://jvns.ca/blog/2019/11/18/how-containers-work--overlayfs/ +https://emptysqua.re/blog/no-substitute-for-human-allies/ +https://emptysqua.re/blog/most-lifehacks-work-briefly/ +https://emptysqua.re/blog/lincoln-national-cemetery-wreaths/ +https://emptysqua.re/blog/all-posts/dummy/ +https://emptysqua.re/blog/about/ +https://emptysqua.re/blog/first-post/ +https://emptysqua.re/blog/my-photo-show-on-the-lower-east-side/ +https://emptysqua.re/blog/using-jqtouch-js-with-ibutton-js/ +https://emptysqua.re/blog/python-coroutines/ +https://emptysqua.re/blog/my-tools/ +https://emptysqua.re/blog/pieter-hugo-permanent-error/ +https://emptysqua.re/blog/eido-roshi-resigns/ +https://emptysqua.re/blog/against-the-new-google-reader-ui/ +https://emptysqua.re/blog/myoji-sunim-gravely-ill/ +https://emptysqua.re/blog/balance/ +https://emptysqua.re/blog/letter-from-buddhist-and-yoga-teachers-in-support-of-the-occupy-movement/ +https://emptysqua.re/blog/im-the-new-python-evangelist-at-10gen/ +https://emptysqua.re/blog/unittests-code-coverage-in-pycharm/ +https://emptysqua.re/blog/makerbot-in-the-new-york-times/ +https://emptysqua.re/blog/more-on-google-reader/ +https://emptysqua.re/blog/nyc-python-meetup-recap/ +https://emptysqua.re/blog/adding-an-include-tag-to-underscore-js-templates/ +https://emptysqua.re/blog/mongo-profiling-hacks/ +https://emptysqua.re/blog/dharma-combat/ +https://emptysqua.re/blog/consistency-in-mongodb/ +https://emptysqua.re/blog/nginx-spellcasting/ +https://emptysqua.re/blog/3d-printed-math-sculptures/ +https://emptysqua.re/blog/matthew/ +https://emptysqua.re/blog/new-york-c-meetup-recap/ +https://emptysqua.re/blog/scott/ +https://emptysqua.re/blog/transcendental-meditation-for-veterans/ +https://emptysqua.re/blog/spontaneous-shrines/ +https://emptysqua.re/blog/photo-fire-sale-everything-must-go/ +https://emptysqua.re/blog/book-mongodb-in-action/ +https://emptysqua.re/blog/more-photos-of-scott/ +https://emptysqua.re/blog/abraham-lincoln-national-cemetery/ +https://emptysqua.re/blog/august-sander-and-seydou-keita/ +https://emptysqua.re/blog/save-the-monkey-reliably-writing-to-mongodb/ +https://emptysqua.re/blog/the-rise-of-developeronomics/ +https://emptysqua.re/blog/keep-watching-the-skies-slide-show-nytimes-com/ +https://emptysqua.re/blog/tornado-unittesting-eventually-correct/ +https://emptysqua.re/blog/zencation/ +https://emptysqua.re/blog/photos-of-old-animals/ +https://emptysqua.re/blog/how-to-do-an-isolated-install-of-brubeck/ +https://emptysqua.re/blog/this-thursday-a-talk-on-python-mongodb-and-asynchronous-web-frameworks/ +https://emptysqua.re/blog/andrea-bruce-uncovering-the-sadness-of-young-deaths/ +https://emptysqua.re/blog/slides-from-my-talk-on-asynchronous-web-frameworks-python-and-mongodb/ +https://emptysqua.re/blog/philly-mongodb-user-group-python-mongodb-and-asynchronous-web-frameworks/ +https://emptysqua.re/blog/third-normal-form-and-ultimate-truth/ +https://emptysqua.re/blog/zen-portraits/ +https://emptysqua.re/blog/so-youre-coming-to-a-career-fair/ +https://emptysqua.re/blog/career-fairs-part-2-how-can-startups-get-noticed/ +https://emptysqua.re/blog/sybil-myoshin-taylor/ +https://emptysqua.re/blog/generosity/ +https://emptysqua.re/blog/sybils-death-poem/ +https://emptysqua.re/blog/video-slides-and-code-about-async-python-and-mongodb/ +https://emptysqua.re/blog/tornado-unittesting-with-generators/ +https://emptysqua.re/blog/zen-photos-enkyo-roshi/ +https://emptysqua.re/blog/zen-photos-river-lanterns/ +https://emptysqua.re/blog/jukai-photos-jukai/ +https://emptysqua.re/blog/undoing-gevents-monkey-patching/ +https://emptysqua.re/blog/more-zen-portraits/ +https://emptysqua.re/blog/even-more-zen-portraits/ +https://emptysqua.re/blog/im-an-award-winning-photographer/ +https://emptysqua.re/blog/in-response-to-stop-looking-for-a-technical-co-founder/ +https://emptysqua.re/blog/review-of-being-geek-by-michael-lopp/ +https://emptysqua.re/blog/review-of-seamus-heaneys-translation-of-beowulf/ +https://emptysqua.re/blog/review-of-version-control-with-git-by-jon-loeliger/ +https://emptysqua.re/blog/pausing-with-tornado/ +https://emptysqua.re/blog/cetonia-aurata/ +https://emptysqua.re/blog/requests-in-python-and-mongodb/ +https://emptysqua.re/blog/pythons-swap-is-not-atomic/ +https://emptysqua.re/blog/review-of-the-corrections-by-jonathan-franzen/ +https://emptysqua.re/blog/against-resourcewarnings-in-python-3/ +https://emptysqua.re/blog/review-of-the-little-book-of-semaphores-by-allen-b-downey/ +https://emptysqua.re/blog/moving-virtualbox-and-vagrant-to-an-external-drive/ +https://emptysqua.re/blog/patience/ +https://emptysqua.re/blog/were-all-gonna-die/ +https://emptysqua.re/blog/review-of-introductory-graph-theory-by-gary-chartrand/ +https://emptysqua.re/blog/zen-street-retreat-photos/ +https://emptysqua.re/blog/a-natural-environment/ +https://emptysqua.re/blog/pythons-thread-locals-are-weird/ +https://emptysqua.re/blog/mollified-about-resourcewarnings/ +https://emptysqua.re/blog/syntax-highlighting-with-pycharm-pygments-and-keynote/ +https://emptysqua.re/blog/review-of-javascript-the-good-parts-by-douglas-crockford/ +https://emptysqua.re/blog/copying-a-python-functions-signature/ +https://emptysqua.re/blog/how-should-i-learn-tcp/ +https://emptysqua.re/blog/meditate-nyc-2012/ +https://emptysqua.re/blog/introducing-motor-an-asynchronous-mongodb-driver-for-python-and-tornado/ +https://emptysqua.re/blog/motor-internals-how-i-asynchronized-a-synchronous-library/ +https://emptysqua.re/blog/refactoring-tornado-code-with-gen-engine/ +https://emptysqua.re/blog/motor-four-strategies-for-maintainability/ +https://emptysqua.re/blog/zen-camp/ +https://emptysqua.re/blog/back-from-zen-camp/ +https://emptysqua.re/blog/review-of-the-evolution-of-god-by-robert-wright/ +https://emptysqua.re/blog/zen-and-the-body-politic/ +https://emptysqua.re/blog/alcatraz/ +https://emptysqua.re/blog/san-francisco/ +https://emptysqua.re/blog/this-blog-is-mongodb-2-2-powered/ +https://emptysqua.re/blog/review-of-the-snow-leopard-by-peter-matthiessen/ +https://emptysqua.re/blog/the-pacific-crest-trail/ +https://emptysqua.re/blog/motor-progress-report/ +https://emptysqua.re/blog/digital-dharma/ +https://emptysqua.re/blog/this-blog-is-pypy-powered/ +https://emptysqua.re/blog/spring-2012-shuso-hossen/ +https://emptysqua.re/blog/adorable/ +https://emptysqua.re/blog/social-organization-of-zen-practice/ +https://emptysqua.re/blog/ordination-ceremony-at-the-village-zendo/ +https://emptysqua.re/blog/review-of-opening-the-hand-of-thought-by-kosho-uchiyama/ +https://emptysqua.re/blog/dhyana/ +https://emptysqua.re/blog/review-of-let-us-now-praise-famous-men-by-james-agee-and-walker-evans/ +https://emptysqua.re/blog/video-of-me-explaining-motor/ +https://emptysqua.re/blog/regarding-warhol/ +https://emptysqua.re/blog/motor-progress-report-gridfs-logo/ +https://emptysqua.re/blog/eating-your-own-hamster-food/ +https://emptysqua.re/blog/optimizing-mongodb-compound-indexes/ +https://emptysqua.re/blog/in-transition/ +https://emptysqua.re/blog/upaya/ +https://emptysqua.re/blog/hurricane/ +https://emptysqua.re/blog/motor-installation-instructions/ +https://emptysqua.re/blog/the-whisperers/ +https://emptysqua.re/blog/gloria-and-rhoda/ +https://emptysqua.re/blog/motor-iterating-over-results/ +https://emptysqua.re/blog/faceless-killers/ +https://emptysqua.re/blog/street-portraits/ +https://emptysqua.re/blog/motor-iterating-over-results-the-grand-conclusion/ +https://emptysqua.re/blog/toro-synchronization-primitives-for-tornado-coroutines/ +https://emptysqua.re/blog/street-portraits-2/ +https://emptysqua.re/blog/the-fifth-patriarch-and-the-three-turnings/ +https://emptysqua.re/blog/pymongos-new-default-safe-writes/ +https://emptysqua.re/blog/soldier-field/ +https://emptysqua.re/blog/breaking-change-in-pymongo/ +https://emptysqua.re/blog/floating-lanterns/ +https://emptysqua.re/blog/shuso-hossen/ +https://emptysqua.re/blog/jukai/ +https://emptysqua.re/blog/the-chuang-tzu/ +https://emptysqua.re/blog/reading-from-mongodb-replica-sets-with-pymongo/ +https://emptysqua.re/blog/yieldpoints-simple-extensions-to-tornado-gen/ +https://emptysqua.re/blog/hungry-ghosts/ +https://emptysqua.re/blog/boxing-in-the-basement/ +https://emptysqua.re/blog/scatter-sites/ +https://emptysqua.re/blog/yes-every-mongodb-driver-supports-every-command/ +https://emptysqua.re/blog/motorconnection-has-been-renamed-motorclient/ +https://emptysqua.re/blog/chodo/ +https://emptysqua.re/blog/amaryllis/ +https://emptysqua.re/blog/python-increment-is-weird/ +https://emptysqua.re/blog/mushrooms/ +https://emptysqua.re/blog/python-increment-is-weird-part-ii/ +https://emptysqua.re/blog/the-middlesteins-by-jami-attenberg/ +https://emptysqua.re/blog/mongodb-full-text-search/ +https://emptysqua.re/blog/the-dude-the-zen-master-and-jon-stewart/ +https://emptysqua.re/blog/headshots/ +https://emptysqua.re/blog/a-village-zendo-scrapbook/ +https://emptysqua.re/blog/amaryllis-ii/ +https://emptysqua.re/blog/chicago-christmas/ +https://emptysqua.re/blog/collapse-by-jared-diamond/ +https://emptysqua.re/blog/ordinary-zen/ +https://emptysqua.re/blog/invitation-to-a-zen-street-retreat/ +https://emptysqua.re/blog/pymongo-2-4-2-is-out/ +https://emptysqua.re/blog/motor-is-growing-up/ +https://emptysqua.re/blog/knowing-when-a-python-thread-has-died/ +https://emptysqua.re/blog/author-photos/ +https://emptysqua.re/blog/an-event-synchronization-primitive-for-ruby/ +https://emptysqua.re/blog/what-its-like-to-work-for-10gen/ +https://emptysqua.re/blog/a-curious-concurrency-case/ +https://emptysqua.re/blog/photography-is-burning/ +https://emptysqua.re/blog/miami-photos/ +https://emptysqua.re/blog/motor-officially-released/ +https://emptysqua.re/blog/motor-01-migration/ +https://emptysqua.re/blog/review-of-roman-vishniac-rediscovered/ +https://emptysqua.re/blog/plop-python-profiler-with-call-graphs/ +https://emptysqua.re/blog/pycon-talk-on-toro/ +https://emptysqua.re/blog/building-node-applications-mongodb-backbone/ +https://emptysqua.re/blog/mongodb-applied-design-patterns/ +https://emptysqua.re/blog/shuso-hossen-spring-2013/ +https://emptysqua.re/blog/begging/ +https://emptysqua.re/blog/restructuredtext-in-pycharm-firefox-and-anger/ +https://emptysqua.re/blog/pycon-lightning-talk-about-toro/ +https://emptysqua.re/blog/toro-rewritten-for-tornado-3-0/ +https://emptysqua.re/blog/slides-from-my-talk-on-python-coroutines/ +https://emptysqua.re/blog/dzone-interviews-me/ +https://emptysqua.re/blog/i-will-pick-up-what-others-discard/ +https://emptysqua.re/blog/the-green-matrix/ +https://emptysqua.re/blog/moraffs-world/ +https://emptysqua.re/blog/april-street-portraits/ +https://emptysqua.re/blog/another-thing-about-pythons-threadlocals/ +https://emptysqua.re/blog/heading-out/ +https://emptysqua.re/blog/wasps-nest-read-copy-update-python/ +https://emptysqua.re/blog/street-retreat-recap/ +https://emptysqua.re/blog/tompkins-square-park/ +https://emptysqua.re/blog/people-of-willets-point/ +https://emptysqua.re/blog/ignition/ +https://emptysqua.re/blog/open-source-bridge/ +https://emptysqua.re/blog/sutro-baths/ +https://emptysqua.re/blog/motor-0-1-1-released/ +https://emptysqua.re/blog/recap-open-source-bridge/ +https://emptysqua.re/blog/real-time-profiling-a-mongodb-cluster/ +https://emptysqua.re/blog/synchronously-build-mongodb-indexes/ +https://emptysqua.re/blog/faith-in-harlem/ +https://emptysqua.re/blog/east-village/ +https://emptysqua.re/blog/search/ +https://emptysqua.re/blog/sean-skyler/ +https://emptysqua.re/blog/paging-geo-mongodb/ +https://emptysqua.re/blog/training-ourselves-not-to-be-alone/ +https://emptysqua.re/blog/good-night-sweet-hamster/ +https://emptysqua.re/blog/analyzing-python-c-extensions-with-cpychecker/ +https://emptysqua.re/blog/pymongo-2-6-released/ +https://emptysqua.re/blog/work-at-mongodb/ +https://emptysqua.re/blog/tendo-and-kaku/ +https://emptysqua.re/blog/pymongo-2-6-1-refleak-fix/ +https://emptysqua.re/blog/zen-at-war/ +https://emptysqua.re/blog/blogs-i-emulate/ +https://emptysqua.re/blog/pymongo-2-6-2-released/ +https://emptysqua.re/blog/introducing-charlotte-and-sybil/ +https://emptysqua.re/blog/porting-from-pymongo-to-motor/ +https://emptysqua.re/blog/python-c-extensions-and-mod-wsgi/ +https://emptysqua.re/blog/zen-mountain-center/ +https://emptysqua.re/blog/richard/ +https://emptysqua.re/blog/photos-from-open-source-bridge/ +https://emptysqua.re/blog/pymongo-2-6-3-released/ +https://emptysqua.re/blog/oshin-and-rebecca/ +https://emptysqua.re/blog/night-of-the-living-thread/ +https://emptysqua.re/blog/enkyo-and-tendo/ +https://emptysqua.re/blog/dawn-of-the-thread/ +https://emptysqua.re/blog/day-of-the-thread/ +https://emptysqua.re/blog/mukei/ +https://emptysqua.re/blog/austin/ +https://emptysqua.re/blog/shuso-hossen-summer-2013/ +https://emptysqua.re/blog/read-your-writes-consistency-pymongo/ +https://emptysqua.re/blog/monthly-music-hackathon-nyc/ +https://emptysqua.re/blog/motor-progress-report-the-road-to-0-2/ +https://emptysqua.re/blog/year-end/ +https://emptysqua.re/blog/weird-green-bug/ +https://emptysqua.re/blog/five-things/ +https://emptysqua.re/blog/rue-du-dragon/ +https://emptysqua.re/blog/the-time-capsule/ +https://emptysqua.re/blog/greenletprofiler/ +https://emptysqua.re/blog/escaping-callback-hell/ +https://emptysqua.re/blog/pymongo-2-7-rc0/ +https://emptysqua.re/blog/invitation-street-retreat-may-2014/ +https://emptysqua.re/blog/stealing/ +https://emptysqua.re/blog/begging-2014/ +https://emptysqua.re/blog/code-coverage-python-c-extensions/ +https://emptysqua.re/blog/multiple-asynchronous-events-tornado/ +https://emptysqua.re/blog/mongodb-testing-network-errors/ +https://emptysqua.re/blog/an-enlightening-failure/ +https://emptysqua.re/blog/pymongo-2-7-has-shipped/ +https://emptysqua.re/blog/announcing-motor-0-2-rc0/ +https://emptysqua.re/blog/motor-0-2-released/ +https://emptysqua.re/blog/pycon-2014-video-what-is-async/ +https://emptysqua.re/blog/pycon-apac-in-taipei/ +https://emptysqua.re/blog/speaking/ +https://emptysqua.re/blog/pycon-apac-2014-recap/ +https://emptysqua.re/blog/motor-0-2-1-released/ +https://emptysqua.re/blog/the-aura-of-the-live-demo/ +https://emptysqua.re/blog/motor-0-3-released/ +https://emptysqua.re/blog/refactoring-tornado-coroutines/ +https://emptysqua.re/blog/street-retreat-2014-recap/ +https://emptysqua.re/blog/rules-of-thumb-methods-and-functions/ +https://emptysqua.re/blog/goodbye-mongodb-world-hello-osb/ +https://emptysqua.re/blog/write-an-excellent-programming-blog/ +https://emptysqua.re/blog/resources-for-writing-about-programming/ +https://emptysqua.re/blog/motor-0-3-1-released/ +https://emptysqua.re/blog/toro-0-6-released/ +https://emptysqua.re/blog/motor-0-3-2-released/ +https://emptysqua.re/blog/let-us-now-praise-resourcewarnings/ +https://emptysqua.re/blog/jukai-2014/ +https://emptysqua.re/blog/shuso-hossen-summer-2014/ +https://emptysqua.re/blog/server-discovery-and-monitoring-spec/ +https://emptysqua.re/blog/peoples-climate-march-buddhists/ +https://emptysqua.re/blog/charlotte/ +https://emptysqua.re/blog/mongodb-boston/ +https://emptysqua.re/blog/motor-0-3-3-released/ +https://emptysqua.re/blog/restructured-text-chrome-livereload/ +https://emptysqua.re/blog/a-normal-accident-in-python-and-mod-wsgi/ +https://emptysqua.re/blog/toro-0-7-released/ +https://emptysqua.re/blog/midtown-street-portraits/ +https://emptysqua.re/blog/motor-0-3-4-released/ +https://emptysqua.re/blog/zen-chaplain-ordination/ +https://emptysqua.re/blog/pymongo-2-8-rc0/ +https://emptysqua.re/blog/good-idea-at-the-time-pymongo-start-request/ +https://emptysqua.re/blog/joel-forrester-quintet-with-christina-clare/ +https://emptysqua.re/blog/it-seemed-like-a-good-idea-at-the-time-pymongo-use-greenlets/ +https://emptysqua.re/blog/good-idea-at-the-time-pymongo/ +https://emptysqua.re/blog/if-siddhartha-didnt-leave-home/ +https://emptysqua.re/blog/good-idea-at-the-time-pymongo-copy-database/ +https://emptysqua.re/blog/good-idea-at-the-time-pymongo-mongoreplicasetclient/ +https://emptysqua.re/blog/2014-my-year-in-review/ +https://emptysqua.re/blog/year-end-2014-photos-1/ +https://emptysqua.re/blog/year-end-2014-photos-2/ +https://emptysqua.re/blog/shinryu-year-end-sesshin/ +https://emptysqua.re/blog/howard-year-end-sesshin/ +https://emptysqua.re/blog/seiki-year-end-sesshin/ +https://emptysqua.re/blog/sewing-year-end-sesshin/ +https://emptysqua.re/blog/accordion-impresario-walter-kuhr/ +https://emptysqua.re/blog/eko/ +https://emptysqua.re/blog/no-ambition-at-hanks-saloon/ +https://emptysqua.re/blog/william-zola/ +https://emptysqua.re/blog/pymongo-2-8-and-motor-0-4/ +https://emptysqua.re/blog/nashville/ +https://emptysqua.re/blog/zen-at-sing-sing/ +https://emptysqua.re/blog/weather-of-the-century-links/ +https://emptysqua.re/blog/pydev-of-the-week/ +https://emptysqua.re/blog/mentoring/ +https://emptysqua.re/blog/my-first-zen-talk/ +https://emptysqua.re/blog/mongodb-driver-issues-are-now-public/ +https://emptysqua.re/blog/pymongo-3-beta/ +https://emptysqua.re/blog/letter-from-a-prisoner-at-sing-sing/ +https://emptysqua.re/blog/skunkworks-mongo-conduction/ +https://emptysqua.re/blog/pymongo-use-greenlets-followup/ +https://emptysqua.re/blog/writing-a-thousand-deaths/ +https://emptysqua.re/blog/pymongo-key-order/ +https://emptysqua.re/blog/urban-sesshin-day-1-bowery-mission/ +https://emptysqua.re/blog/urban-sesshin-day-2-nyc-criminal-court/ +https://emptysqua.re/blog/urban-sesshin-day-3-diversity-and-racism/ +https://emptysqua.re/blog/zazenkai/ +https://emptysqua.re/blog/yangshan-plants-his-hoe/ +https://emptysqua.re/blog/response-to-asynchronous-python-and-databases/ +https://emptysqua.re/blog/pypy-garbage-collection-and-a-deadlock/ +https://emptysqua.re/blog/yangshan-plants-his-hoe-audio/ +https://emptysqua.re/blog/talk-python-podcast-python-and-mongodb/ +https://emptysqua.re/blog/announcing-pymongo-3/ +https://emptysqua.re/blog/eventually-correct-async-testing-tornado/ +https://emptysqua.re/blog/eventually-correct-links/ +https://emptysqua.re/blog/screencast-of-eventually-correct-async-testing-with-tornado/ +https://emptysqua.re/blog/pycon-video-eventually-correct-async-testing/ +https://emptysqua.re/blog/caution-critical-bug-in-pymongo-3-could-not-find-cursor-in-cache/ +https://emptysqua.re/blog/vote-for-me-at-open-source-bridge/ +https://emptysqua.re/blog/announcing-pymongo-3-0-1/ +https://emptysqua.re/blog/speaking-at-open-source-bridge-2015/ +https://emptysqua.re/blog/photos-from-my-shuso-hossen/ +https://emptysqua.re/blog/review-of-autotools-a-practitioners-guide/ +https://emptysqua.re/blog/download-stats-by-python-version-pymongo-motor-tornado/ +https://emptysqua.re/blog/announcing-motor-0-4-1/ +https://emptysqua.re/blog/announcing-pymongo-2-8-1/ +https://emptysqua.re/blog/announcing-pymongo-3-0-2/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-1-5/ +https://emptysqua.re/blog/announcing-libmongoc-1-1-6/ +https://emptysqua.re/blog/more-photos-my-shuso-hossen/ +https://emptysqua.re/blog/server-discovery-and-monitoring-in-mongodb-drivers/ +https://emptysqua.re/blog/server-discovery-and-monitoring-in-pymongo-perl-and-c/ +https://emptysqua.re/blog/tornado-locks-and-queues/ +https://emptysqua.re/blog/begging-2015/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-1-7/ +https://emptysqua.re/blog/desires-are-inexhaustible/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-1-8/ +https://emptysqua.re/blog/more-info-about-cat-herds-crook/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-1-9/ +https://emptysqua.re/blog/announcing-pymongo-3-0-3/ +https://emptysqua.re/blog/street-retreat-2015-recap/ +https://emptysqua.re/blog/grace/ +https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-1-10/ +https://emptysqua.re/blog/motor-and-asyncio-update/ +https://emptysqua.re/blog/facing-everything-hiroshima-and-our-complicity/ +https://emptysqua.re/blog/announcing-libmongoc-1-2-beta/ +https://emptysqua.re/blog/pygotham-2015/ +https://emptysqua.re/blog/links-for-how-python-coroutines-work/ +https://emptysqua.re/blog/i-live-coded-an-async-coroutine-framework-in-32-5-minutes/ +https://emptysqua.re/blog/charlotte-at-two/ +https://emptysqua.re/blog/jukai-2015/ +https://emptysqua.re/blog/mongo-shell-crud-api/ +https://emptysqua.re/blog/toro-1-final-release/ +https://emptysqua.re/blog/announcing-libmongoc-1-2-beta1/ +https://emptysqua.re/blog/the-writers-writer/ +https://emptysqua.re/blog/500-lines-web-crawler-asyncio-coroutines/ +https://emptysqua.re/blog/east-river-state-park/ +https://emptysqua.re/blog/review-of-write-great-code/ +https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-1-11/ +https://emptysqua.re/blog/march-to-triumph-as-a-mentor-at-software-as-craft-philadelphia/ +https://emptysqua.re/blog/seven-tips-for-pycon/ +https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-2-0-release-candidate/ +https://emptysqua.re/blog/march-to-triumph-as-a-mentor-video/ +https://emptysqua.re/blog/black-pipe-testing/ +https://emptysqua.re/blog/announcing-pymongo-2-9/ +https://emptysqua.re/blog/how-do-python-coroutines-work-live-coding-video-from-open-source-bridge-2015/ +https://emptysqua.re/blog/black-pipe-testing-pymongo/ +https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-2-0/ +https://emptysqua.re/blog/survey-how-do-you-use-python-with-mongodb/ +https://emptysqua.re/blog/mockupdb-test-libmongoc-mongodb-c-driver-python/ +https://emptysqua.re/blog/steve-jobs-movie-review/ +https://emptysqua.re/blog/mongodb-c-driver-survey/ +https://emptysqua.re/blog/nothing-exists-outside-the-mind/ +https://emptysqua.re/blog/link-mallard-html-with-yelp-build/ +https://emptysqua.re/blog/ikai-2015/ +https://emptysqua.re/blog/libmongoc-black-pipe-testing-mock-server/ +https://emptysqua.re/blog/oshin-2015/ +https://emptysqua.re/blog/porch-2015/ +https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-2-1/ +https://emptysqua.re/blog/tiny-frog/ +https://emptysqua.re/blog/village-zendo-portraits/ +https://emptysqua.re/blog/announcing-pymongo-3-1-python-condition-variable/ +https://emptysqua.re/blog/test-mongodb-failures-mockupdb/ +https://emptysqua.re/blog/this-blog-runs-mongodb-3-2-rc2/ +https://emptysqua.re/blog/village-zendo-portraits-part-2/ +https://emptysqua.re/blog/motor-0-5-beta-asyncio-async-await/ +https://emptysqua.re/blog/tech-talks-are-campfires-jesses-three-reasons-you-should-speak-at-pycon/ +https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-0-beta0/ +https://emptysqua.re/blog/dorothy-and-mae/ +https://emptysqua.re/blog/kinhin/ +https://emptysqua.re/blog/tokuyu-liturgy-master/ +https://emptysqua.re/blog/summer-ango-2015-interiors/ +https://emptysqua.re/blog/motor-0-5-asyncio-async-await-keywords/ +https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-2-2/ +https://emptysqua.re/blog/finn-portraits/ +https://emptysqua.re/blog/black-pipe-testing-in-summary/ +https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-0-rc0/ +https://emptysqua.re/blog/seizan-summer-2015/ +https://emptysqua.re/blog/ryotan-sensei/ +https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-0/ +https://emptysqua.re/blog/announcing-pymongo-3-2/ +https://emptysqua.re/blog/zen-forms-summer-2015/ +https://emptysqua.re/blog/oshin-and-giyu/ +https://emptysqua.re/blog/porch-pictures/ +https://emptysqua.re/blog/getaddrinfo-deadlock/ +https://emptysqua.re/blog/insanity-of-self-improvement/ +https://emptysqua.re/blog/this-site-is-built-with-lektor/ +https://emptysqua.re/blog/experience-migrating-to-lektor/ +https://emptysqua.re/blog/author-photos-2015/ +https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-1/ +https://emptysqua.re/blog/scale14x/ +https://emptysqua.re/blog/oryoki-2015/ +https://emptysqua.re/blog/scale14x-coroutines-talk/ +https://emptysqua.re/blog/milkweed/ +https://emptysqua.re/blog/zen-retreat-kitchen/ +https://emptysqua.re/blog/mac-python-getaddrinfo-queueing/ +https://emptysqua.re/blog/getaddrinfo-on-macosx/ +https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-2/ +https://emptysqua.re/blog/how-to-compose-an-email-without-checking-your-inbox/ +https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-3/ +https://emptysqua.re/blog/how-i-write-a-conference-talk/ +https://emptysqua.re/blog/announcing-winkerberos/ +https://emptysqua.re/blog/how-i-rehearse-a-conference-talk/ +https://emptysqua.re/blog/cat-herds-crook/ +https://emptysqua.re/blog/motor-0-6-released/ +https://emptysqua.re/blog/asyncio-getaddrinfo-short-circuit/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-3-4/ +https://emptysqua.re/blog/grandma-fran/ +https://emptysqua.re/blog/kaku-portrait/ +https://emptysqua.re/blog/traven-fusho-rice-shuso-hossen/ +https://emptysqua.re/blog/announcing-libbson-and-libmongoc-1-3-5/ +https://emptysqua.re/blog/studio-portraits-april-2016/ +https://emptysqua.re/blog/two-articles-for-psf/ +https://emptysqua.re/blog/fierce-tiger/ +https://emptysqua.re/blog/code-podcast/ +https://emptysqua.re/blog/bethlehem-steel/ +https://emptysqua.re/blog/april-portraits-2/ +https://emptysqua.re/blog/new-york-primary-2016/ +https://emptysqua.re/blog/union-square-west/ +https://emptysqua.re/blog/vote-for-me-at-open-source-bridge-2016/ +https://emptysqua.re/blog/c-driver-ubuntu/ +https://emptysqua.re/blog/sing-sing-joy-and-pain-witness/ +https://emptysqua.re/blog/backup-reminders-google-sheets/ +https://emptysqua.re/blog/lumps/ +https://emptysqua.re/blog/the-best-way-to-thank-your-mentor/ +https://emptysqua.re/blog/i-saw-you-fall/ +https://emptysqua.re/blog/how-i-prepare-24-hours-before-a-talk/ +https://emptysqua.re/blog/how-i-deliver-a-conference-talk/ +https://emptysqua.re/blog/the-write-an-excellent-programming-blog-page/ +https://emptysqua.re/blog/write-an-excellent-blog-pycon-2016/ +https://emptysqua.re/blog/my-two-favorite-talks-at-open-source-bridge-2016/ +https://emptysqua.re/blog/see-me-at-open-source-bridge-2016/ +https://emptysqua.re/blog/see-me-at-mongodb-world-2016/ +https://emptysqua.re/blog/smart-strategies-for-resilient-mongodb-applications/ +https://emptysqua.re/blog/gender-of-twitter-users-i-follow/ +https://emptysqua.re/blog/smart-strategies-for-resilient-mongodb-applications-screencast/ +https://emptysqua.re/blog/architecture-open-source-applications-500-lines-published/ +https://emptysqua.re/blog/how-to-write-resilient-mongodb-applications/ +https://emptysqua.re/blog/begging-2016/ +https://emptysqua.re/blog/talk-python-episode-on-writing/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-4-0-beta1/ +https://emptysqua.re/blog/we-need-more-headlines-like-no-evidence-for-flossing/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-4-0/ +https://emptysqua.re/blog/village-zendo-precepts-ceremony-2016/ +https://emptysqua.re/blog/stephen/ +https://emptysqua.re/blog/yankee-stadium/ +https://emptysqua.re/blog/water-tower/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-4-1/ +https://emptysqua.re/blog/9-11-and-non-killing/ +https://emptysqua.re/blog/street-retreat-2016-recap/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-4-2/ +https://emptysqua.re/blog/motor-0-7-beta/ +https://emptysqua.re/blog/computer-science-for-all/ +https://emptysqua.re/blog/winter-ango-2013/ +https://emptysqua.re/blog/mongodb-europe-2016-london/ +https://emptysqua.re/blog/yujin-shuso-hossen/ +https://emptysqua.re/blog/new-rochelle-landscapes/ +https://emptysqua.re/blog/motor-0-7/ +https://emptysqua.re/blog/doji-tokudo/ +https://emptysqua.re/blog/new-rochelle-surfaces/ +https://emptysqua.re/blog/motor-1-0/ +https://emptysqua.re/blog/mongodb-engineering-journal-getaddrinfo-article/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-5-0/ +https://emptysqua.re/blog/motor-1-1/ +https://emptysqua.re/blog/getaddrinfo-cpython-mac-and-bsd/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-5-1/ +https://emptysqua.re/blog/dramatic-performances-about-getaddrinfo/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-5-3/ +https://emptysqua.re/blog/joshin-sensei-year-end/ +https://emptysqua.re/blog/video-walkthrough-web-crawler-with-coroutines/ +https://emptysqua.re/blog/village-zendo-at-nyc-womens-march/ +https://emptysqua.re/blog/village-zendo-winter-retreat-2016/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-5-4/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-6-0/ +https://emptysqua.re/blog/motor-monitoring/ +https://emptysqua.re/blog/dealing-with-fear-confusion-lions-roar/ +https://emptysqua.re/blog/mae/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-6-1-and-1-5-5/ +https://emptysqua.re/blog/analyze-noise-complaints-r-mongodb-mongolite/ +https://emptysqua.re/blog/kansho-shuso-hossen/ +https://emptysqua.re/blog/who-broke-the-challenger-investigation/ +https://emptysqua.re/blog/chipy-and-chicago-pyladies-2017/ +https://emptysqua.re/blog/grok-the-gil-fast-thread-safe-python/ +https://emptysqua.re/blog/rest-in-peace-mae/ +https://emptysqua.re/blog/join-me-nyc-python-pycon-warmups-2017/ +https://emptysqua.re/blog/praxis-john/ +https://emptysqua.re/blog/under-the-bodhi-tree/ +https://emptysqua.re/blog/lets-grok-the-gil-at-pycon/ +https://emptysqua.re/blog/pycon-video-grok-the-gil/ +https://emptysqua.re/blog/ordinary-zen-in-edge-of-humanity/ +https://emptysqua.re/blog/memorial-day/ +https://emptysqua.re/blog/invitation-street-retreat-july-2017/ +https://emptysqua.re/blog/driver-features-for-mongodb-3-6/ +https://emptysqua.re/blog/unix-code-archeology-and-restoration/ +https://emptysqua.re/blog/preparing-for-sickness-old-age-death/ +https://emptysqua.re/blog/begging-2017/ +https://emptysqua.re/blog/your-nerve-plant/ +https://emptysqua.re/blog/pyladies-meetup-pygotham-brainstorming/ +https://emptysqua.re/blog/issan-house/ +https://emptysqua.re/blog/pygotham-call-for-proposals/ +https://emptysqua.re/blog/vote-for-pygotham-talks/ +https://emptysqua.re/blog/living-while-dying-is-tasy/ +https://emptysqua.re/blog/jukai-2017/ +https://emptysqua.re/blog/kaku-and-giyu/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-7-0/ +https://emptysqua.re/blog/jisei-shuso-hossen/ +https://emptysqua.re/blog/tokuyu-oshin-kaku/ +https://emptysqua.re/blog/window/ +https://emptysqua.re/blog/coaching-for-first-time-pygotham-speakers/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-8-0/ +https://emptysqua.re/blog/beginning-a-zen-meditation-practice-2017/ +https://emptysqua.re/blog/using-reflection-podcast/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-8-1/ +https://emptysqua.re/blog/recap-coaching-for-pygotham-speakers-2017/ +https://emptysqua.re/blog/author-andrea-bartz/ +https://emptysqua.re/blog/dharma-talk-why-generosity-turns-to-rage/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-8-2/ +https://emptysqua.re/blog/keynote-why-generosity-turns-to-rage/ +https://emptysqua.re/blog/motor-1-2-release-candidate/ +https://emptysqua.re/blog/join-me-pytennessee-2018/ +https://emptysqua.re/blog/motor-1-2-0/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-9-0/ +https://emptysqua.re/blog/praxis-michael/ +https://emptysqua.re/blog/running-in-circles/ +https://emptysqua.re/blog/global-diversity-cfp-day-workshop/ +https://emptysqua.re/blog/ada-and-grace/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-9-1/ +https://emptysqua.re/blog/libbson-and-libmongoc-1-9-2/ +https://emptysqua.re/blog/winter-retreat-2017/ +https://emptysqua.re/blog/embed-interns-in-teams/ +https://emptysqua.re/blog/public-speaking-workshops-february-2018/ +https://emptysqua.re/blog/the-real-shitstick/ +https://emptysqua.re/blog/cfps/ +https://emptysqua.re/blog/writing-winning-proposals-webinar/ +https://emptysqua.re/blog/further-reading-what-to-expect-when-youre-expiring/ +https://emptysqua.re/blog/yuuka-shuso-hossen/ +https://emptysqua.re/blog/why-did-rinzai-slap-jo/ +https://emptysqua.re/blog/justin-von-bujdoss-color/ +https://emptysqua.re/blog/motor-2-0/ +https://emptysqua.re/blog/coaching-for-pygotham-2018/ +https://emptysqua.re/blog/jukai-2018/ +https://emptysqua.re/blog/zmc-white-flowers/ +https://emptysqua.re/blog/zmc-san-jacinto/ +https://emptysqua.re/blog/meteor-dharma-talk/ +https://emptysqua.re/blog/zmc-coco/ +https://emptysqua.re/blog/zmc-kojin/ +https://emptysqua.re/blog/vote-for-my-confoo-2019-talks/ +https://emptysqua.re/blog/recap-coaching-for-pygotham-speakers-2018/ +https://emptysqua.re/blog/api-evolution-the-right-way/ +https://emptysqua.re/blog/rules-for-hyenas/ +https://emptysqua.re/blog/the-day-yunmen-broke-his-foot/ +https://emptysqua.re/blog/rip-grace/ +https://emptysqua.re/blog/garrison-2018-1/ +https://emptysqua.re/blog/garrison-2018-2/ +https://emptysqua.re/blog/rip-ada/ +https://emptysqua.re/blog/genro-summer-2018/ +https://emptysqua.re/blog/meaningless-striving/ +https://emptysqua.re/blog/adventurous-route-resources/ +https://emptysqua.re/blog/choosing-the-adventurous-route-video/ +https://emptysqua.re/blog/grand-central-2019/ +https://emptysqua.re/blog/red-hook/ +https://emptysqua.re/blog/api-evolution-pycon-canada-video/ +https://emptysqua.re/blog/reading-american-dharma/ +https://emptysqua.re/blog/are-the-six-senses-true-reality/ +https://emptysqua.re/blog/gertrude-and-hazel/ +https://emptysqua.re/blog/python-language-summit-2019/ +https://emptysqua.re/blog/sphinx-cats/ +https://emptysqua.re/blog/how-to-be-free-from-greed/ +https://emptysqua.re/blog/ravensbeard/ +https://emptysqua.re/blog/kaku/ +https://emptysqua.re/blog/pygotham-free-speaker-coaching-2019/ +https://emptysqua.re/blog/how-to-dissolve-the-self/ +https://emptysqua.re/blog/five-ways-to-establish-a-rock-solid-meditation-habit/ +https://emptysqua.re/blog/pygotham-2019-asl-live-captioning-playbook/ +https://emptysqua.re/blog/heartwood-sutta/ +https://standardebooks.org/ebooks/charles-dickens/a-tale-of-two-cities +https://standardebooks.org/ebooks/victor-hugo/les-miserables/isabel-f-hapgood +https://standardebooks.org/ebooks/william-shakespeare/henry-v +https://standardebooks.org/ebooks/j-s-fletcher/the-charing-cross-mystery +https://standardebooks.org/ebooks/samuel-pepys/the-diary +https://standardebooks.org/ebooks/henry-lawson/while-the-billy-boils +https://standardebooks.org/ebooks/john-milton/paradise-lost +https://standardebooks.org/ebooks/sax-rohmer/brood-of-the-witch-queen +https://standardebooks.org/ebooks/william-carlos-williams/poetry +https://standardebooks.org/ebooks/john-buchan/mr-standfast +https://standardebooks.org/ebooks/p-g-wodehouse/jeeves-stories +https://standardebooks.org/ebooks/arthur-conan-doyle/the-valley-of-fear +https://standardebooks.org/ebooks/booker-t-washington/up-from-slavery +https://standardebooks.org/ebooks/john-reed/ten-days-that-shook-the-world +https://standardebooks.org/ebooks/victor-hugo/notre-dame-de-paris/isabel-f-hapgood +https://standardebooks.org/ebooks/mark-twain/the-adventures-of-tom-sawyer +https://standardebooks.org/ebooks/jane-austen/sense-and-sensibility +https://standardebooks.org/ebooks/leonid-andreyev/short-fiction/herman-bernstein_alexandra-linden_l-a-magnus_k-walter_w-h-lowe_the-russian-review_archibald-j-wolfe_john-cournos_r-s-townsend_maurice-magnus +https://standardebooks.org/ebooks/jonathan-swift/gullivers-travels +https://standardebooks.org/ebooks/suetonius/the-lives-of-the-caesars/j-c-rolfe +https://standardebooks.org/ebooks/henry-james/the-golden-bowl +https://standardebooks.org/ebooks/stanley-g-weinbaum/the-dark-other +https://standardebooks.org/ebooks/evelyn-underhill/practical-mysticism +https://standardebooks.org/ebooks/arthur-machen/the-hill-of-dreams +https://standardebooks.org/ebooks/l-m-montgomery/anne-of-green-gables +https://standardebooks.org/ebooks/frances-hodgson-burnett/little-lord-fauntleroy +https://standardebooks.org/ebooks/a-a-milne/the-red-house-mystery +https://standardebooks.org/ebooks/charlotte-bronte/jane-eyre +https://standardebooks.org/ebooks/jack-london/the-sea-wolf +https://standardebooks.org/ebooks/fyodor-sologub/short-fiction/john-cournos_stephen-graham_rosa-savory-graham_p-selver +http://tastetesterdoc.com/?p=103 +http://tastetesterdoc.com/?p=109 +http://tastetesterdoc.com/?p=113 +http://tastetesterdoc.com/?p=117 +http://tastetesterdoc.com/?p=122 +http://tastetesterdoc.com/?p=126 +http://tastetesterdoc.com/?p=131 +http://tastetesterdoc.com/?p=136 +http://tastetesterdoc.com/?p=147 +http://tastetesterdoc.com/?p=162 +https://www.jpsmjournal.com/article/S0885-3924(19)30612-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30613-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30635-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(18)30180-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30103-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30298-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30374-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30386-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30387-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30434-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30435-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30443-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30444-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30446-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30448-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30449-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30451-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30447-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30458-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30459-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30455-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30438-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30452-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30456-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30462-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30463-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30450-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30461-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30474-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30505-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30507-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30454-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30460-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30508-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30509-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30506-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30510-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30511-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30513-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30512-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30514-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30523-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30524-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30525-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30526-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30528-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30529-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30527-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30530-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30531-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30562-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30563-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30564-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30566-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30567-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30565-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30568-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30569-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30571-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30532-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30572-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30573-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30574-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30575-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30576-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30577-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30579-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30580-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30581-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30596-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30598-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30597-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30570-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30578-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30603-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30604-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30605-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30606-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30607-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30608-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30582-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30609-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30610-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30637-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30639-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30638-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30640-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30641-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30642-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30643-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30644-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30645-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30646-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30647-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30649-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30651-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30652-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30653-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30648-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30654-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30595-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30650-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30663-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30664-5/fulltext?rss=yes +https://beauhilton.com/on-making-this-website +https://beauhilton.com/on-the-slogan +https://beauhilton.com/a-workflow-for-remembering-all-that-science-and-also-everything +https://beauhilton.com/Artificial-Intelligence-Definitions-and-Indefinitions +https://beauhilton.com/python-write-my-paper +https://beauhilton.com/r-markdown-python-friends +https://beauhilton.com/chrome-extensions +https://erikbern.com/2012/10/21/luigi-build-complex-pipelines-of-tasks.html +https://erikbern.com/2012/10/29/a-neat-little-trick-with-time-decay.html +https://erikbern.com/2012/11/18/tumblrs-awesome-project-names.html +https://erikbern.com/2012/12/05/calculating-cosine-similarities-using-dimensionality-reduction.html +https://erikbern.com/2013/01/13/momentum-and-mean-reversion-might-just-be-volatility-bias.html +https://erikbern.com/2013/01/22/nyc-machine-learning-meetup.html +https://erikbern.com/2013/01/27/slides-from-nyc-machine-learning-talk.html +https://erikbern.com/2013/02/06/im-featured-in-mashable.html +https://erikbern.com/2013/02/27/ml-at-twitter.html +https://erikbern.com/2013/03/22/more-luigi-pres.html +https://erikbern.com/2013/04/12/annoy.html +https://erikbern.com/2013/04/13/being-data-driven.html +https://erikbern.com/2013/04/26/presentation-about-luigi.html +https://erikbern.com/2013/04/27/stuff-that-bothers-me-100x-faster-than-hadoop.html +https://erikbern.com/2013/05/07/snakebite.html +https://erikbern.com/2013/05/21/fermats-principle.html +https://erikbern.com/2013/05/31/spotifys-discovery-page.html +https://erikbern.com/2013/06/02/wikiphilia.html +https://erikbern.com/2013/06/16/nodoc.html +https://erikbern.com/2013/06/19/hdfs2cass.html +https://erikbern.com/2013/06/26/more-luigi.html +https://erikbern.com/2013/07/24/normalizing-multinomial-distributions.html +https://erikbern.com/2013/07/27/more-luigi-presentation-from-oscon.html +https://erikbern.com/2013/07/28/hubspots-creepy-picture-shows-how-to-maintain-monocultures-in-the-21st-century.html +https://erikbern.com/2013/08/03/mlhadoop-at-nyc-predictive-analytics.html +https://erikbern.com/2013/08/09/delivering-music-recommendations.html +https://erikbern.com/2013/08/11/2d-embedding-of-5k-artists-win.html +https://erikbern.com/2013/08/12/3d.html +https://erikbern.com/2013/08/17/306.html +https://erikbern.com/2013/09/04/vote-for-our-sxsw-panel.html +https://erikbern.com/2013/09/16/implicit-data-and-collaborative-filtering.html +https://erikbern.com/2013/10/18/statself-com.html +https://erikbern.com/2013/11/02/model-benchmarks.html +https://erikbern.com/2013/12/06/bagging-as-a-regularizer.html +https://erikbern.com/2013/12/12/microsofts-new-marketing-strategy-give-up.html +https://erikbern.com/2013/12/20/more-insight-into-recommender-algorithms.html +https://erikbern.com/2014/01/12/benchmarking-nearest-neighbor-libraries-in-python.html +https://erikbern.com/2014/01/23/ratio-metrics.html +https://erikbern.com/2014/03/03/momentum-strategies.html +https://erikbern.com/2014/03/22/welcome-echo-nest.html +https://erikbern.com/2014/03/22/luigi-party.html +https://erikbern.com/2014/04/01/music-recommendations-using-cover-images-part-1.html +https://erikbern.com/2014/04/12/mlconf-2014.html +https://erikbern.com/2014/04/24/the-power-of-ensembles.html +https://erikbern.com/2014/06/08/how-to-build-up-a-data-team-everything-i-ever-learned-about-recruiting.html +https://erikbern.com/2014/06/17/where-do-locals-go-in-nyc.html +https://erikbern.com/2014/06/28/recurrent-neural-networks-for-collaborative-filtering.html +https://erikbern.com/2014/07/30/in-defense-of-false-positives-why-you-cant-fail-with-ab-tests.html +https://erikbern.com/2014/08/19/running-theano-on-ec2.html +https://erikbern.com/2014/10/07/detecting-corporate-fraud-using-benfords-law.html +https://erikbern.com/2014/10/10/the-filter-bubble-is-silly-and-you-cant-guess-what-happened-next.html +https://erikbern.com/2014/11/11/annoying-blog-post.html +https://erikbern.com/2014/11/15/luigi-spreading-to-the-west-coast.html +https://erikbern.com/2014/11/22/optimizing-things-everything-is-a-proxy-for-a-proxy-for-a-proxy.html +https://erikbern.com/2014/11/29/deep-learning-for-chess.html +https://erikbern.com/2014/12/08/deep-learning-for-chess-addendum.html +https://erikbern.com/2014/12/11/deep-learning-for-go.html +https://erikbern.com/2014/12/16/luigi-talk-tomorrow.html +https://erikbern.com/2014/12/17/luigi-presentation-nyc-data-science-dec-16-2014.html +https://erikbern.com/2014/12/20/a-brief-history-of-hadoop-at-spotify-2008-2009.html +https://erikbern.com/2014/12/28/i-already-found-the-best-gifs.html +https://erikbern.com/2014/12/30/everything-i-learned-about-technical-debt.html +https://erikbern.com/2015/01/13/scala-data-pipelines-for-music-recommendations.html +https://erikbern.com/2015/02/11/leaving-spotify.html +https://erikbern.com/2015/02/22/my-favorite-management-failures.html +https://erikbern.com/2015/02/26/the-relationship-between-commit-size-and-commit-message-size.html +https://erikbern.com/2015/03/14/pinterest-open-sources-pinball.html +https://erikbern.com/2015/04/07/norvigs-claim-that-programming-competitions-correlate-negatively-with-being-good-on-the-job.html +https://erikbern.com/2015/04/09/its-called-berksons-paradox.html +https://erikbern.com/2015/04/22/black-box-machine-learning-in-the-cloud.html +https://erikbern.com/2015/04/26/ping-the-world.html +https://erikbern.com/2015/05/03/annoy-now-without-boost-dependencies-and-with-python-3-support.html +https://erikbern.com/2015/05/26/40-better-precision-and-4x-faster-index-building-in-annoy.html +https://erikbern.com/2015/05/28/the-lane-next-to-you-is-more-likely-to-be-slower-than-yours.html +https://erikbern.com/2015/06/05/the-hardest-challenge-about-becoming-a-manager.html +https://erikbern.com/2015/06/21/3d-in-d3.html +https://erikbern.com/2015/07/02/more-luigi-alternatives.html +https://erikbern.com/2015/07/04/benchmark-of-approximate-nearest-neighbor-libraries.html +https://erikbern.com/2015/07/24/math-problem.html +https://erikbern.com/2015/08/16/software-engineers-and-automation.html +https://erikbern.com/2015/09/08/antipodes.html +https://erikbern.com/2015/09/22/presentations-about-spotify-music-recommendations.html +https://erikbern.com/2015/09/24/nearest-neighbor-methods-vector-models-part-1.html +https://erikbern.com/2015/10/01/nearest-neighbors-and-vector-models-part-2-how-to-search-in-high-dimensional-spaces.html +https://erikbern.com/2015/10/20/nearest-neighbors-and-vector-models-epilogue-curse-of-dimensionality.html +https://erikbern.com/2015/10/28/interview-with-a-data-scientist-erik-bernhardsson.html +https://erikbern.com/2015/10/31/mcmc-for-marketing-data.html +https://erikbern.com/2015/11/04/looking-for-smart-people.html +https://erikbern.com/2015/11/12/installing-tensorflow-on-aws.html +https://erikbern.com/2015/11/28/there-is-no-magic-trick.html +https://erikbern.com/2015/12/05/more-mcmc-analyzing-a-small-dataset-with-1-5-ratings.html +https://erikbern.com/2016/01/01/books-i-read-in-2015.html +https://erikbern.com/2016/01/08/i-believe-in-the-10x-engineer-but.html +https://erikbern.com/2016/01/21/analyzing-50k-fonts-using-deep-neural-networks.html +https://erikbern.com/2016/01/25/some-more-font-links.html +https://erikbern.com/2016/02/03/my-issue-with-gpu-accelerated-deep-learning.html +https://erikbern.com/2016/03/02/iterate-or-die.html +https://erikbern.com/2016/03/12/meta-blogging.html +https://erikbern.com/2016/03/16/exploding-offers-are-bullshit.html +https://erikbern.com/2016/04/04/nyc-subway-math.html +https://erikbern.com/2016/04/18/why-organizations-fail.html +https://erikbern.com/2016/04/26/dollar-cost-averaging.html +https://erikbern.com/2016/05/24/what-is-your-motivation.html +https://erikbern.com/2016/06/02/approximate-nearest-news.html +https://erikbern.com/2016/07/09/waiting-time-math.html +https://erikbern.com/2016/08/05/when-machine-learning-matters.html +https://erikbern.com/2016/09/08/state-drift.html +https://erikbern.com/2016/10/25/pareto-efficiency.html +https://erikbern.com/2016/11/01/are-data-sets-the-new-server-rooms.html +https://erikbern.com/2016/12/05/the-half-life-of-code.html +https://erikbern.com/2017/01/10/functional-programming-is-the-libertarianism-of-sw-eng.html +https://erikbern.com/2017/02/01/language-pitch.html +https://erikbern.com/2017/02/17/why-i-went-into-the-mortgage-industry.html +https://erikbern.com/2017/03/15/the-eigenvector-of-why-we-moved-from-language-x-to-language-y.html +https://erikbern.com/2017/05/23/conversion-rates-you-are-most-likely-computing-them-wrong.html +https://erikbern.com/2017/06/09/blogroll.html +https://erikbern.com/2017/07/06/optimizing-for-iteration-speed.html +https://erikbern.com/2017/07/12/the-most-twisted-coastline.html +https://erikbern.com/2017/08/14/google-diversity-memo-global-warming-pascals-wager.html +https://erikbern.com/2017/08/19/machine-platform-crowd.html +https://erikbern.com/2017/08/29/the-software-engineering-rule-of-3.html +https://erikbern.com/2017/09/06/the-number-of-letters-in-the-word-for-each-number.html +https://erikbern.com/2017/09/26/on-the-equifax-breach-and-how-to-really-secure-prevent-theft.html +https://erikbern.com/2017/10/30/why-conversion-matters-a-toy-model.html +https://erikbern.com/2017/11/26/annoy-1.10-released-with-hamming-distance-and-windows-support.html +https://erikbern.com/2017/12/12/learning-from-users-faster-using-machine-learning.html +https://erikbern.com/2017/12/29/toxic-meeting-culture.html +https://erikbern.com/2018/01/03/plotting-author-statistics-for-git-repos-using-git-of-theseus.html +https://erikbern.com/2018/01/28/im-looking-for-data-engineers.html +https://erikbern.com/2018/02/15/new-benchmarks-for-approximate-nearest-neighbors.html +https://erikbern.com/2018/03/07/lessons-from-content-marketing-myself-aka-blogging-for-five-years.html +https://erikbern.com/2018/03/27/waiting-time-load-factor-and-queueing-theory.html +https://erikbern.com/2018/05/02/interviewing-is-a-noisy-prediction-problem.html +https://erikbern.com/2018/06/04/missing-the-point-about-microservices.html +https://erikbern.com/2018/06/17/new-approximate-nearest-neighbor-benchmarks.html +https://erikbern.com/2018/08/16/business-secrets-from-terrible-people.html +https://erikbern.com/2018/08/30/i-dont-want-to-learn-your-garbage-query-language.html +https://erikbern.com/2018/10/08/the-hackers-guide-to-uncertainty-estimates.html +https://erikbern.com/2019/01/10/data-architecture-vs-backend-architecture.html +https://erikbern.com/2019/02/21/headcount-targets-feature-factories-and-when-to-hire-those-mythical-10x-people.html +https://erikbern.com/2019/04/15/why-software-projects-take-longer-than-you-think-a-statistical-model.html +https://erikbern.com/2019/08/05/modeling-conversion-rates-using-weibull-and-gamma-distributions.html +https://erikbern.com/2019/09/26/misc-unsolicited-career-advice.html +https://erikbern.com/2019/10/16/buffet-lines-are-terrible.html +https://www.mrmoneymustache.com/?p=15027 +https://www.mrmoneymustache.com/?p=15111 +https://www.mrmoneymustache.com/?p=15150 +https://www.mrmoneymustache.com/?p=15208 +https://www.mrmoneymustache.com/?p=15268 +https://www.mrmoneymustache.com/?p=15350 +https://www.mrmoneymustache.com/?p=15144 +https://www.mrmoneymustache.com/?p=15431 +https://www.mrmoneymustache.com/?p=15482 +https://www.mrmoneymustache.com/?p=15513 +https://www.mrmoneymustache.com/?p=15530 +https://www.mrmoneymustache.com/?p=15562 +https://www.mrmoneymustache.com/?p=15545 +https://www.mrmoneymustache.com/?p=15680 +https://www.mrmoneymustache.com/?p=15724 +https://www.mrmoneymustache.com/?p=15827 +PubMed:31748403 +http://xpenguin.club/Stadia-Special/ +https://standardebooks.org/ebooks/andre-norton/star-born +https://standardebooks.org/ebooks/george-eliot/middlemarch +https://www.jpsmjournal.com/article/S0885-3924(19)30665-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30667-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30668-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30669-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30671-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30670-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30672-4/fulltext?rss=yes +https://aiweirdness.com/post/189313008792 +yt:video:ACeQjDPOdDY +https://standardebooks.org/ebooks/anna-sewell/black-beauty +https://standardebooks.org/ebooks/angela-brazil/a-popular-schoolgirl +yt:video:GUQx72j9Q3Y +yt:video:mH1GGI2Jpbs +https://www.jpsmjournal.com/article/S0885-3924(19)30673-6/fulltext?rss=yes +http://xpenguin.club/XPengIN-Linux,-Lutris,-Epic-and-Stadia-(Also-some-VPN-talk)/ +https://standardebooks.org/ebooks/anonymous/beowulf/john-lesslie-hall +http://www.fast.ai/2019/12/02/nbdev +yt:video:mxA9Gyyu6Rg +yt:video:50p0Ao06cD0 +yt:video:82NBMvx6vFY +yt:video:hMSByvFHOro +https://lukesmith.xyz/2019.html#im-back-6-new-videos-out-and-more-coming +https://www.jpsmjournal.com/article/S0885-3924(19)30674-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30675-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30676-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30678-5/fulltext?rss=yes +yt:video:3NJIj47Tusw +yt:video:4bezl5gXAcg +https://medium.com/p/108c569e56c1 +https://lukesmith.xyz/2019.html#two-more-videos-and-important-larbs-problem +https://standardebooks.org/ebooks/m-e-braddon/lady-audleys-secret +https://aiweirdness.com/post/189511103367 +https://standardebooks.org/ebooks/john-muir/my-first-summer-in-the-sierra +https://emptysqua.re/blog/pygotham-2019-speaker-coaching-recap/ +https://lukesmith.xyz/2019.html#im-thinking-about-using-bspwm +http://xpenguin.club/BOOTLEGpenguin/ +https://standardebooks.org/ebooks/alexandre-dumas/the-three-musketeers/william-robson +yt:video:VBNTAtpf_d4 +yt:video:_hNMfVIsyIc +https://www.jpsmjournal.com/article/S0885-3924(19)30679-7/fulltext?rss=yes +https://medium.com/p/f06efa6355fd +https://medium.com/p/52c88557230d +https://medium.com/p/90bcb80890ba +https://standardebooks.org/ebooks/aldous-huxley/antic-hay +https://standardebooks.org/ebooks/ella-cheever-thayer/wired-love +https://standardebooks.org/ebooks/samuel-butler/the-way-of-all-flesh +yt:video:wIJL-UoDGyk +https://www.jpsmjournal.com/article/S0885-3924(19)30666-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30705-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30707-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30708-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30709-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30710-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30713-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30714-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30715-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30677-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30711-0/fulltext?rss=yes +https://medium.com/p/f338d64ba821 +https://jvns.ca/blog/how-tracking-pixels-work/ +https://jvns.ca/blog/2019/12/26/whats-a-server/ +https://emptysqua.re/blog/when-the-buddha-met-a-murderer/ +https://standardebooks.org/ebooks/poul-anderson/short-fiction +https://standardebooks.org/ebooks/charles-dickens/great-expectations +https://www.jpsmjournal.com/article/S0885-3924(19)30680-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30706-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31056-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31058-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31061-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31062-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31063-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30602-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30601-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30712-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31059-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31060-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31064-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31066-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31065-6/fulltext?rss=yes +https://medium.com/p/85098baed98 +https://medium.com/p/15f12c609e6a +https://medium.com/p/843fcddbc1bf +https://www.calnewport.com/?p=7443 +https://lukesmith.xyz/2019.html#merry-christmas-to-all-and-a-vid-from-the-archives +https://www.jpsmjournal.com/article/S0885-3924(19)31076-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31077-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31078-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31079-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31080-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31081-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31084-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31086-3/fulltext?rss=yes +https://www.mrmoneymustache.com/?p=15923 +https://standardebooks.org/ebooks/h-g-wells/tono-bungay +https://www.jpsmjournal.com/article/S0885-3924(19)31085-1/fulltext?rss=yes +https://jvns.ca/blog/2019-year-in-review/ +http://xpenguin.club/Valentines-day-special/ +http://xpenguin.club/The-End/ +https://www.jpsmjournal.com/article/S0885-3924(19)30682-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30683-9/fulltext?rss=yes +https://medium.com/p/38d8e83deaf9 +https://medium.com/p/7773555400d8 +https://www.calnewport.com/?p=7447 +https://aiweirdness.com/post/189845472982 +https://aiweirdness.com/post/189979379637 +https://machinelearningmastery.com/?p=9861 +https://machinelearningmastery.com/?p=9289 +https://medium.com/p/9dc8d64c1a89 +https://medium.com/p/30769eec5df0 +yt:video:X9cBFNbihFU +https://lukesmith.xyz/2019.html#new-video-on-new-books +https://jvns.ca/blog/2020/01/05/paperwm/ +PubMed:31904799 +http://www.fast.ai/2020/01/07/data-questionnaire +https://www.jpsmjournal.com/article/S0885-3924(19)31057-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31083-8/fulltext?rss=yes +https://statmodeling.stat.columbia.edu/?p=41918 +https://statmodeling.stat.columbia.edu/?p=42783 +https://statmodeling.stat.columbia.edu/?p=41671 +https://statmodeling.stat.columbia.edu/?p=42788 +https://statmodeling.stat.columbia.edu/?p=42787 +https://statmodeling.stat.columbia.edu/?p=42792 +https://statmodeling.stat.columbia.edu/?p=41957 +https://statmodeling.stat.columbia.edu/?p=42657 +http://statmodeling.stat.columbia.edu/?p=40171 +https://statmodeling.stat.columbia.edu/?p=42817 +https://statmodeling.stat.columbia.edu/?p=42808 +https://statmodeling.stat.columbia.edu/?p=42835 +https://statmodeling.stat.columbia.edu/?p=42837 +https://statmodeling.stat.columbia.edu/?p=42842 +https://statmodeling.stat.columbia.edu/?p=42844 +https://statmodeling.stat.columbia.edu/?p=42848 +https://statmodeling.stat.columbia.edu/?p=42856 +https://statmodeling.stat.columbia.edu/?p=42016 +https://statmodeling.stat.columbia.edu/?p=42018 +http://statmodeling.stat.columbia.edu/?p=40183 +https://statmodeling.stat.columbia.edu/?p=41285 +https://statmodeling.stat.columbia.edu/?p=42870 +https://statmodeling.stat.columbia.edu/?p=42025 +https://statmodeling.stat.columbia.edu/?p=42041 +https://statmodeling.stat.columbia.edu/?p=42888 +http://xpenguin.club/HexShards-Tape1/ +https://www.jpsmjournal.com/article/S0885-3924(20)30001-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30002-6/fulltext?rss=yes +https://aiweirdness.com/post/190160884937 +https://statmodeling.stat.columbia.edu/?p=42907 +http://www.fast.ai/2020/01/13/self_supervised +https://medium.com/p/3a93573d4f07 +https://statmodeling.stat.columbia.edu/?p=42926 +https://statmodeling.stat.columbia.edu/?p=42051 +https://www.jpsmjournal.com/article/S0885-3924(20)30003-8/fulltext?rss=yes +https://distill.pub/2020/attribution-baselines +https://statmodeling.stat.columbia.edu/?p=42936 +http://www.fast.ai/2020/01/16/fast_template +https://www.jpsmjournal.com/article/S0885-3924(19)31082-6/fulltext?rss=yes +http://www.fast.ai/2020/01/18/gitblog +http://www.fast.ai/2020/01/19/blog_screenshots +https://aiweirdness.com/post/190313362077 +PubMed:31953887 +http://www.fast.ai/2020/01/20/nb2md +http://www.fast.ai/2020/01/20/blog_overview +yt:video:an0RFLzJ5Yo +https://www.jpsmjournal.com/article/S0885-3924(20)30026-9/fulltext?rss=yes +https://davebucklin.com/play/2020/01/19/expenses-ledger.html +https://lukesmith.xyz/2019.html#newold-episode-of-not-related-out-every-scientific-paper-youve-read-is-wrong +http://www.fast.ai/2020/01/21/responsible-government +https://www.jpsmjournal.com/article/S0885-3924(20)30047-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30048-8/fulltext?rss=yes +yt:video:6YfRgI0xrfI +https://www.jpsmjournal.com/article/S0885-3924(19)30717-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30718-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30719-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30720-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30721-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30722-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30723-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30724-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30725-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30726-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30727-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30728-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30729-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30730-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30731-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30732-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30733-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30734-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30735-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30736-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30737-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30740-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30741-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30742-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30743-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30745-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30746-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30747-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30748-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30749-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30750-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30751-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30752-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30753-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30754-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30755-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30756-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30757-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30758-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30759-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30760-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30761-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30762-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30763-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30764-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30765-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30766-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30767-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30768-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30769-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30770-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30771-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30772-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30773-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30774-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30775-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30776-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30777-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30778-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30779-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30780-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30781-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30782-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30783-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30784-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30785-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30786-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30787-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30788-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30789-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30790-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30791-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30792-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30793-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30794-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30795-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30796-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30797-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30798-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30799-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30800-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30801-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30802-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30803-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30804-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30805-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30806-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30807-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30808-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30809-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30810-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30812-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30813-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30814-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30815-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30816-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30817-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30818-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30819-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30820-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30821-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30822-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30823-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30824-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30825-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30826-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30827-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30828-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30829-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30830-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30831-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30832-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30833-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30834-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30835-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30836-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30837-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30838-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30839-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30840-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30841-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30842-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30843-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30844-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30845-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30846-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30847-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30848-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30849-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30850-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30851-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30852-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30853-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30854-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30855-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30856-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30857-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30858-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30859-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30860-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30861-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30862-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30863-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30864-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30865-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30866-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30867-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30868-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30869-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30870-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30871-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30872-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30873-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30874-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30875-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30876-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30877-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30878-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30879-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30880-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30881-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30882-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30883-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30884-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30885-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30886-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30887-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30888-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30889-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30890-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30891-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30892-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30893-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30894-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30895-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30896-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30897-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30899-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30900-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30901-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30902-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30903-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30904-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30905-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30906-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30907-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30908-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30909-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30910-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30911-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30912-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30913-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30915-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30916-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30917-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30918-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30919-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30920-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30921-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30922-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30923-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30924-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30925-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30926-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30927-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30928-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30929-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30930-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30931-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30932-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30933-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30934-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30935-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30936-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30937-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30938-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30939-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30940-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30941-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30942-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30943-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30944-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30945-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30946-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30947-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30948-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30949-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30950-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30951-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30952-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30953-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30954-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30955-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30956-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30957-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30958-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30959-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30960-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30961-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30962-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30963-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30964-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30965-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30966-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30967-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30968-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30969-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30970-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30971-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30972-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30973-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30974-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30975-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30976-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30977-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30978-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30979-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30980-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30981-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30982-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30983-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30984-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30985-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30986-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30987-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30988-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30989-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30990-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30991-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30992-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30993-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30994-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30995-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30996-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30997-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30998-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)30999-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31000-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31001-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31002-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31003-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31004-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31005-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31006-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31007-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31008-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31009-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31010-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31011-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31012-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31013-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31014-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31015-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31016-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31017-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31018-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31019-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31020-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31021-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31022-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31023-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31024-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31025-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31026-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31027-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31028-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31029-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31030-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31031-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31032-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31033-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31034-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31035-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31036-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31037-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31038-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31039-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31040-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31041-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31042-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31043-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31044-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31045-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31046-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31047-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31048-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31049-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31050-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31051-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31052-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31053-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31054-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(19)31055-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30005-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30006-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30057-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30059-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30060-9/fulltext?rss=yes +https://aiweirdness.com/post/190441069697 +yt:video:n7lYxXrzbjk +https://www.calnewport.com/?p=7464 +https://www.mrmoneymustache.com/?p=15961 +blog/webmention-test +blog/gear-we-took-to-new-zealand-part-3 +blog/gear-we-took-to-new-zealand-part-2 +blog/gear-we-took-to-new-zealand-final-part +blog/styling-ordered-lists +blog/ssl-on-your-local-nginx +blog/beyond-tellerrand-and-indiewebcamp-2016 +http://www.rosipov.com/blog/desktop-notifications-from-chrome-secure-shell +http://www.rosipov.com/blog/automating-octopress-publishing +http://www.rosipov.com/blog/minimalist-phone-launcher +https://www.jpsmjournal.com/article/S0885-3924(20)30061-0/fulltext?rss=yes +https://standardebooks.org/ebooks/gaston-leroux/the-phantom-of-the-opera/alexander-teixeira-de-mattos +PubMed:31987356 +https://standardebooks.org/ebooks/homer/the-iliad/william-cullen-bryant +https://www.jpsmjournal.com/article/S0885-3924(20)30058-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30064-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30065-8/fulltext?rss=yes +yt:video:f9qNXV01yzg +https://www.jpsmjournal.com/article/S0885-3924(20)30062-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30063-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30066-X/fulltext?rss=yes +PubMed:32003078 +yt:video:qRr1KRKVeh8 +https://aiweirdness.com/post/190569291992 +https://lukesmith.xyz/2019.html#big-fix-for-the-stsuckless-crashonemoji-error +yt:video:2xl56IJGKwY +yt:video:K3B8fIdixo0 +https://www.jpsmjournal.com/article/S0885-3924(20)30067-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30068-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30070-1/fulltext?rss=yes +https://standardebooks.org/ebooks/homer/the-odyssey/william-cullen-bryant +https://standardebooks.org/ebooks/john-w-campbell/islands-of-space +http://lukeoakdenrayner.wordpress.com/?p=9082 +https://www.jpsmjournal.com/article/S0885-3924(20)30069-5/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30071-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30072-5/fulltext?rss=yes +https://aiweirdness.com/post/190721709472 +https://standardebooks.org/ebooks/george-eliot/the-mill-on-the-floss +https://www.jpsmjournal.com/article/S0885-3924(20)30073-7/fulltext?rss=yes +https://jvns.ca/blog/compensation-questions/ +https://standardebooks.org/ebooks/anne-bronte/the-tenant-of-wildfell-hall +https://standardebooks.org/ebooks/richmal-crompton/just-william +https://standardebooks.org/ebooks/p-g-wodehouse/school-stories +https://standardebooks.org/ebooks/william-shakespeare/much-ado-about-nothing +https://standardebooks.org/ebooks/andre-norton/plague-ship +https://standardebooks.org/ebooks/j-m-synge/the-playboy-of-the-western-world +http://www.fast.ai/2020/02/09/CADE-big-picture +http://www.fast.ai/2020/02/13/fastai-A-Layered-API-for-Deep-Learning +http://www.fast.ai/2020/02/26/CADE-disinformation +https://www.jpsmjournal.com/article/S0885-3924(20)30028-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30029-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30074-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30085-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30088-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30089-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30092-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30093-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30097-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30095-6/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30098-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30100-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30101-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30102-0/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30103-2/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30099-3/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30122-6/fulltext?rss=yes +PubMed:32103158 +https://standardebooks.org/ebooks/laurence-sterne/the-life-and-opinions-of-tristram-shandy-gentleman +https://olgabotvinnik.com/blog/hot-install-docker-container/ +https://aiweirdness.com/post/190825122292 +https://aiweirdness.com/post/611219307217797120 +https://lukesmith.xyz/2020.html#new-video-on-new-books +https://lukesmith.xyz/2020.html#big-fix-for-the-stsuckless-crashonemoji-error +https://standardebooks.org/ebooks/charles-dickens/oliver-twist +https://www.jpsmjournal.com/article/S0885-3924(20)30121-4/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30123-8/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30124-X/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30125-1/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30126-3/fulltext?rss=yes +https://aiweirdness.com/post/611853103688499200 +https://standardebooks.org/ebooks/herman-melville/short-fiction +https://statmodeling.stat.columbia.edu/?p=43291 +https://www.jpsmjournal.com/article/S0885-3924(20)30128-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30129-9/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30131-7/fulltext?rss=yes +https://www.jpsmjournal.com/article/S0885-3924(20)30132-9/fulltext?rss=yes +https://www.calnewport.com/?p=7544 +https://www.jpsmjournal.com/article/S0885-3924(20)30134-2/fulltext?rss=yes +yt:video:A6JXNZQwoYE +https://jvns.ca/blog/2020/03/15/writing-shaders-with-signed-distance-functions/ +http://www.spoon-tamago.com/?p=47743 +http://www.spoon-tamago.com/?p=47758 +http://www.spoon-tamago.com/?p=47771 +http://www.spoon-tamago.com/?p=47794 +http://www.spoon-tamago.com/?p=47805 +http://www.spoon-tamago.com/?p=47817 +http://www.spoon-tamago.com/?p=47825 +http://www.spoon-tamago.com/?p=47840 +http://www.spoon-tamago.com/?p=47852 +http://thesheriffofsodium.com/?p=1581 +http://thesheriffofsodium.com/?p=1494 +http://thesheriffofsodium.com/?p=1486 +http://thesheriffofsodium.com/2020/01/13/how-is-the-three-digit-usmle-score-calculated/ +http://thesheriffofsodium.com/?p=1654 +http://thesheriffofsodium.com/?p=1565 +http://thesheriffofsodium.com/?p=1725 +http://thesheriffofsodium.com/?p=1886 +http://thesheriffofsodium.com/?p=1918 +http://thesheriffofsodium.com/2020/03/10/the-lecture-that-never-got-to-be/ +https://lukesmith.xyz/2020.html#font-gone-crazy-in-larbs +yt:video:Q-Y5xqDkC50 +https://aiweirdness.com/post/614209593176899584 +https://lukesmith.xyz/2020.html#lincucks-fest-has-been-canceled +https://aiweirdness.com/post/614935849124102144 +https://aiweirdness.com/post/615654447163621376 +yt:video:1mr3issv79s +yt:video:Cu6VSf5aOaM +https://medium.com/p/2178597ba921 diff --git a/newsboat/urls b/newsboat/urls @@ -0,0 +1,41 @@ +# URLS for newsboat +"query:Unread Articles:unread = \"yes\"" +https://sanctum.geek.nz/arabesque/feed/ "Tech" "Programming General" +https://treyhunner.com/atom.xml "Python" +https://inconsolation.wordpress.com/feed/ "Tech" "Command Line" +https://olgabotvinnik.com/index.xml "Tech" "Biology" +https://zachholman.com/atom "Tech" +http://www.calnewport.com/blog/feed/ "Productivity" "Minimalism" +https://www.youtube.com/feeds/videos.xml?channel_id=UC2eYFnH61tmytImy1mTYvhA "Tech" "Videos" +https://lukesmith.xyz/rss.xml "Tech" +http://www.fast.ai/atom.xml "ML" +http://machinelearningmastery.com/blog/feed "ML" +https://distill.pub/rss.xml "ML" +https://erikbern.com/atom.xml "ML" "Tech" +https://texblog.org/feed/ "TeX" +http://aiweirdness.com/rss "ML" +https://medium.com/feed/@williamkoehrsen "ML" +https://medium.com/feed/@shiutangli "ML" +https://medium.com/feed/@dipanzan.sarkar "ML" +https://medium.com/feed/@citynorman "ML" +https://lukeoakdenrayner.wordpress.com/feed/ "ML" "Medicine" +https://eutils.ncbi.nlm.nih.gov/entrez/eutils/erss.cgi?rss_guid=1DoqKB8O4L1HKJ03CSM3_u9Nso2Mh3EAW0p2xKsNDP4weQmg5- "ML" "Medicine" # Isaac Kohane +https://eutils.ncbi.nlm.nih.gov/entrez/eutils/erss.cgi?rss_guid=1h3SAs98aPqmd6Vfxn_uiAWup_3lYctL4aAFP-Y7Eg8Pn6DEFA "ML" "Medicine" # Andrew Beam +https://eutils.ncbi.nlm.nih.gov/entrez/eutils/erss.cgi?rss_guid=1LYeLHGBis0h-Lsf3JolAU4vKQfag0FIfccYEuHHw588IEaouQ "ML" "Medicine" # Luke Oakden-Rayner +https://eutils.ncbi.nlm.nih.gov/entrez/eutils/erss.cgi?rss_guid=1z_pxc-9fhPUGO3O_yTKHOiZnSIaAVzVxhd2tmq3tMYy6gxEhK "ML" "Medicine" # Scott Lundberg +http://xpenguin.club/rss.xml "Tech" +https://fharrell.com/post/index.xml "Statistics" "Medicine" +https://davebucklin.com/feed.xml "Tech" "Gopher" +http://feeds.feedburner.com/MrMoneyMustache "Finance" +# https://www.jpsmjournal.com/current.rss "Medicine" "Palliative Care" +https://beauhilton.com/feed.xml +https://standardebooks.org/rss/new-releases "Literature" +https://emptysqua.re/blog/index.xml "Tech" "Programming" "Buddhism" +https://jvns.ca/atom.xml "Tech" "Teaching" +https://tastetesterdoc.com/feed "Medicine" "Friends" +https://statmodeling.stat.columbia.edu/feed/ "Stats" "Causal Inference" +https://webgefrickel.de/blog/feed "Tech" +https://www.rosipov.com/atom.xml "Tech" +http://www.spoon-tamago.com/feed/ "Culture" "Japan" +http://www.thesheriffofsodium.com/feed/ "medical education" +# mutt gmail kjdfpopyuilrhqpe diff --git a/notmuch-config b/notmuch-config @@ -0,0 +1,14 @@ +[database] +path=/home/beau/.local/share/mail +[user] +name=C. Beau Hilton +primary_email=cbeauhilton@gmail.com +[new] +tags=unread;inbox; +ignore= +[search] +exclude_tags=deleted;spam; +[maildir] +synchronize_flags=true +[crypto] +gpg_path=gpg diff --git a/npm/npmrc b/npm/npmrc @@ -0,0 +1,4 @@ +prefix=${XDG_DATA_HOME}/npm +cache=${XDG_CACHE_HOME}/npm +tmp=${XDG_RUNTIME_DIR}/npm +init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js diff --git a/nvim/.netrwhist b/nvim/.netrwhist @@ -0,0 +1,3 @@ +let g:netrw_dirhistmax =10 +let g:netrw_dirhistcnt =1 +let g:netrw_dirhist_1='/home/beau/.config/fontconfig' diff --git a/nvim/autoload/plug.vim b/nvim/autoload/plug.vim @@ -0,0 +1,2597 @@ +" vim-plug: Vim plugin manager +" ============================ +" +" Download plug.vim and put it in ~/.vim/autoload +" +" curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ +" https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim +" +" Edit your .vimrc +" +" call plug#begin('~/.vim/plugged') +" +" " Make sure you use single quotes +" +" " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align +" Plug 'junegunn/vim-easy-align' +" +" " Any valid git URL is allowed +" Plug 'https://github.com/junegunn/vim-github-dashboard.git' +" +" " Multiple Plug commands can be written in a single line using | separators +" Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' +" +" " On-demand loading +" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } +" Plug 'tpope/vim-fireplace', { 'for': 'clojure' } +" +" " Using a non-master branch +" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' } +" +" " Using a tagged release; wildcard allowed (requires git 1.9.2 or above) +" Plug 'fatih/vim-go', { 'tag': '*' } +" +" " Plugin options +" Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' } +" +" " Plugin outside ~/.vim/plugged with post-update hook +" Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } +" +" " Unmanaged plugin (manually installed and updated) +" Plug '~/my-prototype-plugin' +" +" " Initialize plugin system +" call plug#end() +" +" Then reload .vimrc and :PlugInstall to install plugins. +" +" Plug options: +" +"| Option | Description | +"| ----------------------- | ------------------------------------------------ | +"| `branch`/`tag`/`commit` | Branch/tag/commit of the repository to use | +"| `rtp` | Subdirectory that contains Vim plugin | +"| `dir` | Custom directory for the plugin | +"| `as` | Use different name for the plugin | +"| `do` | Post-update hook (string or funcref) | +"| `on` | On-demand loading: Commands or `<Plug>`-mappings | +"| `for` | On-demand loading: File types | +"| `frozen` | Do not update unless explicitly specified | +" +" More information: https://github.com/junegunn/vim-plug +" +" +" Copyright (c) 2017 Junegunn Choi +" +" MIT License +" +" Permission is hereby granted, free of charge, to any person obtaining +" a copy of this software and associated documentation files (the +" "Software"), to deal in the Software without restriction, including +" without limitation the rights to use, copy, modify, merge, publish, +" distribute, sublicense, and/or sell copies of the Software, and to +" permit persons to whom the Software is furnished to do so, subject to +" the following conditions: +" +" The above copyright notice and this permission notice shall be +" included in all copies or substantial portions of the Software. +" +" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +if exists('g:loaded_plug') + finish +endif +let g:loaded_plug = 1 + +let s:cpo_save = &cpo +set cpo&vim + +let s:plug_src = 'https://github.com/junegunn/vim-plug.git' +let s:plug_tab = get(s:, 'plug_tab', -1) +let s:plug_buf = get(s:, 'plug_buf', -1) +let s:mac_gui = has('gui_macvim') && has('gui_running') +let s:is_win = has('win32') +let s:nvim = has('nvim-0.2') || (has('nvim') && exists('*jobwait') && !s:is_win) +let s:vim8 = has('patch-8.0.0039') && exists('*job_start') +if s:is_win && &shellslash + set noshellslash + let s:me = resolve(expand('<sfile>:p')) + set shellslash +else + let s:me = resolve(expand('<sfile>:p')) +endif +let s:base_spec = { 'branch': 'master', 'frozen': 0 } +let s:TYPE = { +\ 'string': type(''), +\ 'list': type([]), +\ 'dict': type({}), +\ 'funcref': type(function('call')) +\ } +let s:loaded = get(s:, 'loaded', {}) +let s:triggers = get(s:, 'triggers', {}) + +if s:is_win + function! s:plug_call(fn, ...) + let shellslash = &shellslash + try + set noshellslash + return call(a:fn, a:000) + finally + let &shellslash = shellslash + endtry + endfunction +else + function! s:plug_call(fn, ...) + return call(a:fn, a:000) + endfunction +endif + +function! s:plug_getcwd() + return s:plug_call('getcwd') +endfunction + +function! s:plug_fnamemodify(fname, mods) + return s:plug_call('fnamemodify', a:fname, a:mods) +endfunction + +function! s:plug_expand(fmt) + return s:plug_call('expand', a:fmt, 1) +endfunction + +function! s:plug_tempname() + return s:plug_call('tempname') +endfunction + +function! plug#begin(...) + if a:0 > 0 + let s:plug_home_org = a:1 + let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p')) + elseif exists('g:plug_home') + let home = s:path(g:plug_home) + elseif !empty(&rtp) + let home = s:path(split(&rtp, ',')[0]) . '/plugged' + else + return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.') + endif + if s:plug_fnamemodify(home, ':t') ==# 'plugin' && s:plug_fnamemodify(home, ':h') ==# s:first_rtp + return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.') + endif + + let g:plug_home = home + let g:plugs = {} + let g:plugs_order = [] + let s:triggers = {} + + call s:define_commands() + return 1 +endfunction + +function! s:define_commands() + command! -nargs=+ -bar Plug call plug#(<args>) + if !executable('git') + return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.') + endif + if has('win32') + \ && &shellslash + \ && (&shell =~# 'cmd\.exe' || &shell =~# 'powershell\.exe') + return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.') + endif + if !has('nvim') + \ && (has('win32') || has('win32unix')) + \ && !has('multi_byte') + return s:err('Vim needs +multi_byte feature on Windows to run shell commands. Enable +iconv for best results.') + endif + command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(<bang>0, [<f-args>]) + command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(<bang>0, [<f-args>]) + command! -nargs=0 -bar -bang PlugClean call s:clean(<bang>0) + command! -nargs=0 -bar PlugUpgrade if s:upgrade() | execute 'source' s:esc(s:me) | endif + command! -nargs=0 -bar PlugStatus call s:status() + command! -nargs=0 -bar PlugDiff call s:diff() + command! -nargs=? -bar -bang -complete=file PlugSnapshot call s:snapshot(<bang>0, <f-args>) +endfunction + +function! s:to_a(v) + return type(a:v) == s:TYPE.list ? a:v : [a:v] +endfunction + +function! s:to_s(v) + return type(a:v) == s:TYPE.string ? a:v : join(a:v, "\n") . "\n" +endfunction + +function! s:glob(from, pattern) + return s:lines(globpath(a:from, a:pattern)) +endfunction + +function! s:source(from, ...) + let found = 0 + for pattern in a:000 + for vim in s:glob(a:from, pattern) + execute 'source' s:esc(vim) + let found = 1 + endfor + endfor + return found +endfunction + +function! s:assoc(dict, key, val) + let a:dict[a:key] = add(get(a:dict, a:key, []), a:val) +endfunction + +function! s:ask(message, ...) + call inputsave() + echohl WarningMsg + let answer = input(a:message.(a:0 ? ' (y/N/a) ' : ' (y/N) ')) + echohl None + call inputrestore() + echo "\r" + return (a:0 && answer =~? '^a') ? 2 : (answer =~? '^y') ? 1 : 0 +endfunction + +function! s:ask_no_interrupt(...) + try + return call('s:ask', a:000) + catch + return 0 + endtry +endfunction + +function! s:lazy(plug, opt) + return has_key(a:plug, a:opt) && + \ (empty(s:to_a(a:plug[a:opt])) || + \ !isdirectory(a:plug.dir) || + \ len(s:glob(s:rtp(a:plug), 'plugin')) || + \ len(s:glob(s:rtp(a:plug), 'after/plugin'))) +endfunction + +function! plug#end() + if !exists('g:plugs') + return s:err('Call plug#begin() first') + endif + + if exists('#PlugLOD') + augroup PlugLOD + autocmd! + augroup END + augroup! PlugLOD + endif + let lod = { 'ft': {}, 'map': {}, 'cmd': {} } + + if exists('g:did_load_filetypes') + filetype off + endif + for name in g:plugs_order + if !has_key(g:plugs, name) + continue + endif + let plug = g:plugs[name] + if get(s:loaded, name, 0) || !s:lazy(plug, 'on') && !s:lazy(plug, 'for') + let s:loaded[name] = 1 + continue + endif + + if has_key(plug, 'on') + let s:triggers[name] = { 'map': [], 'cmd': [] } + for cmd in s:to_a(plug.on) + if cmd =~? '^<Plug>.\+' + if empty(mapcheck(cmd)) && empty(mapcheck(cmd, 'i')) + call s:assoc(lod.map, cmd, name) + endif + call add(s:triggers[name].map, cmd) + elseif cmd =~# '^[A-Z]' + let cmd = substitute(cmd, '!*$', '', '') + if exists(':'.cmd) != 2 + call s:assoc(lod.cmd, cmd, name) + endif + call add(s:triggers[name].cmd, cmd) + else + call s:err('Invalid `on` option: '.cmd. + \ '. Should start with an uppercase letter or `<Plug>`.') + endif + endfor + endif + + if has_key(plug, 'for') + let types = s:to_a(plug.for) + if !empty(types) + augroup filetypedetect + call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim') + augroup END + endif + for type in types + call s:assoc(lod.ft, type, name) + endfor + endif + endfor + + for [cmd, names] in items(lod.cmd) + execute printf( + \ 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, %s)', + \ cmd, string(cmd), string(names)) + endfor + + for [map, names] in items(lod.map) + for [mode, map_prefix, key_prefix] in + \ [['i', '<C-O>', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']] + execute printf( + \ '%snoremap <silent> %s %s:<C-U>call <SID>lod_map(%s, %s, %s, "%s")<CR>', + \ mode, map, map_prefix, string(map), string(names), mode != 'i', key_prefix) + endfor + endfor + + for [ft, names] in items(lod.ft) + augroup PlugLOD + execute printf('autocmd FileType %s call <SID>lod_ft(%s, %s)', + \ ft, string(ft), string(names)) + augroup END + endfor + + call s:reorg_rtp() + filetype plugin indent on + if has('vim_starting') + if has('syntax') && !exists('g:syntax_on') + syntax enable + end + else + call s:reload_plugins() + endif +endfunction + +function! s:loaded_names() + return filter(copy(g:plugs_order), 'get(s:loaded, v:val, 0)') +endfunction + +function! s:load_plugin(spec) + call s:source(s:rtp(a:spec), 'plugin/**/*.vim', 'after/plugin/**/*.vim') +endfunction + +function! s:reload_plugins() + for name in s:loaded_names() + call s:load_plugin(g:plugs[name]) + endfor +endfunction + +function! s:trim(str) + return substitute(a:str, '[\/]\+$', '', '') +endfunction + +function! s:version_requirement(val, min) + for idx in range(0, len(a:min) - 1) + let v = get(a:val, idx, 0) + if v < a:min[idx] | return 0 + elseif v > a:min[idx] | return 1 + endif + endfor + return 1 +endfunction + +function! s:git_version_requirement(...) + if !exists('s:git_version') + let s:git_version = map(split(split(s:system('git --version'))[2], '\.'), 'str2nr(v:val)') + endif + return s:version_requirement(s:git_version, a:000) +endfunction + +function! s:progress_opt(base) + return a:base && !s:is_win && + \ s:git_version_requirement(1, 7, 1) ? '--progress' : '' +endfunction + +function! s:rtp(spec) + return s:path(a:spec.dir . get(a:spec, 'rtp', '')) +endfunction + +if s:is_win + function! s:path(path) + return s:trim(substitute(a:path, '/', '\', 'g')) + endfunction + + function! s:dirpath(path) + return s:path(a:path) . '\' + endfunction + + function! s:is_local_plug(repo) + return a:repo =~? '^[a-z]:\|^[%~]' + endfunction + + " Copied from fzf + function! s:wrap_cmds(cmds) + let cmds = [ + \ '@echo off', + \ 'setlocal enabledelayedexpansion'] + \ + (type(a:cmds) == type([]) ? a:cmds : [a:cmds]) + \ + ['endlocal'] + if has('iconv') + if !exists('s:codepage') + let s:codepage = libcallnr('kernel32.dll', 'GetACP', 0) + endif + return map(cmds, printf('iconv(v:val."\r", "%s", "cp%d")', &encoding, s:codepage)) + endif + return map(cmds, 'v:val."\r"') + endfunction + + function! s:batchfile(cmd) + let batchfile = s:plug_tempname().'.bat' + call writefile(s:wrap_cmds(a:cmd), batchfile) + let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0}) + if &shell =~# 'powershell\.exe' + let cmd = '& ' . cmd + endif + return [batchfile, cmd] + endfunction +else + function! s:path(path) + return s:trim(a:path) + endfunction + + function! s:dirpath(path) + return substitute(a:path, '[/\\]*$', '/', '') + endfunction + + function! s:is_local_plug(repo) + return a:repo[0] =~ '[/$~]' + endfunction +endif + +function! s:err(msg) + echohl ErrorMsg + echom '[vim-plug] '.a:msg + echohl None +endfunction + +function! s:warn(cmd, msg) + echohl WarningMsg + execute a:cmd 'a:msg' + echohl None +endfunction + +function! s:esc(path) + return escape(a:path, ' ') +endfunction + +function! s:escrtp(path) + return escape(a:path, ' ,') +endfunction + +function! s:remove_rtp() + for name in s:loaded_names() + let rtp = s:rtp(g:plugs[name]) + execute 'set rtp-='.s:escrtp(rtp) + let after = globpath(rtp, 'after') + if isdirectory(after) + execute 'set rtp-='.s:escrtp(after) + endif + endfor +endfunction + +function! s:reorg_rtp() + if !empty(s:first_rtp) + execute 'set rtp-='.s:first_rtp + execute 'set rtp-='.s:last_rtp + endif + + " &rtp is modified from outside + if exists('s:prtp') && s:prtp !=# &rtp + call s:remove_rtp() + unlet! s:middle + endif + + let s:middle = get(s:, 'middle', &rtp) + let rtps = map(s:loaded_names(), 's:rtp(g:plugs[v:val])') + let afters = filter(map(copy(rtps), 'globpath(v:val, "after")'), '!empty(v:val)') + let rtp = join(map(rtps, 'escape(v:val, ",")'), ',') + \ . ','.s:middle.',' + \ . join(map(afters, 'escape(v:val, ",")'), ',') + let &rtp = substitute(substitute(rtp, ',,*', ',', 'g'), '^,\|,$', '', 'g') + let s:prtp = &rtp + + if !empty(s:first_rtp) + execute 'set rtp^='.s:first_rtp + execute 'set rtp+='.s:last_rtp + endif +endfunction + +function! s:doautocmd(...) + if exists('#'.join(a:000, '#')) + execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '<nomodeline>' : '') join(a:000) + endif +endfunction + +function! s:dobufread(names) + for name in a:names + let path = s:rtp(g:plugs[name]) + for dir in ['ftdetect', 'ftplugin', 'after/ftdetect', 'after/ftplugin'] + if len(finddir(dir, path)) + if exists('#BufRead') + doautocmd BufRead + endif + return + endif + endfor + endfor +endfunction + +function! plug#load(...) + if a:0 == 0 + return s:err('Argument missing: plugin name(s) required') + endif + if !exists('g:plugs') + return s:err('plug#begin was not called') + endif + let names = a:0 == 1 && type(a:1) == s:TYPE.list ? a:1 : a:000 + let unknowns = filter(copy(names), '!has_key(g:plugs, v:val)') + if !empty(unknowns) + let s = len(unknowns) > 1 ? 's' : '' + return s:err(printf('Unknown plugin%s: %s', s, join(unknowns, ', '))) + end + let unloaded = filter(copy(names), '!get(s:loaded, v:val, 0)') + if !empty(unloaded) + for name in unloaded + call s:lod([name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + endfor + call s:dobufread(unloaded) + return 1 + end + return 0 +endfunction + +function! s:remove_triggers(name) + if !has_key(s:triggers, a:name) + return + endif + for cmd in s:triggers[a:name].cmd + execute 'silent! delc' cmd + endfor + for map in s:triggers[a:name].map + execute 'silent! unmap' map + execute 'silent! iunmap' map + endfor + call remove(s:triggers, a:name) +endfunction + +function! s:lod(names, types, ...) + for name in a:names + call s:remove_triggers(name) + let s:loaded[name] = 1 + endfor + call s:reorg_rtp() + + for name in a:names + let rtp = s:rtp(g:plugs[name]) + for dir in a:types + call s:source(rtp, dir.'/**/*.vim') + endfor + if a:0 + if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2)) + execute 'runtime' a:1 + endif + call s:source(rtp, a:2) + endif + call s:doautocmd('User', name) + endfor +endfunction + +function! s:lod_ft(pat, names) + let syn = 'syntax/'.a:pat.'.vim' + call s:lod(a:names, ['plugin', 'after/plugin'], syn, 'after/'.syn) + execute 'autocmd! PlugLOD FileType' a:pat + call s:doautocmd('filetypeplugin', 'FileType') + call s:doautocmd('filetypeindent', 'FileType') +endfunction + +function! s:lod_cmd(cmd, bang, l1, l2, args, names) + call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + call s:dobufread(a:names) + execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args) +endfunction + +function! s:lod_map(map, names, with_prefix, prefix) + call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + call s:dobufread(a:names) + let extra = '' + while 1 + let c = getchar(0) + if c == 0 + break + endif + let extra .= nr2char(c) + endwhile + + if a:with_prefix + let prefix = v:count ? v:count : '' + let prefix .= '"'.v:register.a:prefix + if mode(1) == 'no' + if v:operator == 'c' + let prefix = "\<esc>" . prefix + endif + let prefix .= v:operator + endif + call feedkeys(prefix, 'n') + endif + call feedkeys(substitute(a:map, '^<Plug>', "\<Plug>", '') . extra) +endfunction + +function! plug#(repo, ...) + if a:0 > 1 + return s:err('Invalid number of arguments (1..2)') + endif + + try + let repo = s:trim(a:repo) + let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec + let name = get(opts, 'as', s:plug_fnamemodify(repo, ':t:s?\.git$??')) + let spec = extend(s:infer_properties(name, repo), opts) + if !has_key(g:plugs, name) + call add(g:plugs_order, name) + endif + let g:plugs[name] = spec + let s:loaded[name] = get(s:loaded, name, 0) + catch + return s:err(v:exception) + endtry +endfunction + +function! s:parse_options(arg) + let opts = copy(s:base_spec) + let type = type(a:arg) + if type == s:TYPE.string + let opts.tag = a:arg + elseif type == s:TYPE.dict + call extend(opts, a:arg) + if has_key(opts, 'dir') + let opts.dir = s:dirpath(s:plug_expand(opts.dir)) + endif + else + throw 'Invalid argument type (expected: string or dictionary)' + endif + return opts +endfunction + +function! s:infer_properties(name, repo) + let repo = a:repo + if s:is_local_plug(repo) + return { 'dir': s:dirpath(s:plug_expand(repo)) } + else + if repo =~ ':' + let uri = repo + else + if repo !~ '/' + throw printf('Invalid argument: %s (implicit `vim-scripts'' expansion is deprecated)', repo) + endif + let fmt = get(g:, 'plug_url_format', 'https://git::@github.com/%s.git') + let uri = printf(fmt, repo) + endif + return { 'dir': s:dirpath(g:plug_home.'/'.a:name), 'uri': uri } + endif +endfunction + +function! s:install(force, names) + call s:update_impl(0, a:force, a:names) +endfunction + +function! s:update(force, names) + call s:update_impl(1, a:force, a:names) +endfunction + +function! plug#helptags() + if !exists('g:plugs') + return s:err('plug#begin was not called') + endif + for spec in values(g:plugs) + let docd = join([s:rtp(spec), 'doc'], '/') + if isdirectory(docd) + silent! execute 'helptags' s:esc(docd) + endif + endfor + return 1 +endfunction + +function! s:syntax() + syntax clear + syntax region plug1 start=/\%1l/ end=/\%2l/ contains=plugNumber + syntax region plug2 start=/\%2l/ end=/\%3l/ contains=plugBracket,plugX + syn match plugNumber /[0-9]\+[0-9.]*/ contained + syn match plugBracket /[[\]]/ contained + syn match plugX /x/ contained + syn match plugDash /^-/ + syn match plugPlus /^+/ + syn match plugStar /^*/ + syn match plugMessage /\(^- \)\@<=.*/ + syn match plugName /\(^- \)\@<=[^ ]*:/ + syn match plugSha /\%(: \)\@<=[0-9a-f]\{4,}$/ + syn match plugTag /(tag: [^)]\+)/ + syn match plugInstall /\(^+ \)\@<=[^:]*/ + syn match plugUpdate /\(^* \)\@<=[^:]*/ + syn match plugCommit /^ \X*[0-9a-f]\{7,9} .*/ contains=plugRelDate,plugEdge,plugTag + syn match plugEdge /^ \X\+$/ + syn match plugEdge /^ \X*/ contained nextgroup=plugSha + syn match plugSha /[0-9a-f]\{7,9}/ contained + syn match plugRelDate /([^)]*)$/ contained + syn match plugNotLoaded /(not loaded)$/ + syn match plugError /^x.*/ + syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/ + syn match plugH2 /^.*:\n-\+$/ + syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean + hi def link plug1 Title + hi def link plug2 Repeat + hi def link plugH2 Type + hi def link plugX Exception + hi def link plugBracket Structure + hi def link plugNumber Number + + hi def link plugDash Special + hi def link plugPlus Constant + hi def link plugStar Boolean + + hi def link plugMessage Function + hi def link plugName Label + hi def link plugInstall Function + hi def link plugUpdate Type + + hi def link plugError Error + hi def link plugDeleted Ignore + hi def link plugRelDate Comment + hi def link plugEdge PreProc + hi def link plugSha Identifier + hi def link plugTag Constant + + hi def link plugNotLoaded Comment +endfunction + +function! s:lpad(str, len) + return a:str . repeat(' ', a:len - len(a:str)) +endfunction + +function! s:lines(msg) + return split(a:msg, "[\r\n]") +endfunction + +function! s:lastline(msg) + return get(s:lines(a:msg), -1, '') +endfunction + +function! s:new_window() + execute get(g:, 'plug_window', 'vertical topleft new') +endfunction + +function! s:plug_window_exists() + let buflist = tabpagebuflist(s:plug_tab) + return !empty(buflist) && index(buflist, s:plug_buf) >= 0 +endfunction + +function! s:switch_in() + if !s:plug_window_exists() + return 0 + endif + + if winbufnr(0) != s:plug_buf + let s:pos = [tabpagenr(), winnr(), winsaveview()] + execute 'normal!' s:plug_tab.'gt' + let winnr = bufwinnr(s:plug_buf) + execute winnr.'wincmd w' + call add(s:pos, winsaveview()) + else + let s:pos = [winsaveview()] + endif + + setlocal modifiable + return 1 +endfunction + +function! s:switch_out(...) + call winrestview(s:pos[-1]) + setlocal nomodifiable + if a:0 > 0 + execute a:1 + endif + + if len(s:pos) > 1 + execute 'normal!' s:pos[0].'gt' + execute s:pos[1] 'wincmd w' + call winrestview(s:pos[2]) + endif +endfunction + +function! s:finish_bindings() + nnoremap <silent> <buffer> R :call <SID>retry()<cr> + nnoremap <silent> <buffer> D :PlugDiff<cr> + nnoremap <silent> <buffer> S :PlugStatus<cr> + nnoremap <silent> <buffer> U :call <SID>status_update()<cr> + xnoremap <silent> <buffer> U :call <SID>status_update()<cr> + nnoremap <silent> <buffer> ]] :silent! call <SID>section('')<cr> + nnoremap <silent> <buffer> [[ :silent! call <SID>section('b')<cr> +endfunction + +function! s:prepare(...) + if empty(s:plug_getcwd()) + throw 'Invalid current working directory. Cannot proceed.' + endif + + for evar in ['$GIT_DIR', '$GIT_WORK_TREE'] + if exists(evar) + throw evar.' detected. Cannot proceed.' + endif + endfor + + call s:job_abort() + if s:switch_in() + if b:plug_preview == 1 + pc + endif + enew + else + call s:new_window() + endif + + nnoremap <silent> <buffer> q :if b:plug_preview==1<bar>pc<bar>endif<bar>bd<cr> + if a:0 == 0 + call s:finish_bindings() + endif + let b:plug_preview = -1 + let s:plug_tab = tabpagenr() + let s:plug_buf = winbufnr(0) + call s:assign_name() + + for k in ['<cr>', 'L', 'o', 'X', 'd', 'dd'] + execute 'silent! unmap <buffer>' k + endfor + setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline modifiable nospell + if exists('+colorcolumn') + setlocal colorcolumn= + endif + setf vim-plug + if exists('g:syntax_on') + call s:syntax() + endif +endfunction + +function! s:assign_name() + " Assign buffer name + let prefix = '[Plugins]' + let name = prefix + let idx = 2 + while bufexists(name) + let name = printf('%s (%s)', prefix, idx) + let idx = idx + 1 + endwhile + silent! execute 'f' fnameescape(name) +endfunction + +function! s:chsh(swap) + let prev = [&shell, &shellcmdflag, &shellredir] + if !s:is_win && a:swap + set shell=sh shellredir=>%s\ 2>&1 + endif + return prev +endfunction + +function! s:bang(cmd, ...) + let batchfile = '' + try + let [sh, shellcmdflag, shrd] = s:chsh(a:0) + " FIXME: Escaping is incomplete. We could use shellescape with eval, + " but it won't work on Windows. + let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd + if s:is_win + let [batchfile, cmd] = s:batchfile(cmd) + endif + let g:_plug_bang = (s:is_win && has('gui_running') ? 'silent ' : '').'!'.escape(cmd, '#!%') + execute "normal! :execute g:_plug_bang\<cr>\<cr>" + finally + unlet g:_plug_bang + let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] + if s:is_win && filereadable(batchfile) + call delete(batchfile) + endif + endtry + return v:shell_error ? 'Exit status: ' . v:shell_error : '' +endfunction + +function! s:regress_bar() + let bar = substitute(getline(2)[1:-2], '.*\zs=', 'x', '') + call s:progress_bar(2, bar, len(bar)) +endfunction + +function! s:is_updated(dir) + return !empty(s:system_chomp('git log --pretty=format:"%h" "HEAD...HEAD@{1}"', a:dir)) +endfunction + +function! s:do(pull, force, todo) + for [name, spec] in items(a:todo) + if !isdirectory(spec.dir) + continue + endif + let installed = has_key(s:update.new, name) + let updated = installed ? 0 : + \ (a:pull && index(s:update.errors, name) < 0 && s:is_updated(spec.dir)) + if a:force || installed || updated + execute 'cd' s:esc(spec.dir) + call append(3, '- Post-update hook for '. name .' ... ') + let error = '' + let type = type(spec.do) + if type == s:TYPE.string + if spec.do[0] == ':' + if !get(s:loaded, name, 0) + let s:loaded[name] = 1 + call s:reorg_rtp() + endif + call s:load_plugin(spec) + try + execute spec.do[1:] + catch + let error = v:exception + endtry + if !s:plug_window_exists() + cd - + throw 'Warning: vim-plug was terminated by the post-update hook of '.name + endif + else + let error = s:bang(spec.do) + endif + elseif type == s:TYPE.funcref + try + let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged') + call spec.do({ 'name': name, 'status': status, 'force': a:force }) + catch + let error = v:exception + endtry + else + let error = 'Invalid hook type' + endif + call s:switch_in() + call setline(4, empty(error) ? (getline(4) . 'OK') + \ : ('x' . getline(4)[1:] . error)) + if !empty(error) + call add(s:update.errors, name) + call s:regress_bar() + endif + cd - + endif + endfor +endfunction + +function! s:hash_match(a, b) + return stridx(a:a, a:b) == 0 || stridx(a:b, a:a) == 0 +endfunction + +function! s:checkout(spec) + let sha = a:spec.commit + let output = s:system('git rev-parse HEAD', a:spec.dir) + if !v:shell_error && !s:hash_match(sha, s:lines(output)[0]) + let output = s:system( + \ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir) + endif + return output +endfunction + +function! s:finish(pull) + let new_frozen = len(filter(keys(s:update.new), 'g:plugs[v:val].frozen')) + if new_frozen + let s = new_frozen > 1 ? 's' : '' + call append(3, printf('- Installed %d frozen plugin%s', new_frozen, s)) + endif + call append(3, '- Finishing ... ') | 4 + redraw + call plug#helptags() + call plug#end() + call setline(4, getline(4) . 'Done!') + redraw + let msgs = [] + if !empty(s:update.errors) + call add(msgs, "Press 'R' to retry.") + endif + if a:pull && len(s:update.new) < len(filter(getline(5, '$'), + \ "v:val =~ '^- ' && v:val !~# 'Already up.to.date'")) + call add(msgs, "Press 'D' to see the updated changes.") + endif + echo join(msgs, ' ') + call s:finish_bindings() +endfunction + +function! s:retry() + if empty(s:update.errors) + return + endif + echo + call s:update_impl(s:update.pull, s:update.force, + \ extend(copy(s:update.errors), [s:update.threads])) +endfunction + +function! s:is_managed(name) + return has_key(g:plugs[a:name], 'uri') +endfunction + +function! s:names(...) + return sort(filter(keys(g:plugs), 'stridx(v:val, a:1) == 0 && s:is_managed(v:val)')) +endfunction + +function! s:check_ruby() + silent! ruby require 'thread'; VIM::command("let g:plug_ruby = '#{RUBY_VERSION}'") + if !exists('g:plug_ruby') + redraw! + return s:warn('echom', 'Warning: Ruby interface is broken') + endif + let ruby_version = split(g:plug_ruby, '\.') + unlet g:plug_ruby + return s:version_requirement(ruby_version, [1, 8, 7]) +endfunction + +function! s:update_impl(pull, force, args) abort + let sync = index(a:args, '--sync') >= 0 || has('vim_starting') + let args = filter(copy(a:args), 'v:val != "--sync"') + let threads = (len(args) > 0 && args[-1] =~ '^[1-9][0-9]*$') ? + \ remove(args, -1) : get(g:, 'plug_threads', 16) + + let managed = filter(copy(g:plugs), 's:is_managed(v:key)') + let todo = empty(args) ? filter(managed, '!v:val.frozen || !isdirectory(v:val.dir)') : + \ filter(managed, 'index(args, v:key) >= 0') + + if empty(todo) + return s:warn('echo', 'No plugin to '. (a:pull ? 'update' : 'install')) + endif + + if !s:is_win && s:git_version_requirement(2, 3) + let s:git_terminal_prompt = exists('$GIT_TERMINAL_PROMPT') ? $GIT_TERMINAL_PROMPT : '' + let $GIT_TERMINAL_PROMPT = 0 + for plug in values(todo) + let plug.uri = substitute(plug.uri, + \ '^https://git::@github\.com', 'https://github.com', '') + endfor + endif + + if !isdirectory(g:plug_home) + try + call mkdir(g:plug_home, 'p') + catch + return s:err(printf('Invalid plug directory: %s. '. + \ 'Try to call plug#begin with a valid directory', g:plug_home)) + endtry + endif + + if has('nvim') && !exists('*jobwait') && threads > 1 + call s:warn('echom', '[vim-plug] Update Neovim for parallel installer') + endif + + let use_job = s:nvim || s:vim8 + let python = (has('python') || has('python3')) && !use_job + let ruby = has('ruby') && !use_job && (v:version >= 703 || v:version == 702 && has('patch374')) && !(s:is_win && has('gui_running')) && threads > 1 && s:check_ruby() + + let s:update = { + \ 'start': reltime(), + \ 'all': todo, + \ 'todo': copy(todo), + \ 'errors': [], + \ 'pull': a:pull, + \ 'force': a:force, + \ 'new': {}, + \ 'threads': (python || ruby || use_job) ? min([len(todo), threads]) : 1, + \ 'bar': '', + \ 'fin': 0 + \ } + + call s:prepare(1) + call append(0, ['', '']) + normal! 2G + silent! redraw + + let s:clone_opt = get(g:, 'plug_shallow', 1) ? + \ '--depth 1' . (s:git_version_requirement(1, 7, 10) ? ' --no-single-branch' : '') : '' + + if has('win32unix') || has('wsl') + let s:clone_opt .= ' -c core.eol=lf -c core.autocrlf=input' + endif + + let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : '' + + " Python version requirement (>= 2.7) + if python && !has('python3') && !ruby && !use_job && s:update.threads > 1 + redir => pyv + silent python import platform; print platform.python_version() + redir END + let python = s:version_requirement( + \ map(split(split(pyv)[0], '\.'), 'str2nr(v:val)'), [2, 6]) + endif + + if (python || ruby) && s:update.threads > 1 + try + let imd = &imd + if s:mac_gui + set noimd + endif + if ruby + call s:update_ruby() + else + call s:update_python() + endif + catch + let lines = getline(4, '$') + let printed = {} + silent! 4,$d _ + for line in lines + let name = s:extract_name(line, '.', '') + if empty(name) || !has_key(printed, name) + call append('$', line) + if !empty(name) + let printed[name] = 1 + if line[0] == 'x' && index(s:update.errors, name) < 0 + call add(s:update.errors, name) + end + endif + endif + endfor + finally + let &imd = imd + call s:update_finish() + endtry + else + call s:update_vim() + while use_job && sync + sleep 100m + if s:update.fin + break + endif + endwhile + endif +endfunction + +function! s:log4(name, msg) + call setline(4, printf('- %s (%s)', a:msg, a:name)) + redraw +endfunction + +function! s:update_finish() + if exists('s:git_terminal_prompt') + let $GIT_TERMINAL_PROMPT = s:git_terminal_prompt + endif + if s:switch_in() + call append(3, '- Updating ...') | 4 + for [name, spec] in items(filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && (s:update.force || s:update.pull || has_key(s:update.new, v:key))')) + let [pos, _] = s:logpos(name) + if !pos + continue + endif + if has_key(spec, 'commit') + call s:log4(name, 'Checking out '.spec.commit) + let out = s:checkout(spec) + elseif has_key(spec, 'tag') + let tag = spec.tag + if tag =~ '\*' + let tags = s:lines(s:system('git tag --list '.plug#shellescape(tag).' --sort -version:refname 2>&1', spec.dir)) + if !v:shell_error && !empty(tags) + let tag = tags[0] + call s:log4(name, printf('Latest tag for %s -> %s', spec.tag, tag)) + call append(3, '') + endif + endif + call s:log4(name, 'Checking out '.tag) + let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir) + else + let branch = get(spec, 'branch', 'master') + call s:log4(name, 'Merging origin/'.s:esc(branch)) + let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1' + \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir) + endif + if !v:shell_error && filereadable(spec.dir.'/.gitmodules') && + \ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir)) + call s:log4(name, 'Updating submodules. This may take a while.') + let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir) + endif + let msg = s:format_message(v:shell_error ? 'x': '-', name, out) + if v:shell_error + call add(s:update.errors, name) + call s:regress_bar() + silent execute pos 'd _' + call append(4, msg) | 4 + elseif !empty(out) + call setline(pos, msg[0]) + endif + redraw + endfor + silent 4 d _ + try + call s:do(s:update.pull, s:update.force, filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && has_key(v:val, "do")')) + catch + call s:warn('echom', v:exception) + call s:warn('echo', '') + return + endtry + call s:finish(s:update.pull) + call setline(1, 'Updated. Elapsed time: ' . split(reltimestr(reltime(s:update.start)))[0] . ' sec.') + call s:switch_out('normal! gg') + endif +endfunction + +function! s:job_abort() + if (!s:nvim && !s:vim8) || !exists('s:jobs') + return + endif + + for [name, j] in items(s:jobs) + if s:nvim + silent! call jobstop(j.jobid) + elseif s:vim8 + silent! call job_stop(j.jobid) + endif + if j.new + call s:rm_rf(g:plugs[name].dir) + endif + endfor + let s:jobs = {} +endfunction + +function! s:last_non_empty_line(lines) + let len = len(a:lines) + for idx in range(len) + let line = a:lines[len-idx-1] + if !empty(line) + return line + endif + endfor + return '' +endfunction + +function! s:job_out_cb(self, data) abort + let self = a:self + let data = remove(self.lines, -1) . a:data + let lines = map(split(data, "\n", 1), 'split(v:val, "\r", 1)[-1]') + call extend(self.lines, lines) + " To reduce the number of buffer updates + let self.tick = get(self, 'tick', -1) + 1 + if !self.running || self.tick % len(s:jobs) == 0 + let bullet = self.running ? (self.new ? '+' : '*') : (self.error ? 'x' : '-') + let result = self.error ? join(self.lines, "\n") : s:last_non_empty_line(self.lines) + call s:log(bullet, self.name, result) + endif +endfunction + +function! s:job_exit_cb(self, data) abort + let a:self.running = 0 + let a:self.error = a:data != 0 + call s:reap(a:self.name) + call s:tick() +endfunction + +function! s:job_cb(fn, job, ch, data) + if !s:plug_window_exists() " plug window closed + return s:job_abort() + endif + call call(a:fn, [a:job, a:data]) +endfunction + +function! s:nvim_cb(job_id, data, event) dict abort + return a:event == 'stdout' ? + \ s:job_cb('s:job_out_cb', self, 0, join(a:data, "\n")) : + \ s:job_cb('s:job_exit_cb', self, 0, a:data) +endfunction + +function! s:spawn(name, cmd, opts) + let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''], + \ 'new': get(a:opts, 'new', 0) } + let s:jobs[a:name] = job + let cmd = has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir, 0) : a:cmd + let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd] + + if s:nvim + call extend(job, { + \ 'on_stdout': function('s:nvim_cb'), + \ 'on_exit': function('s:nvim_cb'), + \ }) + let jid = s:plug_call('jobstart', argv, job) + if jid > 0 + let job.jobid = jid + else + let job.running = 0 + let job.error = 1 + let job.lines = [jid < 0 ? argv[0].' is not executable' : + \ 'Invalid arguments (or job table is full)'] + endif + elseif s:vim8 + let jid = job_start(s:is_win ? join(argv, ' ') : argv, { + \ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]), + \ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]), + \ 'out_mode': 'raw' + \}) + if job_status(jid) == 'run' + let job.jobid = jid + else + let job.running = 0 + let job.error = 1 + let job.lines = ['Failed to start job'] + endif + else + let job.lines = s:lines(call('s:system', [cmd])) + let job.error = v:shell_error != 0 + let job.running = 0 + endif +endfunction + +function! s:reap(name) + let job = s:jobs[a:name] + if job.error + call add(s:update.errors, a:name) + elseif get(job, 'new', 0) + let s:update.new[a:name] = 1 + endif + let s:update.bar .= job.error ? 'x' : '=' + + let bullet = job.error ? 'x' : '-' + let result = job.error ? join(job.lines, "\n") : s:last_non_empty_line(job.lines) + call s:log(bullet, a:name, empty(result) ? 'OK' : result) + call s:bar() + + call remove(s:jobs, a:name) +endfunction + +function! s:bar() + if s:switch_in() + let total = len(s:update.all) + call setline(1, (s:update.pull ? 'Updating' : 'Installing'). + \ ' plugins ('.len(s:update.bar).'/'.total.')') + call s:progress_bar(2, s:update.bar, total) + call s:switch_out() + endif +endfunction + +function! s:logpos(name) + let max = line('$') + for i in range(4, max > 4 ? max : 4) + if getline(i) =~# '^[-+x*] '.a:name.':' + for j in range(i + 1, max > 5 ? max : 5) + if getline(j) !~ '^ ' + return [i, j - 1] + endif + endfor + return [i, i] + endif + endfor + return [0, 0] +endfunction + +function! s:log(bullet, name, lines) + if s:switch_in() + let [b, e] = s:logpos(a:name) + if b > 0 + silent execute printf('%d,%d d _', b, e) + if b > winheight('.') + let b = 4 + endif + else + let b = 4 + endif + " FIXME For some reason, nomodifiable is set after :d in vim8 + setlocal modifiable + call append(b - 1, s:format_message(a:bullet, a:name, a:lines)) + call s:switch_out() + endif +endfunction + +function! s:update_vim() + let s:jobs = {} + + call s:bar() + call s:tick() +endfunction + +function! s:tick() + let pull = s:update.pull + let prog = s:progress_opt(s:nvim || s:vim8) +while 1 " Without TCO, Vim stack is bound to explode + if empty(s:update.todo) + if empty(s:jobs) && !s:update.fin + call s:update_finish() + let s:update.fin = 1 + endif + return + endif + + let name = keys(s:update.todo)[0] + let spec = remove(s:update.todo, name) + let new = empty(globpath(spec.dir, '.git', 1)) + + call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...') + redraw + + let has_tag = has_key(spec, 'tag') + if !new + let [error, _] = s:git_validate(spec, 0) + if empty(error) + if pull + let fetch_opt = (has_tag && !empty(globpath(spec.dir, '.git/shallow'))) ? '--depth 99999999' : '' + call s:spawn(name, printf('git fetch %s %s 2>&1', fetch_opt, prog), { 'dir': spec.dir }) + else + let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 } + endif + else + let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 } + endif + else + call s:spawn(name, + \ printf('git clone %s %s %s %s 2>&1', + \ has_tag ? '' : s:clone_opt, + \ prog, + \ plug#shellescape(spec.uri, {'script': 0}), + \ plug#shellescape(s:trim(spec.dir), {'script': 0})), { 'new': 1 }) + endif + + if !s:jobs[name].running + call s:reap(name) + endif + if len(s:jobs) >= s:update.threads + break + endif +endwhile +endfunction + +function! s:update_python() +let py_exe = has('python') ? 'python' : 'python3' +execute py_exe "<< EOF" +import datetime +import functools +import os +try: + import queue +except ImportError: + import Queue as queue +import random +import re +import shutil +import signal +import subprocess +import tempfile +import threading as thr +import time +import traceback +import vim + +G_NVIM = vim.eval("has('nvim')") == '1' +G_PULL = vim.eval('s:update.pull') == '1' +G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1 +G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)')) +G_CLONE_OPT = vim.eval('s:clone_opt') +G_PROGRESS = vim.eval('s:progress_opt(1)') +G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads')) +G_STOP = thr.Event() +G_IS_WIN = vim.eval('s:is_win') == '1' + +class PlugError(Exception): + def __init__(self, msg): + self.msg = msg +class CmdTimedOut(PlugError): + pass +class CmdFailed(PlugError): + pass +class InvalidURI(PlugError): + pass +class Action(object): + INSTALL, UPDATE, ERROR, DONE = ['+', '*', 'x', '-'] + +class Buffer(object): + def __init__(self, lock, num_plugs, is_pull): + self.bar = '' + self.event = 'Updating' if is_pull else 'Installing' + self.lock = lock + self.maxy = int(vim.eval('winheight(".")')) + self.num_plugs = num_plugs + + def __where(self, name): + """ Find first line with name in current buffer. Return line num. """ + found, lnum = False, 0 + matcher = re.compile('^[-+x*] {0}:'.format(name)) + for line in vim.current.buffer: + if matcher.search(line) is not None: + found = True + break + lnum += 1 + + if not found: + lnum = -1 + return lnum + + def header(self): + curbuf = vim.current.buffer + curbuf[0] = self.event + ' plugins ({0}/{1})'.format(len(self.bar), self.num_plugs) + + num_spaces = self.num_plugs - len(self.bar) + curbuf[1] = '[{0}{1}]'.format(self.bar, num_spaces * ' ') + + with self.lock: + vim.command('normal! 2G') + vim.command('redraw') + + def write(self, action, name, lines): + first, rest = lines[0], lines[1:] + msg = ['{0} {1}{2}{3}'.format(action, name, ': ' if first else '', first)] + msg.extend([' ' + line for line in rest]) + + try: + if action == Action.ERROR: + self.bar += 'x' + vim.command("call add(s:update.errors, '{0}')".format(name)) + elif action == Action.DONE: + self.bar += '=' + + curbuf = vim.current.buffer + lnum = self.__where(name) + if lnum != -1: # Found matching line num + del curbuf[lnum] + if lnum > self.maxy and action in set([Action.INSTALL, Action.UPDATE]): + lnum = 3 + else: + lnum = 3 + curbuf.append(msg, lnum) + + self.header() + except vim.error: + pass + +class Command(object): + CD = 'cd /d' if G_IS_WIN else 'cd' + + def __init__(self, cmd, cmd_dir=None, timeout=60, cb=None, clean=None): + self.cmd = cmd + if cmd_dir: + self.cmd = '{0} {1} && {2}'.format(Command.CD, cmd_dir, self.cmd) + self.timeout = timeout + self.callback = cb if cb else (lambda msg: None) + self.clean = clean if clean else (lambda: None) + self.proc = None + + @property + def alive(self): + """ Returns true only if command still running. """ + return self.proc and self.proc.poll() is None + + def execute(self, ntries=3): + """ Execute the command with ntries if CmdTimedOut. + Returns the output of the command if no Exception. + """ + attempt, finished, limit = 0, False, self.timeout + + while not finished: + try: + attempt += 1 + result = self.try_command() + finished = True + return result + except CmdTimedOut: + if attempt != ntries: + self.notify_retry() + self.timeout += limit + else: + raise + + def notify_retry(self): + """ Retry required for command, notify user. """ + for count in range(3, 0, -1): + if G_STOP.is_set(): + raise KeyboardInterrupt + msg = 'Timeout. Will retry in {0} second{1} ...'.format( + count, 's' if count != 1 else '') + self.callback([msg]) + time.sleep(1) + self.callback(['Retrying ...']) + + def try_command(self): + """ Execute a cmd & poll for callback. Returns list of output. + Raises CmdFailed -> return code for Popen isn't 0 + Raises CmdTimedOut -> command exceeded timeout without new output + """ + first_line = True + + try: + tfile = tempfile.NamedTemporaryFile(mode='w+b') + preexec_fn = not G_IS_WIN and os.setsid or None + self.proc = subprocess.Popen(self.cmd, stdout=tfile, + stderr=subprocess.STDOUT, + stdin=subprocess.PIPE, shell=True, + preexec_fn=preexec_fn) + thrd = thr.Thread(target=(lambda proc: proc.wait()), args=(self.proc,)) + thrd.start() + + thread_not_started = True + while thread_not_started: + try: + thrd.join(0.1) + thread_not_started = False + except RuntimeError: + pass + + while self.alive: + if G_STOP.is_set(): + raise KeyboardInterrupt + + if first_line or random.random() < G_LOG_PROB: + first_line = False + line = '' if G_IS_WIN else nonblock_read(tfile.name) + if line: + self.callback([line]) + + time_diff = time.time() - os.path.getmtime(tfile.name) + if time_diff > self.timeout: + raise CmdTimedOut(['Timeout!']) + + thrd.join(0.5) + + tfile.seek(0) + result = [line.decode('utf-8', 'replace').rstrip() for line in tfile] + + if self.proc.returncode != 0: + raise CmdFailed([''] + result) + + return result + except: + self.terminate() + raise + + def terminate(self): + """ Terminate process and cleanup. """ + if self.alive: + if G_IS_WIN: + os.kill(self.proc.pid, signal.SIGINT) + else: + os.killpg(self.proc.pid, signal.SIGTERM) + self.clean() + +class Plugin(object): + def __init__(self, name, args, buf_q, lock): + self.name = name + self.args = args + self.buf_q = buf_q + self.lock = lock + self.tag = args.get('tag', 0) + + def manage(self): + try: + if os.path.exists(self.args['dir']): + self.update() + else: + self.install() + with self.lock: + thread_vim_command("let s:update.new['{0}'] = 1".format(self.name)) + except PlugError as exc: + self.write(Action.ERROR, self.name, exc.msg) + except KeyboardInterrupt: + G_STOP.set() + self.write(Action.ERROR, self.name, ['Interrupted!']) + except: + # Any exception except those above print stack trace + msg = 'Trace:\n{0}'.format(traceback.format_exc().rstrip()) + self.write(Action.ERROR, self.name, msg.split('\n')) + raise + + def install(self): + target = self.args['dir'] + if target[-1] == '\\': + target = target[0:-1] + + def clean(target): + def _clean(): + try: + shutil.rmtree(target) + except OSError: + pass + return _clean + + self.write(Action.INSTALL, self.name, ['Installing ...']) + callback = functools.partial(self.write, Action.INSTALL, self.name) + cmd = 'git clone {0} {1} {2} {3} 2>&1'.format( + '' if self.tag else G_CLONE_OPT, G_PROGRESS, self.args['uri'], + esc(target)) + com = Command(cmd, None, G_TIMEOUT, callback, clean(target)) + result = com.execute(G_RETRIES) + self.write(Action.DONE, self.name, result[-1:]) + + def repo_uri(self): + cmd = 'git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url' + command = Command(cmd, self.args['dir'], G_TIMEOUT,) + result = command.execute(G_RETRIES) + return result[-1] + + def update(self): + actual_uri = self.repo_uri() + expect_uri = self.args['uri'] + regex = re.compile(r'^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$') + ma = regex.match(actual_uri) + mb = regex.match(expect_uri) + if ma is None or mb is None or ma.groups() != mb.groups(): + msg = ['', + 'Invalid URI: {0}'.format(actual_uri), + 'Expected {0}'.format(expect_uri), + 'PlugClean required.'] + raise InvalidURI(msg) + + if G_PULL: + self.write(Action.UPDATE, self.name, ['Updating ...']) + callback = functools.partial(self.write, Action.UPDATE, self.name) + fetch_opt = '--depth 99999999' if self.tag and os.path.isfile(os.path.join(self.args['dir'], '.git/shallow')) else '' + cmd = 'git fetch {0} {1} 2>&1'.format(fetch_opt, G_PROGRESS) + com = Command(cmd, self.args['dir'], G_TIMEOUT, callback) + result = com.execute(G_RETRIES) + self.write(Action.DONE, self.name, result[-1:]) + else: + self.write(Action.DONE, self.name, ['Already installed']) + + def write(self, action, name, msg): + self.buf_q.put((action, name, msg)) + +class PlugThread(thr.Thread): + def __init__(self, tname, args): + super(PlugThread, self).__init__() + self.tname = tname + self.args = args + + def run(self): + thr.current_thread().name = self.tname + buf_q, work_q, lock = self.args + + try: + while not G_STOP.is_set(): + name, args = work_q.get_nowait() + plug = Plugin(name, args, buf_q, lock) + plug.manage() + work_q.task_done() + except queue.Empty: + pass + +class RefreshThread(thr.Thread): + def __init__(self, lock): + super(RefreshThread, self).__init__() + self.lock = lock + self.running = True + + def run(self): + while self.running: + with self.lock: + thread_vim_command('noautocmd normal! a') + time.sleep(0.33) + + def stop(self): + self.running = False + +if G_NVIM: + def thread_vim_command(cmd): + vim.session.threadsafe_call(lambda: vim.command(cmd)) +else: + def thread_vim_command(cmd): + vim.command(cmd) + +def esc(name): + return '"' + name.replace('"', '\"') + '"' + +def nonblock_read(fname): + """ Read a file with nonblock flag. Return the last line. """ + fread = os.open(fname, os.O_RDONLY | os.O_NONBLOCK) + buf = os.read(fread, 100000).decode('utf-8', 'replace') + os.close(fread) + + line = buf.rstrip('\r\n') + left = max(line.rfind('\r'), line.rfind('\n')) + if left != -1: + left += 1 + line = line[left:] + + return line + +def main(): + thr.current_thread().name = 'main' + nthreads = int(vim.eval('s:update.threads')) + plugs = vim.eval('s:update.todo') + mac_gui = vim.eval('s:mac_gui') == '1' + + lock = thr.Lock() + buf = Buffer(lock, len(plugs), G_PULL) + buf_q, work_q = queue.Queue(), queue.Queue() + for work in plugs.items(): + work_q.put(work) + + start_cnt = thr.active_count() + for num in range(nthreads): + tname = 'PlugT-{0:02}'.format(num) + thread = PlugThread(tname, (buf_q, work_q, lock)) + thread.start() + if mac_gui: + rthread = RefreshThread(lock) + rthread.start() + + while not buf_q.empty() or thr.active_count() != start_cnt: + try: + action, name, msg = buf_q.get(True, 0.25) + buf.write(action, name, ['OK'] if not msg else msg) + buf_q.task_done() + except queue.Empty: + pass + except KeyboardInterrupt: + G_STOP.set() + + if mac_gui: + rthread.stop() + rthread.join() + +main() +EOF +endfunction + +function! s:update_ruby() + ruby << EOF + module PlugStream + SEP = ["\r", "\n", nil] + def get_line + buffer = '' + loop do + char = readchar rescue return + if SEP.include? char.chr + buffer << $/ + break + else + buffer << char + end + end + buffer + end + end unless defined?(PlugStream) + + def esc arg + %["#{arg.gsub('"', '\"')}"] + end + + def killall pid + pids = [pid] + if /mswin|mingw|bccwin/ =~ RUBY_PLATFORM + pids.each { |pid| Process.kill 'INT', pid.to_i rescue nil } + else + unless `which pgrep 2> /dev/null`.empty? + children = pids + until children.empty? + children = children.map { |pid| + `pgrep -P #{pid}`.lines.map { |l| l.chomp } + }.flatten + pids += children + end + end + pids.each { |pid| Process.kill 'TERM', pid.to_i rescue nil } + end + end + + def compare_git_uri a, b + regex = %r{^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$} + regex.match(a).to_a.drop(1) == regex.match(b).to_a.drop(1) + end + + require 'thread' + require 'fileutils' + require 'timeout' + running = true + iswin = VIM::evaluate('s:is_win').to_i == 1 + pull = VIM::evaluate('s:update.pull').to_i == 1 + base = VIM::evaluate('g:plug_home') + all = VIM::evaluate('s:update.todo') + limit = VIM::evaluate('get(g:, "plug_timeout", 60)') + tries = VIM::evaluate('get(g:, "plug_retries", 2)') + 1 + nthr = VIM::evaluate('s:update.threads').to_i + maxy = VIM::evaluate('winheight(".")').to_i + vim7 = VIM::evaluate('v:version').to_i <= 703 && RUBY_PLATFORM =~ /darwin/ + cd = iswin ? 'cd /d' : 'cd' + tot = VIM::evaluate('len(s:update.todo)') || 0 + bar = '' + skip = 'Already installed' + mtx = Mutex.new + take1 = proc { mtx.synchronize { running && all.shift } } + logh = proc { + cnt = bar.length + $curbuf[1] = "#{pull ? 'Updating' : 'Installing'} plugins (#{cnt}/#{tot})" + $curbuf[2] = '[' + bar.ljust(tot) + ']' + VIM::command('normal! 2G') + VIM::command('redraw') + } + where = proc { |name| (1..($curbuf.length)).find { |l| $curbuf[l] =~ /^[-+x*] #{name}:/ } } + log = proc { |name, result, type| + mtx.synchronize do + ing = ![true, false].include?(type) + bar += type ? '=' : 'x' unless ing + b = case type + when :install then '+' when :update then '*' + when true, nil then '-' else + VIM::command("call add(s:update.errors, '#{name}')") + 'x' + end + result = + if type || type.nil? + ["#{b} #{name}: #{result.lines.to_a.last || 'OK'}"] + elsif result =~ /^Interrupted|^Timeout/ + ["#{b} #{name}: #{result}"] + else + ["#{b} #{name}"] + result.lines.map { |l| " " << l } + end + if lnum = where.call(name) + $curbuf.delete lnum + lnum = 4 if ing && lnum > maxy + end + result.each_with_index do |line, offset| + $curbuf.append((lnum || 4) - 1 + offset, line.gsub(/\e\[./, '').chomp) + end + logh.call + end + } + bt = proc { |cmd, name, type, cleanup| + tried = timeout = 0 + begin + tried += 1 + timeout += limit + fd = nil + data = '' + if iswin + Timeout::timeout(timeout) do + tmp = VIM::evaluate('tempname()') + system("(#{cmd}) > #{tmp}") + data = File.read(tmp).chomp + File.unlink tmp rescue nil + end + else + fd = IO.popen(cmd).extend(PlugStream) + first_line = true + log_prob = 1.0 / nthr + while line = Timeout::timeout(timeout) { fd.get_line } + data << line + log.call name, line.chomp, type if name && (first_line || rand < log_prob) + first_line = false + end + fd.close + end + [$? == 0, data.chomp] + rescue Timeout::Error, Interrupt => e + if fd && !fd.closed? + killall fd.pid + fd.close + end + cleanup.call if cleanup + if e.is_a?(Timeout::Error) && tried < tries + 3.downto(1) do |countdown| + s = countdown > 1 ? 's' : '' + log.call name, "Timeout. Will retry in #{countdown} second#{s} ...", type + sleep 1 + end + log.call name, 'Retrying ...', type + retry + end + [false, e.is_a?(Interrupt) ? "Interrupted!" : "Timeout!"] + end + } + main = Thread.current + threads = [] + watcher = Thread.new { + if vim7 + while VIM::evaluate('getchar(1)') + sleep 0.1 + end + else + require 'io/console' # >= Ruby 1.9 + nil until IO.console.getch == 3.chr + end + mtx.synchronize do + running = false + threads.each { |t| t.raise Interrupt } unless vim7 + end + threads.each { |t| t.join rescue nil } + main.kill + } + refresh = Thread.new { + while true + mtx.synchronize do + break unless running + VIM::command('noautocmd normal! a') + end + sleep 0.2 + end + } if VIM::evaluate('s:mac_gui') == 1 + + clone_opt = VIM::evaluate('s:clone_opt') + progress = VIM::evaluate('s:progress_opt(1)') + nthr.times do + mtx.synchronize do + threads << Thread.new { + while pair = take1.call + name = pair.first + dir, uri, tag = pair.last.values_at *%w[dir uri tag] + exists = File.directory? dir + ok, result = + if exists + chdir = "#{cd} #{iswin ? dir : esc(dir)}" + ret, data = bt.call "#{chdir} && git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url", nil, nil, nil + current_uri = data.lines.to_a.last + if !ret + if data =~ /^Interrupted|^Timeout/ + [false, data] + else + [false, [data.chomp, "PlugClean required."].join($/)] + end + elsif !compare_git_uri(current_uri, uri) + [false, ["Invalid URI: #{current_uri}", + "Expected: #{uri}", + "PlugClean required."].join($/)] + else + if pull + log.call name, 'Updating ...', :update + fetch_opt = (tag && File.exist?(File.join(dir, '.git/shallow'))) ? '--depth 99999999' : '' + bt.call "#{chdir} && git fetch #{fetch_opt} #{progress} 2>&1", name, :update, nil + else + [true, skip] + end + end + else + d = esc dir.sub(%r{[\\/]+$}, '') + log.call name, 'Installing ...', :install + bt.call "git clone #{clone_opt unless tag} #{progress} #{uri} #{d} 2>&1", name, :install, proc { + FileUtils.rm_rf dir + } + end + mtx.synchronize { VIM::command("let s:update.new['#{name}'] = 1") } if !exists && ok + log.call name, result, ok + end + } if running + end + end + threads.each { |t| t.join rescue nil } + logh.call + refresh.kill if refresh + watcher.kill +EOF +endfunction + +function! s:shellesc_cmd(arg, script) + let escaped = substitute('"'.a:arg.'"', '[&|<>()@^!"]', '^&', 'g') + return substitute(escaped, '%', (a:script ? '%' : '^') . '&', 'g') +endfunction + +function! s:shellesc_ps1(arg) + return "'".substitute(escape(a:arg, '\"'), "'", "''", 'g')."'" +endfunction + +function! s:shellesc_sh(arg) + return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'" +endfunction + +function! plug#shellescape(arg, ...) + let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {} + let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh') + let script = get(opts, 'script', 1) + if shell =~# 'cmd\.exe' + return s:shellesc_cmd(a:arg, script) + elseif shell =~# 'powershell\.exe' || shell =~# 'pwsh$' + return s:shellesc_ps1(a:arg) + endif + return s:shellesc_sh(a:arg) +endfunction + +function! s:glob_dir(path) + return map(filter(s:glob(a:path, '**'), 'isdirectory(v:val)'), 's:dirpath(v:val)') +endfunction + +function! s:progress_bar(line, bar, total) + call setline(a:line, '[' . s:lpad(a:bar, a:total) . ']') +endfunction + +function! s:compare_git_uri(a, b) + " See `git help clone' + " https:// [user@] github.com[:port] / junegunn/vim-plug [.git] + " [git@] github.com[:port] : junegunn/vim-plug [.git] + " file:// / junegunn/vim-plug [/] + " / junegunn/vim-plug [/] + let pat = '^\%(\w\+://\)\='.'\%([^@/]*@\)\='.'\([^:/]*\%(:[0-9]*\)\=\)'.'[:/]'.'\(.\{-}\)'.'\%(\.git\)\=/\?$' + let ma = matchlist(a:a, pat) + let mb = matchlist(a:b, pat) + return ma[1:2] ==# mb[1:2] +endfunction + +function! s:format_message(bullet, name, message) + if a:bullet != 'x' + return [printf('%s %s: %s', a:bullet, a:name, s:lastline(a:message))] + else + let lines = map(s:lines(a:message), '" ".v:val') + return extend([printf('x %s:', a:name)], lines) + endif +endfunction + +function! s:with_cd(cmd, dir, ...) + let script = a:0 > 0 ? a:1 : 1 + return printf('cd%s %s && %s', s:is_win ? ' /d' : '', plug#shellescape(a:dir, {'script': script}), a:cmd) +endfunction + +function! s:system(cmd, ...) + let batchfile = '' + try + let [sh, shellcmdflag, shrd] = s:chsh(1) + let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd + if s:is_win + let [batchfile, cmd] = s:batchfile(cmd) + endif + return system(cmd) + finally + let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] + if s:is_win && filereadable(batchfile) + call delete(batchfile) + endif + endtry +endfunction + +function! s:system_chomp(...) + let ret = call('s:system', a:000) + return v:shell_error ? '' : substitute(ret, '\n$', '', '') +endfunction + +function! s:git_validate(spec, check_branch) + let err = '' + if isdirectory(a:spec.dir) + let result = s:lines(s:system('git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url', a:spec.dir)) + let remote = result[-1] + if v:shell_error + let err = join([remote, 'PlugClean required.'], "\n") + elseif !s:compare_git_uri(remote, a:spec.uri) + let err = join(['Invalid URI: '.remote, + \ 'Expected: '.a:spec.uri, + \ 'PlugClean required.'], "\n") + elseif a:check_branch && has_key(a:spec, 'commit') + let result = s:lines(s:system('git rev-parse HEAD 2>&1', a:spec.dir)) + let sha = result[-1] + if v:shell_error + let err = join(add(result, 'PlugClean required.'), "\n") + elseif !s:hash_match(sha, a:spec.commit) + let err = join([printf('Invalid HEAD (expected: %s, actual: %s)', + \ a:spec.commit[:6], sha[:6]), + \ 'PlugUpdate required.'], "\n") + endif + elseif a:check_branch + let branch = result[0] + " Check tag + if has_key(a:spec, 'tag') + let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir) + if a:spec.tag !=# tag && a:spec.tag !~ '\*' + let err = printf('Invalid tag: %s (expected: %s). Try PlugUpdate.', + \ (empty(tag) ? 'N/A' : tag), a:spec.tag) + endif + " Check branch + elseif a:spec.branch !=# branch + let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.', + \ branch, a:spec.branch) + endif + if empty(err) + let [ahead, behind] = split(s:lastline(s:system(printf( + \ 'git rev-list --count --left-right HEAD...origin/%s', + \ a:spec.branch), a:spec.dir)), '\t') + if !v:shell_error && ahead + if behind + " Only mention PlugClean if diverged, otherwise it's likely to be + " pushable (and probably not that messed up). + let err = printf( + \ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n" + \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', a:spec.branch, ahead, behind) + else + let err = printf("Ahead of origin/%s by %d commit(s).\n" + \ .'Cannot update until local changes are pushed.', + \ a:spec.branch, ahead) + endif + endif + endif + endif + else + let err = 'Not found' + endif + return [err, err =~# 'PlugClean'] +endfunction + +function! s:rm_rf(dir) + if isdirectory(a:dir) + call s:system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . plug#shellescape(a:dir)) + endif +endfunction + +function! s:clean(force) + call s:prepare() + call append(0, 'Searching for invalid plugins in '.g:plug_home) + call append(1, '') + + " List of valid directories + let dirs = [] + let errs = {} + let [cnt, total] = [0, len(g:plugs)] + for [name, spec] in items(g:plugs) + if !s:is_managed(name) + call add(dirs, spec.dir) + else + let [err, clean] = s:git_validate(spec, 1) + if clean + let errs[spec.dir] = s:lines(err)[0] + else + call add(dirs, spec.dir) + endif + endif + let cnt += 1 + call s:progress_bar(2, repeat('=', cnt), total) + normal! 2G + redraw + endfor + + let allowed = {} + for dir in dirs + let allowed[s:dirpath(s:plug_fnamemodify(dir, ':h:h'))] = 1 + let allowed[dir] = 1 + for child in s:glob_dir(dir) + let allowed[child] = 1 + endfor + endfor + + let todo = [] + let found = sort(s:glob_dir(g:plug_home)) + while !empty(found) + let f = remove(found, 0) + if !has_key(allowed, f) && isdirectory(f) + call add(todo, f) + call append(line('$'), '- ' . f) + if has_key(errs, f) + call append(line('$'), ' ' . errs[f]) + endif + let found = filter(found, 'stridx(v:val, f) != 0') + end + endwhile + + 4 + redraw + if empty(todo) + call append(line('$'), 'Already clean.') + else + let s:clean_count = 0 + call append(3, ['Directories to delete:', '']) + redraw! + if a:force || s:ask_no_interrupt('Delete all directories?') + call s:delete([6, line('$')], 1) + else + call setline(4, 'Cancelled.') + nnoremap <silent> <buffer> d :set opfunc=<sid>delete_op<cr>g@ + nmap <silent> <buffer> dd d_ + xnoremap <silent> <buffer> d :<c-u>call <sid>delete_op(visualmode(), 1)<cr> + echo 'Delete the lines (d{motion}) to delete the corresponding directories' + endif + endif + 4 + setlocal nomodifiable +endfunction + +function! s:delete_op(type, ...) + call s:delete(a:0 ? [line("'<"), line("'>")] : [line("'["), line("']")], 0) +endfunction + +function! s:delete(range, force) + let [l1, l2] = a:range + let force = a:force + while l1 <= l2 + let line = getline(l1) + if line =~ '^- ' && isdirectory(line[2:]) + execute l1 + redraw! + let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1) + let force = force || answer > 1 + if answer + call s:rm_rf(line[2:]) + setlocal modifiable + call setline(l1, '~'.line[1:]) + let s:clean_count += 1 + call setline(4, printf('Removed %d directories.', s:clean_count)) + setlocal nomodifiable + endif + endif + let l1 += 1 + endwhile +endfunction + +function! s:upgrade() + echo 'Downloading the latest version of vim-plug' + redraw + let tmp = s:plug_tempname() + let new = tmp . '/plug.vim' + + try + let out = s:system(printf('git clone --depth 1 %s %s', plug#shellescape(s:plug_src), plug#shellescape(tmp))) + if v:shell_error + return s:err('Error upgrading vim-plug: '. out) + endif + + if readfile(s:me) ==# readfile(new) + echo 'vim-plug is already up-to-date' + return 0 + else + call rename(s:me, s:me . '.old') + call rename(new, s:me) + unlet g:loaded_plug + echo 'vim-plug has been upgraded' + return 1 + endif + finally + silent! call s:rm_rf(tmp) + endtry +endfunction + +function! s:upgrade_specs() + for spec in values(g:plugs) + let spec.frozen = get(spec, 'frozen', 0) + endfor +endfunction + +function! s:status() + call s:prepare() + call append(0, 'Checking plugins') + call append(1, '') + + let ecnt = 0 + let unloaded = 0 + let [cnt, total] = [0, len(g:plugs)] + for [name, spec] in items(g:plugs) + let is_dir = isdirectory(spec.dir) + if has_key(spec, 'uri') + if is_dir + let [err, _] = s:git_validate(spec, 1) + let [valid, msg] = [empty(err), empty(err) ? 'OK' : err] + else + let [valid, msg] = [0, 'Not found. Try PlugInstall.'] + endif + else + if is_dir + let [valid, msg] = [1, 'OK'] + else + let [valid, msg] = [0, 'Not found.'] + endif + endif + let cnt += 1 + let ecnt += !valid + " `s:loaded` entry can be missing if PlugUpgraded + if is_dir && get(s:loaded, name, -1) == 0 + let unloaded = 1 + let msg .= ' (not loaded)' + endif + call s:progress_bar(2, repeat('=', cnt), total) + call append(3, s:format_message(valid ? '-' : 'x', name, msg)) + normal! 2G + redraw + endfor + call setline(1, 'Finished. '.ecnt.' error(s).') + normal! gg + setlocal nomodifiable + if unloaded + echo "Press 'L' on each line to load plugin, or 'U' to update" + nnoremap <silent> <buffer> L :call <SID>status_load(line('.'))<cr> + xnoremap <silent> <buffer> L :call <SID>status_load(line('.'))<cr> + end +endfunction + +function! s:extract_name(str, prefix, suffix) + return matchstr(a:str, '^'.a:prefix.' \zs[^:]\+\ze:.*'.a:suffix.'$') +endfunction + +function! s:status_load(lnum) + let line = getline(a:lnum) + let name = s:extract_name(line, '-', '(not loaded)') + if !empty(name) + call plug#load(name) + setlocal modifiable + call setline(a:lnum, substitute(line, ' (not loaded)$', '', '')) + setlocal nomodifiable + endif +endfunction + +function! s:status_update() range + let lines = getline(a:firstline, a:lastline) + let names = filter(map(lines, 's:extract_name(v:val, "[x-]", "")'), '!empty(v:val)') + if !empty(names) + echo + execute 'PlugUpdate' join(names) + endif +endfunction + +function! s:is_preview_window_open() + silent! wincmd P + if &previewwindow + wincmd p + return 1 + endif +endfunction + +function! s:find_name(lnum) + for lnum in reverse(range(1, a:lnum)) + let line = getline(lnum) + if empty(line) + return '' + endif + let name = s:extract_name(line, '-', '') + if !empty(name) + return name + endif + endfor + return '' +endfunction + +function! s:preview_commit() + if b:plug_preview < 0 + let b:plug_preview = !s:is_preview_window_open() + endif + + let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-f]\{7,9}') + if empty(sha) + return + endif + + let name = s:find_name(line('.')) + if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir) + return + endif + + if exists('g:plug_pwindow') && !s:is_preview_window_open() + execute g:plug_pwindow + execute 'e' sha + else + execute 'pedit' sha + wincmd P + endif + setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable + let batchfile = '' + try + let [sh, shellcmdflag, shrd] = s:chsh(1) + let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha + if s:is_win + let [batchfile, cmd] = s:batchfile(cmd) + endif + execute 'silent %!' cmd + finally + let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] + if s:is_win && filereadable(batchfile) + call delete(batchfile) + endif + endtry + setlocal nomodifiable + nnoremap <silent> <buffer> q :q<cr> + wincmd p +endfunction + +function! s:section(flags) + call search('\(^[x-] \)\@<=[^:]\+:', a:flags) +endfunction + +function! s:format_git_log(line) + let indent = ' ' + let tokens = split(a:line, nr2char(1)) + if len(tokens) != 5 + return indent.substitute(a:line, '\s*$', '', '') + endif + let [graph, sha, refs, subject, date] = tokens + let tag = matchstr(refs, 'tag: [^,)]\+') + let tag = empty(tag) ? ' ' : ' ('.tag.') ' + return printf('%s%s%s%s%s (%s)', indent, graph, sha, tag, subject, date) +endfunction + +function! s:append_ul(lnum, text) + call append(a:lnum, ['', a:text, repeat('-', len(a:text))]) +endfunction + +function! s:diff() + call s:prepare() + call append(0, ['Collecting changes ...', '']) + let cnts = [0, 0] + let bar = '' + let total = filter(copy(g:plugs), 's:is_managed(v:key) && isdirectory(v:val.dir)') + call s:progress_bar(2, bar, len(total)) + for origin in [1, 0] + let plugs = reverse(sort(items(filter(copy(total), (origin ? '' : '!').'(has_key(v:val, "commit") || has_key(v:val, "tag"))')))) + if empty(plugs) + continue + endif + call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:') + for [k, v] in plugs + let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..' + let cmd = 'git log --graph --color=never ' + \ . (s:git_version_requirement(2, 10, 0) ? '--no-show-signature ' : '') + \ . join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 'plug#shellescape(v:val)')) + if has_key(v, 'rtp') + let cmd .= ' -- '.plug#shellescape(v.rtp) + endif + let diff = s:system_chomp(cmd, v.dir) + if !empty(diff) + let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : '' + call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)'))) + let cnts[origin] += 1 + endif + let bar .= '=' + call s:progress_bar(2, bar, len(total)) + normal! 2G + redraw + endfor + if !cnts[origin] + call append(5, ['', 'N/A']) + endif + endfor + call setline(1, printf('%d plugin(s) updated.', cnts[0]) + \ . (cnts[1] ? printf(' %d plugin(s) have pending updates.', cnts[1]) : '')) + + if cnts[0] || cnts[1] + nnoremap <silent> <buffer> <plug>(plug-preview) :silent! call <SID>preview_commit()<cr> + if empty(maparg("\<cr>", 'n')) + nmap <buffer> <cr> <plug>(plug-preview) + endif + if empty(maparg('o', 'n')) + nmap <buffer> o <plug>(plug-preview) + endif + endif + if cnts[0] + nnoremap <silent> <buffer> X :call <SID>revert()<cr> + echo "Press 'X' on each block to revert the update" + endif + normal! gg + setlocal nomodifiable +endfunction + +function! s:revert() + if search('^Pending updates', 'bnW') + return + endif + + let name = s:find_name(line('.')) + if empty(name) || !has_key(g:plugs, name) || + \ input(printf('Revert the update of %s? (y/N) ', name)) !~? '^y' + return + endif + + call s:system('git reset --hard HEAD@{1} && git checkout '.plug#shellescape(g:plugs[name].branch).' --', g:plugs[name].dir) + setlocal modifiable + normal! "_dap + setlocal nomodifiable + echo 'Reverted' +endfunction + +function! s:snapshot(force, ...) abort + call s:prepare() + setf vim + call append(0, ['" Generated by vim-plug', + \ '" '.strftime("%c"), + \ '" :source this file in vim to restore the snapshot', + \ '" or execute: vim -S snapshot.vim', + \ '', '', 'PlugUpdate!']) + 1 + let anchor = line('$') - 3 + let names = sort(keys(filter(copy(g:plugs), + \'has_key(v:val, "uri") && !has_key(v:val, "commit") && isdirectory(v:val.dir)'))) + for name in reverse(names) + let sha = s:system_chomp('git rev-parse --short HEAD', g:plugs[name].dir) + if !empty(sha) + call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha)) + redraw + endif + endfor + + if a:0 > 0 + let fn = s:plug_expand(a:1) + if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?')) + return + endif + call writefile(getline(1, '$'), fn) + echo 'Saved as '.a:1 + silent execute 'e' s:esc(fn) + setf vim + endif +endfunction + +function! s:split_rtp() + return split(&rtp, '\\\@<!,') +endfunction + +let s:first_rtp = s:escrtp(get(s:split_rtp(), 0, '')) +let s:last_rtp = s:escrtp(get(s:split_rtp(), -1, '')) + +if exists('g:plugs') + let g:plugs_order = get(g:, 'plugs_order', keys(g:plugs)) + call s:upgrade_specs() + call s:define_commands() +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/nvim/autoload/plug.vim.old b/nvim/autoload/plug.vim.old @@ -0,0 +1,2541 @@ +" vim-plug: Vim plugin manager +" ============================ +" +" Download plug.vim and put it in ~/.vim/autoload +" +" curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ +" https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim +" +" Edit your .vimrc +" +" call plug#begin('~/.vim/plugged') +" +" " Make sure you use single quotes +" +" " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align +" Plug 'junegunn/vim-easy-align' +" +" " Any valid git URL is allowed +" Plug 'https://github.com/junegunn/vim-github-dashboard.git' +" +" " Multiple Plug commands can be written in a single line using | separators +" Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' +" +" " On-demand loading +" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } +" Plug 'tpope/vim-fireplace', { 'for': 'clojure' } +" +" " Using a non-master branch +" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' } +" +" " Using a tagged release; wildcard allowed (requires git 1.9.2 or above) +" Plug 'fatih/vim-go', { 'tag': '*' } +" +" " Plugin options +" Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' } +" +" " Plugin outside ~/.vim/plugged with post-update hook +" Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } +" +" " Unmanaged plugin (manually installed and updated) +" Plug '~/my-prototype-plugin' +" +" " Initialize plugin system +" call plug#end() +" +" Then reload .vimrc and :PlugInstall to install plugins. +" +" Plug options: +" +"| Option | Description | +"| ----------------------- | ------------------------------------------------ | +"| `branch`/`tag`/`commit` | Branch/tag/commit of the repository to use | +"| `rtp` | Subdirectory that contains Vim plugin | +"| `dir` | Custom directory for the plugin | +"| `as` | Use different name for the plugin | +"| `do` | Post-update hook (string or funcref) | +"| `on` | On-demand loading: Commands or `<Plug>`-mappings | +"| `for` | On-demand loading: File types | +"| `frozen` | Do not update unless explicitly specified | +" +" More information: https://github.com/junegunn/vim-plug +" +" +" Copyright (c) 2017 Junegunn Choi +" +" MIT License +" +" Permission is hereby granted, free of charge, to any person obtaining +" a copy of this software and associated documentation files (the +" "Software"), to deal in the Software without restriction, including +" without limitation the rights to use, copy, modify, merge, publish, +" distribute, sublicense, and/or sell copies of the Software, and to +" permit persons to whom the Software is furnished to do so, subject to +" the following conditions: +" +" The above copyright notice and this permission notice shall be +" included in all copies or substantial portions of the Software. +" +" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +if exists('g:loaded_plug') + finish +endif +let g:loaded_plug = 1 + +let s:cpo_save = &cpo +set cpo&vim + +let s:plug_src = 'https://github.com/junegunn/vim-plug.git' +let s:plug_tab = get(s:, 'plug_tab', -1) +let s:plug_buf = get(s:, 'plug_buf', -1) +let s:mac_gui = has('gui_macvim') && has('gui_running') +let s:is_win = has('win32') +let s:nvim = has('nvim-0.2') || (has('nvim') && exists('*jobwait') && !s:is_win) +let s:vim8 = has('patch-8.0.0039') && exists('*job_start') +let s:me = resolve(expand('<sfile>:p')) +let s:base_spec = { 'branch': 'master', 'frozen': 0 } +let s:TYPE = { +\ 'string': type(''), +\ 'list': type([]), +\ 'dict': type({}), +\ 'funcref': type(function('call')) +\ } +let s:loaded = get(s:, 'loaded', {}) +let s:triggers = get(s:, 'triggers', {}) + +function! plug#begin(...) + if a:0 > 0 + let s:plug_home_org = a:1 + let home = s:path(fnamemodify(expand(a:1), ':p')) + elseif exists('g:plug_home') + let home = s:path(g:plug_home) + elseif !empty(&rtp) + let home = s:path(split(&rtp, ',')[0]) . '/plugged' + else + return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.') + endif + if fnamemodify(home, ':t') ==# 'plugin' && fnamemodify(home, ':h') ==# s:first_rtp + return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.') + endif + + let g:plug_home = home + let g:plugs = {} + let g:plugs_order = [] + let s:triggers = {} + + call s:define_commands() + return 1 +endfunction + +function! s:define_commands() + command! -nargs=+ -bar Plug call plug#(<args>) + if !executable('git') + return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.') + endif + command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(<bang>0, [<f-args>]) + command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(<bang>0, [<f-args>]) + command! -nargs=0 -bar -bang PlugClean call s:clean(<bang>0) + command! -nargs=0 -bar PlugUpgrade if s:upgrade() | execute 'source' s:esc(s:me) | endif + command! -nargs=0 -bar PlugStatus call s:status() + command! -nargs=0 -bar PlugDiff call s:diff() + command! -nargs=? -bar -bang -complete=file PlugSnapshot call s:snapshot(<bang>0, <f-args>) +endfunction + +function! s:to_a(v) + return type(a:v) == s:TYPE.list ? a:v : [a:v] +endfunction + +function! s:to_s(v) + return type(a:v) == s:TYPE.string ? a:v : join(a:v, "\n") . "\n" +endfunction + +function! s:glob(from, pattern) + return s:lines(globpath(a:from, a:pattern)) +endfunction + +function! s:source(from, ...) + let found = 0 + for pattern in a:000 + for vim in s:glob(a:from, pattern) + execute 'source' s:esc(vim) + let found = 1 + endfor + endfor + return found +endfunction + +function! s:assoc(dict, key, val) + let a:dict[a:key] = add(get(a:dict, a:key, []), a:val) +endfunction + +function! s:ask(message, ...) + call inputsave() + echohl WarningMsg + let answer = input(a:message.(a:0 ? ' (y/N/a) ' : ' (y/N) ')) + echohl None + call inputrestore() + echo "\r" + return (a:0 && answer =~? '^a') ? 2 : (answer =~? '^y') ? 1 : 0 +endfunction + +function! s:ask_no_interrupt(...) + try + return call('s:ask', a:000) + catch + return 0 + endtry +endfunction + +function! s:lazy(plug, opt) + return has_key(a:plug, a:opt) && + \ (empty(s:to_a(a:plug[a:opt])) || + \ !isdirectory(a:plug.dir) || + \ len(s:glob(s:rtp(a:plug), 'plugin')) || + \ len(s:glob(s:rtp(a:plug), 'after/plugin'))) +endfunction + +function! plug#end() + if !exists('g:plugs') + return s:err('Call plug#begin() first') + endif + + if exists('#PlugLOD') + augroup PlugLOD + autocmd! + augroup END + augroup! PlugLOD + endif + let lod = { 'ft': {}, 'map': {}, 'cmd': {} } + + if exists('g:did_load_filetypes') + filetype off + endif + for name in g:plugs_order + if !has_key(g:plugs, name) + continue + endif + let plug = g:plugs[name] + if get(s:loaded, name, 0) || !s:lazy(plug, 'on') && !s:lazy(plug, 'for') + let s:loaded[name] = 1 + continue + endif + + if has_key(plug, 'on') + let s:triggers[name] = { 'map': [], 'cmd': [] } + for cmd in s:to_a(plug.on) + if cmd =~? '^<Plug>.\+' + if empty(mapcheck(cmd)) && empty(mapcheck(cmd, 'i')) + call s:assoc(lod.map, cmd, name) + endif + call add(s:triggers[name].map, cmd) + elseif cmd =~# '^[A-Z]' + let cmd = substitute(cmd, '!*$', '', '') + if exists(':'.cmd) != 2 + call s:assoc(lod.cmd, cmd, name) + endif + call add(s:triggers[name].cmd, cmd) + else + call s:err('Invalid `on` option: '.cmd. + \ '. Should start with an uppercase letter or `<Plug>`.') + endif + endfor + endif + + if has_key(plug, 'for') + let types = s:to_a(plug.for) + if !empty(types) + augroup filetypedetect + call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim') + augroup END + endif + for type in types + call s:assoc(lod.ft, type, name) + endfor + endif + endfor + + for [cmd, names] in items(lod.cmd) + execute printf( + \ 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, %s)', + \ cmd, string(cmd), string(names)) + endfor + + for [map, names] in items(lod.map) + for [mode, map_prefix, key_prefix] in + \ [['i', '<C-O>', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']] + execute printf( + \ '%snoremap <silent> %s %s:<C-U>call <SID>lod_map(%s, %s, %s, "%s")<CR>', + \ mode, map, map_prefix, string(map), string(names), mode != 'i', key_prefix) + endfor + endfor + + for [ft, names] in items(lod.ft) + augroup PlugLOD + execute printf('autocmd FileType %s call <SID>lod_ft(%s, %s)', + \ ft, string(ft), string(names)) + augroup END + endfor + + call s:reorg_rtp() + filetype plugin indent on + if has('vim_starting') + if has('syntax') && !exists('g:syntax_on') + syntax enable + end + else + call s:reload_plugins() + endif +endfunction + +function! s:loaded_names() + return filter(copy(g:plugs_order), 'get(s:loaded, v:val, 0)') +endfunction + +function! s:load_plugin(spec) + call s:source(s:rtp(a:spec), 'plugin/**/*.vim', 'after/plugin/**/*.vim') +endfunction + +function! s:reload_plugins() + for name in s:loaded_names() + call s:load_plugin(g:plugs[name]) + endfor +endfunction + +function! s:trim(str) + return substitute(a:str, '[\/]\+$', '', '') +endfunction + +function! s:version_requirement(val, min) + for idx in range(0, len(a:min) - 1) + let v = get(a:val, idx, 0) + if v < a:min[idx] | return 0 + elseif v > a:min[idx] | return 1 + endif + endfor + return 1 +endfunction + +function! s:git_version_requirement(...) + if !exists('s:git_version') + let s:git_version = map(split(split(s:system('git --version'))[2], '\.'), 'str2nr(v:val)') + endif + return s:version_requirement(s:git_version, a:000) +endfunction + +function! s:progress_opt(base) + return a:base && !s:is_win && + \ s:git_version_requirement(1, 7, 1) ? '--progress' : '' +endfunction + +function! s:rtp(spec) + return s:path(a:spec.dir . get(a:spec, 'rtp', '')) +endfunction + +if s:is_win + function! s:path(path) + return s:trim(substitute(a:path, '/', '\', 'g')) + endfunction + + function! s:dirpath(path) + return s:path(a:path) . '\' + endfunction + + function! s:is_local_plug(repo) + return a:repo =~? '^[a-z]:\|^[%~]' + endfunction + + " Copied from fzf + function! s:wrap_cmds(cmds) + let use_chcp = executable('sed') + return map([ + \ '@echo off', + \ 'setlocal enabledelayedexpansion'] + \ + (use_chcp ? [ + \ 'for /f "usebackq" %%a in (`chcp ^| sed "s/[^0-9]//gp"`) do set origchcp=%%a', + \ 'chcp 65001 > nul'] : []) + \ + (type(a:cmds) == type([]) ? a:cmds : [a:cmds]) + \ + (use_chcp ? ['chcp !origchcp! > nul'] : []) + \ + ['endlocal'], + \ 'v:val."\r"') + endfunction + + function! s:batchfile(cmd) + let batchfile = tempname().'.bat' + call writefile(s:wrap_cmds(a:cmd), batchfile) + let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 1}) + if &shell =~# 'powershell\.exe$' + let cmd = '& ' . cmd + endif + return [batchfile, cmd] + endfunction +else + function! s:path(path) + return s:trim(a:path) + endfunction + + function! s:dirpath(path) + return substitute(a:path, '[/\\]*$', '/', '') + endfunction + + function! s:is_local_plug(repo) + return a:repo[0] =~ '[/$~]' + endfunction +endif + +function! s:err(msg) + echohl ErrorMsg + echom '[vim-plug] '.a:msg + echohl None +endfunction + +function! s:warn(cmd, msg) + echohl WarningMsg + execute a:cmd 'a:msg' + echohl None +endfunction + +function! s:esc(path) + return escape(a:path, ' ') +endfunction + +function! s:escrtp(path) + return escape(a:path, ' ,') +endfunction + +function! s:remove_rtp() + for name in s:loaded_names() + let rtp = s:rtp(g:plugs[name]) + execute 'set rtp-='.s:escrtp(rtp) + let after = globpath(rtp, 'after') + if isdirectory(after) + execute 'set rtp-='.s:escrtp(after) + endif + endfor +endfunction + +function! s:reorg_rtp() + if !empty(s:first_rtp) + execute 'set rtp-='.s:first_rtp + execute 'set rtp-='.s:last_rtp + endif + + " &rtp is modified from outside + if exists('s:prtp') && s:prtp !=# &rtp + call s:remove_rtp() + unlet! s:middle + endif + + let s:middle = get(s:, 'middle', &rtp) + let rtps = map(s:loaded_names(), 's:rtp(g:plugs[v:val])') + let afters = filter(map(copy(rtps), 'globpath(v:val, "after")'), '!empty(v:val)') + let rtp = join(map(rtps, 'escape(v:val, ",")'), ',') + \ . ','.s:middle.',' + \ . join(map(afters, 'escape(v:val, ",")'), ',') + let &rtp = substitute(substitute(rtp, ',,*', ',', 'g'), '^,\|,$', '', 'g') + let s:prtp = &rtp + + if !empty(s:first_rtp) + execute 'set rtp^='.s:first_rtp + execute 'set rtp+='.s:last_rtp + endif +endfunction + +function! s:doautocmd(...) + if exists('#'.join(a:000, '#')) + execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '<nomodeline>' : '') join(a:000) + endif +endfunction + +function! s:dobufread(names) + for name in a:names + let path = s:rtp(g:plugs[name]) + for dir in ['ftdetect', 'ftplugin', 'after/ftdetect', 'after/ftplugin'] + if len(finddir(dir, path)) + if exists('#BufRead') + doautocmd BufRead + endif + return + endif + endfor + endfor +endfunction + +function! plug#load(...) + if a:0 == 0 + return s:err('Argument missing: plugin name(s) required') + endif + if !exists('g:plugs') + return s:err('plug#begin was not called') + endif + let names = a:0 == 1 && type(a:1) == s:TYPE.list ? a:1 : a:000 + let unknowns = filter(copy(names), '!has_key(g:plugs, v:val)') + if !empty(unknowns) + let s = len(unknowns) > 1 ? 's' : '' + return s:err(printf('Unknown plugin%s: %s', s, join(unknowns, ', '))) + end + let unloaded = filter(copy(names), '!get(s:loaded, v:val, 0)') + if !empty(unloaded) + for name in unloaded + call s:lod([name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + endfor + call s:dobufread(unloaded) + return 1 + end + return 0 +endfunction + +function! s:remove_triggers(name) + if !has_key(s:triggers, a:name) + return + endif + for cmd in s:triggers[a:name].cmd + execute 'silent! delc' cmd + endfor + for map in s:triggers[a:name].map + execute 'silent! unmap' map + execute 'silent! iunmap' map + endfor + call remove(s:triggers, a:name) +endfunction + +function! s:lod(names, types, ...) + for name in a:names + call s:remove_triggers(name) + let s:loaded[name] = 1 + endfor + call s:reorg_rtp() + + for name in a:names + let rtp = s:rtp(g:plugs[name]) + for dir in a:types + call s:source(rtp, dir.'/**/*.vim') + endfor + if a:0 + if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2)) + execute 'runtime' a:1 + endif + call s:source(rtp, a:2) + endif + call s:doautocmd('User', name) + endfor +endfunction + +function! s:lod_ft(pat, names) + let syn = 'syntax/'.a:pat.'.vim' + call s:lod(a:names, ['plugin', 'after/plugin'], syn, 'after/'.syn) + execute 'autocmd! PlugLOD FileType' a:pat + call s:doautocmd('filetypeplugin', 'FileType') + call s:doautocmd('filetypeindent', 'FileType') +endfunction + +function! s:lod_cmd(cmd, bang, l1, l2, args, names) + call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + call s:dobufread(a:names) + execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args) +endfunction + +function! s:lod_map(map, names, with_prefix, prefix) + call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + call s:dobufread(a:names) + let extra = '' + while 1 + let c = getchar(0) + if c == 0 + break + endif + let extra .= nr2char(c) + endwhile + + if a:with_prefix + let prefix = v:count ? v:count : '' + let prefix .= '"'.v:register.a:prefix + if mode(1) == 'no' + if v:operator == 'c' + let prefix = "\<esc>" . prefix + endif + let prefix .= v:operator + endif + call feedkeys(prefix, 'n') + endif + call feedkeys(substitute(a:map, '^<Plug>', "\<Plug>", '') . extra) +endfunction + +function! plug#(repo, ...) + if a:0 > 1 + return s:err('Invalid number of arguments (1..2)') + endif + + try + let repo = s:trim(a:repo) + let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec + let name = get(opts, 'as', fnamemodify(repo, ':t:s?\.git$??')) + let spec = extend(s:infer_properties(name, repo), opts) + if !has_key(g:plugs, name) + call add(g:plugs_order, name) + endif + let g:plugs[name] = spec + let s:loaded[name] = get(s:loaded, name, 0) + catch + return s:err(v:exception) + endtry +endfunction + +function! s:parse_options(arg) + let opts = copy(s:base_spec) + let type = type(a:arg) + if type == s:TYPE.string + let opts.tag = a:arg + elseif type == s:TYPE.dict + call extend(opts, a:arg) + if has_key(opts, 'dir') + let opts.dir = s:dirpath(expand(opts.dir)) + endif + else + throw 'Invalid argument type (expected: string or dictionary)' + endif + return opts +endfunction + +function! s:infer_properties(name, repo) + let repo = a:repo + if s:is_local_plug(repo) + return { 'dir': s:dirpath(expand(repo)) } + else + if repo =~ ':' + let uri = repo + else + if repo !~ '/' + throw printf('Invalid argument: %s (implicit `vim-scripts'' expansion is deprecated)', repo) + endif + let fmt = get(g:, 'plug_url_format', 'https://git::@github.com/%s.git') + let uri = printf(fmt, repo) + endif + return { 'dir': s:dirpath(g:plug_home.'/'.a:name), 'uri': uri } + endif +endfunction + +function! s:install(force, names) + call s:update_impl(0, a:force, a:names) +endfunction + +function! s:update(force, names) + call s:update_impl(1, a:force, a:names) +endfunction + +function! plug#helptags() + if !exists('g:plugs') + return s:err('plug#begin was not called') + endif + for spec in values(g:plugs) + let docd = join([s:rtp(spec), 'doc'], '/') + if isdirectory(docd) + silent! execute 'helptags' s:esc(docd) + endif + endfor + return 1 +endfunction + +function! s:syntax() + syntax clear + syntax region plug1 start=/\%1l/ end=/\%2l/ contains=plugNumber + syntax region plug2 start=/\%2l/ end=/\%3l/ contains=plugBracket,plugX + syn match plugNumber /[0-9]\+[0-9.]*/ contained + syn match plugBracket /[[\]]/ contained + syn match plugX /x/ contained + syn match plugDash /^-/ + syn match plugPlus /^+/ + syn match plugStar /^*/ + syn match plugMessage /\(^- \)\@<=.*/ + syn match plugName /\(^- \)\@<=[^ ]*:/ + syn match plugSha /\%(: \)\@<=[0-9a-f]\{4,}$/ + syn match plugTag /(tag: [^)]\+)/ + syn match plugInstall /\(^+ \)\@<=[^:]*/ + syn match plugUpdate /\(^* \)\@<=[^:]*/ + syn match plugCommit /^ \X*[0-9a-f]\{7,9} .*/ contains=plugRelDate,plugEdge,plugTag + syn match plugEdge /^ \X\+$/ + syn match plugEdge /^ \X*/ contained nextgroup=plugSha + syn match plugSha /[0-9a-f]\{7,9}/ contained + syn match plugRelDate /([^)]*)$/ contained + syn match plugNotLoaded /(not loaded)$/ + syn match plugError /^x.*/ + syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/ + syn match plugH2 /^.*:\n-\+$/ + syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean + hi def link plug1 Title + hi def link plug2 Repeat + hi def link plugH2 Type + hi def link plugX Exception + hi def link plugBracket Structure + hi def link plugNumber Number + + hi def link plugDash Special + hi def link plugPlus Constant + hi def link plugStar Boolean + + hi def link plugMessage Function + hi def link plugName Label + hi def link plugInstall Function + hi def link plugUpdate Type + + hi def link plugError Error + hi def link plugDeleted Ignore + hi def link plugRelDate Comment + hi def link plugEdge PreProc + hi def link plugSha Identifier + hi def link plugTag Constant + + hi def link plugNotLoaded Comment +endfunction + +function! s:lpad(str, len) + return a:str . repeat(' ', a:len - len(a:str)) +endfunction + +function! s:lines(msg) + return split(a:msg, "[\r\n]") +endfunction + +function! s:lastline(msg) + return get(s:lines(a:msg), -1, '') +endfunction + +function! s:new_window() + execute get(g:, 'plug_window', 'vertical topleft new') +endfunction + +function! s:plug_window_exists() + let buflist = tabpagebuflist(s:plug_tab) + return !empty(buflist) && index(buflist, s:plug_buf) >= 0 +endfunction + +function! s:switch_in() + if !s:plug_window_exists() + return 0 + endif + + if winbufnr(0) != s:plug_buf + let s:pos = [tabpagenr(), winnr(), winsaveview()] + execute 'normal!' s:plug_tab.'gt' + let winnr = bufwinnr(s:plug_buf) + execute winnr.'wincmd w' + call add(s:pos, winsaveview()) + else + let s:pos = [winsaveview()] + endif + + setlocal modifiable + return 1 +endfunction + +function! s:switch_out(...) + call winrestview(s:pos[-1]) + setlocal nomodifiable + if a:0 > 0 + execute a:1 + endif + + if len(s:pos) > 1 + execute 'normal!' s:pos[0].'gt' + execute s:pos[1] 'wincmd w' + call winrestview(s:pos[2]) + endif +endfunction + +function! s:finish_bindings() + nnoremap <silent> <buffer> R :call <SID>retry()<cr> + nnoremap <silent> <buffer> D :PlugDiff<cr> + nnoremap <silent> <buffer> S :PlugStatus<cr> + nnoremap <silent> <buffer> U :call <SID>status_update()<cr> + xnoremap <silent> <buffer> U :call <SID>status_update()<cr> + nnoremap <silent> <buffer> ]] :silent! call <SID>section('')<cr> + nnoremap <silent> <buffer> [[ :silent! call <SID>section('b')<cr> +endfunction + +function! s:prepare(...) + if empty(getcwd()) + throw 'Invalid current working directory. Cannot proceed.' + endif + + for evar in ['$GIT_DIR', '$GIT_WORK_TREE'] + if exists(evar) + throw evar.' detected. Cannot proceed.' + endif + endfor + + call s:job_abort() + if s:switch_in() + if b:plug_preview == 1 + pc + endif + enew + else + call s:new_window() + endif + + nnoremap <silent> <buffer> q :if b:plug_preview==1<bar>pc<bar>endif<bar>bd<cr> + if a:0 == 0 + call s:finish_bindings() + endif + let b:plug_preview = -1 + let s:plug_tab = tabpagenr() + let s:plug_buf = winbufnr(0) + call s:assign_name() + + for k in ['<cr>', 'L', 'o', 'X', 'd', 'dd'] + execute 'silent! unmap <buffer>' k + endfor + setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline modifiable nospell + if exists('+colorcolumn') + setlocal colorcolumn= + endif + setf vim-plug + if exists('g:syntax_on') + call s:syntax() + endif +endfunction + +function! s:assign_name() + " Assign buffer name + let prefix = '[Plugins]' + let name = prefix + let idx = 2 + while bufexists(name) + let name = printf('%s (%s)', prefix, idx) + let idx = idx + 1 + endwhile + silent! execute 'f' fnameescape(name) +endfunction + +function! s:chsh(swap) + let prev = [&shell, &shellcmdflag, &shellredir] + if !s:is_win && a:swap + set shell=sh shellredir=>%s\ 2>&1 + endif + return prev +endfunction + +function! s:bang(cmd, ...) + let batchfile = '' + try + let [sh, shellcmdflag, shrd] = s:chsh(a:0) + " FIXME: Escaping is incomplete. We could use shellescape with eval, + " but it won't work on Windows. + let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd + if s:is_win + let [batchfile, cmd] = s:batchfile(cmd) + endif + let g:_plug_bang = (s:is_win && has('gui_running') ? 'silent ' : '').'!'.escape(cmd, '#!%') + execute "normal! :execute g:_plug_bang\<cr>\<cr>" + finally + unlet g:_plug_bang + let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] + if s:is_win && filereadable(batchfile) + call delete(batchfile) + endif + endtry + return v:shell_error ? 'Exit status: ' . v:shell_error : '' +endfunction + +function! s:regress_bar() + let bar = substitute(getline(2)[1:-2], '.*\zs=', 'x', '') + call s:progress_bar(2, bar, len(bar)) +endfunction + +function! s:is_updated(dir) + return !empty(s:system_chomp('git log --pretty=format:"%h" "HEAD...HEAD@{1}"', a:dir)) +endfunction + +function! s:do(pull, force, todo) + for [name, spec] in items(a:todo) + if !isdirectory(spec.dir) + continue + endif + let installed = has_key(s:update.new, name) + let updated = installed ? 0 : + \ (a:pull && index(s:update.errors, name) < 0 && s:is_updated(spec.dir)) + if a:force || installed || updated + execute 'cd' s:esc(spec.dir) + call append(3, '- Post-update hook for '. name .' ... ') + let error = '' + let type = type(spec.do) + if type == s:TYPE.string + if spec.do[0] == ':' + if !get(s:loaded, name, 0) + let s:loaded[name] = 1 + call s:reorg_rtp() + endif + call s:load_plugin(spec) + try + execute spec.do[1:] + catch + let error = v:exception + endtry + if !s:plug_window_exists() + cd - + throw 'Warning: vim-plug was terminated by the post-update hook of '.name + endif + else + let error = s:bang(spec.do) + endif + elseif type == s:TYPE.funcref + try + let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged') + call spec.do({ 'name': name, 'status': status, 'force': a:force }) + catch + let error = v:exception + endtry + else + let error = 'Invalid hook type' + endif + call s:switch_in() + call setline(4, empty(error) ? (getline(4) . 'OK') + \ : ('x' . getline(4)[1:] . error)) + if !empty(error) + call add(s:update.errors, name) + call s:regress_bar() + endif + cd - + endif + endfor +endfunction + +function! s:hash_match(a, b) + return stridx(a:a, a:b) == 0 || stridx(a:b, a:a) == 0 +endfunction + +function! s:checkout(spec) + let sha = a:spec.commit + let output = s:system('git rev-parse HEAD', a:spec.dir) + if !v:shell_error && !s:hash_match(sha, s:lines(output)[0]) + let output = s:system( + \ 'git fetch --depth 999999 && git checkout '.s:esc(sha).' --', a:spec.dir) + endif + return output +endfunction + +function! s:finish(pull) + let new_frozen = len(filter(keys(s:update.new), 'g:plugs[v:val].frozen')) + if new_frozen + let s = new_frozen > 1 ? 's' : '' + call append(3, printf('- Installed %d frozen plugin%s', new_frozen, s)) + endif + call append(3, '- Finishing ... ') | 4 + redraw + call plug#helptags() + call plug#end() + call setline(4, getline(4) . 'Done!') + redraw + let msgs = [] + if !empty(s:update.errors) + call add(msgs, "Press 'R' to retry.") + endif + if a:pull && len(s:update.new) < len(filter(getline(5, '$'), + \ "v:val =~ '^- ' && v:val !~# 'Already up.to.date'")) + call add(msgs, "Press 'D' to see the updated changes.") + endif + echo join(msgs, ' ') + call s:finish_bindings() +endfunction + +function! s:retry() + if empty(s:update.errors) + return + endif + echo + call s:update_impl(s:update.pull, s:update.force, + \ extend(copy(s:update.errors), [s:update.threads])) +endfunction + +function! s:is_managed(name) + return has_key(g:plugs[a:name], 'uri') +endfunction + +function! s:names(...) + return sort(filter(keys(g:plugs), 'stridx(v:val, a:1) == 0 && s:is_managed(v:val)')) +endfunction + +function! s:check_ruby() + silent! ruby require 'thread'; VIM::command("let g:plug_ruby = '#{RUBY_VERSION}'") + if !exists('g:plug_ruby') + redraw! + return s:warn('echom', 'Warning: Ruby interface is broken') + endif + let ruby_version = split(g:plug_ruby, '\.') + unlet g:plug_ruby + return s:version_requirement(ruby_version, [1, 8, 7]) +endfunction + +function! s:update_impl(pull, force, args) abort + let sync = index(a:args, '--sync') >= 0 || has('vim_starting') + let args = filter(copy(a:args), 'v:val != "--sync"') + let threads = (len(args) > 0 && args[-1] =~ '^[1-9][0-9]*$') ? + \ remove(args, -1) : get(g:, 'plug_threads', 16) + + let managed = filter(copy(g:plugs), 's:is_managed(v:key)') + let todo = empty(args) ? filter(managed, '!v:val.frozen || !isdirectory(v:val.dir)') : + \ filter(managed, 'index(args, v:key) >= 0') + + if empty(todo) + return s:warn('echo', 'No plugin to '. (a:pull ? 'update' : 'install')) + endif + + if !s:is_win && s:git_version_requirement(2, 3) + let s:git_terminal_prompt = exists('$GIT_TERMINAL_PROMPT') ? $GIT_TERMINAL_PROMPT : '' + let $GIT_TERMINAL_PROMPT = 0 + for plug in values(todo) + let plug.uri = substitute(plug.uri, + \ '^https://git::@github\.com', 'https://github.com', '') + endfor + endif + + if !isdirectory(g:plug_home) + try + call mkdir(g:plug_home, 'p') + catch + return s:err(printf('Invalid plug directory: %s. '. + \ 'Try to call plug#begin with a valid directory', g:plug_home)) + endtry + endif + + if has('nvim') && !exists('*jobwait') && threads > 1 + call s:warn('echom', '[vim-plug] Update Neovim for parallel installer') + endif + + let use_job = s:nvim || s:vim8 + let python = (has('python') || has('python3')) && !use_job + let ruby = has('ruby') && !use_job && (v:version >= 703 || v:version == 702 && has('patch374')) && !(s:is_win && has('gui_running')) && threads > 1 && s:check_ruby() + + let s:update = { + \ 'start': reltime(), + \ 'all': todo, + \ 'todo': copy(todo), + \ 'errors': [], + \ 'pull': a:pull, + \ 'force': a:force, + \ 'new': {}, + \ 'threads': (python || ruby || use_job) ? min([len(todo), threads]) : 1, + \ 'bar': '', + \ 'fin': 0 + \ } + + call s:prepare(1) + call append(0, ['', '']) + normal! 2G + silent! redraw + + let s:clone_opt = get(g:, 'plug_shallow', 1) ? + \ '--depth 1' . (s:git_version_requirement(1, 7, 10) ? ' --no-single-branch' : '') : '' + + if has('win32unix') || has('wsl') + let s:clone_opt .= ' -c core.eol=lf -c core.autocrlf=input' + endif + + let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : '' + + " Python version requirement (>= 2.7) + if python && !has('python3') && !ruby && !use_job && s:update.threads > 1 + redir => pyv + silent python import platform; print platform.python_version() + redir END + let python = s:version_requirement( + \ map(split(split(pyv)[0], '\.'), 'str2nr(v:val)'), [2, 6]) + endif + + if (python || ruby) && s:update.threads > 1 + try + let imd = &imd + if s:mac_gui + set noimd + endif + if ruby + call s:update_ruby() + else + call s:update_python() + endif + catch + let lines = getline(4, '$') + let printed = {} + silent! 4,$d _ + for line in lines + let name = s:extract_name(line, '.', '') + if empty(name) || !has_key(printed, name) + call append('$', line) + if !empty(name) + let printed[name] = 1 + if line[0] == 'x' && index(s:update.errors, name) < 0 + call add(s:update.errors, name) + end + endif + endif + endfor + finally + let &imd = imd + call s:update_finish() + endtry + else + call s:update_vim() + while use_job && sync + sleep 100m + if s:update.fin + break + endif + endwhile + endif +endfunction + +function! s:log4(name, msg) + call setline(4, printf('- %s (%s)', a:msg, a:name)) + redraw +endfunction + +function! s:update_finish() + if exists('s:git_terminal_prompt') + let $GIT_TERMINAL_PROMPT = s:git_terminal_prompt + endif + if s:switch_in() + call append(3, '- Updating ...') | 4 + for [name, spec] in items(filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && (s:update.force || s:update.pull || has_key(s:update.new, v:key))')) + let [pos, _] = s:logpos(name) + if !pos + continue + endif + if has_key(spec, 'commit') + call s:log4(name, 'Checking out '.spec.commit) + let out = s:checkout(spec) + elseif has_key(spec, 'tag') + let tag = spec.tag + if tag =~ '\*' + let tags = s:lines(s:system('git tag --list '.plug#shellescape(tag).' --sort -version:refname 2>&1', spec.dir)) + if !v:shell_error && !empty(tags) + let tag = tags[0] + call s:log4(name, printf('Latest tag for %s -> %s', spec.tag, tag)) + call append(3, '') + endif + endif + call s:log4(name, 'Checking out '.tag) + let out = s:system('git checkout -q '.s:esc(tag).' -- 2>&1', spec.dir) + else + let branch = s:esc(get(spec, 'branch', 'master')) + call s:log4(name, 'Merging origin/'.branch) + let out = s:system('git checkout -q '.branch.' -- 2>&1' + \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only origin/'.branch.' 2>&1')), spec.dir) + endif + if !v:shell_error && filereadable(spec.dir.'/.gitmodules') && + \ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir)) + call s:log4(name, 'Updating submodules. This may take a while.') + let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir) + endif + let msg = s:format_message(v:shell_error ? 'x': '-', name, out) + if v:shell_error + call add(s:update.errors, name) + call s:regress_bar() + silent execute pos 'd _' + call append(4, msg) | 4 + elseif !empty(out) + call setline(pos, msg[0]) + endif + redraw + endfor + silent 4 d _ + try + call s:do(s:update.pull, s:update.force, filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && has_key(v:val, "do")')) + catch + call s:warn('echom', v:exception) + call s:warn('echo', '') + return + endtry + call s:finish(s:update.pull) + call setline(1, 'Updated. Elapsed time: ' . split(reltimestr(reltime(s:update.start)))[0] . ' sec.') + call s:switch_out('normal! gg') + endif +endfunction + +function! s:job_abort() + if (!s:nvim && !s:vim8) || !exists('s:jobs') + return + endif + + for [name, j] in items(s:jobs) + if s:nvim + silent! call jobstop(j.jobid) + elseif s:vim8 + silent! call job_stop(j.jobid) + endif + if j.new + call s:system('rm -rf ' . plug#shellescape(g:plugs[name].dir)) + endif + endfor + let s:jobs = {} +endfunction + +function! s:last_non_empty_line(lines) + let len = len(a:lines) + for idx in range(len) + let line = a:lines[len-idx-1] + if !empty(line) + return line + endif + endfor + return '' +endfunction + +function! s:job_out_cb(self, data) abort + let self = a:self + let data = remove(self.lines, -1) . a:data + let lines = map(split(data, "\n", 1), 'split(v:val, "\r", 1)[-1]') + call extend(self.lines, lines) + " To reduce the number of buffer updates + let self.tick = get(self, 'tick', -1) + 1 + if !self.running || self.tick % len(s:jobs) == 0 + let bullet = self.running ? (self.new ? '+' : '*') : (self.error ? 'x' : '-') + let result = self.error ? join(self.lines, "\n") : s:last_non_empty_line(self.lines) + call s:log(bullet, self.name, result) + endif +endfunction + +function! s:job_exit_cb(self, data) abort + let a:self.running = 0 + let a:self.error = a:data != 0 + call s:reap(a:self.name) + call s:tick() +endfunction + +function! s:job_cb(fn, job, ch, data) + if !s:plug_window_exists() " plug window closed + return s:job_abort() + endif + call call(a:fn, [a:job, a:data]) +endfunction + +function! s:nvim_cb(job_id, data, event) dict abort + return a:event == 'stdout' ? + \ s:job_cb('s:job_out_cb', self, 0, join(a:data, "\n")) : + \ s:job_cb('s:job_exit_cb', self, 0, a:data) +endfunction + +function! s:spawn(name, cmd, opts) + let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''], + \ 'new': get(a:opts, 'new', 0) } + let s:jobs[a:name] = job + let cmd = has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir, 0) : a:cmd + let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd] + + if s:nvim + call extend(job, { + \ 'on_stdout': function('s:nvim_cb'), + \ 'on_exit': function('s:nvim_cb'), + \ }) + let jid = jobstart(argv, job) + if jid > 0 + let job.jobid = jid + else + let job.running = 0 + let job.error = 1 + let job.lines = [jid < 0 ? argv[0].' is not executable' : + \ 'Invalid arguments (or job table is full)'] + endif + elseif s:vim8 + let jid = job_start(s:is_win ? join(argv, ' ') : argv, { + \ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]), + \ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]), + \ 'out_mode': 'raw' + \}) + if job_status(jid) == 'run' + let job.jobid = jid + else + let job.running = 0 + let job.error = 1 + let job.lines = ['Failed to start job'] + endif + else + let job.lines = s:lines(call('s:system', [cmd])) + let job.error = v:shell_error != 0 + let job.running = 0 + endif +endfunction + +function! s:reap(name) + let job = s:jobs[a:name] + if job.error + call add(s:update.errors, a:name) + elseif get(job, 'new', 0) + let s:update.new[a:name] = 1 + endif + let s:update.bar .= job.error ? 'x' : '=' + + let bullet = job.error ? 'x' : '-' + let result = job.error ? join(job.lines, "\n") : s:last_non_empty_line(job.lines) + call s:log(bullet, a:name, empty(result) ? 'OK' : result) + call s:bar() + + call remove(s:jobs, a:name) +endfunction + +function! s:bar() + if s:switch_in() + let total = len(s:update.all) + call setline(1, (s:update.pull ? 'Updating' : 'Installing'). + \ ' plugins ('.len(s:update.bar).'/'.total.')') + call s:progress_bar(2, s:update.bar, total) + call s:switch_out() + endif +endfunction + +function! s:logpos(name) + for i in range(4, line('$')) + if getline(i) =~# '^[-+x*] '.a:name.':' + for j in range(i + 1, line('$')) + if getline(j) !~ '^ ' + return [i, j - 1] + endif + endfor + return [i, i] + endif + endfor + return [0, 0] +endfunction + +function! s:log(bullet, name, lines) + if s:switch_in() + let [b, e] = s:logpos(a:name) + if b > 0 + silent execute printf('%d,%d d _', b, e) + if b > winheight('.') + let b = 4 + endif + else + let b = 4 + endif + " FIXME For some reason, nomodifiable is set after :d in vim8 + setlocal modifiable + call append(b - 1, s:format_message(a:bullet, a:name, a:lines)) + call s:switch_out() + endif +endfunction + +function! s:update_vim() + let s:jobs = {} + + call s:bar() + call s:tick() +endfunction + +function! s:tick() + let pull = s:update.pull + let prog = s:progress_opt(s:nvim || s:vim8) +while 1 " Without TCO, Vim stack is bound to explode + if empty(s:update.todo) + if empty(s:jobs) && !s:update.fin + call s:update_finish() + let s:update.fin = 1 + endif + return + endif + + let name = keys(s:update.todo)[0] + let spec = remove(s:update.todo, name) + let new = empty(globpath(spec.dir, '.git', 1)) + + call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...') + redraw + + let has_tag = has_key(spec, 'tag') + if !new + let [error, _] = s:git_validate(spec, 0) + if empty(error) + if pull + let fetch_opt = (has_tag && !empty(globpath(spec.dir, '.git/shallow'))) ? '--depth 99999999' : '' + call s:spawn(name, printf('git fetch %s %s 2>&1', fetch_opt, prog), { 'dir': spec.dir }) + else + let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 } + endif + else + let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 } + endif + else + call s:spawn(name, + \ printf('git clone %s %s %s %s 2>&1', + \ has_tag ? '' : s:clone_opt, + \ prog, + \ plug#shellescape(spec.uri, {'script': 0}), + \ plug#shellescape(s:trim(spec.dir), {'script': 0})), { 'new': 1 }) + endif + + if !s:jobs[name].running + call s:reap(name) + endif + if len(s:jobs) >= s:update.threads + break + endif +endwhile +endfunction + +function! s:update_python() +let py_exe = has('python') ? 'python' : 'python3' +execute py_exe "<< EOF" +import datetime +import functools +import os +try: + import queue +except ImportError: + import Queue as queue +import random +import re +import shutil +import signal +import subprocess +import tempfile +import threading as thr +import time +import traceback +import vim + +G_NVIM = vim.eval("has('nvim')") == '1' +G_PULL = vim.eval('s:update.pull') == '1' +G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1 +G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)')) +G_CLONE_OPT = vim.eval('s:clone_opt') +G_PROGRESS = vim.eval('s:progress_opt(1)') +G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads')) +G_STOP = thr.Event() +G_IS_WIN = vim.eval('s:is_win') == '1' + +class PlugError(Exception): + def __init__(self, msg): + self.msg = msg +class CmdTimedOut(PlugError): + pass +class CmdFailed(PlugError): + pass +class InvalidURI(PlugError): + pass +class Action(object): + INSTALL, UPDATE, ERROR, DONE = ['+', '*', 'x', '-'] + +class Buffer(object): + def __init__(self, lock, num_plugs, is_pull): + self.bar = '' + self.event = 'Updating' if is_pull else 'Installing' + self.lock = lock + self.maxy = int(vim.eval('winheight(".")')) + self.num_plugs = num_plugs + + def __where(self, name): + """ Find first line with name in current buffer. Return line num. """ + found, lnum = False, 0 + matcher = re.compile('^[-+x*] {0}:'.format(name)) + for line in vim.current.buffer: + if matcher.search(line) is not None: + found = True + break + lnum += 1 + + if not found: + lnum = -1 + return lnum + + def header(self): + curbuf = vim.current.buffer + curbuf[0] = self.event + ' plugins ({0}/{1})'.format(len(self.bar), self.num_plugs) + + num_spaces = self.num_plugs - len(self.bar) + curbuf[1] = '[{0}{1}]'.format(self.bar, num_spaces * ' ') + + with self.lock: + vim.command('normal! 2G') + vim.command('redraw') + + def write(self, action, name, lines): + first, rest = lines[0], lines[1:] + msg = ['{0} {1}{2}{3}'.format(action, name, ': ' if first else '', first)] + msg.extend([' ' + line for line in rest]) + + try: + if action == Action.ERROR: + self.bar += 'x' + vim.command("call add(s:update.errors, '{0}')".format(name)) + elif action == Action.DONE: + self.bar += '=' + + curbuf = vim.current.buffer + lnum = self.__where(name) + if lnum != -1: # Found matching line num + del curbuf[lnum] + if lnum > self.maxy and action in set([Action.INSTALL, Action.UPDATE]): + lnum = 3 + else: + lnum = 3 + curbuf.append(msg, lnum) + + self.header() + except vim.error: + pass + +class Command(object): + CD = 'cd /d' if G_IS_WIN else 'cd' + + def __init__(self, cmd, cmd_dir=None, timeout=60, cb=None, clean=None): + self.cmd = cmd + if cmd_dir: + self.cmd = '{0} {1} && {2}'.format(Command.CD, cmd_dir, self.cmd) + self.timeout = timeout + self.callback = cb if cb else (lambda msg: None) + self.clean = clean if clean else (lambda: None) + self.proc = None + + @property + def alive(self): + """ Returns true only if command still running. """ + return self.proc and self.proc.poll() is None + + def execute(self, ntries=3): + """ Execute the command with ntries if CmdTimedOut. + Returns the output of the command if no Exception. + """ + attempt, finished, limit = 0, False, self.timeout + + while not finished: + try: + attempt += 1 + result = self.try_command() + finished = True + return result + except CmdTimedOut: + if attempt != ntries: + self.notify_retry() + self.timeout += limit + else: + raise + + def notify_retry(self): + """ Retry required for command, notify user. """ + for count in range(3, 0, -1): + if G_STOP.is_set(): + raise KeyboardInterrupt + msg = 'Timeout. Will retry in {0} second{1} ...'.format( + count, 's' if count != 1 else '') + self.callback([msg]) + time.sleep(1) + self.callback(['Retrying ...']) + + def try_command(self): + """ Execute a cmd & poll for callback. Returns list of output. + Raises CmdFailed -> return code for Popen isn't 0 + Raises CmdTimedOut -> command exceeded timeout without new output + """ + first_line = True + + try: + tfile = tempfile.NamedTemporaryFile(mode='w+b') + preexec_fn = not G_IS_WIN and os.setsid or None + self.proc = subprocess.Popen(self.cmd, stdout=tfile, + stderr=subprocess.STDOUT, + stdin=subprocess.PIPE, shell=True, + preexec_fn=preexec_fn) + thrd = thr.Thread(target=(lambda proc: proc.wait()), args=(self.proc,)) + thrd.start() + + thread_not_started = True + while thread_not_started: + try: + thrd.join(0.1) + thread_not_started = False + except RuntimeError: + pass + + while self.alive: + if G_STOP.is_set(): + raise KeyboardInterrupt + + if first_line or random.random() < G_LOG_PROB: + first_line = False + line = '' if G_IS_WIN else nonblock_read(tfile.name) + if line: + self.callback([line]) + + time_diff = time.time() - os.path.getmtime(tfile.name) + if time_diff > self.timeout: + raise CmdTimedOut(['Timeout!']) + + thrd.join(0.5) + + tfile.seek(0) + result = [line.decode('utf-8', 'replace').rstrip() for line in tfile] + + if self.proc.returncode != 0: + raise CmdFailed([''] + result) + + return result + except: + self.terminate() + raise + + def terminate(self): + """ Terminate process and cleanup. """ + if self.alive: + if G_IS_WIN: + os.kill(self.proc.pid, signal.SIGINT) + else: + os.killpg(self.proc.pid, signal.SIGTERM) + self.clean() + +class Plugin(object): + def __init__(self, name, args, buf_q, lock): + self.name = name + self.args = args + self.buf_q = buf_q + self.lock = lock + self.tag = args.get('tag', 0) + + def manage(self): + try: + if os.path.exists(self.args['dir']): + self.update() + else: + self.install() + with self.lock: + thread_vim_command("let s:update.new['{0}'] = 1".format(self.name)) + except PlugError as exc: + self.write(Action.ERROR, self.name, exc.msg) + except KeyboardInterrupt: + G_STOP.set() + self.write(Action.ERROR, self.name, ['Interrupted!']) + except: + # Any exception except those above print stack trace + msg = 'Trace:\n{0}'.format(traceback.format_exc().rstrip()) + self.write(Action.ERROR, self.name, msg.split('\n')) + raise + + def install(self): + target = self.args['dir'] + if target[-1] == '\\': + target = target[0:-1] + + def clean(target): + def _clean(): + try: + shutil.rmtree(target) + except OSError: + pass + return _clean + + self.write(Action.INSTALL, self.name, ['Installing ...']) + callback = functools.partial(self.write, Action.INSTALL, self.name) + cmd = 'git clone {0} {1} {2} {3} 2>&1'.format( + '' if self.tag else G_CLONE_OPT, G_PROGRESS, self.args['uri'], + esc(target)) + com = Command(cmd, None, G_TIMEOUT, callback, clean(target)) + result = com.execute(G_RETRIES) + self.write(Action.DONE, self.name, result[-1:]) + + def repo_uri(self): + cmd = 'git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url' + command = Command(cmd, self.args['dir'], G_TIMEOUT,) + result = command.execute(G_RETRIES) + return result[-1] + + def update(self): + actual_uri = self.repo_uri() + expect_uri = self.args['uri'] + regex = re.compile(r'^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$') + ma = regex.match(actual_uri) + mb = regex.match(expect_uri) + if ma is None or mb is None or ma.groups() != mb.groups(): + msg = ['', + 'Invalid URI: {0}'.format(actual_uri), + 'Expected {0}'.format(expect_uri), + 'PlugClean required.'] + raise InvalidURI(msg) + + if G_PULL: + self.write(Action.UPDATE, self.name, ['Updating ...']) + callback = functools.partial(self.write, Action.UPDATE, self.name) + fetch_opt = '--depth 99999999' if self.tag and os.path.isfile(os.path.join(self.args['dir'], '.git/shallow')) else '' + cmd = 'git fetch {0} {1} 2>&1'.format(fetch_opt, G_PROGRESS) + com = Command(cmd, self.args['dir'], G_TIMEOUT, callback) + result = com.execute(G_RETRIES) + self.write(Action.DONE, self.name, result[-1:]) + else: + self.write(Action.DONE, self.name, ['Already installed']) + + def write(self, action, name, msg): + self.buf_q.put((action, name, msg)) + +class PlugThread(thr.Thread): + def __init__(self, tname, args): + super(PlugThread, self).__init__() + self.tname = tname + self.args = args + + def run(self): + thr.current_thread().name = self.tname + buf_q, work_q, lock = self.args + + try: + while not G_STOP.is_set(): + name, args = work_q.get_nowait() + plug = Plugin(name, args, buf_q, lock) + plug.manage() + work_q.task_done() + except queue.Empty: + pass + +class RefreshThread(thr.Thread): + def __init__(self, lock): + super(RefreshThread, self).__init__() + self.lock = lock + self.running = True + + def run(self): + while self.running: + with self.lock: + thread_vim_command('noautocmd normal! a') + time.sleep(0.33) + + def stop(self): + self.running = False + +if G_NVIM: + def thread_vim_command(cmd): + vim.session.threadsafe_call(lambda: vim.command(cmd)) +else: + def thread_vim_command(cmd): + vim.command(cmd) + +def esc(name): + return '"' + name.replace('"', '\"') + '"' + +def nonblock_read(fname): + """ Read a file with nonblock flag. Return the last line. """ + fread = os.open(fname, os.O_RDONLY | os.O_NONBLOCK) + buf = os.read(fread, 100000).decode('utf-8', 'replace') + os.close(fread) + + line = buf.rstrip('\r\n') + left = max(line.rfind('\r'), line.rfind('\n')) + if left != -1: + left += 1 + line = line[left:] + + return line + +def main(): + thr.current_thread().name = 'main' + nthreads = int(vim.eval('s:update.threads')) + plugs = vim.eval('s:update.todo') + mac_gui = vim.eval('s:mac_gui') == '1' + + lock = thr.Lock() + buf = Buffer(lock, len(plugs), G_PULL) + buf_q, work_q = queue.Queue(), queue.Queue() + for work in plugs.items(): + work_q.put(work) + + start_cnt = thr.active_count() + for num in range(nthreads): + tname = 'PlugT-{0:02}'.format(num) + thread = PlugThread(tname, (buf_q, work_q, lock)) + thread.start() + if mac_gui: + rthread = RefreshThread(lock) + rthread.start() + + while not buf_q.empty() or thr.active_count() != start_cnt: + try: + action, name, msg = buf_q.get(True, 0.25) + buf.write(action, name, ['OK'] if not msg else msg) + buf_q.task_done() + except queue.Empty: + pass + except KeyboardInterrupt: + G_STOP.set() + + if mac_gui: + rthread.stop() + rthread.join() + +main() +EOF +endfunction + +function! s:update_ruby() + ruby << EOF + module PlugStream + SEP = ["\r", "\n", nil] + def get_line + buffer = '' + loop do + char = readchar rescue return + if SEP.include? char.chr + buffer << $/ + break + else + buffer << char + end + end + buffer + end + end unless defined?(PlugStream) + + def esc arg + %["#{arg.gsub('"', '\"')}"] + end + + def killall pid + pids = [pid] + if /mswin|mingw|bccwin/ =~ RUBY_PLATFORM + pids.each { |pid| Process.kill 'INT', pid.to_i rescue nil } + else + unless `which pgrep 2> /dev/null`.empty? + children = pids + until children.empty? + children = children.map { |pid| + `pgrep -P #{pid}`.lines.map { |l| l.chomp } + }.flatten + pids += children + end + end + pids.each { |pid| Process.kill 'TERM', pid.to_i rescue nil } + end + end + + def compare_git_uri a, b + regex = %r{^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$} + regex.match(a).to_a.drop(1) == regex.match(b).to_a.drop(1) + end + + require 'thread' + require 'fileutils' + require 'timeout' + running = true + iswin = VIM::evaluate('s:is_win').to_i == 1 + pull = VIM::evaluate('s:update.pull').to_i == 1 + base = VIM::evaluate('g:plug_home') + all = VIM::evaluate('s:update.todo') + limit = VIM::evaluate('get(g:, "plug_timeout", 60)') + tries = VIM::evaluate('get(g:, "plug_retries", 2)') + 1 + nthr = VIM::evaluate('s:update.threads').to_i + maxy = VIM::evaluate('winheight(".")').to_i + vim7 = VIM::evaluate('v:version').to_i <= 703 && RUBY_PLATFORM =~ /darwin/ + cd = iswin ? 'cd /d' : 'cd' + tot = VIM::evaluate('len(s:update.todo)') || 0 + bar = '' + skip = 'Already installed' + mtx = Mutex.new + take1 = proc { mtx.synchronize { running && all.shift } } + logh = proc { + cnt = bar.length + $curbuf[1] = "#{pull ? 'Updating' : 'Installing'} plugins (#{cnt}/#{tot})" + $curbuf[2] = '[' + bar.ljust(tot) + ']' + VIM::command('normal! 2G') + VIM::command('redraw') + } + where = proc { |name| (1..($curbuf.length)).find { |l| $curbuf[l] =~ /^[-+x*] #{name}:/ } } + log = proc { |name, result, type| + mtx.synchronize do + ing = ![true, false].include?(type) + bar += type ? '=' : 'x' unless ing + b = case type + when :install then '+' when :update then '*' + when true, nil then '-' else + VIM::command("call add(s:update.errors, '#{name}')") + 'x' + end + result = + if type || type.nil? + ["#{b} #{name}: #{result.lines.to_a.last || 'OK'}"] + elsif result =~ /^Interrupted|^Timeout/ + ["#{b} #{name}: #{result}"] + else + ["#{b} #{name}"] + result.lines.map { |l| " " << l } + end + if lnum = where.call(name) + $curbuf.delete lnum + lnum = 4 if ing && lnum > maxy + end + result.each_with_index do |line, offset| + $curbuf.append((lnum || 4) - 1 + offset, line.gsub(/\e\[./, '').chomp) + end + logh.call + end + } + bt = proc { |cmd, name, type, cleanup| + tried = timeout = 0 + begin + tried += 1 + timeout += limit + fd = nil + data = '' + if iswin + Timeout::timeout(timeout) do + tmp = VIM::evaluate('tempname()') + system("(#{cmd}) > #{tmp}") + data = File.read(tmp).chomp + File.unlink tmp rescue nil + end + else + fd = IO.popen(cmd).extend(PlugStream) + first_line = true + log_prob = 1.0 / nthr + while line = Timeout::timeout(timeout) { fd.get_line } + data << line + log.call name, line.chomp, type if name && (first_line || rand < log_prob) + first_line = false + end + fd.close + end + [$? == 0, data.chomp] + rescue Timeout::Error, Interrupt => e + if fd && !fd.closed? + killall fd.pid + fd.close + end + cleanup.call if cleanup + if e.is_a?(Timeout::Error) && tried < tries + 3.downto(1) do |countdown| + s = countdown > 1 ? 's' : '' + log.call name, "Timeout. Will retry in #{countdown} second#{s} ...", type + sleep 1 + end + log.call name, 'Retrying ...', type + retry + end + [false, e.is_a?(Interrupt) ? "Interrupted!" : "Timeout!"] + end + } + main = Thread.current + threads = [] + watcher = Thread.new { + if vim7 + while VIM::evaluate('getchar(1)') + sleep 0.1 + end + else + require 'io/console' # >= Ruby 1.9 + nil until IO.console.getch == 3.chr + end + mtx.synchronize do + running = false + threads.each { |t| t.raise Interrupt } unless vim7 + end + threads.each { |t| t.join rescue nil } + main.kill + } + refresh = Thread.new { + while true + mtx.synchronize do + break unless running + VIM::command('noautocmd normal! a') + end + sleep 0.2 + end + } if VIM::evaluate('s:mac_gui') == 1 + + clone_opt = VIM::evaluate('s:clone_opt') + progress = VIM::evaluate('s:progress_opt(1)') + nthr.times do + mtx.synchronize do + threads << Thread.new { + while pair = take1.call + name = pair.first + dir, uri, tag = pair.last.values_at *%w[dir uri tag] + exists = File.directory? dir + ok, result = + if exists + chdir = "#{cd} #{iswin ? dir : esc(dir)}" + ret, data = bt.call "#{chdir} && git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url", nil, nil, nil + current_uri = data.lines.to_a.last + if !ret + if data =~ /^Interrupted|^Timeout/ + [false, data] + else + [false, [data.chomp, "PlugClean required."].join($/)] + end + elsif !compare_git_uri(current_uri, uri) + [false, ["Invalid URI: #{current_uri}", + "Expected: #{uri}", + "PlugClean required."].join($/)] + else + if pull + log.call name, 'Updating ...', :update + fetch_opt = (tag && File.exist?(File.join(dir, '.git/shallow'))) ? '--depth 99999999' : '' + bt.call "#{chdir} && git fetch #{fetch_opt} #{progress} 2>&1", name, :update, nil + else + [true, skip] + end + end + else + d = esc dir.sub(%r{[\\/]+$}, '') + log.call name, 'Installing ...', :install + bt.call "git clone #{clone_opt unless tag} #{progress} #{uri} #{d} 2>&1", name, :install, proc { + FileUtils.rm_rf dir + } + end + mtx.synchronize { VIM::command("let s:update.new['#{name}'] = 1") } if !exists && ok + log.call name, result, ok + end + } if running + end + end + threads.each { |t| t.join rescue nil } + logh.call + refresh.kill if refresh + watcher.kill +EOF +endfunction + +function! s:shellesc_cmd(arg, script) + let escaped = substitute('"'.a:arg.'"', '[&|<>()@^!"]', '^&', 'g') + return substitute(escaped, '%', (a:script ? '%' : '^') . '&', 'g') +endfunction + +function! s:shellesc_ps1(arg) + return "'".substitute(escape(a:arg, '\"'), "'", "''", 'g')."'" +endfunction + +function! plug#shellescape(arg, ...) + let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {} + let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh') + let script = get(opts, 'script', 1) + if shell =~# 'cmd\.exe$' + return s:shellesc_cmd(a:arg, script) + elseif shell =~# 'powershell\.exe$' || shell =~# 'pwsh$' + return s:shellesc_ps1(a:arg) + endif + return shellescape(a:arg) +endfunction + +function! s:glob_dir(path) + return map(filter(s:glob(a:path, '**'), 'isdirectory(v:val)'), 's:dirpath(v:val)') +endfunction + +function! s:progress_bar(line, bar, total) + call setline(a:line, '[' . s:lpad(a:bar, a:total) . ']') +endfunction + +function! s:compare_git_uri(a, b) + " See `git help clone' + " https:// [user@] github.com[:port] / junegunn/vim-plug [.git] + " [git@] github.com[:port] : junegunn/vim-plug [.git] + " file:// / junegunn/vim-plug [/] + " / junegunn/vim-plug [/] + let pat = '^\%(\w\+://\)\='.'\%([^@/]*@\)\='.'\([^:/]*\%(:[0-9]*\)\=\)'.'[:/]'.'\(.\{-}\)'.'\%(\.git\)\=/\?$' + let ma = matchlist(a:a, pat) + let mb = matchlist(a:b, pat) + return ma[1:2] ==# mb[1:2] +endfunction + +function! s:format_message(bullet, name, message) + if a:bullet != 'x' + return [printf('%s %s: %s', a:bullet, a:name, s:lastline(a:message))] + else + let lines = map(s:lines(a:message), '" ".v:val') + return extend([printf('x %s:', a:name)], lines) + endif +endfunction + +function! s:with_cd(cmd, dir, ...) + let script = a:0 > 0 ? a:1 : 1 + return printf('cd%s %s && %s', s:is_win ? ' /d' : '', plug#shellescape(a:dir, {'script': script}), a:cmd) +endfunction + +function! s:system(cmd, ...) + let batchfile = '' + try + let [sh, shellcmdflag, shrd] = s:chsh(1) + let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd + if s:is_win + let [batchfile, cmd] = s:batchfile(cmd) + endif + return system(cmd) + finally + let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] + if s:is_win && filereadable(batchfile) + call delete(batchfile) + endif + endtry +endfunction + +function! s:system_chomp(...) + let ret = call('s:system', a:000) + return v:shell_error ? '' : substitute(ret, '\n$', '', '') +endfunction + +function! s:git_validate(spec, check_branch) + let err = '' + if isdirectory(a:spec.dir) + let result = s:lines(s:system('git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url', a:spec.dir)) + let remote = result[-1] + if v:shell_error + let err = join([remote, 'PlugClean required.'], "\n") + elseif !s:compare_git_uri(remote, a:spec.uri) + let err = join(['Invalid URI: '.remote, + \ 'Expected: '.a:spec.uri, + \ 'PlugClean required.'], "\n") + elseif a:check_branch && has_key(a:spec, 'commit') + let result = s:lines(s:system('git rev-parse HEAD 2>&1', a:spec.dir)) + let sha = result[-1] + if v:shell_error + let err = join(add(result, 'PlugClean required.'), "\n") + elseif !s:hash_match(sha, a:spec.commit) + let err = join([printf('Invalid HEAD (expected: %s, actual: %s)', + \ a:spec.commit[:6], sha[:6]), + \ 'PlugUpdate required.'], "\n") + endif + elseif a:check_branch + let branch = result[0] + " Check tag + if has_key(a:spec, 'tag') + let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir) + if a:spec.tag !=# tag && a:spec.tag !~ '\*' + let err = printf('Invalid tag: %s (expected: %s). Try PlugUpdate.', + \ (empty(tag) ? 'N/A' : tag), a:spec.tag) + endif + " Check branch + elseif a:spec.branch !=# branch + let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.', + \ branch, a:spec.branch) + endif + if empty(err) + let [ahead, behind] = split(s:lastline(s:system(printf( + \ 'git rev-list --count --left-right HEAD...origin/%s', + \ a:spec.branch), a:spec.dir)), '\t') + if !v:shell_error && ahead + if behind + " Only mention PlugClean if diverged, otherwise it's likely to be + " pushable (and probably not that messed up). + let err = printf( + \ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n" + \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', a:spec.branch, ahead, behind) + else + let err = printf("Ahead of origin/%s by %d commit(s).\n" + \ .'Cannot update until local changes are pushed.', + \ a:spec.branch, ahead) + endif + endif + endif + endif + else + let err = 'Not found' + endif + return [err, err =~# 'PlugClean'] +endfunction + +function! s:rm_rf(dir) + if isdirectory(a:dir) + call s:system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . plug#shellescape(a:dir)) + endif +endfunction + +function! s:clean(force) + call s:prepare() + call append(0, 'Searching for invalid plugins in '.g:plug_home) + call append(1, '') + + " List of valid directories + let dirs = [] + let errs = {} + let [cnt, total] = [0, len(g:plugs)] + for [name, spec] in items(g:plugs) + if !s:is_managed(name) + call add(dirs, spec.dir) + else + let [err, clean] = s:git_validate(spec, 1) + if clean + let errs[spec.dir] = s:lines(err)[0] + else + call add(dirs, spec.dir) + endif + endif + let cnt += 1 + call s:progress_bar(2, repeat('=', cnt), total) + normal! 2G + redraw + endfor + + let allowed = {} + for dir in dirs + let allowed[s:dirpath(fnamemodify(dir, ':h:h'))] = 1 + let allowed[dir] = 1 + for child in s:glob_dir(dir) + let allowed[child] = 1 + endfor + endfor + + let todo = [] + let found = sort(s:glob_dir(g:plug_home)) + while !empty(found) + let f = remove(found, 0) + if !has_key(allowed, f) && isdirectory(f) + call add(todo, f) + call append(line('$'), '- ' . f) + if has_key(errs, f) + call append(line('$'), ' ' . errs[f]) + endif + let found = filter(found, 'stridx(v:val, f) != 0') + end + endwhile + + 4 + redraw + if empty(todo) + call append(line('$'), 'Already clean.') + else + let s:clean_count = 0 + call append(3, ['Directories to delete:', '']) + redraw! + if a:force || s:ask_no_interrupt('Delete all directories?') + call s:delete([6, line('$')], 1) + else + call setline(4, 'Cancelled.') + nnoremap <silent> <buffer> d :set opfunc=<sid>delete_op<cr>g@ + nmap <silent> <buffer> dd d_ + xnoremap <silent> <buffer> d :<c-u>call <sid>delete_op(visualmode(), 1)<cr> + echo 'Delete the lines (d{motion}) to delete the corresponding directories' + endif + endif + 4 + setlocal nomodifiable +endfunction + +function! s:delete_op(type, ...) + call s:delete(a:0 ? [line("'<"), line("'>")] : [line("'["), line("']")], 0) +endfunction + +function! s:delete(range, force) + let [l1, l2] = a:range + let force = a:force + while l1 <= l2 + let line = getline(l1) + if line =~ '^- ' && isdirectory(line[2:]) + execute l1 + redraw! + let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1) + let force = force || answer > 1 + if answer + call s:rm_rf(line[2:]) + setlocal modifiable + call setline(l1, '~'.line[1:]) + let s:clean_count += 1 + call setline(4, printf('Removed %d directories.', s:clean_count)) + setlocal nomodifiable + endif + endif + let l1 += 1 + endwhile +endfunction + +function! s:upgrade() + echo 'Downloading the latest version of vim-plug' + redraw + let tmp = tempname() + let new = tmp . '/plug.vim' + + try + let out = s:system(printf('git clone --depth 1 %s %s', plug#shellescape(s:plug_src), plug#shellescape(tmp))) + if v:shell_error + return s:err('Error upgrading vim-plug: '. out) + endif + + if readfile(s:me) ==# readfile(new) + echo 'vim-plug is already up-to-date' + return 0 + else + call rename(s:me, s:me . '.old') + call rename(new, s:me) + unlet g:loaded_plug + echo 'vim-plug has been upgraded' + return 1 + endif + finally + silent! call s:rm_rf(tmp) + endtry +endfunction + +function! s:upgrade_specs() + for spec in values(g:plugs) + let spec.frozen = get(spec, 'frozen', 0) + endfor +endfunction + +function! s:status() + call s:prepare() + call append(0, 'Checking plugins') + call append(1, '') + + let ecnt = 0 + let unloaded = 0 + let [cnt, total] = [0, len(g:plugs)] + for [name, spec] in items(g:plugs) + let is_dir = isdirectory(spec.dir) + if has_key(spec, 'uri') + if is_dir + let [err, _] = s:git_validate(spec, 1) + let [valid, msg] = [empty(err), empty(err) ? 'OK' : err] + else + let [valid, msg] = [0, 'Not found. Try PlugInstall.'] + endif + else + if is_dir + let [valid, msg] = [1, 'OK'] + else + let [valid, msg] = [0, 'Not found.'] + endif + endif + let cnt += 1 + let ecnt += !valid + " `s:loaded` entry can be missing if PlugUpgraded + if is_dir && get(s:loaded, name, -1) == 0 + let unloaded = 1 + let msg .= ' (not loaded)' + endif + call s:progress_bar(2, repeat('=', cnt), total) + call append(3, s:format_message(valid ? '-' : 'x', name, msg)) + normal! 2G + redraw + endfor + call setline(1, 'Finished. '.ecnt.' error(s).') + normal! gg + setlocal nomodifiable + if unloaded + echo "Press 'L' on each line to load plugin, or 'U' to update" + nnoremap <silent> <buffer> L :call <SID>status_load(line('.'))<cr> + xnoremap <silent> <buffer> L :call <SID>status_load(line('.'))<cr> + end +endfunction + +function! s:extract_name(str, prefix, suffix) + return matchstr(a:str, '^'.a:prefix.' \zs[^:]\+\ze:.*'.a:suffix.'$') +endfunction + +function! s:status_load(lnum) + let line = getline(a:lnum) + let name = s:extract_name(line, '-', '(not loaded)') + if !empty(name) + call plug#load(name) + setlocal modifiable + call setline(a:lnum, substitute(line, ' (not loaded)$', '', '')) + setlocal nomodifiable + endif +endfunction + +function! s:status_update() range + let lines = getline(a:firstline, a:lastline) + let names = filter(map(lines, 's:extract_name(v:val, "[x-]", "")'), '!empty(v:val)') + if !empty(names) + echo + execute 'PlugUpdate' join(names) + endif +endfunction + +function! s:is_preview_window_open() + silent! wincmd P + if &previewwindow + wincmd p + return 1 + endif +endfunction + +function! s:find_name(lnum) + for lnum in reverse(range(1, a:lnum)) + let line = getline(lnum) + if empty(line) + return '' + endif + let name = s:extract_name(line, '-', '') + if !empty(name) + return name + endif + endfor + return '' +endfunction + +function! s:preview_commit() + if b:plug_preview < 0 + let b:plug_preview = !s:is_preview_window_open() + endif + + let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-f]\{7,9}') + if empty(sha) + return + endif + + let name = s:find_name(line('.')) + if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir) + return + endif + + if exists('g:plug_pwindow') && !s:is_preview_window_open() + execute g:plug_pwindow + execute 'e' sha + else + execute 'pedit' sha + wincmd P + endif + setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable + let batchfile = '' + try + let [sh, shellcmdflag, shrd] = s:chsh(1) + let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha + if s:is_win + let [batchfile, cmd] = s:batchfile(cmd) + endif + execute 'silent %!' cmd + finally + let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] + if s:is_win && filereadable(batchfile) + call delete(batchfile) + endif + endtry + setlocal nomodifiable + nnoremap <silent> <buffer> q :q<cr> + wincmd p +endfunction + +function! s:section(flags) + call search('\(^[x-] \)\@<=[^:]\+:', a:flags) +endfunction + +function! s:format_git_log(line) + let indent = ' ' + let tokens = split(a:line, nr2char(1)) + if len(tokens) != 5 + return indent.substitute(a:line, '\s*$', '', '') + endif + let [graph, sha, refs, subject, date] = tokens + let tag = matchstr(refs, 'tag: [^,)]\+') + let tag = empty(tag) ? ' ' : ' ('.tag.') ' + return printf('%s%s%s%s%s (%s)', indent, graph, sha, tag, subject, date) +endfunction + +function! s:append_ul(lnum, text) + call append(a:lnum, ['', a:text, repeat('-', len(a:text))]) +endfunction + +function! s:diff() + call s:prepare() + call append(0, ['Collecting changes ...', '']) + let cnts = [0, 0] + let bar = '' + let total = filter(copy(g:plugs), 's:is_managed(v:key) && isdirectory(v:val.dir)') + call s:progress_bar(2, bar, len(total)) + for origin in [1, 0] + let plugs = reverse(sort(items(filter(copy(total), (origin ? '' : '!').'(has_key(v:val, "commit") || has_key(v:val, "tag"))')))) + if empty(plugs) + continue + endif + call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:') + for [k, v] in plugs + let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..' + let cmd = 'git log --graph --color=never '.join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 'plug#shellescape(v:val)')) + if has_key(v, 'rtp') + let cmd .= ' -- '.plug#shellescape(v.rtp) + endif + let diff = s:system_chomp(cmd, v.dir) + if !empty(diff) + let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : '' + call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)'))) + let cnts[origin] += 1 + endif + let bar .= '=' + call s:progress_bar(2, bar, len(total)) + normal! 2G + redraw + endfor + if !cnts[origin] + call append(5, ['', 'N/A']) + endif + endfor + call setline(1, printf('%d plugin(s) updated.', cnts[0]) + \ . (cnts[1] ? printf(' %d plugin(s) have pending updates.', cnts[1]) : '')) + + if cnts[0] || cnts[1] + nnoremap <silent> <buffer> <plug>(plug-preview) :silent! call <SID>preview_commit()<cr> + if empty(maparg("\<cr>", 'n')) + nmap <buffer> <cr> <plug>(plug-preview) + endif + if empty(maparg('o', 'n')) + nmap <buffer> o <plug>(plug-preview) + endif + endif + if cnts[0] + nnoremap <silent> <buffer> X :call <SID>revert()<cr> + echo "Press 'X' on each block to revert the update" + endif + normal! gg + setlocal nomodifiable +endfunction + +function! s:revert() + if search('^Pending updates', 'bnW') + return + endif + + let name = s:find_name(line('.')) + if empty(name) || !has_key(g:plugs, name) || + \ input(printf('Revert the update of %s? (y/N) ', name)) !~? '^y' + return + endif + + call s:system('git reset --hard HEAD@{1} && git checkout '.s:esc(g:plugs[name].branch).' --', g:plugs[name].dir) + setlocal modifiable + normal! "_dap + setlocal nomodifiable + echo 'Reverted' +endfunction + +function! s:snapshot(force, ...) abort + call s:prepare() + setf vim + call append(0, ['" Generated by vim-plug', + \ '" '.strftime("%c"), + \ '" :source this file in vim to restore the snapshot', + \ '" or execute: vim -S snapshot.vim', + \ '', '', 'PlugUpdate!']) + 1 + let anchor = line('$') - 3 + let names = sort(keys(filter(copy(g:plugs), + \'has_key(v:val, "uri") && !has_key(v:val, "commit") && isdirectory(v:val.dir)'))) + for name in reverse(names) + let sha = s:system_chomp('git rev-parse --short HEAD', g:plugs[name].dir) + if !empty(sha) + call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha)) + redraw + endif + endfor + + if a:0 > 0 + let fn = expand(a:1) + if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?')) + return + endif + call writefile(getline(1, '$'), fn) + echo 'Saved as '.a:1 + silent execute 'e' s:esc(fn) + setf vim + endif +endfunction + +function! s:split_rtp() + return split(&rtp, '\\\@<!,') +endfunction + +let s:first_rtp = s:escrtp(get(s:split_rtp(), 0, '')) +let s:last_rtp = s:escrtp(get(s:split_rtp(), -1, '')) + +if exists('g:plugs') + let g:plugs_order = get(g:, 'plugs_order', keys(g:plugs)) + call s:upgrade_specs() + call s:define_commands() +endif + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/nvim/cache/citation_vim_cache b/nvim/cache/citation_vim_cache Binary files differ. diff --git a/nvim/colors/selenized_bw.vim b/nvim/colors/selenized_bw.vim @@ -0,0 +1,723 @@ +" Name: Selenized black/white, beta version +" Author: Jan Warchoł <jan.warchol@gmail.com> +" Maintainer: Jan Warchoł <jan.warchol@gmail.com> +" License: Vim License (see `:help license`) +" Last Updated: Sat 25 Apr 2020 17:38:38 + +" Generated by Colortemplate v2.0.0 + +hi clear +if exists('syntax_on') + syntax reset +endif + +let g:colors_name = 'selenized_bw' + +let s:t_Co = exists('&t_Co') && !empty(&t_Co) && &t_Co > 1 ? &t_Co : 2 +let s:italics = (&t_ZH != '' && &t_ZH != '') || has('gui_running') || has('nvim') + +if (has('termguicolors') && &termguicolors) || has('gui_running') + if &background ==# 'dark' + let g:terminal_ansi_colors = ['#252525', '#ed4a46', '#70b433', '#dbb32d', + \ '#368aeb', '#eb6eb7', '#3fc5b7', '#777777', '#3b3b3b', '#ff5e56', + \ '#83c746', '#efc541', '#4f9cfe', '#ff81ca', '#56d8c9', '#dedede'] + if has('nvim') + let g:terminal_color_0 = '#181818' + let g:terminal_color_1 = '#ed4a46' + let g:terminal_color_2 = '#70b433' + let g:terminal_color_3 = '#dbb32d' + let g:terminal_color_4 = '#368aeb' + let g:terminal_color_5 = '#eb6eb7' + let g:terminal_color_6 = '#3fc5b7' + let g:terminal_color_7 = '#777777' + let g:terminal_color_8 = '#3b3b3b' + let g:terminal_color_9 = '#ff5e56' + let g:terminal_color_10 = '#83c746' + let g:terminal_color_11 = '#efc541' + let g:terminal_color_12 = '#4f9cfe' + let g:terminal_color_13 = '#ff81ca' + let g:terminal_color_14 = '#56d8c9' + let g:terminal_color_15 = '#dedede' + endif + hi Normal guifg=#b9b9b9 guibg=#181818 guisp=NONE gui=NONE cterm=NONE + hi IncSearch guifg=#e67f43 guibg=NONE guisp=NONE gui=reverse cterm=reverse + hi Search guifg=#dbb32d guibg=NONE guisp=NONE gui=reverse cterm=reverse + hi! link QuickFixLine Search + hi Visual guifg=NONE guibg=#3b3b3b guisp=NONE gui=NONE cterm=NONE + hi MatchParen guifg=#efc541 guibg=#3b3b3b guisp=NONE gui=bold cterm=bold + hi Cursor guifg=NONE guibg=NONE guisp=NONE gui=reverse ctermfg=NONE ctermbg=NONE cterm=reverse + hi! link lCursor Cursor + hi CursorLine guifg=NONE guibg=#252525 guisp=NONE gui=NONE cterm=NONE + hi CursorColumn guifg=NONE guibg=#252525 guisp=NONE gui=NONE cterm=NONE + hi Folded guifg=NONE guibg=#252525 guisp=NONE gui=NONE cterm=NONE + hi ColorColumn guifg=NONE guibg=#3b3b3b guisp=NONE gui=NONE cterm=NONE + hi LineNr guifg=#777777 guibg=#252525 guisp=NONE gui=NONE cterm=NONE + hi CursorLineNr guifg=#dedede guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi VertSplit guifg=#777777 guibg=#777777 guisp=NONE gui=NONE cterm=NONE + hi StatusLine guifg=NONE guibg=NONE guisp=NONE gui=reverse ctermfg=NONE ctermbg=NONE cterm=reverse + hi StatusLineNC guifg=NONE guibg=#3b3b3b guisp=NONE gui=NONE cterm=NONE + hi! link StatusLineTerm StatusLine + hi! link StatusLineTermNC StatusLineNC + hi TabLineSel guifg=#dedede guibg=#252525 guisp=NONE gui=bold,reverse cterm=bold,reverse + hi TabLine guifg=#777777 guibg=NONE guisp=NONE gui=reverse cterm=reverse + hi TabLineFill guifg=#777777 guibg=NONE guisp=NONE gui=reverse cterm=reverse + hi ToolbarButton guifg=NONE guibg=NONE guisp=NONE gui=reverse ctermfg=NONE ctermbg=NONE cterm=reverse + hi ToolbarLine guifg=NONE guibg=#3b3b3b guisp=NONE gui=NONE cterm=NONE + hi Pmenu guifg=#777777 guibg=#252525 guisp=NONE gui=NONE cterm=NONE + hi PmenuSel guifg=NONE guibg=#3b3b3b guisp=NONE gui=NONE cterm=NONE + hi PmenuThumb guifg=NONE guibg=#777777 guisp=NONE gui=NONE cterm=NONE + hi PmenuSbar guifg=NONE guibg=#3b3b3b guisp=NONE gui=NONE cterm=NONE + hi DiffAdd guifg=#70b433 guibg=#252525 guisp=NONE gui=NONE cterm=NONE + hi DiffChange guifg=NONE guibg=#252525 guisp=NONE gui=NONE cterm=NONE + hi DiffDelete guifg=#ed4a46 guibg=#252525 guisp=NONE gui=NONE cterm=NONE + hi DiffText guifg=#252525 guibg=#dbb32d guisp=NONE gui=NONE cterm=NONE + hi Comment guifg=#777777 guibg=NONE guisp=NONE gui=italic cterm=italic + hi Constant guifg=#3fc5b7 guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi! link String Constant + hi! link Number Constant + hi! link Boolean Constant + hi! link Character Constant + hi! link Float Constant + hi Identifier guifg=#4f9cfe guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi! link Function Identifier + hi Statement guifg=#efc541 guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi! link Conditional Statement + hi! link Repeat Statement + hi! link Keyword Statement + hi! link Label Statement + hi! link Exception Statement + hi! link Operator Statement + hi PreProc guifg=#e67f43 guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi! link Define PreProc + hi! link PreCondit PreProc + hi! link Include PreProc + hi! link Macro Include + hi Type guifg=#70b433 guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi! link Typedef Type + hi! link StorageClass Type + hi! link Structure Type + hi Special guifg=#ed4a46 guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi! link SpecialChar Special + hi! link Delimiter Special + hi! link SpecialComment Special + hi! link Debug Special + hi! link Tag Special + hi Error guifg=#ed4a46 guibg=NONE guisp=NONE gui=bold cterm=bold + hi Todo guifg=#eb6eb7 guibg=NONE guisp=NONE gui=bold cterm=bold + hi Underlined guifg=#a580e2 guibg=NONE guisp=NONE gui=underline cterm=underline + hi Ignore guifg=#3b3b3b guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi VimCommand guifg=#dbb32d guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi RubyDefine guifg=#dedede guibg=NONE guisp=NONE gui=bold cterm=bold + if !s:italics + hi Comment gui=NONE cterm=NONE + endif + if get(g:, 'selenized_green_keywords', 0) + hi Statement guifg=#70b433 guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi Type guifg=#dbb32d guibg=NONE guisp=NONE gui=NONE cterm=NONE + endif + hi Terminal guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi Conceal guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi Directory guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi EndOfBuffer guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi ErrorMsg guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi FoldColumn guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi ModeMsg guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi MoreMsg guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi NonText guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi Question guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi SignColumn guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi SpecialKey guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi SpellBad guifg=NONE guibg=NONE guisp=#ed4a46 gui=undercurl ctermfg=NONE ctermbg=NONE cterm=undercurl + hi SpellCap guifg=NONE guibg=NONE guisp=#ed4a46 gui=undercurl ctermfg=NONE ctermbg=NONE cterm=undercurl + hi SpellLocal guifg=NONE guibg=NONE guisp=#dbb32d gui=undercurl ctermfg=NONE ctermbg=NONE cterm=undercurl + hi SpellRare guifg=NONE guibg=NONE guisp=#3fc5b7 gui=undercurl ctermfg=NONE ctermbg=NONE cterm=undercurl + hi Title guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi VisualNOS guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi WarningMsg guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi WildMenu guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + unlet s:t_Co s:italics + finish + endif + " Light background + let g:terminal_ansi_colors = ['#ebebeb', '#d6000c', '#1d9700', '#c49700', + \ '#0064e4', '#dd0f9d', '#00ad9c', '#878787', '#cdcdcd', '#bf0000', + \ '#008400', '#af8500', '#0054cf', '#c7008b', '#009a8a', '#282828'] + if has('nvim') + let g:terminal_color_0 = '#ebebeb' + let g:terminal_color_1 = '#d6000c' + let g:terminal_color_2 = '#1d9700' + let g:terminal_color_3 = '#c49700' + let g:terminal_color_4 = '#0064e4' + let g:terminal_color_5 = '#dd0f9d' + let g:terminal_color_6 = '#00ad9c' + let g:terminal_color_7 = '#878787' + let g:terminal_color_8 = '#cdcdcd' + let g:terminal_color_9 = '#bf0000' + let g:terminal_color_10 = '#008400' + let g:terminal_color_11 = '#af8500' + let g:terminal_color_12 = '#0054cf' + let g:terminal_color_13 = '#c7008b' + let g:terminal_color_14 = '#009a8a' + let g:terminal_color_15 = '#282828' + endif + hi Normal guifg=#474747 guibg=#ffffff guisp=NONE gui=NONE cterm=NONE + hi IncSearch guifg=#d04a00 guibg=NONE guisp=NONE gui=reverse cterm=reverse + hi Search guifg=#c49700 guibg=NONE guisp=NONE gui=reverse cterm=reverse + hi! link QuickFixLine Search + hi Visual guifg=NONE guibg=#cdcdcd guisp=NONE gui=NONE cterm=NONE + hi MatchParen guifg=#af8500 guibg=#cdcdcd guisp=NONE gui=bold cterm=bold + hi Cursor guifg=NONE guibg=NONE guisp=NONE gui=reverse ctermfg=NONE ctermbg=NONE cterm=reverse + hi! link lCursor Cursor + hi CursorLine guifg=NONE guibg=#ebebeb guisp=NONE gui=NONE cterm=NONE + hi CursorColumn guifg=NONE guibg=#ebebeb guisp=NONE gui=NONE cterm=NONE + hi Folded guifg=NONE guibg=#ebebeb guisp=NONE gui=NONE cterm=NONE + hi ColorColumn guifg=NONE guibg=#cdcdcd guisp=NONE gui=NONE cterm=NONE + hi LineNr guifg=#878787 guibg=#ebebeb guisp=NONE gui=NONE cterm=NONE + hi CursorLineNr guifg=#282828 guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi VertSplit guifg=#878787 guibg=#878787 guisp=NONE gui=NONE cterm=NONE + hi StatusLine guifg=NONE guibg=NONE guisp=NONE gui=reverse ctermfg=NONE ctermbg=NONE cterm=reverse + hi StatusLineNC guifg=NONE guibg=#cdcdcd guisp=NONE gui=NONE cterm=NONE + hi! link StatusLineTerm StatusLine + hi! link StatusLineTermNC StatusLineNC + hi TabLineSel guifg=#282828 guibg=#ebebeb guisp=NONE gui=bold,reverse cterm=bold,reverse + hi TabLine guifg=#878787 guibg=NONE guisp=NONE gui=reverse cterm=reverse + hi TabLineFill guifg=#878787 guibg=NONE guisp=NONE gui=reverse cterm=reverse + hi ToolbarButton guifg=NONE guibg=NONE guisp=NONE gui=reverse ctermfg=NONE ctermbg=NONE cterm=reverse + hi ToolbarLine guifg=NONE guibg=#cdcdcd guisp=NONE gui=NONE cterm=NONE + hi Pmenu guifg=#878787 guibg=#ebebeb guisp=NONE gui=NONE cterm=NONE + hi PmenuSel guifg=NONE guibg=#cdcdcd guisp=NONE gui=NONE cterm=NONE + hi PmenuThumb guifg=NONE guibg=#878787 guisp=NONE gui=NONE cterm=NONE + hi PmenuSbar guifg=NONE guibg=#cdcdcd guisp=NONE gui=NONE cterm=NONE + hi DiffAdd guifg=#1d9700 guibg=#ebebeb guisp=NONE gui=NONE cterm=NONE + hi DiffChange guifg=NONE guibg=#ebebeb guisp=NONE gui=NONE cterm=NONE + hi DiffDelete guifg=#d6000c guibg=#ebebeb guisp=NONE gui=NONE cterm=NONE + hi DiffText guifg=#ebebeb guibg=#c49700 guisp=NONE gui=NONE cterm=NONE + hi Comment guifg=#878787 guibg=NONE guisp=NONE gui=italic cterm=italic + hi Constant guifg=#00ad9c guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi! link String Constant + hi! link Number Constant + hi! link Boolean Constant + hi! link Character Constant + hi! link Float Constant + hi Identifier guifg=#0054cf guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi! link Function Identifier + hi Statement guifg=#af8500 guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi! link Conditional Statement + hi! link Repeat Statement + hi! link Keyword Statement + hi! link Label Statement + hi! link Exception Statement + hi! link Operator Statement + hi PreProc guifg=#d04a00 guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi! link Define PreProc + hi! link PreCondit PreProc + hi! link Include PreProc + hi! link Macro Include + hi Type guifg=#1d9700 guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi! link Typedef Type + hi! link StorageClass Type + hi! link Structure Type + hi Special guifg=#d6000c guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi! link SpecialChar Special + hi! link Delimiter Special + hi! link SpecialComment Special + hi! link Debug Special + hi! link Tag Special + hi Error guifg=#d6000c guibg=NONE guisp=NONE gui=bold cterm=bold + hi Todo guifg=#dd0f9d guibg=NONE guisp=NONE gui=bold cterm=bold + hi Underlined guifg=#7f51d6 guibg=NONE guisp=NONE gui=underline cterm=underline + hi Ignore guifg=#cdcdcd guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi VimCommand guifg=#c49700 guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi RubyDefine guifg=#282828 guibg=NONE guisp=NONE gui=bold cterm=bold + if !s:italics + hi Comment gui=NONE cterm=NONE + endif + if get(g:, 'selenized_green_keywords', 0) + hi Statement guifg=#1d9700 guibg=NONE guisp=NONE gui=NONE cterm=NONE + hi Type guifg=#c49700 guibg=NONE guisp=NONE gui=NONE cterm=NONE + endif + hi Terminal guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi Conceal guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi Directory guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi EndOfBuffer guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi ErrorMsg guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi FoldColumn guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi ModeMsg guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi MoreMsg guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi NonText guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi Question guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi SignColumn guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi SpecialKey guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi SpellBad guifg=NONE guibg=NONE guisp=#d6000c gui=undercurl ctermfg=NONE ctermbg=NONE cterm=undercurl + hi SpellCap guifg=NONE guibg=NONE guisp=#d6000c gui=undercurl ctermfg=NONE ctermbg=NONE cterm=undercurl + hi SpellLocal guifg=NONE guibg=NONE guisp=#c49700 gui=undercurl ctermfg=NONE ctermbg=NONE cterm=undercurl + hi SpellRare guifg=NONE guibg=NONE guisp=#00ad9c gui=undercurl ctermfg=NONE ctermbg=NONE cterm=undercurl + hi Title guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi VisualNOS guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi WarningMsg guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + hi WildMenu guifg=NONE guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE + unlet s:t_Co s:italics + finish +endif + +if s:t_Co >= 256 + if &background ==# 'dark' + hi Normal ctermfg=250 ctermbg=234 cterm=NONE + if !has('patch-8.0.0616') && !has('nvim') " Fix for Vim bug + set background=dark + endif + hi IncSearch ctermfg=173 ctermbg=NONE cterm=reverse + hi Search ctermfg=178 ctermbg=NONE cterm=reverse + hi! link QuickFixLine Search + hi Visual ctermfg=NONE ctermbg=237 cterm=NONE + hi MatchParen ctermfg=178 ctermbg=237 cterm=bold + hi Cursor ctermfg=NONE ctermbg=NONE cterm=reverse + hi! link lCursor Cursor + hi CursorLine ctermfg=NONE ctermbg=235 cterm=NONE + hi CursorColumn ctermfg=NONE ctermbg=235 cterm=NONE + hi Folded ctermfg=NONE ctermbg=235 cterm=NONE + hi ColorColumn ctermfg=NONE ctermbg=237 cterm=NONE + hi LineNr ctermfg=243 ctermbg=235 cterm=NONE + hi CursorLineNr ctermfg=253 ctermbg=NONE cterm=NONE + hi VertSplit ctermfg=243 ctermbg=243 cterm=NONE + hi StatusLine ctermfg=NONE ctermbg=NONE cterm=reverse + hi StatusLineNC ctermfg=NONE ctermbg=237 cterm=NONE + hi! link StatusLineTerm StatusLine + hi! link StatusLineTermNC StatusLineNC + hi TabLineSel ctermfg=253 ctermbg=235 cterm=bold,reverse + hi TabLine ctermfg=243 ctermbg=NONE cterm=reverse + hi TabLineFill ctermfg=243 ctermbg=NONE cterm=reverse + hi ToolbarButton ctermfg=NONE ctermbg=NONE cterm=reverse + hi ToolbarLine ctermfg=NONE ctermbg=237 cterm=NONE + hi Pmenu ctermfg=243 ctermbg=235 cterm=NONE + hi PmenuSel ctermfg=NONE ctermbg=237 cterm=NONE + hi PmenuThumb ctermfg=NONE ctermbg=243 cterm=NONE + hi PmenuSbar ctermfg=NONE ctermbg=237 cterm=NONE + hi DiffAdd ctermfg=70 ctermbg=235 cterm=NONE + hi DiffChange ctermfg=NONE ctermbg=235 cterm=NONE + hi DiffDelete ctermfg=203 ctermbg=235 cterm=NONE + hi DiffText ctermfg=235 ctermbg=178 cterm=NONE + hi Comment ctermfg=243 ctermbg=NONE cterm=italic + hi Constant ctermfg=44 ctermbg=NONE cterm=NONE + hi! link String Constant + hi! link Number Constant + hi! link Boolean Constant + hi! link Character Constant + hi! link Float Constant + hi Identifier ctermfg=39 ctermbg=NONE cterm=NONE + hi! link Function Identifier + hi Statement ctermfg=178 ctermbg=NONE cterm=NONE + hi! link Conditional Statement + hi! link Repeat Statement + hi! link Keyword Statement + hi! link Label Statement + hi! link Exception Statement + hi! link Operator Statement + hi PreProc ctermfg=173 ctermbg=NONE cterm=NONE + hi! link Define PreProc + hi! link PreCondit PreProc + hi! link Include PreProc + hi! link Macro Include + hi Type ctermfg=70 ctermbg=NONE cterm=NONE + hi! link Typedef Type + hi! link StorageClass Type + hi! link Structure Type + hi Special ctermfg=203 ctermbg=NONE cterm=NONE + hi! link SpecialChar Special + hi! link Delimiter Special + hi! link SpecialComment Special + hi! link Debug Special + hi! link Tag Special + hi Error ctermfg=203 ctermbg=NONE cterm=bold + hi Todo ctermfg=205 ctermbg=NONE cterm=bold + hi Underlined ctermfg=140 ctermbg=NONE cterm=underline + hi Ignore ctermfg=237 ctermbg=NONE cterm=NONE + hi VimCommand ctermfg=178 ctermbg=NONE cterm=NONE + hi RubyDefine ctermfg=253 ctermbg=NONE cterm=bold + if !s:italics + hi Comment cterm=NONE + endif + if get(g:, 'selenized_green_keywords', 0) + hi Statement ctermfg=70 ctermbg=NONE cterm=NONE + hi Type ctermfg=178 ctermbg=NONE cterm=NONE + endif + hi Terminal ctermfg=NONE ctermbg=NONE cterm=NONE + hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE + hi Directory ctermfg=NONE ctermbg=NONE cterm=NONE + hi EndOfBuffer ctermfg=NONE ctermbg=NONE cterm=NONE + hi ErrorMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi FoldColumn ctermfg=NONE ctermbg=NONE cterm=NONE + hi ModeMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi MoreMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi NonText ctermfg=NONE ctermbg=NONE cterm=NONE + hi Question ctermfg=NONE ctermbg=NONE cterm=NONE + hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE + hi SpecialKey ctermfg=NONE ctermbg=NONE cterm=NONE + hi SpellBad ctermfg=NONE ctermbg=NONE cterm=underline + hi SpellCap ctermfg=NONE ctermbg=NONE cterm=underline + hi SpellLocal ctermfg=NONE ctermbg=NONE cterm=underline + hi SpellRare ctermfg=NONE ctermbg=NONE cterm=underline + hi Title ctermfg=NONE ctermbg=NONE cterm=NONE + hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=NONE + hi WarningMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi WildMenu ctermfg=NONE ctermbg=NONE cterm=NONE + unlet s:t_Co s:italics + finish + endif + " Light background + hi Normal ctermfg=238 ctermbg=231 cterm=NONE + hi IncSearch ctermfg=166 ctermbg=NONE cterm=reverse + hi Search ctermfg=136 ctermbg=NONE cterm=reverse + hi! link QuickFixLine Search + hi Visual ctermfg=NONE ctermbg=252 cterm=NONE + hi MatchParen ctermfg=136 ctermbg=252 cterm=bold + hi Cursor ctermfg=NONE ctermbg=NONE cterm=reverse + hi! link lCursor Cursor + hi CursorLine ctermfg=NONE ctermbg=255 cterm=NONE + hi CursorColumn ctermfg=NONE ctermbg=255 cterm=NONE + hi Folded ctermfg=NONE ctermbg=255 cterm=NONE + hi ColorColumn ctermfg=NONE ctermbg=252 cterm=NONE + hi LineNr ctermfg=102 ctermbg=255 cterm=NONE + hi CursorLineNr ctermfg=235 ctermbg=NONE cterm=NONE + hi VertSplit ctermfg=102 ctermbg=102 cterm=NONE + hi StatusLine ctermfg=NONE ctermbg=NONE cterm=reverse + hi StatusLineNC ctermfg=NONE ctermbg=252 cterm=NONE + hi! link StatusLineTerm StatusLine + hi! link StatusLineTermNC StatusLineNC + hi TabLineSel ctermfg=235 ctermbg=255 cterm=bold,reverse + hi TabLine ctermfg=102 ctermbg=NONE cterm=reverse + hi TabLineFill ctermfg=102 ctermbg=NONE cterm=reverse + hi ToolbarButton ctermfg=NONE ctermbg=NONE cterm=reverse + hi ToolbarLine ctermfg=NONE ctermbg=252 cterm=NONE + hi Pmenu ctermfg=102 ctermbg=255 cterm=NONE + hi PmenuSel ctermfg=NONE ctermbg=252 cterm=NONE + hi PmenuThumb ctermfg=NONE ctermbg=102 cterm=NONE + hi PmenuSbar ctermfg=NONE ctermbg=252 cterm=NONE + hi DiffAdd ctermfg=28 ctermbg=255 cterm=NONE + hi DiffChange ctermfg=NONE ctermbg=255 cterm=NONE + hi DiffDelete ctermfg=160 ctermbg=255 cterm=NONE + hi DiffText ctermfg=255 ctermbg=136 cterm=NONE + hi Comment ctermfg=102 ctermbg=NONE cterm=italic + hi Constant ctermfg=37 ctermbg=NONE cterm=NONE + hi! link String Constant + hi! link Number Constant + hi! link Boolean Constant + hi! link Character Constant + hi! link Float Constant + hi Identifier ctermfg=26 ctermbg=NONE cterm=NONE + hi! link Function Identifier + hi Statement ctermfg=136 ctermbg=NONE cterm=NONE + hi! link Conditional Statement + hi! link Repeat Statement + hi! link Keyword Statement + hi! link Label Statement + hi! link Exception Statement + hi! link Operator Statement + hi PreProc ctermfg=166 ctermbg=NONE cterm=NONE + hi! link Define PreProc + hi! link PreCondit PreProc + hi! link Include PreProc + hi! link Macro Include + hi Type ctermfg=28 ctermbg=NONE cterm=NONE + hi! link Typedef Type + hi! link StorageClass Type + hi! link Structure Type + hi Special ctermfg=160 ctermbg=NONE cterm=NONE + hi! link SpecialChar Special + hi! link Delimiter Special + hi! link SpecialComment Special + hi! link Debug Special + hi! link Tag Special + hi Error ctermfg=160 ctermbg=NONE cterm=bold + hi Todo ctermfg=163 ctermbg=NONE cterm=bold + hi Underlined ctermfg=98 ctermbg=NONE cterm=underline + hi Ignore ctermfg=252 ctermbg=NONE cterm=NONE + hi VimCommand ctermfg=136 ctermbg=NONE cterm=NONE + hi RubyDefine ctermfg=235 ctermbg=NONE cterm=bold + if !s:italics + hi Comment cterm=NONE + endif + if get(g:, 'selenized_green_keywords', 0) + hi Statement ctermfg=28 ctermbg=NONE cterm=NONE + hi Type ctermfg=136 ctermbg=NONE cterm=NONE + endif + hi Terminal ctermfg=NONE ctermbg=NONE cterm=NONE + hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE + hi Directory ctermfg=NONE ctermbg=NONE cterm=NONE + hi EndOfBuffer ctermfg=NONE ctermbg=NONE cterm=NONE + hi ErrorMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi FoldColumn ctermfg=NONE ctermbg=NONE cterm=NONE + hi ModeMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi MoreMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi NonText ctermfg=NONE ctermbg=NONE cterm=NONE + hi Question ctermfg=NONE ctermbg=NONE cterm=NONE + hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE + hi SpecialKey ctermfg=NONE ctermbg=NONE cterm=NONE + hi SpellBad ctermfg=NONE ctermbg=NONE cterm=underline + hi SpellCap ctermfg=NONE ctermbg=NONE cterm=underline + hi SpellLocal ctermfg=NONE ctermbg=NONE cterm=underline + hi SpellRare ctermfg=NONE ctermbg=NONE cterm=underline + hi Title ctermfg=NONE ctermbg=NONE cterm=NONE + hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=NONE + hi WarningMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi WildMenu ctermfg=NONE ctermbg=NONE cterm=NONE + unlet s:t_Co s:italics + finish +endif + +if s:t_Co >= 16 + if &background ==# 'dark' + hi Normal ctermfg=NONE ctermbg=NONE cterm=NONE + hi IncSearch ctermfg=DarkMagenta ctermbg=NONE cterm=reverse + hi Search ctermfg=DarkYellow ctermbg=NONE cterm=reverse + hi! link QuickFixLine Search + hi Visual ctermfg=NONE ctermbg=DarkGrey cterm=NONE + hi MatchParen ctermfg=LightYellow ctermbg=DarkGrey cterm=bold + hi Cursor ctermfg=NONE ctermbg=NONE cterm=reverse + hi! link lCursor Cursor + hi CursorLine ctermfg=NONE ctermbg=Black cterm=NONE + hi CursorColumn ctermfg=NONE ctermbg=Black cterm=NONE + hi Folded ctermfg=NONE ctermbg=Black cterm=NONE + hi ColorColumn ctermfg=NONE ctermbg=DarkGrey cterm=NONE + hi LineNr ctermfg=LightGrey ctermbg=Black cterm=NONE + hi CursorLineNr ctermfg=White ctermbg=NONE cterm=NONE + hi VertSplit ctermfg=LightGrey ctermbg=LightGrey cterm=NONE + hi StatusLine ctermfg=NONE ctermbg=NONE cterm=reverse + hi StatusLineNC ctermfg=NONE ctermbg=DarkGrey cterm=NONE + hi! link StatusLineTerm StatusLine + hi! link StatusLineTermNC StatusLineNC + hi TabLineSel ctermfg=White ctermbg=Black cterm=bold,reverse + hi TabLine ctermfg=LightGrey ctermbg=NONE cterm=reverse + hi TabLineFill ctermfg=LightGrey ctermbg=NONE cterm=reverse + hi ToolbarButton ctermfg=NONE ctermbg=NONE cterm=reverse + hi ToolbarLine ctermfg=NONE ctermbg=DarkGrey cterm=NONE + hi Pmenu ctermfg=LightGrey ctermbg=Black cterm=NONE + hi PmenuSel ctermfg=NONE ctermbg=DarkGrey cterm=NONE + hi PmenuThumb ctermfg=NONE ctermbg=LightGrey cterm=NONE + hi PmenuSbar ctermfg=NONE ctermbg=DarkGrey cterm=NONE + hi DiffAdd ctermfg=DarkGreen ctermbg=Black cterm=NONE + hi DiffChange ctermfg=NONE ctermbg=Black cterm=NONE + hi DiffDelete ctermfg=DarkRed ctermbg=Black cterm=NONE + hi DiffText ctermfg=Black ctermbg=DarkYellow cterm=NONE + hi Comment ctermfg=LightGrey ctermbg=NONE cterm=italic + hi Constant ctermfg=DarkCyan ctermbg=NONE cterm=NONE + hi! link String Constant + hi! link Number Constant + hi! link Boolean Constant + hi! link Character Constant + hi! link Float Constant + hi Identifier ctermfg=LightBlue ctermbg=NONE cterm=NONE + hi! link Function Identifier + hi Statement ctermfg=LightYellow ctermbg=NONE cterm=NONE + hi! link Conditional Statement + hi! link Repeat Statement + hi! link Keyword Statement + hi! link Label Statement + hi! link Exception Statement + hi! link Operator Statement + hi PreProc ctermfg=DarkMagenta ctermbg=NONE cterm=NONE + hi! link Define PreProc + hi! link PreCondit PreProc + hi! link Include PreProc + hi! link Macro Include + hi Type ctermfg=DarkGreen ctermbg=NONE cterm=NONE + hi! link Typedef Type + hi! link StorageClass Type + hi! link Structure Type + hi Special ctermfg=DarkRed ctermbg=NONE cterm=NONE + hi! link SpecialChar Special + hi! link Delimiter Special + hi! link SpecialComment Special + hi! link Debug Special + hi! link Tag Special + hi Error ctermfg=DarkRed ctermbg=NONE cterm=bold + hi Todo ctermfg=DarkMagenta ctermbg=NONE cterm=bold + hi Underlined ctermfg=LightBlue ctermbg=NONE cterm=underline + hi Ignore ctermfg=DarkGrey ctermbg=NONE cterm=NONE + hi VimCommand ctermfg=DarkYellow ctermbg=NONE cterm=NONE + hi RubyDefine ctermfg=White ctermbg=NONE cterm=bold + if !s:italics + hi Comment cterm=NONE + endif + if get(g:, 'selenized_green_keywords', 0) + hi Statement ctermfg=DarkGreen ctermbg=NONE cterm=NONE + hi Type ctermfg=DarkYellow ctermbg=NONE cterm=NONE + endif + hi Terminal ctermfg=NONE ctermbg=NONE cterm=NONE + hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE + hi Directory ctermfg=NONE ctermbg=NONE cterm=NONE + hi EndOfBuffer ctermfg=NONE ctermbg=NONE cterm=NONE + hi ErrorMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi FoldColumn ctermfg=NONE ctermbg=NONE cterm=NONE + hi ModeMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi MoreMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi NonText ctermfg=NONE ctermbg=NONE cterm=NONE + hi Question ctermfg=NONE ctermbg=NONE cterm=NONE + hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE + hi SpecialKey ctermfg=NONE ctermbg=NONE cterm=NONE + hi SpellBad ctermfg=NONE ctermbg=NONE cterm=underline + hi SpellCap ctermfg=NONE ctermbg=NONE cterm=underline + hi SpellLocal ctermfg=NONE ctermbg=NONE cterm=underline + hi SpellRare ctermfg=NONE ctermbg=NONE cterm=underline + hi Title ctermfg=NONE ctermbg=NONE cterm=NONE + hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=NONE + hi WarningMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi WildMenu ctermfg=NONE ctermbg=NONE cterm=NONE + unlet s:t_Co s:italics + finish + endif + " Light background + hi Normal ctermfg=NONE ctermbg=NONE cterm=NONE + hi IncSearch ctermfg=DarkMagenta ctermbg=NONE cterm=reverse + hi Search ctermfg=DarkYellow ctermbg=NONE cterm=reverse + hi! link QuickFixLine Search + hi Visual ctermfg=NONE ctermbg=DarkGrey cterm=NONE + hi MatchParen ctermfg=LightYellow ctermbg=DarkGrey cterm=bold + hi Cursor ctermfg=NONE ctermbg=NONE cterm=reverse + hi! link lCursor Cursor + hi CursorLine ctermfg=NONE ctermbg=Black cterm=NONE + hi CursorColumn ctermfg=NONE ctermbg=Black cterm=NONE + hi Folded ctermfg=NONE ctermbg=Black cterm=NONE + hi ColorColumn ctermfg=NONE ctermbg=DarkGrey cterm=NONE + hi LineNr ctermfg=LightGrey ctermbg=Black cterm=NONE + hi CursorLineNr ctermfg=White ctermbg=NONE cterm=NONE + hi VertSplit ctermfg=LightGrey ctermbg=LightGrey cterm=NONE + hi StatusLine ctermfg=NONE ctermbg=NONE cterm=reverse + hi StatusLineNC ctermfg=NONE ctermbg=DarkGrey cterm=NONE + hi! link StatusLineTerm StatusLine + hi! link StatusLineTermNC StatusLineNC + hi TabLineSel ctermfg=White ctermbg=Black cterm=bold,reverse + hi TabLine ctermfg=LightGrey ctermbg=NONE cterm=reverse + hi TabLineFill ctermfg=LightGrey ctermbg=NONE cterm=reverse + hi ToolbarButton ctermfg=NONE ctermbg=NONE cterm=reverse + hi ToolbarLine ctermfg=NONE ctermbg=DarkGrey cterm=NONE + hi Pmenu ctermfg=LightGrey ctermbg=Black cterm=NONE + hi PmenuSel ctermfg=NONE ctermbg=DarkGrey cterm=NONE + hi PmenuThumb ctermfg=NONE ctermbg=LightGrey cterm=NONE + hi PmenuSbar ctermfg=NONE ctermbg=DarkGrey cterm=NONE + hi DiffAdd ctermfg=DarkGreen ctermbg=Black cterm=NONE + hi DiffChange ctermfg=NONE ctermbg=Black cterm=NONE + hi DiffDelete ctermfg=DarkRed ctermbg=Black cterm=NONE + hi DiffText ctermfg=Black ctermbg=DarkYellow cterm=NONE + hi Comment ctermfg=LightGrey ctermbg=NONE cterm=italic + hi Constant ctermfg=DarkCyan ctermbg=NONE cterm=NONE + hi! link String Constant + hi! link Number Constant + hi! link Boolean Constant + hi! link Character Constant + hi! link Float Constant + hi Identifier ctermfg=LightBlue ctermbg=NONE cterm=NONE + hi! link Function Identifier + hi Statement ctermfg=LightYellow ctermbg=NONE cterm=NONE + hi! link Conditional Statement + hi! link Repeat Statement + hi! link Keyword Statement + hi! link Label Statement + hi! link Exception Statement + hi! link Operator Statement + hi PreProc ctermfg=DarkMagenta ctermbg=NONE cterm=NONE + hi! link Define PreProc + hi! link PreCondit PreProc + hi! link Include PreProc + hi! link Macro Include + hi Type ctermfg=DarkGreen ctermbg=NONE cterm=NONE + hi! link Typedef Type + hi! link StorageClass Type + hi! link Structure Type + hi Special ctermfg=DarkRed ctermbg=NONE cterm=NONE + hi! link SpecialChar Special + hi! link Delimiter Special + hi! link SpecialComment Special + hi! link Debug Special + hi! link Tag Special + hi Error ctermfg=DarkRed ctermbg=NONE cterm=bold + hi Todo ctermfg=DarkMagenta ctermbg=NONE cterm=bold + hi Underlined ctermfg=LightBlue ctermbg=NONE cterm=underline + hi Ignore ctermfg=DarkGrey ctermbg=NONE cterm=NONE + hi VimCommand ctermfg=DarkYellow ctermbg=NONE cterm=NONE + hi RubyDefine ctermfg=White ctermbg=NONE cterm=bold + if !s:italics + hi Comment cterm=NONE + endif + if get(g:, 'selenized_green_keywords', 0) + hi Statement ctermfg=DarkGreen ctermbg=NONE cterm=NONE + hi Type ctermfg=DarkYellow ctermbg=NONE cterm=NONE + endif + hi Terminal ctermfg=NONE ctermbg=NONE cterm=NONE + hi Conceal ctermfg=NONE ctermbg=NONE cterm=NONE + hi Directory ctermfg=NONE ctermbg=NONE cterm=NONE + hi EndOfBuffer ctermfg=NONE ctermbg=NONE cterm=NONE + hi ErrorMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi FoldColumn ctermfg=NONE ctermbg=NONE cterm=NONE + hi ModeMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi MoreMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi NonText ctermfg=NONE ctermbg=NONE cterm=NONE + hi Question ctermfg=NONE ctermbg=NONE cterm=NONE + hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE + hi SpecialKey ctermfg=NONE ctermbg=NONE cterm=NONE + hi SpellBad ctermfg=NONE ctermbg=NONE cterm=underline + hi SpellCap ctermfg=NONE ctermbg=NONE cterm=underline + hi SpellLocal ctermfg=NONE ctermbg=NONE cterm=underline + hi SpellRare ctermfg=NONE ctermbg=NONE cterm=underline + hi Title ctermfg=NONE ctermbg=NONE cterm=NONE + hi VisualNOS ctermfg=NONE ctermbg=NONE cterm=NONE + hi WarningMsg ctermfg=NONE ctermbg=NONE cterm=NONE + hi WildMenu ctermfg=NONE ctermbg=NONE cterm=NONE + unlet s:t_Co s:italics + finish +endif + +" Background: dark +" Color: bg_0 #181818 ~ none +" Color: bg_1 #252525 ~ Black +" Color: bg_2 #3b3b3b ~ DarkGrey +" Color: dim_0 #777777 ~ LightGrey +" Color: fg_0 #b9b9b9 ~ none +" Color: fg_1 #dedede ~ White +" Color: red #ed4a46 203 DarkRed +" Color: green #70b433 ~ DarkGreen +" Color: yellow #dbb32d ~ DarkYellow +" Color: blue #368aeb 33 DarkBlue +" Color: magenta #eb6eb7 ~ DarkMagenta +" Color: cyan #3fc5b7 ~ DarkCyan +" Color: br_red #ff5e56 ~ LightRed +" Color: br_green #83c746 ~ LightGreen +" Color: br_yellow #efc541 178 LightYellow +" Color: br_blue #4f9cfe 39 LightBlue +" Color: br_magenta #ff81ca ~ LightMagenta +" Color: br_cyan #56d8c9 ~ LightCyan +" Color: orange #e67f43 ~ DarkMagenta +" Color: violet #a580e2 ~ LightBlue +" Color: br_orange #fa9153 ~ LightMagenta +" Color: br_violet #b891f5 ~ LightBlue +" Term colors: bg_1 red green yellow blue magenta cyan dim_0 +" Term colors: bg_2 br_red br_green br_yellow br_blue br_magenta br_cyan fg_1 +" Background: light +" Color: bg_0 #ffffff ~ none +" Color: bg_1 #ebebeb ~ Black +" Color: bg_2 #cdcdcd ~ DarkGrey +" Color: dim_0 #878787 ~ LightGrey +" Color: fg_0 #474747 ~ none +" Color: fg_1 #282828 ~ White +" Color: red #d6000c ~ DarkRed +" Color: green #1d9700 ~ DarkGreen +" Color: yellow #c49700 ~ DarkYellow +" Color: blue #0064e4 ~ DarkBlue +" Color: magenta #dd0f9d ~ DarkMagenta +" Color: cyan #00ad9c ~ DarkCyan +" Color: br_red #bf0000 ~ LightRed +" Color: br_green #008400 ~ LightGreen +" Color: br_yellow #af8500 ~ LightYellow +" Color: br_blue #0054cf ~ LightBlue +" Color: br_magenta #c7008b ~ LightMagenta +" Color: br_cyan #009a8a ~ LightCyan +" Color: orange #d04a00 ~ DarkMagenta +" Color: violet #7f51d6 ~ LightBlue +" Color: br_orange #ba3700 ~ LightMagenta +" Color: br_violet #6b40c3 ~ LightBlue +" Term colors: bg_1 red green yellow blue magenta cyan dim_0 +" Term colors: bg_2 br_red br_green br_yellow br_blue br_magenta br_cyan fg_1 +" vim: et ts=2 sw=2 + + hi NonText ctermbg=none + hi Normal guibg=NONE ctermbg=NONE diff --git a/nvim/init.vim b/nvim/init.vim @@ -0,0 +1,238 @@ +" Hello and welcome! + +let mapleader ="," + +if ! filereadable(expand('~/.config/nvim/autoload/plug.vim')) + echo "Downloading junegunn/vim-plug to manage plugins..." + silent !mkdir -p ~/.config/nvim/autoload/ + silent !curl "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" > ~/.config/nvim/autoload/plug.vim + autocmd VimEnter * PlugInstall +endif + +call plug#begin('~/.config/nvim/plugged') + + Plug 'machakann/vim-sandwich' + Plug 'tpope/vim-commentary' + + Plug 'junegunn/goyo.vim' + Plug 'junegunn/limelight.vim' + + Plug 'kovetskiy/sxhkd-vim' " detects sxhkd filetype, handles highlighting and indentation + Plug 'frazrepo/vim-rainbow' + Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() } } + + Plug 'ap/vim-css-color' + + " theming + + syntax on + + " active full color palette before theming + if (has("termguicolors")) + set termguicolors + endif + + colorscheme selenized_bw + set background=dark + " make background transparent + hi NonText ctermbg=none + hi Normal guibg=NONE ctermbg=NONE + + Plug 'bling/vim-airline' + Plug 'vim-airline/vim-airline-themes' + let g:airline_theme='akhatib' + + +call plug#end() + +" path to python + let g:python3_host_prog = '/usr/bin/python3' + let g:python_host_prog = '/usr/bin/python2' + + +" Some basics: + set go=a + set mouse=a " automatically enable mouse usage + set completeopt+=preview + + + autocmd! CompleteDone * if pumvisible() == 0 | pclose | endif + + + " search + set incsearch " find as you type + set hlsearch " highlight search terms + set ignorecase " case insensitive search + set smartcase " case sensitive when upper case present + " clear current search highlighting with // + nmap <silent> // :nohlsearch<CR> + + " indentation and tabbing + filetype indent on + set autoindent + set tabstop + set expandtab + set softtabstop=4 + set shiftwidth=4 + + set clipboard+=unnamedplus + set updatetime=300 + set nocompatible + set encoding=utf-8 + set number relativenumber + autocmd CursorHold * update + set nofoldenable + set noswapfile + filetype plugin on + set foldmethod=syntax + + + nnoremap <leader>sv :source $MYVIMRC<cr> + +" Enable autocompletion: + set wildmode=longest,list,full + +" Shortcutting split navigation: + map <C-h> <C-w>h + map <C-j> <C-w>j + map <C-k> <C-w>k + map <C-l> <C-w>l + +" Move up and down in autocomplete with <c-j> and <c-k> + inoremap <expr> <C-j> ("\<C-n>") + inoremap <expr> <C-k> ("\<C-p>") + +" Disables automatic commenting on newline: + autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o + +" vim rainbow settings + let g:rainbow_active = 1 + +" run Black with F9 + " nnoremap <F9> :Black<CR> + +" Goyo plugin makes text more readable when writing prose: + map <leader>f :Goyo \| set linebreak<CR> + +" Spell-check set to <leader>o, 'o' for 'orthography': + map <leader>o :setlocal spell! spelllang=en_us<CR> + +" Splits open at the bottom and right. + set splitbelow splitright + +" Shortcut split opening + nnoremap <leader>h :split<Space> + nnoremap <leader>v :vsplit<Space> + +" Check file in shellcheck: + map <leader>s :!clear && shellcheck %<CR> + +" Open my bibliography file in split + " map <leader>b :vsp<space>$BIB<CR> + " map <leader>r :vsp<space>$REFER<CR> +" Replace all is aliased to S. + nnoremap S :%s//g<Left><Left> + +" Compile document, be it groff/LaTeX/markdown/etc. + map <leader>c :w! \| !compiler <c-r>%<CR> + +" Open corresponding .pdf/.html or preview + map <leader>p :!opout <c-r>%<CR><CR> + + + autocmd BufRead,BufNewFile /tmp/calcurse* set filetype=markdown + autocmd BufRead,BufNewFile *.ms,*.me,*.mom,*.man set filetype=groff + autocmd BufRead,BufNewFile *.tex set filetype=tex + +" Goyo and Limelight activate and deactivated together + autocmd! User GoyoEnter Limelight + autocmd! User GoyoLeave Limelight! + +" Enable Goyo by default for mutt writting + " Goyo's width will be the line limit in mutt. + autocmd BufRead,BufNewFile /tmp/neomutt* let g:goyo_width=80 + autocmd BufRead,BufNewFile /tmp/neomutt* :Goyo + +" Enable Goyo by default for markdown writing + autocmd BufRead,BufNewFile *.md :Goyo + +" Color name (:help cterm-colors) or ANSI code + let g:limelight_conceal_ctermfg = 'gray' + let g:limelight_conceal_ctermfg = 240 + +" Color name (:help gui-colors) or RGB color + let g:limelight_conceal_guifg = 'DarkGray' + let g:limelight_conceal_guifg = '#777777' + +" Automatically deletes all trailing whitespace on save. + autocmd BufWritePre * %s/\s\+$//e + +" When shortcut files are updated: + autocmd BufWritePost ~/.config/bmdirs,~/.config/bmfiles !shortcuts + +" Update binds when sxhkdrc is updated. + autocmd BufWritePost *sxhkdrc !pkill -USR1 sxhkd + +" Run xrdb whenever Xdefaults or Xresources are updated. + autocmd BufWritePost *Xresources,*Xdefaults !xrdb % + +" Alias write and quit to Q + nnoremap Q :wq<CR> + +" Navigating with guides + inoremap ;g <++> + inoremap <leader><leader> <Esc>/<++><Enter>"_c4l + vnoremap <leader><leader> <Esc>/<++><Enter>"_c4l + map <leader><leader> <Esc>/<++><Enter>"_c4l + +" Save file as sudo on files that require root permission + cnoremap w!! execute 'silent! write !sudo tee % >/dev/null' <bar> edit! + +" markdown + autocmd Filetype markdown,rmd map <leader>w yiWi[<esc>Ea](<esc>pa) + autocmd Filetype markdown,rmd inoremap ,n ---<Enter><Enter> + autocmd Filetype markdown,rmd inoremap ,b ****<++><Esc>F*hi + autocmd Filetype markdown,rmd inoremap ,s ~~~~<++><Esc>F~hi + autocmd Filetype markdown,rmd inoremap ,e **<++><Esc>F*i + autocmd Filetype markdown,rmd inoremap ,h ====<Space><++><Esc>F=hi + autocmd Filetype markdown,rmd inoremap ,i ![](<++>)<++><Esc>F[a + autocmd Filetype markdown,rmd inoremap ,a [](<++>)<++><Esc>F[a + autocmd Filetype markdown,rmd inoremap ,1 #<Space><Enter><++><Esc>kA + autocmd Filetype markdown,rmd inoremap ,2 ##<Space><Enter><++><Esc>kA + autocmd Filetype markdown,rmd inoremap ,3 ###<Space><Enter><++><Esc>kA + autocmd Filetype markdown,rmd inoremap ,l --------<Enter> + autocmd Filetype rmd inoremap ,r ```{r}<CR>```<CR><CR><esc>2kO + autocmd Filetype rmd inoremap ,p ```{python}<CR>```<CR><CR><esc>2kO + autocmd Filetype rmd inoremap ,c ```<cr>```<cr><cr><esc>2kO + +" markdown preview + " set to 1, nvim will open the preview window after entering the markdown buffer + " default: 0 + let g:mkdp_auto_start = 0 + + " set to 1, the nvim will auto close current preview window when change + " from markdown buffer to another buffer + " default: 1 + let g:mkdp_auto_close = 1 + + " set to 1, the vim will refresh markdown when save the buffer or + " leave from insert mode, default 0 is auto refresh markdown as you edit or + " move the cursor + " default: 0 + let g:mkdp_refresh_slow = 0 + + " set to 1, the MarkdownPreview command can be use for all files, + " by default it can be use in markdown file + " default: 0 + let g:mkdp_command_for_global = 0 + + " preview page title + " ${name} will be replace with the file name + let g:mkdp_page_title = '「${name}」' + +" citations + let g:citation_vim_bibtex_file="repos/life/dox/acad.bib" + let g:citation_vim_mode="bibtex" + let g:citation_vim_cache_path='~/.config/nvim/cache' + let g:citation_vim_description_format = "{} ┃ {} ┃ {} ┃ {} ┃ {}" + let g:citation_vim_description_fields = ["key","author","publication","journal","doi"] diff --git a/nvim/spell/en.utf-8.add b/nvim/spell/en.utf-8.add @@ -0,0 +1,12 @@ +confounders +Zhao +SHAP +explainability +performant +GBM +untuned +Rajkomar +ROC-AUC +SVM +ROC +PDPs diff --git a/nvim/spell/en.utf-8.add.spl b/nvim/spell/en.utf-8.add.spl Binary files differ. diff --git a/pam/pam_environment b/pam/pam_environment @@ -0,0 +1,3 @@ +SSH_AGENT_PID DEFAULT= +SSH_AUTH_SOCK DEFAULT="${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh" +GNUPGHOME DEFAULT="/home/beau/.config/gnupg" diff --git a/profile b/profile @@ -0,0 +1,86 @@ +#!/usr/bin/env sh + +# Profile file. Runs on login. + +# Adds ruby to path +PATH="$PATH:$(ruby -e 'puts Gem.user_dir')/bin" + +# Adds `~/.local/bin/` and all subdirectories to $PATH +export PATH="$PATH:$(du "$HOME/.local/bin/" | cut -f2 | tr '\n' ':' | sed 's/:*$//')" + +export EDITOR="nvim" +export TERMINAL="st" +export BROWSER="chromium" +export READER="zathura" +export FILE="nnn" + +export XDG_CONFIG_HOME="$HOME/.config" +export XDG_DATA_HOME="$HOME/.local/share" +export XDG_CACHE_HOME="$HOME/.cache" + +# export XAUTHORITY="$XDG_RUNTIME_DIR/Xauthority" # mess with this sometime + +export BIB="$HOME/repos/life/dox/acad.bib" +export REFER="$HOME/repos/life/dox/thesis/thesis.refer" + +export CARGO_HOME="$XDG_DATA_HOME"/cargo +export GEM_HOME="$XDG_DATA_HOME"/gem +export GEM_SPEC_CACHE="$XDG_CACHE_HOME"/gem +export NPM_CONFIG_USERCONFIG=$XDG_CONFIG_HOME/npm/npmrc + +export LESSHISTFILE="-" +export SUDO_ASKPASS="$HOME/.local/bin/tools/dmenupass" +export NOTMUCH_CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/notmuch-config" +export GTK2_RC_FILES="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-2.0/gtkrc-2.0" +export ZDOTDIR="${XDG_CONFIG_HOME:-$HOME/.config}/zsh" +export WGETRC="${XDG_CONFIG_HOME:-$HOME/.config}/wget/wgetrc" +export INPUTRC="${XDG_CONFIG_HOME:-$HOME/.config}/inputrc" +export PASSWORD_STORE_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/password-store" +export XINITRC="$XDG_CONFIG_HOME"/X11/xinitrc +export WAKATIME_HOME="$XDG_CONFIG_HOME"/wakatime +export MAILCAPS="$XDG_CONFIG_HOME"/tuir/mailcap + +export CONDARC="${XDG_CONFIG_HOME:-$HOME/.config}/conda/.condarc" +export IPYTHONDIR="${XDG_CONFIG_HOME:-$HOME/.config}/jupyter" +export JUPYTER_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/jupyter" + +export R_ENVIRON_USER="${XDG_CONFIG_HOME:-$HOME/.config}/R/Renviron" + +export GPG_TTY=$(tty) +export GPG_AGENT_INFO="" + +# less/man colors +export LESS=-R +export LESS_TERMCAP_mb="$(printf '%b' '')"; a="${a%_}" +export LESS_TERMCAP_md="$(printf '%b' '')"; a="${a%_}" +export LESS_TERMCAP_me="$(printf '%b' '')"; a="${a%_}" +export LESS_TERMCAP_so="$(printf '%b' '')"; a="${a%_}" +export LESS_TERMCAP_se="$(printf '%b' '')"; a="${a%_}" +export LESS_TERMCAP_us="$(printf '%b' '')"; a="${a%_}" +export LESS_TERMCAP_ue="$(printf '%b' '')"; a="${a%_}" + +mpd >/dev/null 2>&1 & + +[ ! -f ~/.config/shortcutrc ] && shortcuts >/dev/null 2>&1 + + +# Start SSH Agent automatically on login +if [ -z "$SSH_AUTH_SOCK" ] +then + # Check for a currently running instance of the agent + RUNNING_AGENT="`ps -ax | grep 'ssh-agent -s' | grep -v grep | wc -l | tr -d '[:space:]'`" + if [ "$RUNNING_AGENT" = "0" ] + then + # Launch a new instance of the agent + ssh-agent -s &> .ssh/ssh-agent + fi + eval `cat .ssh/ssh-agent` +fi + +# Start graphical server on tty1 if not already running. +[ "$(tty)" = "/dev/tty1" ] && ! ps -e | grep -qw Xorg && exec startx "$XDG_CONFIG_HOME/X11/xinitrc" -- + +# Switch escape and caps if tty: +sudo -n loadkeys ~/.local/bin/ttymaps.kmap 2>/dev/null + +gpg-connect-agent updatestartuptty /bye >/dev/null diff --git a/rclone/rclone.conf b/rclone/rclone.conf @@ -0,0 +1,10 @@ +[cwru] +type = drive +scope = drive +token = {"access_token":"ya29.Il-xBzcsu4NNxBhayBYW1MbXPoRjPKz8-vvUQrH7YE-FjofBuEOIbgckRwaI3ru_uXvVAAMhKRoBT8FFRrYoNi_MWns71We7Bxw1a6tQIkF5swEYCORmCtGW-DNC-0-jqA","token_type":"Bearer","refresh_token":"1//04TDdz5vPTf4xCgYIARAAGAQSNwF-L9IrG4bHUjzB6aDEMUp7UoYrXhWbyiy0ratQte7-jhM9q4HYkFFVEU5hKLIaBYkxEhDL0M4","expiry":"2019-11-19T19:18:55.11796147-05:00"} + +[cbh] +type = drive +scope = drive +token = {"access_token":"ya29.Il-xB1V-6F9xlb_PADHEv2n6TMIirOEkwwonOnM0XCL-fBt4LJLaCduLxAG0lSgrfWRBJgb7n_okqWy0u08TC37ZT8mQoOJORZh5dCmYZ9xqWm5f2_9rzOXU4svSezd5CQ","token_type":"Bearer","refresh_token":"1//04rykCrKN52DDCgYIARAAGAQSNwF-L9Iralm6EdCL03Piagrr0iSYrcLvKF67GOuA7PPLOfGh046xW9Zfq9TUBI6MB2bZ6adJZdg","expiry":"2019-11-19T19:20:14.801067957-05:00"} + diff --git a/shortcutrc b/shortcutrc @@ -0,0 +1,23 @@ +# vim: filetype=sh +alias h="cd ~/ && ls -a" \ +d="cd ~/dox && ls -a" \ +D="cd ~/dl && ls -a" \ +m="cd ~/tunes && ls -a" \ +pp="cd ~/pix && ls -a" \ +vv="cd ~/vids && ls -a" \ +cf="cd ~/.config && ls -a" \ +sc="cd ~/.local/bin && ls -a" \ +mn="cd /mnt && ls -a" \ +bf="$EDITOR ~/.config/bmfiles" \ +bd="$EDITOR ~/.config/bmdirs" \ +cfb="$EDITOR ~/.bashrc" \ +cfa="$EDITOR ~/.config/aliasrc" \ +cfz="$EDITOR ~/.zshrc" \ +cfv="$EDITOR ~/.config/nvim/init.vim" \ +cfm="$EDITOR ~/.config/mutt/muttrc" \ +cfd="$EDITOR ~/.Xdefaults" \ +cfu="$EDITOR ~/.config/newsboat/urls" \ +cfn="$EDITOR ~/.config/newsboat/config" \ +cfmb="$EDITOR ~/.config/ncmpcpp/bindings" \ +cfmc="$EDITOR ~/.config/ncmpcpp/config" \ +cfk="$EDITOR ~/.config/sxhkd/sxhkdrc" \ diff --git a/sxhkd/sxhkdrc b/sxhkd/sxhkdrc @@ -0,0 +1,150 @@ +# Basic binds +super + Return + $TERMINAL -e tmux +super + d + dmenu_run +super + r + $TERMINAL -e $FILE +super + e + $TERMINAL -e neomutt; pkill -RTMIN+12 blocks +super + m + $TERMINAL -e ncmpcpp +super + n + $TERMINAL -e newsboat +super + i + $TERMINAL -e htop +super + c + $TERMINAL -e calcurse -D ~/.config/calcurse +super + v + $TERMINAL -e $EDITOR ~/repos/vimwiki/index.md +super + shift + a + $TERMINAL -e pulsemixer; pkill -RTMIN+10 i3blocks +super + shift + c + camtoggle +super + shift + e + tutorialvids +super + w + $BROWSER +super + shift + w + $TERMINAL -e sudo nmtui +super + shift + g + gimp + +# Et cetera... +super + grave + dmenuunicode +super + Scroll_Lock + killall screenkey || screenkey +super + Insert + showclip +super + Pause + xcqr +super + shift + x + prompt "Shutdown computer?" "sudo -A shutdown -h now" +super + shift + BackSpace + prompt "Reboot computer?" "sudo -A shutdown -r now" +super + x + mpc pause; pauseallmpv; i3lock -e -f -c 1d2021; xset dpms force off +XF86Launch1 + xset dpms force off +XF86AudioMute + lmc mute +XF86AudioLowerVolume + lmc down 5 +shift+XF86AudioLowerVolume + lmc down 10 +control+XF86AudioLowerVolume + lmc down 1 +XF86AudioRaiseVolume + lmc up 5 +shift+XF86AudioRaiseVolume + lmc up 10 +control+XF86AudioRaiseVolume + lmc up 1 +XF86AudioNext + lmc next +XF86AudioPlay + lmc toggle +XF86AudioPrev + lmc prev +XF86AudioStop + lmc toggle +XF86MonBrightnessDown + xbacklight -dec 15 +XF86MonBrightnessUp + xbacklight -inc 15 + + +# Recording +# Take screenshot +Print + maim pic-full-$(date '+%y%m%d-%H%M-%S').png +# Pick screenshot type +shift + Print + maimpick +# Record audio or video +super + Print + dmenurecord +super + End + dmenurecord +# kill active recording +super + Delete + dmenurecord kill + +# Pause audio +super + {_,shift +} p + lmc {toggle,pause} +# Changes to next/previous tracks +super + {comma,period} + lmc {prev,next} +# Restart track +super + shift + less + lmc replay +# Increase volume +super + {equal,plus} + lmc up {5,15} +# Decrease volume +super {_,shift +} + minus + lmc down {5,15} +# Seek foward in song +super + {_,shift +} bracketright + lmc forward {10,120} +# Seek backward in song +super + {_,shift +} bracketleft + lmc back {10,120} + +# Function keys +# Show readme +super + F1 + groff -mom $HOME/.local/share/larbs/readme.mom -Tpdf | zathura - +# F2 is restart in dwm. +# Change display +super + F3 + displayselect +# Hibernate +super + F4 + prompt 'Hibernate computer?' 'sudo systemctl suspend' +# Restart/rescan wifi/eth networks +super + F5 + sudo -A systemctl restart NetworkManager +# Start torrent daemon/open interface +super + F6 + torwrap +# toggle torrent daemon +super + F7 + td-toggle +# sync email +super + F8 + mailsync +# Mount a USB drive or Android device +super + F9 + dmenumount +# Unmount a USB drive or Android device +super + F10 + dmenuumount +# Search with Duckduckgo +super + F11 + ducksearch +# Network Manager interface +super + F12 + $TERMINAL -e sudo -A nmtui diff --git a/sxiv/exec/key-handler b/sxiv/exec/key-handler @@ -0,0 +1,32 @@ +#!/usr/bin/env sh +while read file +do + case "$1" in + "w") setbg "$file" & ;; + "c") + [ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ~/.config/bmdirs | awk '{print $2}' | dmenu -l 20 -i -p "Copy file(s) to where?" | sed "s|~|$HOME|g")" + [ -z "$destdir" ] && exit + cp "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file copied to $destdir." & + ;; + "m") + [ -z "$destdir" ] && destdir="$(sed "s/\s.*#.*$//;/^\s*$/d" ~/.config/bmdirs | awk '{print $2}' | dmenu -l 20 -i -p "Move file(s) to where?" | sed "s|~|$HOME|g")" + [ -z "$destdir" ] && exit + mv "$file" "$destdir" && notify-send -i "$(readlink -f "$file")" "$file moved to $destdir." & + ;; + "r") + convert -rotate 90 "$file" "$file" ;; + "R") + convert -rotate -90 "$file" "$file" ;; + "f") + convert -flop "$file" "$file" ;; + "y") + echo -n "$file" | xclip -selection clipboard && + notify-send "$file copied to clipboard" & ;; + "Y") + readlink -f "$file" | xclip -selection clipboard && + notify-send "$(readlink -f "$file") copied to clipboard" & ;; + "d") + [ "$(printf "No\\nYes" | dmenu -i -p "Really delete $file?")" = "Yes" ] && rm "$file" && notify-send "$file deleted." ;; + "g") ifinstalled gimp && gimp "$file" & ;; + esac +done diff --git a/systemd/user/ssh-agent.service b/systemd/user/ssh-agent.service @@ -0,0 +1,23 @@ +# setup module +echo '[Unit] +Description=SSH key agent + +[Service] +Type=simple +Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket +ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK + +[Install] +WantedBy=default.target' \ + > ~/.config/systemd/user/ssh-agent.service + +# setup environment +echo 'SSH_AUTH_SOCK DEFAULT="${XDG_RUNTIME_DIR}/ssh-agent.socket"' \ + > ~/.pam_environment + +# enable now and at boot +systemctl --user start ssh-agent +systemctl --user enable ssh-agent + +# enable lingering +loginctl enable-linger $(whoami) diff --git a/tmux/tmux.conf b/tmux/tmux.conf @@ -0,0 +1,49 @@ + +unbind C-b +set -g prefix '\' +bind-key '\' send-prefix + +# activate truecolor support +set -g default-terminal "tmux-256color" +set -ga terminal-overrides ",*256col*:Tc" +set status-bg default +set-option -g status-right ' [#(git branch)]#[fg=white] #[fg=white]%R %m-%d#(acpi | cut -d ',' -f 2)#[default]' + +setw -g mode-keys vi +set -g mouse on +setw -g automatic-rename +set -g history-limit 30000 +set-option -g visual-activity on +set-option -g set-titles on +set-option -g set-titles-string '#H:#S.#I.#P #W #T' + +# copy-pasta +set -g set-clipboard external +bind-key P paste-buffer +bind -T copy-mode-vi v send-keys -X begin-selection +bind -T copy-mode-vi r send-keys -X rectangle-toggle +bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary" +bind C-y run "tmux save-buffer - | xclip -i -sel primary" +bind C-p run "tmux set-buffer -- \"$(xclip -o -sel primary);\"; tmux paste-buffer -p" +# Selection with mouse copies to clipboard, in addition to the default action. +unbind -n -Tcopy-mode-vi MouseDragEnd1Pane +bind -Tcopy-mode-vi MouseDragEnd1Pane send -X copy-selection-and-cancel\; run "tmux save-buffer - | xclip -i -sel clipboard > /dev/null" +# Middle click to paste from the clipboard +unbind-key MouseDown2Pane +bind-key -n MouseDown2Pane run "tmux set-buffer -- \"$(xclip -o -sel primary);\"; tmux paste-buffer -p" + +bind-key r source-file ~/.config/tmux/tmux.conf +bind-key Space list-panes + +set-window-option -g window-status-current-style bg=red +setw -g aggressive-resize on +bind-key h select-pane -L +bind-key j select-pane -D +bind-key k select-pane -U +bind-key l select-pane -R +bind-key -r C-h resize-pane -L +bind-key -r C-j resize-pane -D +bind-key -r C-k resize-pane -U +bind-key -r C-l resize-pane -R + + diff --git a/tuir/mailcap b/tuir/mailcap @@ -0,0 +1,70 @@ +# Example mailcap file for Terminal UI for Reddit +# https://gitlab.com/ajak/tuir/ +# +# Copy the contents of this file to {HOME}/.mailcap, or point to it using $MAILCAPS +# Then launch TUIR using the --enable-media flag. All shell commands defined in +# this file depend on external programs that must be installed on your system. +# +# HELP REQUESTED! If you come up with your own commands (especially for OS X) +# and would like to share, please post an issue on the GitHub tracker and we +# can get them added to this file as references. +# +# +# Mailcap 101 +# - The first entry with a matching MIME type will be executed, * is a wildcard +# - %s will be replaced with the image or video url +# - Add ``test=test -n "$DISPLAY"`` if your command opens a new window +# - Add ``needsterminal`` for commands that use the terminal +# - Add ``copiousoutput`` for commands that dump text to stdout + +############################################################################### +# Commands below this point will open media in a separate window without +# pausing execution of TUIR. +############################################################################### + +# Feh is a simple and effective image viewer +# Note that tuir returns a list of urls for imgur albums, so we don't put quotes +# around the `%s` +image/x-imgur-album; feh -g 640x480 -. %s; test=test -n "$DISPLAY" +image/gif; mpv '%s' --autofit 640x480 --loop=inf; test=test -n "$DISPLAY" +image/*; feh -g 640x480 -. '%s'; test=test -n "$DISPLAY" + +# Youtube videos are assigned a custom mime-type, which can be streamed with +# vlc or youtube-dl. +video/x-youtube; vlc '%s' --width 640 --height 480; test=test -n "$DISPLAY" +video/x-youtube; mpv --ytdl-format=bestvideo+bestaudio/best '%s' --autofit 640x480; test=test -n "$DISPLAY" + +# Mpv is a simple and effective video streamer +video/*; mpv '%s' --autofit 640x480 --loop=inf; test=test -n "$DISPLAY" + +############################################################################### +# Commands below this point will attempt to display media directly in the +# terminal when a desktop is not available (e.g. inside of an SSH session) +############################################################################### + +# View images directly in your terminal with iTerm2 +# curl -L https://iterm2.com/misc/install_shell_integration_and_utilities.sh | bash +# image/*; bash -c '[[ "%s" == http* ]] && (curl -s %s | ~/.iterm2/imgcat) || ~/.iterm2/imgcat %s' && read -n 1; needsterminal + +# View true images in the terminal, supported by rxvt-unicode, xterm and st +# Requires the w3m-img package +# image/*; w3m -o 'ext_image_viewer=off' '%s'; needsterminal + +# Don't have a solution for albums yet +image/x-imgur-album; echo + +# 256 color images using half-width unicode characters +# Much higher quality that img2txt, but must be built from source +# https://github.com/rossy/img2xterm +image/*; curl -s '%s' | convert -resize 80x80 - jpg:/tmp/tuir.jpg && img2xterm /tmp/tuir.jpg; needsterminal; copiousoutput + +# Display images in classic ascii using img2txt and lib-caca +image/*; curl -s '%s' | convert - jpg:/tmp/tuir.jpg && img2txt -f utf8 /tmp/tuir.jpg; needsterminal; copiousoutput + +# Full motion videos - requires a framebuffer to view +video/x-youtube; mpv -vo drm -quiet '%s'; needsterminal +video/*; mpv -vo drm -quiet '%s'; needsterminal + +# Ascii videos +# video/x-youtube; youtube-dl -q -o - '%s' | mplayer -cache 8192 -vo caca -quiet -; needsterminal +# video/*; wget '%s' -O - | mplayer -cache 8192 -vo caca -quiet -; needsterminal diff --git a/tuir/tuir.cfg b/tuir/tuir.cfg @@ -0,0 +1,186 @@ +; Terminal UI for Reddit Configuration File +; https://gitlab.com/ajak/tuir +; +; This file should be placed in $XDG_CONFIG/tuir/tuir.cfg +; If $XDG_CONFIG is not set, use ~/.config/tuir/tuir.cfg + +[tuir] +################## +# General Settings +################## + +; Turn on ascii-only mode to disable all unicode characters. +; This may be necessary for compatibility with some terminal browsers. +ascii = False + +; Turn on monochrome mode to disable color. +monochrome = False + +; Data being copied is piped into this command +;clipboard_cmd = xclip +;clipboard_cmd = xsel -b -i +;clipboard_cmd = wl-copy +;clipboard_cmd = pbcopy w + +; Flash when an invalid action is executed. +flash = True + +; Enable debugging by logging all HTTP requests and errors to the given file. +;log = /tmp/tuir.log + +; Default subreddit that will be opened when the program launches. +subreddit = front +;subreddit = python +;subreddit = python+linux+programming +;subreddit = all + +; Allow tuir to store reddit authentication credentials between sessions. +persistent = True + +; Automatically log in on startup, if credentials are available. +autologin = True + +; Clear any stored credentials when the program starts. +clear_auth = False + +; Maximum number of opened links that will be saved in the history file. +history_size = 200 + +; Open external links using programs defined in the mailcap config. +enable_media = True + +; Maximum number of columns for a comment +max_comment_cols = 120 + +; Maximum number of columns for pager +;max_pager_cols = 70 + +; Hide username if logged in, display "Logged in" instead +hide_username = False + +; Color theme, use "tuir --list-themes" to view a list of valid options. +; This can be an absolute filepath, or the name of a theme file that has +; been installed into either the custom of default theme paths. +;theme = molokai + +; Open a new browser window instead of a new tab in existing instance +force_new_browser_window = False + +################ +# OAuth Settings +################ +; This sections defines the paramaters that will be used during the OAuth +; authentication process. tuir is registered as an "installed app", +; see https://github.com/reddit/reddit/wiki/OAuth2 for more information. + +; These settings are defined at https://www.reddit.com/prefs/apps and should +; not be altered unless you are defining your own developer application. +oauth_client_id = zjyhNI7tK8ivzQ +oauth_client_secret = praw_gapfill +oauth_redirect_uri = http://127.0.0.1:65000/ + +; Port that the tuir webserver will listen on. This should match the redirect +; uri defined above. +oauth_redirect_port = 65000 + +; Access permissions that will be requested. +oauth_scope = edit,history,identity,mysubreddits,privatemessages,read,report,save,submit,subscribe,vote + +; This is a separate token for the imgur api. It's used to extract images +; from imgur links and albums so they can be opened with mailcap. +; See https://imgur.com/account/settings/apps to generate your own key. +imgur_client_id = b33d69ac8931734 + +[bindings] +############## +# Key Bindings +############## +; If you would like to define custom bindings, copy this section into your +; config file with the [bindings] heading. All commands must be bound to at +; least one key for the config to be valid. +; +; 1.) Plain keys can be represented by either uppercase/lowercase characters +; or the hexadecimal numbers referring their ascii codes. For reference, see +; https://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart +; e.g. Q, q, 1, ? +; e.g. 0x20 (space), 0x3c (less-than sign) +; +; 2.) Special ascii control codes should be surrounded with <>. For reference, +; see https://en.wikipedia.org/wiki/ASCII#ASCII_control_code_chart +; e.g. <LF> (enter), <ESC> (escape) +; +; 3.) Other special keys are defined by curses, they should be surrounded by <> +; and prefixed with KEY_. For reference, see +; https://docs.python.org/2/library/curses.html#constants +; e.g. <KEY_LEFT> (left arrow), <KEY_F5>, <KEY_NPAGE> (page down) +; +; Notes: +; - Curses <KEY_ENTER> is unreliable and should always be used in conjunction +; with <LF>. +; - Use 0x20 for the space key. +; - A subset of Ctrl modifiers are available through the ascii control codes. +; For example, Ctrl-D will trigger an <EOT> signal. See the table above for +; a complete reference. + +; Base page +EXIT = q +FORCE_EXIT = Q +HELP = ? +SORT_1 = 1 +SORT_2 = 2 +SORT_3 = 3 +SORT_4 = 4 +SORT_5 = 5 +SORT_6 = 6 +SORT_7 = 7 +MOVE_UP = k, <KEY_UP> +MOVE_DOWN = j, <KEY_DOWN> +PREVIOUS_THEME = <KEY_F2> +NEXT_THEME = <KEY_F3> +PAGE_UP = m, <KEY_PPAGE>, <NAK> +PAGE_DOWN = n, <KEY_NPAGE>, <EOT> +PAGE_TOP = gg +PAGE_BOTTOM = G +UPVOTE = a +DOWNVOTE = z +LOGIN = u +DELETE = d +EDIT = e +INBOX = i +REFRESH = r, <KEY_F5> +PROMPT = / +SAVE = w +COPY_PERMALINK = y +COPY_URL = Y +PRIVATE_MESSAGE = C +SUBSCRIPTIONS = s +MULTIREDDITS = S + +; Submission page +SUBMISSION_TOGGLE_COMMENT = 0x20 +SUBMISSION_OPEN_IN_BROWSER = o, <LF>, <KEY_ENTER> +SUBMISSION_POST = c +SUBMISSION_EXIT = h, <KEY_LEFT> +SUBMISSION_OPEN_IN_PAGER = l, <KEY_RIGHT> +SUBMISSION_OPEN_IN_URLVIEWER = b +SUBMISSION_GOTO_PARENT = K +SUBMISSION_GOTO_SIBLING = J + +; Subreddit page +SUBREDDIT_SEARCH = f +SUBREDDIT_POST = c +SUBREDDIT_OPEN = l, <KEY_RIGHT> +SUBREDDIT_OPEN_IN_BROWSER = o, <LF>, <KEY_ENTER> +SUBREDDIT_FRONTPAGE = p +SUBREDDIT_HIDE = 0x20 + +; Subscription page +SUBSCRIPTION_SELECT = l, <LF>, <KEY_ENTER>, <KEY_RIGHT> +SUBSCRIPTION_EXIT = h, s, S, <ESC>, <KEY_LEFT> + +; Inbox page +INBOX_VIEW_CONTEXT = l, <KEY_RIGHT> +INBOX_OPEN_SUBMISSION = o, <LF>, <KEY_ENTER> +INBOX_REPLY = c +INBOX_MARK_READ = w +INBOX_EXIT = h, <ESC>, <KEY_LEFT> diff --git a/user-dirs.dirs b/user-dirs.dirs @@ -0,0 +1 @@ +XDG_DESKTOP_DIR="$HOME/" diff --git a/vlc/vlc-qt-interface.conf b/vlc/vlc-qt-interface.conf @@ -0,0 +1,24 @@ +[General] +filedialog-path=@Variant(\0\0\0\x11\0\0\0Ofile:///home/beau/vids/mov/Ponyo%20on%20the%20Cliff%20by%20the%20Sea%202009.mkv) +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\xff\xff\xff\xfe\0\0\x1\xfe\0\0\x1\xc8\0\0\x3\x1\0\0\0\0\0\0\x2\0\0\0\x1\xc6\0\0\x2\xff\0\0\0\0\0\0\0\0\x5V\0\0\0\0\0\0\x2\0\0\0\x1\xc6\0\0\x2\xff) + +[FullScreen] +pos=@Point(0 0) +screen=@Rect(0 0 0 0) +wide=false + +[MainWindow] +adv-controls=0 +bgSize=@Size(1304 613) +pl-dock-status=true +playlist-visible=false +playlistSize=@Size(-1 -1) +status-bar-visible=false + +[OpenDialog] +advanced=false +size=@Size(526 400) + +[RecentsMRL] +list=file:///home/beau/vids/mov/Ponyo%20on%20the%20Cliff%20by%20the%20Sea%202009.mkv, file:///home/beau/vids/mov/Song.of.the.Sea.2014.1080p.BluRay.x264.YIFY.mp4 +times=690147, 0 diff --git a/vlc/vlcrc b/vlc/vlcrc @@ -0,0 +1,4814 @@ +### +### vlc 3.0.8 +### + +### +### lines beginning with a '#' character are comments +### + +[stream_out_transcode] # Transcode stream output + +# Video encoder (string) +#sout-transcode-venc= + +# Destination video codec (string) +#sout-transcode-vcodec= + +# Video bitrate (integer) +#sout-transcode-vb=0 + +# Video scaling (float) +#sout-transcode-scale=0.000000 + +# Video frame-rate (string) +#sout-transcode-fps= + +# Deinterlace video (boolean) +#sout-transcode-deinterlace=0 + +# Deinterlace module (string) +#sout-transcode-deinterlace-module=deinterlace + +# Video width (integer) +#sout-transcode-width=0 + +# Video height (integer) +#sout-transcode-height=0 + +# Maximum video width (integer) +#sout-transcode-maxwidth=0 + +# Maximum video height (integer) +#sout-transcode-maxheight=0 + +# Video filter (string) +#sout-transcode-vfilter= + +# Audio encoder (string) +#sout-transcode-aenc= + +# Destination audio codec (string) +#sout-transcode-acodec= + +# Audio bitrate (integer) +#sout-transcode-ab=96 + +# Audio language (string) +#sout-transcode-alang= + +# Audio channels (integer) +#sout-transcode-channels=0 + +# Audio sample rate (integer) +#sout-transcode-samplerate=0 + +# Audio filter (string) +#sout-transcode-afilter= + +# Subtitle encoder (string) +#sout-transcode-senc= + +# Destination subtitle codec (string) +#sout-transcode-scodec= + +# Destination subtitle codec (boolean) +#sout-transcode-soverlay=0 + +# Overlays (string) +#sout-transcode-sfilter= + +# Number of threads (integer) +#sout-transcode-threads=0 + +# Picture pool size (integer) +#sout-transcode-pool-size=10 + +# High priority (boolean) +#sout-transcode-high-priority=0 + +[setid] # Change the id of an elementary stream + +# Elementary Stream ID (integer) +#sout-setid-id=0 + +# New ES ID (integer) +#sout-setid-new-id=0 + +# Elementary Stream ID (integer) +#sout-setlang-id=0 + +# Language (string) +#sout-setlang-lang=eng + +[stream_out_rtp] # RTP stream output + +# Destination (string) +#sout-rtp-dst= + +# SDP (string) +#sout-rtp-sdp= + +# Muxer (string) +#sout-rtp-mux= + +# SAP announcing (boolean) +#sout-rtp-sap=0 + +# Session name (string) +#sout-rtp-name= + +# Session category (string) +#sout-rtp-cat= + +# Session description (string) +#sout-rtp-description= + +# Session URL (string) +#sout-rtp-url= + +# Session email (string) +#sout-rtp-email= + +# Transport protocol (string) +#sout-rtp-proto=udp + +# Port (integer) +#sout-rtp-port=5004 + +# Audio port (integer) +#sout-rtp-port-audio=0 + +# Video port (integer) +#sout-rtp-port-video=0 + +# Hop limit (TTL) (integer) +#sout-rtp-ttl=-1 + +# RTP/RTCP multiplexing (boolean) +#sout-rtp-rtcp-mux=0 + +# Caching value (ms) (integer) +#sout-rtp-caching=300 + +# MP4A LATM (boolean) +#sout-rtp-mp4a-latm=0 + +# RTSP session timeout (s) (integer) +#rtsp-timeout=60 + +# Username (string) +#sout-rtsp-user= + +# Password (string) +#sout-rtsp-pwd= + +[stats] # Writes statistic info about stream + +# Output file (string) +#sout-stats-output= + +# Prefix to show on output line (string) +#sout-stats-prefix=stats + +[record] # Record stream output + +# Destination prefix (string) +#sout-record-dst-prefix= + +[bridge] # Bridge stream output + +# ID (integer) +#sout-bridge-out-id=0 + +# Destination bridge-in name (string) +#sout-bridge-out-in-name=default + +# Delay (integer) +#sout-bridge-in-delay=0 + +# ID Offset (integer) +#sout-bridge-in-id-offset=8192 + +# Name of current instance (string) +#sout-bridge-in-name=default + +# Fallback to placeholder stream when out of data (boolean) +#sout-bridge-in-placeholder=0 + +# Placeholder delay (integer) +#sout-bridge-in-placeholder-delay=200 + +# Wait for I frame before toggling placeholder (boolean) +#sout-bridge-in-placeholder-switch-on-iframe=1 + +[es] # Elementary stream output + +# Output access method (string) +#sout-es-access= + +# Output muxer (string) +#sout-es-mux= + +# Output URL (string) +#sout-es-dst= + +# Audio output access method (string) +#sout-es-access-audio= + +# Audio output muxer (string) +#sout-es-mux-audio= + +# Audio output URL (string) +#sout-es-dst-audio= + +# Video output access method (string) +#sout-es-access-video= + +# Video output muxer (string) +#sout-es-mux-video= + +# Video output URL (string) +#sout-es-dst-video= + +[smem] # Stream output to memory buffer + +# Time Synchronized output (boolean) +#sout-smem-time-sync=1 + +[display] # Display stream output + +# Enable audio (boolean) +#sout-display-audio=1 + +# Enable video (boolean) +#sout-display-video=1 + +# Delay (ms) (integer) +#sout-display-delay=100 + +[mosaic_bridge] # Mosaic bridge stream output + +# ID (string) +#sout-mosaic-bridge-id=Id + +# Video width (integer) +#sout-mosaic-bridge-width=0 + +# Video height (integer) +#sout-mosaic-bridge-height=0 + +# Sample aspect ratio (string) +#sout-mosaic-bridge-sar=1:1 + +# Image chroma (string) +#sout-mosaic-bridge-chroma= + +# Video filter (string) +#sout-mosaic-bridge-vfilter= + +# Transparency (integer) +#sout-mosaic-bridge-alpha=255 + +# X offset (integer) +#sout-mosaic-bridge-x=-1 + +# Y offset (integer) +#sout-mosaic-bridge-y=-1 + +[delay] # Delay a stream + +# Elementary Stream ID (integer) +#sout-delay-id=0 + +# Delay of the ES (ms) (integer) +#sout-delay-delay=0 + +[stream_out_chromecast] # Chromecast stream output + +# ? (string) +#sout-chromecast-ip= + +# ? (integer) +#sout-chromecast-port=8009 + +# ? (boolean) +#sout-chromecast-video=1 + +# HTTP port (integer) +#sout-chromecast-http-port=8010 + +# Performance warning (integer) +sout-chromecast-show-perf-warning=0 + +# Enable Audio passthrough (boolean) +#sout-chromecast-audio-passthrough=0 + +# Conversion quality (integer) +#sout-chromecast-conversion-quality=1 + +[stream_out_standard] # Standard stream output + +# Output access method (string) +#sout-standard-access= + +# Output muxer (string) +#sout-standard-mux= + +# Output destination (string) +#sout-standard-dst= + +# Address to bind to (helper setting for dst) (string) +#sout-standard-bind= + +# Filename for stream (helper setting for dst) (string) +#sout-standard-path= + +# SAP announcing (boolean) +#sout-standard-sap=0 + +# Session name (string) +#sout-standard-name= + +# Session description (string) +#sout-standard-description= + +# Session URL (string) +#sout-standard-url= + +# Session email (string) +#sout-standard-email= + +[mono] # Stereo to mono downmixer + +# Use downmix algorithm (boolean) +#sout-mono-downmix=1 + +# Select channel to keep (integer) +#sout-mono-channel=-1 + +[soxr] # soxr + +# Resampling quality (integer) +#soxr-resampler-quality=2 + +[audiobargraph_a] # Audio part of the BarGraph function + +# Defines if BarGraph information should be sent (integer) +#audiobargraph_a-bargraph=1 + +# Sends the barGraph information every n audio packets (integer) +#audiobargraph_a-bargraph_repetition=4 + +# Defines if silence alarm information should be sent (integer) +#audiobargraph_a-silence=1 + +# Time window to use in ms (integer) +#audiobargraph_a-time_window=5000 + +# Minimum Audio level to raise the alarm (float) +#audiobargraph_a-alarm_threshold=0.020000 + +# Time between two alarm messages in ms (integer) +#audiobargraph_a-repetition_time=2000 + +[scaletempo_pitch] # Pitch Shifter + +# Stride Length (integer) +#scaletempo-stride=30 + +# Overlap Length (float) +#scaletempo-overlap=0.200000 + +# Search Length (integer) +#scaletempo-search=14 + +# Pitch Shift (float) +#pitch-shift=0.000000 + +[gain] # Gain control filter + +# Gain multiplier (float) +#gain-value=1.000000 + +[remap] # Audio channel remapper + +# Left (integer) +#aout-remap-channel-left=0 + +# Center (integer) +#aout-remap-channel-center=1 + +# Right (integer) +#aout-remap-channel-right=2 + +# Rear left (integer) +#aout-remap-channel-rearleft=3 + +# Rear center (integer) +#aout-remap-channel-rearcenter=4 + +# Rear right (integer) +#aout-remap-channel-rearright=5 + +# Side left (integer) +#aout-remap-channel-middleleft=6 + +# Side right (integer) +#aout-remap-channel-middleright=7 + +# Low-frequency effects (integer) +#aout-remap-channel-lfe=8 + +# Normalize channels (boolean) +#aout-remap-normalize=1 + +[param_eq] # Parametric Equalizer + +# Low freq (Hz) (float) +#param-eq-lowf=100.000000 + +# Low freq gain (dB) (float) +#param-eq-lowgain=0.000000 + +# High freq (Hz) (float) +#param-eq-highf=10000.000000 + +# High freq gain (dB) (float) +#param-eq-highgain=0.000000 + +# Freq 1 (Hz) (float) +#param-eq-f1=300.000000 + +# Freq 1 gain (dB) (float) +#param-eq-gain1=0.000000 + +# Freq 1 Q (float) +#param-eq-q1=3.000000 + +# Freq 2 (Hz) (float) +#param-eq-f2=1000.000000 + +# Freq 2 gain (dB) (float) +#param-eq-gain2=0.000000 + +# Freq 2 Q (float) +#param-eq-q2=3.000000 + +# Freq 3 (Hz) (float) +#param-eq-f3=3000.000000 + +# Freq 3 gain (dB) (float) +#param-eq-gain3=0.000000 + +# Freq 3 Q (float) +#param-eq-q3=3.000000 + +[equalizer] # Equalizer with 10 bands + +# Equalizer preset (string) +#equalizer-preset=flat + +# Bands gain (string) +#equalizer-bands= + +# Two pass (boolean) +#equalizer-2pass=0 + +# Use VLC frequency bands (boolean) +#equalizer-vlcfreqs=1 + +# Global gain (float) +#equalizer-preamp=12.000000 + +[speex_resampler] # Speex resampler + +# Resampling quality (integer) +#speex-resampler-quality=4 + +[normvol] # Volume normalizer + +# Number of audio buffers (integer) +#norm-buff-size=20 + +# Maximal volume level (float) +#norm-max-level=2.000000 + +[scaletempo] # Audio tempo scaler synched with rate + +# Stride Length (integer) +#scaletempo-stride=30 + +# Overlap Length (float) +#scaletempo-overlap=0.200000 + +# Search Length (integer) +#scaletempo-search=14 + +[compressor] # Dynamic range compressor + +# RMS/peak (float) +#compressor-rms-peak=0.200000 + +# Attack time (float) +#compressor-attack=25.000000 + +# Release time (float) +#compressor-release=100.000000 + +# Threshold level (float) +#compressor-threshold=-11.000000 + +# Ratio (float) +#compressor-ratio=4.000000 + +# Knee radius (float) +#compressor-knee=5.000000 + +# Makeup gain (float) +#compressor-makeup-gain=7.000000 + +[stereo_widen] # Simple stereo widening effect + +# Delay time (float) +#stereowiden-delay=20.000000 + +# Feedback gain (float) +#stereowiden-feedback=0.300000 + +# Crossfeed (float) +#stereowiden-crossfeed=0.300000 + +# Dry mix (float) +#stereowiden-dry-mix=0.800000 + +[spatializer] # Audio Spatializer + +# Room size (float) +#spatializer-roomsize=0.850000 + +# Room width (float) +#spatializer-width=1.000000 + +# Wet (float) +#spatializer-wet=0.400000 + +# Dry (float) +#spatializer-dry=0.500000 + +# Damp (float) +#spatializer-damp=0.500000 + +[headphone] # Headphone virtual spatialization effect + +# Characteristic dimension (integer) +#headphone-dim=10 + +# Compensate delay (boolean) +#headphone-compensate=0 + +# No decoding of Dolby Surround (boolean) +#headphone-dolby=0 + +[chorus_flanger] # Sound Delay + +# Delay time (float) +#delay-time=20.000000 + +# Sweep Depth (float) +#sweep-depth=6.000000 + +# Sweep Rate (float) +#sweep-rate=6.000000 + +# Feedback gain (float) +#feedback-gain=0.500000 + +# Wet mix (float) +#wet-mix=0.400000 + +# Dry Mix (float) +#dry-mix=0.400000 + +[samplerate] # Secret Rabbit Code (libsamplerate) resampler + +# Sample rate converter type (integer) +#src-converter-type=2 + +[panoramix] # Panoramix: wall with overlap video filter + +# Number of columns (integer) +#panoramix-cols=-1 + +# Number of rows (integer) +#panoramix-rows=-1 + +# length of the overlapping area (in %) (integer) +#panoramix-bz-length=100 + +# height of the overlapping area (in %) (integer) +#panoramix-bz-height=100 + +# Attenuation (boolean) +#panoramix-attenuate=1 + +# Attenuation, begin (in %) (integer) +#panoramix-bz-begin=0 + +# Attenuation, middle (in %) (integer) +#panoramix-bz-middle=50 + +# Attenuation, end (in %) (integer) +#panoramix-bz-end=100 + +# middle position (in %) (integer) +#panoramix-bz-middle-pos=50 + +# Gamma (Red) correction (float) +#panoramix-bz-gamma-red=1.000000 + +# Gamma (Green) correction (float) +#panoramix-bz-gamma-green=1.000000 + +# Gamma (Blue) correction (float) +#panoramix-bz-gamma-blue=1.000000 + +# Black Crush for Red (integer) +#panoramix-bz-blackcrush-red=140 + +# Black Crush for Green (integer) +#panoramix-bz-blackcrush-green=140 + +# Black Crush for Blue (integer) +#panoramix-bz-blackcrush-blue=140 + +# White Crush for Red (integer) +#panoramix-bz-whitecrush-red=200 + +# White Crush for Green (integer) +#panoramix-bz-whitecrush-green=200 + +# White Crush for Blue (integer) +#panoramix-bz-whitecrush-blue=200 + +# Black Level for Red (integer) +#panoramix-bz-blacklevel-red=150 + +# Black Level for Green (integer) +#panoramix-bz-blacklevel-green=150 + +# Black Level for Blue (integer) +#panoramix-bz-blacklevel-blue=150 + +# White Level for Red (integer) +#panoramix-bz-whitelevel-red=0 + +# White Level for Green (integer) +#panoramix-bz-whitelevel-green=0 + +# White Level for Blue (integer) +#panoramix-bz-whitelevel-blue=0 + +# Active windows (string) +#panoramix-active= + +[wall] # Wall video filter + +# Number of columns (integer) +#wall-cols=3 + +# Number of rows (integer) +#wall-rows=3 + +# Active windows (string) +#wall-active= + +# Element aspect ratio (string) +#wall-element-aspect=16:9 + +[clone] # Clone video filter + +# Number of clones (integer) +#clone-count=2 + +# Video output modules (string) +#clone-vout-list= + +[netsync] # Network synchronization + +# Network master clock (boolean) +#netsync-master=0 + +# Master server IP address (string) +#netsync-master-ip= + +# UDP timeout (in ms) (integer) +#netsync-timeout=500 + +[motion] # motion control interface + +[oldrc] # Remote control interface + +# Show stream position (boolean) +#rc-show-pos=0 + +# Fake TTY (boolean) +#rc-fake-tty=0 + +# UNIX socket command input (string) +#rc-unix= + +# TCP command input (string) +#rc-host= + +[gestures] # Mouse gestures control interface + +# Motion threshold (10-100) (integer) +#gestures-threshold=30 + +# Trigger button (string) +#gestures-button=left + +[lua] # Lua interpreter + +# Lua interface (string) +#lua-intf=dummy + +# Lua interface configuration (string) +#lua-config= + +# Password (string) +#http-password= + +# Source directory (string) +#http-src= + +# Directory index (boolean) +#http-index=0 + +# TCP command input (string) +#rc-host= + +# CLI input (string) +#cli-host= + +# Host (string) +#telnet-host=localhost + +# Port (integer) +#telnet-port=4212 + +# Password (string) +#telnet-password= + +[vaapi_filters] # Video Accelerated API filters + +# Denoise strength (0-2) (float) +#denoise-sigma=1.000000 + +[asf] # ASF muxer + +# Title (string) +#sout-asf-title= + +# Author (string) +#sout-asf-author= + +# Copyright (string) +#sout-asf-copyright= + +# Comment (string) +#sout-asf-comment= + +# Rating (string) +#sout-asf-rating= + +# Packet Size (integer) +#sout-asf-packet-size=4096 + +# Bitrate override (integer) +#sout-asf-bitrate-override=0 + +[mp4] # MP4/MOV muxer + +# Create "Fast Start" files (boolean) +#sout-mp4-faststart=1 + +[mux_ts] # TS muxer (libdvbpsi) + +# Digital TV Standard (string) +#sout-ts-standard=dvb + +# Video PID (integer) +#sout-ts-pid-video=100 + +# Audio PID (integer) +#sout-ts-pid-audio=200 + +# SPU PID (integer) +#sout-ts-pid-spu=300 + +# PMT PID (integer) +#sout-ts-pid-pmt=32 + +# TS ID (integer) +#sout-ts-tsid=0 + +# NET ID (integer) +#sout-ts-netid=0 + +# PMT Program numbers (string) +#sout-ts-program-pmt= + +# Set PID to ID of ES (boolean) +#sout-ts-es-id-pid=0 + +# Mux PMT (requires --sout-ts-es-id-pid) (string) +#sout-ts-muxpmt= + +# SDT Descriptors (requires --sout-ts-es-id-pid) (string) +#sout-ts-sdtdesc= + +# Data alignment (boolean) +#sout-ts-alignment=1 + +# Shaping delay (ms) (integer) +#sout-ts-shaping=200 + +# Use keyframes (boolean) +#sout-ts-use-key-frames=0 + +# PCR interval (ms) (integer) +#sout-ts-pcr=70 + +# Minimum B (deprecated) (integer) +#sout-ts-bmin=0 + +# Maximum B (deprecated) (integer) +#sout-ts-bmax=0 + +# DTS delay (ms) (integer) +#sout-ts-dts-delay=400 + +# Crypt audio (boolean) +#sout-ts-crypt-audio=1 + +# Crypt video (boolean) +#sout-ts-crypt-video=1 + +# CSA Key (string) +#sout-ts-csa-ck= + +# Second CSA Key (string) +#sout-ts-csa2-ck= + +# CSA Key in use (string) +#sout-ts-csa-use=1 + +# Packet size in bytes to encrypt (integer) +#sout-ts-csa-pkt=188 + +[mux_ogg] # Ogg/OGM muxer + +# Index interval (integer) +#sout-ogg-indexintvl=1000 + +# Index size ratio (float) +#sout-ogg-indexratio=1.000000 + +[ps] # PS muxer + +# DTS delay (ms) (integer) +#sout-ps-dts-delay=200 + +# PES maximum size (integer) +#sout-ps-pes-max-size=65500 + +[avi] # AVI muxer + +# Artist (string) +#sout-avi-artist= + +# Date (string) +#sout-avi-date= + +# Genre (string) +#sout-avi-genre= + +# Copyright (string) +#sout-avi-copyright= + +# Comment (string) +#sout-avi-comment= + +# Name (string) +#sout-avi-name= + +# Subject (string) +#sout-avi-subject= + +# Encoder (string) +#sout-avi-encoder=VLC Media Player - 3.0.8 Vetinari + +# Keywords (string) +#sout-avi-keywords= + +[notify] # LibNotify Notification Plugin + +# Timeout (ms) (integer) +#notify-timeout=4000 + +[nfs] # NFS input + +# Set NFS uid/guid automatically (boolean) +#nfs-auto-guid=1 + +[access] # HTTPS input + +# Cookies forwarding (boolean) +#http-forward-cookies=1 + +# User agent (string) +#http-user-agent= + +[sftp] # SFTP input + +# SFTP port (integer) +#sftp-port=22 + +# Username (string) +#sftp-user= + +# Password (string) +#sftp-pwd= + +[libbluray] # Blu-ray Disc support (libbluray) + +# Blu-ray menus (boolean) +#bluray-menu=1 + +# Region code (string) +#bluray-region=B + +[access_jack] # JACK audio input + +# Pace (boolean) +#jack-input-use-vlc-pace=0 + +# Auto connection (boolean) +#jack-input-auto-connect=0 + +[concat] # Concatenated inputs + +# Inputs list (string) +#concat-list= + +[filesystem] # File input + +# List special files (boolean) +#list-special-files=0 + +[satip] # SAT>IP Receiver Plugin + +# Receive buffer (integer) +#satip-buffer=4194304 + +# Request multicast stream (boolean) +#satip-multicast=0 + +# Host (string) +#satip-host= + +[ftp] # FTP input + +# Username (string) +#ftp-user= + +# Password (string) +#ftp-pwd= + +# FTP account (string) +#ftp-account=anonymous + +[dvdnav] # DVDnav Input + +# DVD angle (integer) +#dvdnav-angle=1 + +# Start directly in menu (boolean) +#dvdnav-menu=1 + +[dvb] # DVB input with v4l2 support + +# Probe DVB card for capabilities (boolean) +#dvb-probe=1 + +# Satellite scanning config (string) +#dvb-satellite= + +# Scan tuning list (string) +#dvb-scanlist= + +# Use NIT for scanning services (boolean) +#dvb-scan-nit=1 + +[live555] # RTP/RTSP/SDP demuxer (using Live555) + +# Use RTP over RTSP (TCP) (boolean) +#rtsp-tcp=0 + +# Client port (integer) +#rtp-client-port=-1 + +# Force multicast RTP via RTSP (boolean) +#rtsp-mcast=0 + +# Tunnel RTSP and RTP over HTTP (boolean) +#rtsp-http=0 + +# HTTP tunnel port (integer) +#rtsp-http-port=80 + +# Kasenna RTSP dialect (boolean) +#rtsp-kasenna=0 + +# WMServer RTSP dialect (boolean) +#rtsp-wmserver=0 + +# Username (string) +#rtsp-user= + +# Password (string) +#rtsp-pwd= + +# RTSP frame buffer size (integer) +#rtsp-frame-buffer-size=250000 + +[timecode] # Time code subpicture elementary stream generator + +# Frame rate (string) +#timecode-fps=25/1 + +[vdr] # VDR recordings + +# Chapter offset in ms (integer) +#vdr-chapter-offset=0 + +# Frame rate (float) +#vdr-fps=25.000000 + +[dtv] # Digital Television and Radio + +# DVB adapter (integer) +#dvb-adapter=0 + +# DVB device (integer) +#dvb-device=0 + +# Do not demultiplex (boolean) +#dvb-budget-mode=0 + +# Frequency (Hz) (integer) +#dvb-frequency=0 + +# Spectrum inversion (integer) +#dvb-inversion=-1 + +# Bandwidth (MHz) (integer) +#dvb-bandwidth=0 + +# Transmission mode (integer) +#dvb-transmission=0 + +# Guard interval (string) +#dvb-guard= + +# High-priority code rate (string) +#dvb-code-rate-hp= + +# Low-priority code rate (string) +#dvb-code-rate-lp= + +# Hierarchy mode (integer) +#dvb-hierarchy=-1 + +# DVB-T2 Physical Layer Pipe (integer) +#dvb-plp-id=0 + +# Layer A modulation (string) +#dvb-a-modulation= + +# Layer A code rate (string) +#dvb-a-fec= + +# Layer A segments count (integer) +#dvb-a-count=0 + +# Layer A time interleaving (integer) +#dvb-a-interleaving=0 + +# Layer B modulation (string) +#dvb-b-modulation= + +# Layer B code rate (string) +#dvb-b-fec= + +# Layer B segments count (integer) +#dvb-b-count=0 + +# Layer B time interleaving (integer) +#dvb-b-interleaving=0 + +# Layer C modulation (string) +#dvb-c-modulation= + +# Layer C code rate (string) +#dvb-c-fec= + +# Layer C segments count (integer) +#dvb-c-count=0 + +# Layer C time interleaving (integer) +#dvb-c-interleaving=0 + +# Modulation / Constellation (string) +#dvb-modulation= + +# Symbol rate (bauds) (integer) +#dvb-srate=0 + +# FEC code rate (string) +#dvb-fec= + +# Stream identifier (integer) +#dvb-stream=0 + +# Pilot (integer) +#dvb-pilot=-1 + +# Roll-off factor (integer) +#dvb-rolloff=-1 + +# Transport stream ID (integer) +#dvb-ts-id=0 + +# Polarization (Voltage) (string) +#dvb-polarization= + +# (integer) +#dvb-voltage=13 + +# High LNB voltage (boolean) +#dvb-high-voltage=0 + +# Local oscillator low frequency (kHz) (integer) +#dvb-lnb-low=0 + +# Local oscillator high frequency (kHz) (integer) +#dvb-lnb-high=0 + +# Universal LNB switch frequency (kHz) (integer) +#dvb-lnb-switch=11700000 + +# DiSEqC LNB number (integer) +#dvb-satno=0 + +# Uncommitted DiSEqC LNB number (integer) +#dvb-uncommitted=0 + +# Continuous 22kHz tone (integer) +#dvb-tone=-1 + +[linsys_hdsdi] # HD-SDI Input + +# Link # (integer) +#linsys-hdsdi-link=0 + +# Video ID (integer) +#linsys-hdsdi-id-video=0 + +# Aspect ratio (string) +#linsys-hdsdi-aspect-ratio= + +# Audio configuration (string) +#linsys-hdsdi-audio=0=1,1 + +[udp] # UDP input + +# UDP Source timeout (sec) (integer) +#udp-timeout=-1 + +[access_alsa] # ALSA audio capture + +# Stereo (boolean) +#alsa-stereo=1 + +# Sample rate (integer) +#alsa-samplerate=48000 + +[shm] # Shared memory framebuffer + +# Frame rate (float) +#shm-fps=10.000000 + +# Frame buffer depth (integer) +#shm-depth=0 + +# Frame buffer width (integer) +#shm-width=800 + +# Frame buffer height (integer) +#shm-height=480 + +[xcb_screen] # Screen capture (with X11/XCB) + +# Frame rate (float) +#screen-fps=2.000000 + +# Region left column (integer) +#screen-left=0 + +# Region top row (integer) +#screen-top=0 + +# Capture region width (integer) +#screen-width=0 + +# Capture region height (integer) +#screen-height=0 + +# Follow the mouse (boolean) +#screen-follow-mouse=0 + +[avio] # libavformat AVIO access + +# Advanced options (string) +#avio-options= + +# Advanced options (string) +#sout-avio-options= + +[imem] # Memory input + +# ID (integer) +#imem-id=-1 + +# Group (integer) +#imem-group=0 + +# Category (integer) +#imem-cat=0 + +# Codec (string) +#imem-codec= + +# Language (string) +#imem-language= + +# Sample rate (integer) +#imem-samplerate=0 + +# Channels count (integer) +#imem-channels=0 + +# Width (integer) +#imem-width=0 + +# Height (integer) +#imem-height=0 + +# Display aspect ratio (string) +#imem-dar= + +# Frame rate (string) +#imem-fps= + +# Size (integer) +#imem-size=0 + +[rtp] # Real-Time Protocol (RTP) input + +# RTCP (local) port (integer) +#rtcp-port=0 + +# Maximum RTP sources (integer) +#rtp-max-src=1 + +# RTP source timeout (sec) (integer) +#rtp-timeout=5 + +# Maximum RTP sequence number dropout (integer) +#rtp-max-dropout=3000 + +# Maximum RTP sequence number misordering (integer) +#rtp-max-misorder=100 + +# RTP payload format assumed for dynamic payloads (string) +#rtp-dynamic-pt= + +[access_mms] # Microsoft Media Server (MMS) input + +# TCP/UDP timeout (ms) (integer) +#mms-timeout=5000 + +# Force selection of all streams (boolean) +#mms-all=0 + +# Maximum bitrate (integer) +#mms-maxbitrate=0 + +[dvdread] # DVDRead Input (no menu support) + +# DVD angle (integer) +#dvdread-angle=1 + +[cdda] # Audio CD input + +# Audio CD device (string) +#cd-audio=/dev/sr0 + +# CDDB Server (string) +#cddb-server=freedb.videolan.org + +# CDDB port (integer) +#cddb-port=80 + +[http] # HTTP input + +# Auto re-connect (boolean) +#http-reconnect=0 + +[smb] # SMB input + +# Username (string) +#smb-user= + +# Password (string) +#smb-pwd= + +# SMB domain (string) +#smb-domain= + +[swscale] # Video scaling filter + +# Scaling mode (integer) +#swscale-mode=2 + +[rawdv] # DV (Digital Video) demuxer + +# Hurry up (boolean) +#rawdv-hurry-up=0 + +[subtitle] # Text subtitle parser + +# Frames per Second (float) +#sub-fps=0.000000 + +# Subtitle delay (integer) +#sub-delay=0 + +# Subtitle format (string) +#sub-type=auto + +# Subtitle description (string) +#sub-description= + +[mkv] # Matroska stream demuxer + +# Respect ordered chapters (boolean) +#mkv-use-ordered-chapters=1 + +# Chapter codecs (boolean) +#mkv-use-chapter-codec=1 + +# Preload MKV files in the same directory (boolean) +#mkv-preload-local-dir=1 + +# Seek based on percent not time (boolean) +#mkv-seek-percent=0 + +# Dummy Elements (boolean) +#mkv-use-dummy=0 + +# Preload clusters (boolean) +#mkv-preload-clusters=0 + +[ps] # MPEG-PS demuxer + +# Trust MPEG timestamps (boolean) +#ps-trust-timestamps=1 + +[rawvid] # Raw video demuxer + +# Frames per Second (string) +#rawvid-fps= + +# Width (integer) +#rawvid-width=0 + +# Height (integer) +#rawvid-height=0 + +# Force chroma (Use carefully) (string) +#rawvid-chroma= + +# Aspect ratio (string) +#rawvid-aspect-ratio= + +[demuxdump] # File dumper + +# Dump module (string) +#demuxdump-access=file + +# Dump filename (string) +#demuxdump-file=stream-demux.dump + +# Append to existing file (boolean) +#demuxdump-append=0 + +[h26x] # H264 video demuxer + +# Frames per Second (float) +#h264-fps=0.000000 + +# Frames per Second (float) +#hevc-fps=0.000000 + +[avi] # AVI demuxer + +# Force interleaved method (boolean) +#avi-interleaved=0 + +# Force index creation (integer) +#avi-index=0 + +[mp4] # MP4 stream demuxer + +# M4A audio only (boolean) +#mp4-m4a-audioonly=0 + +[image] # Image demuxer + +# ES ID (integer) +#image-id=-1 + +# Group (integer) +#image-group=0 + +# Decode (boolean) +#image-decode=1 + +# Forced chroma (string) +#image-chroma= + +# Duration in seconds (float) +#image-duration=10.000000 + +# Frame rate (string) +#image-fps=10/1 + +# Real-time (boolean) +#image-realtime=0 + +[ts] # MPEG Transport Stream demuxer + +# Digital TV Standard (string) +#ts-standard=auto + +# Extra PMT (string) +#ts-extra-pmt= + +# Trust in-stream PCR (boolean) +#ts-trust-pcr=1 + +# Set id of ES to PID (boolean) +#ts-es-id-pid=1 + +# CSA Key (string) +#ts-csa-ck= + +# Second CSA Key (string) +#ts-csa2-ck= + +# Packet size in bytes to decrypt (integer) +#ts-csa-pkt=188 + +# Separate sub-streams (boolean) +#ts-split-es=1 + +# Seek based on percent not time (boolean) +#ts-seek-percent=0 + +# Check packets continuity counter (boolean) +#ts-cc-check=1 + +# Only create ES on program sending data (boolean) +#ts-pmtfix-waitdata=1 + +# Try to generate PAT/PMT if missing (boolean) +#ts-patfix=1 + +# Try to fix too early PCR (or late DTS) (boolean) +#ts-pcr-offsetfix=1 + +[vc1] # VC1 video demuxer + +# Frames per Second (float) +#vc1-fps=25.000000 + +[es] # MPEG-I/II/4 / A52 / DTS / MLP audio + +# Frames per Second (float) +#es-fps=25.000000 + +[rawaud] # Raw audio demuxer + +# Audio channels (integer) +#rawaud-channels=2 + +# Audio samplerate (Hz) (integer) +#rawaud-samplerate=48000 + +# FOURCC code of raw input format (string) +#rawaud-fourcc=s16l + +# Forces the audio language (string) +#rawaud-lang=eng + +[mod] # MOD demuxer (libmodplug) + +# Noise reduction (boolean) +#mod-noisereduction=1 + +# Reverb (boolean) +#mod-reverb=0 + +# Reverberation level (integer) +#mod-reverb-level=0 + +# Reverberation delay (integer) +#mod-reverb-delay=40 + +# Mega bass (boolean) +#mod-megabass=0 + +# Mega bass level (integer) +#mod-megabass-level=0 + +# Mega bass cutoff (integer) +#mod-megabass-range=10 + +# Surround (boolean) +#mod-surround=0 + +# Surround level (integer) +#mod-surround-level=0 + +# Surround delay (ms) (integer) +#mod-surround-delay=5 + +[playlist] # Playlist + +# Skip ads (boolean) +#playlist-skip-ads=1 + +# Show shoutcast adult content (boolean) +#shoutcast-show-adult=0 + +[adaptive] # Unified adaptive streaming for DASH/HLS + +# Adaptive Logic (string) +#adaptive-logic= + +# Maximum device width (integer) +#adaptive-maxwidth=0 + +# Maximum device height (integer) +#adaptive-maxheight=0 + +# Fixed Bandwidth in KiB/s (integer) +#adaptive-bw=250 + +# Use regular HTTP modules (boolean) +#adaptive-use-access=0 + +[mjpeg] # M-JPEG camera demuxer + +# Frames per Second (float) +#mjpeg-fps=0.000000 + +[diracsys] # Dirac video demuxer + +# Value to adjust dts by (integer) +#dirac-dts-offset=0 + +[avformat] # Avformat demuxer + +# Format name (string) +#avformat-format= + +# Advanced options (string) +#avformat-options= + +# Avformat mux (string) +#sout-avformat-mux= + +# Advanced options (string) +#sout-avformat-options= + +# Reset timestamps (boolean) +#sout-avformat-reset-ts=0 + +[prefetch] # Stream prefetch filter + +# Buffer size (integer) +#prefetch-buffer-size=16384 + +# Read size (integer) +#prefetch-read-size=16777216 + +# Seek threshold (integer) +#prefetch-seek-threshold=16384 + +[logger] # File logging + +[audioscrobbler] # Submission of played songs to last.fm + +# Username (string) +#lastfm-username= + +# Password (string) +#lastfm-password= + +# Scrobbler URL (string) +#scrobbler-url=post.audioscrobbler.com + +[rtsp] # Legacy RTSP VoD server + +# MUX for RAW RTSP transport (string) +#rtsp-raw-mux=ts + +# Maximum number of connections (integer) +#rtsp-throttle-users=0 + +# Sets the timeout option in the RTSP session string (integer) +#rtsp-session-timeout=5 + +[gnutls] # GNU TLS transport layer security + +# Use system trust database (boolean) +#gnutls-system-trust=1 + +# Trust directory (string) +#gnutls-dir-trust= + +# TLS cipher priorities (string) +#gnutls-priorities=NORMAL + +[amem] # Audio memory output + +# Sample format (string) +#amem-format=S16N + +# Sample rate (integer) +#amem-rate=44100 + +# Channels count (integer) +#amem-channels=2 + +[alsa] # ALSA audio output + +# Audio output device (string) +#alsa-audio-device=default + +# Audio output channels (integer) +#alsa-audio-channels=6 + +# Software gain (float) +#alsa-gain=1.000000 + +[afile] # File audio output + +# Output file (string) +#audiofile-file=audiofile.wav + +# Output format (string) +#audiofile-format=s16 + +# Number of output channels (integer) +#audiofile-channels=0 + +# Add WAVE header (boolean) +#audiofile-wav=1 + +[jack] # JACK audio output + +# Automatically connect to writable clients (boolean) +#jack-auto-connect=1 + +# Connect to clients matching (string) +#jack-connect-regex=system + +# JACK client name (string) +#jack-name= + +# Software gain (float) +#jack-gain=1.000000 + +[svg] # svg + +# SVG template file (string) +#svg-template-file= + +[freetype] # Freetype2 font renderer + +# Font (string) +#freetype-font=Serif Bold + +# Monospace Font (string) +#freetype-monofont=Monospace + +# Font size in pixels (integer) +#freetype-fontsize=0 + +# Relative font size (integer) +#freetype-rel-fontsize=0 + +# Text opacity (integer) +#freetype-opacity=255 + +# Text default color (integer) +#freetype-color=16777215 + +# Force bold (boolean) +#freetype-bold=0 + +# Background opacity (integer) +#freetype-background-opacity=0 + +# Background color (integer) +#freetype-background-color=0 + +# Outline opacity (integer) +#freetype-outline-opacity=255 + +# Outline color (integer) +#freetype-outline-color=0 + +# Outline thickness (integer) +#freetype-outline-thickness=4 + +# Shadow opacity (integer) +#freetype-shadow-opacity=128 + +# Shadow color (integer) +#freetype-shadow-color=0 + +# Shadow angle (float) +#freetype-shadow-angle=-45.000000 + +# Shadow distance (float) +#freetype-shadow-distance=0.060000 + +# Use YUVP renderer (boolean) +#freetype-yuvp=0 + +# Text direction (integer) +#freetype-text-direction=0 + +[extract] # Extract RGB component video filter + +# RGB component to extract (integer) +#extract-component=16711680 + +[adjust] # Image properties filter + +# Image contrast (0-2) (float) +#contrast=1.000000 + +# Image brightness (0-2) (float) +#brightness=1.000000 + +# Image hue (-180..180) (float) +#hue=0.000000 + +# Image saturation (0-3) (float) +#saturation=1.000000 + +# Image gamma (0-10) (float) +#gamma=1.000000 + +# Brightness threshold (boolean) +#brightness-threshold=0 + +[colorthres] # Color threshold filter + +# Color (integer) +#colorthres-color=16711680 + +# Saturation threshold (integer) +#colorthres-saturationthres=20 + +# Similarity threshold (integer) +#colorthres-similaritythres=15 + +[alphamask] # Alpha mask video filter + +# Transparency mask (string) +#alphamask-mask= + +[bluescreen] # Bluescreen video filter + +# Bluescreen U value (integer) +#bluescreen-u=120 + +# Bluescreen V value (integer) +#bluescreen-v=90 + +# Bluescreen U tolerance (integer) +#bluescreen-ut=17 + +# Bluescreen V tolerance (integer) +#bluescreen-vt=17 + +[postproc] # Video post processing filter + +# Post processing quality (integer) +#postproc-q=6 + +# FFmpeg post processing filter chains (string) +#postproc-name=default + +[blendbench] # Blending benchmark filter + +# Number of time to blend (integer) +#blendbench-loops=1000 + +# Alpha of the blended image (integer) +#blendbench-alpha=128 + +# Image to be blended onto (string) +#blendbench-base-image= + +# Chroma for the base image (string) +#blendbench-base-chroma=I420 + +# Image which will be blended (string) +#blendbench-blend-image= + +# Chroma for the blend image (string) +#blendbench-blend-chroma=YUVA + +[antiflicker] # antiflicker video filter + +# Window size (integer) +#antiflicker-window-size=10 + +# Softening value (integer) +#antiflicker-softening-size=10 + +[sharpen] # Sharpen video filter + +# Sharpen strength (0-2) (float) +#sharpen-sigma=0.050000 + +[hqdn3d] # High Quality 3D Denoiser filter + +# Spatial luma strength (0-254) (float) +#hqdn3d-luma-spat=4.000000 + +# Spatial chroma strength (0-254) (float) +#hqdn3d-chroma-spat=3.000000 + +# Temporal luma strength (0-254) (float) +#hqdn3d-luma-temp=6.000000 + +# Temporal chroma strength (0-254) (float) +#hqdn3d-chroma-temp=4.500000 + +[rotate] # Rotate video filter + +# Angle in degrees (float) +#rotate-angle=30.000000 + +# Use motion sensors (boolean) +#rotate-use-motion=0 + +[fps] # FPS conversion video filter + +# Frame rate (string) +#fps-fps= + +[ball] # Ball video filter + +# Ball color (string) +#ball-color=red + +# Ball speed (integer) +#ball-speed=4 + +# Ball size (integer) +#ball-size=10 + +# Gradient threshold (integer) +#ball-gradient-threshold=40 + +# Edge visible (boolean) +#ball-edge-visible=1 + +[sepia] # Sepia video filter + +# Sepia intensity (integer) +#sepia-intensity=120 + +[canvas] # Canvas video filter + +# Output width (integer) +#canvas-width=0 + +# Output height (integer) +#canvas-height=0 + +# Output picture aspect ratio (string) +#canvas-aspect= + +# Pad video (boolean) +#canvas-padd=1 + +[gradfun] # Gradfun video filter + +# Radius (integer) +#gradfun-radius=16 + +# Strength (float) +#gradfun-strength=1.200000 + +[mirror] # Mirror video filter + +# Mirror orientation (integer) +#mirror-split=0 + +# Direction (integer) +#mirror-direction=0 + +[gradient] # Gradient video filter + +# Distort mode (string) +#gradient-mode=gradient + +# Gradient image type (integer) +#gradient-type=0 + +# Apply cartoon effect (boolean) +#gradient-cartoon=1 + +[croppadd] # Video cropping filter + +# Pixels to crop from top (integer) +#croppadd-croptop=0 + +# Pixels to crop from bottom (integer) +#croppadd-cropbottom=0 + +# Pixels to crop from left (integer) +#croppadd-cropleft=0 + +# Pixels to crop from right (integer) +#croppadd-cropright=0 + +# Pixels to padd to top (integer) +#croppadd-paddtop=0 + +# Pixels to padd to bottom (integer) +#croppadd-paddbottom=0 + +# Pixels to padd to left (integer) +#croppadd-paddleft=0 + +# Pixels to padd to right (integer) +#croppadd-paddright=0 + +[deinterlace] # Deinterlacing video filter + +# Streaming deinterlace mode (string) +#sout-deinterlace-mode=blend + +# Phosphor chroma mode for 4:2:0 input (integer) +#sout-deinterlace-phosphor-chroma=2 + +# Phosphor old field dimmer strength (integer) +#sout-deinterlace-phosphor-dimmer=2 + +[motionblur] # Motion blur filter + +# Blur factor (1-127) (integer) +#blur-factor=80 + +[grain] # Grain video filter + +# Variance (float) +#grain-variance=2.000000 + +# Minimal period (integer) +#grain-period-min=1 + +# Maximal period (integer) +#grain-period-max=48 + +[gaussianblur] # Gaussian blur video filter + +# Gaussian's std deviation (float) +#gaussianblur-sigma=2.000000 + +[anaglyph] # Convert 3D picture to anaglyph image video filter + +# Color scheme (string) +#anaglyph-scheme=red-cyan + +[scene] # Scene video filter + +# Image format (string) +#scene-format=png + +# Image width (integer) +#scene-width=-1 + +# Image height (integer) +#scene-height=-1 + +# Filename prefix (string) +#scene-prefix=scene + +# Directory path prefix (string) +#scene-path= + +# Always write to the same file (boolean) +#scene-replace=0 + +# Recording ratio (integer) +#scene-ratio=50 + +[posterize] # Posterize video filter + +# Posterize level (integer) +#posterize-level=6 + +[transform] # Video transformation filter + +# Transform type (string) +#transform-type=90 + +[puzzle] # Puzzle interactive game video filter + +# Number of puzzle rows (integer) +#puzzle-rows=4 + +# Number of puzzle columns (integer) +#puzzle-cols=4 + +# Border (integer) +#puzzle-border=3 + +# Small preview (boolean) +#puzzle-preview=0 + +# Small preview size (integer) +#puzzle-preview-size=15 + +# Piece edge shape size (integer) +#puzzle-shape-size=90 + +# Auto shuffle (integer) +#puzzle-auto-shuffle=0 + +# Auto solve (integer) +#puzzle-auto-solve=0 + +# Rotation (integer) +#puzzle-rotation=0 + +# Game mode (integer) +#puzzle-mode=0 + +[erase] # Erase video filter + +# Image mask (string) +#erase-mask= + +# X coordinate (integer) +#erase-x=0 + +# Y coordinate (integer) +#erase-y=0 + +[qt] # Qt interface + +# Start in minimal view (without menus) (boolean) +#qt-minimal-view=0 + +# Systray icon (boolean) +#qt-system-tray=1 + +# Show notification popup on track change (integer) +#qt-notification=1 + +# Start VLC with only a systray icon (boolean) +#qt-start-minimized=0 + +# Pause the video playback when minimized (boolean) +#qt-pause-minimized=0 + +# Windows opacity between 0.1 and 1 (float) +#qt-opacity=1.000000 + +# Fullscreen controller opacity between 0.1 and 1 (float) +#qt-fs-opacity=0.800000 + +# Resize interface to the native video size (boolean) +#qt-video-autoresize=1 + +# Show playing item name in window title (boolean) +#qt-name-in-title=1 + +# Show a controller in fullscreen mode (boolean) +#qt-fs-controller=1 + +# Save the recently played items in the menu (boolean) +#qt-recentplay=1 + +# List of words separated by | to filter (string) +#qt-recentplay-filter= + +# Continue playback? (integer) +#qt-continue=1 + +# Embed the file browser in open dialog (boolean) +#qt-embedded-open=0 + +# Show advanced preferences over simple ones (boolean) +#qt-advanced-pref=0 + +# Show unimportant error and warnings dialogs (boolean) +#qt-error-dialogs=1 + +# Define the colors of the volume slider (string) +#qt-slider-colours=153;210;153;20;210;20;255;199;15;245;39;29 + +# Ask for network policy at start (boolean) +qt-privacy-ask=0 + +# Define which screen fullscreen goes (integer) +#qt-fullscreen-screennumber=-1 + +# Load extensions on startup (boolean) +#qt-autoload-extensions=1 + +# Display background cone or art (boolean) +#qt-bgcone=1 + +# Expanding background cone or art (boolean) +#qt-bgcone-expands=0 + +# Allow automatic icon changes (boolean) +#qt-icon-change=1 + +# Maximum Volume displayed (integer) +#qt-max-volume=125 + +# Fullscreen controller mouse sensitivity (integer) +#qt-fs-sensitivity=3 + +# When to raise the interface (integer) +#qt-auto-raise=1 + +[skins2] # Skinnable Interface + +# Skin to use (string) +#skins2-last= + +# Config of last used skin (string) +#skins2-config= + +# Enable transparency effects (boolean) +#skins2-transparency=0 + +# Use a skinned playlist (boolean) +#skinned-playlist=1 + +# Display video in a skinned window if any (boolean) +#skinned-video=1 + +[ncurses] # Ncurses interface + +# Filebrowser starting point (string) +#browse-dir= + +[fb] # GNU/Linux framebuffer video output + +# Framebuffer device (string) +#fbdev=/dev/fb0 + +# Run fb on current tty (boolean) +#fb-tty=1 + +# Image format (default RGB) (string) +#fb-chroma= + +# Framebuffer resolution to use (integer) +#fb-mode=4 + +# Framebuffer uses hw acceleration (boolean) +#fb-hw-accel=1 + +[vmem] # Video memory output + +# Width (integer) +#vmem-width=320 + +# Height (integer) +#vmem-height=200 + +# Pitch (integer) +#vmem-pitch=640 + +# Chroma (string) +#vmem-chroma=RV16 + +[xcb_x11] # X11 video output (XCB) + +[wl_shell] # Wayland shell surface + +# Wayland display (string) +#wl-display= + +[yuv] # YUV video output + +# device, fifo or filename (string) +#yuv-file=stream.yuv + +# Chroma used (string) +#yuv-chroma= + +# Add a YUV4MPEG2 header (boolean) +#yuv-yuv4mpeg2=0 + +[vdummy] # Dummy video output + +# Dummy image chroma format (string) +#dummy-chroma= + +[xdg_shell] # XDG shell surface + +# Wayland display (string) +#wl-display= + +[gl] # OpenGL video output + +# OpenGL extension (string) +#gl= + +# Open GL/GLES hardware converter (string) +#glconv= + +[xcb_xv] # XVideo output (XCB) + +# XVideo adaptor number (integer) +#xvideo-adaptor=-1 + +# XVideo format id (integer) +#xvideo-format-id=0 + +[flaschen] # Flaschen-Taschen video output + +# Flaschen-Taschen display address (string) +#flaschen-display= + +# Width (integer) +#flaschen-width=25 + +# Height (integer) +#flaschen-height=20 + +[xcb_window] # X11 video window (XCB) + +# X11 display (string) +#x11-display= + +[dvbsub] # DVB subtitles decoder + +# Subpicture position (integer) +#dvbsub-position=8 + +# Decoding X coordinate (integer) +#dvbsub-x=-1 + +# Decoding Y coordinate (integer) +#dvbsub-y=-1 + +# Encoding X coordinate (integer) +#sout-dvbsub-x=-1 + +# Encoding Y coordinate (integer) +#sout-dvbsub-y=-1 + +[theora] # Theora video decoder + +# Post processing quality (integer) +#theora-postproc=-1 + +# Encoding quality (integer) +#sout-theora-quality=2 + +[avcodec] # FFmpeg audio/video decoder + +# Direct rendering (boolean) +#avcodec-dr=1 + +# Show corrupted frames (boolean) +#avcodec-corrupted=1 + +# Error resilience (integer) +#avcodec-error-resilience=1 + +# Workaround bugs (integer) +#avcodec-workaround-bugs=1 + +# Hurry up (boolean) +#avcodec-hurry-up=1 + +# Skip frame (default=0) (integer) +#avcodec-skip-frame=0 + +# Skip idct (default=0) (integer) +#avcodec-skip-idct=0 + +# Allow speed tricks (boolean) +#avcodec-fast=0 + +# Skip the loop filter for H.264 decoding (integer) +#avcodec-skiploopfilter=0 + +# Debug mask (integer) +#avcodec-debug=0 + +# Codec name (string) +#avcodec-codec= + +# Hardware decoding (string) +#avcodec-hw=any + +# Threads (integer) +#avcodec-threads=0 + +# Advanced options (string) +#avcodec-options= + +# Codec name (string) +#sout-avcodec-codec= + +# Quality level (string) +#sout-avcodec-hq=rd + +# Ratio of key frames (integer) +#sout-avcodec-keyint=0 + +# Ratio of B frames (integer) +#sout-avcodec-bframes=0 + +# Hurry up (boolean) +#sout-avcodec-hurry-up=0 + +# Interlaced encoding (boolean) +#sout-avcodec-interlace=0 + +# Interlaced motion estimation (boolean) +#sout-avcodec-interlace-me=1 + +# Video bitrate tolerance (integer) +#sout-avcodec-vt=0 + +# Pre-motion estimation (boolean) +#sout-avcodec-pre-me=0 + +# Rate control buffer size (integer) +#sout-avcodec-rc-buffer-size=0 + +# Rate control buffer aggressiveness (float) +#sout-avcodec-rc-buffer-aggressivity=1.000000 + +# I quantization factor (float) +#sout-avcodec-i-quant-factor=0.000000 + +# Noise reduction (integer) +#sout-avcodec-noise-reduction=0 + +# MPEG4 quantization matrix (boolean) +#sout-avcodec-mpeg4-matrix=0 + +# Minimum video quantizer scale (integer) +#sout-avcodec-qmin=0 + +# Maximum video quantizer scale (integer) +#sout-avcodec-qmax=0 + +# Trellis quantization (boolean) +#sout-avcodec-trellis=0 + +# Fixed quantizer scale (float) +#sout-avcodec-qscale=3.000000 + +# Strict standard compliance (integer) +#sout-avcodec-strict=0 + +# Luminance masking (float) +#sout-avcodec-lumi-masking=0.000000 + +# Darkness masking (float) +#sout-avcodec-dark-masking=0.000000 + +# Motion masking (float) +#sout-avcodec-p-masking=0.000000 + +# Border masking (float) +#sout-avcodec-border-masking=0.000000 + +# Luminance elimination (integer) +#sout-avcodec-luma-elim-threshold=0 + +# Chrominance elimination (integer) +#sout-avcodec-chroma-elim-threshold=0 + +# Specify AAC audio profile to use (string) +#sout-avcodec-aac-profile=low + +# Advanced options (string) +#sout-avcodec-options= + +[subsusf] # USF subtitles decoder + +# Formatted Subtitles (boolean) +#subsdec-formatted=1 + +[vorbis] # Vorbis audio decoder + +# Encoding quality (integer) +#sout-vorbis-quality=0 + +# Maximum encoding bitrate (integer) +#sout-vorbis-max-bitrate=0 + +# Minimum encoding bitrate (integer) +#sout-vorbis-min-bitrate=0 + +# CBR encoding (boolean) +#sout-vorbis-cbr=0 + +[subsdec] # Text subtitle decoder + +# Subtitle justification (integer) +#subsdec-align=-1 + +# Subtitle text encoding (string) +#subsdec-encoding= + +# UTF-8 subtitle autodetection (boolean) +#subsdec-autodetect-utf8=1 + +[telx] # Teletext subtitles decoder + +# Override page (integer) +#telx-override-page=-1 + +# Ignore subtitle flag (boolean) +#telx-ignore-subtitle-flag=0 + +# Workaround for France (boolean) +#telx-french-workaround=0 + +[speex] # Speex audio decoder + +# Mode (integer) +#sout-speex-mode=0 + +# Encoding complexity (integer) +#sout-speex-complexity=3 + +# CBR encoding (boolean) +#sout-speex-cbr=0 + +# Encoding quality (float) +#sout-speex-quality=8.000000 + +# Maximal bitrate (integer) +#sout-speex-max-bitrate=0 + +# Voice activity detection (boolean) +#sout-speex-vad=1 + +# Discontinuous Transmission (boolean) +#sout-speex-dtx=0 + +[gstdecode] # GStreamer Based Decoder + +# Use DecodeBin (boolean) +#use-decodebin=1 + +[svgdec] # SVG video decoder + +# Image width (integer) +#svg-width=-1 + +# Image height (integer) +#svg-height=-1 + +# Scale factor (float) +#svg-scale=-1.000000 + +[ttml] # TTML subtitles decoder + +# Subtitle justification (integer) +#ttml-align=0 + +[svcdsub] # Philips OGT (SVCD subtitle) decoder + +[ddummy] # Dummy decoder + +# Save raw codec data (boolean) +#dummy-save-es=0 + +[x264] # H.264/MPEG-4 Part 10/AVC encoder (x264) + +# Maximum GOP size (integer) +#sout-x264-keyint=250 + +# Minimum GOP size (integer) +#sout-x264-min-keyint=25 + +# Use recovery points to close GOPs (boolean) +#sout-x264-opengop=0 + +# Enable compatibility hacks for Blu-ray support (boolean) +#sout-x264-bluray-compat=0 + +# Extra I-frames aggressivity (integer) +#sout-x264-scenecut=40 + +# B-frames between I and P (integer) +#sout-x264-bframes=3 + +# Adaptive B-frame decision (integer) +#sout-x264-b-adapt=1 + +# Influence (bias) B-frames usage (integer) +#sout-x264-b-bias=0 + +# Keep some B-frames as references (string) +#sout-x264-bpyramid=normal + +# CABAC (boolean) +#sout-x264-cabac=1 + +# Use fullrange instead of TV colorrange (boolean) +#sout-x264-fullrange=0 + +# Number of reference frames (integer) +#sout-x264-ref=3 + +# Skip loop filter (boolean) +#sout-x264-nf=0 + +# Loop filter AlphaC0 and Beta parameters alpha:beta (string) +#sout-x264-deblock=0:0 + +# Strength of psychovisual optimization, default is "1.0:0.0" (string) +#sout-x264-psy-rd=1.0:0.0 + +# Use Psy-optimizations (boolean) +#sout-x264-psy=1 + +# H.264 level (string) +#sout-x264-level=0 + +# H.264 profile (string) +#sout-x264-profile=high + +# Interlaced mode (boolean) +#sout-x264-interlaced=0 + +# Frame packing (integer) +#sout-x264-frame-packing=-1 + +# Force number of slices per frame (integer) +#sout-x264-slices=0 + +# Limit the size of each slice in bytes (integer) +#sout-x264-slice-max-size=0 + +# Limit the size of each slice in macroblocks (integer) +#sout-x264-slice-max-mbs=0 + +# HRD-timing information (string) +#sout-x264-hrd=none + +# Set QP (integer) +#sout-x264-qp=-1 + +# Quality-based VBR (integer) +#sout-x264-crf=23 + +# Min QP (integer) +#sout-x264-qpmin=10 + +# Max QP (integer) +#sout-x264-qpmax=51 + +# Max QP step (integer) +#sout-x264-qpstep=4 + +# Average bitrate tolerance (float) +#sout-x264-ratetol=1.000000 + +# Max local bitrate (integer) +#sout-x264-vbv-maxrate=0 + +# VBV buffer (integer) +#sout-x264-vbv-bufsize=0 + +# Initial VBV buffer occupancy (float) +#sout-x264-vbv-init=0.900000 + +# QP factor between I and P (float) +#sout-x264-ipratio=1.400000 + +# QP factor between P and B (float) +#sout-x264-pbratio=1.300000 + +# QP difference between chroma and luma (integer) +#sout-x264-chroma-qp-offset=0 + +# Multipass ratecontrol (integer) +#sout-x264-pass=0 + +# QP curve compression (float) +#sout-x264-qcomp=0.600000 + +# Reduce fluctuations in QP (float) +#sout-x264-cplxblur=20.000000 + +# Reduce fluctuations in QP (float) +#sout-x264-qblur=0.500000 + +# How AQ distributes bits (integer) +#sout-x264-aq-mode=1 + +# Strength of AQ (float) +#sout-x264-aq-strength=1.000000 + +# Partitions to consider (string) +#sout-x264-partitions=normal + +# Direct MV prediction mode (string) +#sout-x264-direct=spatial + +# Direct prediction size (integer) +#sout-x264-direct-8x8=1 + +# Weighted prediction for B-frames (boolean) +#sout-x264-weightb=1 + +# Weighted prediction for P-frames (integer) +#sout-x264-weightp=2 + +# Integer pixel motion estimation method (string) +#sout-x264-me=hex + +# Maximum motion vector search range (integer) +#sout-x264-merange=16 + +# Maximum motion vector length (integer) +#sout-x264-mvrange=-1 + +# Minimum buffer space between threads (integer) +#sout-x264-mvrange-thread=-1 + +# Subpixel motion estimation and partition decision quality (integer) +#sout-x264-subme=7 + +# Decide references on a per partition basis (boolean) +#sout-x264-mixed-refs=1 + +# Chroma in motion estimation (boolean) +#sout-x264-chroma-me=1 + +# Adaptive spatial transform size (boolean) +#sout-x264-8x8dct=1 + +# Trellis RD quantization (integer) +#sout-x264-trellis=1 + +# Framecount to use on frametype lookahead (integer) +#sout-x264-lookahead=40 + +# Use Periodic Intra Refresh (boolean) +#sout-x264-intra-refresh=0 + +# Use mb-tree ratecontrol (boolean) +#sout-x264-mbtree=1 + +# Early SKIP detection on P-frames (boolean) +#sout-x264-fast-pskip=1 + +# Coefficient thresholding on P-frames (boolean) +#sout-x264-dct-decimate=1 + +# Noise reduction (integer) +#sout-x264-nr=0 + +# Inter luma quantization deadzone (integer) +#sout-x264-deadzone-inter=21 + +# Intra luma quantization deadzone (integer) +#sout-x264-deadzone-intra=11 + +# Non-deterministic optimizations when threaded (boolean) +#sout-x264-non-deterministic=0 + +# CPU optimizations (boolean) +#sout-x264-asm=1 + +# PSNR computation (boolean) +#sout-x264-psnr=0 + +# SSIM computation (boolean) +#sout-x264-ssim=0 + +# Quiet mode (boolean) +#sout-x264-quiet=0 + +# SPS and PPS id numbers (integer) +#sout-x264-sps-id=0 + +# Access unit delimiters (boolean) +#sout-x264-aud=0 + +# Statistics (boolean) +#sout-x264-verbose=0 + +# Filename for 2 pass stats file (string) +#sout-x264-stats=x264_2pass.log + +# Default preset setting used (string) +#sout-x264-preset= + +# Default tune setting used (string) +#sout-x264-tune= + +# x264 advanced options (string) +#sout-x264-options= + +[jpeg] # JPEG image decoder + +# Quality level (integer) +#sout-jpeg-quality=95 + +[spudec] # DVD subtitles decoder + +# Disable DVD subtitle transparency (boolean) +#dvdsub-transparency=0 + +[dav1d] # Dav1d video decoder + +# Frames Threads (integer) +#dav1d-thread-frames=0 + +# Tiles Threads (integer) +#dav1d-thread-tiles=0 + +[aribsub] # ARIB subtitles decoder + +# Ignore ruby (furigana) (boolean) +#aribsub-ignore-ruby=0 + +# Use Core Text renderer (boolean) +#aribsub-use-coretext=0 + +[vpx] # WebM video decoder + +# Quality mode (integer) +#sout-vpx-quality-mode=1000000 + +[qsv] # Intel QuickSync Video encoder for MPEG4-Part10/MPEG2 (aka H.264/H.262) + +# Enable software mode (boolean) +#sout-qsv-software=0 + +# Codec Profile (string) +#sout-qsv-h264-profile=unspecified + +# Codec Level (string) +#sout-qsv-h264-level=unspecified + +# Codec Profile (string) +#sout-qsv-mpeg2-profile=unspecified + +# Codec Level (string) +#sout-qsv-mpeg2-level=unspecified + +# Group of Picture size (integer) +#sout-qsv-gop-size=32 + +# Group of Picture Reference Distance (integer) +#sout-qsv-gop-refdist=4 + +# IDR interval (integer) +#sout-qsv-idr-interval=0 + +# Target Usage (string) +#sout-qsv-target-usage=quality + +# Rate Control Method (string) +#sout-qsv-rc-method=vbr + +# Quantization parameter (integer) +#sout-qsv-qp=0 + +# Quantization parameter for I-frames (integer) +#sout-qsv-qpi=0 + +# Quantization parameter for P-frames (integer) +#sout-qsv-qpp=0 + +# Quantization parameter for B-frames (integer) +#sout-qsv-qpb=0 + +# Maximum Bitrate (integer) +#sout-qsv-bitrate-max=0 + +# Accuracy of RateControl (integer) +#sout-qsv-accuracy=0 + +# Convergence time of 'avbr' RateControl (integer) +#sout-qsv-convergence=0 + +# Number of slices per frame (integer) +#sout-qsv-num-slice=0 + +# Number of reference frames (integer) +#sout-qsv-num-ref-frame=0 + +# Number of parallel operations (integer) +#sout-qsv-async-depth=4 + +[a52] # ATSC A/52 (AC-3) audio decoder + +# A/52 dynamic range compression (boolean) +#a52-dynrng=1 + +[cc] # Closed Captions decoder + +# Opacity (boolean) +#cc-opaque=1 + +[twolame] # Libtwolame audio encoder + +# Encoding quality (float) +#sout-twolame-quality=0.000000 + +# Stereo mode (integer) +#sout-twolame-mode=0 + +# VBR mode (boolean) +#sout-twolame-vbr=0 + +# Psycho-acoustic model (integer) +#sout-twolame-psy=3 + +[x26410b] # H.264/MPEG-4 Part 10/AVC encoder (x264 10-bit) + +# Maximum GOP size (integer) +#sout-x26410b-keyint=250 + +# Minimum GOP size (integer) +#sout-x26410b-min-keyint=25 + +# Use recovery points to close GOPs (boolean) +#sout-x26410b-opengop=0 + +# Enable compatibility hacks for Blu-ray support (boolean) +#sout-x26410b-bluray-compat=0 + +# Extra I-frames aggressivity (integer) +#sout-x26410b-scenecut=40 + +# B-frames between I and P (integer) +#sout-x26410b-bframes=3 + +# Adaptive B-frame decision (integer) +#sout-x26410b-b-adapt=1 + +# Influence (bias) B-frames usage (integer) +#sout-x26410b-b-bias=0 + +# Keep some B-frames as references (string) +#sout-x26410b-bpyramid=normal + +# CABAC (boolean) +#sout-x26410b-cabac=1 + +# Use fullrange instead of TV colorrange (boolean) +#sout-x26410b-fullrange=0 + +# Number of reference frames (integer) +#sout-x26410b-ref=3 + +# Skip loop filter (boolean) +#sout-x26410b-nf=0 + +# Loop filter AlphaC0 and Beta parameters alpha:beta (string) +#sout-x26410b-deblock=0:0 + +# Strength of psychovisual optimization, default is "1.0:0.0" (string) +#sout-x26410b-psy-rd=1.0:0.0 + +# Use Psy-optimizations (boolean) +#sout-x26410b-psy=1 + +# H.264 level (string) +#sout-x26410b-level=0 + +# H.264 profile (string) +#sout-x26410b-profile=high + +# Interlaced mode (boolean) +#sout-x26410b-interlaced=0 + +# Frame packing (integer) +#sout-x26410b-frame-packing=-1 + +# Force number of slices per frame (integer) +#sout-x26410b-slices=0 + +# Limit the size of each slice in bytes (integer) +#sout-x26410b-slice-max-size=0 + +# Limit the size of each slice in macroblocks (integer) +#sout-x26410b-slice-max-mbs=0 + +# HRD-timing information (string) +#sout-x26410b-hrd=none + +# Set QP (integer) +#sout-x26410b-qp=-1 + +# Quality-based VBR (integer) +#sout-x26410b-crf=23 + +# Min QP (integer) +#sout-x26410b-qpmin=10 + +# Max QP (integer) +#sout-x26410b-qpmax=51 + +# Max QP step (integer) +#sout-x26410b-qpstep=4 + +# Average bitrate tolerance (float) +#sout-x26410b-ratetol=1.000000 + +# Max local bitrate (integer) +#sout-x26410b-vbv-maxrate=0 + +# VBV buffer (integer) +#sout-x26410b-vbv-bufsize=0 + +# Initial VBV buffer occupancy (float) +#sout-x26410b-vbv-init=0.900000 + +# QP factor between I and P (float) +#sout-x26410b-ipratio=1.400000 + +# QP factor between P and B (float) +#sout-x26410b-pbratio=1.300000 + +# QP difference between chroma and luma (integer) +#sout-x26410b-chroma-qp-offset=0 + +# Multipass ratecontrol (integer) +#sout-x26410b-pass=0 + +# QP curve compression (float) +#sout-x26410b-qcomp=0.600000 + +# Reduce fluctuations in QP (float) +#sout-x26410b-cplxblur=20.000000 + +# Reduce fluctuations in QP (float) +#sout-x26410b-qblur=0.500000 + +# How AQ distributes bits (integer) +#sout-x26410b-aq-mode=1 + +# Strength of AQ (float) +#sout-x26410b-aq-strength=1.000000 + +# Partitions to consider (string) +#sout-x26410b-partitions=normal + +# Direct MV prediction mode (string) +#sout-x26410b-direct=spatial + +# Direct prediction size (integer) +#sout-x26410b-direct-8x8=1 + +# Weighted prediction for B-frames (boolean) +#sout-x26410b-weightb=1 + +# Weighted prediction for P-frames (integer) +#sout-x26410b-weightp=2 + +# Integer pixel motion estimation method (string) +#sout-x26410b-me=hex + +# Maximum motion vector search range (integer) +#sout-x26410b-merange=16 + +# Maximum motion vector length (integer) +#sout-x26410b-mvrange=-1 + +# Minimum buffer space between threads (integer) +#sout-x26410b-mvrange-thread=-1 + +# Subpixel motion estimation and partition decision quality (integer) +#sout-x26410b-subme=7 + +# Decide references on a per partition basis (boolean) +#sout-x26410b-mixed-refs=1 + +# Chroma in motion estimation (boolean) +#sout-x26410b-chroma-me=1 + +# Adaptive spatial transform size (boolean) +#sout-x26410b-8x8dct=1 + +# Trellis RD quantization (integer) +#sout-x26410b-trellis=1 + +# Framecount to use on frametype lookahead (integer) +#sout-x26410b-lookahead=40 + +# Use Periodic Intra Refresh (boolean) +#sout-x26410b-intra-refresh=0 + +# Use mb-tree ratecontrol (boolean) +#sout-x26410b-mbtree=1 + +# Early SKIP detection on P-frames (boolean) +#sout-x26410b-fast-pskip=1 + +# Coefficient thresholding on P-frames (boolean) +#sout-x26410b-dct-decimate=1 + +# Noise reduction (integer) +#sout-x26410b-nr=0 + +# Inter luma quantization deadzone (integer) +#sout-x26410b-deadzone-inter=21 + +# Intra luma quantization deadzone (integer) +#sout-x26410b-deadzone-intra=11 + +# Non-deterministic optimizations when threaded (boolean) +#sout-x26410b-non-deterministic=0 + +# CPU optimizations (boolean) +#sout-x26410b-asm=1 + +# PSNR computation (boolean) +#sout-x26410b-psnr=0 + +# SSIM computation (boolean) +#sout-x26410b-ssim=0 + +# Quiet mode (boolean) +#sout-x26410b-quiet=0 + +# SPS and PPS id numbers (integer) +#sout-x26410b-sps-id=0 + +# Access unit delimiters (boolean) +#sout-x26410b-aud=0 + +# Statistics (boolean) +#sout-x26410b-verbose=0 + +# Filename for 2 pass stats file (string) +#sout-x26410b-stats=x264_2pass.log + +# Default preset setting used (string) +#sout-x26410b-preset= + +# Default tune setting used (string) +#sout-x26410b-tune= + +# x264 advanced options (string) +#sout-x26410b-options= + +[dca] # DTS Coherent Acoustics audio decoder + +# DTS dynamic range compression (boolean) +#dts-dynrng=1 + +[folder] # Folder meta data + +# Album art filename (string) +#album-art-filename= + +[logo] # Logo sub source + +# Logo filenames (string) +#logo-file= + +# X coordinate (integer) +#logo-x=-1 + +# Y coordinate (integer) +#logo-y=-1 + +# Logo individual image time in ms (integer) +#logo-delay=1000 + +# Logo animation # of loops (integer) +#logo-repeat=-1 + +# Opacity of the logo (integer) +#logo-opacity=255 + +# Logo position (integer) +#logo-position=-1 + +[mosaic] # Mosaic video sub source + +# Transparency (integer) +#mosaic-alpha=255 + +# Height (integer) +#mosaic-height=100 + +# Width (integer) +#mosaic-width=100 + +# Mosaic alignment (integer) +#mosaic-align=5 + +# Top left corner X coordinate (integer) +#mosaic-xoffset=0 + +# Top left corner Y coordinate (integer) +#mosaic-yoffset=0 + +# Border width (integer) +#mosaic-borderw=0 + +# Border height (integer) +#mosaic-borderh=0 + +# Positioning method (integer) +#mosaic-position=0 + +# Number of rows (integer) +#mosaic-rows=2 + +# Number of columns (integer) +#mosaic-cols=2 + +# Keep aspect ratio (boolean) +#mosaic-keep-aspect-ratio=0 + +# Keep original size (boolean) +#mosaic-keep-picture=0 + +# Elements order (string) +#mosaic-order= + +# Offsets in order (string) +#mosaic-offsets= + +# Delay (integer) +#mosaic-delay=0 + +[rss] # RSS and Atom feed display + +# Feed URLs (string) +#rss-urls= + +# X offset (integer) +#rss-x=0 + +# Y offset (integer) +#rss-y=0 + +# Text position (integer) +#rss-position=-1 + +# Opacity (integer) +#rss-opacity=255 + +# Color (integer) +#rss-color=16777215 + +# Font size, pixels (integer) +#rss-size=0 + +# Speed of feeds (integer) +#rss-speed=100000 + +# Max length (integer) +#rss-length=60 + +# Refresh time (integer) +#rss-ttl=1800 + +# Feed images (boolean) +#rss-images=1 + +# Title display mode (integer) +#rss-title=-1 + +[marq] # Marquee display + +# Text (string) +#marq-marquee=VLC + +# Text file (string) +#marq-file= + +# X offset (integer) +#marq-x=0 + +# Y offset (integer) +#marq-y=0 + +# Marquee position (integer) +#marq-position=-1 + +# Opacity (integer) +#marq-opacity=255 + +# Color (integer) +#marq-color=16777215 + +# Font size, pixels (integer) +#marq-size=0 + +# Timeout (integer) +#marq-timeout=0 + +# Refresh period in ms (integer) +#marq-refresh=1000 + +[audiobargraph_v] # Audio Bar Graph Video sub source + +# X coordinate (integer) +#audiobargraph_v-x=0 + +# Y coordinate (integer) +#audiobargraph_v-y=0 + +# Transparency of the bargraph (integer) +#audiobargraph_v-transparency=255 + +# Bargraph position (integer) +#audiobargraph_v-position=-1 + +# Bar width in pixel (integer) +#audiobargraph_v-barWidth=10 + +# Bar Height in pixel (integer) +#audiobargraph_v-barHeight=400 + +[dynamicoverlay] # Dynamic video overlay + +# Input FIFO (string) +#overlay-input= + +# Output FIFO (string) +#overlay-output= + +[subsdelay] # Subtitle delay + +# Delay calculation mode (integer) +#subsdelay-mode=1 + +# Calculation factor (float) +#subsdelay-factor=2.000000 + +# Maximum overlapping subtitles (integer) +#subsdelay-overlap=3 + +# Minimum alpha value (integer) +#subsdelay-min-alpha=70 + +# Interval between two disappearances (integer) +#subsdelay-min-stops=1000 + +# Interval between appearance and disappearance (integer) +#subsdelay-min-start-stop=1000 + +# Interval between disappearance and appearance (integer) +#subsdelay-min-stop-start=1000 + +[file] # Secrets are stored on a file without any encryption + +# ? (string) +#keystore-file= + +[mpegvideo] # MPEG-I/II video packetizer + +# Sync on Intra Frame (boolean) +#packetizer-mpegvideo-sync-iframe=0 + +[file] # File logger + +# Log to file (boolean) +#file-logging=0 + +# Log filename (string) +#logfile= + +# Log format (string) +#logmode=text + +# Verbosity (integer) +#log-verbose=-1 + +[syslog] # System logger (syslog) + +# System log (syslog) (boolean) +#syslog=0 + +# Debug messages (boolean) +#syslog-debug=0 + +# Identity (string) +#syslog-ident=vlc + +# Facility (string) +#syslog-facility=user + +[console] # Console logger + +[vdpau_chroma] # VDPAU surface conversions + +# Deinterlace (integer) +#vdpau-deinterlace=1 + +# Inverse telecine (boolean) +#vdpau-ivtc=0 + +# Deinterlace chroma skip (boolean) +#vdpau-chroma-skip=0 + +# Noise reduction level (float) +#vdpau-noise-reduction=0.000000 + +# Scaling quality (integer) +#vdpau-scaling=0 + +[visual] # Visualizer filter + +# Effects list (string) +#effect-list=spectrum + +# Video width (integer) +#effect-width=800 + +# Video height (integer) +#effect-height=500 + +# FFT window (string) +#effect-fft-window=flat + +# Kaiser window parameter (float) +#effect-kaiser-param=3.000000 + +# Show 80 bands instead of 20 (boolean) +#visual-80-bands=1 + +# Draw peaks in the analyzer (boolean) +#visual-peaks=1 + +# Enable original graphic spectrum (boolean) +#spect-show-original=0 + +# Draw the base of the bands (boolean) +#spect-show-base=1 + +# Base pixel radius (integer) +#spect-radius=42 + +# Spectral sections (integer) +#spect-sections=3 + +# V-plane color (integer) +#spect-color=80 + +# Draw bands in the spectrometer (boolean) +#spect-show-bands=1 + +# Show 80 bands instead of 20 (boolean) +#spect-80-bands=1 + +# Number of blank pixels between bands. (integer) +#spect-separ=1 + +# Amplification (integer) +#spect-amp=8 + +# Draw peaks in the analyzer (boolean) +#spect-show-peaks=1 + +# Peak extra width (integer) +#spect-peak-width=61 + +# Peak height (integer) +#spect-peak-height=1 + +[glspectrum] # 3D OpenGL spectrum visualization + +# Video width (integer) +#glspectrum-width=400 + +# Video height (integer) +#glspectrum-height=300 + +[upnp] # Universal Plug'n'Play + +# SAT>IP channel list (string) +#satip-channelist=auto + +# Custom SAT>IP channel list URL (string) +#satip-channellist-url= + +[sap] # Network streams (SAP) + +# SAP multicast address (string) +#sap-addr= + +# SAP timeout (seconds) (integer) +#sap-timeout=1800 + +# Try to parse the announce (boolean) +#sap-parse=1 + +# SAP Strict mode (boolean) +#sap-strict=0 + +[podcast] # Podcasts + +# Podcast URLs list (string) +#podcast-urls= + +[access_output_shout] # IceCAST output + +# Stream name (string) +#sout-shout-name=VLC media player - Live stream + +# Stream description (string) +#sout-shout-description=Live stream from VLC media player + +# Stream MP3 (boolean) +#sout-shout-mp3=0 + +# Genre description (string) +#sout-shout-genre=Alternative + +# URL description (string) +#sout-shout-url=http://www.videolan.org/vlc + +# Bitrate (string) +#sout-shout-bitrate= + +# Samplerate (string) +#sout-shout-samplerate= + +# Number of channels (string) +#sout-shout-channels= + +# Ogg Vorbis Quality (string) +#sout-shout-quality= + +# Stream public (boolean) +#sout-shout-public=0 + +[udp] # UDP stream output + +# Caching value (ms) (integer) +#sout-udp-caching=300 + +# Group packets (integer) +#sout-udp-group=1 + +[file] # File stream output + +# Overwrite existing file (boolean) +#sout-file-overwrite=1 + +# Append to file (boolean) +#sout-file-append=0 + +# Format time and date (boolean) +#sout-file-format=0 + +# Synchronous writing (boolean) +#sout-file-sync=0 + +[http] # HTTP stream output + +# Username (string) +#sout-http-user= + +# Password (string) +#sout-http-pwd= + +# Mime (string) +#sout-http-mime= + +# Metacube (boolean) +#sout-http-metacube=0 + +[core] # core program + +# Enable audio (boolean) +#audio=1 + +# Audio gain (float) +#gain=1.000000 + +# Audio output volume step (float) +#volume-step=12.800000 + +# Remember the audio volume (boolean) +#volume-save=1 + +# Force S/PDIF support (boolean) +#spdif=0 + +# Force detection of Dolby Surround (integer) +#force-dolby-surround=0 + +# Stereo audio output mode (integer) +#stereo-mode=0 + +# Audio desynchronization compensation (integer) +#audio-desync=0 + +# Replay gain mode (string) +#audio-replay-gain-mode=none + +# Replay preamp (float) +#audio-replay-gain-preamp=0.000000 + +# Default replay gain (float) +#audio-replay-gain-default=-7.000000 + +# Peak protection (boolean) +#audio-replay-gain-peak-protection=1 + +# Enable time stretching audio (boolean) +#audio-time-stretch=1 + +# Audio output module (string) +#aout= + +# Media role (string) +#role=video + +# Audio filters (string) +#audio-filter= + +# Audio visualizations (string) +#audio-visual=none + +# Audio resampler (string) +#audio-resampler= + +# Enable video (boolean) +#video=1 + +# Grayscale video output (boolean) +#grayscale=0 + +# Fullscreen video output (boolean) +#fullscreen=0 + +# Embedded video (boolean) +#embedded-video=1 + +# (boolean) +#xlib=1 + +# Drop late frames (boolean) +#drop-late-frames=1 + +# Skip frames (boolean) +#skip-frames=1 + +# Quiet synchro (boolean) +#quiet-synchro=0 + +# Key press events (boolean) +#keyboard-events=1 + +# Mouse events (boolean) +#mouse-events=1 + +# Always on top (boolean) +#video-on-top=0 + +# Enable wallpaper mode (boolean) +#video-wallpaper=0 + +# Disable screensaver (boolean) +#disable-screensaver=1 + +# Show media title on video (boolean) +#video-title-show=1 + +# Show video title for x milliseconds (integer) +#video-title-timeout=5000 + +# Position of video title (integer) +#video-title-position=8 + +# Hide cursor and fullscreen controller after x milliseconds (integer) +#mouse-hide-timeout=1000 + +# Video snapshot directory (or filename) (string) +#snapshot-path= + +# Video snapshot file prefix (string) +#snapshot-prefix=vlcsnap- + +# Video snapshot format (string) +#snapshot-format=png + +# Display video snapshot preview (boolean) +#snapshot-preview=1 + +# Use sequential numbers instead of timestamps (boolean) +#snapshot-sequential=0 + +# Video snapshot width (integer) +#snapshot-width=-1 + +# Video snapshot height (integer) +#snapshot-height=-1 + +# Video width (integer) +#width=-1 + +# Video height (integer) +#height=-1 + +# Video X coordinate (integer) +#video-x=0 + +# Video Y coordinate (integer) +#video-y=0 + +# Video cropping (string) +#crop= + +# Custom crop ratios list (string) +#custom-crop-ratios= + +# Source aspect ratio (string) +#aspect-ratio= + +# Video Auto Scaling (boolean) +#autoscale=1 + +# Monitor pixel aspect ratio (string) +#monitor-par= + +# Custom aspect ratios list (string) +#custom-aspect-ratios= + +# Fix HDTV height (boolean) +#hdtv-fix=1 + +# Window decorations (boolean) +#video-deco=1 + +# Video title (string) +#video-title= + +# Video alignment (integer) +#align=0 + +# Zoom video (float) +#zoom=1.000000 + +# Deinterlace (integer) +#deinterlace=-1 + +# Deinterlace mode (string) +#deinterlace-mode=auto + +# Video output module (string) +#vout= + +# Video filter module (string) +#video-filter= + +# Video splitter module (string) +#video-splitter= + +# Enable sub-pictures (boolean) +#spu=1 + +# On Screen Display (boolean) +#osd=1 + +# Text rendering module (string) +#text-renderer= + +# Use subtitle file (string) +#sub-file= + +# Autodetect subtitle files (boolean) +#sub-autodetect-file=1 + +# Subtitle autodetection fuzziness (integer) +#sub-autodetect-fuzzy=3 + +# Subtitle autodetection paths (string) +#sub-autodetect-path=./Subtitles, ./subtitles, ./Subs, ./subs + +# Force subtitle position (integer) +#sub-margin=0 + +# Subpictures source module (string) +#sub-source= + +# Subpictures filter module (string) +#sub-filter= + +# Program (integer) +#program=0 + +# Programs (string) +#programs= + +# Audio track (integer) +#audio-track=-1 + +# Subtitle track (integer) +#sub-track=-1 + +# Audio language (string) +#audio-language= + +# Subtitle language (string) +#sub-language= + +# Menu language (string) +#menu-language= + +# Audio track ID (integer) +#audio-track-id=-1 + +# Subtitle track ID (integer) +#sub-track-id=-1 + +# Preferred Closed Captions decoder (integer) +#captions=608 + +# Preferred video resolution (integer) +#preferred-resolution=-1 + +# Input repetitions (integer) +#input-repeat=0 + +# Start time (float) +#start-time=0.000000 + +# Stop time (float) +#stop-time=0.000000 + +# Run time (float) +#run-time=0.000000 + +# Fast seek (boolean) +#input-fast-seek=0 + +# Playback speed (float) +#rate=1.000000 + +# Input list (string) +#input-list= + +# Input slave (experimental) (string) +#input-slave= + +# Bookmarks list for a stream (string) +#bookmarks= + +# DVD device (string) +#dvd=/dev/sr0 + +# VCD device (string) +#vcd=/dev/sr0 + +# MTU of the network interface (integer) +#mtu=1400 + +# TCP connection timeout (integer) +#ipv4-timeout=5000 + +# HTTP server address (string) +#http-host= + +# HTTP server port (integer) +#http-port=8080 + +# HTTPS server port (integer) +#https-port=8443 + +# RTSP server address (string) +#rtsp-host= + +# RTSP server port (integer) +#rtsp-port=554 + +# HTTP/TLS server certificate (string) +#http-cert= + +# HTTP/TLS server private key (string) +#http-key= + +# SOCKS server (string) +#socks= + +# SOCKS user name (string) +#socks-user= + +# SOCKS password (string) +#socks-pwd= + +# Title metadata (string) +#meta-title= + +# Author metadata (string) +#meta-author= + +# Artist metadata (string) +#meta-artist= + +# Genre metadata (string) +#meta-genre= + +# Copyright metadata (string) +#meta-copyright= + +# Description metadata (string) +#meta-description= + +# Date metadata (string) +#meta-date= + +# URL metadata (string) +#meta-url= + +# File caching (ms) (integer) +#file-caching=300 + +# Live capture caching (ms) (integer) +#live-caching=300 + +# Disc caching (ms) (integer) +#disc-caching=300 + +# Network caching (ms) (integer) +#network-caching=1000 + +# Clock reference average counter (integer) +#cr-average=40 + +# Clock synchronisation (integer) +#clock-synchro=-1 + +# Clock jitter (integer) +#clock-jitter=5000 + +# Network synchronisation (boolean) +#network-synchronisation=0 + +# Record directory (string) +#input-record-path= + +# Prefer native stream recording (boolean) +#input-record-native=1 + +# Timeshift directory (string) +#input-timeshift-path= + +# Timeshift granularity (integer) +#input-timeshift-granularity=-1 + +# Change title according to current media (string) +#input-title-format=$Z + +# Disable all lua plugins (boolean) +#lua=1 + +# Preferred decoders list (string) +#codec= + +# Preferred encoders list (string) +#encoder= + +# Access module (string) +#access= + +# Demux module (string) +#demux=any + +# Stream filter module (string) +#stream-filter= + +# Demux filter module (string) +#demux-filter= + +# Default stream output chain (string) +#sout= + +# Display while streaming (boolean) +#sout-display=0 + +# Keep stream output open (boolean) +#sout-keep=0 + +# Enable streaming of all ES (boolean) +#sout-all=1 + +# Enable audio stream output (boolean) +#sout-audio=1 + +# Enable video stream output (boolean) +#sout-video=1 + +# Enable SPU stream output (boolean) +#sout-spu=1 + +# Stream output muxer caching (ms) (integer) +#sout-mux-caching=1500 + +# VLM configuration file (string) +#vlm-conf= + +# SAP announcement interval (integer) +#sap-interval=5 + +# Mux module (string) +#mux= + +# Access output module (string) +#access_output= + +# Hop limit (TTL) (integer) +#ttl=-1 + +# Multicast output interface (string) +#miface= + +# DiffServ Code Point (integer) +#dscp=0 + +# Preferred packetizer list (string) +#packetizer= + +# VoD server module (string) +#vod-server= + +# Use a plugins cache (boolean) +#plugins-cache=1 + +# Scan for new plugins (boolean) +#plugins-scan=1 + +# Preferred keystore list (string) +#keystore= + +# Allow real-time priority (boolean) +#rt-priority=0 + +# Adjust VLC priority (integer) +#rt-offset=0 + +# Play files randomly forever (boolean) +#random=0 + +# Repeat all (boolean) +#loop=0 + +# Repeat current item (boolean) +#repeat=0 + +# Play and exit (boolean) +#play-and-exit=0 + +# Play and stop (boolean) +#play-and-stop=0 + +# Play and pause (boolean) +#play-and-pause=0 + +# Start paused (boolean) +#start-paused=0 + +# Auto start (boolean) +#playlist-autostart=1 + +# Pause on audio communication (boolean) +#playlist-cork=1 + +# Allow only one running instance (boolean) +#one-instance=0 + +# Use only one instance when started from file manager (boolean) +#one-instance-when-started-from-file=1 + +# Enqueue items into playlist in one instance mode (boolean) +#playlist-enqueue=0 + +# Expose media player via D-Bus (boolean) +#dbus=0 + +# Use media library (boolean) +#media-library=0 + +# Display playlist tree (boolean) +#playlist-tree=0 + +# Default stream (string) +#open= + +# Automatically preparse items (boolean) +#auto-preparse=1 + +# Preparsing timeout (integer) +#preparse-timeout=5000 + +# Allow metadata network access (boolean) +metadata-network-access=1 + +# Subdirectory behavior (string) +#recursive=collapse + +# Ignored extensions (string) +#ignore-filetypes=m3u,db,nfo,ini,jpg,jpeg,ljpg,gif,png,pgm,pgmyuv,pbm,pam,tga,bmp,pnm,xpm,xcf,pcx,tif,tiff,lbm,sfv,txt,sub,idx,srt,cue,ssa + +# Show hidden files (boolean) +#show-hiddenfiles=0 + +# Services discovery modules (string) +#services-discovery= + +# Run as daemon process (boolean) +#daemon=0 + +# Write process id to file (string) +#pidfile= + +# Show advanced options (boolean) +#advanced=0 + +# Interface interaction (boolean) +#interact=1 + +# Locally collect statistics (boolean) +#stats=1 + +# Interface module (string) +#intf= + +# Extra interface modules (string) +#extraintf= + +# Control interfaces (string) +#control= + +# Mouse wheel vertical axis control (integer) +#hotkeys-y-wheel-mode=0 + +# Mouse wheel horizontal axis control (integer) +#hotkeys-x-wheel-mode=2 + +# Fullscreen (string) +#global-key-toggle-fullscreen= + +# Fullscreen (string) +#key-toggle-fullscreen=f + +# Exit fullscreen (string) +#global-key-leave-fullscreen= + +# Exit fullscreen (string) +#key-leave-fullscreen=Esc + +# Play/Pause (string) +#global-key-play-pause= + +# Play/Pause (string) +#key-play-pause=Space Media Play Pause + +# Pause only (string) +#global-key-pause= + +# Pause only (string) +#key-pause=Browser Stop + +# Play only (string) +#global-key-play= + +# Play only (string) +#key-play=Browser Refresh + +# Faster (string) +#global-key-faster= + +# Faster (string) +#key-faster=+ + +# Slower (string) +#global-key-slower= + +# Slower (string) +#key-slower=- + +# Normal rate (string) +#global-key-rate-normal= + +# Normal rate (string) +#key-rate-normal== + +# Faster (fine) (string) +#global-key-rate-faster-fine= + +# Faster (fine) (string) +#key-rate-faster-fine=] + +# Slower (fine) (string) +#global-key-rate-slower-fine= + +# Slower (fine) (string) +#key-rate-slower-fine=[ + +# Next (string) +#global-key-next= + +# Next (string) +#key-next=n Media Next Track + +# Previous (string) +#global-key-prev= + +# Previous (string) +#key-prev=p Media Prev Track + +# Stop (string) +#global-key-stop= + +# Stop (string) +#key-stop=s Media Stop + +# Position (string) +#global-key-position= + +# Position (string) +#key-position=t + +# Very short backwards jump (string) +#global-key-jump-extrashort= + +# Very short backwards jump (string) +#key-jump-extrashort=Shift+Left + +# Very short forward jump (string) +#global-key-jump+extrashort= + +# Very short forward jump (string) +#key-jump+extrashort=Shift+Right + +# Short backwards jump (string) +#global-key-jump-short= + +# Short backwards jump (string) +#key-jump-short=Alt+Left + +# Short forward jump (string) +#global-key-jump+short= + +# Short forward jump (string) +#key-jump+short=Alt+Right + +# Medium backwards jump (string) +#global-key-jump-medium= + +# Medium backwards jump (string) +#key-jump-medium=Ctrl+Left + +# Medium forward jump (string) +#global-key-jump+medium= + +# Medium forward jump (string) +#key-jump+medium=Ctrl+Right + +# Long backwards jump (string) +#global-key-jump-long= + +# Long backwards jump (string) +#key-jump-long=Ctrl+Alt+Left + +# Long forward jump (string) +#global-key-jump+long= + +# Long forward jump (string) +#key-jump+long=Ctrl+Alt+Right + +# Next frame (string) +#global-key-frame-next= + +# Next frame (string) +#key-frame-next=e Browser Next + +# Activate (string) +#global-key-nav-activate= + +# Activate (string) +#key-nav-activate=Enter + +# Navigate up (string) +#global-key-nav-up= + +# Navigate up (string) +#key-nav-up=Up + +# Navigate down (string) +#global-key-nav-down= + +# Navigate down (string) +#key-nav-down=Down + +# Navigate left (string) +#global-key-nav-left= + +# Navigate left (string) +#key-nav-left=Left + +# Navigate right (string) +#global-key-nav-right= + +# Navigate right (string) +#key-nav-right=Right + +# Go to the DVD menu (string) +#global-key-disc-menu= + +# Go to the DVD menu (string) +#key-disc-menu=Shift+m + +# Select previous DVD title (string) +#global-key-title-prev= + +# Select previous DVD title (string) +#key-title-prev=Shift+o + +# Select next DVD title (string) +#global-key-title-next= + +# Select next DVD title (string) +#key-title-next=Shift+b + +# Select prev DVD chapter (string) +#global-key-chapter-prev= + +# Select prev DVD chapter (string) +#key-chapter-prev=Shift+p + +# Select next DVD chapter (string) +#global-key-chapter-next= + +# Select next DVD chapter (string) +#key-chapter-next=Shift+n + +# Quit (string) +#global-key-quit= + +# Quit (string) +#key-quit=Ctrl+q + +# Volume up (string) +#global-key-vol-up= + +# Volume up (string) +#key-vol-up=Ctrl+Up Volume Up + +# Volume down (string) +#global-key-vol-down= + +# Volume down (string) +#key-vol-down=Ctrl+Down Volume Down + +# Mute (string) +#global-key-vol-mute= + +# Mute (string) +#key-vol-mute=m Volume Mute + +# Subtitle delay up (string) +#global-key-subdelay-up= + +# Subtitle delay up (string) +#key-subdelay-up=h + +# Subtitle delay down (string) +#global-key-subdelay-down= + +# Subtitle delay down (string) +#key-subdelay-down=g + +# Subtitle sync / bookmark audio timestamp (string) +#global-key-subsync-markaudio= + +# Subtitle sync / bookmark audio timestamp (string) +#key-subsync-markaudio=Shift+h + +# Subtitle sync / bookmark subtitle timestamp (string) +#global-key-subsync-marksub= + +# Subtitle sync / bookmark subtitle timestamp (string) +#key-subsync-marksub=Shift+j + +# Subtitle sync / synchronize audio & subtitle timestamps (string) +#global-key-subsync-apply= + +# Subtitle sync / synchronize audio & subtitle timestamps (string) +#key-subsync-apply=Shift+k + +# Subtitle sync / reset audio & subtitle synchronization (string) +#global-key-subsync-reset= + +# Subtitle sync / reset audio & subtitle synchronization (string) +#key-subsync-reset=Ctrl+Shift+k + +# Subtitle position up (string) +#global-key-subpos-up= + +# Subtitle position up (string) +#key-subpos-up= + +# Subtitle position down (string) +#global-key-subpos-down= + +# Subtitle position down (string) +#key-subpos-down= + +# Audio delay up (string) +#global-key-audiodelay-up= + +# Audio delay up (string) +#key-audiodelay-up=k + +# Audio delay down (string) +#global-key-audiodelay-down= + +# Audio delay down (string) +#key-audiodelay-down=j + +# Cycle audio track (string) +#global-key-audio-track= + +# Cycle audio track (string) +#key-audio-track=b + +# Cycle through audio devices (string) +#global-key-audiodevice-cycle= + +# Cycle through audio devices (string) +#key-audiodevice-cycle=Shift+a + +# Cycle subtitle track in reverse order (string) +#global-key-subtitle-revtrack= + +# Cycle subtitle track in reverse order (string) +#key-subtitle-revtrack=Alt+v + +# Cycle subtitle track (string) +#global-key-subtitle-track= + +# Cycle subtitle track (string) +#key-subtitle-track=v + +# Toggle subtitles (string) +#global-key-subtitle-toggle= + +# Toggle subtitles (string) +#key-subtitle-toggle=Shift+v + +# Cycle next program Service ID (string) +#global-key-program-sid-next= + +# Cycle next program Service ID (string) +#key-program-sid-next=x + +# Cycle previous program Service ID (string) +#global-key-program-sid-prev= + +# Cycle previous program Service ID (string) +#key-program-sid-prev=Shift+x + +# Cycle source aspect ratio (string) +#global-key-aspect-ratio= + +# Cycle source aspect ratio (string) +#key-aspect-ratio=a + +# Cycle video crop (string) +#global-key-crop= + +# Cycle video crop (string) +#key-crop=c + +# Toggle autoscaling (string) +#global-key-toggle-autoscale= + +# Toggle autoscaling (string) +#key-toggle-autoscale=o + +# Increase scale factor (string) +#global-key-incr-scalefactor= + +# Increase scale factor (string) +#key-incr-scalefactor=Alt+o + +# Decrease scale factor (string) +#global-key-decr-scalefactor= + +# Decrease scale factor (string) +#key-decr-scalefactor=Alt+Shift+o + +# Toggle deinterlacing (string) +#global-key-deinterlace= + +# Toggle deinterlacing (string) +#key-deinterlace=d + +# Cycle deinterlace modes (string) +#global-key-deinterlace-mode= + +# Cycle deinterlace modes (string) +#key-deinterlace-mode=Shift+d + +# Show controller in fullscreen (string) +#global-key-intf-show= + +# Show controller in fullscreen (string) +#key-intf-show=i + +# Boss key (string) +#global-key-intf-boss= + +# Boss key (string) +#key-intf-boss= + +# Context menu (string) +#global-key-intf-popup-menu= + +# Context menu (string) +#key-intf-popup-menu=Menu + +# Take video snapshot (string) +#global-key-snapshot= + +# Take video snapshot (string) +#key-snapshot=Shift+s + +# Record (string) +#global-key-record= + +# Record (string) +#key-record=Shift+r + +# Zoom (string) +#global-key-zoom= + +# Zoom (string) +#key-zoom=z + +# Un-Zoom (string) +#global-key-unzoom= + +# Un-Zoom (string) +#key-unzoom=Shift+z + +# Toggle wallpaper mode in video output (string) +#global-key-wallpaper= + +# Toggle wallpaper mode in video output (string) +#key-wallpaper=w + +# Crop one pixel from the top of the video (string) +#global-key-crop-top= + +# Crop one pixel from the top of the video (string) +#key-crop-top=Alt+r + +# Uncrop one pixel from the top of the video (string) +#global-key-uncrop-top= + +# Uncrop one pixel from the top of the video (string) +#key-uncrop-top=Alt+Shift+r + +# Crop one pixel from the left of the video (string) +#global-key-crop-left= + +# Crop one pixel from the left of the video (string) +#key-crop-left=Alt+d + +# Uncrop one pixel from the left of the video (string) +#global-key-uncrop-left= + +# Uncrop one pixel from the left of the video (string) +#key-uncrop-left=Alt+Shift+d + +# Crop one pixel from the bottom of the video (string) +#global-key-crop-bottom= + +# Crop one pixel from the bottom of the video (string) +#key-crop-bottom=Alt+c + +# Uncrop one pixel from the bottom of the video (string) +#global-key-uncrop-bottom= + +# Uncrop one pixel from the bottom of the video (string) +#key-uncrop-bottom=Alt+Shift+c + +# Crop one pixel from the right of the video (string) +#global-key-crop-right= + +# Crop one pixel from the right of the video (string) +#key-crop-right=Alt+f + +# Uncrop one pixel from the right of the video (string) +#global-key-uncrop-right= + +# Uncrop one pixel from the right of the video (string) +#key-uncrop-right=Alt+Shift+f + +# Random (string) +#global-key-random= + +# Random (string) +#key-random=r + +# Normal/Loop/Repeat (string) +#global-key-loop= + +# Normal/Loop/Repeat (string) +#key-loop=l + +# Shrink the viewpoint field of view (360°) (string) +#global-key-viewpoint-fov-in= + +# Shrink the viewpoint field of view (360°) (string) +#key-viewpoint-fov-in=Page Up + +# Expand the viewpoint field of view (360°) (string) +#global-key-viewpoint-fov-out= + +# Expand the viewpoint field of view (360°) (string) +#key-viewpoint-fov-out=Page Down + +# Roll the viewpoint clockwise (360°) (string) +#global-key-viewpoint-roll-clock= + +# Roll the viewpoint clockwise (360°) (string) +#key-viewpoint-roll-clock= + +# Roll the viewpoint anti-clockwise (360°) (string) +#global-key-viewpoint-roll-anticlock= + +# Roll the viewpoint anti-clockwise (360°) (string) +#key-viewpoint-roll-anticlock= + +# 1:4 Quarter (string) +#global-key-zoom-quarter= + +# 1:4 Quarter (string) +#key-zoom-quarter=Alt+1 + +# 1:2 Half (string) +#global-key-zoom-half= + +# 1:2 Half (string) +#key-zoom-half=Alt+2 + +# 1:1 Original (string) +#global-key-zoom-original= + +# 1:1 Original (string) +#key-zoom-original=Alt+3 + +# 2:1 Double (string) +#global-key-zoom-double= + +# 2:1 Double (string) +#key-zoom-double=Alt+4 + +# Very short jump length (integer) +#extrashort-jump-size=3 + +# Short jump length (integer) +#short-jump-size=10 + +# Medium jump length (integer) +#medium-jump-size=60 + +# Long jump length (integer) +#long-jump-size=300 + +# Set playlist bookmark 1 (string) +#global-key-set-bookmark1= + +# Set playlist bookmark 1 (string) +#key-set-bookmark1=Ctrl+F1 + +# Set playlist bookmark 2 (string) +#global-key-set-bookmark2= + +# Set playlist bookmark 2 (string) +#key-set-bookmark2=Ctrl+F2 + +# Set playlist bookmark 3 (string) +#global-key-set-bookmark3= + +# Set playlist bookmark 3 (string) +#key-set-bookmark3=Ctrl+F3 + +# Set playlist bookmark 4 (string) +#global-key-set-bookmark4= + +# Set playlist bookmark 4 (string) +#key-set-bookmark4=Ctrl+F4 + +# Set playlist bookmark 5 (string) +#global-key-set-bookmark5= + +# Set playlist bookmark 5 (string) +#key-set-bookmark5=Ctrl+F5 + +# Set playlist bookmark 6 (string) +#global-key-set-bookmark6= + +# Set playlist bookmark 6 (string) +#key-set-bookmark6=Ctrl+F6 + +# Set playlist bookmark 7 (string) +#global-key-set-bookmark7= + +# Set playlist bookmark 7 (string) +#key-set-bookmark7=Ctrl+F7 + +# Set playlist bookmark 8 (string) +#global-key-set-bookmark8= + +# Set playlist bookmark 8 (string) +#key-set-bookmark8=Ctrl+F8 + +# Set playlist bookmark 9 (string) +#global-key-set-bookmark9= + +# Set playlist bookmark 9 (string) +#key-set-bookmark9=Ctrl+F9 + +# Set playlist bookmark 10 (string) +#global-key-set-bookmark10= + +# Set playlist bookmark 10 (string) +#key-set-bookmark10=Ctrl+F10 + +# Play playlist bookmark 1 (string) +#global-key-play-bookmark1= + +# Play playlist bookmark 1 (string) +#key-play-bookmark1=F1 + +# Play playlist bookmark 2 (string) +#global-key-play-bookmark2= + +# Play playlist bookmark 2 (string) +#key-play-bookmark2=F2 + +# Play playlist bookmark 3 (string) +#global-key-play-bookmark3= + +# Play playlist bookmark 3 (string) +#key-play-bookmark3=F3 + +# Play playlist bookmark 4 (string) +#global-key-play-bookmark4= + +# Play playlist bookmark 4 (string) +#key-play-bookmark4=F4 + +# Play playlist bookmark 5 (string) +#global-key-play-bookmark5= + +# Play playlist bookmark 5 (string) +#key-play-bookmark5=F5 + +# Play playlist bookmark 6 (string) +#global-key-play-bookmark6= + +# Play playlist bookmark 6 (string) +#key-play-bookmark6=F6 + +# Play playlist bookmark 7 (string) +#global-key-play-bookmark7= + +# Play playlist bookmark 7 (string) +#key-play-bookmark7=F7 + +# Play playlist bookmark 8 (string) +#global-key-play-bookmark8= + +# Play playlist bookmark 8 (string) +#key-play-bookmark8=F8 + +# Play playlist bookmark 9 (string) +#global-key-play-bookmark9= + +# Play playlist bookmark 9 (string) +#key-play-bookmark9=F9 + +# Play playlist bookmark 10 (string) +#global-key-play-bookmark10= + +# Play playlist bookmark 10 (string) +#key-play-bookmark10=F10 + +# Clear the playlist (string) +#global-key-clear-playlist= + +# Clear the playlist (string) +#key-clear-playlist=Ctrl+w + +# Reset subtitles text scale (string) +#global-key-subtitle-text-scale-normal= + +# Reset subtitles text scale (string) +#key-subtitle-text-scale-normal=Ctrl+0 + +# Scale down subtitles text (string) +#global-key-subtitle-text-scale-up= + +# Scale down subtitles text (string) +#key-subtitle-text-scale-up=Ctrl+Mouse Wheel Up + +# Scale up subtitles text (string) +#global-key-subtitle-text-scale-down= + +# Scale up subtitles text (string) +#key-subtitle-text-scale-down=Ctrl+Mouse Wheel Down + +# Playlist bookmark 1 (string) +#bookmark1= + +# Playlist bookmark 2 (string) +#bookmark2= + +# Playlist bookmark 3 (string) +#bookmark3= + +# Playlist bookmark 4 (string) +#bookmark4= + +# Playlist bookmark 5 (string) +#bookmark5= + +# Playlist bookmark 6 (string) +#bookmark6= + +# Playlist bookmark 7 (string) +#bookmark7= + +# Playlist bookmark 8 (string) +#bookmark8= + +# Playlist bookmark 9 (string) +#bookmark9= + +# Playlist bookmark 10 (string) +#bookmark10= + diff --git a/wall.png b/wall.png Binary files differ. diff --git a/wget/wgetrc b/wget/wgetrc @@ -0,0 +1 @@ +hsts-file=~/.cache/wget-hsts diff --git a/xprofile b/xprofile @@ -0,0 +1,14 @@ +#!/bin/sh + +# Fix Gnome Apps Slow Start due to failing services +# Add this when you include flatpak in your system +dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY + +mpd & +remaps & +sxhkd & +setbg & +xcompmgr & +dunst & +xset r rate 300 50 & +unclutter & diff --git a/xterm/selenized-black.xdefaults b/xterm/selenized-black.xdefaults @@ -0,0 +1,24 @@ +! Selenized black color palette for xterm. + +xterm*background: rgb:18/18/18 +xterm*foreground: rgb:b9/b9/b9 + +! normal colors: "black", red, green, yellow, blue, magenta, cyan, "white" +xterm*color0: rgb:25/25/25 +xterm*color1: rgb:ed/4a/46 +xterm*color2: rgb:70/b4/33 +xterm*color3: rgb:db/b3/2d +xterm*color4: rgb:36/8a/eb +xterm*color5: rgb:eb/6e/b7 +xterm*color6: rgb:3f/c5/b7 +xterm*color7: rgb:77/77/77 + +! bright/bold versions of colors (in the same order) +xterm*color8: rgb:3b/3b/3b +xterm*color9: rgb:ff/5e/56 +xterm*color10: rgb:83/c7/46 +xterm*color11: rgb:ef/c5/41 +xterm*color12: rgb:4f/9c/fe +xterm*color13: rgb:ff/81/ca +xterm*color14: rgb:56/d8/c9 +xterm*color15: rgb:de/de/de diff --git a/youtube-dl/config b/youtube-dl/config @@ -0,0 +1,8 @@ +-o ~/vids/%(title)s.%(ext)s +--restrict-filenames +--external-downloader aria2c +--external-downloader-args '-c -j 3 -x 3 -s 3 -k 1M' +--add-metadata --all-subs --embed-subs --embed-thumbnail +--merge-output-format mkv +--write-info-json +-i diff --git a/zathura/zathurarc b/zathura/zathurarc @@ -0,0 +1,12 @@ +set statusbar-h-padding 0 +set statusbar-v-padding 0 +set page-padding 1 +map u scroll half-up +map d scroll half-down +map D toggle_page_mode +map r reload +map R rotate +map K zoom in +map J zoom out +map i recolor +map p print diff --git a/zsh/.zcompdump b/zsh/.zcompdump @@ -0,0 +1,1968 @@ +#files: 927 version: 5.8 + +_comps=( +'-' '_precommand' +'-*-' '_bootctl' +'.' '_source' +'5g' '_go' +'5l' '_go' +'6g' '_go' +'6l' '_go' +'8g' '_go' +'8l' '_go' +'a2ps' '_a2ps' +'aaaa' '_hosts' +'aap' '_aap' +'abcde' '_abcde' +'ack' '_ack' +'ack2' '_ack' +'ack-grep' '_ack' +'ack-standalone' '_ack' +'acpi' '_acpi' +'acpitool' '_acpitool' +'acroread' '_acroread' +'adb' '_adb' +'add-zle-hook-widget' '_add-zle-hook-widget' +'add-zsh-hook' '_add-zsh-hook' +'admin' '_sccs' +'afew' '_afew' +'ag' '_the_silver_searcher' +'ali' '_mh' +'alias' '_alias' +'amaya' '_webbrowser' +'analyseplugin' '_analyseplugin' +'android' '_android' +'animate' '_imagemagick' +'anno' '_mh' +'ansible' '_ansible' +'ansible-config' '_ansible' +'ansible-console' '_ansible' +'ansible-doc' '_ansible' +'ansible-galaxy' '_ansible' +'ansible-inventory' '_ansible' +'ansible-playbook' '_ansible' +'ansible-pull' '_ansible' +'ansible-vault' '_ansible' +'ant' '_ant' +'antiword' '_antiword' +'aodh' '_openstack' +'aoss' '_precommand' +'apache2ctl' '_apachectl' +'apachectl' '_apachectl' +'aplay' '_alsa-utils' +'apm' '_apm' +'appletviewer' '_java' +'apropos' '_man' +'apvlv' '_pdf' +'archlinux-java' '_archlinux-java' +'arecord' '_alsa-utils' +'arena' '_webbrowser' +'arp' '_arp' +'arping' '_arping' +'-array-value-' '_value' +'artisan' '_artisan' +'asciidoctor' '_asciidoctor' +'asciinema' '_asciinema' +'ash' '_sh' +'-assign-parameter-' '_assign' +'at' '_at' +'atach' '_atach' +'atq' '_at' +'atrm' '_at' +'attr' '_attr' +'augtool' '_augeas' +'autoload' '_typeset' +'avahi-browse' '_avahi' +'avahi-browse-domains' '_avahi' +'avahi-resolve' '_avahi' +'avahi-resolve-address' '_avahi' +'avahi-resolve-host-name' '_avahi' +'awk' '_awk' +'b2sum' '_md5sum' +'barbican' '_openstack' +'base32' '_base64' +'base64' '_base64' +'basename' '_basename' +'bash' '_bash' +'batch' '_at' +'baz' '_baz' +'beep' '_beep' +'bg' '_jobs_bg' +'bibtex' '_bibtex' +'bindkey' '_bindkey' +'bison' '_bison' +'bitcoin-cli' '_bitcoin-cli' +'bmake' '_make' +'bogofilter' '_bogofilter' +'bogotune' '_bogofilter' +'bogoutil' '_bogofilter' +'bootctl' '_bootctl' +'bower' '_bower' +'bpython' '_bpython' +'bpython2' '_bpython' +'bpython2-gtk' '_bpython' +'bpython2-urwid' '_bpython' +'bpython3' '_bpython' +'bpython3-gtk' '_bpython' +'bpython3-urwid' '_bpython' +'bpython-gtk' '_bpython' +'bpython-urwid' '_bpython' +'-brace-parameter-' '_brace_parameter' +'brctl' '_brctl' +'bsdgrep' '_grep' +'bsdtar' '_tar' +'bspc' '_bspc' +'btdownloadcurses' '_bittorrent' +'btdownloadgui' '_bittorrent' +'btdownloadheadless' '_bittorrent' +'btlaunchmany' '_bittorrent' +'btlaunchmanycurses' '_bittorrent' +'btmakemetafile' '_bittorrent' +'btreannounce' '_bittorrent' +'btrename' '_bittorrent' +'btrfs' '_btrfs' +'btshowmetainfo' '_bittorrent' +'bttrack' '_bittorrent' +'buildhash' '_ispell' +'builtin' '_builtin' +'bundle' '_bundle' +'bunzip2' '_bzip2' +'burst' '_mh' +'busctl' '_busctl' +'bzcat' '_bzip2' +'bzegrep' '_grep' +'bzfgrep' '_grep' +'bzgrep' '_grep' +'bzip2' '_bzip2' +'bzip2recover' '_bzip2' +'bzr' '_bzr' +'c++' '_gcc' +'cabal' '_cabal' +'caffeinate' '_caffeinate' +'cal' '_cal' +'calendar' '_calendar' +'cap' '_cap' +'cask' '_cask' +'cat' '_cat' +'catchsegv' '_precommand' +'cc' '_gcc' +'ccache' '_ccache' +'ccal' '_ccal' +'cd' '_cd' +'cdc' '_sccs' +'cdcd' '_cdcd' +'cdr' '_cdr' +'cdrdao' '_cdrdao' +'cdrecord' '_cdrecord' +'ceilometer' '_openstack' +'certtool' '_gnutls' +'cf' '_cf' +'cftp' '_twisted' +'chage' '_users' +'chattr' '_chattr' +'chcon' '_chcon' +'chdir' '_cd' +'cheat' '_cheat' +'chfn' '_users' +'chgrp' '_chown' +'chimera' '_webbrowser' +'chkconfig' '_chkconfig' +'chkstow' '_stow' +'chmod' '_chmod' +'choc' '_choc' +'chown' '_chown' +'chpass' '_chsh' +'chromium' '_chromium' +'chroot' '_chroot' +'chrt' '_chrt' +'chsh' '_chsh' +'ci' '_rcs' +'cifsiostat' '_sysstat' +'cinder' '_openstack' +'ckeygen' '_twisted' +'cksum' '_cksum' +'clang' '_gcc' +'clang++' '_gcc' +'clay' '_clay' +'clear' '_nothing' +'cloudkitty' '_openstack' +'clusterdb' '_postgresql' +'cmake' '_cmake' +'cmp' '_cmp' +'co' '_rcs' +'code' '_code' +'coffee' '_coffee' +'column' '_column' +'comb' '_sccs' +'combine' '_imagemagick' +'combinediff' '_patchutils' +'comm' '_comm' +'-command-' '_autocd' +'command' '_command' +'-command-line-' '_normal' +'comp' '_mh' +'compadd' '_compadd' +'compdef' '_compdef' +'composer' '_composer' +'composite' '_imagemagick' +'compress' '_compress' +'conan' '_conan' +'conch' '_twisted' +'concourse' '_concourse' +'-condition-' '_condition' +'config.status' '_configure' +'configure' '_configure' +'console' '_console' +'convert' '_imagemagick' +'coredumpctl' '_coredumpctl' +'cowsay' '_cowsay' +'cowthink' '_cowsay' +'cp' '_cp' +'cpio' '_cpio' +'cplay' '_cplay' +'cppcheck' '_cppcheck' +'cpupower' '_cpupower' +'createdb' '_pgsql_utils' +'createuser' '_pgsql_utils' +'crontab' '_crontab' +'crsh' '_cssh' +'cryptsetup' '_cryptsetup' +'cscope' '_cscope' +'csh' '_sh' +'cssh' '_cssh' +'curl' '_curl' +'cut' '_cut' +'cvs' '_cvs' +'dad' '_dad' +'darcs' '_darcs' +'dash' '_sh' +'date' '_date' +'dbus-launch' '_dbus' +'dbus-monitor' '_dbus' +'dbus-send' '_dbus' +'dconf' '_dconf' +'dcop' '_dcop' +'dcopclient' '_dcop' +'dcopfind' '_dcop' +'dcopobject' '_dcop' +'dcopref' '_dcop' +'dcopstart' '_dcop' +'dd' '_dd' +'debuild' '_debuild' +'declare' '_typeset' +'-default-' '_default' +'delta' '_sccs' +'designate' '_openstack' +'devtodo' '_devtodo' +'df' '_df' +'dget' '_dget' +'dhclient' '_dhclient' +'dhclient3' '_dhclient' +'dhcpcd' '_dhcpcd' +'diana' '_diana' +'dict' '_dict' +'diff' '_diff' +'diff3' '_diff3' +'diffstat' '_diffstat' +'dig' '_dig' +'dillo' '_webbrowser' +'dircmp' '_directories' +'dirs' '_dirs' +'disable' '_disable' +'disown' '_jobs_fg' +'display' '_imagemagick' +'dist' '_mh' +'django-admin' '_django' +'django-admin.py' '_django' +'dkms' '_dkms' +'dmake' '_make' +'dmesg' '_dmesg' +'dmidecode' '_dmidecode' +'doas' '_doas' +'docpad' '_docpad' +'domainname' '_yp' +'dos2unix' '_dos2unix' +'drill' '_drill' +'dropdb' '_pgsql_utils' +'dropuser' '_pgsql_utils' +'drush' '_drush' +'dsh' '_dsh' +'dtruss' '_dtruss' +'du' '_du' +'dvibook' '_dvi' +'dviconcat' '_dvi' +'dvicopy' '_dvi' +'dvidvi' '_dvi' +'dvipdf' '_dvi' +'dvips' '_dvi' +'dviselect' '_dvi' +'dvitodvi' '_dvi' +'dvitype' '_dvi' +'dwb' '_webbrowser' +'e2label' '_e2label' +'eatmydata' '_precommand' +'ecasound' '_ecasound' +'ecdsautil' '_ecdsautil' +'echotc' '_echotc' +'echoti' '_echoti' +'ed' '_ed' +'egrep' '_grep' +'elfdump' '_elfdump' +'elinks' '_elinks' +'emulate' '_emulate' +'emulator' '_emulator' +'enable' '_enable' +'enscript' '_enscript' +'entr' '_entr' +'env' '_env' +'envdir' '_envdir' +'eog' '_eog' +'epdfview' '_pdf' +'epsffit' '_psutils' +'-equal-' '_equal' +'erb' '_ruby' +'espeak' '_espeak' +'etags' '_etags' +'ethtool' '_ethtool' +'eu-nm' '_nm' +'eu-objdump' '_objdump' +'eu-readelf' '_readelf' +'eu-strings' '_strings' +'eval' '_precommand' +'eview' '_vim' +'evim' '_vim' +'evince' '_evince' +'exec' '_exec' +'expand' '_unexpand' +'export' '_typeset' +'exportfs' '_exportfs' +'express' '_webbrowser' +'extcheck' '_java' +'extractres' '_psutils' +'fab' '_fab' +'fail2ban-client' '_fail2ban-client' +'fakeroot' '_fakeroot' +'false' '_nothing' +'fc' '_fc' +'fc-list' '_xft_fonts' +'fc-match' '_xft_fonts' +'feh' '_feh' +'fetchmail' '_fetchmail' +'ffind' '_ffind' +'ffmpeg' '_ffmpeg' +'fg' '_jobs_fg' +'fgrep' '_grep' +'figlet' '_figlet' +'filterdiff' '_patchutils' +'find' '_find' +'findaffix' '_ispell' +'findmnt' '_findmnt' +'finger' '_finger' +'firefox' '_mozilla' +'-first-' '_first' +'fixdlsrps' '_psutils' +'fixfmps' '_psutils' +'fixmacps' '_psutils' +'fixpsditps' '_psutils' +'fixpspps' '_psutils' +'fixscribeps' '_psutils' +'fixtpps' '_psutils' +'fixwfwps' '_psutils' +'fixwpps' '_psutils' +'fixwwps' '_psutils' +'flac' '_flac' +'flameshot' '_flameshot' +'fleetctl' '_fleetctl' +'flex' '_flex' +'flex++' '_flex' +'flipdiff' '_patchutils' +'flist' '_mh' +'flists' '_mh' +'float' '_typeset' +'flutter' '_flutter' +'fly' '_concourse' +'fmt' '_fmt' +'fmttest' '_mh' +'fned' '_zed' +'fnext' '_mh' +'fold' '_fold' +'folder' '_mh' +'folders' '_mh' +'force' '_force' +'fortune' '_fortune' +'forw' '_mh' +'fprev' '_mh' +'free' '_free' +'freebsd-make' '_make' +'freezer' '_openstack' +'fsh' '_fsh' +'ftp' '_hosts' +'functions' '_typeset' +'fuser' '_fuser' +'fusermount' '_fusermount' +'fwhois' '_whois' +'fwupdmgr' '_fwupdmgr' +'g++' '_gcc' +'galeon' '_webbrowser' +'gas' '_gas' +'gawk' '_awk' +'gb2sum' '_md5sum' +'gbase32' '_base64' +'gbase64' '_base64' +'gbasename' '_basename' +'gcat' '_cat' +'gcc' '_gcc' +'gccgo' '_go' +'gchgrp' '_chown' +'gchmod' '_chmod' +'gchown' '_chown' +'gchroot' '_chroot' +'gcksum' '_cksum' +'gcmp' '_cmp' +'gcomm' '_comm' +'gcore' '_gcore' +'gcp' '_cp' +'gcut' '_cut' +'gdate' '_date' +'gdb' '_gdb' +'gdd' '_dd' +'gdf' '_df' +'gdiff' '_diff' +'gdu' '_du' +'geany' '_geany' +'gegrep' '_grep' +'gem' '_gem' +'genisoimage' '_genisoimage' +'genv' '_env' +'get' '_sccs' +'getafm' '_psutils' +'getconf' '_getconf' +'getent' '_getent' +'getfacl' '_getfacl' +'getfacl.exe' '_getfacl' +'getfattr' '_attr' +'getmail' '_getmail' +'getopt' '_getopt' +'getopts' '_vars' +'gex' '_vim' +'gexpand' '_unexpand' +'gfgrep' '_grep' +'gfind' '_find' +'gfmt' '_fmt' +'gfold' '_fold' +'ggetopt' '_getopt' +'ggrep' '_grep' +'ggv' '_gnome-gv' +'ghc' '_ghc' +'ghci' '_ghc' +'ghc-pkg' '_ghc' +'ghead' '_head' +'ghostscript' '_ghostscript' +'ghostview' '_pspdf' +'gid' '_id' +'ginstall' '_install' +'gist' '_gist' +'git' '_git' +'git-cvsserver' '_git' +'git-flow' '_git-flow' +'git-journal' '_git-journal' +'gitk' '_git' +'git-pulls' '_git-pulls' +'git-receive-pack' '_git' +'git-revise' '_git-revise' +'git-shell' '_git' +'git-upload-archive' '_git' +'git-upload-pack' '_git' +'git-wtf' '_git-wtf' +'gjoin' '_join' +'glance' '_openstack' +'glances' '_glances' +'gln' '_ln' +'global' '_global' +'glocate' '_locate' +'gls' '_ls' +'gm' '_graphicsmagick' +'gmake' '_make' +'gmd5sum' '_md5sum' +'gmkdir' '_mkdir' +'gmkfifo' '_mkfifo' +'gmknod' '_mknod' +'gmktemp' '_mktemp' +'gmplayer' '_mplayer' +'gmv' '_mv' +'gnl' '_nl' +'gnocchi' '_openstack' +'gnome-gv' '_gnome-gv' +'gnumfmt' '_numfmt' +'gnupod_addsong' '_gnupod' +'gnupod_addsong.pl' '_gnupod' +'gnupod_check' '_gnupod' +'gnupod_check.pl' '_gnupod' +'gnupod_INIT' '_gnupod' +'gnupod_INIT.pl' '_gnupod' +'gnupod_search' '_gnupod' +'gnupod_search.pl' '_gnupod' +'gnutls-cli' '_gnutls' +'gnutls-cli-debug' '_gnutls' +'gnutls-serv' '_gnutls' +'go' '_golang' +'god' '_od' +'gofmt' '_go' +'google' '_google' +'gpasswd' '_gpasswd' +'gpaste' '_paste' +'gpatch' '_patch' +'gpg' '_gpg' +'gpg2' '_gpg' +'gpgv' '_gpg' +'gpg-zip' '_gpg' +'gphoto2' '_gphoto2' +'gprintenv' '_printenv' +'gprof' '_gprof' +'gqview' '_gqview' +'gradle' '_gradle' +'gradlew' '_gradle' +'grail' '_webbrowser' +'greadlink' '_readlink' +'grep' '_grep' +'grepdiff' '_patchutils' +'grm' '_rm' +'grmdir' '_rmdir' +'groff' '_groff' +'groupadd' '_user_admin' +'groupdel' '_groups' +'groupmod' '_user_admin' +'groups' '_users' +'growisofs' '_growisofs' +'gs' '_ghostscript' +'gsbj' '_pspdf' +'gsdj' '_pspdf' +'gsdj500' '_pspdf' +'gsed' '_sed' +'gseq' '_seq' +'gsettings' '_gsettings' +'gsha1sum' '_md5sum' +'gsha224sum' '_md5sum' +'gsha256sum' '_md5sum' +'gsha384sum' '_md5sum' +'gsha512sum' '_md5sum' +'gshred' '_shred' +'gshuf' '_shuf' +'gslj' '_pspdf' +'gslp' '_pspdf' +'gsnd' '_pspdf' +'gsort' '_sort' +'gsplit' '_split' +'gstat' '_stat' +'gstdbuf' '_stdbuf' +'gstrings' '_strings' +'gstty' '_stty' +'gsum' '_cksum' +'gtac' '_tac' +'gtail' '_tail' +'gtar' '_tar' +'gtee' '_tee' +'gtimeout' '_timeout' +'gtk-launch' '_gtk-launch' +'gtouch' '_touch' +'gtr' '_tr' +'gtty' '_tty' +'guilt' '_guilt' +'guilt-add' '_guilt' +'guilt-applied' '_guilt' +'guilt-delete' '_guilt' +'guilt-files' '_guilt' +'guilt-fold' '_guilt' +'guilt-fork' '_guilt' +'guilt-header' '_guilt' +'guilt-help' '_guilt' +'guilt-import' '_guilt' +'guilt-import-commit' '_guilt' +'guilt-init' '_guilt' +'guilt-new' '_guilt' +'guilt-next' '_guilt' +'guilt-patchbomb' '_guilt' +'guilt-pop' '_guilt' +'guilt-prev' '_guilt' +'guilt-push' '_guilt' +'guilt-rebase' '_guilt' +'guilt-refresh' '_guilt' +'guilt-rm' '_guilt' +'guilt-series' '_guilt' +'guilt-status' '_guilt' +'guilt-top' '_guilt' +'guilt-unapplied' '_guilt' +'guname' '_uname' +'gunexpand' '_unexpand' +'guniq' '_uniq' +'gunzip' '_gzip' +'guptime' '_uptime' +'gv' '_gv' +'gview' '_vim' +'gvim' '_vim' +'gvimdiff' '_vim' +'gwc' '_wc' +'gwho' '_who' +'gxargs' '_xargs' +'gzcat' '_gzip' +'gzegrep' '_grep' +'gzfgrep' '_grep' +'gzgrep' '_grep' +'gzilla' '_webbrowser' +'gzip' '_gzip' +'hash' '_hash' +'hd' '_hexdump' +'head' '_head' +'heat' '_openstack' +'help' '_sccs' +'hexdump' '_hexdump' +'hilite' '_precommand' +'history' '_fc' +'hledger' '_hledger' +'homestead' '_homestead' +'host' '_host' +'hostname' '_hostname' +'hostnamectl' '_hostnamectl' +'hotjava' '_webbrowser' +'htop' '_htop' +'http' '_httpie' +'ibus' '_ibus' +'iceweasel' '_mozilla' +'icombine' '_ispell' +'iconv' '_iconv' +'iconvconfig' '_iconvconfig' +'id' '_id' +'identify' '_imagemagick' +'ifconfig' '_ifconfig' +'ifdown' '_net_interfaces' +'iftop' '_iftop' +'ifup' '_net_interfaces' +'ijoin' '_ispell' +'import' '_imagemagick' +'inc' '_mh' +'includeres' '_psutils' +'include-what-you-use' '_include-what-you-use' +'info' '_texinfo' +'infocmp' '_terminals' +'initctl' '_initctl' +'initdb' '_pgsql_utils' +'insmod' '_modutils' +'install' '_install' +'install-info' '_texinfo' +'integer' '_typeset' +'interdiff' '_patchutils' +'inxi' '_inxi' +'ionice' '_ionice' +'iostat' '_iostat' +'ip' '_ip' +'ip6tables' '_iptables' +'ip6tables-restore' '_iptables' +'ip6tables-save' '_iptables' +'ipkg' '_opkg' +'ipsec' '_ipsec' +'ipset' '_ipset' +'iptables' '_iptables' +'iptables-restore' '_iptables' +'iptables-save' '_iptables' +'irb' '_ruby' +'ironic' '_openstack' +'irssi' '_irssi' +'isag' '_sysstat' +'ispell' '_ispell' +'iwconfig' '_iwconfig' +'jadetex' '_tex' +'jar' '_java' +'jarsigner' '_java' +'java' '_java' +'javac' '_java' +'javadoc' '_java' +'javah' '_java' +'javap' '_java' +'jdb' '_java' +'jmeter' '_jmeter' +'jmeter-plugins' '_jmeter-plugins' +'jobs' '_jobs_builtin' +'joe' '_joe' +'join' '_join' +'jonas' '_jonas' +'journalctl' '_journalctl' +'jq' '_jq' +'jrnl' '_jrnl' +'kak' '_kak' +'kdeconnect-cli' '_kdeconnect' +'kernel-install' '_kernel-install' +'keystone' '_openstack' +'keytool' '_java' +'kfmclient' '_kfmclient' +'kill' '_kill' +'killall' '_killall' +'killall5' '_killall' +'kioclient' '_kfmclient' +'kitchen' '_kitchen' +'knife' '_knife' +'knock' '_knock' +'konqueror' '_webbrowser' +'kpartx' '_kpartx' +'kpdf' '_pdf' +'ksh' '_sh' +'ksh88' '_sh' +'ksh93' '_sh' +'kvno' '_kvno' +'last' '_last' +'lastb' '_last' +'latex' '_tex' +'latexmk' '_tex' +'ldconfig' '_ldconfig' +'ldconfig.real' '_ldconfig' +'ldd' '_ldd' +'less' '_less' +'let' '_math' +'lftp' '_ncftp' +'lha' '_lha' +'libinput' '_libinput' +'light' '_webbrowser' +'limit' '_limit' +'links' '_links' +'links2' '_links' +'linux' '_uml' +'lldb' '_lldb' +'llvm-g++' '_gcc' +'llvm-gcc' '_gcc' +'llvm-objdump' '_objdump' +'ln' '_ln' +'loadkeys' '_loadkeys' +'local' '_typeset' +'locale' '_locale' +'localectl' '_localectl' +'localedef' '_localedef' +'locate' '_locate' +'log' '_nothing' +'loginctl' '_loginctl' +'logname' '_nothing' +'look' '_look' +'losetup' '_losetup' +'lp' '_lp' +'lpadmin' '_lp' +'lpinfo' '_lp' +'lpoptions' '_lp' +'lpq' '_lp' +'lpr' '_lp' +'lprm' '_lp' +'lpstat' '_lp' +'ls' '_ls' +'lsattr' '_lsattr' +'lsblk' '_lsblk' +'lsdiff' '_patchutils' +'lsinitcpio' '_mkinitcpio' +'lsmod' '_modutils' +'lsof' '_lsof' +'lsusb' '_lsusb' +'ltrace' '_ltrace' +'lua' '_lua' +'luarocks' '_luarocks' +'lunchy' '_lunchy' +'lynx' '_lynx' +'lz4' '_lz4' +'lz4c' '_lz4' +'lz4c32' '_lz4' +'lz4cat' '_lz4' +'lzcat' '_xz' +'lzma' '_xz' +'lzop' '_lzop' +'mac2unix' '_dos2unix' +'machinectl' '_machinectl' +'magnum' '_openstack' +'mail' '_mail' +'Mail' '_mail' +'mailx' '_mail' +'make' '_make' +'makeinfo' '_texinfo' +'makepkg' '_pacman' +'man' '_man' +'manage.py' '_django' +'manila' '_openstack' +'mark' '_mh' +'-math-' '_math' +'matlab' '_matlab' +'mattrib' '_mtools' +'mc' '_mc' +'mcd' '_mtools' +'mcopy' '_mtools' +'md2' '_cksum' +'md4' '_cksum' +'md5' '_cksum' +'md5sum' '_md5sum' +'mdadm' '_mdadm' +'mdel' '_mtools' +'mdeltree' '_mtools' +'mdir' '_mtools' +'mdu' '_mtools' +'mencal' '_mencal' +'mere' '_mere' +'merge' '_rcs' +'metaflac' '_flac' +'mformat' '_mtools' +'mgv' '_pspdf' +'mhfixmsg' '_mh' +'mhlist' '_mh' +'mhmail' '_mh' +'mhn' '_mh' +'mhparam' '_mh' +'mhpath' '_mh' +'mhshow' '_mh' +'mhstore' '_mh' +'middleman' '_middleman' +'mii-tool' '_mii-tool' +'mina' '_mina' +'mistral' '_openstack' +'mix' '_mix' +'mkdir' '_mkdir' +'mkfifo' '_mkfifo' +'mkinitcpio' '_mkinitcpio' +'mkisofs' '_growisofs' +'mknod' '_mknod' +'mksh' '_sh' +'mktemp' '_mktemp' +'mktunes' '_gnupod' +'mktunes.pl' '_gnupod' +'mlabel' '_mtools' +'mlocate' '_locate' +'mmd' '_mtools' +'mmm' '_webbrowser' +'mmount' '_mtools' +'mmove' '_mtools' +'modinfo' '_modutils' +'modprobe' '_modutils' +'module' '_module' +'mogrify' '_imagemagick' +'monasca' '_openstack' +'mondoarchive' '_mondo' +'montage' '_imagemagick' +'moosic' '_moosic' +'Mosaic' '_webbrowser' +'mosh' '_mosh' +'mount' '_mount' +'mozilla' '_mozilla' +'mozilla-firefox' '_mozilla' +'mozilla-xremote-client' '_mozilla' +'mpc' '_mpc' +'mplayer' '_mplayer' +'mpstat' '_sysstat' +'mpv' '_mpv' +'mr' '_myrepos' +'mrd' '_mtools' +'mread' '_mtools' +'mren' '_mtools' +'msgchk' '_mh' +'mt' '_mt' +'mtn' '_monotone' +'mtoolstest' '_mtools' +'mtr' '_mtr' +'mtype' '_mtools' +'munchlist' '_ispell' +'mupdf' '_mupdf' +'murano' '_openstack' +'mush' '_mail' +'mussh' '_mussh' +'mutt' '_mutt' +'mux' '_tmuxinator' +'mv' '_mv' +'mvim' '_vim' +'mvn' '_mvn' +'mvnDebug' '_mvn' +'mx' '_hosts' +'mysql' '_mysql_utils' +'mysqladmin' '_mysql_utils' +'mysqldiff' '_mysqldiff' +'mysqldump' '_mysql_utils' +'mysqlimport' '_mysql_utils' +'mysqlshow' '_mysql_utils' +'nail' '_mail' +'nano' '_nano' +'native2ascii' '_java' +'nautilus' '_nautilus' +'nawk' '_awk' +'nc' '_netcat' +'ncal' '_cal' +'ncftp' '_ncftp' +'ncl' '_nedit' +'nedit' '_nedit' +'nedit-nc' '_nedit' +'netcat' '_netcat' +'netrik' '_webbrowser' +'netscape' '_netscape' +'netstat' '_netstat' +'networkctl' '_networkctl' +'neutron' '_openstack' +'new' '_mh' +'newgrp' '_groups' +'next' '_mh' +'nft' '_nftables' +'nginx' '_nginx' +'ngrep' '_ngrep' +'nice' '_nice' +'nkf' '_nkf' +'nl' '_nl' +'nm' '_nm' +'nmap' '_nmap' +'nmblookup' '_samba' +'nmcli' '_networkmanager' +'nnn' '_nnn' +'nocorrect' '_precommand' +'node' '_node' +'noglob' '_precommand' +'nohup' '_precommand' +'notmuch' '_notmuch' +'nova' '_openstack' +'npm' '_npm' +'ns' '_hosts' +'nslookup' '_nslookup' +'ntalk' '_other_accounts' +'numfmt' '_numfmt' +'nvim' '_vim' +'nvm' '_nvm' +'objdump' '_objdump' +'od' '_od' +'ogg123' '_vorbis' +'oggdec' '_vorbis' +'oggenc' '_vorbis' +'ogginfo' '_vorbis' +'oksh' '_sh' +'okular' '_okular' +'openssl' '_openssl' +'openstack' '_openstack' +'opera' '_webbrowser' +'opera-next' '_webbrowser' +'opkg' '_opkg' +'optirun' '_optirun' +'p4' '_perforce' +'p4d' '_perforce' +'pacat' '_pulseaudio' +'pack' '_pack' +'packf' '_mh' +'pacman' '_pacman' +'pacman-key' '_pacman' +'pacman.static' '_pacman' +'pacmd' '_pulseaudio' +'pactl' '_pulseaudio' +'padsp' '_pulseaudio' +'pandoc' '_pandoc' +'paplay' '_pulseaudio' +'-parameter-' '_parameter' +'parec' '_pulseaudio' +'parecord' '_pulseaudio' +'pass' '_pass' +'passwd' '_users' +'paste' '_paste' +'pasuspender' '_pulseaudio' +'patch' '_patch' +'patool' '_patool' +'pax' '_pax' +'pcat' '_pack' +'pcred' '_pids' +'pdf2dsc' '_pdf' +'pdf2ps' '_pdf' +'pdffonts' '_pdf' +'pdfimages' '_pdf' +'pdfinfo' '_pdf' +'pdfjadetex' '_tex' +'pdflatex' '_tex' +'pdfopt' '_pdf' +'pdftex' '_tex' +'pdftexi2dvi' '_texinfo' +'pdftk' '_pdftk' +'pdftopbm' '_pdf' +'pdftops' '_pdf' +'pdftotext' '_pdf' +'pdksh' '_sh' +'perf' '_perf' +'periscope' '_periscope' +'perl' '_perl' +'perldoc' '_perldoc' +'pfiles' '_pids' +'pflags' '_pids' +'pg_config' '_postgresql' +'pg_ctl' '_postgresql' +'pg_dump' '_pgsql_utils' +'pg_dumpall' '_pgsql_utils' +'pg_isready' '_postgresql' +'pgrep' '_pgrep' +'pg_restore' '_pgsql_utils' +'pg_upgrade' '_postgresql' +'phing' '_phing' +'php' '_php' +'pick' '_mh' +'picocom' '_picocom' +'pidof' '_pidof' +'pidstat' '_sysstat' +'pigz' '_gzip' +'pine' '_pine' +'pinef' '_pine' +'pinfo' '_texinfo' +'ping' '_ping' +'ping6' '_ping' +'pixz' '_pixz' +'pkcon' '_pkcon' +'pkgadd' '_pkgadd' +'pkg-config' '_pkg-config' +'pkgfile' '_pkgfile' +'pkginfo' '_pkginfo' +'pkgrm' '_pkgrm' +'pkill' '_pgrep' +'play' '_play' +'pldd' '_pids' +'pm2' '_pm2' +'pmake' '_make' +'pman' '_perl_modules' +'pmap' '_pmap' +'pmcat' '_perl_modules' +'pmdesc' '_perl_modules' +'pmeth' '_perl_modules' +'pmexp' '_perl_modules' +'pmfunc' '_perl_modules' +'pmload' '_perl_modules' +'pmls' '_perl_modules' +'pmpath' '_perl_modules' +'pmvers' '_perl_modules' +'podgrep' '_perl_modules' +'podpath' '_perl_modules' +'podtoc' '_perl_modules' +'poff' '_pon' +'policytool' '_java' +'polybar' '_polybar' +'polybar-msg' '_polybar_msg' +'pon' '_pon' +'popd' '_directory_stack' +'port' '_port' +'postconf' '_postfix' +'postgres' '_postgresql' +'postmaster' '_postgresql' +'postqueue' '_postfix' +'postsuper' '_postfix' +'prev' '_mh' +'print' '_print' +'printenv' '_printenv' +'printf' '_print' +'prompt' '_prompt' +'protoc' '_protoc' +'prove' '_prove' +'prs' '_sccs' +'prt' '_sccs' +'prun' '_pids' +'ps' '_ps' +'ps2ascii' '_pspdf' +'ps2epsi' '_postscript' +'ps2pdf' '_postscript' +'ps2pdf12' '_postscript' +'ps2pdf13' '_postscript' +'ps2pdf14' '_postscript' +'ps2pdfwr' '_postscript' +'ps2ps' '_postscript' +'psbook' '_psutils' +'psed' '_sed' +'psig' '_pids' +'psmerge' '_psutils' +'psmulti' '_postscript' +'psnup' '_psutils' +'psql' '_pgsql_utils' +'psresize' '_psutils' +'psselect' '_psutils' +'pstack' '_pids' +'pstoedit' '_pspdf' +'pstop' '_pids' +'pstops' '_psutils' +'pstotgif' '_pspdf' +'pswrap' '_postscript' +'pulseaudio' '_pulseaudio' +'pump' '_pump' +'pushd' '_cd' +'pv' '_pv' +'pwait' '_pids' +'pwdx' '_pids' +'pwgen' '_pwgen' +'pygmentize' '_pygmentize' +'pyhtmlizer' '_twisted' +'qdbus' '_qdbus' +'qiv' '_qiv' +'qpdf' '_qpdf' +'quilt' '_quilt' +'r' '_fc' +'rails' '_rails' +'rake' '_rake' +'ralio' '_ralio' +'ranlib' '_ranlib' +'rar' '_rar' +'rc' '_sh' +'_rclone' '_rclone' +'rclone' '_rclone' +'rcp' '_rlogin' +'rcs' '_rcs' +'rcsdiff' '_rcs' +'rdesktop' '_rdesktop' +'read' '_read' +'readelf' '_readelf' +'readlink' '_readlink' +'readonly' '_typeset' +'rec' '_redis-cli' +'-redirect-' '_redirect' +'-redirect-,<,bunzip2' '_bzip2' +'-redirect-,<,bzip2' '_bzip2' +'-redirect-,>,bzip2' '_bzip2' +'-redirect-,<,compress' '_compress' +'-redirect-,>,compress' '_compress' +'-redirect-,-default-,-default-' '_files' +'-redirect-,<,gunzip' '_gzip' +'-redirect-,<,gzip' '_gzip' +'-redirect-,>,gzip' '_gzip' +'-redirect-,<,uncompress' '_compress' +'-redirect-,<,unxz' '_xz' +'-redirect-,<,xz' '_xz' +'-redirect-,>,xz' '_xz' +'redis-cli' '_redis-cli' +'refile' '_mh' +'rehash' '_hash' +'reindexdb' '_postgresql' +'reload' '_initctl' +'remsh' '_rlogin' +'renice' '_renice' +'repl' '_mh' +'resolvectl' '_resolvectl' +'restart' '_initctl' +'retawq' '_webbrowser' +'rfkill' '_rfkill' +'rg' '_rg' +'rgview' '_vim' +'rgvim' '_vim' +'ri' '_ri' +'rkt' '_rkt' +'rlogin' '_rlogin' +'rm' '_rm' +'rmd160' '_cksum' +'rmdel' '_sccs' +'rmdir' '_rmdir' +'rmf' '_mh' +'rmic' '_java' +'rmid' '_java' +'rmiregistry' '_java' +'rmm' '_mh' +'rmmod' '_modutils' +'route' '_route' +'rrdtool' '_rrdtool' +'rsh' '_rlogin' +'rslsync' '_rslsync' +'rspec' '_rspec' +'rsvm' '_rsvm' +'rsync' '_rsync' +'rtin' '_tin' +'rubber' '_rubber' +'rubber-info' '_rubber' +'rubber-pipe' '_rubber' +'rubocop' '_rubocop' +'ruby' '_ruby' +'ruby-mri' '_ruby' +'run-help' '_run-help' +'rup' '_hosts' +'rusage' '_precommand' +'rview' '_vim' +'rvim' '_vim' +'rwho' '_hosts' +'rxvt' '_urxvt' +'s2p' '_sed' +'sact' '_sccs' +'sadf' '_sysstat' +'sahara' '_openstack' +'sar' '_sysstat' +'sbt' '_sbt' +'scala' '_scala' +'scalac' '_scala' +'scan' '_mh' +'sccs' '_sccs' +'sccsdiff' '_sccs' +'sched' '_sched' +'schedtool' '_schedtool' +'scons' '_scons' +'scp' '_ssh' +'screen' '_screen' +'script' '_script' +'scriptreplay' '_script' +'scrub' '_scrub' +'sdd' '_sdd' +'seaf-cli' '_seafile' +'sed' '_sed' +'senlin' '_openstack' +'seq' '_seq' +'serialver' '_java' +'service' '_service' +'set' '_set' +'setcap' '_setcap' +'setfacl' '_setfacl' +'setfacl.exe' '_setfacl' +'setfattr' '_attr' +'setopt' '_setopt' +'setsid' '_setsid' +'setup.py' '_setup.py' +'setxkbmap' '_setxkbmap' +'sfdx' '_sfdx' +'sftp' '_ssh' +'sh' '_sh' +'sha1' '_cksum' +'sha1sum' '_md5sum' +'sha224sum' '_md5sum' +'sha256' '_cksum' +'sha256sum' '_md5sum' +'sha384' '_cksum' +'sha384sum' '_md5sum' +'sha512' '_cksum' +'sha512sum' '_md5sum' +'sha512t256' '_cksum' +'shasum' '_shasum' +'shell-script' '_bootctl' +'shift' '_arrays' +'show' '_mh' +'showchar' '_psutils' +'showmount' '_showmount' +'showoff' '_showoff' +'shred' '_shred' +'shuf' '_shuf' +'shutdown' '_shutdown' +'sisu' '_sisu' +'skein1024' '_cksum' +'skein256' '_cksum' +'skein512' '_cksum' +'skipstone' '_webbrowser' +'slabtop' '_slabtop' +'slitex' '_tex' +'slocate' '_locate' +'slogin' '_ssh' +'slrn' '_slrn' +'smartctl' '_smartmontools' +'smbclient' '_samba' +'smbcontrol' '_samba' +'smbstatus' '_samba' +'soa' '_hosts' +'socket' '_socket' +'sort' '_sort' +'sortm' '_mh' +'source' '_source' +'spamassassin' '_spamassassin' +'split' '_split' +'splitdiff' '_patchutils' +'sqlite' '_sqlite' +'sqlite3' '_sqlite' +'sqsh' '_sqsh' +'sr' '_surfraw' +'srm' '_srm' +'srptool' '_gnutls' +'ss' '_ss' +'ssh' '_ssh' +'ssh-add' '_ssh' +'ssh-agent' '_ssh' +'ssh-copy-id' '_ssh' +'sshfs' '_sshfs' +'ssh-keygen' '_ssh' +'ssh-keyscan' '_ssh' +'stack' '_stack' +'star' '_tar' +'start' '_initctl' +'stat' '_stat' +'status' '_initctl' +'stdbuf' '_stdbuf' +'stg' '_stgit' +'stop' '_initctl' +'stow' '_stow' +'strace' '_strace' +'strace64' '_strace' +'strftime' '_strftime' +'strings' '_strings' +'strip' '_strip' +'strongswan' '_ipsec' +'stty' '_stty' +'su' '_su' +'subl' '_subl' +'subliminal' '_subliminal' +'-subscript-' '_subscript' +'sudo' '_sudo' +'sudoedit' '_sudo' +'sum' '_cksum' +'supervisorctl' '_supervisorctl' +'surfraw' '_surfraw' +'sv' '_runit' +'svm' '_svm' +'svn' '_subversion' +'svnadmin' '_subversion' +'svnadmin-static' '_subversion' +'svnlite' '_subversion' +'swaks' '_swaks' +'swanctl' '_swanctl' +'swift' '_swift' +'swiftc' '_swift' +'sync' '_nothing' +'sysctl' '_sysctl' +'systemctl' '_systemctl' +'systemd-analyze' '_systemd-analyze' +'systemd-ask-password' '_systemd' +'systemd-cat' '_systemd' +'systemd-cgls' '_systemd' +'systemd-cgtop' '_systemd' +'systemd-delta' '_systemd-delta' +'systemd-detect-virt' '_systemd' +'systemd-inhibit' '_systemd-inhibit' +'systemd-machine-id-setup' '_systemd' +'systemd-notify' '_systemd' +'systemd-nspawn' '_systemd-nspawn' +'systemd-resolve' '_resolvectl' +'systemd-run' '_systemd-run' +'systemd-tmpfiles' '_systemd-tmpfiles' +'systemd-tty-ask-password-agent' '_systemd' +'tac' '_tac' +'tacker' '_openstack' +'tail' '_tail' +'talk' '_other_accounts' +'tar' '_tar' +'tardy' '_tardy' +'tarsnap' '_tarsnap' +'tcpdump' '_tcpdump' +'tcp_open' '_tcpsys' +'tcptraceroute' '_tcptraceroute' +'tcsh' '_sh' +'tda' '_devtodo' +'tdd' '_devtodo' +'tde' '_devtodo' +'tdr' '_devtodo' +'teamocil' '_teamocil' +'tee' '_tee' +'telnet' '_telnet' +'tex' '_tex' +'texi2any' '_texinfo' +'texi2dvi' '_texinfo' +'texi2pdf' '_texinfo' +'texindex' '_texinfo' +'tg' '_topgit' +'thor' '_thor' +'tidy' '_tidy' +'tig' '_git' +'-tilde-' '_tilde' +'time' '_precommand' +'timedatectl' '_timedatectl' +'timeout' '_timeout' +'times' '_nothing' +'tin' '_tin' +'tkconch' '_twisted' +'tkinfo' '_texinfo' +'tla' '_tla' +'tload' '_tload' +'tmux' '_tmux' +'tmuxinator' '_tmuxinator' +'tmuxp' '_tmuxp' +'todo' '_devtodo' +'todo.sh' '_todo.sh' +'toilet' '_toilet' +'top' '_top' +'totdconfig' '_totd' +'touch' '_touch' +'tox' '_tox' +'tpb' '_tpb' +'tput' '_tput' +'tr' '_tr' +'tracepath' '_tracepath' +'tracepath6' '_tracepath' +'traceroute' '_hosts' +'transmission-remote' '_transmission' +'trap' '_trap' +'trash' '_trash-put' +'trash-empty' '_trash-empty' +'trash-list' '_trash-list' +'trash-put' '_trash-put' +'trash-restore' '_trash-restore' +'tree' '_tree' +'trial' '_twisted' +'trove' '_openstack' +'true' '_nothing' +'truss' '_truss' +'tryaffix' '_ispell' +'tty' '_tty' +'ttyctl' '_ttyctl' +'tunctl' '_uml' +'tune2fs' '_tune2fs' +'tunes2pod' '_gnupod' +'tunes2pod.pl' '_gnupod' +'twidge' '_twidge' +'twist' '_twisted' +'twistd' '_twisted' +'txt' '_hosts' +'type' '_which' +'typeset' '_typeset' +'udevadm' '_udevadm' +'udisksctl' '_udisksctl' +'ufw' '_ufw' +'ulimit' '_ulimit' +'uml_mconsole' '_uml' +'uml_moo' '_uml' +'uml_switch' '_uml' +'umount' '_mount' +'unace' '_unace' +'unalias' '_aliases' +'uname' '_uname' +'uncompress' '_compress' +'unexpand' '_unexpand' +'unfunction' '_functions' +'unget' '_sccs' +'unhash' '_unhash' +'uniq' '_uniq' +'unison' '_unison' +'units' '_units' +'unix2dos' '_dos2unix' +'unix2mac' '_dos2unix' +'unlimit' '_limits' +'unlz4' '_lz4' +'unlzma' '_xz' +'unpack' '_pack' +'unpigz' '_gzip' +'unrar' '_rar' +'unset' '_vars' +'unsetopt' '_setopt' +'unwrapdiff' '_patchutils' +'unxz' '_xz' +'unzip' '_zip' +'uptime' '_uptime' +'urxvt' '_urxvt' +'urxvt256c' '_urxvt' +'urxvt256cc' '_urxvt' +'urxvt256c-ml' '_urxvt' +'urxvt256c-mlc' '_urxvt' +'urxvtc' '_urxvt' +'useradd' '_user_admin' +'userdel' '_users' +'usermod' '_user_admin' +'vacuumdb' '_pgsql_utils' +'vagrant' '_vagrant' +'val' '_sccs' +'valgrind' '_valgrind' +'-value-' '_value' +'-value-,ADB_TRACE,-default-' '_adb' +'-value-,ANDROID_LOG_TAGS,-default-' '_adb' +'-value-,ANDROID_SERIAL,-default-' '_adb' +'-value-,ANSIBLE_STDOUT_CALLBACK,-default-' '_ansible' +'-value-,ANT_ARGS,-default-' '_ant' +'-value-,CFLAGS,-default-' '_gcc' +'-value-,CMAKE_GENERATOR,-default-' '_cmake' +'-value-,CPPFLAGS,-default-' '_gcc' +'-value-,CXXFLAGS,-default-' '_gcc' +'-value-,-default-,-command-' '_zargs' +'-value-,-default-,-default-' '_value' +'-value-,DISPLAY,-default-' '_x_display' +'-value-,GREP_OPTIONS,-default-' '_grep' +'-value-,GZIP,-default-' '_gzip' +'-value-,LANG,-default-' '_locales' +'-value-,LANGUAGE,-default-' '_locales' +'-value-,LD_DEBUG,-default-' '_ld_debug' +'-value-,LDFLAGS,-default-' '_gcc' +'-value-,LESSCHARSET,-default-' '_less' +'-value-,LESS,-default-' '_less' +'-value-,LOOPDEV_DEBUG,-default-' '_losetup' +'-value-,LPDEST,-default-' '_printers' +'-value-,MPD_HOST,-default' '_mpc' +'-value-,P4CLIENT,-default-' '_perforce' +'-value-,P4MERGE,-default-' '_perforce' +'-value-,P4PORT,-default-' '_perforce' +'-value-,P4USER,-default-' '_perforce' +'-value-,PERLDOC,-default-' '_perldoc' +'-value-,PRINTER,-default-' '_printers' +'-value-,PROMPT2,-default-' '_ps1234' +'-value-,PROMPT3,-default-' '_ps1234' +'-value-,PROMPT4,-default-' '_ps1234' +'-value-,PROMPT,-default-' '_ps1234' +'-value-,PS1,-default-' '_ps1234' +'-value-,PS2,-default-' '_ps1234' +'-value-,PS3,-default-' '_ps1234' +'-value-,PS4,-default-' '_ps1234' +'-value-,RPROMPT2,-default-' '_ps1234' +'-value-,RPROMPT,-default-' '_ps1234' +'-value-,RPS1,-default-' '_ps1234' +'-value-,RPS2,-default-' '_ps1234' +'-value-,SPROMPT,-default-' '_ps1234' +'-value-,TERM,-default-' '_terminals' +'-value-,TERMINFO_DIRS,-default-' '_dir_list' +'-value-,TZ,-default-' '_time_zone' +'-value-,VALGRIND_OPTS,-default-' '_valgrind' +'-value-,WWW_HOME,-default-' '_urls' +'-value-,XML_CATALOG_FILES,-default-' '_xmlsoft' +'-value-,XZ_DEFAULTS,-default-' '_xz' +'-value-,XZ_OPT,-default-' '_xz' +'-vared-' '_in_vared' +'vared' '_vared' +'VBoxHeadless' '_virtualbox' +'VBoxManage' '_virtualbox' +'vcsh' '_vcsh' +'vifm' '_vifm' +'vim' '_vim' +'vimdiff' '_vim' +'virsh' '_libvirt' +'virt-admin' '_libvirt' +'virt-host-validate' '_libvirt' +'virt-pki-validate' '_libvirt' +'virt-xml-validate' '_libvirt' +'visudo' '_visudo' +'vitrage' '_openstack' +'vmstat' '_vmstat' +'vncserver' '_vnc' +'vncviewer' '_vnc' +'vnstat' '_vnstat' +'vorbiscomment' '_vorbis' +'vpnc' '_vpnc' +'vpnc-connect' '_vpnc' +'vserver' '_vserver' +'w' '_w' +'w3m' '_w3m' +'wait' '_wait' +'watch' '_watch' +'watcher' '_openstack' +'wc' '_wc' +'wemux' '_wemux' +'wget' '_wget' +'wg-quick' '_wg-quick' +'what' '_sccs' +'whatis' '_man' +'whence' '_which' +'where' '_which' +'whereis' '_whereis' +'which' '_which' +'who' '_who' +'whoami' '_nothing' +'whois' '_whois' +'whom' '_mh' +'wiggle' '_wiggle' +'wipefs' '_wipefs' +'wodim' '_cdrecord' +'wpa_cli' '_wpa_cli' +'write' '_users_on' +'www' '_webbrowser' +'xargs' '_xargs' +'xattr' '_attr' +'xauth' '_xauth' +'xautolock' '_xautolock' +'xclip' '_xclip' +'xdpyinfo' '_x_utils' +'xdvi' '_xdvi' +'xelatex' '_tex' +'xetex' '_tex' +'xev' '_x_utils' +'xfd' '_x_utils' +'xfig' '_xfig' +'xfontsel' '_x_utils' +'xfreerdp' '_rdesktop' +'xhost' '_x_utils' +'xinput' '_xinput' +'xkill' '_x_utils' +'xli' '_xloadimage' +'xloadimage' '_xloadimage' +'xlsatoms' '_x_utils' +'xlsclients' '_x_utils' +'xml' '_xmlstarlet' +'xmllint' '_xmlsoft' +'xmlstarlet' '_xmlstarlet' +'xmms2' '_xmms2' +'xmodmap' '_xmodmap' +'xmosaic' '_webbrowser' +'xon' '_x_utils' +'xournal' '_xournal' +'xpdf' '_xpdf' +'xping' '_hosts' +'xprop' '_x_utils' +'xrandr' '_xrandr' +'xrdb' '_x_utils' +'xscreensaver-command' '_xscreensaver' +'xsel' '_xsel' +'xset' '_xset' +'xsetbg' '_xloadimage' +'xsetroot' '_x_utils' +'xsltproc' '_xmlsoft' +'xterm' '_xterm' +'xtightvncviewer' '_vnc' +'xtp' '_imagemagick' +'xv' '_xv' +'xview' '_xloadimage' +'xvnc4viewer' '_vnc' +'xvncviewer' '_vnc' +'xwallpaper' '_xwallpaper' +'xwd' '_x_utils' +'xwininfo' '_x_utils' +'xwit' '_xwit' +'xwud' '_x_utils' +'xxd' '_xxd' +'xz' '_xz' +'xzcat' '_xz' +'yafc' '_yafc' +'yaourt' '_yaourt' +'yaourt.static' '_yaourt' +'yarn' '_yarn' +'yash' '_sh' +'yay' '_yay' +'youtube-dl' '_youtube-dl' +'ypbind' '_yp' +'ypcat' '_yp' +'ypmatch' '_yp' +'yppasswd' '_yp' +'yppoll' '_yp' +'yppush' '_yp' +'ypserv' '_yp' +'ypset' '_yp' +'ypwhich' '_yp' +'ypxfr' '_yp' +'ytalk' '_other_accounts' +'zargs' '_zargs' +'zathura' '_zathura' +'zcalc' '_zcalc' +'-zcalc-line-' '_zcalc_line' +'zcash-cli' '_zcash-cli' +'zcat' '_zcat' +'zcompile' '_zcompile' +'zcp' '_zmv' +'zdelattr' '_zattr' +'zdump' '_zdump' +'zeal' '_zeal' +'zed' '_zed' +'zegrep' '_grep' +'zen' '_webbrowser' +'zf_chgrp' '_chown' +'zf_chmod' '_chmod' +'zf_chown' '_chown' +'zfgrep' '_grep' +'zf_ln' '_ln' +'zf_mkdir' '_mkdir' +'zf_mv' '_mv' +'zf_rm' '_rm' +'zf_rmdir' '_rmdir' +'zfs' '_zfs' +'zgetattr' '_zattr' +'zgrep' '_grep' +'zip' '_zip' +'zipinfo' '_zip' +'zle' '_zle' +'zlistattr' '_zattr' +'zln' '_zmv' +'zmail' '_mail' +'zmodload' '_zmodload' +'zmv' '_zmv' +'zone' '_hosts' +'zparseopts' '_zparseopts' +'zpool' '_zpool' +'zpty' '_zpty' +'zsetattr' '_zattr' +'zsh' '_zsh' +'zsh-mime-handler' '_zsh-mime-handler' +'zsocket' '_zsocket' +'zstat' '_stat' +'zstyle' '_zstyle' +'ztodo' '_ztodo' +'zun' '_openstack' +'zxpdf' '_xpdf' +) + +_services=( +'bzcat' 'bunzip2' +'gchgrp' 'chgrp' +'gchown' 'chown' +'gnupod_addsong.pl' 'gnupod_addsong' +'gnupod_check.pl' 'gnupod_check' +'gnupod_INIT.pl' 'gnupod_INIT' +'gnupod_search.pl' 'gnupod_search' +'gpg2' 'gpg' +'gzcat' 'gunzip' +'iceweasel' 'firefox' +'lzcat' 'unxz' +'lzma' 'xz' +'Mail' 'mail' +'mailx' 'mail' +'mktunes.pl' 'mktunes' +'nail' 'mail' +'ncl' 'nc' +'nedit-nc' 'nc' +'pacman.static' 'pacman' +'pcat' 'unpack' +'-redirect-,<,bunzip2' 'bunzip2' +'-redirect-,<,bzip2' 'bzip2' +'-redirect-,>,bzip2' 'bunzip2' +'-redirect-,<,compress' 'compress' +'-redirect-,>,compress' 'uncompress' +'-redirect-,<,gunzip' 'gunzip' +'-redirect-,<,gzip' 'gzip' +'-redirect-,>,gzip' 'gunzip' +'-redirect-,<,uncompress' 'uncompress' +'-redirect-,<,unxz' 'unxz' +'-redirect-,<,xz' 'xz' +'-redirect-,>,xz' 'unxz' +'remsh' 'rsh' +'slogin' 'ssh' +'svnadmin-static' 'svnadmin' +'svnlite' 'svn' +'tunes2pod.pl' 'tunes2pod' +'unlzma' 'unxz' +'VBoxHeadless' 'vboxheadless' +'VBoxManage' 'vboxmanage' +'xelatex' 'latex' +'xetex' 'tex' +'xzcat' 'unxz' +'yaourt.static' 'yaourt' +'zf_chgrp' 'chgrp' +'zf_chown' 'chown' +) + +_patcomps=( +'*/(init|rc[0-9S]#).d/*' '_init_d' +'notmuch-*' '_notmuch' +) + +_postpatcomps=( +'c++-*' '_gcc' +'g++-*' '_gcc' +'gcc-*' '_gcc' +'gem[0-9.]#' '_gem' +'lua[0-9.-]##' '_lua' +'(p[bgpn]m*|*top[bgpn]m)' '_pbm' +'php[0-9.-]' '_php' +'pydoc[0-9.]#' '_pydoc' +'python[0-9.]#' '_python' +'qemu(|-system-*)' '_qemu' +'(ruby|[ei]rb)[0-9.]#' '_ruby' +'shasum(|5).*' '_shasum' +'(texi(2*|ndex))' '_texi' +'(tiff*|*2tiff|pal2rgb)' '_tiff' +'-value-,CCACHE_*,-default-' '_ccache' +'-value-,CGO*,-default-' '_golang' +'-value-,(ftp|http(|s))_proxy,-default-' '_urls' +'-value-,GO*,-default-' '_golang' +'-value-,LC_*,-default-' '_locales' +'-value-,*path,-default-' '_directories' +'-value-,*PATH,-default-' '_dir_list' +'-value-,RUBY(LIB|OPT|PATH),-default-' '_ruby' +'*/X11(|R<4->)/*' '_x_arguments' +'yodl(|2*)' '_yodl' +'zf*' '_zftp' +) + +_compautos=( +'_call_program' '+X' +) + +zle -C _bash_complete-word .complete-word _bash_completions +zle -C _bash_list-choices .list-choices _bash_completions +zle -C _complete_debug .complete-word _complete_debug +zle -C _complete_help .complete-word _complete_help +zle -C _complete_tag .complete-word _complete_tag +zle -C _correct_filename .complete-word _correct_filename +zle -C _correct_word .complete-word _correct_word +zle -C _expand_alias .complete-word _expand_alias +zle -C _expand_word .complete-word _expand_word +zle -C _history-complete-newer .complete-word _history_complete_word +zle -C _history-complete-older .complete-word _history_complete_word +zle -C _list_expansions .list-choices _expand_word +zle -C _most_recent_file .complete-word _most_recent_file +zle -C _next_tags .list-choices _next_tags +zle -C _read_comp .complete-word _read_comp +bindkey '^X^R' _read_comp +bindkey '^X?' _complete_debug +bindkey '^XC' _correct_filename +bindkey '^Xa' _expand_alias +bindkey '^Xc' _correct_word +bindkey '^Xd' _list_expansions +bindkey '^Xe' _expand_word +bindkey '^Xh' _complete_help +bindkey '^Xm' _most_recent_file +bindkey '^Xn' _next_tags +bindkey '^Xt' _complete_tag +bindkey '^X~' _bash_list-choices +bindkey '^[,' _history-complete-newer +bindkey '^[/' _history-complete-older +bindkey '^[~' _bash_complete-word + +autoload -Uz _afew _android _archlinux-java _artisan _atach \ + _bitcoin-cli _bootctl _bower _bspc _bundle \ + _busctl _caffeinate _cap _cask _ccache \ + _cf _cheat _choc _chromium _cmake \ + _coffee _composer _conan _concourse _console \ + _coredumpctl _cppcheck _curl _dad _debuild \ + _dget _dhcpcd _diana _docpad _drush \ + _ecdsautil _email-notmuch _emulator _envdir _exportfs \ + _fab _fail2ban-client _ffind _flameshot _fleetctl \ + _flutter _force _fwupdmgr _gas _ghc \ + _gist _git-flow _git-journal _git-pulls _git-revise \ + _git-wtf _glances _golang _google _gtk-launch \ + _hledger _homestead _hostnamectl _httpie _ibus \ + _include-what-you-use _inxi _jmeter _jmeter-plugins _jonas \ + _journalctl _jrnl _kak _kernel-install _kitchen \ + _knife _language_codes _libinput _localectl _loginctl \ + _lunchy _machinectl _mc _middleman _mina \ + _mix _mkinitcpio _mpv _mussh _mvn \ + _nano _networkctl _nftables _nnn _node \ + _notmuch _nvm _openssl _optirun _pacman \ + _pass _patool _perf _periscope _pgsql_utils \ + _phing _pixz _pkcon _pkgfile _play \ + _pm2 _polybar _polybar_msg _port _protoc \ + _pulseaudio _pygmentize _qpdf _rails _ralio \ + _rclone _redis-cli _resolvectl _rfkill _rg \ + _rkt _rslsync _rspec _rsvm _rubocop \ + _sbt _scala _scrub _sdd _sd_hosts_or_user_at_host \ + _sd_machines _sd_outputmodes _sd_unit_files _setcap _setup.py \ + _sfdx _showoff _srm _stack _subl \ + _subliminal _supervisorctl _svm _systemctl _systemd \ + _systemd-analyze _systemd-delta _systemd-inhibit _systemd-nspawn _systemd-run \ + _systemd-tmpfiles _tarsnap _teamocil _the_silver_searcher _thor \ + _timedatectl _tmuxinator _tmuxp _tox _trash-empty \ + _trash-list _trash-put _trash-restore _udevadm _udisksctl \ + _ufw _vagrant _vifm _virtualbox _vnstat \ + _wemux _wg-quick _xinput _xsel _xwallpaper \ + _yaourt _yarn _yay _youtube-dl _zathura \ + _zcash-cli _cdr _all_labels _all_matches _alternative \ + _approximate _arg_compile _arguments _bash_completions _cache_invalid \ + _call_function _combination _complete _complete_debug _complete_help \ + _complete_help_generic _complete_tag _comp_locale _correct _correct_filename \ + _correct_word _describe _description _dispatch _expand \ + _expand_alias _expand_word _extensions _external_pwds _generic \ + _guard _history _history_complete_word _ignored _list \ + _main_complete _match _menu _message _most_recent_file \ + _multi_parts _next_label _next_tags _normal _nothing \ + _oldlist _pick_variant _prefix _read_comp _regex_arguments \ + _regex_words _requested _retrieve_cache _sep_parts _sequence \ + _set_command _setup _store_cache _sub_commands _tags \ + _user_expand _values _wanted _acpi _acpitool \ + _alsa-utils _analyseplugin _brctl _btrfs _chattr \ + _chcon _chrt _cpupower _cryptsetup _dkms \ + _e2label _ethtool _findmnt _free _fuse_arguments \ + _fusermount _fuse_values _gpasswd _htop _iconvconfig \ + _ionice _ipset _iptables _iwconfig _kpartx \ + _losetup _lsattr _lsblk _lsusb _ltrace \ + _mdadm _mii-tool _modutils _mondo _networkmanager \ + _opkg _pidof _pmap _qdbus _schedtool \ + _selinux_contexts _selinux_roles _selinux_types _selinux_users _setsid \ + _slabtop _ss _sshfs _strace _sysstat \ + _tload _tpb _tracepath _tune2fs _uml \ + _valgrind _vserver _wakeup_capable_devices _wipefs _wpa_cli \ + _a2ps _aap _abcde _absolute_command_paths _ack \ + _adb _ansible _ant _antiword _apachectl \ + _apm _arch_archives _arch_namespace _arp _arping \ + _asciidoctor _asciinema _at _attr _augeas \ + _avahi _awk _base64 _basename _bash \ + _baudrates _baz _beep _bibtex _bind_addresses \ + _bison _bittorrent _bogofilter _bpf_filters _bpython \ + _bzip2 _bzr _cabal _cal _calendar \ + _canonical_paths _cat _ccal _cdcd _cdrdao \ + _cdrecord _chkconfig _chmod _chown _chroot \ + _chsh _cksum _clay _cmdambivalent _cmdstring \ + _cmp _column _comm _composer _compress \ + _configure _cowsay _cp _cpio _cplay \ + _crontab _cscope _cssh _ctags_tags _curl \ + _cut _cvs _darcs _date _date_formats \ + _dates _dbus _dconf _dd _devtodo \ + _df _dhclient _dict _dict_words _diff \ + _diff3 _diff_options _diffstat _dig _directories \ + _dir_list _django _dmesg _dmidecode _dns_types \ + _doas _domains _dos2unix _drill _dsh \ + _dtruss _du _dvi _ecasound _ed \ + _elfdump _elinks _email_addresses _enscript _entr \ + _env _espeak _etags _fakeroot _feh \ + _fetchmail _ffmpeg _figlet _file_modes _files \ + _file_systems _find _find_net_interfaces _finger _flac \ + _flex _fmt _fold _fortune _fsh \ + _fuser _gcc _gcore _gdb _gem \ + _genisoimage _getconf _getent _getfacl _getmail \ + _getopt _ghostscript _git _global _global_tags \ + _gnu_generic _gnupod _gnutls _go _gpg \ + _gphoto2 _gprof _gradle _graphicsmagick _grep \ + _groff _groups _growisofs _gsettings _guilt \ + _gzip _have_glob_qual _head _hexdump _host \ + _hostname _hosts _iconv _id _ifconfig \ + _iftop _imagemagick _initctl _init_d _install \ + _iostat _ip _ipsec _irssi _ispell \ + _java _java_class _joe _join _jq \ + _killall _knock _kvno _last _ldconfig \ + _ldd _ld_debug _less _lha _libvirt \ + _links _list_files _lldb _ln _loadkeys \ + _locale _localedef _locales _locate _look \ + _lp _ls _lsof _lua _luarocks \ + _lynx _lz4 _lzop _mail _mailboxes \ + _make _man _md5sum _mencal _mh \ + _mime_types _mkdir _mkfifo _mknod _mktemp \ + _module _monotone _moosic _mosh _mount \ + _mpc _mt _mtools _mtr _mutt \ + _mv _my_accounts _myrepos _mysqldiff _mysql_utils \ + _ncftp _netcat _net_interfaces _netstat _newsgroups \ + _nginx _ngrep _nice _nkf _nl \ + _nm _nmap _npm _nslookup _numfmt \ + _objdump _object_files _od _openstack _other_accounts \ + _pack _pandoc _paste _patch _patchutils \ + _path_commands _path_files _pax _pbm _pdf \ + _perforce _perl _perl_basepods _perldoc _perl_modules \ + _pgrep _php _picocom _pids _pine \ + _ping _pkgadd _pkg-config _pkginfo _pkg_instance \ + _pkgrm _pon _ports _postfix _postgresql \ + _postscript _printenv _printers _process_names _prove \ + _ps _pspdf _psutils _pump _pv \ + _pwgen _pydoc _python _python_modules _qemu \ + _quilt _rake _ranlib _rar _rclone \ + _rcs _readelf _readlink _remote_files _renice \ + _ri _rlogin _rm _rmdir _route \ + _rrdtool _rsync _rubber _ruby _runit \ + _samba _sccs _scons _screen _script \ + _seafile _sed _seq _service _services \ + _setfacl _sh _shasum _showmount _shred \ + _shuf _shutdown _signals _sisu _slrn \ + _smartmontools _socket _sort _spamassassin _split \ + _sqlite _sqsh _ssh _ssh_hosts _stat \ + _stdbuf _stgit _stow _strings _strip \ + _stty _su _subversion _sudo _surfraw \ + _swaks _swanctl _swift _sys_calls _sysctl \ + _tac _tail _tar _tar_archive _tardy \ + _tcpdump _tcptraceroute _tee _telnet _terminals \ + _tex _texi _texinfo _tidy _tiff \ + _tilde_files _timeout _time_zone _tin _tla \ + _tmux _todo.sh _toilet _top _topgit \ + _totd _touch _tput _tr _transmission \ + _tree _truss _tty _ttys _twidge \ + _twisted _umountable _unace _uname _unexpand \ + _uniq _unison _units _uptime _urls \ + _user_admin _user_at_host _users _users_on _vcsh \ + _vim _visudo _vmstat _vorbis _vpnc \ + _w _w3m _watch _wc _webbrowser \ + _wget _whereis _who _whois _wiggle \ + _xargs _xmlsoft _xmlstarlet _xmms2 _xxd \ + _xz _yafc _yodl _yp _zcat \ + _zdump _zfs _zfs_dataset _zfs_keysource_props _zfs_pool \ + _zip _zpool _zsh _acroread _code \ + _dcop _eog _evince _geany _gnome-gv \ + _gqview _gv _kdeconnect _kfmclient _matlab \ + _mozilla _mplayer _mupdf _nautilus _nedit \ + _netscape _okular _pdftk _qiv _rdesktop \ + _setxkbmap _sublimetext _urxvt _vnc _x_arguments \ + _xauth _xautolock _x_borderwidth _xclip _x_color \ + _x_colormapid _x_cursor _x_display _xdvi _x_extension \ + _xfig _x_font _xft_fonts _x_geometry _x_keysym \ + _xloadimage _x_locale _x_modifier _xmodmap _x_name \ + _xournal _xpdf _xrandr _x_resource _xscreensaver \ + _x_selection_timeout _xset _xt_arguments _xterm _x_title \ + _xt_session_id _x_utils _xv _x_visual _x_window \ + _xwit _zeal _add-zle-hook-widget _add-zsh-hook _alias \ + _aliases _arrays _assign _autocd _bindkey \ + _brace_parameter _builtin _cd _command _command_names \ + _compadd _compdef _completers _condition _default \ + _delimiters _directory_stack _dirs _disable _dynamic_directory_name \ + _echotc _echoti _emulate _enable _equal \ + _exec _fc _file_descriptors _first _functions \ + _globflags _globqual_delims _globquals _hash _history_modifiers \ + _in_vared _jobs _jobs_bg _jobs_builtin _jobs_fg \ + _kill _limit _limits _math _math_params \ + _mere _module_math_func _options _options_set _options_unset \ + _parameter _parameters _precommand _print _prompt \ + _ps1234 _read _redirect _run-help _sched \ + _set _setopt _source _strftime _subscript \ + _suffix_alias_files _tcpsys _tilde _trap _ttyctl \ + _typeset _ulimit _unhash _user_math_func _value \ + _vared _vars _wait _which _widgets \ + _zargs _zattr _zcalc _zcalc_line _zcompile \ + _zed _zftp _zle _zmodload _zmv \ + _zparseopts _zpty _zsh-mime-handler _zsocket _zstyle \ + _ztodo +autoload -Uz +X _call_program + +typeset -gUa _comp_assocs +_comp_assocs=( '' ) diff --git a/zsh/.zshrc b/zsh/.zshrc @@ -0,0 +1,159 @@ +autoload -U colors && colors # Load colors + +setopt autocd # Automatically cd into typed directory. +setopt SHARE_HISTORY +setopt HIST_IGNORE_ALL_DUPS +stty stop undef # Disable ctrl-s to freeze terminal. + +# History in cache directory: +HISTSIZE=1000000 +SAVEHIST=1000000 +HISTFILE=~/.cache/zsh/history + +# don't add garbage to history +function hist() { + [[ "$#1" -lt 7 \ + || "$1" = "run-help "* \ + || "$1" = "cd "* \ + || "$1" = "man "* \ + || "$1" = "h "* \ + || "$1" = "~ "* ]] + return $(( 1 - $? )) +} +# Load aliases and shortcuts if existent. +[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shortcutrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shortcutrc" +[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/aliasrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/aliasrc" +[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/zshnameddirrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/zshnameddirrc" + +# load ssh agent +if [ ! -S ~/.ssh/ssh_auth_sock ]; then + eval `ssh-agent` + ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock +fi +export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock +ssh-add -l > /dev/null || ssh-add + +# Basic auto/tab complete: +autoload -U compinit +zstyle ':completion:*' menu select +zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' + +zmodload zsh/complist +compinit +_comp_options+=(globdots) # Include hidden files. + +# vi mode +bindkey -v +export KEYTIMEOUT=1 + +# Enable searching through history +bindkey '^R' history-incremental-pattern-search-backward + +# Use vim keys in tab complete menu: +bindkey -M menuselect 'h' vi-backward-char +bindkey -M menuselect 'k' vi-up-line-or-history +bindkey -M menuselect 'l' vi-forward-char +bindkey -M menuselect 'j' vi-down-line-or-history +bindkey -v '^?' backward-delete-char + +# Change cursor shape for different vi modes. +function zle-keymap-select { + if [[ ${KEYMAP} == vicmd ]] || + [[ $1 = 'block' ]]; then + echo -ne '\e[1 q' + elif [[ ${KEYMAP} == main ]] || + [[ ${KEYMAP} == viins ]] || + [[ ${KEYMAP} = '' ]] || + [[ $1 = 'beam' ]]; then + echo -ne '\e[5 q' + fi +} + +zle -N zle-keymap-select + +# ci", ci', ci`, di", etc +autoload -U select-quoted +zle -N select-quoted +for m in visual viopp; do + for c in {a,i}{\',\",\`}; do + bindkey -M $m $c select-quoted + done +done + +# ci{, ci(, ci<, di{, etc +autoload -U select-bracketed +zle -N select-bracketed +for m in visual viopp; do + for c in {a,i}${(s..)^:-'()[]{}<>bB'}; do + bindkey -M $m $c select-bracketed + done +done + +zle-line-init() { + zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere) + echo -ne "\e[5 q" +} + +zle -N zle-line-init + +echo -ne '\e[5 q' # Use beam shape cursor on startup. +preexec() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt. + +bindkey -s '^o' 'lfcd\n' +bindkey -s '^a' 'bc -l\n' +bindkey -s '^f' 'cd "$(dirname "$(fzf)")"\n' +bindkey '^[[P' delete-char + +# Edit line in vim with ctrl-e: +autoload edit-command-line; zle -N edit-command-line +bindkey '^e' edit-command-line + +# Load zsh-syntax-highlighting +source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 2>/dev/null + +# Suggest aliases for commands +source /usr/share/zsh/plugins/zsh-you-should-use/you-should-use.plugin.zsh 2>/dev/null + +# Search repos for programs that can't be found +source /usr/share/doc/pkgfile/command-not-found.zsh 2>/dev/null + +SPACESHIP_PROMPT_ADD_NEWLINE=false +SPACESHIP_PROMPT_SEPARATE_LINE=false +#SPACESHIP_CHAR_SYMBOL=➜➜➜➜➜❯➜ +SPACESHIP_CHAR_SUFFIX= +SPACESHIP_USER_SHOW=false +SPACESHIP_HOST_SHOW=false +SPACESHIP_GIT_SHOW=false + +SPACESHIP_DIR_SHOW=true +SPACESHIP_DIR_COLOR=#777777 +SPACESHIP_CONDA_SHOW=true +SPACESHIP_VENV_SHOW=true +SPACESHIP_PYENV_SHOW=true + +SPACESHIP_HG_SHOW=false +SPACESHIP_PACKAGE_SHOW=false +SPACESHIP_NODE_SHOW=false +SPACESHIP_RUBY_SHOW=false +SPACESHIP_ELM_SHOW=false +SPACESHIP_ELIXIR_SHOW=false +SPACESHIP_XCODE_SHOW_LOCAL=false +SPACESHIP_SWIFT_SHOW_LOCAL=false +SPACESHIP_GOLANG_SHOW=false +SPACESHIP_PHP_SHOW=false +SPACESHIP_RUST_SHOW=false +SPACESHIP_JULIA_SHOW=false +SPACESHIP_DOCKER_SHOW=false +SPACESHIP_DOCKER_CONTEXT_SHOW=false +SPACESHIP_AWS_SHOW=false +SPACESHIP_DOTNET_SHOW=false +SPACESHIP_EMBER_SHOW=false +SPACESHIP_KUBECONTEXT_SHOW=false +SPACESHIP_TERRAFORM_SHOW=false +SPACESHIP_TERRAFORM_SHOW=false +SPACESHIP_VI_MODE_SHOW=false +SPACESHIP_JOBS_SHOW=false + +# Spaceship Prompt +autoload -U promptinit; promptinit +prompt spaceship