commit 3ebe3333f398c95d8e2294354555c8cd98743f13
parent 6cde150380210a0b6d9011f37971aca94973c1bb
Author: C. Beau Hilton <cbeauhilton@gmail.com>
Date:   Wed,  2 Dec 2020 06:30:24 -0600
vimrc
Diffstat:
12 files changed, 1024 insertions(+), 1376 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -5,6 +5,8 @@ odrive/
 gcloud/
 pulse/
 chromium/
+spotify/
+spicetify/
 transmission/
 coc/
 Code/
diff --git a/configstore/update-notifier-npm.json b/configstore/update-notifier-npm.json
@@ -1,4 +1,10 @@
 {
 	"optOut": false,
-	"lastUpdateCheck": 1588593812780
+	"lastUpdateCheck": 1606900512049,
+	"update": {
+		"latest": "6.14.9",
+		"current": "6.14.8",
+		"type": "patch",
+		"name": "npm"
+	}
 } 
\ No newline at end of file
diff --git a/dconf/user b/dconf/user
Binary files differ.
diff --git a/htop/htoprc b/htop/htoprc
@@ -16,9 +16,12 @@ tree_view=0
 header_margin=1
 detailed_cpu_time=0
 cpu_count_from_zero=0
+show_cpu_usage=1
+show_cpu_frequency=0
 update_process_names=0
 account_guest_in_cpu_meter=0
 color_scheme=0
+enable_mouse=1
 delay=15
 left_meters=AllCPUs Memory Swap
 left_meter_modes=1 1 1
diff --git a/kitty/kitty.conf b/kitty/kitty.conf
@@ -1,1048 +1,44 @@
 # vim:fileencoding=utf-8:ft=conf:foldmethod=marker
 
-#: Fonts {{{
-
-#: kitty has very powerful font management. You can configure
-#: individual font faces and even specify special fonts for particular
-#: characters.
-
-font_family      monospace
-bold_font        auto
-italic_font      auto
-bold_italic_font auto
-
-#: You can specify different fonts for the bold/italic/bold-italic
-#: variants. To get a full list of supported fonts use the `kitty
-#: list-fonts` command. By default they are derived automatically, by
-#: the OSes font system. Setting them manually is useful for font
-#: families that have many weight variants like Book, Medium, Thick,
-#: etc. For example::
-
-#:     font_family      Operator Mono Book
-#:     bold_font        Operator Mono Medium
-#:     italic_font      Operator Mono Book Italic
-#:     bold_italic_font Operator Mono Medium Italic
-
-font_size 9.0
-
-#: Font size (in pts)
-
-force_ltr no
-
-#: kitty does not support BIDI (bidirectional text), however, for RTL
-#: scripts, words are automatically displayed in RTL. That is to say,
-#: in an RTL script, the words "HELLO WORLD" display in kitty as
-#: "WORLD HELLO", and if you try to select a substring of an RTL-
-#: shaped string, you will get the character that would be there had
-#: the the string been LTR. For example, assuming the Hebrew word
-#: ירושלים, selecting the character that on the screen appears to be ם
-#: actually writes into the selection buffer the character י.
-
-#: kitty's default behavior is useful in conjunction with a filter to
-#: reverse the word order, however, if you wish to manipulate RTL
-#: glyphs, it can be very challenging to work with, so this option is
-#: provided to turn it off. Furthermore, this option can be used with
-#: the command line program GNU FriBidi
-#: <https://github.com/fribidi/fribidi#executable> to get BIDI
-#: support, because it will force kitty to always treat the text as
-#: LTR, which FriBidi expects for terminals.
-
-adjust_line_height  0
-adjust_column_width 0
-
-#: Change the size of each character cell kitty renders. You can use
-#: either numbers, which are interpreted as pixels or percentages
-#: (number followed by %), which are interpreted as percentages of the
-#: unmodified values. You can use negative pixels or percentages less
-#: than 100% to reduce sizes (but this might cause rendering
-#: artifacts).
-
-# symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols
-
-#: Map the specified unicode codepoints to a particular font. Useful
-#: if you need special rendering for some symbols, such as for
-#: Powerline. Avoids the need for patched fonts. Each unicode code
-#: point is specified in the form U+<code point in hexadecimal>. You
-#: can specify multiple code points, separated by commas and ranges
-#: separated by hyphens. symbol_map itself can be specified multiple
-#: times. Syntax is::
-
-#:     symbol_map codepoints Font Family Name
-
-disable_ligatures never
-
-#: Choose how you want to handle multi-character ligatures. The
-#: default is to always render them.  You can tell kitty to not render
-#: them when the cursor is over them by using cursor to make editing
-#: easier, or have kitty never render them at all by using always, if
-#: you don't like them. The ligature strategy can be set per-window
-#: either using the kitty remote control facility or by defining
-#: shortcuts for it in kitty.conf, for example::
-
-#:     map alt+1 disable_ligatures_in active always
-#:     map alt+2 disable_ligatures_in all never
-#:     map alt+3 disable_ligatures_in tab cursor
-
-#: Note that this refers to programming ligatures, typically
-#: implemented using the calt OpenType feature. For disabling general
-#: ligatures, use the font_features setting.
-
-font_features none
-
-#: Choose exactly which OpenType features to enable or disable. This
-#: is useful as some fonts might have features worthwhile in a
-#: terminal. For example, Fira Code Retina includes a discretionary
-#: feature, zero, which in that font changes the appearance of the
-#: zero (0), to make it more easily distinguishable from Ø. Fira Code
-#: Retina also includes other discretionary features known as
-#: Stylistic Sets which have the tags ss01 through ss20.
-
-#: Note that this code is indexed by PostScript name, and not the font
-#: family. This allows you to define very precise feature settings;
-#: e.g. you can disable a feature in the italic font but not in the
-#: regular font.
-
-#: To get the PostScript name for a font, use kitty + list-fonts
-#: --psnames:
-
-#: .. code-block:: sh
-
-#:     $ kitty + list-fonts --psnames | grep Fira
-#:     Fira Code
-#:     Fira Code Bold (FiraCode-Bold)
-#:     Fira Code Light (FiraCode-Light)
-#:     Fira Code Medium (FiraCode-Medium)
-#:     Fira Code Regular (FiraCode-Regular)
-#:     Fira Code Retina (FiraCode-Retina)
-
-#: The part in brackets is the PostScript name.
-
-#: Enable alternate zero and oldstyle numerals::
-
-#:     font_features FiraCode-Retina +zero +onum
-
-#: Enable only alternate zero::
-
-#:     font_features FiraCode-Retina +zero
-
-#: Disable the normal ligatures, but keep the calt feature which (in
-#: this font) breaks up monotony::
-
-#:     font_features TT2020StyleB-Regular -liga +calt
-
-#: In conjunction with force_ltr, you may want to disable Arabic
-#: shaping entirely, and only look at their isolated forms if they
-#: show up in a document. You can do this with e.g.::
-
-#:     font_features UnifontMedium +isol -medi -fina -init
-
-box_drawing_scale 0.001, 1, 1.5, 2
-
-#: Change the sizes of the lines used for the box drawing unicode
-#: characters These values are in pts. They will be scaled by the
-#: monitor DPI to arrive at a pixel value. There must be four values
-#: corresponding to thin, normal, thick, and very thick lines.
-
-#: }}}
-
-#: Cursor customization {{{
-
-cursor #cccccc
-
-#: Default cursor color
-
-cursor_text_color #111111
-
-#: Choose the color of text under the cursor. If you want it rendered
-#: with the background color of the cell underneath instead, use the
-#: special keyword: background
-
-cursor_shape block
-
-#: The cursor shape can be one of (block, beam, underline)
-
-cursor_beam_thickness 1.5
-
-#: Defines the thickness of the beam cursor (in pts)
-
-cursor_underline_thickness 2.0
-
-#: Defines the thickness of the underline cursor (in pts)
-
-cursor_blink_interval -1
-
-#: The interval (in seconds) at which to blink the cursor. Set to zero
-#: to disable blinking. Negative values mean use system default. Note
-#: that numbers smaller than repaint_delay will be limited to
-#: repaint_delay.
-
-cursor_stop_blinking_after 15.0
-
-#: Stop blinking cursor after the specified number of seconds of
-#: keyboard inactivity.  Set to zero to never stop blinking.
-
-#: }}}
-
-#: Scrollback {{{
-
-scrollback_lines 2000
-
-#: Number of lines of history to keep in memory for scrolling back.
-#: Memory is allocated on demand. Negative numbers are (effectively)
-#: infinite scrollback. Note that using very large scrollback is not
-#: recommended as it can slow down performance of the terminal and
-#: also use large amounts of RAM. Instead, consider using
-#: scrollback_pager_history_size.
-
-scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER
-
-#: Program with which to view scrollback in a new window. The
-#: scrollback buffer is passed as STDIN to this program. If you change
-#: it, make sure the program you use can handle ANSI escape sequences
-#: for colors and text formatting. INPUT_LINE_NUMBER in the command
-#: line above will be replaced by an integer representing which line
-#: should be at the top of the screen. Similarly CURSOR_LINE and
-#: CURSOR_COLUMN will be replaced by the current cursor position.
-
-scrollback_pager_history_size 4000
-
-#: Separate scrollback history size, used only for browsing the
-#: scrollback buffer (in MB). This separate buffer is not available
-#: for interactive scrolling but will be piped to the pager program
-#: when viewing scrollback buffer in a separate window. The current
-#: implementation stores the data in UTF-8, so approximatively 10000
-#: lines per megabyte at 100 chars per line, for pure ASCII text,
-#: unformatted text. A value of zero or less disables this feature.
-#: The maximum allowed size is 4GB.
-
-wheel_scroll_multiplier 5.0
-
-#: Modify the amount scrolled by the mouse wheel. Note this is only
-#: used for low precision scrolling devices, not for high precision
-#: scrolling on platforms such as macOS and Wayland. Use negative
-#: numbers to change scroll direction.
-
-touch_scroll_multiplier 1.0
-
-#: Modify the amount scrolled by a touchpad. Note this is only used
-#: for high precision scrolling devices on platforms such as macOS and
-#: Wayland. Use negative numbers to change scroll direction.
-
-#: }}}
-
-#: Mouse {{{
-
-mouse_hide_wait 3.0
-
-#: Hide mouse cursor after the specified number of seconds of the
-#: mouse not being used. Set to zero to disable mouse cursor hiding.
-#: Set to a negative value to hide the mouse cursor immediately when
-#: typing text. Disabled by default on macOS as getting it to work
-#: robustly with the ever-changing sea of bugs that is Cocoa is too
-#: much effort.
-
-url_color #0087bd
-url_style curly
-
-#: The color and style for highlighting URLs on mouse-over. url_style
-#: can be one of: none, single, double, curly
-
-open_url_modifiers kitty_mod
-
-#: The modifier keys to press when clicking with the mouse on URLs to
-#: open the URL
-
-open_url_with default
-
-#: The program with which to open URLs that are clicked on. The
-#: special value default means to use the operating system's default
-#: URL handler.
-
-url_prefixes http https file ftp
-
-#: The set of URL prefixes to look for when detecting a URL under the
-#: mouse cursor.
-
-detect_urls yes
-
-#: Detect URLs under the mouse. Detected URLs are highlighted with an
-#: underline and the mouse cursor becomes a hand over them. Even if
-#: this option is disabled, URLs are still clickable.
-
-copy_on_select no
-
-#: Copy to clipboard or a private buffer on select. With this set to
-#: clipboard, simply selecting text with the mouse will cause the text
-#: to be copied to clipboard. Useful on platforms such as macOS that
-#: do not have the concept of primary selections. You can instead
-#: specify a name such as a1 to copy to a private kitty buffer
-#: instead. Map a shortcut with the paste_from_buffer action to paste
-#: from this private buffer. For example::
-
-#:     map cmd+shift+v paste_from_buffer a1
-
-#: Note that copying to the clipboard is a security risk, as all
-#: programs, including websites open in your browser can read the
-#: contents of the system clipboard.
-
-strip_trailing_spaces never
-
-#: Remove spaces at the end of lines when copying to clipboard. A
-#: value of smart will do it when using normal selections, but not
-#: rectangle selections. always will always do it.
-
-rectangle_select_modifiers ctrl+alt
-
-#: The modifiers to use rectangular selection (i.e. to select text in
-#: a rectangular block with the mouse)
-
-terminal_select_modifiers shift
-
-#: The modifiers to override mouse selection even when a terminal
-#: application has grabbed the mouse
-
-select_by_word_characters @-./_~?&=%+#
-
-#: Characters considered part of a word when double clicking. In
-#: addition to these characters any character that is marked as an
-#: alphanumeric character in the unicode database will be matched.
-
-click_interval -1.0
-
-#: The interval between successive clicks to detect double/triple
-#: clicks (in seconds). Negative numbers will use the system default
-#: instead, if available, or fallback to 0.5.
-
-focus_follows_mouse no
-
-#: Set the active window to the window under the mouse when moving the
-#: mouse around
-
-pointer_shape_when_grabbed arrow
-
-#: The shape of the mouse pointer when the program running in the
-#: terminal grabs the mouse. Valid values are: arrow, beam and hand
-
-default_pointer_shape beam
-
-#: The default shape of the mouse pointer. Valid values are: arrow,
-#: beam and hand
-
-pointer_shape_when_dragging beam
-
-#: The default shape of the mouse pointer when dragging across text.
-#: Valid values are: arrow, beam and hand
-
-#: }}}
-
-#: Performance tuning {{{
-
-repaint_delay 10
-
-#: Delay (in milliseconds) between screen updates. Decreasing it,
-#: increases frames-per-second (FPS) at the cost of more CPU usage.
-#: The default value yields ~100 FPS which is more than sufficient for
-#: most uses. Note that to actually achieve 100 FPS you have to either
-#: set sync_to_monitor to no or use a monitor with a high refresh
-#: rate. Also, to minimize latency when there is pending input to be
-#: processed, repaint_delay is ignored.
-
-input_delay 3
-
-#: Delay (in milliseconds) before input from the program running in
-#: the terminal is processed. Note that decreasing it will increase
-#: responsiveness, but also increase CPU usage and might cause flicker
-#: in full screen programs that redraw the entire screen on each loop,
-#: because kitty is so fast that partial screen updates will be drawn.
-
-sync_to_monitor yes
-
-#: Sync screen updates to the refresh rate of the monitor. This
-#: prevents tearing (https://en.wikipedia.org/wiki/Screen_tearing)
-#: when scrolling. However, it limits the rendering speed to the
-#: refresh rate of your monitor. With a very high speed mouse/high
-#: keyboard repeat rate, you may notice some slight input latency. If
-#: so, set this to no.
-
-#: }}}
-
-#: Terminal bell {{{
+font_family             monospace
+bold_font               auto
+italic_font             auto
+bold_italic_font        auto
+font_size               9.0
+
+window_border_width     0.5pt
+draw_minimal_borders    yes
+window_margin_width     0
+single_window_margin_width -1
+window_padding_width    3 3
+placement_strategy      center
 
 enable_audio_bell no
-
-#: Enable/disable the audio bell. Useful in environments that require
-#: silence.
-
 visual_bell_duration 0.0
 
-#: Visual bell duration. Flash the screen when a bell occurs for the
-#: specified number of seconds. Set to zero to disable.
-
-window_alert_on_bell yes
-
-#: Request window attention on bell. Makes the dock icon bounce on
-#: macOS or the taskbar flash on linux.
-
-bell_on_tab yes
-
-#: Show a bell symbol on the tab if a bell occurs in one of the
-#: windows in the tab and the window is not the currently focused
-#: window
-
-command_on_bell none
-
-#: Program to run when a bell occurs.
-
-#: }}}
-
-#: Window layout {{{
-
-remember_window_size  yes
-initial_window_width  640
-initial_window_height 400
-
-#: If enabled, the window size will be remembered so that new
-#: instances of kitty will have the same size as the previous
-#: instance. If disabled, the window will initially have size
-#: configured by initial_window_width/height, in pixels. You can use a
-#: suffix of "c" on the width/height values to have them interpreted
-#: as number of cells instead of pixels.
-
-enabled_layouts *
-
-#: The enabled window layouts. A comma separated list of layout names.
-#: The special value all means all layouts. The first listed layout
-#: will be used as the startup layout. Default configuration is all
-#: layouts in alphabetical order. For a list of available layouts, see
-#: the https://sw.kovidgoyal.net/kitty/index.html#layouts.
-
-window_resize_step_cells 2
-window_resize_step_lines 2
-
-#: The step size (in units of cell width/cell height) to use when
-#: resizing windows. The cells value is used for horizontal resizing
-#: and the lines value for vertical resizing.
-
-window_border_width 0.5pt
-
-#: The width of window borders. Can be either in pixels (px) or pts
-#: (pt). Values in pts will be rounded to the nearest number of pixels
-#: based on screen resolution. If not specified the unit is assumed to
-#: be pts. Note that borders are displayed only when more than one
-#: window is visible. They are meant to separate multiple windows.
-
-draw_minimal_borders yes
-
-#: Draw only the minimum borders needed. This means that only the
-#: minimum needed borders for inactive windows are drawn. That is only
-#: the borders that separate the inactive window from a neighbor. Note
-#: that setting a non-zero window margin overrides this and causes all
-#: borders to be drawn.
-
-window_margin_width 0
-
-#: The window margin (in pts) (blank area outside the border). A
-#: single value sets all four sides. Two values set the vertical and
-#: horizontal sides. Three values set top, horizontal and bottom. Four
-#: values set top, right, bottom and left.
-
-single_window_margin_width -1
-
-#: The window margin (in pts) to use when only a single window is
-#: visible. Negative values will cause the value of
-#: window_margin_width to be used instead. A single value sets all
-#: four sides. Two values set the vertical and horizontal sides. Three
-#: values set top, horizontal and bottom. Four values set top, right,
-#: bottom and left.
-
-window_padding_width 3 3
-
-#: The window padding (in pts) (blank area between the text and the
-#: window border). A single value sets all four sides. Two values set
-#: the vertical and horizontal sides. Three values set top, horizontal
-#: and bottom. Four values set top, right, bottom and left.
-
-placement_strategy center
-
-#: When the window size is not an exact multiple of the cell size, the
-#: cell area of the terminal window will have some extra padding on
-#: the sides. You can control how that padding is distributed with
-#: this option. Using a value of center means the cell area will be
-#: placed centrally. A value of top-left means the padding will be on
-#: only the bottom and right edges.
-
-active_border_color #00ff00
-
-#: The color for the border of the active window. Set this to none to
-#: not draw borders around the active window.
-
-inactive_border_color #cccccc
-
-#: The color for the border of inactive windows
-
-bell_border_color #ff5a00
-
-#: The color for the border of inactive windows in which a bell has
-#: occurred
-
-inactive_text_alpha 0.9
-
-#: Fade the text in inactive windows by the specified amount (a number
-#: between zero and one, with zero being fully faded).
-
-hide_window_decorations no
-
-#: Hide the window decorations (title-bar and window borders) with
-#: yes. On macOS, titlebar-only can be used to only hide the titlebar.
-#: Whether this works and exactly what effect it has depends on the
-#: window manager/operating system.
-
-resize_debounce_time 0.1
-
-#: The time (in seconds) to wait before redrawing the screen when a
-#: resize event is received. On platforms such as macOS, where the
-#: operating system sends events corresponding to the start and end of
-#: a resize, this number is ignored.
-
-resize_draw_strategy static
-
-#: Choose how kitty draws a window while a resize is in progress. A
-#: value of static means draw the current window contents, mostly
-#: unchanged. A value of scale means draw the current window contents
-#: scaled. A value of blank means draw a blank window. A value of size
-#: means show the window size in cells.
-
-resize_in_steps no
-
-#: Resize the OS window in steps as large as the cells, instead of
-#: with the usual pixel accuracy. Combined with an
-#: initial_window_width and initial_window_height in number of cells,
-#: this option can be used to keep the margins as small as possible
-#: when resizing the OS window. Note that this does not currently work
-#: on Wayland.
-
-confirm_os_window_close 0
-
-#: Ask for confirmation when closing an OS window or a tab that has at
-#: least this number of kitty windows in it. A value of zero disables
-#: confirmation. This confirmation also applies to requests to quit
-#: the entire application (all OS windows, via the quit action).
-
-#: }}}
-
-#: Tab bar {{{
-
-tab_bar_edge bottom
-
-#: Which edge to show the tab bar on, top or bottom
-
-tab_bar_margin_width 0.0
-
-#: The margin to the left and right of the tab bar (in pts)
-
-tab_bar_style fade
-
-#: The tab bar style, can be one of: fade, separator, powerline, or
-#: hidden. In the fade style, each tab's edges fade into the
-#: background color, in the separator style, tabs are separated by a
-#: configurable separator, and the powerline shows the tabs as a
-#: continuous line. If you use the hidden style, you might want to
-#: create a mapping for the select_tab action which presents you with
-#: a list of tabs and allows for easy switching to a tab.
-
-tab_bar_min_tabs 2
-
-#: The minimum number of tabs that must exist before the tab bar is
-#: shown
-
-tab_switch_strategy previous
-
-#: The algorithm to use when switching to a tab when the current tab
-#: is closed. The default of previous will switch to the last used
-#: tab. A value of left will switch to the tab to the left of the
-#: closed tab. A value of last will switch to the right-most tab.
-
-tab_fade 0.25 0.5 0.75 1
-
-#: Control how each tab fades into the background when using fade for
-#: the tab_bar_style. Each number is an alpha (between zero and one)
-#: that controls how much the corresponding cell fades into the
-#: background, with zero being no fade and one being full fade. You
-#: can change the number of cells used by adding/removing entries to
-#: this list.
-
-tab_separator " ┇"
-
-#: The separator between tabs in the tab bar when using separator as
-#: the tab_bar_style.
-
-tab_activity_symbol none
-
-#: Some text or a unicode symbol to show on the tab if a window in the
-#: tab that does not have focus has some activity.
-
-tab_title_template "{title}"
-
-#: A template to render the tab title. The default just renders the
-#: title. If you wish to include the tab-index as well, use something
-#: like: {index}: {title}. Useful if you have shortcuts mapped for
-#: goto_tab N. In addition you can use {layout_name} for the current
-#: layout name and {num_windows} for the number of windows in the tab.
-#: Note that formatting is done by Python's string formatting
-#: machinery, so you can use, for instance, {layout_name[:2].upper()}
-#: to show only the first two letters of the layout name, upper-cased.
-
-active_tab_title_template none
-
-#: Template to use for active tabs, if not specified falls back to
-#: tab_title_template.
-# active_tab_foreground   #000
-# active_tab_background   #eee
-# active_tab_font_style   bold-italic
-# inactive_tab_foreground #444
-# inactive_tab_background #999
-# inactive_tab_font_style normal
-#: Tab bar colors and styles
-# tab_bar_background none
-#: Background color for the tab bar. Defaults to using the terminal
-#: background color.
-#: }}}
-#: Color scheme {{{
-# foreground #dddddd
-# background #000000
-#: The foreground and background colors
-
-background_opacity 1
-
-#: The opacity of the background. A number between 0 and 1, where 1 is
-#: opaque and 0 is fully transparent.  This will only work if
-#: supported by the OS (for instance, when using a compositor under
-#: X11). Note that it only sets the background color's opacity in
-#: cells that have the same background color as the default terminal
-#: background. This is so that things like the status bar in vim,
-#: powerline prompts, etc. still look good.  But it means that if you
-#: use a color theme with a background color in your editor, it will
-#: not be rendered as transparent.  Instead you should change the
-#: default background color in your kitty config and not use a
-#: background color in the editor color scheme. Or use the escape
-#: codes to set the terminals default colors in a shell script to
-#: launch your editor.  Be aware that using a value less than 1.0 is a
-#: (possibly significant) performance hit.  If you want to dynamically
-#: change transparency of windows set dynamic_background_opacity to
-#: yes (this is off by default as it has a performance cost)
-
-background_image none
-
-#: Path to a background image. Must be in PNG format.
-
-background_image_layout tiled
-
-#: Whether to tile or scale the background image.
-
-background_image_linear no
-
-#: When background image is scaled, whether linear interpolation
-#: should be used.
-
 dynamic_background_opacity no
-
-#: Allow changing of the background_opacity dynamically, using either
-#: keyboard shortcuts (increase_background_opacity and
-#: decrease_background_opacity) or the remote control facility.
-
-background_tint 0.0
-
-#: How much to tint the background image by the background color. The
-#: tint is applied only under the text area, not margin/borders. Makes
-#: it easier to read the text. Tinting is done using the current
-#: background color for each window. This setting applies only if
-#: background_opacity is set and transparent windows are supported or
-#: background_image is set.
-
+inactive_text_alpha 0.9
 dim_opacity 0.75
 
-#: How much to dim text that has the DIM/FAINT attribute set. One
-#: means no dimming and zero means fully dimmed (i.e. invisible).
-
-selection_foreground #000000
-
-#: The foreground for text selected with the mouse. A value of none
-#: means to leave the color unchanged.
-
-selection_background #fffacd
-
-#: The background for text selected with the mouse.
-
-
-#: The 16 terminal colors. There are 8 basic colors, each color has a
-#: dull and bright version. You can also set the remaining colors from
-#: the 256 color table as color16 to color255.
-
-color0 #000000
-color8 #767676
+mouse_hide_wait         -1
 
-#: black
-
-color1 #cc0403
-color9 #f2201f
-
-#: red
-
-color2  #19cb00
-color10 #23fd00
-
-#: green
-
-color3  #cecb00
-color11 #fffd00
-
-#: yellow
-
-color4  #0d73cc
-color12 #1a8fff
-
-#: blue
-
-color5  #cb1ed1
-color13 #fd28ff
-
-#: magenta
-
-color6  #0dcdcd
-color14 #14ffff
-
-#: cyan
-
-color7  #dddddd
-color15 #ffffff
-
-#: white
-
-mark1_foreground black
-
-#: Color for marks of type 1
-
-mark1_background #98d3cb
-
-#: Color for marks of type 1 (light steel blue)
-
-mark2_foreground black
-
-#: Color for marks of type 2
-
-mark2_background #f2dcd3
-
-#: Color for marks of type 1 (beige)
-
-mark3_foreground black
-
-#: Color for marks of type 3
-
-mark3_background #f274bc
-
-#: Color for marks of type 1 (violet)
-
-#: }}}
-
-#: Advanced {{{
-
-shell .
-
-#: The shell program to execute. The default value of . means to use
-#: whatever shell is set as the default shell for the current user.
-#: Note that on macOS if you change this, you might need to add
-#: --login to ensure that the shell starts in interactive mode and
-#: reads its startup rc files.
-
-editor .
-
-#: The console editor to use when editing the kitty config file or
-#: similar tasks. A value of . means to use the environment variables
-#: VISUAL and EDITOR in that order. Note that this environment
-#: variable has to be set not just in your shell startup scripts but
-#: system-wide, otherwise kitty will not see it.
-
-close_on_child_death no
-
-#: Close the window when the child process (shell) exits. If no (the
-#: default), the terminal will remain open when the child exits as
-#: long as there are still processes outputting to the terminal (for
-#: example disowned or backgrounded processes). If yes, the window
-#: will close as soon as the child process exits. Note that setting it
-#: to yes means that any background processes still using the terminal
-#: can fail silently because their stdout/stderr/stdin no longer work.
-
-allow_remote_control no
-
-#: Allow other programs to control kitty. If you turn this on other
-#: programs can control all aspects of kitty, including sending text
-#: to kitty windows, opening new windows, closing windows, reading the
-#: content of windows, etc.  Note that this even works over ssh
-#: connections. You can chose to either allow any program running
-#: within kitty to control it, with yes or only programs that connect
-#: to the socket specified with the kitty --listen-on command line
-#: option, if you use the value socket-only. The latter is useful if
-#: you want to prevent programs running on a remote computer over ssh
-#: from controlling kitty.
-
-listen_on none
-
-#: Tell kitty to listen to the specified unix/tcp socket for remote
-#: control connections. Note that this will apply to all kitty
-#: instances. It can be overridden by the kitty --listen-on command
-#: line flag. This option accepts only UNIX sockets, such as
-#: unix:${TEMP}/mykitty or (on Linux) unix:@mykitty. Environment
-#: variables are expanded. If {kitty_pid} is present then it is
-#: replaced by the PID of the kitty process, otherwise the PID of the
-#: kitty process is appended to the value, with a hyphen. This option
-#: is ignored unless you also set allow_remote_control to enable
-#: remote control. See the help for kitty --listen-on for more
-#: details.
-
-# env
-
-#: Specify environment variables to set in all child processes. Note
-#: that environment variables are expanded recursively, so if you
-#: use::
-
-#:     env MYVAR1=a
-#:     env MYVAR2=${MYVAR1}/${HOME}/b
-
-#: The value of MYVAR2 will be a/<path to home directory>/b.
-
-update_check_interval 24
-
-#: Periodically check if an update to kitty is available. If an update
-#: is found a system notification is displayed informing you of the
-#: available update. The default is to check every 24 hrs, set to zero
-#: to disable.
-
-startup_session none
-
-#: Path to a session file to use for all kitty instances. Can be
-#: overridden by using the kitty --session command line option for
-#: individual instances. See
-#: https://sw.kovidgoyal.net/kitty/index.html#sessions in the kitty
-#: documentation for details. Note that relative paths are interpreted
-#: with respect to the kitty config directory. Environment variables
-#: in the path are expanded.
-
-clipboard_control write-clipboard write-primary
-
-#: Allow programs running in kitty to read and write from the
-#: clipboard. You can control exactly which actions are allowed. The
-#: set of possible actions is: write-clipboard read-clipboard write-
-#: primary read-primary. You can additionally specify no-append to
-#: disable kitty's protocol extension for clipboard concatenation. The
-#: default is to allow writing to the clipboard and primary selection
-#: with concatenation enabled. Note that enabling the read
-#: functionality is a security risk as it means that any program, even
-#: one running on a remote server via SSH can read your clipboard.
-
-allow_hyperlinks yes
-
-#: Process hyperlink (OSC 8) escape sequences. If disabled OSC 8
-#: escape sequences are ignored. Otherwise they become clickable
-#: links, that you can click by holding down ctrl+shift and clicking
-#: with the mouse. The special value of ``ask`` means that kitty will
-#: ask before opening the link.
-
-term xterm-kitty
-
-#: The value of the TERM environment variable to set. Changing this
-#: can break many terminal programs, only change it if you know what
-#: you are doing, not because you read some advice on Stack Overflow
-#: to change it. The TERM variable is used by various programs to get
-#: information about the capabilities and behavior of the terminal. If
-#: you change it, depending on what programs you run, and how
-#: different the terminal you are changing it to is, various things
-#: from key-presses, to colors, to various advanced features may not
-#: work.
-
-#: }}}
-
-#: OS specific tweaks {{{
-
-macos_titlebar_color system
-
-#: Change the color of the kitty window's titlebar on macOS. A value
-#: of system means to use the default system color, a value of
-#: background means to use the background color of the currently
-#: active window and finally you can use an arbitrary color, such as
-#: #12af59 or red. WARNING: This option works by using a hack, as
-#: there is no proper Cocoa API for it. It sets the background color
-#: of the entire window and makes the titlebar transparent. As such it
-#: is incompatible with background_opacity. If you want to use both,
-#: you are probably better off just hiding the titlebar with
-#: hide_window_decorations.
-
-macos_option_as_alt no
-
-#: Use the option key as an alt key. With this set to no, kitty will
-#: use the macOS native Option+Key = unicode character behavior. This
-#: will break any Alt+key keyboard shortcuts in your terminal
-#: programs, but you can use the macOS unicode input technique. You
-#: can use the values: left, right, or both to use only the left,
-#: right or both Option keys as Alt, instead.
-
-macos_hide_from_tasks no
-
-#: Hide the kitty window from running tasks (Option+Tab) on macOS.
-
-macos_quit_when_last_window_closed no
-
-#: Have kitty quit when all the top-level windows are closed. By
-#: default, kitty will stay running, even with no open windows, as is
-#: the expected behavior on macOS.
-
-macos_window_resizable yes
-
-#: Disable this if you want kitty top-level (OS) windows to not be
-#: resizable on macOS.
-
-macos_thicken_font 0
-
-#: Draw an extra border around the font with the given width, to
-#: increase legibility at small font sizes. For example, a value of
-#: 0.75 will result in rendering that looks similar to sub-pixel
-#: antialiasing at common font sizes.
-
-macos_traditional_fullscreen no
-
-#: Use the traditional full-screen transition, that is faster, but
-#: less pretty.
-
-macos_show_window_title_in all
-
-#: Show or hide the window title in the macOS window or menu-bar. A
-#: value of window will show the title of the currently active window
-#: at the top of the macOS window. A value of menubar will show the
-#: title of the currently active window in the macOS menu-bar, making
-#: use of otherwise wasted space. all will show the title everywhere
-#: and none hides the title in the window and the menu-bar.
-
-macos_custom_beam_cursor no
-
-#: Enable/disable custom mouse cursor for macOS that is easier to see
-#: on both light and dark backgrounds. WARNING: this might make your
-#: mouse cursor invisible on dual GPU machines.
-
-linux_display_server auto
-
-#: Choose between Wayland and X11 backends. By default, an appropriate
-#: backend based on the system state is chosen automatically. Set it
-#: to x11 or wayland to force the choice.
-
-#: }}}
-
-#: Keyboard shortcuts {{{
-
-#: For a list of key names, see: the GLFW key macros
-#: <https://github.com/kovidgoyal/kitty/blob/master/glfw/glfw3.h#L349>.
-#: The name to use is the part after the GLFW_KEY_ prefix. For a list
-#: of modifier names, see: GLFW mods
-#: <https://www.glfw.org/docs/latest/group__mods.html>
-
-#: On Linux you can also use XKB key names to bind keys that are not
-#: supported by GLFW. See XKB keys
-#: <https://github.com/xkbcommon/libxkbcommon/blob/master/xkbcommon/xkbcommon-
-#: keysyms.h> for a list of key names. The name to use is the part
-#: after the XKB_KEY_ prefix. Note that you can only use an XKB key
-#: name for keys that are not known as GLFW keys.
-
-#: Finally, you can use raw system key codes to map keys, again only
-#: for keys that are not known as GLFW keys. To see the system key
-#: code for a key, start kitty with the kitty --debug-keyboard option.
-#: Then kitty will output some debug text for every key event. In that
-#: text look for ``native_code`` the value of that becomes the key
-#: name in the shortcut. For example:
-
-#: .. code-block:: none
-
-#:     on_key_input: glfw key: 65 native_code: 0x61 action: PRESS mods: 0x0 text: 'a'
-
-#: Here, the key name for the A key is 0x61 and you can use it with::
-
-#:     map ctrl+0x61 something
-
-#: to map ctrl+a to something.
-
-#: You can use the special action no_op to unmap a keyboard shortcut
-#: that is assigned in the default configuration::
-
-#:     map kitty_mod+space no_op
-
-#: You can combine multiple actions to be triggered by a single
-#: shortcut, using the syntax below::
-
-#:     map key combine <separator> action1 <separator> action2 <separator> action3 ...
-
-#: For example::
-
-#:     map kitty_mod+e combine : new_window : next_layout
-
-#: this will create a new window and switch to the next available
-#: layout
-
-#: You can use multi-key shortcuts using the syntax shown below::
-
-#:     map key1>key2>key3 action
-
-#: For example::
-
-#:     map ctrl+f>2 set_font_size 20
-
-kitty_mod ctrl+shift
-
-#: The value of kitty_mod is used as the modifier for all default
-#: shortcuts, you can change it in your kitty.conf to change the
-#: modifiers for all the default shortcuts.
-
-clear_all_shortcuts no
-
-#: You can have kitty remove all shortcut definition seen up to this
-#: point. Useful, for instance, to remove the default shortcuts.
-
-# kitten_alias hints hints --hints-offset=0
-
-#: You can create aliases for kitten names, this allows overriding the
-#: defaults for kitten options and can also be used to shorten
-#: repeated mappings of the same kitten with a specific group of
-#: options. For example, the above alias changes the default value of
-#: kitty +kitten hints --hints-offset to zero for all mappings,
-#: including the builtin ones.
-
-#: Clipboard {{{
-
-map kitty_mod+c copy_to_clipboard
-
-#: There is also a copy_or_interrupt action that can be optionally
-#: mapped to Ctrl+c. It will copy only if there is a selection and
-#: send an interrupt otherwise. Similarly, copy_and_clear_or_interrupt
-#: will copy and clear the selection or send an interrupt if there is
-#: no selection.
-
-map kitty_mod+v  paste_from_clipboard
-map kitty_mod+s  paste_from_selection
-map shift+insert paste_from_selection
-map kitty_mod+o  pass_selection_to_program
-
-#: You can also pass the contents of the current selection to any
-#: program using pass_selection_to_program. By default, the system's
-#: open program is used, but you can specify your own, the selection
-#: will be passed as a command line argument to the program, for
-#: example::
-
-#:     map kitty_mod+o pass_selection_to_program firefox
+scrollback_lines        2000
+scrollback_pager_history_size 4000
 
-#: You can pass the current selection to a terminal program running in
-#: a new kitty window, by using the @selection placeholder::
+copy_on_select          no
+strip_trailing_spaces   smart
+rectangle_select_modifiers ctrl+alt
+clipboard_control       write-clipboard write-primary
 
-#:     map kitty_mod+y new_window less @selection
+kitty_mod               ctrl+shift
 
-#: }}}
+open_url_modifiers      kitty_mod
 
-#: Scrolling {{{
+map kitty_mod+c         copy_to_clipboard
+map kitty_mod+v         paste_from_clipboard
+map kitty_mod+s         paste_from_selection
+map shift+insert        paste_from_selection
+map kitty_mod+o         pass_selection_to_program
 
 map kitty_mod+up        scroll_line_up
 map kitty_mod+k         scroll_line_up
@@ -1054,243 +50,59 @@ map kitty_mod+home      scroll_home
 map kitty_mod+end       scroll_end
 map kitty_mod+h         show_scrollback
 
-#: You can pipe the contents of the current screen + history buffer as
-#: STDIN to an arbitrary program using the ``launch`` function. For
-#: example, the following opens the scrollback buffer in less in an
-#: overlay window::
-
-#:     map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R
-
-#: For more details on piping screen and buffer contents to external
-#: programs, see launch.
-
-#: }}}
-
-#: Window management {{{
-
-map kitty_mod+enter new_window
-
-#: You can open a new window running an arbitrary program, for
-#: example::
-
-#:     map kitty_mod+y      launch mutt
-
-#: You can open a new window with the current working directory set to
-#: the working directory of the current window using::
-
-#:     map ctrl+alt+enter    launch --cwd=current
-
-#: You can open a new window that is allowed to control kitty via the
-#: kitty remote control facility by prefixing the command line with @.
-#: Any programs running in that window will be allowed to control
-#: kitty. For example::
-
-#:     map ctrl+enter launch --allow-remote-control some_program
-
-#: You can open a new window next to the currently active window or as
-#: the first window, with::
-
-#:     map ctrl+n launch --location=neighbor some_program
-#:     map ctrl+f launch --location=first some_program
-
-#: For more details, see launch.
-
-map kitty_mod+n new_os_window
-
-#: Works like new_window above, except that it opens a top level OS
-#: kitty window. In particular you can use new_os_window_with_cwd to
-#: open a window with the current working directory.
-
-map kitty_mod+w close_window
-map kitty_mod+] next_window
-map kitty_mod+[ previous_window
-map kitty_mod+f move_window_forward
-map kitty_mod+b move_window_backward
-map kitty_mod+` move_window_to_top
-map kitty_mod+r start_resizing_window
-map kitty_mod+1 first_window
-map kitty_mod+2 second_window
-map kitty_mod+3 third_window
-map kitty_mod+4 fourth_window
-map kitty_mod+5 fifth_window
-map kitty_mod+6 sixth_window
-map kitty_mod+7 seventh_window
-map kitty_mod+8 eighth_window
-map kitty_mod+9 ninth_window
-map kitty_mod+0 tenth_window
-#: }}}
-
-#: Tab management {{{
-
-map kitty_mod+right next_tab
-map kitty_mod+left  previous_tab
-map kitty_mod+t     new_tab
-map kitty_mod+q     close_tab
-map kitty_mod+.     move_tab_forward
-map kitty_mod+,     move_tab_backward
-map kitty_mod+alt+t set_tab_title
-
-#: You can also create shortcuts to go to specific tabs, with 1 being
-#: the first tab, 2 the second tab and -1 being the previously active
-#: tab, and any number larger than the last tab being the last tab::
-
-#:     map ctrl+alt+1 goto_tab 1
-#:     map ctrl+alt+2 goto_tab 2
-
-#: Just as with new_window above, you can also pass the name of
-#: arbitrary commands to run when using new_tab and use
-#: new_tab_with_cwd. Finally, if you want the new tab to open next to
-#: the current tab rather than at the end of the tabs list, use::
-
-#:     map ctrl+t new_tab !neighbor [optional cmd to run]
-#: }}}
-
-#: Layout management {{{
-
-map kitty_mod+l next_layout
-
-#: You can also create shortcuts to switch to specific layouts::
-
-#:     map ctrl+alt+t goto_layout tall
-#:     map ctrl+alt+s goto_layout stack
-
-#: Similarly, to switch back to the previous layout::
-
-#:    map ctrl+alt+p last_used_layout
-#: }}}
-
-#: Font sizes {{{
-
-#: You can change the font size for all top-level kitty OS windows at
-#: a time or only the current one.
+map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R
+
+map kitty_mod+enter     launch --cwd=current
+map kitty_mod+l         next_layout
+map kitty_mod+t         new_tab
+map kitty_mod+q         close_tab
+map kitty_mod+.         move_tab_forward
+map kitty_mod+,         move_tab_backward
+map kitty_mod+alt+t     set_tab_title
+map kitty_mod+]         next_tab
+map kitty_mod+[         previous_tab
+map kitty_mod+right     next_tab
+map kitty_mod+left      previous_tab
+map kitty_mod+1         goto_tab 1
+map kitty_mod+2         goto_tab 2
+map kitty_mod+3         goto_tab 3
+map kitty_mod+4         goto_tab 4
+map kitty_mod+5         goto_tab 5
+map kitty_mod+6         goto_tab 6
+map kitty_mod+7         goto_tab 7
+map kitty_mod+8         goto_tab 8
+map kitty_mod+9         goto_tab 9
+map kitty_mod+0         goto_tab 0
 
 map kitty_mod+equal     change_font_size all +2.0
 map kitty_mod+minus     change_font_size all -2.0
 map kitty_mod+backspace change_font_size all 0
+# map kitty_mod+f6       change_font_size all 10.0
 
-#: To setup shortcuts for specific font sizes::
-
-#:     map kitty_mod+f6 change_font_size all 10.0
-
-#: To setup shortcuts to change only the current OS window's font
-#: size::
-
-#:     map kitty_mod+f6 change_font_size current 10.0
-#: }}}
-
-#: Select and act on visible text {{{
-
-#: Use the hints kitten to select text and either pass it to an
-#: external program or insert it into the terminal or copy it to the
-#: clipboard.
-
-map kitty_mod+e kitten hints
-
-#: Open a currently visible URL using the keyboard. The program used
-#: to open the URL is specified in open_url_with.
-
-map kitty_mod+p>f kitten hints --type path --program -
-
-#: Select a path/filename and insert it into the terminal. Useful, for
-#: instance to run git commands on a filename output from a previous
-#: git command.
+map kitty_mod+u         kitten unicode_input
+map kitty_mod+f2        edit_config_file
+map kitty_mod+escape    kitty_shell window
 
+map kitty_mod+e         kitten hints
+map kitty_mod+p>f       kitten hints --type path --program -
 map kitty_mod+p>shift+f kitten hints --type path
+map kitty_mod+p>l       kitten hints --type line --program -
+map kitty_mod+p>w       kitten hints --type word --program -
+map kitty_mod+p>h       kitten hints --type hash --program -
+map kitty_mod+p>n       kitten hints --type linenum
+map kitty_mod+p>y       kitten hints --type hyperlink
 
-#: Select a path/filename and open it with the default open program.
-
-map kitty_mod+p>l kitten hints --type line --program -
-
-#: Select a line of text and insert it into the terminal. Use for the
-#: output of things like: ls -1
-
-map kitty_mod+p>w kitten hints --type word --program -
-
-#: Select words and insert into terminal.
-
-map kitty_mod+p>h kitten hints --type hash --program -
-
-#: Select something that looks like a hash and insert it into the
-#: terminal. Useful with git, which uses sha1 hashes to identify
-#: commits
-
-map kitty_mod+p>n kitten hints --type linenum
-
-#: Select something that looks like filename:linenum and open it in
-#: vim at the specified line number.
-
-map kitty_mod+p>y kitten hints --type hyperlink
-
-#: Select a hyperlink (i.e. a URL that has been marked as such by the
-#: terminal program, for example, by ls --hyperlink=auto).
-
-
-#: The hints kitten has many more modes of operation that you can map
-#: to different shortcuts. For a full description see kittens/hints.
-#: }}}
-
-#: Miscellaneous {{{
-
-map kitty_mod+f11    toggle_fullscreen
-map kitty_mod+f10    toggle_maximized
-map kitty_mod+u      kitten unicode_input
-map kitty_mod+f2     edit_config_file
-map kitty_mod+escape kitty_shell window
-
-#: Open the kitty shell in a new window/tab/overlay/os_window to
-#: control kitty using commands.
-
-map kitty_mod+a>m    set_background_opacity +0.1
-map kitty_mod+a>l    set_background_opacity -0.1
-map kitty_mod+a>1    set_background_opacity 1
-map kitty_mod+a>d    set_background_opacity default
-map kitty_mod+delete clear_terminal reset active
-
-#: You can create shortcuts to clear/reset the terminal. For example::
-
-#:     # Reset the terminal
-#:     map kitty_mod+f9 clear_terminal reset active
-#:     # Clear the terminal screen by erasing all contents
-#:     map kitty_mod+f10 clear_terminal clear active
-#:     # Clear the terminal scrollback by erasing it
-#:     map kitty_mod+f11 clear_terminal scrollback active
-#:     # Scroll the contents of the screen into the scrollback
-#:     map kitty_mod+f12 clear_terminal scroll active
-
-#: If you want to operate on all windows instead of just the current
-#: one, use all instead of active.
-
-#: It is also possible to remap Ctrl+L to both scroll the current
-#: screen contents into the scrollback buffer and clear the screen,
-#: instead of just clearing the screen::
-
-#:     map ctrl+l combine : clear_terminal scroll active : send_text normal,application \x0c
-
-
-#: You can tell kitty to send arbitrary (UTF-8) encoded text to the
-#: client program when pressing specified shortcut keys. For example::
-
-#:     map ctrl+alt+a send_text all Special text
-
-#: This will send "Special text" when you press the ctrl+alt+a key
-#: combination.  The text to be sent is a python string literal so you
-#: can use escapes like \x1b to send control codes or \u21fb to send
-#: unicode characters (or you can just input the unicode characters
-#: directly as UTF-8 text). The first argument to send_text is the
-#: keyboard modes in which to activate the shortcut. The possible
-#: values are normal or application or kitty or a comma separated
-#: combination of them.  The special keyword all means all modes. The
-#: modes normal and application refer to the DECCKM cursor key mode
-#: for terminals, and kitty refers to the special kitty extended
-#: keyboard protocol.
-
-#: Another example, that outputs a word and then moves the cursor to
-#: the start of the line (same as pressing the Home key)::
-
-#:     map ctrl+alt+a send_text normal Word\x1b[H
-#:     map ctrl+alt+a send_text application Word\x1bOH
-
-#: }}}
-
-# }}}
 include ./kitty-selenized-black.conf
+
+#: Keyboard shortcuts {{{
+#: For a list of key names, see: the GLFW key macros
+#: <https://github.com/kovidgoyal/kitty/blob/master/glfw/glfw3.h#L349>.
+#: The name to use is the part after the GLFW_KEY_ prefix. For a list
+#: of modifier names, see: GLFW mods
+#: <https://www.glfw.org/docs/latest/group__mods.html>
+#: On Linux you can also use XKB key names to bind keys that are not
+#: supported by GLFW. See XKB keys
+#: <https://github.com/xkbcommon/libxkbcommon/blob/master/xkbcommon/xkbcommon-
+#: keysyms.h> for a list of key names. The name to use is the part
+#: after the XKB_KEY_ prefix. Note that you can only use an XKB key
+#: name for keys that are not known as GLFW keys.
diff --git a/newsboat/read_articles b/newsboat/read_articles
@@ -586,6 +586,11 @@ 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=8913
+https://machinelearningmastery.com/?p=8932
+https://machinelearningmastery.com/?p=8941
+https://machinelearningmastery.com/?p=8955
+https://machinelearningmastery.com/?p=8968
 https://machinelearningmastery.com/?p=9129
 https://machinelearningmastery.com/?p=8999
 https://machinelearningmastery.com/?p=9010
@@ -915,6 +920,8 @@ 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://machinelearningmastery.com/?p=9054
+https://machinelearningmastery.com/?p=9059
 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/
@@ -1741,12 +1748,16 @@ PubMed:31748403
 http://xpenguin.club/Stadia-Special/
 https://standardebooks.org/ebooks/andre-norton/star-born
 https://standardebooks.org/ebooks/george-eliot/middlemarch
+https://machinelearningmastery.com/?p=9070
 https://aiweirdness.com/post/189313008792
+https://machinelearningmastery.com/?p=9081
 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://treyhunner.com/2019/11/black-friday-sale-gift-python-morsels-to-a-friend
+https://machinelearningmastery.com/?p=9100
 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
@@ -1754,21 +1765,27 @@ yt:video:mxA9Gyyu6Rg
 yt:video:50p0Ao06cD0
 yt:video:82NBMvx6vFY
 yt:video:hMSByvFHOro
+https://treyhunner.com/2019/12/cyber-monday-python-sales
+https://machinelearningmastery.com/?p=9109
 https://lukesmith.xyz/2019.html#im-back-6-new-videos-out-and-more-coming
 yt:video:3NJIj47Tusw
+https://machinelearningmastery.com/?p=9158
 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://machinelearningmastery.com/?p=9171
 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
+https://machinelearningmastery.com/?p=9177
 http://xpenguin.club/BOOTLEGpenguin/
 https://standardebooks.org/ebooks/alexandre-dumas/the-three-musketeers/william-robson
 yt:video:VBNTAtpf_d4
 yt:video:_hNMfVIsyIc
 https://medium.com/p/f06efa6355fd
+https://machinelearningmastery.com/?p=9184
 https://medium.com/p/52c88557230d
 https://medium.com/p/90bcb80890ba
 https://standardebooks.org/ebooks/aldous-huxley/antic-hay
@@ -1776,6 +1793,8 @@ 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://medium.com/p/f338d64ba821
+https://erikbern.com/2019/12/09/hiring-at-better.html
+https://machinelearningmastery.com/?p=9200
 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/
@@ -1797,16 +1816,28 @@ 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=9210
+https://machinelearningmastery.com/?p=9790
+https://machinelearningmastery.com/?p=9220
 https://machinelearningmastery.com/?p=9861
+https://machinelearningmastery.com/?p=9255
+https://machinelearningmastery.com/?p=9266
+https://machinelearningmastery.com/?p=9272
 https://machinelearningmastery.com/?p=9289
+https://machinelearningmastery.com/?p=9298
+https://machinelearningmastery.com/?p=9320
 https://medium.com/p/9dc8d64c1a89
+https://machinelearningmastery.com/?p=9346
+https://emptysqua.re/blog/you-look-so-zen/
 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/
+https://machinelearningmastery.com/?p=9354
 PubMed:31904799
 https://erikbern.com/2019/12/31/hiring-always-means-tradeoffs.html
 http://www.fast.ai/2020/01/07/data-questionnaire
+https://machinelearningmastery.com/?p=9370
 https://statmodeling.stat.columbia.edu/?p=41918
 https://statmodeling.stat.columbia.edu/?p=42783
 https://statmodeling.stat.columbia.edu/?p=41671
@@ -1835,16 +1866,44 @@ https://statmodeling.stat.columbia.edu/?p=42888
 http://xpenguin.club/HexShards-Tape1/
 https://emptysqua.re/blog/year-end-2019-photos/
 https://emptysqua.re/blog/yokoji-zmc-august-2019/
+http://treyhunner.com/2018/03/tuple-unpacking-improves-python-code-readability
+http://treyhunner.com/2018/04/keyword-arguments-in-python
+http://treyhunner.com/2018/04/how-to-make-the-most-of-your-first-pycon
+http://treyhunner.com/2018/06/how-to-make-an-iterator-in-python
+http://treyhunner.com/2018/09/stop-writing-lambda-expressions
+http://treyhunner.com/2018/10/asterisks-in-python-what-they-are-and-how-to-use-them
+http://treyhunner.com/2018/11/python-morsels-sale-52-weeks-of-python
+http://treyhunner.com/2018/11/python-cyber-monday-sales
+http://treyhunner.com/2018/12/why-you-should-be-using-pathlib
+http://treyhunner.com/2019/01/no-really-pathlib-is-great
+http://treyhunner.com/2019/03/python-deep-comparisons-and-code-readability
+http://treyhunner.com/2019/03/unique-and-sentinel-values-in-python
+http://treyhunner.com/2019/03/abusing-and-overusing-list-comprehensions-in-python
+http://treyhunner.com/2019/04/making-the-most-of-the-pycon-sprints
+http://treyhunner.com/2019/04/why-you-shouldnt-inherit-from-list-and-dict-in-python
+http://treyhunner.com/2019/04/is-it-a-class-or-a-function-its-a-callable
+http://treyhunner.com/2019/05/python-builtins-worth-learning
+http://treyhunner.com/2019/06/loop-better-a-deeper-look-at-iteration-in-python
+http://treyhunner.com/2019/11/black-friday-sale-gift-python-morsels-to-a-friend
+http://treyhunner.com/2019/12/cyber-monday-python-sales
 https://aiweirdness.com/post/190160884937
+https://machinelearningmastery.com/?p=9377
+https://machinelearningmastery.com/?p=9385
+https://machinelearningmastery.com/?p=9726
 https://statmodeling.stat.columbia.edu/?p=42907
 http://www.fast.ai/2020/01/13/self_supervised
 https://medium.com/p/3a93573d4f07
+https://medium.com/p/3748efe5fcdf
 https://erikbern.com/2020/01/13/how-to-hire-smarter-than-the-market-a-toy-model.html
+https://treyhunner.com/2020/01/passing-functions-as-arguments
+https://machinelearningmastery.com/?p=9389
 https://statmodeling.stat.columbia.edu/?p=42926
 https://statmodeling.stat.columbia.edu/?p=42051
 https://distill.pub/2020/attribution-baselines
 https://statmodeling.stat.columbia.edu/?p=42936
 http://www.fast.ai/2020/01/16/fast_template
+https://machinelearningmastery.com/?p=9781
+https://machinelearningmastery.com/?p=9397
 http://www.fast.ai/2020/01/18/gitblog
 http://www.fast.ai/2020/01/19/blog_screenshots
 https://aiweirdness.com/post/190313362077
@@ -1853,11 +1912,15 @@ http://www.fast.ai/2020/01/20/nb2md
 http://www.fast.ai/2020/01/20/blog_overview
 yt:video:an0RFLzJ5Yo
 https://davebucklin.com/play/2020/01/19/expenses-ledger.html
+https://machinelearningmastery.com/?p=9424
 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://machinelearningmastery.com/?p=9454
+https://machinelearningmastery.com/?p=9462
 yt:video:6YfRgI0xrfI
 https://aiweirdness.com/post/190441069697
 yt:video:n7lYxXrzbjk
+https://machinelearningmastery.com/?p=9482
 https://www.calnewport.com/?p=7464
 https://www.mrmoneymustache.com/?p=15961
 https://davebucklin.com/work/2020/01/25/essential-diagrams.html
@@ -1868,6 +1931,9 @@ 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
+blog/i-am-now-an-official-ultralight-hiker
+blog/a-modern-mutt-setup
+blog/a-modern-mutt-setup-part-two
 http://www.rosipov.com/blog/randomly-generated-dungeons
 http://www.rosipov.com/blog/spawning-evenly-distributed-mobs
 http://www.rosipov.com/blog/mob-level-distribution
@@ -1876,16 +1942,20 @@ http://www.rosipov.com/blog/hackmud-first-impressions
 http://www.rosipov.com/blog/prius-adventures-a-year-later
 http://www.rosipov.com/blog/journey-of-a-friend
 http://www.rosipov.com/blog/desktop-notifications-from-chrome-secure-shell
+http://www.rosipov.com/blog/a-trip-to-salt-lake-city
 http://www.rosipov.com/blog/automating-octopress-publishing
 http://www.rosipov.com/blog/making-a-packing-spreadsheet
 http://www.rosipov.com/blog/minimalist-phone-launcher
 http://www.rosipov.com/blog/cross-platform-vim-plug-setup
 http://www.rosipov.com/blog/my-book-has-been-published
 http://www.rosipov.com/blog/status-bar-color-in-vim-terminal-mode
+https://machinelearningmastery.com/?p=9492
 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
 yt:video:f9qNXV01yzg
+https://machinelearningmastery.com/?p=9499
+https://machinelearningmastery.com/?p=9511
 PubMed:32003078
 yt:video:qRr1KRKVeh8
 https://aiweirdness.com/post/190569291992
@@ -1893,11 +1963,14 @@ https://lukesmith.xyz/2019.html#big-fix-for-the-stsuckless-crashonemoji-error
 https://emptysqua.re/blog/village-zendo-meditation/
 yt:video:2xl56IJGKwY
 yt:video:K3B8fIdixo0
+https://machinelearningmastery.com/?p=9525
 https://medium.com/p/2ee9cef26ac1
+https://machinelearningmastery.com/?p=9533
 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://aiweirdness.com/post/190721709472
+https://machinelearningmastery.com/?p=9548
 https://standardebooks.org/ebooks/george-eliot/the-mill-on-the-floss
 https://jvns.ca/blog/compensation-questions/
 https://distill.pub/2020/growing-ca
@@ -1911,32 +1984,50 @@ 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://medium.com/p/af9ddb561721
+https://machinelearningmastery.com/?p=9562
+https://machinelearningmastery.com/?p=9573
+https://machinelearningmastery.com/?p=9589
+https://machinelearningmastery.com/?p=9597
+https://machinelearningmastery.com/?p=9634
+https://machinelearningmastery.com/?p=9648
+https://machinelearningmastery.com/?p=9657
+https://machinelearningmastery.com/?p=9674
 PubMed:32103158
 https://emptysqua.re/blog/how-not-to-panic/
 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://machinelearningmastery.com/?p=9682
 https://lukesmith.xyz/2020.html#new-video-on-new-books
 https://lukesmith.xyz/2020.html#newold-episode-of-not-related-out-every-scientific-paper-youve-read-is-wrong
 https://lukesmith.xyz/2020.html#big-fix-for-the-stsuckless-crashonemoji-error
 https://standardebooks.org/ebooks/charles-dickens/oliver-twist
 https://www.mrmoneymustache.com/?p=16221
 https://aiweirdness.com/post/611853103688499200
+https://machinelearningmastery.com/?p=9692
+https://machinelearningmastery.com/?p=9705
+https://machinelearningmastery.com/?p=9716
 http://www.fast.ai/2020/03/09/coronavirus
 https://standardebooks.org/ebooks/herman-melville/short-fiction
+https://medium.com/p/9ca398573d2f
 https://statmodeling.stat.columbia.edu/?p=43291
+https://distill.pub/2020/circuits/zoom-in
 https://emptysqua.re/blog/joren-shuso-hossen/
 https://www.calnewport.com/?p=7544
+https://machinelearningmastery.com/?p=9738
 PubMed:32160449
+https://machinelearningmastery.com/?p=9757
 yt:video:A6JXNZQwoYE
 https://lukesmith.xyz/2020.html#ill-be-at-linuxfest-southeast-june-1214-in-charlotte-nc
 https://jvns.ca/blog/2020/03/15/writing-shaders-with-signed-distance-functions/
 https://aiweirdness.com/post/612669075940900864
+https://machinelearningmastery.com/?p=9764
 https://distill.pub/2020/grand-tour
 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=47783
 http://www.spoon-tamago.com/?p=47794
 http://www.spoon-tamago.com/?p=47805
 http://www.spoon-tamago.com/?p=47817
@@ -1954,40 +2045,68 @@ 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://machinelearningmastery.com/?p=9802
 https://standardebooks.org/ebooks/agatha-christie/poirot-investigates
+https://machinelearningmastery.com/?p=9843
+http://www.spoon-tamago.com/?p=47891
 http://www.fast.ai/2020/03/20/saving-the-mask
 https://aiweirdness.com/post/613123668121419776
+https://machinelearningmastery.com/?p=9988
 https://lukesmith.xyz/2020.html#font-gone-crazy-in-larbs
 http://lukeoakdenrayner.wordpress.com/?p=9140
 https://standardebooks.org/ebooks/o-henry/short-fiction
 https://standardebooks.org/ebooks/cicero/tusculan-disputations/c-d-yonge
+https://machinelearningmastery.com/?p=10025
 https://standardebooks.org/ebooks/alexander-pushkin/eugene-onegin/henry-spalding
 https://standardebooks.org/ebooks/john-galsworthy/the-forsyte-saga
+http://www.spoon-tamago.com/?p=47905
 http://www.spoon-tamago.com/?p=47925
 https://medium.com/p/448a3f6f110a
 http://www.spoon-tamago.com/?p=47929
 https://aiweirdness.com/post/613754259190808576
+https://machinelearningmastery.com/?p=10039
+https://emptysqua.re/blog/climbing-under-lockdown/
+https://machinelearningmastery.com/?p=10045
 https://standardebooks.org/ebooks/edith-wharton/the-age-of-innocence
 https://standardebooks.org/ebooks/william-morris/the-water-of-the-wondrous-isles
 https://standardebooks.org/ebooks/epictetus/discourses/george-long
 http://www.fast.ai/2020/03/31/tech-policy-govt
 yt:video:Q-Y5xqDkC50
+http://thesheriffofsodium.com/?p=2147
 http://www.spoon-tamago.com/?p=47947
 http://www.spoon-tamago.com/?p=47962
+http://www.spoon-tamago.com/?p=47979
+http://www.spoon-tamago.com/?p=47992
+http://www.spoon-tamago.com/?p=47999
 https://www.mrmoneymustache.com/?p=16380
 https://aiweirdness.com/post/614209593176899584
+https://machinelearningmastery.com/?p=10070
+https://machinelearningmastery.com/?p=10096
+https://machinelearningmastery.com/?p=10100
+https://machinelearningmastery.com/?p=10141
 https://lukesmith.xyz/2020.html#lincucks-fest-has-been-canceled
 https://distill.pub/2020/circuits
 https://distill.pub/2020/circuits/early-vision
 https://standardebooks.org/ebooks/charlotte-bronte/shirley
 http://www.spoon-tamago.com/?p=48020
 https://aiweirdness.com/post/614935849124102144
+https://machinelearningmastery.com/?p=10155
+https://machinelearningmastery.com/?p=10169
 http://www.fast.ai/2020/04/13/masks-summary
+https://emptysqua.re/blog/how-buddhism-survived-japanese-internment/
+https://emptysqua.re/blog/journal-of-the-plague-year/
 http://www.spoon-tamago.com/?p=48028
+http://www.spoon-tamago.com/?p=48040
+https://machinelearningmastery.com/?p=10176
 https://standardebooks.org/ebooks/william-hope-hodgson/the-night-land
+https://www.mrmoneymustache.com/?p=16438
 http://www.spoon-tamago.com/?p=48052
+http://www.spoon-tamago.com/?p=48066
+https://machinelearningmastery.com/?p=10187
 http://www.spoon-tamago.com/?p=48076
 https://aiweirdness.com/post/615654447163621376
+http://thesheriffofsodium.com/?p=2277
+https://machinelearningmastery.com/?p=10199
 https://standardebooks.org/ebooks/henry-david-thoreau/a-week-on-the-concord-and-merrimack-rivers
 http://www.fast.ai/2020/04/20/skeptics-masks
 yt:video:1mr3issv79s
@@ -1997,15 +2116,24 @@ https://medium.com/p/2178597ba921
 http://www.spoon-tamago.com/?p=48085
 http://www.spoon-tamago.com/?p=48094
 https://standardebooks.org/ebooks/compton-mackenzie/sinister-street
+https://machinelearningmastery.com/?p=10211
+https://machinelearningmastery.com/?p=10220
 https://lukesmith.xyz/2020.html#check-out-my-dwm-and-dwmblocks-builds-and-say-goodbye-to-i3
 https://standardebooks.org/ebooks/william-shakespeare/poetry
 https://aiweirdness.com/post/616292784700276736
 https://standardebooks.org/ebooks/robert-frost/new-hampshire
+http://www.spoon-tamago.com/?p=48102
 PubMed:32333753
+https://machinelearningmastery.com/?p=10227
 https://jvns.ca/blog/2020/04/27/new-zine-how-containers-work/
+http://www.spoon-tamago.com/?p=48116
+https://machinelearningmastery.com/?p=10239
 https://jvns.ca/blog/2020/04/29/why-strace-doesnt-work-in-docker/
+https://machinelearningmastery.com/?p=10244
+http://www.spoon-tamago.com/?p=48129
 https://standardebooks.org/ebooks/diogenes-laertius/the-lives-and-opinions-of-eminent-philosophers/c-d-yonge
 https://www.mrmoneymustache.com/?p=16093
+https://machinelearningmastery.com/?p=10257
 https://lukesmith.xyz/2020.html#new-website-setup-also-a-statusbar-module-for-network-traffic
 http://www.spoon-tamago.com/?p=48139
 http://www.rosipov.com/blog/adjusting-to-wfh
@@ -2015,14 +2143,23 @@ https://distill.pub/2020/bayesian-optimization
 https://standardebooks.org/ebooks/john-bunyan/the-pilgrims-progress
 https://medium.com/p/3ca8bff4e71a
 http://www.spoon-tamago.com/?p=48159
+https://machinelearningmastery.com/?p=10272
+https://machinelearningmastery.com/?p=10282
+http://www.spoon-tamago.com/?p=48167
 https://aiweirdness.com/post/617558958271561728
 https://standardebooks.org/ebooks/richard-marsh/the-beetle
+http://thesheriffofsodium.com/?p=2333
+https://machinelearningmastery.com/?p=10288
+https://machinelearningmastery.com/?p=10298
 https://lukesmith.xyz/2020.html#why-do-i-so-rarely-talk-about-politics-on-my-channel
 https://lukesmith.xyz/2020.html#politics-matters-most-to-slaves
 https://standardebooks.org/ebooks/nathaniel-hawthorne/the-scarlet-letter
 https://standardebooks.org/ebooks/james-branch-cabell/the-cream-of-the-jest
 https://aiweirdness.com/post/618298096035741696
+https://machinelearningmastery.com/?p=10526
+https://machinelearningmastery.com/?p=10317
 https://emptysqua.re/blog/who-can-you-trust/
+https://emptysqua.re/blog/meditation-at-home/
 https://emptysqua.re/blog/python-language-summit-2020/
 https://standardebooks.org/ebooks/thomas-hardy/the-mayor-of-casterbridge
 https://standardebooks.org/ebooks/edgar-rice-burroughs/the-warlord-of-mars
@@ -2032,19 +2169,32 @@ https://standardebooks.org/ebooks/edgar-rice-burroughs/the-gods-of-mars
 https://standardebooks.org/ebooks/sarah-orne-jewett/the-country-of-the-pointed-firs
 https://standardebooks.org/ebooks/charlotte-perkins-gilman/herland
 https://medium.com/p/786646707dcb
+http://thesheriffofsodium.com/?p=2408
+http://thesheriffofsodium.com/?p=2457
 http://www.spoon-tamago.com/?p=48183
 http://www.spoon-tamago.com/?p=48195
 http://www.spoon-tamago.com/?p=48220
 http://www.spoon-tamago.com/?p=48237
 http://www.spoon-tamago.com/?p=48266
+http://www.spoon-tamago.com/?p=48274
 http://www.spoon-tamago.com/?p=48253
 http://www.spoon-tamago.com/?p=48299
 http://www.spoon-tamago.com/?p=48312
 https://aiweirdness.com/post/619190785060028416
 http://www.rosipov.com/blog/numenera-for-dnd-players
 http://www.rosipov.com/blog/numenera-for-dnd-dms
+https://machinelearningmastery.com/?p=10326
+https://machinelearningmastery.com/?p=10335
+https://machinelearningmastery.com/?p=10346
+https://machinelearningmastery.com/?p=10357
+https://machinelearningmastery.com/?p=10365
+https://machinelearningmastery.com/?p=10637
+https://machinelearningmastery.com/?p=10530
+https://machinelearningmastery.com/?p=10800
+https://machinelearningmastery.com/?p=10817
 PubMed:32428651
 PubMed:32477638
+https://sanctum.geek.nz/arabesque/?p=2195
 https://lukesmith.xyz/2020.html#new-video-showcase-of-my-dwm-build
 https://lukesmith.xyz/2020.html#the-advantages-of-dwmblocks
 https://lukesmith.xyz/2020.html#ripping-and-spliting-and-tagging-audiobooks-and-albums-from-youtube
@@ -2066,26 +2216,322 @@ https://lukesmith.xyz/2020.html#oooof-big-server-downage
 https://lukesmith.xyz/2020.html#ill-have-server-downtime-tomorrow
 https://standardebooks.org/ebooks/e-e-smith/triplanetary
 http://www.spoon-tamago.com/?p=48330
+http://www.spoon-tamago.com/?p=48339
+https://machinelearningmastery.com/?p=10824
 https://lukesmith.xyz/2020.html#le-shill-lion
 https://lukesmith.xyz/2020.html#gnutards-unequivocally-destroyed-eternally
 https://lukesmith.xyz/2020.html#i-have-my-own-search-engine-now
 https://standardebooks.org/ebooks/edward-lear/nonsense-books
 https://standardebooks.org/ebooks/eugene-oneill/the-hairy-ape
 https://aiweirdness.com/post/620645957819875328
+https://machinelearningmastery.com/?p=10834
 https://jvns.ca/blog/2020/06/14/questions-to-help-you-learn/
 https://standardebooks.org/ebooks/yevgeny-zamyatin/we/gregory-zilboorg
 https://standardebooks.org/ebooks/edgar-rice-burroughs/at-the-earths-core
+http://tastetesterdoc.com/?p=227
+http://www.spoon-tamago.com/?p=48350
+https://machinelearningmastery.com/?p=10842
 https://standardebooks.org/ebooks/charlotte-bronte/villette
 http://www.fast.ai/2020/06/16/CADE-fellows
 http://www.spoon-tamago.com/?p=48369
+https://machinelearningmastery.com/?p=10853
 https://distill.pub/2020/circuits/curve-detectors
 https://aiweirdness.com/post/621186154843324416
 http://www.spoon-tamago.com/?p=48384
+http://www.spoon-tamago.com/?p=48400
+http://www.spoon-tamago.com/?p=48412
+https://machinelearningmastery.com/?p=10858
+https://lukesmith.xyz/2020.html#anyone-done-peertube-before
+https://lukesmith.xyz/2020.html#a-guide-to-using-rss-to-replace-social-media
+http://www.spoon-tamago.com/?p=48421
+https://machinelearningmastery.com/?p=10869
+http://www.spoon-tamago.com/?p=48439
 https://standardebooks.org/ebooks/l-frank-baum/the-marvelous-land-of-oz
 https://standardebooks.org/ebooks/lewis-carroll/a-tangled-tale
+http://www.spoon-tamago.com/?p=48453
+http://www.spoon-tamago.com/?p=48469
+https://machinelearningmastery.com/?p=10539
+http://thesheriffofsodium.com/?p=2523
+https://machinelearningmastery.com/?p=10877
 /
+https://www.romanzolotarev.com/website.html
+https://www.romanzolotarev.com/standalone.html
+https://www.romanzolotarev.com/macos/textedit.html
+https://www.romanzolotarev.com/js-ramda-elm.html
+https://www.romanzolotarev.com/screencasts.html
+https://www.romanzolotarev.com/typing.html
+https://www.romanzolotarev.com/jekyll.html
+https://www.romanzolotarev.com/github.html
+https://www.romanzolotarev.com/macos/security.html
+https://www.romanzolotarev.com/vim.html
+https://www.romanzolotarev.com/macos/openbsd-installer.html
+https://www.romanzolotarev.com/macos/cups.html
+https://www.romanzolotarev.com/borg.html
+https://www.romanzolotarev.com/rssg.html
+https://www.romanzolotarev.com/ssg.html
+https://www.romanzolotarev.com/vi.html
+https://www.romanzolotarev.com/tmux.html
+https://www.romanzolotarev.com/markdown.html
+https://www.romanzolotarev.com/ws.html
+https://www.romanzolotarev.com/openbsd/nsd.html
+https://www.romanzolotarev.com/openbsd/smtpd-forward.html
+https://www.romanzolotarev.com/openbsd/acme-client.html
+https://www.romanzolotarev.com/openbsd/httpd.html
+https://www.romanzolotarev.com/stagit.html
+https://www.romanzolotarev.com/git.html
+https://www.romanzolotarev.com/openbsd/yubikey.html
+https://www.romanzolotarev.com/openbsd/mtp.html
+https://www.romanzolotarev.com/openbsd/exfat.html
+https://www.romanzolotarev.com/openbsd/mount.html
+https://www.romanzolotarev.com/openbsd/cwm.html
+https://www.romanzolotarev.com/openbsd/xenodm.html
+https://www.romanzolotarev.com/ssh.html
+https://www.romanzolotarev.com/pass.html
+https://www.romanzolotarev.com/diceware.html
+https://www.romanzolotarev.com/openbsd/timezone.html
+https://www.romanzolotarev.com/xdg-mime.html
+https://www.romanzolotarev.com/newsboat.html
+https://www.romanzolotarev.com/openbsd/bioctl-crypto.html
+https://www.romanzolotarev.com/openbsd/lenovo-thinkpad-x1c5.html
+https://www.romanzolotarev.com/openbsd/dock.html
+https://www.romanzolotarev.com/openbsd/geteltorito.html
+https://www.romanzolotarev.com/openbsd/disk.html
+https://www.romanzolotarev.com/random.html
+https://www.romanzolotarev.com/openbsd/upgrade.html
+https://www.romanzolotarev.com/openbsd/install.html
+https://www.romanzolotarev.com/openbsd/vultr.html
+https://www.romanzolotarev.com/openbsd/oams.html
+http://www.spoon-tamago.com/?p=48483
 https://standardebooks.org/ebooks/william-shakespeare/a-midsummer-nights-dream
 https://standardebooks.org/ebooks/andre-norton/the-time-traders
+http://www.fast.ai/2020/06/26/particle-sizes
+https://machinelearningmastery.com/?p=10873
+http://www.spoon-tamago.com/?p=48500
 https://standardebooks.org/ebooks/edgar-rice-burroughs/pellucidar
 https://standardebooks.org/ebooks/jules-verne/journey-to-the-center-of-the-earth/f-a-malleson
 https://standardebooks.org/ebooks/fyodor-dostoevsky/the-gambler/c-j-hogarth
+http://www.spoon-tamago.com/?p=48515
+https://machinelearningmastery.com/?p=10887
+https://machinelearningmastery.com/?p=10976
+https://standardebooks.org/ebooks/e-e-smith/first-lensman
+http://thesheriffofsodium.com/?p=369
+http://www.spoon-tamago.com/?p=48533
+http://www.spoon-tamago.com/?p=48564
+http://www.spoon-tamago.com/?p=48577
+https://machinelearningmastery.com/?p=10982
+https://machinelearningmastery.com/?p=10992
+https://standardebooks.org/ebooks/thomas-malory/le-morte-darthur
+http://www.spoon-tamago.com/?p=48593
+http://www.spoon-tamago.com/?p=48609
+http://www.spoon-tamago.com/?p=48624
+https://machinelearningmastery.com/?p=10997
+https://lukesmith.xyz/2020.html#ill-be-returning-to-make-videos-on-monday-check-out-peertube
+https://machinelearningmastery.com/?p=11007
+https://standardebooks.org/ebooks/james-branch-cabell/jurgen
+http://www.fast.ai/2020/07/10/upgrade-your-mask
+http://thesheriffofsodium.com/?p=2280
+https://machinelearningmastery.com/?p=11019
+https://lukesmith.xyz/2020.html#ill-be-migrating-to-a-superior-server-for-peertube
+https://standardebooks.org/ebooks/e-m-forster/howards-end
+https://medium.com/p/f7051040e0d7
+http://www.spoon-tamago.com/?p=48635
+https://lukesmith.xyz/2020.html#peertube-will-be-down-for-migration-today
+https://lukesmith.xyz/2020.html#peertube-migration-is-done-no-obvious-errors-full-video-sync-to-happen-soon
+https://standardebooks.org/ebooks/vladimir-korolenko/short-fiction/aline-delano_sergius-stepniak_william-westall_thomas-seltzer_the-russian-review_marian-fell_clarence-manning
+https://standardebooks.org/ebooks/fyodor-dostoevsky/poor-folk/c-j-hogarth
+http://www.spoon-tamago.com/?p=48641
+https://machinelearningmastery.com/?p=11024
+https://distill.pub/2020/selforg/mnist
+https://distill.pub/2020/selforg
+https://standardebooks.org/ebooks/agatha-christie/the-man-in-the-brown-suit
+https://standardebooks.org/ebooks/thomas-hardy/jude-the-obscure
+https://standardebooks.org/ebooks/jack-london/the-iron-heel
+https://standardebooks.org/ebooks/p-g-wodehouse/piccadilly-jim
+https://standardebooks.org/ebooks/william-shakespeare/the-comedy-of-errors
+https://standardebooks.org/ebooks/leo-tolstoy/war-and-peace/louise-maude_aylmer-maude
+https://standardebooks.org/ebooks/leonid-andreyev/satans-diary/herman-bernstein
+https://standardebooks.org/ebooks/p-g-wodehouse/ukridge-stories
+https://standardebooks.org/ebooks/sinclair-lewis/main-street
+https://standardebooks.org/ebooks/william-wells-brown/clotel
+https://standardebooks.org/ebooks/fritz-leiber/short-fiction
+https://standardebooks.org/ebooks/john-w-campbell/the-black-star-passes
+https://standardebooks.org/ebooks/samuel-butler/erewhon
+https://standardebooks.org/ebooks/james-weldon-johnson/the-autobiography-of-an-ex-colored-man
+https://standardebooks.org/ebooks/thornton-w-burgess/green-meadow-stories
+https://standardebooks.org/ebooks/h-rider-haggard/she/maurice-greiffenhagen_charles-h-m-kerr
+https://standardebooks.org/ebooks/lytton-strachey/queen-victoria
+https://standardebooks.org/ebooks/thornton-w-burgess/green-forest-stories
+https://standardebooks.org/ebooks/mark-twain/roughing-it
+http://www.fast.ai/2020/08/19/data-ethics
+http://www.fast.ai/2020/08/20/soumith-forward
+http://www.fast.ai/2020/08/21/fastai2-launch
+http://thesheriffofsodium.com/2020/08/04/grand-rounds-the-rise-and-fall-of-usmle-step-1/
+http://thesheriffofsodium.com/?p=2731
+http://www.spoon-tamago.com/?p=48939
+http://www.spoon-tamago.com/?p=48956
+http://www.spoon-tamago.com/?p=48953
+https://www.spoon-tamago.com/?p=48986
+https://www.spoon-tamago.com/?p=48998
+https://www.spoon-tamago.com/?p=49013
+https://www.spoon-tamago.com/?p=49034
+https://www.spoon-tamago.com/?p=49054
+https://www.spoon-tamago.com/?p=49063
+https://www.spoon-tamago.com/?p=49081
+https://machinelearningmastery.com/?p=10306
+https://machinelearningmastery.com/?p=11030
+https://machinelearningmastery.com/?p=10396
+https://machinelearningmastery.com/?p=10375
+https://machinelearningmastery.com/?p=10545
+https://machinelearningmastery.com/?p=11275
+https://machinelearningmastery.com/?p=10705
+https://machinelearningmastery.com/?p=10739
+https://machinelearningmastery.com/?p=10790
+https://machinelearningmastery.com/?p=10417
+https://lukesmith.xyz/2020.html#open-call-for-larbs-users
+https://lukesmith.xyz/2020.html#redesigning-the-website
+https://lukesmith.xyz/2020.html#recommended-libreopen-source-crypto-wallet
+https://lukesmith.xyz/2020.html#internet-has-been-cucking-me
+https://lukesmith.xyz/2020.html#only-mediocre-minds-nitpick-new-article
+https://lukesmith.xyz/2020.html#new-documentaries-and-lectures-on-peertube
+https://standardebooks.org/ebooks/william-congreve/the-way-of-the-world
+https://machinelearningmastery.com/?p=10431
+https://www.spoon-tamago.com/?p=49096
+https://www.spoon-tamago.com/?p=49107
+https://emptysqua.re/blog/extreme-modelling-in-practice/
+https://standardebooks.org/ebooks/frederick-douglass/narrative-of-the-life-of-frederick-douglass
+https://standardebooks.org/ebooks/phillis-wheatley/poems-on-various-subjects-religious-and-moral
+http://thesheriffofsodium.com/?p=2836
+http://thesheriffofsodium.com/?p=2867
+https://www.spoon-tamago.com/?p=49122
+https://www.spoon-tamago.com/?p=49134
+https://www.spoon-tamago.com/?p=49146
+https://www.spoon-tamago.com/?p=49163
+https://machinelearningmastery.com/?p=10437
+https://machinelearningmastery.com/?p=10442
+https://distill.pub/2020/communicating-with-interactive-articles
+https://emptysqua.re/blog/american-religion-in-americas-time-of-crisis/
+https://standardebooks.org/ebooks/eleanor-h-porter/pollyanna
+https://standardebooks.org/ebooks/james-stephens/irish-fairy-tales
+https://standardebooks.org/ebooks/thomas-mann/bashan-and-i/herman-george-scheffauer
+https://standardebooks.org/ebooks/harriet-e-wilson/our-nig
+https://standardebooks.org/ebooks/william-shakespeare/romeo-and-juliet
+https://standardebooks.org/ebooks/william-shakespeare/the-tempest
+https://standardebooks.org/ebooks/karel-capek/r-u-r/paul-selver_nigel-playfair
+http://www.fast.ai/2020/09/11/smoke-filter
+http://thesheriffofsodium.com/?p=2982
+https://www.spoon-tamago.com/?p=49197
+https://www.spoon-tamago.com/?p=49210
+https://www.spoon-tamago.com/?p=49230
+https://www.spoon-tamago.com/?p=49250
+https://www.spoon-tamago.com/?p=49282
+https://www.spoon-tamago.com/?p=49298
+https://www.spoon-tamago.com/?p=49314
+https://www.spoon-tamago.com/?p=49342
+https://www.spoon-tamago.com/?p=49365
+https://www.spoon-tamago.com/?p=49375
+https://machinelearningmastery.com/?p=10456
+https://machinelearningmastery.com/?p=10463
+https://machinelearningmastery.com/?p=10475
+https://machinelearningmastery.com/?p=10482
+https://machinelearningmastery.com/?p=10504
+https://machinelearningmastery.com/?p=10512
+https://machinelearningmastery.com/?p=10522
+https://machinelearningmastery.com/?p=10950
+https://machinelearningmastery.com/?p=10960
+https://machinelearningmastery.com/?p=10965
+https://lukesmith.xyz/poetic.html
+https://lukesmith.xyz/2020.html#working-on-something-big-possible-momentarily-larbs-downage
+https://lukesmith.xyz/credit-cards.html
+https://www.spoon-tamago.com/?p=49399
+https://www.spoon-tamago.com/?p=49410
+https://machinelearningmastery.com/?p=10668
+https://machinelearningmastery.com/?p=10675
+https://www.spoon-tamago.com/?p=49428
+https://machinelearningmastery.com/?p=10683
+https://www.spoon-tamago.com/?p=49452
+https://www.spoon-tamago.com/?p=49464
+https://standardebooks.org/ebooks/leonid-andreyev/he-who-gets-slapped/gregory-zilboorg
+https://standardebooks.org/ebooks/booth-tarkington/the-turmoil
+https://standardebooks.org/ebooks/anatole-france/penguin-island/a-w-evans
+https://standardebooks.org/ebooks/leo-tolstoy/hadji-murad/aylmer-maude
+http://thesheriffofsodium.com/?p=3007
+https://www.spoon-tamago.com/?p=49484
+https://www.spoon-tamago.com/?p=49494
+https://www.spoon-tamago.com/?p=49525
+https://machinelearningmastery.com/?p=10556
+https://machinelearningmastery.com/?p=10573
+https://machinelearningmastery.com/?p=10580
+https://lukesmith.xyz/2020.html#muttwizard-is-better-now
+https://standardebooks.org/ebooks/guy-de-maupassant/pierre-and-jean/clara-bell
+https://standardebooks.org/ebooks/henryk-sienkiewicz/quo-vadis/jeremiah-curtin
+https://standardebooks.org/ebooks/e-nesbit/five-children-and-it
+https://machinelearningmastery.com/?p=10585
+https://machinelearningmastery.com/?p=10656
+https://www.spoon-tamago.com/?p=49546
+https://machinelearningmastery.com/?p=10591
+https://www.spoon-tamago.com/?p=49564
+https://www.spoon-tamago.com/?p=49595
+https://machinelearningmastery.com/?p=10597
+https://www.spoon-tamago.com/?p=49622
+https://standardebooks.org/ebooks/giovanni-boccaccio/the-decameron/john-payne
+https://standardebooks.org/ebooks/sun-tzu/the-art-of-war/lionel-giles
+https://www.spoon-tamago.com/?p=49639
+https://machinelearningmastery.com/?p=11073
+https://machinelearningmastery.com/?p=11098
+http://thesheriffofsodium.com/?p=3043
+https://www.spoon-tamago.com/?p=49655
+https://machinelearningmastery.com/?p=11108
+https://www.spoon-tamago.com/?p=49666
+https://standardebooks.org/ebooks/ford-madox-ford/some-do-not
+https://machinelearningmastery.com/?p=11138
+http://www.fast.ai/2020/10/28/code-of-conduct
+https://machinelearningmastery.com/?p=11146
+https://www.spoon-tamago.com/?p=49688
+https://machinelearningmastery.com/?p=11722
+https://emptysqua.re/blog/rip-hazel/
+https://www.spoon-tamago.com/?p=49716
+https://standardebooks.org/ebooks/william-shakespeare/julius-caesar
+https://standardebooks.org/ebooks/william-shakespeare/king-lear
+https://www.spoon-tamago.com/?p=49731
+https://www.spoon-tamago.com/?p=49754
+https://www.spoon-tamago.com/?p=49771
+https://machinelearningmastery.com/?p=11749
+https://machinelearningmastery.com/?p=11764
+https://machinelearningmastery.com/?p=11111
+yt:video:FARlg6C23jM
+https://www.mrmoneymustache.com/?p=16043
+https://machinelearningmastery.com/?p=11574
+https://emptysqua.re/blog/these-unreliable-united-states/
+https://www.spoon-tamago.com/?p=49784
+http://zachholman.com/posts/write-angry
+https://www.spoon-tamago.com/?p=49791
+https://machinelearningmastery.com/?p=11512
+https://www.spoon-tamago.com/?p=49807
+https://distill.pub/2020/understanding-rl-vision
+https://standardebooks.org/ebooks/edgar-allan-poe/short-fiction
+https://standardebooks.org/ebooks/henry-fielding/the-history-of-tom-jones-a-foundling
+http://thesheriffofsodium.com/?p=3235
+http://zachholman.com/posts/my-favorite-tweet
+https://www.spoon-tamago.com/?p=49833
+https://www.spoon-tamago.com/?p=49848
+https://machinelearningmastery.com/?p=11191
+https://machinelearningmastery.com/?p=11198
+https://www.spoon-tamago.com/?p=49862
+https://standardebooks.org/ebooks/oscar-wilde/lord-arthur-saviles-crime-and-other-stories
+https://machinelearningmastery.com/?p=11857
+https://standardebooks.org/ebooks/virginia-woolf/jacobs-room
+https://standardebooks.org/ebooks/freeman-wills-crofts/the-cask
+https://www.spoon-tamago.com/?p=49890
+https://www.spoon-tamago.com/?p=49913
+https://machinelearningmastery.com/?p=11210
+https://machinelearningmastery.com/?p=11224
+https://standardebooks.org/ebooks/henry-george/progress-and-poverty
+http://thesheriffofsodium.com/?p=3271
+https://www.spoon-tamago.com/?p=49934
+https://www.spoon-tamago.com/?p=49963
+https://www.spoon-tamago.com/?p=49981
+https://www.spoon-tamago.com/?p=50008
+https://treyhunner.com/2020/11/short-python-screencasts-for-$50-slash-year
+https://treyhunner.com/2020/11/python-cyber-monday-sales
+https://machinelearningmastery.com/?p=11538
+https://machinelearningmastery.com/?p=11243
diff --git a/nvim/.netrwhist b/nvim/.netrwhist
@@ -1,5 +1,6 @@
 let g:netrw_dirhistmax  =10
-let g:netrw_dirhistcnt =5
+let g:netrw_dirhistcnt =6
+let g:netrw_dirhist_6='/home/beau/.config/nnn'
 let g:netrw_dirhist_5='/home/beau/.config/nvim/plugged/vim-css-color/autoload'
 let g:netrw_dirhist_4='/home/beau/.config/nvim/plugged/vim-css-color'
 let g:netrw_dirhist_3='/home/beau/.config/sxhkd'
diff --git a/nvim/autoload/plug.vim b/nvim/autoload/plug.vim
@@ -25,7 +25,7 @@
 "   Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
 "   Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
 "
-"   " Using a non-master branch
+"   " Using a non-default branch
 "   Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
 "
 "   " Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
@@ -106,7 +106,7 @@ if s:is_win && &shellslash
 else
   let s:me = resolve(expand('<sfile>:p'))
 endif
-let s:base_spec = { 'branch': 'master', 'frozen': 0 }
+let s:base_spec = { 'branch': '', 'frozen': 0 }
 let s:TYPE = {
 \   'string':  type(''),
 \   'list':    type([]),
@@ -116,6 +116,90 @@ let s:TYPE = {
 let s:loaded = get(s:, 'loaded', {})
 let s:triggers = get(s:, 'triggers', {})
 
+function! s:isabsolute(dir) abort
+  return a:dir =~# '^/' || (has('win32') && a:dir =~? '^\%(\\\|[A-Z]:\)')
+endfunction
+
+function! s:git_dir(dir) abort
+  let gitdir = s:trim(a:dir) . '/.git'
+  if isdirectory(gitdir)
+    return gitdir
+  endif
+  if !filereadable(gitdir)
+    return ''
+  endif
+  let gitdir = matchstr(get(readfile(gitdir), 0, ''), '^gitdir: \zs.*')
+  if len(gitdir) && !s:isabsolute(gitdir)
+    let gitdir = a:dir . '/' . gitdir
+  endif
+  return isdirectory(gitdir) ? gitdir : ''
+endfunction
+
+function! s:git_origin_url(dir) abort
+  let gitdir = s:git_dir(a:dir)
+  let config = gitdir . '/config'
+  if empty(gitdir) || !filereadable(config)
+    return ''
+  endif
+  return matchstr(join(readfile(config)), '\[remote "origin"\].\{-}url\s*=\s*\zs\S*\ze')
+endfunction
+
+function! s:git_revision(dir) abort
+  let gitdir = s:git_dir(a:dir)
+  let head = gitdir . '/HEAD'
+  if empty(gitdir) || !filereadable(head)
+    return ''
+  endif
+
+  let line = get(readfile(head), 0, '')
+  let ref = matchstr(line, '^ref: \zs.*')
+  if empty(ref)
+    return line
+  endif
+
+  if filereadable(gitdir . '/' . ref)
+    return get(readfile(gitdir . '/' . ref), 0, '')
+  endif
+
+  if filereadable(gitdir . '/packed-refs')
+    for line in readfile(gitdir . '/packed-refs')
+      if line =~# ' ' . ref
+        return matchstr(line, '^[0-9a-f]*')
+      endif
+    endfor
+  endif
+
+  return ''
+endfunction
+
+function! s:git_local_branch(dir) abort
+  let gitdir = s:git_dir(a:dir)
+  let head = gitdir . '/HEAD'
+  if empty(gitdir) || !filereadable(head)
+    return ''
+  endif
+  let branch = matchstr(get(readfile(head), 0, ''), '^ref: refs/heads/\zs.*')
+  return len(branch) ? branch : 'HEAD'
+endfunction
+
+function! s:git_origin_branch(spec)
+  if len(a:spec.branch)
+    return a:spec.branch
+  endif
+
+  " The file may not be present if this is a local repository
+  let gitdir = s:git_dir(a:spec.dir)
+  let origin_head = gitdir.'/refs/remotes/origin/HEAD'
+  if len(gitdir) && filereadable(origin_head)
+    return matchstr(get(readfile(origin_head), 0, ''),
+                  \ '^ref: refs/remotes/origin/\zs.*')
+  endif
+
+  " The command may not return the name of a branch in detached HEAD state
+  let result = s:lines(s:system('git symbolic-ref --short HEAD', a:spec.dir))
+  return v:shell_error ? '' : result[-1]
+endfunction
+
 if s:is_win
   function! s:plug_call(fn, ...)
     let shellslash = &shellslash
@@ -179,7 +263,7 @@ function! s:define_commands()
   endif
   if has('win32')
   \ && &shellslash
-  \ && (&shell =~# 'cmd\.exe' || &shell =~# 'powershell\.exe')
+  \ && (&shell =~# 'cmd\(\.exe\)\?$' || &shell =~# 'powershell\(\.exe\)\?$')
     return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.')
   endif
   if !has('nvim')
@@ -251,7 +335,7 @@ endfunction
 
 function! plug#end()
   if !exists('g:plugs')
-    return s:err('Call plug#begin() first')
+    return s:err('plug#end() called without calling plug#begin() first')
   endif
 
   if exists('#PlugLOD')
@@ -372,7 +456,7 @@ 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)')
+    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
@@ -419,7 +503,7 @@ if s:is_win
     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'
+    if &shell =~# 'powershell\(\.exe\)\?$'
       let cmd = '& ' . cmd
     endif
     return [batchfile, cmd]
@@ -632,16 +716,38 @@ function! plug#(repo, ...)
     let g:plugs[name] = spec
     let s:loaded[name] = get(s:loaded, name, 0)
   catch
-    return s:err(v:exception)
+    return s:err(repo . ' ' . v:exception)
   endtry
 endfunction
 
 function! s:parse_options(arg)
   let opts = copy(s:base_spec)
   let type = type(a:arg)
+  let opt_errfmt = 'Invalid argument for "%s" option of :Plug (expected: %s)'
   if type == s:TYPE.string
+    if empty(a:arg)
+      throw printf(opt_errfmt, 'tag', 'string')
+    endif
     let opts.tag = a:arg
   elseif type == s:TYPE.dict
+    for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as']
+      if has_key(a:arg, opt)
+      \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
+        throw printf(opt_errfmt, opt, 'string')
+      endif
+    endfor
+    for opt in ['on', 'for']
+      if has_key(a:arg, opt)
+      \ && type(a:arg[opt]) != s:TYPE.list
+      \ && (type(a:arg[opt]) != s:TYPE.string || empty(a:arg[opt]))
+        throw printf(opt_errfmt, opt, 'string or list')
+      endif
+    endfor
+    if has_key(a:arg, 'do')
+      \ && type(a:arg.do) != s:TYPE.funcref
+      \ && (type(a:arg.do) != s:TYPE.string || empty(a:arg.do))
+        throw printf(opt_errfmt, 'do', 'string or funcref')
+    endif
     call extend(opts, a:arg)
     if has_key(opts, 'dir')
       let opts.dir = s:dirpath(s:plug_expand(opts.dir))
@@ -698,7 +804,7 @@ function! s:syntax()
   syn match plugNumber /[0-9]\+[0-9.]*/ contained
   syn match plugBracket /[[\]]/ contained
   syn match plugX /x/ contained
-  syn match plugDash /^-/
+  syn match plugDash /^-\{1}\ /
   syn match plugPlus /^+/
   syn match plugStar /^*/
   syn match plugMessage /\(^- \)\@<=.*/
@@ -716,6 +822,7 @@ function! s:syntax()
   syn match plugError /^x.*/
   syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/
   syn match plugH2 /^.*:\n-\+$/
+  syn match plugH2 /^-\{2,}/
   syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean
   hi def link plug1       Title
   hi def link plug2       Repeat
@@ -864,8 +971,15 @@ endfunction
 
 function! s:chsh(swap)
   let prev = [&shell, &shellcmdflag, &shellredir]
-  if !s:is_win && a:swap
-    set shell=sh shellredir=>%s\ 2>&1
+  if !s:is_win
+    set shell=sh
+  endif
+  if a:swap
+    if &shell =~# 'powershell\(\.exe\)\?$' || &shell =~# 'pwsh$'
+      let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s'
+    elseif &shell =~# 'sh' || &shell =~# 'cmd\(\.exe\)\?$'
+      set shellredir=>%s\ 2>&1
+    endif
   endif
   return prev
 endfunction
@@ -898,7 +1012,7 @@ function! s:regress_bar()
 endfunction
 
 function! s:is_updated(dir)
-  return !empty(s:system_chomp('git log --pretty=format:"%h" "HEAD...HEAD@{1}"', a:dir))
+  return !empty(s:system_chomp(['git', 'log', '--pretty=format:%h', 'HEAD...HEAD@{1}'], a:dir))
 endfunction
 
 function! s:do(pull, force, todo)
@@ -935,6 +1049,7 @@ function! s:do(pull, force, todo)
         endif
       elseif type == s:TYPE.funcref
         try
+          call s:load_plugin(spec)
           let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged')
           call spec.do({ 'name': name, 'status': status, 'force': a:force })
         catch
@@ -961,10 +1076,11 @@ 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:git_revision(a:spec.dir)
+  if !empty(output) && !s:hash_match(sha, s:lines(output)[0])
+    let credential_helper = s:git_version_requirement(2) ? '-c credential.helper= ' : ''
     let output = s:system(
-          \ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
+          \ 'git '.credential_helper.'fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
   endif
   return output
 endfunction
@@ -1079,11 +1195,16 @@ function! s:update_impl(pull, force, args) abort
   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' : '') : ''
+  let s:clone_opt = []
+  if get(g:, 'plug_shallow', 1)
+    call extend(s:clone_opt, ['--depth', '1'])
+    if s:git_version_requirement(1, 7, 10)
+      call add(s:clone_opt, '--no-single-branch')
+    endif
+  endif
 
   if has('win32unix') || has('wsl')
-    let s:clone_opt .= ' -c core.eol=lf -c core.autocrlf=input'
+    call extend(s:clone_opt, ['-c', 'core.eol=lf', '-c', 'core.autocrlf=input'])
   endif
 
   let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : ''
@@ -1171,7 +1292,7 @@ function! s:update_finish()
         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')
+        let branch = s:git_origin_branch(spec)
         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)
@@ -1264,7 +1385,7 @@ function! s:job_cb(fn, job, ch, data)
 endfunction
 
 function! s:nvim_cb(job_id, data, event) dict abort
-  return a:event == 'stdout' ?
+  return (a:event == 'stdout' || a:event == 'stderr') ?
     \ 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
@@ -1273,12 +1394,15 @@ 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
+    if has_key(a:opts, 'dir')
+      let job.cwd = a:opts.dir
+    endif
+    let argv = a:cmd
     call extend(job, {
     \ 'on_stdout': function('s:nvim_cb'),
+    \ 'on_stderr': function('s:nvim_cb'),
     \ 'on_exit':   function('s:nvim_cb'),
     \ })
     let jid = s:plug_call('jobstart', argv, job)
@@ -1291,9 +1415,16 @@ function! s:spawn(name, cmd, opts)
             \ 'Invalid arguments (or job table is full)']
     endif
   elseif s:vim8
+    let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"script": 0})'))
+    if has_key(a:opts, 'dir')
+      let cmd = s:with_cd(cmd, a:opts.dir, 0)
+    endif
+    let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd]
     let jid = job_start(s:is_win ? join(argv, ' ') : argv, {
     \ 'out_cb':   function('s:job_cb', ['s:job_out_cb',  job]),
+    \ 'err_cb':   function('s:job_cb', ['s:job_out_cb',  job]),
     \ 'exit_cb':  function('s:job_cb', ['s:job_exit_cb', job]),
+    \ 'err_mode': 'raw',
     \ 'out_mode': 'raw'
     \})
     if job_status(jid) == 'run'
@@ -1304,7 +1435,7 @@ function! s:spawn(name, cmd, opts)
       let job.lines   = ['Failed to start job']
     endif
   else
-    let job.lines = s:lines(call('s:system', [cmd]))
+    let job.lines = s:lines(call('s:system', has_key(a:opts, 'dir') ? [a:cmd, a:opts.dir] : [a:cmd]))
     let job.error = v:shell_error != 0
     let job.running = 0
   endif
@@ -1401,8 +1532,14 @@ while 1 " Without TCO, Vim stack is bound to explode
     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 })
+        let cmd = ['git', 'fetch']
+        if has_tag && !empty(globpath(spec.dir, '.git/shallow'))
+          call extend(cmd, ['--depth', '99999999'])
+        endif
+        if !empty(prog)
+          call add(cmd, prog)
+        endif
+        call s:spawn(name, cmd, { 'dir': spec.dir })
       else
         let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 }
       endif
@@ -1410,12 +1547,14 @@ while 1 " Without TCO, Vim stack is bound to explode
       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 })
+    let cmd = ['git', 'clone']
+    if !has_tag
+      call extend(cmd, s:clone_opt)
+    endif
+    if !empty(prog)
+      call add(cmd, prog)
+    endif
+    call s:spawn(name, extend(cmd, [spec.uri, s:trim(spec.dir)]), { 'new': 1 })
   endif
 
   if !s:jobs[name].running
@@ -1452,7 +1591,7 @@ 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_CLONE_OPT = ' '.join(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()
@@ -1989,7 +2128,7 @@ function! s:update_ruby()
     end
   } if VIM::evaluate('s:mac_gui') == 1
 
-  clone_opt = VIM::evaluate('s:clone_opt')
+  clone_opt = VIM::evaluate('s:clone_opt').join(' ')
   progress = VIM::evaluate('s:progress_opt(1)')
   nthr.times do
     mtx.synchronize do
@@ -2055,13 +2194,29 @@ function! s:shellesc_sh(arg)
   return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'"
 endfunction
 
+" Escape the shell argument based on the shell.
+" Vim and Neovim's shellescape() are insufficient.
+" 1. shellslash determines whether to use single/double quotes.
+"    Double-quote escaping is fragile for cmd.exe.
+" 2. It does not work for powershell.
+" 3. It does not work for *sh shells if the command is executed
+"    via cmd.exe (ie. cmd.exe /c sh -c command command_args)
+" 4. It does not support batchfile syntax.
+"
+" Accepts an optional dictionary with the following keys:
+" - shell: same as Vim/Neovim 'shell' option.
+"          If unset, fallback to 'cmd.exe' on Windows or 'sh'.
+" - script: If truthy and shell is cmd.exe, escape for batchfile syntax.
 function! plug#shellescape(arg, ...)
+  if a:arg =~# '^[A-Za-z0-9_/:.-]\+$'
+    return a:arg
+  endif
   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'
+  if shell =~# 'cmd\(\.exe\)\?$'
     return s:shellesc_cmd(a:arg, script)
-  elseif shell =~# 'powershell\.exe' || shell =~# 'pwsh$'
+  elseif shell =~# 'powershell\(\.exe\)\?$' || shell =~# 'pwsh$'
     return s:shellesc_ps1(a:arg)
   endif
   return s:shellesc_sh(a:arg)
@@ -2105,8 +2260,24 @@ 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
+    if type(a:cmd) == s:TYPE.list
+      " Neovim's system() supports list argument to bypass the shell
+      " but it cannot set the working directory for the command.
+      " Assume that the command does not rely on the shell.
+      if has('nvim') && a:0 == 0
+        return system(a:cmd)
+      endif
+      let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})'))
+      if &shell =~# 'powershell\(\.exe\)\?$'
+        let cmd = '& ' . cmd
+      endif
+    else
+      let cmd = a:cmd
+    endif
+    if a:0 > 0
+      let cmd = s:with_cd(cmd, a:1, type(a:cmd) != s:TYPE.list)
+    endif
+    if s:is_win && type(a:cmd) != s:TYPE.list
       let [batchfile, cmd] = s:batchfile(cmd)
     endif
     return system(cmd)
@@ -2126,18 +2297,17 @@ 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 result = [s:git_local_branch(a:spec.dir), s:git_origin_url(a:spec.dir)]
     let remote = result[-1]
-    if v:shell_error
+    if empty(remote)
       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 sha = s:git_revision(a:spec.dir)
+      if empty(sha)
         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)',
@@ -2145,8 +2315,9 @@ function! s:git_validate(spec, check_branch)
                       \ 'PlugUpdate required.'], "\n")
       endif
     elseif a:check_branch
-      let branch = result[0]
+      let current_branch = result[0]
       " Check tag
+      let origin_branch = s:git_origin_branch(a:spec)
       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 !~ '\*'
@@ -2154,25 +2325,26 @@ function! s:git_validate(spec, check_branch)
                 \ (empty(tag) ? 'N/A' : tag), a:spec.tag)
         endif
       " Check branch
-      elseif a:spec.branch !=# branch
+      elseif origin_branch !=# current_branch
         let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.',
-              \ branch, a:spec.branch)
+              \ current_branch, origin_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')
+        let [ahead, behind] = split(s:lastline(s:system([
+        \ 'git', 'rev-list', '--count', '--left-right',
+        \ printf('HEAD...origin/%s', origin_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)
+                  \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', origin_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)
+                  \ origin_branch, ahead)
           endif
         endif
       endif
@@ -2185,7 +2357,9 @@ 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))
+    return s:system(s:is_win
+    \ ? 'rmdir /S /Q '.plug#shellescape(a:dir)
+    \ : ['rm', '-rf', a:dir])
   endif
 endfunction
 
@@ -2267,6 +2441,7 @@ endfunction
 function! s:delete(range, force)
   let [l1, l2] = a:range
   let force = a:force
+  let err_count = 0
   while l1 <= l2
     let line = getline(l1)
     if line =~ '^- ' && isdirectory(line[2:])
@@ -2275,11 +2450,22 @@ function! s:delete(range, force)
       let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1)
       let force = force || answer > 1
       if answer
-        call s:rm_rf(line[2:])
+        let err = 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))
+        if empty(err)
+          call setline(l1, '~'.line[1:])
+          let s:clean_count += 1
+        else
+          delete _
+          call append(l1 - 1, s:format_message('x', line[1:], err))
+          let l2 += len(s:lines(err))
+          let err_count += 1
+        endif
+        let msg = printf('Removed %d directories.', s:clean_count)
+        if err_count > 0
+          let msg .= printf(' Failed to remove %d directories.', err_count)
+        endif
+        call setline(4, msg)
         setlocal nomodifiable
       endif
     endif
@@ -2294,7 +2480,7 @@ function! s:upgrade()
   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)))
+    let out = s:system(['git', 'clone', '--depth', '1', s:plug_src, tmp])
     if v:shell_error
       return s:err('Error upgrading vim-plug: '. out)
     endif
@@ -2488,18 +2674,23 @@ function! s:diff()
     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
+      let branch = s:git_origin_branch(v)
+      if len(branch)
+        let range = origin ? '..origin/'.branch : 'HEAD@{1}..'
+        let cmd = ['git', 'log', '--graph', '--color=never']
+        if s:git_version_requirement(2, 10, 0)
+          call add(cmd, '--no-show-signature')
+        endif
+        call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range])
+        if has_key(v, 'rtp')
+          call extend(cmd, ['--', 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
       endif
       let bar .= '='
       call s:progress_bar(2, bar, len(total))
@@ -2561,7 +2752,7 @@ function! s:snapshot(force, ...) abort
   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)
+    let sha = s:git_revision(g:plugs[name].dir)
     if !empty(sha)
       call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha))
       redraw
diff --git a/nvim/autoload/plug.vim.old b/nvim/autoload/plug.vim.old
@@ -99,7 +99,13 @@ 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'))
+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(''),
@@ -110,10 +116,42 @@ let s:TYPE = {
 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(fnamemodify(expand(a:1), ':p'))
+    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)
@@ -121,7 +159,7 @@ function! plug#begin(...)
   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
+  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
 
@@ -139,6 +177,16 @@ function! s:define_commands()
   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)
@@ -353,24 +401,25 @@ if s:is_win
 
   " Copied from fzf
   function! s:wrap_cmds(cmds)
-    let use_chcp = executable('sed')
-    return map([
+    let cmds = [
       \ '@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"')
+    \ + ['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 = tempname().'.bat'
+    let batchfile = s:plug_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 = plug#shellescape(batchfile, {'shell': &shell, 'script': 0})
+    if &shell =~# 'powershell\.exe'
       let cmd = '& ' . cmd
     endif
     return [batchfile, cmd]
@@ -575,7 +624,7 @@ function! plug#(repo, ...)
   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 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)
@@ -595,7 +644,7 @@ function! s:parse_options(arg)
   elseif type == s:TYPE.dict
     call extend(opts, a:arg)
     if has_key(opts, 'dir')
-      let opts.dir = s:dirpath(expand(opts.dir))
+      let opts.dir = s:dirpath(s:plug_expand(opts.dir))
     endif
   else
     throw 'Invalid argument type (expected: string or dictionary)'
@@ -606,7 +655,7 @@ endfunction
 function! s:infer_properties(name, repo)
   let repo = a:repo
   if s:is_local_plug(repo)
-    return { 'dir': s:dirpath(expand(repo)) }
+    return { 'dir': s:dirpath(s:plug_expand(repo)) }
   else
     if repo =~ ':'
       let uri = repo
@@ -759,7 +808,7 @@ function! s:finish_bindings()
 endfunction
 
 function! s:prepare(...)
-  if empty(getcwd())
+  if empty(s:plug_getcwd())
     throw 'Invalid current working directory. Cannot proceed.'
   endif
 
@@ -915,7 +964,7 @@ function! s:checkout(spec)
   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)
+          \ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir)
   endif
   return output
 endfunction
@@ -1120,12 +1169,12 @@ function! s:update_finish()
           endif
         endif
         call s:log4(name, 'Checking out '.tag)
-        let out = s:system('git checkout -q '.s:esc(tag).' -- 2>&1', spec.dir)
+        let out = s:system('git checkout -q '.plug#shellescape(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)
+        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))
@@ -1169,7 +1218,7 @@ function! s:job_abort()
       silent! call job_stop(j.jobid)
     endif
     if j.new
-      call s:system('rm -rf ' . plug#shellescape(g:plugs[name].dir))
+      call s:rm_rf(g:plugs[name].dir)
     endif
   endfor
   let s:jobs = {}
@@ -1232,7 +1281,7 @@ function! s:spawn(name, cmd, opts)
     \ 'on_stdout': function('s:nvim_cb'),
     \ 'on_exit':   function('s:nvim_cb'),
     \ })
-    let jid = jobstart(argv, job)
+    let jid = s:plug_call('jobstart', argv, job)
     if jid > 0
       let job.jobid = jid
     else
@@ -1289,9 +1338,10 @@ function! s:bar()
 endfunction
 
 function! s:logpos(name)
-  for i in range(4, line('$'))
+  let max = line('$')
+  for i in range(4, max > 4 ? max : 4)
     if getline(i) =~# '^[-+x*] '.a:name.':'
-      for j in range(i + 1, line('$'))
+      for j in range(i + 1, max > 5 ? max : 5)
         if getline(j) !~ '^ '
           return [i, j - 1]
         endif
@@ -2001,16 +2051,20 @@ 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$'
+  if shell =~# 'cmd\.exe'
     return s:shellesc_cmd(a:arg, script)
-  elseif shell =~# 'powershell\.exe$' || shell =~# 'pwsh$'
+  elseif shell =~# 'powershell\.exe' || shell =~# 'pwsh$'
     return s:shellesc_ps1(a:arg)
   endif
-  return shellescape(a:arg)
+  return s:shellesc_sh(a:arg)
 endfunction
 
 function! s:glob_dir(path)
@@ -2163,7 +2217,7 @@ function! s:clean(force)
 
   let allowed = {}
   for dir in dirs
-    let allowed[s:dirpath(fnamemodify(dir, ':h:h'))] = 1
+    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
@@ -2236,7 +2290,7 @@ endfunction
 function! s:upgrade()
   echo 'Downloading the latest version of vim-plug'
   redraw
-  let tmp = tempname()
+  let tmp = s:plug_tempname()
   let new = tmp . '/plug.vim'
 
   try
@@ -2435,7 +2489,9 @@ function! s:diff()
     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)'))
+      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
@@ -2485,7 +2541,7 @@ function! s:revert()
     return
   endif
 
-  call s:system('git reset --hard HEAD@{1} && git checkout '.s:esc(g:plugs[name].branch).' --', g:plugs[name].dir)
+  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
@@ -2513,7 +2569,7 @@ function! s:snapshot(force, ...) abort
   endfor
 
   if a:0 > 0
-    let fn = expand(a:1)
+    let fn = s:plug_expand(a:1)
     if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?'))
       return
     endif
diff --git a/nvim/init.vim b/nvim/init.vim
@@ -23,7 +23,8 @@ call plug#begin('~/.config/nvim/plugged')
     Plug 'frazrepo/vim-rainbow'
     Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() } }
 
-    Plug 'ap/vim-css-color', { 'for': [ 'css', 'scss' ] }
+    Plug 'neoclide/coc.nvim', {'branch': 'release'}
+    " Plug 'ap/vim-css-color', { 'for': [ 'css', 'scss' ] }
 
     " theming
     syntax on
@@ -108,13 +109,6 @@ nnoremap <leader>n :NnnPicker %:p:h<CR>
     map <C-k> <C-w>k
     map <C-l> <C-w>l
 
-" Splits open at the bottom and right.
-    set splitbelow splitright
-
-" shortcut split opening
-    nnoremap <leader>h :split<Space>
-    nnoremap <leader>v :vsplit<Space>
-
 " Alt-hjkl to resize splits
     noremap <A-h> :vertical resize -5<CR>
     noremap <A-l> :vertical resize +5<CR>
@@ -124,6 +118,7 @@ nnoremap <leader>n :NnnPicker %:p:h<CR>
 " Ctrl maps for buffers
     map <C-b> :buffers<CR>
     map <C-Up> :bnext<CR>
+    map <C-n> :bnext<CR>
     map <C-Down> :bprevious<CR>
 
 " run Black with F9
@@ -249,3 +244,6 @@ nnoremap <leader>n :NnnPicker %:p:h<CR>
     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"]
+
+    " coc
+source $HOME/.config/nvim/plugins/coc.vim
diff --git a/nvim/plugins/coc.vim b/nvim/plugins/coc.vim
@@ -0,0 +1,129 @@
+" Some servers have issues with backup files, see #649.
+set nobackup
+set nowritebackup
+
+" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable
+" delays and poor user experience.
+set updatetime=300
+
+" Don't pass messages to |ins-completion-menu|.
+set shortmess+=c
+
+" Always show the signcolumn, otherwise it would shift the text each time
+" diagnostics appear/become resolved.
+if has("patch-8.1.1564")
+  " Recently vim can merge signcolumn and number column into one
+  set signcolumn=number
+else
+  set signcolumn=yes
+endif
+
+" Use tab for trigger completion with characters ahead and navigate.
+" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
+" other plugin before putting this into your config.
+inoremap <silent><expr> <TAB>
+      \ pumvisible() ? "\<C-n>" :
+      \ <SID>check_back_space() ? "\<TAB>" :
+      \ coc#refresh()
+inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
+
+function! s:check_back_space() abort
+  let col = col('.') - 1
+  return !col || getline('.')[col - 1]  =~# '\s'
+endfunction
+
+" Use <c-space> to trigger completion.
+if has('nvim')
+  inoremap <silent><expr> <c-space> coc#refresh()
+else
+  inoremap <silent><expr> <c-@> coc#refresh()
+endif
+
+" Make <CR> auto-select the first completion item and notify coc.nvim to
+" format on enter, <cr> could be remapped by other vim plugin
+inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm()
+                              \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
+
+" Use `[g` and `]g` to navigate diagnostics
+" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
+nmap <silent> [g <Plug>(coc-diagnostic-prev)
+nmap <silent> ]g <Plug>(coc-diagnostic-next)
+
+" GoTo code navigation.
+nmap <silent> gd <Plug>(coc-definition)
+nmap <silent> gy <Plug>(coc-type-definition)
+nmap <silent> gi <Plug>(coc-implementation)
+nmap <silent> gr <Plug>(coc-references)
+
+" Use K to show documentation in preview window.
+nnoremap <silent> K :call <SID>show_documentation()<CR>
+
+function! s:show_documentation()
+  if (index(['vim','help'], &filetype) >= 0)
+    execute 'h '.expand('<cword>')
+  elseif (coc#rpc#ready())
+    call CocActionAsync('doHover')
+  else
+    execute '!' . &keywordprg . " " . expand('<cword>')
+  endif
+endfunction
+
+" Highlight the symbol and its references when holding the cursor.
+autocmd CursorHold * silent call CocActionAsync('highlight')
+
+" Symbol renaming.
+nmap <leader>rn <Plug>(coc-rename)
+
+" Formatting selected code.
+xmap <leader>f  <Plug>(coc-format-selected)
+nmap <leader>f  <Plug>(coc-format-selected)
+
+augroup mygroup
+  autocmd!
+  " Setup formatexpr specified filetype(s).
+  autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
+  " Update signature help on jump placeholder.
+  autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
+augroup end
+
+" Applying codeAction to the selected region.
+" Example: `<leader>aap` for current paragraph
+xmap <leader>a  <Plug>(coc-codeaction-selected)
+nmap <leader>a  <Plug>(coc-codeaction-selected)
+
+" Remap keys for applying codeAction to the current buffer.
+nmap <leader>ac  <Plug>(coc-codeaction)
+" Apply AutoFix to problem on the current line.
+nmap <leader>qf  <Plug>(coc-fix-current)
+
+" Add `:Format` command to format current buffer.
+command! -nargs=0 Format :call CocAction('format')
+
+" Add `:Fold` command to fold current buffer.
+command! -nargs=? Fold :call     CocAction('fold', <f-args>)
+
+" Add `:OR` command for organize imports of the current buffer.
+command! -nargs=0 OR   :call     CocAction('runCommand', 'editor.action.organizeImport')
+
+" Add (Neo)Vim's native statusline support.
+" NOTE: Please see `:h coc-status` for integrations with external plugins that
+" provide custom statusline: lightline.vim, vim-airline.
+set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}
+
+" Mappings for CoCList
+" Show all diagnostics.
+nnoremap <silent><nowait> <space>a  :<C-u>CocList diagnostics<cr>
+" Manage extensions.
+nnoremap <silent><nowait> <space>e  :<C-u>CocList extensions<cr>
+" Show commands.
+nnoremap <silent><nowait> <space>c  :<C-u>CocList commands<cr>
+" Find symbol of current document.
+nnoremap <silent><nowait> <space>o  :<C-u>CocList outline<cr>
+" Search workspace symbols.
+nnoremap <silent><nowait> <space>s  :<C-u>CocList -I symbols<cr>
+" Do default action for next item.
+nnoremap <silent><nowait> <space>j  :<C-u>CocNext<CR>
+" Do default action for previous item.
+nnoremap <silent><nowait> <space>k  :<C-u>CocPrev<CR>
+" Resume latest coc list.
+nnoremap <silent><nowait> <space>p  :<C-u>CocListResume<CR>
diff --git a/zsh/.zshrc b/zsh/.zshrc
@@ -117,6 +117,9 @@ source /usr/share/zsh/plugins/zsh-you-should-use/you-should-use.plugin.zsh 2>/de
 # Search repos for programs that can't be found
 source /usr/share/doc/pkgfile/command-not-found.zsh 2>/dev/null
 
+# fix dircolors for Selenized
+export LS_COLORS="$LS_COLORS:ow=1;7;34:st=30;44:su=30;41"
+
 SPACESHIP_PROMPT_ADD_NEWLINE=false
 SPACESHIP_PROMPT_SEPARATE_LINE=false
 SPACESHIP_CHAR_SYMBOL=
@@ -157,3 +160,4 @@ SPACESHIP_JOBS_SHOW=false
 # Spaceship Prompt
 autoload -U promptinit; promptinit
 prompt spaceship
+