dotfiles

My personal dotfiles

commit f5d6acdf1faab4d8fdd0fa849c0382d9d6f54296
Author: Pablo Emilio Escobar Gaviria <pablo-escobar@riseup.net>
Date:   Wed,  9 Dec 2020 12:35:01 -0300

Added some configuration files

Diffstat:
A.config/alacritty/alacritty.yml | 603+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/bat/config | 38++++++++++++++++++++++++++++++++++++++
A.config/fish/config.fish | 92+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/fish/functions/backup.fish | 31+++++++++++++++++++++++++++++++
A.config/fish/functions/corona.fish | 50++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/fish/functions/fish_logo.fish | 46++++++++++++++++++++++++++++++++++++++++++++++
A.config/fish/functions/fisher.fish | 444+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/fish/functions/mkimg.fish | 5+++++
A.config/fish/functions/mp3-dl.fish | 16++++++++++++++++
A.config/fish/functions/nvim_install.fish | 20++++++++++++++++++++
A.config/fish/functions/zip2img.fish | 34++++++++++++++++++++++++++++++++++
A.config/gdb/init | 13+++++++++++++
A.config/git/config | 21+++++++++++++++++++++
A.config/lynx/lynx.cfg | 40++++++++++++++++++++++++++++++++++++++++
A.config/mutt/asciidoc-template/block_admonition.html.haml | 5+++++
A.config/mutt/asciidoc-template/block_audio.html.haml | 3+++
A.config/mutt/asciidoc-template/block_colist.html.haml | 3+++
A.config/mutt/asciidoc-template/block_dlist.html.haml | 11+++++++++++
A.config/mutt/asciidoc-template/block_example.haml.haml | 0
A.config/mutt/asciidoc-template/block_floating_title.html.haml | 1+
A.config/mutt/asciidoc-template/block_image.html.haml | 15+++++++++++++++
A.config/mutt/asciidoc-template/block_listing.html.haml | 33+++++++++++++++++++++++++++++++++
A.config/mutt/asciidoc-template/block_literal.html.haml | 1+
A.config/mutt/asciidoc-template/block_olist.html.haml | 7+++++++
A.config/mutt/asciidoc-template/block_open.html.haml | 6++++++
A.config/mutt/asciidoc-template/block_outline.html.haml | 0
A.config/mutt/asciidoc-template/block_page_break.html.haml | 1+
A.config/mutt/asciidoc-template/block_paragraph.html.haml | 2++
A.config/mutt/asciidoc-template/block_preamble.html.haml | 2++
A.config/mutt/asciidoc-template/block_quote.html.haml | 8++++++++
A.config/mutt/asciidoc-template/block_sidebar.html.haml | 1+
A.config/mutt/asciidoc-template/block_stem.html.haml | 14++++++++++++++
A.config/mutt/asciidoc-template/block_table.html.haml | 42++++++++++++++++++++++++++++++++++++++++++
A.config/mutt/asciidoc-template/block_toc.html.haml | 0
A.config/mutt/asciidoc-template/block_ulist.html.haml | 6++++++
A.config/mutt/asciidoc-template/block_verse.html.haml | 4++++
A.config/mutt/asciidoc-template/block_video.html.haml | 12++++++++++++
A.config/mutt/asciidoc-template/document.html.haml | 23+++++++++++++++++++++++
A.config/mutt/asciidoc-template/helpers.rb | 96+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/mutt/asciidoc-template/inline_anchor.html.haml | 14++++++++++++++
A.config/mutt/asciidoc-template/inline_button.html.haml | 1+
A.config/mutt/asciidoc-template/inline_callout.html.haml | 1+
A.config/mutt/asciidoc-template/inline_footnote.html.haml | 11+++++++++++
A.config/mutt/asciidoc-template/inline_image.html.haml | 8++++++++
A.config/mutt/asciidoc-template/inline_kbd.html.haml | 8++++++++
A.config/mutt/asciidoc-template/inline_menu.html.haml | 15+++++++++++++++
A.config/mutt/asciidoc-template/inline_quoted.html.haml | 34++++++++++++++++++++++++++++++++++
A.config/mutt/asciidoc-template/section.html.haml | 4++++
A.config/mutt/muttrc | 48++++++++++++++++++++++++++++++++++++++++++++++++
A.config/nvim/init.vim | 101+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/ranger/rc.conf | 26++++++++++++++++++++++++++
A.config/tmux/tmux.conf | 18++++++++++++++++++
A.local/bin/exports.sh | 85+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
53 files changed, 2123 insertions(+), 0 deletions(-)
diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml
@@ -0,0 +1,603 @@
+#                      _     _       
+#    ____             | |   | |      
+#   / __ \ _ __   __ _| |__ | | ___  
+#  / / _` | '_ \ / _` | '_ \| |/ _ \ 
+# | | (_| | |_) | (_| | |_) | | (_) |
+#  \ \__,_| .__/ \__,_|_.__/|_|\___/ 
+#   \____/| |                        
+#         |_|                        
+# 
+# Pablo Emilio Escobar Gavíria (C) 2020
+#
+
+# Configuration for Alacritty, the GPU enhanced terminal emulator.
+
+# Any items in the `env` entry below will be added as
+# environment variables. Some entries may override variables
+# set by alacritty itself.
+#env:
+  # TERM variable
+  #
+  # This value is used to set the `$TERM` environment variable for
+  # each instance of Alacritty. If it is not present, alacritty will
+  # check the local terminfo database and use `alacritty` if it is
+  # available, otherwise `xterm-256color` is used.
+  #TERM: alacritty
+
+window:
+  # Window dimensions (changes require restart)
+  #
+  # Specified in number of columns/lines, not pixels.
+  # If both are `0`, this setting is ignored.
+  #dimensions:
+  #  columns: 0
+  #  lines: 0
+
+  # Window position (changes require restart)
+  #
+  # Specified in number of pixels.
+  # If the position is not set, the window manager will handle the placement.
+  #position:
+  #  x: 0
+  #  y: 0
+
+  # Window padding (changes require restart)
+  #
+  # Blank space added around the window in pixels. This padding is scaled
+  # by DPI and the specified value is always added at both opposing sides.
+  #padding:
+  #  x: 0
+  #  y: 0
+
+  # Spread additional padding evenly around the terminal content.
+  #dynamic_padding: false
+
+  # Window decorations
+  #
+  # Values for `decorations`:
+  #     - full: Borders and title bar
+  #     - none: Neither borders nor title bar
+  #
+  # Values for `decorations` (macOS only):
+  #     - transparent: Title bar, transparent background and title bar buttons
+  #     - buttonless: Title bar, transparent background, but no title bar buttons
+  #decorations: full
+
+  # Startup Mode (changes require restart)
+  #
+  # Values for `startup_mode`:
+  #   - Windowed
+  #   - Maximized
+  #   - Fullscreen
+  #
+  # Values for `startup_mode` (macOS only):
+  #   - SimpleFullscreen
+  startup_mode: Maximized
+
+  # Window title
+  #title: Alacritty
+
+  # Window class (Linux/BSD only):
+  #class:
+    # Application instance name
+    #instance: Alacritty
+    # General application class
+    #general: Alacritty
+
+  # GTK theme variant (Linux/BSD only)
+  #
+  # Override the variant of the GTK theme. Commonly supported values are `dark` and `light`.
+  # Set this to `None` to use the default theme variant.
+  #gtk_theme_variant: None
+
+#scrolling:
+  # Maximum number of lines in the scrollback buffer.
+  # Specifying '0' will disable scrolling.
+  #history: 10000
+
+  # Number of lines the viewport will move for every line scrolled when
+  # scrollback is enabled (history > 0).
+  #multiplier: 3
+
+# Font configuration
+font:
+  # Normal (roman) font face
+  normal:
+    # Font family
+    #
+    # Default:
+    #   - (macOS) Menlo
+    #   - (Linux/BSD) monospace
+    #   - (Windows) Consolas
+    family: IBM Plex Mono
+    style: Regular
+
+    # The `style` can be specified to pick a specific face.
+    #style: Regular
+
+  # Bold font face
+  #bold:
+    # Font family
+    #
+    # If the bold family is not specified, it will fall back to the
+    # value specified for the normal font.
+    #family: monospace
+
+    # The `style` can be specified to pick a specific face.
+    #style: Bold
+
+  # Italic font face
+  #italic:
+    # Font family
+    #
+    # If the italic family is not specified, it will fall back to the
+    # value specified for the normal font.
+    #family: monospace
+
+    # The `style` can be specified to pick a specific face.
+    #style: Italic
+
+  # Bold italic font face
+  #bold_italic:
+    # Font family
+    #
+    # If the bold italic family is not specified, it will fall back to the
+    # value specified for the normal font.
+    #family: monospace
+
+    # The `style` can be specified to pick a specific face.
+    #style: Bold Italic
+
+  # Point size
+  size: 11.0
+
+  # Offset is the extra space around each character. `offset.y` can be thought of
+  # as modifying the line spacing, and `offset.x` as modifying the letter spacing.
+  #offset:
+  #  x: 0
+  #  y: 0
+
+  # Glyph offset determines the locations of the glyphs within their cells with
+  # the default being at the bottom. Increasing `x` moves the glyph to the right,
+  # increasing `y` moves the glyph upwards.
+  #glyph_offset:
+  #  x: 0
+  #  y: 0
+
+  # Thin stroke font rendering (macOS only)
+  #
+  # Thin strokes are suitable for retina displays, but for non-retina screens
+  # it is recommended to set `use_thin_strokes` to `false`
+  #
+  # macOS >= 10.14.x:
+  #
+  # If the font quality on non-retina display looks bad then set
+  # `use_thin_strokes` to `true` and enable font smoothing by running the
+  # following command:
+  #   `defaults write -g CGFontRenderingFontSmoothingDisabled -bool NO`
+  #
+  # This is a global setting and will require a log out or restart to take
+  # effect.
+  #use_thin_strokes: true
+
+# If `true`, bold text is drawn using the bright color variants.
+#draw_bold_text_with_bright_colors: false
+
+# Colors (Tomorrow Night Bright)
+#colors:
+  # Default colors
+  #primary:
+  #  background: '#000000'
+  #  foreground: '#eaeaea'
+
+    # Bright and dim foreground colors
+    #
+    # The dimmed foreground color is calculated automatically if it is not present.
+    # If the bright foreground color is not set, or `draw_bold_text_with_bright_colors`
+    # is `false`, the normal foreground color will be used.
+    #dim_foreground: '#9a9a9a'
+    #bright_foreground: '#ffffff'
+
+# Colors (Snazzy)
+colors:
+  # Default colors
+  primary:
+    background: '0x282a36'
+    foreground: '0xeff0eb'
+
+  # Normal colors
+  normal:
+    black:   '0x282a36'
+    red:     '0xff5c57'
+    green:   '0x5af78e'
+    yellow:  '0xf3f99d'
+    blue:    '0x57c7ff'
+    magenta: '0xff6ac1'
+    cyan:    '0x9aedfe'
+    white:   '0xf1f1f0'
+
+  # Bright colors
+  bright:
+    black:   '0x686868'
+    red:     '0xff5c57'
+    green:   '0x5af78e'
+    yellow:  '0xf3f99d'
+    blue:    '0x57c7ff'
+    magenta: '0xff6ac1'
+    cyan:    '0x9aedfe'
+    white:   '0xf1f1f0'
+
+  # Cursor colors
+  #
+  # Colors which should be used to draw the terminal cursor. If these are unset,
+  # the cursor color will be the inverse of the cell color.
+  #cursor:
+  #  text: '#000000'
+  #  cursor: '#ffffff'
+
+  # Selection colors
+  #
+  # Colors which should be used to draw the selection area. If selection
+  # background is unset, selection color will be the inverse of the cell colors.
+  # If only text is unset the cell text color will remain the same.
+  #selection:
+  #  text: '#eaeaea'
+  #  background: '#404040'
+
+  # Normal colors
+  #normal:
+  #  black:   '#000000'
+  #  red:     '#d54e53'
+  #  green:   '#b9ca4a'
+  #  yellow:  '#e6c547'
+  #  blue:    '#7aa6da'
+  #  magenta: '#c397d8'
+  #  cyan:    '#70c0ba'
+  #  white:   '#eaeaea'
+
+  # Bright colors
+  #bright:
+  #  black:   '#666666'
+  #  red:     '#ff3334'
+  #  green:   '#9ec400'
+  #  yellow:  '#e7c547'
+  #  blue:    '#7aa6da'
+  #  magenta: '#b77ee0'
+  #  cyan:    '#54ced6'
+  #  white:   '#ffffff'
+
+  # Dim colors
+  #
+  # If the dim colors are not set, they will be calculated automatically based
+  # on the `normal` colors.
+  #dim:
+  #  black:   '#000000'
+  #  red:     '#8c3336'
+  #  green:   '#7a8530'
+  #  yellow:  '#97822e'
+  #  blue:    '#506d8f'
+  #  magenta: '#80638e'
+  #  cyan:    '#497e7a'
+  #  white:   '#9a9a9a'
+
+  # Indexed Colors
+  #
+  # The indexed colors include all colors from 16 to 256.
+  # When these are not set, they're filled with sensible defaults.
+  #
+  # Example:
+  #   `- { index: 16, color: '#ff00ff' }`
+  #
+  #indexed_colors: []
+
+# Visual Bell
+#
+# Any time the BEL code is received, Alacritty "rings" the visual bell. Once
+# rung, the terminal background will be set to white and transition back to the
+# default background color. You can control the rate of this transition by
+# setting the `duration` property (represented in milliseconds). You can also
+# configure the transition function by setting the `animation` property.
+#
+# Values for `animation`:
+#   - Ease
+#   - EaseOut
+#   - EaseOutSine
+#   - EaseOutQuad
+#   - EaseOutCubic
+#   - EaseOutQuart
+#   - EaseOutQuint
+#   - EaseOutExpo
+#   - EaseOutCirc
+#   - Linear
+#
+# Specifying a `duration` of `0` will disable the visual bell.
+#visual_bell:
+#  animation: EaseOutExpo
+#  duration: 0
+#  color: '#ffffff'
+
+# Background opacity
+#
+# Window opacity as a floating point number from `0.0` to `1.0`.
+# The value `0.0` is completely transparent and `1.0` is opaque.
+background_opacity: 0.95
+
+#selection:
+  #semantic_escape_chars: ",│`|:\"' ()[]{}<>\t"
+
+  # When set to `true`, selected text will be copied to the primary clipboard.
+  #save_to_clipboard: false
+
+# Allow terminal applications to change Alacritty's window title.
+#dynamic_title: true
+
+#cursor:
+  # Cursor style
+  #
+  # Values for `style`:
+  #   - ▇ Block
+  #   - _ Underline
+  #   - | Beam
+  #style: Block
+
+  # If this is `true`, the cursor will be rendered as a hollow box when the
+  # window is not focused.
+  #unfocused_hollow: true
+
+# Live config reload (changes require restart)
+#live_config_reload: true
+
+# Shell
+#
+# You can set `shell.program` to the path of your favorite shell, e.g. `/bin/fish`.
+# Entries in `shell.args` are passed unmodified as arguments to the shell.
+#
+# Default:
+#   - (macOS) /bin/bash --login
+#   - (Linux/BSD) user login shell
+#   - (Windows) powershell
+shell:
+  program: /home/pablo/.local/share/tmux/tmux
+#  program: /bin/bash
+#  args:
+#    - --login
+
+# Startup directory
+#
+# Directory the shell is started in. If this is unset, or `None`, the working
+# directory of the parent process will be used.
+#working_directory: None
+
+# WinPTY backend (Windows only)
+#
+# Alacritty defaults to using the newer ConPTY backend if it is available,
+# since it resolves a lot of bugs and is quite a bit faster. If it is not
+# available, the the WinPTY backend will be used instead.
+#
+# Setting this option to `true` makes Alacritty use the legacy WinPTY backend,
+# even if the ConPTY backend is available.
+#winpty_backend: false
+
+# Send ESC (\x1b) before characters when alt is pressed.
+#alt_send_esc: true
+
+#mouse:
+  # Click settings
+  #
+  # The `double_click` and `triple_click` settings control the time
+  # alacritty should wait for accepting multiple clicks as one double
+  # or triple click.
+  #double_click: { threshold: 300 }
+  #triple_click: { threshold: 300 }
+
+  # If this is `true`, the cursor is temporarily hidden when typing.
+  #hide_when_typing: false
+
+  #url:
+    # URL launcher
+    #
+    # This program is executed when clicking on a text which is recognized as a URL.
+    # The URL is always added to the command as the last parameter.
+    #
+    # When set to `None`, URL launching will be disabled completely.
+    #
+    # Default:
+    #   - (macOS) open
+    #   - (Linux/BSD) xdg-open
+    #   - (Windows) explorer
+    #launcher:
+    #  program: xdg-open
+    #  args: []
+
+    # URL modifiers
+    #
+    # These are the modifiers that need to be held down for opening URLs when clicking
+    # on them. The available modifiers are documented in the key binding section.
+    #modifiers: None
+
+# Mouse bindings
+#
+# Mouse bindings are specified as a list of objects, much like the key
+# bindings further below.
+#
+# To trigger mouse bindings when an application running within Alacritty captures the mouse, the
+# `Shift` modifier is automatically added as a requirement.
+#
+# Each mouse binding will specify a:
+#
+# - `mouse`:
+#
+#   - Middle
+#   - Left
+#   - Right
+#   - Numeric identifier such as `5`
+#
+# - `action` (see key bindings)
+#
+# And optionally:
+#
+# - `mods` (see key bindings)
+#mouse_bindings:
+#  - { mouse: Middle, action: PasteSelection }
+
+# Key bindings
+#
+# Key bindings are specified as a list of objects. For example, this is the
+# default paste binding:
+#
+# `- { key: V, mods: Control|Shift, action: Paste }`
+#
+# Each key binding will specify a:
+#
+# - `key`: Identifier of the key pressed
+#
+#    - A-Z
+#    - F1-F24
+#    - Key0-Key9
+#
+#    A full list with available key codes can be found here:
+#    https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants
+#
+#    Instead of using the name of the keys, the `key` field also supports using
+#    the scancode of the desired key. Scancodes have to be specified as a
+#    decimal number. This command will allow you to display the hex scancodes
+#    for certain keys:
+#
+#       `showkey --scancodes`.
+#
+# Then exactly one of:
+#
+# - `chars`: Send a byte sequence to the running application
+#
+#    The `chars` field writes the specified string to the terminal. This makes
+#    it possible to pass escape sequences. To find escape codes for bindings
+#    like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside
+#    of tmux. Note that applications use terminfo to map escape sequences back
+#    to keys. It is therefore required to update the terminfo when changing an
+#    escape sequence.
+#
+# - `action`: Execute a predefined action
+#
+#   - Copy
+#   - Paste
+#   - PasteSelection
+#   - IncreaseFontSize
+#   - DecreaseFontSize
+#   - ResetFontSize
+#   - ScrollPageUp
+#   - ScrollPageDown
+#   - ScrollLineUp
+#   - ScrollLineDown
+#   - ScrollToTop
+#   - ScrollToBottom
+#   - ClearHistory
+#   - Hide
+#   - Minimize
+#   - Quit
+#   - ToggleFullscreen
+#   - SpawnNewInstance
+#   - ClearLogNotice
+#   - ReceiveChar
+#   - None
+#
+#   (macOS only):
+#   - ToggleSimpleFullscreen: Enters fullscreen without occupying another space
+#
+# - `command`: Fork and execute a specified command plus arguments
+#
+#    The `command` field must be a map containing a `program` string and an
+#    `args` array of command line parameter strings. For example:
+#       `{ program: "alacritty", args: ["-e", "vttest"] }`
+#
+# And optionally:
+#
+# - `mods`: Key modifiers to filter binding actions
+#
+#    - Command
+#    - Control
+#    - Option
+#    - Super
+#    - Shift
+#    - Alt
+#
+#    Multiple `mods` can be combined using `|` like this:
+#       `mods: Control|Shift`.
+#    Whitespace and capitalization are relevant and must match the example.
+#
+# - `mode`: Indicate a binding for only specific terminal reported modes
+#
+#    This is mainly used to send applications the correct escape sequences
+#    when in different modes.
+#
+#    - AppCursor
+#    - AppKeypad
+#    - Alt
+#
+#    A `~` operator can be used before a mode to apply the binding whenever
+#    the mode is *not* active, e.g. `~Alt`.
+#
+# Bindings are always filled by default, but will be replaced when a new
+# binding with the same triggers is defined. To unset a default binding, it can
+# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for
+# a no-op if you do not wish to receive input characters for that binding.
+#
+# If the same trigger is assigned to multiple actions, all of them are executed
+# at once.
+#key_bindings:
+  # (Windows, Linux, and BSD only)
+  #- { key: V,        mods: Control|Shift, action: Paste            }
+  #- { key: C,        mods: Control|Shift, action: Copy             }
+  #- { key: Insert,   mods: Shift,         action: PasteSelection   }
+  #- { key: Key0,     mods: Control,       action: ResetFontSize    }
+  #- { key: Equals,   mods: Control,       action: IncreaseFontSize }
+  #- { key: Add,      mods: Control,       action: IncreaseFontSize }
+  #- { key: Subtract, mods: Control,       action: DecreaseFontSize }
+  #- { key: Minus,    mods: Control,       action: DecreaseFontSize }
+
+  # (Windows only)
+  #- { key: Return,   mods: Alt,           action: ToggleFullscreen }
+
+  # (macOS only)
+  #- { key: Key0,   mods: Command,         action: ResetFontSize    }
+  #- { key: Equals, mods: Command,         action: IncreaseFontSize }
+  #- { key: Add,    mods: Command,         action: IncreaseFontSize }
+  #- { key: Minus,  mods: Command,         action: DecreaseFontSize }
+  #- { key: K,      mods: Command,         action: ClearHistory     }
+  #- { key: K,      mods: Command,         chars: "\x0c"            }
+  #- { key: V,      mods: Command,         action: Paste            }
+  #- { key: C,      mods: Command,         action: Copy             }
+  #- { key: H,      mods: Command,         action: Hide             }
+  #- { key: M,      mods: Command,         action: Minimize         }
+  #- { key: Q,      mods: Command,         action: Quit             }
+  #- { key: W,      mods: Command,         action: Quit             }
+  #- { key: F,      mods: Command|Control, action: ToggleFullscreen }
+
+  #- { key: Paste,                    action: Paste                            }
+  #- { key: Copy,                     action: Copy                             }
+  #- { key: L,         mods: Control, action: ClearLogNotice                   }
+  #- { key: L,         mods: Control, chars: "\x0c"                            }
+  #- { key: PageUp,    mods: Shift,   action: ScrollPageUp,   mode: ~Alt       }
+  #- { key: PageDown,  mods: Shift,   action: ScrollPageDown, mode: ~Alt       }
+  #- { key: Home,      mods: Shift,   action: ScrollToTop,    mode: ~Alt       }
+  #- { key: End,       mods: Shift,   action: ScrollToBottom, mode: ~Alt       }
+
+#debug:
+  # Display the time it takes to redraw each frame.
+  #render_timer: false
+
+  # Keep the log file after quitting Alacritty.
+  #persistent_logging: false
+
+  # Log level
+  #
+  # Values for `log_level`:
+  #   - None
+  #   - Error
+  #   - Warn
+  #   - Info
+  #   - Debug
+  #   - Trace
+  #log_level: Warn
+
+  # Print all received window events.
+  #print_events: false
diff --git a/.config/bat/config b/.config/bat/config
@@ -0,0 +1,38 @@
+#                      _     _       
+#    ____             | |   | |      
+#   / __ \ _ __   __ _| |__ | | ___  
+#  / / _` | '_ \ / _` | '_ \| |/ _ \ 
+# | | (_| | |_) | (_| | |_) | | (_) |
+#  \ \__,_| .__/ \__,_|_.__/|_|\___/ 
+#   \____/| |                        
+#         |_|                        
+# 
+# Pablo Emilio Escobar Gavíria (C) 2020
+#
+
+# This is `bat`s configuration file. Each line either contains a comment or
+# a command-line option that you want to pass to `bat` by default. You can
+# run `bat --help` to get a list of all possible configuration options.
+
+# Specify desired highlighting theme (e.g. "TwoDark"). Run `bat --list-themes`
+# for a list of all available themes
+--theme="base16"
+
+# Enable this to use italic text on the terminal. This is not supported on all
+# terminal emulators (like tmux, by default):
+--italic-text=always
+
+# Uncomment the following line to disable automatic paging:
+#--paging=never
+
+# Uncomment the following line if you are using less version >= 551 and want to
+# enable mouse scrolling support in `bat` when running inside tmux. This might
+# disable text selection, unless you press shift.
+#--pager="--RAW-CONTROL-CHARS --quit-if-one-screen --mouse"
+
+# Syntax mappings: map a certain filename pattern to a language.
+#   Example 1: use the C++ syntax for .ino files
+#   Example 2: Use ".gitignore"-style highlighting for ".ignore" files
+#--map-syntax "*.ino:C++"
+#--map-syntax ".ignore:Git Ignore"
+--map-syntax "*.idr:Idris"
diff --git a/.config/fish/config.fish b/.config/fish/config.fish
@@ -0,0 +1,92 @@
+#                   __ _          __ _     _     
+#                  / _(_)        / _(_)   | |    
+#   ___ ___  _ __ | |_ _  __ _  | |_ _ ___| |__  
+#  / __/ _ \| '_ \|  _| |/ _` | |  _| / __| '_ \ 
+# | (_| (_) | | | | | | | (_| |_| | | \__ \ | | |
+#  \___\___/|_| |_|_| |_|\__, (_)_| |_|___/_| |_|
+#                         __/ |                  
+#                        |___/                   
+# 
+# Pablo Emilio Escobar Gavíria (C) 2020
+#
+
+# Sources environment variables
+source "$HOME/.local/bin/exports.sh"
+
+# Configure the PATH variable
+set PATH "$HOME/.local/bin" \
+         "$CARGO_HOME/bin" \
+         "$DENO_INSTALL/bin" \
+         "$HOME/.cabal/bin" \
+         "/usr/local/wabt/bin" \
+         "$XDG_DATA_HOME/gap-4.11.0" \
+         "$XDG_DATA_HOME/emsdk" \
+         "$XDG_DATA_HOME/emsdk/node/12.18.1_64bit/bin" \
+         "$XDG_DATA_HOME/emsdk/upstream/emscripten" \
+         "$XDG_DATA_HOME/mitra" \
+         "$XDG_DATA_HOME/tmux" \
+         "/usr/local/lib" \
+         $PATH
+
+# Abbreviations
+abbr weather "curl https://wttr.in/"
+
+# Aliases
+alias canto   canto-curses
+alias less    'less -Rf'
+alias wget    'wget --hsts-file="$XDG_CACHE_HOME/wget-hsts"'
+alias gdb     'gdb -nh -x "$XDG_CONFIG_HOME/gdb/init"'
+alias weechat 'weechat -d "$XDG_CONFIG_HOME/weechat"'
+alias lynx    'lynx -cfg="$XDG_CONFIG_HOME/lynx/lynx.cfg"'
+alias config  'git --git-dir="$HOME/Documents/dotfiles" --work-tree="$HOME"'
+
+function fish_greeting
+    set_color yellow
+    fortune | cowsay -f none
+    set_color normal
+    fish_logo red ff743d yellow
+    printf '\n'
+end
+
+function fish_prompt
+    # Formatted pwd
+    set dir (string replace "$HOME" '~' (pwd))
+
+    # Show fancy prompt if the screen is big enought
+    if test (math (string length "$dir") + 4) -lt (math (tput cols) \* 0.50)
+      set_color --bold white
+      printf "["
+
+      # Print the username
+      set_color --bold green
+      printf "%s@%s" (whoami) (hostname)
+
+      # Print the current directory
+      set_color --bold blue
+      printf " %s" "$dir"
+
+      # Print the current git branch (if inside a repo)
+      set_color --bold cyan
+      __fish_git_prompt
+
+      set_color --bold white
+      printf ']' 
+    else
+      set_color --bold blue
+      printf '%s ' "$dir"
+      set_color --bold white
+    end
+
+    if [ $status -ne 0 ]
+        set_color --bold red
+    end
+
+    if test "$USER" = root
+      printf '# '
+    else
+    	printf '$ '
+    end
+      
+    set_color normal
+end
+
diff --git a/.config/fish/functions/backup.fish b/.config/fish/functions/backup.fish
@@ -0,0 +1,31 @@
+function backup -d "Backup my relevant data in my backup drive."
+  set date (date '+%Y-%m-%d')
+
+  # Backup the most important directories into an archive named after
+  # the machine this script is currently running on:
+  borg create                                                          \
+    --verbose                                                          \
+    --filter AME                                                       \
+    --list                                                             \
+    --stats                                                            \
+    --show-rc                                                          \
+    --compression lz4                                                  \
+    --exclude-caches                                                   \
+    --exclude-from "$HOME/.local/share/excludefile"                    \
+    "/media/pablo/Seagate Backup Plus Drive/Backups/::$hostname-$date" \
+    "$HOME/Archive"                                                    \
+    "$HOME/Documents"                                                  \
+    "$HOME/Passwords"                                                  \
+    "$HOME/Pictures"                                                   \
+    "$HOME/Videos"                                                     \
+    "$HOME/Emulation"                                                  \
+    "$HOME/VirtualBox VMs"                                             \
+    "$HOME/.config"                                                    \
+    "$HOME/.local/share/excludefile"                                   \
+    "$HOME/.local/share/texmf"                                         \
+    "$HOME/.abook"                                                     \
+    "$HOME/.config/mutt"                                               \
+    "$HOME/.local/bin/exports.sh"                                      \
+
+end
+
diff --git a/.config/fish/functions/corona.fish b/.config/fish/functions/corona.fish
@@ -0,0 +1,50 @@
+#   __ _     _                                          
+#  / _(_)   | |                                         
+# | |_ _ ___| |__ ______ ___ ___  _ __ ___  _ __   __ _ 
+# |  _| / __| '_ \______/ __/ _ \| '__/ _ \| '_ \ / _` |
+# | | | \__ \ | | |    | (_| (_) | | | (_) | | | | (_| |
+# |_| |_|___/_| |_|     \___\___/|_|  \___/|_| |_|\__,_|
+#                                                      
+# Pablo Emilio Escobar Gavíria (C) 2020
+# You are free (as in freedom) to do whatever you please with this!
+
+# Filters the cached CSV and adds a header to it
+function __corona_select_csv -a country
+    echo '🚩️ Country, 😷️ Cases, 🤒️ New Cases, 💀️ Deaths, 😰️ New Deaths'
+
+    if test (string lower "$country") = all
+        cat "$HOME/.cache/corona.csv"
+    else
+        grep -Ei "^\"?($country|World)" "$HOME/.cache/corona.csv"
+    end
+end
+
+function corona -a country -d "Track corona-virus cases from fish-shell. 😷️"
+    if test -z "$country"
+        if test -f "$HOME/.cache/country.name"
+            set country (cat "$HOME/.cache/country.name" )
+        else
+            set country_code (curl -s https://ipinfo.io/country/)
+            set country (curl -s "https://restcountries.eu/rest/v2/alpha/$country_code/" | jq '.name' | sed 's/"//g')
+            echo "$country" > "$HOME/.cache/country.name" 
+        end
+    end
+
+    # Update the cache if it doesn't exists or if it hasn't been modified in
+    # over a day
+    set date (date +%Y-%m-%d)
+    not test -f "$HOME/.cache/corona.csv"
+    or test (stat -c %y "$HOME/.cache/corona.csv" | cut -d' ' -f1) != "$date"
+
+    if test "$status" -eq 0
+        curl -s https://corona-stats.online/\?format=json \
+            | jq -r '.data + [.worldStats] 
+                        | .[] 
+                        | [.country,.cases,.todayCases,.deaths,.todayDeaths] 
+                        | @csv' \
+            > "$HOME/.cache/corona.csv"
+    end
+
+    __corona_select_csv "$country" | csvlook -d ',' -e UTF-8
+end
+
diff --git a/.config/fish/functions/fish_logo.fish b/.config/fish/functions/fish_logo.fish
@@ -0,0 +1,46 @@
+function fish_logo \
+    --description="Fish-shell colorful ASCII-art logo" \
+    --argument-names outer_color medium_color inner_color mouth eye
+
+    # defaults:
+    [ $outer_color  ]; or set outer_color  'red'
+    [ $medium_color ]; or set medium_color 'f70'
+    [ $inner_color  ]; or set inner_color  'yellow'
+    [ $mouth ]; or set mouth '['
+    [ $eye   ]; or set eye   'O'
+
+    set usage 'Usage: fish_logo <outer_color> <medium_color> <inner_color> <mouth> <eye>
+See set_color --help for more on available colors.'
+
+    if contains -- $outer_color '--help' '-h' '-help'
+        echo $usage
+        return 0
+    end
+
+    # shortcuts:
+    set o (set_color $outer_color)
+    set m (set_color $medium_color)
+    set i (set_color $inner_color)
+
+    if test (count $o) != 1; or test (count $m) != 1; or test (count $i) != 1
+        echo 'Invalid color argument'
+        echo $usage
+        return 1
+    end
+
+    echo '                 '$o'___
+  ___======____='$m'-'$i'-'$m'-='$o')
+/T            \_'$i'--='$m'=='$o')
+'$mouth' \ '$m'('$i$eye$m')   '$o'\~    \_'$i'-='$m'='$o')
+ \      / )J'$m'~~    '$o'\\'$i'-='$o')
+  \\\\___/  )JJ'$m'~'$i'~~   '$o'\)
+   \_____/JJJ'$m'~~'$i'~~    '$o'\\
+   '$m'/ '$o'\  '$i', \\'$o'J'$m'~~~'$i'~~     '$m'\\
+  (-'$i'\)'$o'\='$m'|'$i'\\\\\\'$m'~~'$i'~~       '$m'L_'$i'_
+  '$m'('$o'\\'$m'\\)  ('$i'\\'$m'\\\)'$o'_           '$i'\=='$m'__
+   '$o'\V    '$m'\\\\'$o'\) =='$m'=_____   '$i'\\\\\\\\'$m'\\\\
+          '$o'\V)     \_) '$m'\\\\'$i'\\\\JJ\\'$m'J\)
+                      '$o'/'$m'J'$i'\\'$m'J'$o'T\\'$m'JJJ'$o'J)
+                      (J'$m'JJ'$o'| \UUU)
+                       (UU)'(set_color normal)
+end
diff --git a/.config/fish/functions/fisher.fish b/.config/fish/functions/fisher.fish
@@ -0,0 +1,444 @@
+set -g fisher_version 3.2.11
+
+function fisher -a cmd -d "fish package manager"
+    set -q XDG_CACHE_HOME; or set XDG_CACHE_HOME ~/.cache
+    set -q XDG_CONFIG_HOME; or set XDG_CONFIG_HOME ~/.config
+    set -q XDG_DATA_HOME; or set XDG_DATA_HOME ~/.local/share
+
+    set -g fish_config $XDG_CONFIG_HOME/fish
+    set -g fisher_cache $XDG_CACHE_HOME/fisher
+    set -g fisher_data $XDG_DATA_HOME/fisher
+
+    set -q fisher_path; or set -g fisher_path $fish_config
+    set -g fishfile $fish_config/fishfile
+
+    for path in {$fish_config,$fisher_path}/{functions,completions,conf.d} $fisher_cache
+        if test ! -d $path
+            command mkdir -p $path
+        end
+    end
+
+    if test ! -e $fisher_path/completions/fisher.fish
+        echo "fisher complete" >$fisher_path/completions/fisher.fish
+        _fisher_complete
+    end
+
+    if test -e $fisher_path/conf.d/fisher.fish
+        switch "$version"
+            case \*-\*
+                command rm -f $fisher_path/conf.d/fisher.fish
+            case 2\*
+            case \*
+                command rm -f $fisher_path/conf.d/fisher.fish
+        end
+    else
+        switch "$version"
+            case \*-\*
+            case 2\*
+                echo "fisher copy-user-key-bindings" >$fisher_path/conf.d/fisher.fish
+        end
+    end
+
+    # 2019-10-22: temp code, migrates fishfile from old path back to $fish_config
+    if test -e "$fisher_path/fishfile"; and test ! -e "$fishfile"
+        command mv -f "$fisher_path/fishfile" "$fishfile"
+    end
+
+    # 2020-06-23: temp code, migrates fisher data from XDG_CONFIG_HOME to XDG_DATA_HOME
+    set -l fisher_config $XDG_CONFIG_HOME/fisher
+    if test -d $fisher_config
+        echo "migrating local data from $fisher_config to $fisher_data"
+        command rm -rf $fisher_data
+        command mv -f $fisher_config $fisher_data
+    end
+
+    switch "$cmd"
+        case {,self-}complete
+            _fisher_complete
+        case copy-user-key-bindings
+            _fisher_copy_user_key_bindings
+        case ls
+            set -e argv[1]
+            if test -s "$fishfile"
+                set -l file (_fisher_fmt <$fishfile | _fisher_parse -R | command sed "s|@.*||")
+                _fisher_ls | _fisher_fmt | command awk -v FILE="$file" "
+                    BEGIN { for (n = split(FILE, f); ++i <= n;) file[f[i]] } \$0 in file && /$argv[1]/
+                " | command sed "s|^$HOME|~|"
+            end
+        case self-update
+            _fisher_self_update (status -f)
+        case self-uninstall
+            _fisher_self_uninstall
+        case {,-}-v{ersion,}
+            echo "fisher version $fisher_version" (status -f | command sed "s|^$HOME|~|")
+        case {,-}-h{elp,}
+            _fisher_help
+        case ""
+            _fisher_commit --
+        case add rm
+            if not isatty
+                while read -l arg
+                    set argv $argv $arg
+                end
+            end
+
+            if test (count $argv) = 1
+                echo "fisher: invalid number of arguments" >&2
+                _fisher_help >&2
+                return 1
+            end
+
+            _fisher_commit $argv
+        case \*
+            echo "fisher: unknown flag or command \"$cmd\"" >&2
+            _fisher_help >&2
+            return 1
+    end
+end
+
+function _fisher_complete
+    complete -ec fisher
+    complete -xc fisher -n __fish_use_subcommand -a add -d "Add packages"
+    complete -xc fisher -n __fish_use_subcommand -a rm -d "Remove packages"
+    complete -xc fisher -n __fish_use_subcommand -a ls -d "List installed packages matching REGEX"
+    complete -xc fisher -n __fish_use_subcommand -a --help -d "Show usage help"
+    complete -xc fisher -n __fish_use_subcommand -a --version -d "$fisher_version"
+    complete -xc fisher -n __fish_use_subcommand -a self-update -d "Update to the latest version"
+    for pkg in (fisher ls)
+        complete -xc fisher -n "__fish_seen_subcommand_from rm" -a $pkg
+    end
+end
+
+function _fisher_copy_user_key_bindings
+    if functions -q fish_user_key_bindings
+        functions -c fish_user_key_bindings fish_user_key_bindings_copy
+    end
+    function fish_user_key_bindings
+        for file in $fisher_path/conf.d/*_key_bindings.fish
+            source $file >/dev/null 2>/dev/null
+        end
+        if functions -q fish_user_key_bindings_copy
+            fish_user_key_bindings_copy
+        end
+    end
+end
+
+function _fisher_ls
+    for pkg in $fisher_data/*/*/*
+        command readlink $pkg; or echo $pkg
+    end
+end
+
+function _fisher_fmt
+    command sed "s|^[[:space:]]*||;s|^$fisher_data/||;s|^~|$HOME|;s|^\.\/*|$PWD/|;s|^https*:/*||;s|^github\.com/||;s|/*\$||"
+end
+
+function _fisher_help
+    echo "usage: fisher add <package...>     Add packages"
+    echo "       fisher rm  <package...>     Remove packages"
+    echo "       fisher                      Update all packages"
+    echo "       fisher ls  [<regex>]        List installed packages matching <regex>"
+    echo "       fisher --help               Show this help"
+    echo "       fisher --version            Show the current version"
+    echo "       fisher self-update          Update to the latest version"
+    echo "       fisher self-uninstall       Uninstall from your system"
+    echo "examples:"
+    echo "       fisher add jethrokuan/z rafaelrinaldi/pure"
+    echo "       fisher add gitlab.com/foo/bar@v2"
+    echo "       fisher add ~/path/to/local/pkg"
+    echo "       fisher add <file"
+    echo "       fisher rm rafaelrinaldi/pure"
+    echo "       fisher ls | fisher rm"
+    echo "       fisher ls fish-\*"
+end
+
+function _fisher_self_update -a file
+    set -l url "https://raw.githubusercontent.com/jorgebucaran/fisher/master/fisher.fish"
+    echo "fetching $url" >&2
+    command curl -s "$url?nocache" >$file.
+
+    set -l next_version (command awk '{ print $4 } { exit }' <$file.)
+    switch "$next_version"
+        case "" $fisher_version
+            command rm -f $file.
+            if test -z "$next_version"
+                echo "fisher: cannot update fisher -- are you offline?" >&2
+                return 1
+            end
+            echo "fisher is already up-to-date" >&2
+        case \*
+            echo "linking $file" | command sed "s|$HOME|~|" >&2
+            command mv -f $file. $file
+            source $file
+            echo "updated to fisher $fisher_version -- hooray!" >&2
+            _fisher_complete
+    end
+end
+
+function _fisher_self_uninstall
+    for pkg in (_fisher_ls)
+        _fisher_rm $pkg
+    end
+
+    for file in $fisher_cache $fisher_data $fisher_path/{functions,completions,conf.d}/fisher.fish $fishfile
+        echo "removing $file"
+        command rm -Rf $file 2>/dev/null
+    end | command sed "s|$HOME|~|" >&2
+
+    for name in (set -n | command awk '/^fisher_/')
+        set -e "$name"
+    end
+
+    functions -e (functions -a | command awk '/^_fisher/') fisher
+    complete -c fisher --erase
+end
+
+function _fisher_commit -a cmd
+    set -e argv[1]
+    set -l elapsed (_fisher_now)
+
+    if test ! -e "$fishfile"
+        command touch $fishfile
+        echo "created new fishfile in $fishfile" | command sed "s|$HOME|~|" >&2
+    end
+
+    set -l old_pkgs (_fisher_ls | _fisher_fmt)
+    for pkg in (_fisher_ls)
+        _fisher_rm $pkg
+    end
+    command rm -Rf $fisher_data
+    command mkdir -p $fisher_data
+
+    set -l next_pkgs (_fisher_fmt <$fishfile | _fisher_parse -R $cmd (printf "%s\n" $argv | _fisher_fmt))
+    set -l actual_pkgs (_fisher_fetch $next_pkgs)
+    set -l updated_pkgs
+    for pkg in $old_pkgs
+        if contains -- $pkg $actual_pkgs
+            set updated_pkgs $updated_pkgs $pkg
+        end
+    end
+
+    if test -z "$actual_pkgs$updated_pkgs$old_pkgs$next_pkgs"
+        echo "fisher: nothing to commit -- try adding some packages" >&2
+        return 1
+    end
+
+    set -l out_pkgs
+    if test "$cmd" = "rm"
+        set out_pkgs $next_pkgs
+    else
+        for pkg in $next_pkgs
+            if contains -- (echo $pkg | command sed "s|@.*||") $actual_pkgs
+                set out_pkgs $out_pkgs $pkg
+            end
+        end
+    end
+
+    printf "%s\n" (_fisher_fmt <$fishfile | _fisher_parse -W $cmd $out_pkgs | command sed "s|^$HOME|~|") >$fishfile
+
+    _fisher_complete
+
+    command awk -v A=(count $actual_pkgs) -v U=(count $updated_pkgs) -v O=(count $old_pkgs) -v E=(_fisher_now $elapsed) '
+        BEGIN {
+            res = fmt("removed", O - U, fmt("updated", U, fmt("added", A - U)))
+            printf((res ? res : "done") " in %.2fs\n", E / 1000)
+        }
+        function fmt(action, n, s) {
+            return n ? (s ? s ", " : s) action " " n " package" (n > 1 ? "s" : "") : s
+        }
+    ' >&2
+end
+
+function _fisher_parse -a mode cmd
+    set -e argv[1..2]
+    command awk -v FS="[[:space:]]*#+" -v MODE="$mode" -v CMD="$cmd" -v ARGSTR="$argv" '
+        BEGIN {
+            for (n = split(ARGSTR, a, " "); i++ < n;) pkgs[getkey(a[i])] = a[i]
+        }
+        !NF { next } { k = getkey($1) }
+        MODE == "-R" && !(k in pkgs) && ($0 = $1)
+        MODE == "-W" && (/^#/ || k in pkgs || CMD != "rm") { print pkgs[k] (sub($1, "") ? $0 : "") }
+        MODE == "-W" || CMD == "rm" { delete pkgs[k] }
+        END {
+            for (k in pkgs) {
+                if (CMD != "rm" || MODE == "-W") print pkgs[k]
+                else print "fisher: cannot remove \""k"\" -- package is not in fishfile" > "/dev/stderr"
+            }
+        }
+        function getkey(s,  a) {
+            return (split(s, a, /@+|:/) > 2) ? a[2]"/"a[1]"/"a[3] : a[1]
+        }
+    '
+end
+
+function _fisher_fetch
+    set -l pkg_jobs
+    set -l out_pkgs
+    set -l next_pkgs
+    set -l local_pkgs
+    set -q fisher_user_api_token; and set -l curl_opts -u $fisher_user_api_token
+
+    for pkg in $argv
+        switch $pkg
+            case \~\* /\*
+                set -l path (echo "$pkg" | command sed "s|^~|$HOME|")
+                if test -e "$path"
+                    set local_pkgs $local_pkgs $path
+                else
+                    echo "fisher: cannot add \"$pkg\" -- is this a valid file?" >&2
+                end
+                continue
+        end
+
+        command awk -v PKG="$pkg" -v FS=/ '
+            BEGIN {
+                if (split(PKG, tmp, /@+|:/) > 2) {
+                    if (tmp[4]) sub("@"tmp[4], "", PKG)
+                    print PKG "\t" tmp[2]"/"tmp[1]"/"tmp[3] "\t" (tmp[4] ? tmp[4] : "master")
+                } else {
+                    pkg = split(PKG, _, "/") <= 2 ? "github.com/"tmp[1] : tmp[1]
+                    tag = tmp[2] ? tmp[2] : "master"
+                    print (\
+                        pkg ~ /^github/ ? "https://codeload."pkg"/tar.gz/"tag : \
+                        pkg ~ /^gitlab/ ? "https://"pkg"/-/archive/"tag"/"tmp[split(pkg, tmp, "/")]"-"tag".tar.gz" : \
+                        pkg ~ /^bitbucket/ ? "https://"pkg"/get/"tag".tar.gz" : pkg \
+                    ) "\t" pkg
+                }
+            }
+        ' | read -l url pkg branch
+
+        if test ! -d "$fisher_data/$pkg"
+            fish -c "
+                echo fetching $url >&2
+                command mkdir -p $fisher_data/$pkg $fisher_cache/(command dirname $pkg)
+                if test ! -z \"$branch\"
+                     command git clone $url $fisher_data/$pkg --branch $branch --depth 1 2>/dev/null
+                     or echo fisher: cannot clone \"$url\" -- is this a valid url\? >&2
+                else if command curl $curl_opts -Ss -w \"\" $url 2>&1 | command tar -xzf- -C $fisher_data/$pkg 2>/dev/null
+                    command rm -Rf $fisher_cache/$pkg
+                    command mv -f $fisher_data/$pkg/* $fisher_cache/$pkg
+                    command rm -Rf $fisher_data/$pkg
+                    command cp -Rf {$fisher_cache,$fisher_data}/$pkg
+                else if test -d \"$fisher_cache/$pkg\"
+                    echo fisher: cannot connect to server -- looking in \"$fisher_cache/$pkg\" | command sed 's|$HOME|~|' >&2
+                    command cp -Rf $fisher_cache/$pkg $fisher_data/$pkg/..
+                else
+                    command rm -Rf $fisher_data/$pkg
+                    echo fisher: cannot add \"$pkg\" -- is this a valid package\? >&2
+                end
+            " >/dev/null &
+            set pkg_jobs $pkg_jobs (_fisher_jobs --last)
+            set next_pkgs $next_pkgs "$fisher_data/$pkg"
+        end
+    end
+
+    if set -q pkg_jobs[1]
+        while for job in $pkg_jobs
+                contains -- $job (_fisher_jobs); and break
+            end
+        end
+        for pkg in $next_pkgs
+            if test -d "$pkg"
+                set out_pkgs $out_pkgs $pkg
+                _fisher_add $pkg
+            end
+        end
+    end
+
+    set -l local_prefix $fisher_data/local/$USER
+    if test ! -d "$local_prefix"
+        command mkdir -p $local_prefix
+    end
+    for pkg in $local_pkgs
+        set -l target $local_prefix/(command basename $pkg)
+        if test ! -L "$target"
+            command ln -sf $pkg $target
+            set out_pkgs $out_pkgs $pkg
+            _fisher_add $pkg --link
+        end
+    end
+
+    if set -q out_pkgs[1]
+        _fisher_fetch (
+            for pkg in $out_pkgs
+                if test -s "$pkg/fishfile"
+                    _fisher_fmt <$pkg/fishfile | _fisher_parse -R
+                end
+            end)
+        printf "%s\n" $out_pkgs | _fisher_fmt
+    end
+end
+
+function _fisher_add -a pkg opts
+    for src in $pkg/{functions,completions,conf.d}/**.* $pkg/*.fish
+        set -l target (command basename $src)
+        switch $src
+            case $pkg/conf.d\*
+                set target $fisher_path/conf.d/$target
+            case $pkg/completions\*
+                set target $fisher_path/completions/$target
+            case $pkg/{functions,}\*
+                switch $target
+                    case uninstall.fish
+                        continue
+                    case {init,key_bindings}.fish
+                        set target $fisher_path/conf.d/(command basename $pkg)\_$target
+                    case \*
+                        set target $fisher_path/functions/$target
+                end
+        end
+        echo "linking $target" | command sed "s|$HOME|~|" >&2
+        if set -q opts[1]
+            command ln -sf $src $target
+        else
+            command cp -f $src $target
+        end
+        switch $target
+            case \*.fish
+                source $target >/dev/null 2>/dev/null
+        end
+    end
+end
+
+function _fisher_rm -a pkg
+    for src in $pkg/{conf.d,completions,functions}/**.* $pkg/*.fish
+        set -l target (command basename $src)
+        set -l filename (command basename $target .fish)
+        switch $src
+            case $pkg/conf.d\*
+                test "$filename.fish" = "$target"; and emit "$filename"_uninstall
+                set target conf.d/$target
+            case $pkg/completions\*
+                test "$filename.fish" = "$target"; and complete -ec $filename
+                set target completions/$target
+            case $pkg/{,functions}\*
+                test "$filename.fish" = "$target"; and functions -e $filename
+                switch $target
+                    case uninstall.fish
+                        source $src
+                        continue
+                    case {init,key_bindings}.fish
+                        set target conf.d/(command basename $pkg)\_$target
+                    case \*
+                        set target functions/$target
+                end
+        end
+        command rm -f $fisher_path/$target
+    end
+    if not functions -q fish_prompt
+        source "$__fish_datadir$__fish_data_dir/functions/fish_prompt.fish"
+    end
+end
+
+function _fisher_jobs
+    jobs $argv | command awk '/^[0-9]+\t/ { print $1 }'
+end
+
+function _fisher_now -a elapsed
+    switch (command uname)
+        case Darwin \*BSD
+            command perl -MTime::HiRes -e 'printf("%.0f\n", (Time::HiRes::time() * 1000) - $ARGV[0])' $elapsed
+        case \*
+            math (command date "+%s%3N") - "0$elapsed"
+    end
+end
diff --git a/.config/fish/functions/mkimg.fish b/.config/fish/functions/mkimg.fish
@@ -0,0 +1,5 @@
+function mkimg -a file -d "Creates a MS-DOS compatible disk image"
+  dd if=/dev/zero of="$file" count=1440 bs=1k
+  /sbin/mkfs.msdos "$file"
+end
+
diff --git a/.config/fish/functions/mp3-dl.fish b/.config/fish/functions/mp3-dl.fish
@@ -0,0 +1,16 @@
+function mp3-dl -a url
+  set input_dir (mktemp -d)
+
+  set title (youtube-dl --get-title "$url")
+  set format (youtube-dl -F "$url" | sed '/audio only/!d' | fzf --prompt='Which format do you prefer? ' | awk '{ print $1 }')
+  youtube-dl -f "$format" "$url" -o "$input_dir/input.%(ext)s"
+
+  if test "$format" = 'mp3'
+    mv $input_dirp/input.* "./$title.mp3"
+  else
+    ffmpeg -i $input_dir/input.* -c:a libmp3lame -ac 2 -q:a 2 "./$title.mp3"
+  end
+
+  rm -rf "$input_dir"
+end
+
diff --git a/.config/fish/functions/nvim_install.fish b/.config/fish/functions/nvim_install.fish
@@ -0,0 +1,20 @@
+function nvim_install -a url -d "install vim plugins from git repositories"
+
+    for repo in $argv
+        set sub_dir (echo "$url" | grep -o '[^/]*/[^/]*$' | grep -o '^[^/]*')
+        set pack (echo "$url" | grep -o '[^/]*$' | grep -o '^[^.]*')
+        set install_dir "$HOME/.local/share/nvim/site/pack/$sub_dir/start/$pack"
+
+        if test -d "$install_dir"
+            # Update the repository
+            set pwd (pwd)
+            cd "$install_dir"
+            git pull
+            cd "$pwd"
+        else
+            # Clone the repository
+            git clone "$url" "$install_dir"
+        end
+    end
+end
+
diff --git a/.config/fish/functions/zip2img.fish b/.config/fish/functions/zip2img.fish
@@ -0,0 +1,34 @@
+#      _        _____ _                 
+#     (_)      / __  (_)                
+#  _____ _ __  `' / /'_ _ __ ___   __ _ 
+# |_  / | '_ \   / / | | '_ ` _ \ / _` |
+#  / /| | |_) |./ /__| | | | | | | (_| |
+# /___|_| .__/ \_____/_|_| |_| |_|\__, |
+#       | |                        __/ |
+#       |_|                       |___/ 
+#
+# Converts ZIP archives to MS-DOS compatible disk images (virtual floppies)
+#
+# Pablo Emilio Escobar Gaviria (C) 2020
+
+function zip2img -a zip img -d "Converts ZIP archives to MS-DOS compatible disk images (virtual floppies)"
+    set dir (mktemp -d)
+
+    if test -z "$img"
+      set fname (echo "$zip" | sed 's/\.[^.]*$//g')
+      set fdir (dirname "$zip")
+      set img "$fdir/$fname.img"
+    end
+
+    # Extract the contents of the archive to a temporary directory
+    unzip "$zip" -d "$dir/"
+
+    # Create the disk image and copy the contents of the archive to it
+    dd if=/dev/zero of="$img" count=1440 bs=1k
+    /sbin/mkfs.msdos "$img"
+    mcopy -i "$img" "$dir/"* ::/
+   
+    # Delete the temporary directory
+    rm "$dir/" -rf
+end
+
diff --git a/.config/gdb/init b/.config/gdb/init
@@ -0,0 +1,13 @@
+#             _ _     _       _ _   
+#            | | |   (_)     (_) |  
+#    __ _  __| | |__  _ _ __  _| |_ 
+#   / _` |/ _` | '_ \| | '_ \| | __|
+#  | (_| | (_| | |_) | | | | | | |_ 
+# (_)__, |\__,_|_.__/|_|_| |_|_|\__|
+#    __/ |                          
+#   |___/                           
+# 
+# Pablo Emilio Escobar Gavíria (C) 2020
+
+set disassembly-flavor intel
+
diff --git a/.config/git/config b/.config/git/config
@@ -0,0 +1,21 @@
+#                      _     _       
+#    ____             | |   | |      
+#   / __ \ _ __   __ _| |__ | | ___  
+#  / / _` | '_ \ / _` | '_ \| |/ _ \ 
+# | | (_| | |_) | (_| | |_) | | (_) |
+#  \ \__,_| .__/ \__,_|_.__/|_|\___/ 
+#   \____/| |                        
+#         |_|                        
+# 
+# Pablo Emilio Escobar Gavíria (C) 2020
+#
+
+# This is Git's per-user configuration file.
+[user]
+# Please adapt and uncomment the following lines:
+	name = Pablo Emilio Escobar Gaviria
+ 	email = pablo-escobar@riseup.net
+[core]
+	editor = nvim
+[credential]
+	helper = store
diff --git a/.config/lynx/lynx.cfg b/.config/lynx/lynx.cfg
@@ -0,0 +1,40 @@
+### Lynx 2.8.9dev.16, at Tue Dec  1 23:14:42 2020
+STARTFILE:https://pablo.escobar.life
+HELPFILE:file://localhost/usr/share/doc/lynx-common/lynx_help/lynx_help_main.html.gz
+DEFAULT_INDEX_FILE:http://scout.wisc.edu/
+CHARACTER_SET:iso-8859-1
+LOCALE_CHARSET:TRUE
+PREPEND_CHARSET_TO_SOURCE:FALSE
+PREFERRED_LANGUAGE:en
+SHOW_CURSOR:TRUE
+LOCAL_EXECUTION_LINKS_ALWAYS_ON:FALSE
+LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE:FALSE
+TRUSTED_EXEC:none
+ALWAYS_TRUSTED_EXEC:none
+TRUSTED_LYNXCGI:none
+PERSISTENT_COOKIES:FALSE
+NO_DOT_FILES:FALSE
+MINIMAL_COMMENTS:TRUE
+GLOBAL_EXTENSION_MAP:/etc/mime.types
+PERSONAL_EXTENSION_MAP:.mime.types
+SUFFIX:.tgz:application/octet-stream
+SUFFIX:.deb:application/octet-stream
+GLOBAL_MAILCAP:/etc/mailcap
+PERSONAL_MAILCAP:.mailcap
+COLOR:6:brightred:black
+NESTED_TABLES: false
+SSL_CERT_FILE:/etc/ssl/certs/ca-certificates.crt
+SYSLOG_REQUESTED_URLS:FALSE
+EXTERNAL:ftp:w3m %s:TRUE
+EXTERNAL:file:w3m %s:TRUE
+EXTERNAL:http:w3m %s:TRUE
+EXTERNAL:http:wget %s:TRUE
+EXTERNAL:http:wget -r %s:TRUE
+EXTERNAL:ftp:x-www-browser %s:TRUE
+EXTERNAL:file:x-www-browser %s:TRUE
+EXTERNAL:http:x-www-browser %s:TRUE
+INCLUDE:/etc/lynx/local.cfg
+INCLUDE:~/.lynx/colors:COLOR
+INCLUDE:~/.lynx/keymap:KEYMAP
+INCLUDE:~/.lynx/viewers:VIEWER
+INCLUDE:~/.lynx/external:EXTERNAL
diff --git a/.config/mutt/asciidoc-template/block_admonition.html.haml b/.config/mutt/asciidoc-template/block_admonition.html.haml
@@ -0,0 +1,5 @@
+.admonition{:id => @id, :role => "note", :"aria-label" => (attr :name)}
+  %div{:"aria-hidden" => true}
+    %img.icon{:src => (image_uri "icons/#{attr :name}.svg"), 
+      :alt => (@caption || "#{attr :name} icon")}
+  %div=content
diff --git a/.config/mutt/asciidoc-template/block_audio.html.haml b/.config/mutt/asciidoc-template/block_audio.html.haml
@@ -0,0 +1,3 @@
+%figure{:id=>@id, :class=>@style}
+  %audio{:src=>media_uri(attr :target), :autoplay=>(option? :autoplay), 
+    :controls=>!(option? :nocontrols), :loop=>(option? :loop)}
diff --git a/.config/mutt/asciidoc-template/block_colist.html.haml b/.config/mutt/asciidoc-template/block_colist.html.haml
@@ -0,0 +1,3 @@
+%ol
+  - items.each do |item|
+    %li=item.text
diff --git a/.config/mutt/asciidoc-template/block_dlist.html.haml b/.config/mutt/asciidoc-template/block_dlist.html.haml
@@ -0,0 +1,11 @@
+%dl
+  - items.each do |terms, dd|
+    - [*terms].each do |dt|
+      %dt=dt.text
+    - unless dd.nil?
+      %dd
+        - if dd.text?
+          %p 
+            =dd.text
+        - if dd.blocks?
+          =dd.content
diff --git a/.config/mutt/asciidoc-template/block_example.haml.haml b/.config/mutt/asciidoc-template/block_example.haml.haml
diff --git a/.config/mutt/asciidoc-template/block_floating_title.html.haml b/.config/mutt/asciidoc-template/block_floating_title.html.haml
@@ -0,0 +1 @@
+- haml_tag "h#{@level + 1}", title
diff --git a/.config/mutt/asciidoc-template/block_image.html.haml b/.config/mutt/asciidoc-template/block_image.html.haml
@@ -0,0 +1,15 @@
+- if attr? :link
+  %a{:href => (attr :link)}
+    %figure
+      %img{:src => image_uri(attr :target), :alt => (attr :alt), 
+        :width => (attr :width), :height => (attr :height)}
+      - if @attributes[1]
+        %figcaption
+          %em=@attributes[1]
+- else
+  %figure
+    %img{:src => image_uri(attr :target), :alt => (attr :alt), 
+      :width => (attr :width), :height => (attr :height)}
+    - if @attributes[1]
+      %figcaption
+        %em=@attributes[1]
diff --git a/.config/mutt/asciidoc-template/block_listing.html.haml b/.config/mutt/asciidoc-template/block_listing.html.haml
@@ -0,0 +1,33 @@
+- nowrap = !(@document.attr? :prewrap) || (option? :nowrap)
+- if @style == 'source'
+  - code_lang = attr :language, nil, false
+  - code_class = ["language-#{code_lang}"] if code_lang
+  - pre_class = ['highlight']
+  - pre_lang = nil
+  - case document.attr 'source-highlighter'
+  - when 'coderay'
+    - pre_class.unshift 'CodeRay'
+    - code_class = nil
+  - when 'pygments'
+    - pre_class.unshift 'pygments'
+    - code_class = nil
+  - when 'highlightjs', 'highlight.js'
+    - pre_class.unshift 'highlightjs'
+  - when 'prettify'
+    - pre_class.unshift 'prettyprint'
+    - pre_class << 'linenums' if attr? :linenums
+  - when 'html-pipeline'
+    - pre_lang = code_lang
+    - code_class = code_lang = pre_class = nil
+    - nowrap = false
+  - pre_class << 'nowrap' if nowrap
+  %code.block{:"aria-label" => (title? ? title : nil)}
+    - if title?
+      %span.title=title
+    %pre{:class=>pre_class, :lang=>pre_lang}
+      %code{:class=>code_class, 'data-lang'=>code_lang}=content
+- else
+  %code.block{:"aria-label" => (title? ? title : nil)}
+    - if title?
+      %span.title=title
+    %pre{:class=>('nowrap' if nowrap)}=content
diff --git a/.config/mutt/asciidoc-template/block_literal.html.haml b/.config/mutt/asciidoc-template/block_literal.html.haml
@@ -0,0 +1 @@
+%pre=content
diff --git a/.config/mutt/asciidoc-template/block_olist.html.haml b/.config/mutt/asciidoc-template/block_olist.html.haml
@@ -0,0 +1,7 @@
+%ol{:start => (attr :start), :type => list_marker_keyword}
+  - items.each do |item|
+    %li
+      =item.text
+      - if item.blocks?
+        =item.content
+
diff --git a/.config/mutt/asciidoc-template/block_open.html.haml b/.config/mutt/asciidoc-template/block_open.html.haml
@@ -0,0 +1,6 @@
+- if @style == 'abstract'
+  %blockquote
+    - if title?
+      %h1=title
+    =content
+
diff --git a/.config/mutt/asciidoc-template/block_outline.html.haml b/.config/mutt/asciidoc-template/block_outline.html.haml
diff --git a/.config/mutt/asciidoc-template/block_page_break.html.haml b/.config/mutt/asciidoc-template/block_page_break.html.haml
@@ -0,0 +1 @@
+
diff --git a/.config/mutt/asciidoc-template/block_paragraph.html.haml b/.config/mutt/asciidoc-template/block_paragraph.html.haml
@@ -0,0 +1,2 @@
+%p 
+  =content
diff --git a/.config/mutt/asciidoc-template/block_preamble.html.haml b/.config/mutt/asciidoc-template/block_preamble.html.haml
@@ -0,0 +1,2 @@
+%section#preamble
+  %em=content
diff --git a/.config/mutt/asciidoc-template/block_quote.html.haml b/.config/mutt/asciidoc-template/block_quote.html.haml
@@ -0,0 +1,8 @@
+%blockquote{:id => @id}
+  %em=content
+  - if (attr? :attribution) or (attr? :citetitle)
+    %footer
+      - if attr? :attribution
+        &#8212; #{attr :attribution}
+      - if attr? :citetitle
+        %cite=attr :citetitle
diff --git a/.config/mutt/asciidoc-template/block_sidebar.html.haml b/.config/mutt/asciidoc-template/block_sidebar.html.haml
@@ -0,0 +1 @@
+
diff --git a/.config/mutt/asciidoc-template/block_stem.html.haml b/.config/mutt/asciidoc-template/block_stem.html.haml
@@ -0,0 +1,14 @@
+- require 'asciimath'
+- require 'mathematical'
+- require 'escape_utils'
+- case @style.to_sym
+- when :asciimath
+  - amath = EscapeUtils.unescape_html(content)
+  - tex = "$$#{AsciiMath.parse(amath).to_latex}$$"
+- when :latexmath
+  - tex = "$$#{EscapeUtils.unescape_html(content)}$$"
+
+- svg = Mathematical.new.render(tex)
+- if svg[:data] and not svg[:exception]
+  %figure.equation
+    =(svg[:data])
diff --git a/.config/mutt/asciidoc-template/block_table.html.haml b/.config/mutt/asciidoc-template/block_table.html.haml
@@ -0,0 +1,42 @@
+%table{:id => @id, :width => (attr :tablewidth)}
+  - if title?
+    %caption=captioned_title
+  - unless (attr :rowcount).zero?
+    %colgroup
+      - @columns.each do |col|
+        %col{:width => "#{col.attr :colpcwidth}%"}
+    - [:head, :foot, :body].select {|tblsec| !@rows[tblsec].empty? }.each do |tblsec|
+      - haml_tag "t#{tblsec}" do
+        - @rows[tblsec].each do |row|
+          %tr
+            - row.each do |cell|
+              -# store reference of content in advance to resolve attribute 
+              -# assignments in cells
+              - if tblsec == :head
+                - cell_content = cell.text
+              - else
+                - case cell.style
+                - when :verse, :literal
+                  - cell_content = cell.text
+                - else
+                  - cell_content = cell.content
+              - bg = @document.attr :cellbgcolor, nil
+              - tag = tblsec == :head || cell.style == :header ? 'th' : 'td'
+              - cs = cell.colspan
+              - rs = cell.rowspan
+              - haml_tag tag, :<, :colspan => cs, :rowspan => rs, :background => bg do
+                - if tblsec == :head
+                  .cell=cell_content
+                - else
+                  - case cell.style
+                  - when :asciidoc
+                    .cell=cell_content
+                  - when :verse
+                    .cell~cell_content
+                  - when :literal
+                    .cell
+                      %pre=cell_content
+                  - else
+                    .cell
+                      - cell_content.each do |text|
+                        %p<=text
diff --git a/.config/mutt/asciidoc-template/block_toc.html.haml b/.config/mutt/asciidoc-template/block_toc.html.haml
diff --git a/.config/mutt/asciidoc-template/block_ulist.html.haml b/.config/mutt/asciidoc-template/block_ulist.html.haml
@@ -0,0 +1,6 @@
+%ul{:start => (attr :start), :type => list_marker_keyword}
+  - items.each do |item|
+    %li
+      =item.text
+      - if item.blocks?
+        =item.content
diff --git a/.config/mutt/asciidoc-template/block_verse.html.haml b/.config/mutt/asciidoc-template/block_verse.html.haml
@@ -0,0 +1,4 @@
+%blockquote{:id => @id}
+  %em=content
+  - if title?
+    %footer=title
diff --git a/.config/mutt/asciidoc-template/block_video.html.haml b/.config/mutt/asciidoc-template/block_video.html.haml
@@ -0,0 +1,12 @@
+%figure
+  - if video_iframe?
+    %iframe{:src=>video_uri, :frameborder=>0, 
+      :allowfullscreen=>!(option? :nofullscreen)}
+  - else
+    %video{:src=>video_uri, 
+      :poster=>((attr :poster) ? media_uri(attr :poster) : nil), 
+      :autoplay=>(option? :autoplay), :controls=>!(option? :nocontrols), 
+      :loop=>(option? :loop)}
+      Your browser does not support the video tag.
+  - if title?
+    %figcaption=title
diff --git a/.config/mutt/asciidoc-template/document.html.haml b/.config/mutt/asciidoc-template/document.html.haml
@@ -0,0 +1,23 @@
+!!! 5
+%html{:lang=>(attr :lang, 'en')}
+  %head
+    %meta(charset="#{attr :encoding, 'UTF-8'}")
+    :css
+      img, object, svg {
+        vertical-align: middle;
+      }
+
+      figure.equation {
+        display: flex;
+        width: 100%;
+      }
+
+      figure.equation > svg {
+        margin: 0 auto;
+      }
+
+    - unless (docinfo_content = docinfo).empty?
+      =docinfo_content
+  %body{:id => @id }
+    =content
+
diff --git a/.config/mutt/asciidoc-template/helpers.rb b/.config/mutt/asciidoc-template/helpers.rb
@@ -0,0 +1,96 @@
+# Add custom functions to this module that you want to use in your Haml
+# templates. Within the template you can invoke them as top-level functions
+# just like the built-in helper functions that Haml provides.
+module Haml::Helpers
+
+  ##
+  # Returns corrected section level.
+  #
+  # @param sec [Asciidoctor::Section] the section node (default: self).
+  # @return [Integer]
+  #
+  def section_level(sec = self)
+    @_section_level ||= (sec.level == 0 && sec.special) ? 1 : sec.level
+  end
+
+  ##
+  # Returns the captioned section's title, optionally numbered.
+  #
+  # @param sec [Asciidoctor::Section] the section node (default: self).
+  # @return [String]
+  #
+  def section_title(sec = self)
+    sectnumlevels = document.attr(:sectnumlevels, 3).to_i
+
+    if sec.numbered && !sec.caption && sec.level <= sectnumlevels
+      [sec.sectnum, sec.captioned_title].join(' ')
+    else
+      sec.captioned_title
+    end
+  end
+
+  #--------------------------------------------------------
+  # block_table
+  #
+
+  def autowidth?
+    option? :autowidth
+  end
+
+  def spread?
+    'spread' if !(option? 'autowidth') && (attr :tablepcwidth) == 100
+  end
+
+  #--------------------------------------------------------
+  # block_video
+  #
+
+  # @return [Boolean] +true+ if the video should be embedded in an iframe.
+  def video_iframe?
+    case attr :target
+    when /youtube/, /vimeo/
+      true
+    else
+      false
+    end
+  end
+
+  def video_uri
+    case (attr :poster, '').to_sym
+    when :vimeo
+      params = {
+        :autoplay => (1 if option? 'autoplay'),
+        :loop     => (1 if option? 'loop')
+      }
+      start_anchor = "#at=#{attr :start}" if attr? :start
+      "//player.vimeo.com/video/#{attr :target}#{start_anchor}#{url_query params}"
+
+    when :youtube
+      video_id, list_id = (attr :target).split('/', 2)
+      params = {
+        :rel      => 0,
+        :start    => (attr :start),
+        :end      => (attr :end),
+        :list     => (attr :list, list_id),
+        :autoplay => (1 if option? 'autoplay'),
+        :loop     => (1 if option? 'loop'),
+        :controls => (0 if option? 'nocontrols')
+      }
+      "//www.youtube.com/embed/#{video_id}#{url_query params}"
+    else
+      anchor = [(attr :start), (attr :end)].join(',').chomp(',')
+      anchor.prepend '#t=' unless anchor.empty?
+      media_uri "#{attr :target}#{anchor}"
+    end
+  end
+
+  # Formats URL query parameters.
+  def url_query(params)
+    str = params.map { |k, v|
+      next if v.nil? || v.to_s.empty?
+      [k, v] * '='
+    }.compact.join('&amp;')
+
+    str.prepend('?') unless str.empty?
+  end
+end
diff --git a/.config/mutt/asciidoc-template/inline_anchor.html.haml b/.config/mutt/asciidoc-template/inline_anchor.html.haml
@@ -0,0 +1,14 @@
+- case @type
+- when :xref
+  - refid = (attr :refid) || @target
+  - t = @text
+  - t ||= @document.references[:ids].fetch(refid, "[#{refid}]")
+  %a(href="#{@target}"){:target => (atrr :window)}=t.tr_s("\n", ' ')
+- when :ref
+  %a(id=@target){:target => (attr :window)}
+- when :bibref
+  %a(id=@target){:target => (attr :window)}>
+  =%([#{@target}])
+- else
+  %a(href=@target){:id=>@id, :target=>(attr :window), 
+    :title=>(attr :title)}=@text
diff --git a/.config/mutt/asciidoc-template/inline_button.html.haml b/.config/mutt/asciidoc-template/inline_button.html.haml
@@ -0,0 +1 @@
+%strong=@text
diff --git a/.config/mutt/asciidoc-template/inline_callout.html.haml b/.config/mutt/asciidoc-template/inline_callout.html.haml
@@ -0,0 +1 @@
+%span.conum=@text
diff --git a/.config/mutt/asciidoc-template/inline_footnote.html.haml b/.config/mutt/asciidoc-template/inline_footnote.html.haml
@@ -0,0 +1,11 @@
+- if (index = attr :index)
+  - if @type == :xref
+    %span.footnoteref<
+      = surround '[', ']' do
+        %a.footnote(href="#_footnote_#{index}" title="View footnote.")=index
+  - else
+    %span.footnote{:id=>(['_footnote', @id] if @id)}<
+      = surround '[', ']' do
+        %a.footnote(href="#_footnote_#{index}" title="View footnote."){:id=>['_footnoteref', index]}=index
+- elsif @type == :xref
+  %span.footnoteref.red(title="Unresolved footnote reference.")="[#{text}]"
diff --git a/.config/mutt/asciidoc-template/inline_image.html.haml b/.config/mutt/asciidoc-template/inline_image.html.haml
@@ -0,0 +1,8 @@
+%span<
+  - if attr? :link
+    %a{:href => (attr :link), :target => (attr :window)}
+      %img{:src=>src, :alt=>(attr :alt), :width=>(attr :width), 
+        :height=>(attr :height), :title=>(attr :title)}
+  - else
+    %img{:src=>src, :alt=>(attr :alt), :width=>(attr :width), 
+      :height=>(attr :height), :title=>(attr :title)}
diff --git a/.config/mutt/asciidoc-template/inline_kbd.html.haml b/.config/mutt/asciidoc-template/inline_kbd.html.haml
@@ -0,0 +1,8 @@
+- if (keys = attr 'keys').size == 1
+  %kbd=keys.first
+- else
+  %kbd
+    - keys.each_with_index do |key, idx|
+      - unless idx.zero?
+        ='+'
+      %kbd>=key
diff --git a/.config/mutt/asciidoc-template/inline_menu.html.haml b/.config/mutt/asciidoc-template/inline_menu.html.haml
@@ -0,0 +1,15 @@
+- menu = attr 'menu'
+- menuitem = attr 'menuitem'
+- if !(submenus = attr 'submenus').empty?
+  %span.menuseq
+    %span.menu>=menu
+    ='&#160;&#9656; '
+    =submenus.map {|submenu| %(<span class="submenu">#{submenu}</span>&#160;&#9656; ) }.join
+    %span.menuitem>=menuitem
+- elsif !menuitem.nil?
+  %span.menuseq
+    %span.menu>=menu
+    ='&#160;&#9656; '
+    %span.menuitem>=menuitem
+- else
+  %span.menu=menu
diff --git a/.config/mutt/asciidoc-template/inline_quoted.html.haml b/.config/mutt/asciidoc-template/inline_quoted.html.haml
@@ -0,0 +1,34 @@
+- require 'asciimath'
+- require 'mathematical'
+- require 'escape_utils'
+- case @type
+- when :emphasis
+  %em=@text
+- when :strong
+  %strong=@text
+- when :monospaced
+  %code{:class => "inline"}=@text
+- when :superscript
+  %sup=@text
+- when :subscript
+  %sub=@text
+- when :mark
+  %mark=@text
+- when :double
+  = surround '“', '”' do
+    =@text
+- when :single
+  = surround '‘', '’' do
+    =@text
+- when :asciimath, :latexmath
+  - if @type == :asciimath
+    - amath = EscapeUtils.unescape_html(@text)
+    - tex = "$#{AsciiMath.parse(amath).to_latex}$"
+  - else
+    - tex = "$#{EscapeUtils.unescape_html(@text)}$"
+  
+  - svg = Mathematical.new.render(tex)
+  - if svg[:data] and not svg[:exception]
+    =(svg[:data])
+- else
+  =@text
diff --git a/.config/mutt/asciidoc-template/section.html.haml b/.config/mutt/asciidoc-template/section.html.haml
@@ -0,0 +1,4 @@
+%section{:"aria-level" => level, :id => @id}
+  - slevel = @level == 0 && @special ? 1 : @level
+  - haml_tag "h#{slevel + 1}", captioned_title
+  =content
diff --git a/.config/mutt/muttrc b/.config/mutt/muttrc
@@ -0,0 +1,48 @@
+#                  _   _            
+#                 | | | |           
+#  _ __ ___  _   _| |_| |_ _ __ ___ 
+# | '_ ` _ \| | | | __| __| '__/ __|
+# | | | | | | |_| | |_| |_| | | (__ 
+# |_| |_| |_|\__,_|\__|\__|_|  \___|
+#
+# Pablo Emilio Escobar Gaviria (C) 2020
+
+# Source MuttWizard configs
+source /usr/local/share/mutt-wizard/mutt-wizard.muttrc
+
+# Open my public account
+source /home/pablo/.config/mutt/accounts/1-public.muttrc
+
+# =============================== Accounts ====================================
+
+# Public account
+macro index,pager i1 '<sync-mailbox><enter-command>source /home/pablo/.config/mutt/accounts/1-public.muttrc<enter><change-folder>' "switch to my public email account"
+
+# University account
+macro index,pager i2 '<sync-mailbox><enter-command>source /home/pablo/.config/mutt/accounts/2-university.muttrc<enter><change-folder>' "switch to my university account"
+
+# =========================== Reading/Indexing ================================
+
+# Read HTML email with Lynx
+auto_view text/html
+alternative_order text/plain text/enriched text/html
+
+# Add new contacts to abook
+macro index,pager A "<pipe-message>abook --add-email<return>" "add the sender address to abook"
+
+# ============================== Composing ====================================
+
+# Pass the appropriate flags to nvim
+set editor="nvim -c 'set ft=asciidoc'"
+
+set date_format="%a, %b %d, %Y"
+
+# Format the message with Asciidoctor
+macro compose A "F asciidoctor -T ~/.config/mutt/asciidoc-template -o - - \ny^T^Utext/html; charset=utf-8\n" "format a messege with Asciidoctor"
+set wait_key=no
+
+# =============================== Security ====================================
+
+# Hide my user-agent
+my_hdr User-Agent: Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/78.0
+
diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim
@@ -0,0 +1,101 @@
+"  _       _ _         _           
+" (_)     (_) |       (_)          
+"  _ _ __  _| |___   ___ _ __ ___  
+" | | '_ \| | __\ \ / / | '_ ` _ \ 
+" | | | | | | |_ \ V /| | | | | | |
+" |_|_| |_|_|\__(_)_/ |_|_| |_| |_|
+" 
+" Pablo Emilio Escobar Gavíria (C) 2020
+"
+
+" Turn on syntax highlighting
+syntax on
+filetype indent plugin on
+
+" Configure keybindings
+let mapleader = " "
+"Maps <Leader><Leader> to 'next window'
+map <Leader><Leader> <C-W>w
+map <Leader><CR>     :NERDTreeToggle<CR>
+
+" Configure tabs so that tabs are expanded to 2 spaces
+set tabstop=2 softtabstop=0 expandtab shiftwidth=2 smarttab
+
+" Set the column-cap
+set colorcolumn=80
+set textwidth=79
+
+" Highlight the cursor line
+set cursorline
+
+" Set up the colorscheme
+colo snazzy
+let g:SnazzyTransparent = 1
+let g:lightline = {'colorscheme': 'snazzy',}
+
+" Turn on the transparent background
+hi Normal ctermbg=NONE guibg=NONE
+
+" Fix the highlighting of underlined text
+hi Underlined cterm=bold,underline gui=bold,underline ctermbg=none guibg=none
+
+" Highlight tyṕos in red
+hi clear SpellBad
+hi SpellBad cterm=underline gui=underline guifg=#ff5f5f
+
+" Set up line numbering
+hi LineNr cterm=bold gui=bold
+hi CursorLineNr cterm=bold gui=bold ctermfg=White guifg=White
+set relativenumber
+set number
+
+" Configure the directory tto store the undo files
+set dir=~/.vimswap//,/var/tmp//,/tmp//,.
+set undofile                        " Save undos after file closes
+set undodir=$HOME/.config/nvim/undo " Where to save undo histories
+set undolevels=1000                 " How many undos
+set undoreload=10000                " Number of lines to save for undo
+
+" Enabling mouse support
+set mouse=a
+
+" Auto-update a file when it changes externally
+set autoread
+au CursorHold * checktime
+
+" Configure the status line
+set noshowmode
+
+" Disable the arrow keys
+noremap <Up>      <Nop>
+noremap <Down>    <Nop>
+noremap <Left>    <Nop>
+noremap <Right>   <Nop>
+noremap <S-Left>  <Nop>
+noremap <S-Right> <Nop>
+
+""" Language-specific stuff
+
+" Highlight TiKz files as LaTeX
+au BufNewFile,BufRead *.tikz,*.tex      set ft=tex
+
+" Highlight .thtml files as HTML
+au BufNewFile,BufRead *.thtml           set ft=html
+
+" Highlight .tcss files as HTML
+au BufNewFile,BufRead *.tcss            set ft=css
+
+" Highlight .wat files as WebAssembly text format
+au BufNewFile,BufRead *.wat             set ft=wast
+
+" Correctly highlight fish scripts
+au BufNewFile,BufRead *.fish            set ft=fish
+
+" Read .pl files as Prolog (not Perl).
+au BufNewFile,BufRead *.pl              set ft=prolog
+
+" Read .m and .mathematica as Mathematica files
+au BufNewFile,BufRead *.m,*.mathematica set ft=mma
+
+" Supress word wrapping when reading Python source files
+au BufNewFile,BufRead *.py              set textwidth=0
diff --git a/.config/ranger/rc.conf b/.config/ranger/rc.conf
@@ -0,0 +1,26 @@
+#                             __ 
+#                            / _|
+#  _ __ ___   ___ ___  _ __ | |_ 
+# | '__/ __| / __/ _ \| '_ \|  _|
+# | | | (__ | (_| (_) | | | | |  
+# |_|  \___(_)___\___/|_| |_|_|  
+#
+# Pablo Emilio Escobar Gaviria (C) 2020
+
+# Configure ranger to preview images in the shell
+set preview_images false
+set use_preview_script true
+set preview_script ~/.config/ranger/scope.sh
+
+# Draw borders around panes
+set draw_borders true
+
+# Move files to trash
+map dd shell gio trash %s
+map D  shell gio trash %s
+
+# Copy (yank) a file
+map y copy
+
+# Paste (put) a file
+map p paste
diff --git a/.config/tmux/tmux.conf b/.config/tmux/tmux.conf
@@ -0,0 +1,18 @@
+#                      _     _       
+#    ____             | |   | |      
+#   / __ \ _ __   __ _| |__ | | ___  
+#  / / _` | '_ \ / _` | '_ \| |/ _ \ 
+# | | (_| | |_) | (_| | |_) | | (_) |
+#  \ \__,_| .__/ \__,_|_.__/|_|\___/ 
+#   \____/| |                        
+#         |_|                        
+# 
+# Pablo Emilio Escobar Gavíria (C) 2020
+#
+
+set -g mouse on
+bind '"' split-window -c "#{pane_current_path}"
+bind  % split-window -h -c "#{pane_current_path}"
+unbind C-k
+bind C-k clear-history
+set -g history-file "$XDG_CONFIG_HOME/tmux/tmux.history"
diff --git a/.local/bin/exports.sh b/.local/bin/exports.sh
@@ -0,0 +1,85 @@
+#!/bin/sh
+#                             _             _     
+#                            | |           | |    
+#   _____  ___ __   ___  _ __| |_ ___   ___| |__  
+#  / _ \ \/ / '_ \ / _ \| '__| __/ __| / __| '_ \ 
+# |  __/>  <| |_) | (_) | |  | |_\__ \_\__ \ | | |
+#  \___/_/\_\ .__/ \___/|_|   \__|___(_)___/_| |_|
+#           | |                                   
+#           |_|                                   
+# 
+# File that contains all environmet variables I use. This can be sourced from,
+# bash, fish, sh, zsh, etc.
+
+# Configre XDG stuff
+export XDG_CONFIG_HOME="$HOME/.config"
+export XDG_CACHE_HOME="$HOME/.cache"
+export XDG_DATA_HOME="$HOME/.local/share"
+
+# =========================== Programming Languages ==========================
+# Rust
+export CARGO_HOME="$XDG_DATA_HOME/cargo"
+export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
+
+# Ruby
+export GEM_HOME="$XDG_DATA_HOME/gem"
+export GEM_SPEC_CACHE="$XDG_CACHE_HOME/gem"
+export BUNDLE_USER_CONFIG="$XDG_CONFIG_HOME/bundle"
+export BUNDLE_USER_CACHE="$XDG_CACHE_HOME/bundle"
+export BUNDLE_USER_PLUGIN="$XDG_DATA_HOME/bundle"
+export DEBIAN_DISABLE_RUBYGEMS_INTEGRATION="true"
+
+# Libraries for the Go programming language
+export GOPATH="$XDG_DATA_HOME/go"
+
+# Haskell
+export STACK_ROOT="$XDG_DATA_HOME/stack"
+
+# Racket
+export PLTUSERHOME="$XDG_DATA_HOME/racket"
+
+# JS
+export DENO_INSTALL="$XDG_DATA_HOME/deno"
+export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME/npm/npmrc"
+
+export WASMTIME_HOME="$XDG_DATA_HOME/wasmtime"
+
+# ================================ Programs ==================================
+
+# Bash history
+export HISTFILE="$XDG_DATA_HOME/bash/history"
+
+# gpg
+export GNUPGHOME="$XDG_DATA_HOME/gnupg"
+
+# readline
+export INPUTRC="$XDG_CONFIG_HOME/readline/inputrc"
+
+# less history cache
+export LESSKEY="$XDG_CONFIG_HOME/less/lesskey"
+export LESSHISTFILE="$XDG_CACHE_HOME/less/history"
+
+# wget
+export WGETRC="$XDG_CONFIG_HOME/wgetrc"
+
+# LLVM
+export LLVM_CONFIG="/usr/bin/llvm-config-10"
+
+# TeXLive
+export TEXMFHOME="$XDG_DATA_HOME/texmf"
+export TEXMFVAR="$XDG_CACHE_HOME/texlive/texmf-var"
+export TEXMFCONFIG="$XDG_CONFIG_HOME/texlive/texmf-config"
+
+# WeeChat
+export WEECHAT_HOME="$XDG_CONFIG_HOME/weechat"
+
+# notmuch
+export NOTMUCH_CONFIG="$XDG_CONFIG_HOME"/notmuch/notmuchrc
+export NMBGIT="$XDG_DATA_HOME"/notmuch/nmbug
+
+# Default programs
+export TERMINAL="alacritty"
+export EDITOR="nvim"
+export GIT_EDITOR="$EDITOR"
+export VISUAL="$EDITOR"
+export PAGER="less"