dotfiles

My personal dotfiles 💠️

commit dce2a19c1479cc0bc68c9179735ff9127a7b2904
Author: Pablo <pablo-escobar@riseup.net>
Date:   Thu, 29 Jul 2021 22:15:44 -0300

Initialized the repository

Diffstat:
A.bashrc | 98+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/alacritty/alacritty.yml | 603+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/bat/config | 38++++++++++++++++++++++++++++++++++++++
A.config/bat/syntaxes/sublime-idris-syntax/Comments.tmPreferences | 34++++++++++++++++++++++++++++++++++
A.config/bat/syntaxes/sublime-idris-syntax/LICENSE | 24++++++++++++++++++++++++
A.config/bat/syntaxes/sublime-idris-syntax/README.md | 16++++++++++++++++
A.config/bat/syntaxes/sublime-idris-syntax/idris.sublime-syntax | 139+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/dotfiles.list | 22++++++++++++++++++++++
A.config/fish/config.fish | 93+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/fish/functions/backup.fish | 38++++++++++++++++++++++++++++++++++++++
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/gdb/init | 13+++++++++++++
A.config/git/config | 5+++++
A.config/latexmk/latexmkrc | 4++++
A.config/lynx/lynx.cfg | 32++++++++++++++++++++++++++++++++
A.config/mutt/accounts/2-public.muttrc | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/mutt/muttrc | 56++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/nvim/init.vim | 141+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/ranger/commands.py | 28++++++++++++++++++++++++++++
A.config/ranger/rc.conf | 26++++++++++++++++++++++++++
A.config/ranger/rifle.conf | 213+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/ranger/scope.sh | 121+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/tmux/tmux.conf | 26++++++++++++++++++++++++++
A.config/zathura/snazzy.conf | 22++++++++++++++++++++++
A.config/zathura/zathurarc | 31+++++++++++++++++++++++++++++++
A.local/bin/aliases.sh | 28++++++++++++++++++++++++++++
A.local/bin/config | 148+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/emojipick | 9+++++++++
A.local/bin/exports.sh | 153+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/ico-sxiv | 15+++++++++++++++
A.local/bin/mathpick | 9+++++++++
A.local/bin/texclear | 16++++++++++++++++
A.local/bin/wheel | 8++++++++
A.profile | 5+++++
39 files changed, 2853 insertions(+), 0 deletions(-)
diff --git a/.bashrc b/.bashrc
@@ -0,0 +1,98 @@
+#
+# ~/.bashrc
+#
+
+[[ $- != *i* ]] && return
+
+. $HOME/.local/bin/exports.sh
+. $HOME/.local/bin/aliases.sh
+
+colors() {
+	local fgc bgc vals seq0
+
+	printf "Color escapes are %s\n" '\e[${value};...;${value}m'
+	printf "Values 30..37 are \e[33mforeground colors\e[m\n"
+	printf "Values 40..47 are \e[43mbackground colors\e[m\n"
+	printf "Value  1 gives a  \e[1mbold-faced look\e[m\n\n"
+
+	# foreground colors
+	for fgc in {30..37}; do
+		# background colors
+		for bgc in {40..47}; do
+			fgc=${fgc#37} # white
+			bgc=${bgc#40} # black
+
+			vals="${fgc:+$fgc;}${bgc}"
+			vals=${vals%%;}
+
+			seq0="${vals:+\e[${vals}m}"
+			printf "  %-9s" "${seq0:-(default)}"
+			printf " ${seq0}TEXT\e[m"
+			printf " \e[${vals:+${vals+$vals;}}1mBOLD\e[m"
+		done
+		echo; echo
+	done
+}
+
+[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion
+
+# Change the window title of X terminals
+case ${TERM} in
+	xterm*|rxvt*|Eterm*|aterm|kterm|gnome*|interix|konsole*)
+		PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\007"'
+		;;
+	screen*)
+		PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\033\\"'
+		;;
+esac
+
+use_color=true
+
+# Set colorful PS1 only on colorful terminals.
+# first to take advantage of user additions.  Use internal bash
+# globbing instead of external grep binary.
+safe_term=${TERM//[^[:alnum:]]/?}   # sanitize TERM
+match_lhs=""
+[[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(</etc/DIR_COLORS)"
+[[ -z ${match_lhs}    ]] \
+	&& type -P dircolors >/dev/null \
+	&& match_lhs=$(dircolors --print-database)
+[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true
+
+if ${use_color} ; then
+	# Enable colors for ls, etc. 
+	if type -P dircolors >/dev/null && [[ -f /etc/DIR_COLORS ]] ; then
+    eval $(dircolors -b /etc/DIR_COLORS)
+	fi
+
+	if [[ ${EUID} == 0 ]] ; then
+		PS1='[\[\033[01;32m\]\u@\h\[\033[01;34m\] \W\[\e[00;37m\]]\$\[\033[00m\] '
+		PS2='\[\033[01;34m\]\W \[\e[00;37m\]\$\[\033[00m\] '
+	else
+		PS1='[\[\033[01;32m\]\u@\h\[\033[01;34m\] \W\[\e[00;37m\]]\$\[\033[00m\] '
+		PS2='\[\033[01;34m\]\W \[\e[00;37m\]\#\[\033[00m\] '
+	fi
+else
+	if [[ ${EUID} == 0 ]] ; then
+		# show root@ when we don't have colors
+		PS1='\u@\h \W \# '
+	else
+		PS1='\u@\h \w \$ '
+	fi
+fi
+
+unset use_color safe_term match_lhs sh
+
+xhost +local:root > /dev/null 2>&1
+
+# Bash won't get SIGWINCH if another process is in the foreground.
+# Enable checkwinsize so that bash will check the terminal size when
+# it regains control.  #65623
+# http://cnswww.cns.cwru.edu/~chet/bash/FAQ (E11)
+shopt -s checkwinsize
+
+shopt -s expand_aliases
+
+# Enable history appending instead of overwriting.  #139609
+shopt -s histappend
+
diff --git a/.config/alacritty/alacritty.yml b/.config/alacritty/alacritty.yml
@@ -0,0 +1,603 @@
+#                      _     _       
+#    ____             | |   | |      
+#   / __ \ _ __   __ _| |__ | | ___  
+#  / / _` | '_ \ / _` | '_ \| |/ _ \ 
+# | | (_| | |_) | (_| | |_) | | (_) |
+#  \ \__,_| .__/ \__,_|_.__/|_|\___/ 
+#   \____/| |                        
+#         |_|                        
+# 
+# Pablo (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: 10.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: 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/bat/syntaxes/sublime-idris-syntax/Comments.tmPreferences b/.config/bat/syntaxes/sublime-idris-syntax/Comments.tmPreferences
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>name</key>
+  <string>Comments</string>
+  <key>scope</key>
+  <string>source.idris</string>
+  <key>settings</key>
+  <dict>
+    <key>shellVariables</key>
+    <array>
+      <dict>
+        <key>name</key>
+        <string>TM_COMMENT_START_2</string>
+        <key>value</key>
+        <string>{-</string>
+      </dict>
+      <dict>
+        <key>name</key>
+        <string>TM_COMMENT_END_2</string>
+        <key>value</key>
+        <string>-}</string>
+      </dict>
+      <dict>
+        <key>name</key>
+        <string>TM_COMMENT_START</string>
+        <key>value</key>
+        <string>-- </string>
+      </dict>
+    </array>
+  </dict>
+</dict>
+</plist>
diff --git a/.config/bat/syntaxes/sublime-idris-syntax/LICENSE b/.config/bat/syntaxes/sublime-idris-syntax/LICENSE
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <http://unlicense.org>
diff --git a/.config/bat/syntaxes/sublime-idris-syntax/README.md b/.config/bat/syntaxes/sublime-idris-syntax/README.md
@@ -0,0 +1,16 @@
+# Idris Syntax Support for Sublime Text 3
+
+## Installation
+
+```bash
+mkdir ~/Library/Application\ Support/Sublime\ Text\ 3/Packages/IdrisSyntax
+cp ./idris.sublime-syntax  ~/Library/Application\ Support/Sublime\ Text\ 3/Packages/IdrisSyntax/
+cp ./Comments.tmPreferences  ~/Library/Application\ Support/Sublime\ Text\ 3/Packages/IdrisSyntax/
+```
+Then switch syntax to `Idris`.
+
+## Testing
+
+```bash
+while fswatch -1 ./idris.sublime-syntax; do rsync -a ./idris.sublime-syntax ~/Library/Application\ Support/Sublime\ Text\ 3/Packages/IdrisSyntax/; done
+```
diff --git a/.config/bat/syntaxes/sublime-idris-syntax/idris.sublime-syntax b/.config/bat/syntaxes/sublime-idris-syntax/idris.sublime-syntax
@@ -0,0 +1,139 @@
+%YAML 1.2
+---
+# See https://www.sublimetext.com/docs/3/syntax.html
+# See https://www.sublimetext.com/docs/3/scope_naming.html
+name: Idris
+file_extensions:
+  - idr
+scope: source.idris
+
+contexts:
+  # The prototype context is prepended to all contexts but those setting
+  # meta_include_prototype: false.
+  prototype:
+    - include: comments
+
+  main:
+    # The main context is the initial starting point of our syntax.
+    # Include other contexts from here (or specify them directly).
+    - include: keywords
+    - include: numbers
+    - include: strings
+    - include: function_signature
+    - include: type
+
+  keywords:
+    # Keywords are if, else for and while.
+    # Note that blackslashes don't need to be escaped within single quoted
+    # strings in YAML. When using single quoted strings, only single quotes
+    # need to be escaped: this is done by using two single quotes next to each
+    # other.
+    - match: \b(if|then|else|do|let|in|codata|record|dsl)\b
+      scope: keyword.control.idris
+    - match: \b(impossible|case|of|total|partial|mutual|infix|infixl|infixr)\b
+      scope: keyword.control.idris
+    - match: \b(where|with|syntax|proof|postulate|using|namespace|class|instance|interface|implementation|record|rewrite)\b
+      scope: keyword.control.idris
+    - match: \b(public|private|export|implicit)\b
+      scope: keyword.control.idris
+    - match: ^(module)\b
+      scope: keyword.other.idris
+    - match: \b(data)\b
+      scope: keyword.other.idris
+    - match: ^(import)\b
+      scope: keyword.control.import
+
+  numbers:
+    - match: \b(S|Z)\b
+      scope: constant.numeric.idris
+    - match: \b([0-9]+|0([xX][0-9a-fA-F]+|[oO][0-7]+))\b
+      scope: constant.numeric.idris
+    - match: \b([0-9]+\.[0-9]+([eE][+-]?[0-9]+)?|[0-9]+[eE][+-]?[0-9]+)\b
+      scope: constant.numeric.float.idris
+
+  strings:
+    - match: '"'
+      scope: punctuation.definition.string.begin.idris
+      push:
+        - meta_include_prototype: false
+        - meta_scope: string.quoted.double.idris
+        - match: '\\(NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\"''\&])'
+          scope: constant.character.escape.ascii.idris
+        - match: \\o[0-7]+|\\x[0-9A-Fa-f]+|\\[0-9]+
+          scope: constant.character.escape.octal.idris
+        - match: \^[A-Z@\[\]\\\^_]
+          scope: constant.character.escape.control.idris
+        - match: '"'
+          scope: punctuation.definition.string.end.idris
+          pop: true
+      
+    - match: \'
+      scope: constant.character.escape.control.idris
+      push:
+        - meta_include_prototype: false
+        - meta_scope: string.quoted.single.idris
+        - match: '\\(NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\"''\&])'
+          scope: constant.character.escape.ascii.idris
+        - match: \\o[0-7]+|\\x[0-9A-Fa-f]+|\\[0-9]+
+          scope: constant.character.escape.octal.idris
+        - match: \^[A-Z@\[\]\\\^_]
+          scope: constant.character.escape.control.idris
+        - match: \'
+          scope: punctuation.definition.string.end.idris
+          pop: true
+
+  comments:
+    - match: --
+      scope: punctuation.definition.comment.idris
+      push:
+        - meta_scope: comment.line.idris
+        - match: $\n?
+          pop: true
+    - match: '{-'
+      scope: punctuation.definition.comment.idris
+      push:
+        - meta_scope: comment.block.idris
+        - match: '-}'
+          pop: true
+    - match: \|\|\|
+      scope: punctuation.definition.comment.idris
+      push:
+        - meta_scope: comment.block.documentation.idris
+        - match: $\n?
+          pop: true
+
+  function_declarations:
+    - include: function_signature
+
+  function_signature:
+    - match: '^(\s*)(?!--)(?:(\(\W\)|[\w'']+)|[\(\[])(?=[\s\[\]\(\)]*(?:\s*)((?::)|\u2237))'
+      captures:
+        2: entity.name.function.idris
+      push:
+        - meta_scope: meta.declaration.function.idris
+        - match: '^(?!\1\s)|(?=})'
+          pop: true
+        - match: (?=.*((:)|\u2237))
+          captures:
+            1: keyword.name.function.idris
+          push:
+            - meta_scope: meta.declaration.function.names.idris
+            - match: ((:)|\u2237)
+              captures:
+                1: keyword.other.colon.idris
+              pop: true
+            - match: '([a-z_][\w'']*|\(\W+\))'
+              scope: entity.name.function.idris
+        - include: type
+        - match: '\b[A-Z][\w'']*'
+          scope: entity.name.type.idris
+
+  type:
+    - match: \b(Type|Int|Nat|Integer|Float|Char|String|Ptr|Bits8|Bits16|Bits32|Bits64|Bool)\b
+      scope: storage.type.idris
+    - match: \(\)
+      scope: constant.language.idris
+    - match: \s*(->|\u2192)\s*
+      scope: keyword.operator.arrow.idris
+    - match: \s*(=>|\u21D2)\s*
+      scope: keyword.operator.big-arrow.idris
diff --git a/.config/dotfiles.list b/.config/dotfiles.list
@@ -0,0 +1,22 @@
+/home/pablo/.config/alacritty
+/home/pablo/.config/bat
+/home/pablo/.config/fish/config.fish
+/home/pablo/.config/fish/functions
+/home/pablo/.config/gdb
+/home/pablo/.config/git
+/home/pablo/.config/lynx
+/home/pablo/.config/mutt/muttrc
+/home/pablo/.config/mutt/accounts/2-public.muttrc
+/home/pablo/.config/nvim/init.vim
+/home/pablo/.config/ranger/commands.py
+/home/pablo/.config/ranger/rc.conf
+/home/pablo/.config/ranger/rifle.conf
+/home/pablo/.config/ranger/scope.sh
+/home/pablo/.config/tmux/tmux.conf
+/home/pablo/.config/zathura
+/home/pablo/.profile
+/home/pablo/.bashrc
+/home/pablo/.local/bin/
+/home/pablo/.config/dotfiles.list
+/home/pablo/.config/latexmk
+
diff --git a/.config/fish/config.fish b/.config/fish/config.fish
@@ -0,0 +1,93 @@
+#                   __ _          __ _     _     
+#                  / _(_)        / _(_)   | |    
+#   ___ ___  _ __ | |_ _  __ _  | |_ _ ___| |__  
+#  / __/ _ \| '_ \|  _| |/ _` | |  _| / __| '_ \ 
+# | (_| (_) | | | | | | | (_| |_| | | \__ \ | | |
+#  \___\___/|_| |_|_| |_|\__, (_)_| |_|___/_| |_|
+#                         __/ |                  
+#                        |___/                   
+# 
+# Pablo (C) 2021
+
+# Sources environment variables
+source "$HOME/.local/bin/exports.sh"
+
+# Load OCaml stuff
+eval (opam env)
+
+# Configure the PATH variable
+set PATH $PATH /usr/local/share/*/{include,bin,lib}
+
+# Abbreviations
+abbr vim     'nvim'
+abbr sc      'sc-im'
+abbr weather 'curl https://wttr.in/'
+abbr mutt    'neomutt'
+
+# Aliases
+source "$HOME/.local/bin/aliases.sh"
+
+function fish_greeting
+    set_color yellow
+    fortune | cowthink -f none
+    set_color normal
+    fish_logo red ff743d yellow
+    printf '\n'
+end
+
+function _fish_prompt_long
+  # Formatted pwd
+  set dir (string replace "$HOME" '~' (pwd))
+
+  set_color normal
+  set_color 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 normal
+  set_color white
+  printf ']' 
+end
+
+function _fish_prompt_medium
+  # Formatted pwd
+  set dir (string replace "$HOME" '~' (pwd))
+
+  set_color --bold blue
+  printf '%s ' "$dir"
+  set_color normal
+  set_color white
+end
+
+function fish_prompt
+  # Show fancy prompt if the screen is big enought
+  if test (string length (_fish_prompt_long)) -lt (tput cols)
+    _fish_prompt_long
+  else if test (string length (_fish_prompt_medium)) -lt (tput cols)
+    _fish_prompt_medium
+  end
+
+  if test $status -ne 0
+    set_color 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,38 @@
+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"                        \
+    "/run/media/pablo/Seagate Backup Plus Drive/Backups/::$hostname-$date" \
+    "$HOME/.ssh"                                                           \
+    "$HOME/Archive"                                                        \
+    "$HOME/Documents"                                                      \
+    "$HOME/Passwords"                                                      \
+    "$HOME/Pictures"                                                       \
+    "$HOME/Music"                                                          \
+    "$HOME/Videos"                                                         \
+    "$HOME/.config"                                                        \
+    "$HOME/.local/share/excludefile"                                       \
+    "$HOME/.local/share/texmf"                                             \
+    "$HOME/.local/bin"                                                     \
+
+  gpg --export --armor pablo-escobar@riseup.net \
+    > "/run/media/pablo/Seagate Backup Plus Drive/pablo.asc" 
+
+  gpg --export-secret-keys --armor pablo-escobar@riseup.net \
+    > "/run/media/pablo/Seagate Backup Plus Drive/pablo-secret.asc" 
+
+  gpg --export-ownertrust \
+    > "/run/media/pablo/Seagate Backup Plus Drive/trustdb.txt" 
+
+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/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,5 @@
+[user]
+	email = pablo-escobar@riseup.net
+	name = Pablo
+[init]
+	defaultBranch = master
diff --git a/.config/latexmk/latexmkrc b/.config/latexmk/latexmkrc
@@ -0,0 +1,4 @@
+$pdflatex = "xelatex -halt-on-error -shell-escape %O %S";
+$pdf_mode = 1;
+$dvi_mode = 0;
+$postscript_mode = 0;
diff --git a/.config/lynx/lynx.cfg b/.config/lynx/lynx.cfg
@@ -0,0 +1,32 @@
+### 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
+INCLUDE:/etc/lynx/local.cfg
+INCLUDE:~/.lynx/colors:COLOR
+INCLUDE:~/.lynx/keymap:KEYMAP
+INCLUDE:~/.lynx/viewers:VIEWER
+
diff --git a/.config/mutt/accounts/2-public.muttrc b/.config/mutt/accounts/2-public.muttrc
@@ -0,0 +1,58 @@
+# vim: filetype=neomuttrc
+# muttrc file for account pablo-escobar@riseup.net
+set realname = "Pablo"
+set from = "pablo-escobar@riseup.net"
+set sendmail = "msmtp -a pablo-escobar@riseup.net"
+alias me Pablo <pablo-escobar@riseup.net>
+set folder = "/home/pablo/.local/share/mail/pablo-escobar@riseup.net"
+set header_cache = /home/pablo/.cache/mutt-wizard/pablo-escobar@riseup.net/headers
+set message_cachedir = /home/pablo/.cache/mutt-wizard/pablo-escobar@riseup.net/bodies
+set mbox_type = Maildir
+
+
+bind index,pager gg noop
+bind index,pager g noop
+bind index,pager M noop
+bind index,pager C noop
+bind index gg first-entry
+unmailboxes *
+unalternates *
+unset signature
+unmacro index o
+macro index o "<shell-escape>mw -y pablo-escobar@riseup.net<enter>" "run mbsync to sync pablo-escobar@riseup.net"
+
+mailboxes "=Archive" "=Sent" "=Drafts" "=Trash" "=Spam" "=INBOX"
+
+# Archive
+macro index,pager ga "<change-folder>=Archive<enter>" "go to archive"
+macro index,pager Ma ";<save-message>=Archive<enter>" "move mail to archive"
+macro index,pager Ca ";<copy-message>=Archive<enter>" "copy mail to archive"
+
+# Sent
+set record = "+Sent"
+macro index,pager gs "<change-folder>=Sent<enter>" "go to sent"
+macro index,pager Ms ";<save-message>=Sent<enter>" "move mail to sent"
+macro index,pager Cs ";<copy-message>=Sent<enter>" "copy mail to sent"
+
+set postponed = "+Drafts"
+macro index,pager gd "<change-folder>=Drafts<enter>" "go to drafts"
+macro index,pager Md ";<save-message>=Drafts<enter>" "move mail to drafts"
+macro index,pager Cd ";<copy-message>=Drafts<enter>" "copy mail to drafts"
+
+# Trash
+macro index,pager gt "<change-folder>=Trash<enter>" "go to trash"
+macro index,pager Mt ";<save-message>=Trash<enter>" "move mail to trash"
+macro index,pager Ct ";<copy-message>=Trash<enter>" "copy mail to trash"
+set trash = "+Trash"
+
+# Spam
+macro index,pager gS "<change-folder>=Spam<enter>" "go to spam"
+macro index,pager MS ";<save-message>=Spam<enter>" "move mail to spam"
+macro index,pager CS ";<copy-message>=Spam<enter>" "copy mail to spam"
+
+# Inbox
+macro index,pager gi "<change-folder>=INBOX<enter>" "go to inbox"
+macro index,pager Mi ";<save-message>=INBOX<enter>" "move mail to inbox"
+macro index,pager Ci ";<copy-message>=INBOX<enter>" "copy mail to inbox"
+set spoolfile = "+INBOX"
+
diff --git a/.config/mutt/muttrc b/.config/mutt/muttrc
@@ -0,0 +1,56 @@
+# vim: filetype=neomuttrc
+#                  _   _            
+#                 | | | |           
+#  _ __ ___  _   _| |_| |_ _ __ ___ 
+# | '_ ` _ \| | | | __| __| '__/ __|
+# | | | | | | |_| | |_| |_| | | (__ 
+# |_| |_| |_|\__,_|\__|\__|_|  \___|
+#
+# Pablo (C) 2020
+
+# Source MuttWizard configs
+source /usr/share/mutt-wizard/mutt-wizard.muttrc
+
+# Source my personal account
+source /home/pablo/.config/mutt/accounts/1-personal.muttrc
+
+# =============================== Accounts ====================================
+
+# Personal account
+macro index,pager i1 '<sync-mailbox><enter-command>source /home/pablo/.config/mutt/accounts/1-personal.muttrc<enter><change-folder>!<enter>;<check-stats>' "switch to my personal email account"
+
+# Public account
+macro index,pager i2 '<sync-mailbox><enter-command>source /home/pablo/.config/mutt/accounts/2-public.muttrc<enter><change-folder>!<enter>;<check-stats>' "switch to my public email account"
+
+# =========================== Reading/Indexing ================================
+
+set query_command = "abook --config \"$XDG_CONFIG_HOME\"/abook/abookrc --datafile \"$XDG_DATA_HOME\"/abook/addressbook --mutt-query '%s'"
+
+# Add new contacts to abook
+macro index,pager A "<pipe-message>abook --config \"$XDG_CONFIG_HOME\"/abook/abookrc --datafile \"$XDG_DATA_HOME\"/abook/addressbook --add-email<return>" "add the sender address to abook"
+
+# Change the mailbox we're in
+macro index,pager I '<change-folder>?' "change folder we're in"
+
+# Add sender to the addressbook
+macro index,pager a "<enter-command>set my_pipe_decode=\$pipe_decode pipe_decode<return><pipe-message>abook --config \"$XDG_CONFIG_HOME\"/abook/abookrc --datafile \"$XDG_DATA_HOME\"/abook/addressbook --add-email<return><enter-command>set pipe_decode=\$my_pipe_decode; unset my_pipe_decode<return>" "add the sender address to abook"
+
+# Format the sidebar entries
+set mail_check_stats=yes
+set sidebar_format="%B%* (+%N)"
+
+# Style the sidebar divider
+set sidebar_divider_char="│"
+color sidebar_divider white default
+
+
+# ============================== Composing ====================================
+
+# Don't display the timezone when replying 
+set date_format="%a, %b %d, %Y"
+
+# =============================== 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,141 @@
+"  _       _ _         _           
+" (_)     (_) |       (_)          
+"  _ _ __  _| |___   ___ _ __ ___  
+" | | '_ \| | __\ \ / / | '_ ` _ \ 
+" | | | | | | |_ \ V /| | | | | | |
+" |_|_| |_|_|\__(_)_/ |_|_| |_| |_|
+" 
+" Pablo (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=$XDG_CACHE_HOME/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>
+
+""" LaTeX-specific stuff
+
+" Begin a LaTeX block
+function! LaTeXBegin(blockname)
+  execute "normal! o\\begin{" . a:blockname . "}\n\\end{" . a:blockname . "}"
+  call feedkeys('O')
+endfunction
+
+" Enter insert mode inside the \emph macro
+function! LaTeXEmph()
+  execute "normal! i \\emph{}"
+  call feedkeys('i')
+endfunction
+
+" Alias the LaTeXBegin function as a command
+au BufNewFile,BufRead *.tikz,*.tex command! -nargs=1 Begin call LaTeXBegin(<f-args>)
+
+" Alias the LaTeXEmph function as a command
+au BufNewFile,BufRead *.tikz,*.tex command! -nargs=0 Emph call LaTeXEmph()
+
+" Map BB to a call to the Begin command
+au BufNewFile,BufRead *.tikz,*.tex nnoremap BB :Begin 
+
+" Map EE to a call to the Emph command
+au BufNewFile,BufRead *.tikz,*.tex nnoremap EE :Emph<CR>
+
+" Highlight TiKz files as LaTeX
+au BufNewFile,BufRead *.tikz,*.tex set ft=tex
+
+" Highlight \mathscr and \mathds as font styles
+au BufNewFile,BufRead *.tikz,*.tex syn match texTypeStyle "\\mathscr\>"
+au BufNewFile,BufRead *.tikz,*.tex syn match texTypeStyle "\\mathds\>"
+
+" Highlight \citetitle in the same way as \cite
+au BufNewFile,BufRead *.tikz,*.tex syn match texRefZone '\\citetitle\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
+
+" Highlight stuff inside a align block as math
+au BufNewFile,BufRead *.tikz,*.tex call TexNewMathZone("E","align",1)
+
+""" Language-specific stuff
+
+" 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
+
+" Read .g and .gap files as GAP source files
+au BufRead,BufNewFile *.g,*.gi,*.gd,*.gap set ft=gap 
+
+" Supress word wrapping when reading Python source files
+au BufNewFile,BufRead *.py                set textwidth=0
+
diff --git a/.config/ranger/commands.py b/.config/ranger/commands.py
@@ -0,0 +1,28 @@
+from ranger.api.commands import Command
+from os.path import join, expanduser
+
+class empty(Command):
+    """:empty
+
+    Empties the trash directory 
+    """
+
+    def execute(self):
+        self.fm.run("gio trash --empty")
+
+class rename(Command):
+    """:rename <destination>
+
+    Renames a file
+    """
+
+    def execute(self):
+        source = self.fm.thisfile
+        destination = join(self.fm.thisdir.path, expanduser(self.rest(1)))
+        destination = destination.strip()
+
+        if destination:
+            self.fm.run("mv '%s' '%s'" % (source, destination))
+        else:
+            self.fm.notify("Cancelled", bad=True)
+
diff --git a/.config/ranger/rc.conf b/.config/ranger/rc.conf
@@ -0,0 +1,26 @@
+#                             __ 
+#                            / _|
+#  _ __ ___   ___ ___  _ __ | |_ 
+# | '__/ __| / __/ _ \| '_ \|  _|
+# | | | (__ | (_| (_) | | | | |  
+# |_|  \___(_)___\___/|_| |_|_|  
+#
+# Pablo (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/ranger/rifle.conf b/.config/ranger/rifle.conf
@@ -0,0 +1,213 @@
+# vim: ft=cfg
+#
+# This is the configuration file of "rifle", ranger's file executor/opener.
+# Each line consists of conditions and a command.  For each line the conditions
+# are checked and if they are met, the respective command is run.
+#
+# Syntax:
+#   <condition1> , <condition2> , ... = command
+#
+# The command can contain these environment variables:
+#   $1-$9 | The n-th selected file
+#   $@    | All selected files
+#
+# If you use the special command "ask", rifle will ask you what program to run.
+#
+# Prefixing a condition with "!" will negate its result.
+# These conditions are currently supported:
+#   match <regexp> | The regexp matches $1
+#   ext <regexp>   | The regexp matches the extension of $1
+#   mime <regexp>  | The regexp matches the mime type of $1
+#   name <regexp>  | The regexp matches the basename of $1
+#   path <regexp>  | The regexp matches the absolute path of $1
+#   has <program>  | The program is installed (i.e. located in $PATH)
+#   env <variable> | The environment variable "variable" is non-empty
+#   file           | $1 is a file
+#   directory      | $1 is a directory
+#   number <n>     | change the number of this command to n
+#   terminal       | stdin, stderr and stdout are connected to a terminal
+#   X              | $DISPLAY is not empty (i.e. Xorg runs)
+#
+# There are also pseudo-conditions which have a "side effect":
+#   flag <flags>  | Change how the program is run. See below.
+#   label <label> | Assign a label or name to the command so it can
+#                 | be started with :open_with <label> in ranger
+#                 | or `rifle -p <label>` in the standalone executable.
+#   else          | Always true.
+#
+# Flags are single characters which slightly transform the command:
+#   f | Fork the program, make it run in the background.
+#     |   New command = setsid $command >& /dev/null &
+#   r | Execute the command with root permissions
+#     |   New command = sudo $command
+#   t | Run the program in a new terminal.  If $TERMCMD is not defined,
+#     | rifle will attempt to extract it from $TERM.
+#     |   New command = $TERMCMD -e $command
+# Note: The "New command" serves only as an illustration, the exact
+# implementation may differ.
+# Note: When using rifle in ranger, there is an additional flag "c" for
+# only running the current file even if you have marked multiple files.
+
+#-------------------------------------------
+# Websites
+#-------------------------------------------
+# Rarely installed browsers get higher priority; It is assumed that if you
+# install a rare browser, you probably use it.  Firefox/konqueror/w3m on the
+# other hand are often only installed as fallback browsers.
+ext x?html?, has surf,           X, flag f = surf -- file://"$1"
+ext x?html?, has vimprobable,    X, flag f = vimprobable -- "$@"
+ext x?html?, has vimprobable2,   X, flag f = vimprobable2 -- "$@"
+ext x?html?, has qutebrowser,    X, flag f = qutebrowser -- "$@"
+ext x?html?, has dwb,            X, flag f = dwb -- "$@"
+ext x?html?, has jumanji,        X, flag f = jumanji -- "$@"
+ext x?html?, has luakit,         X, flag f = luakit -- "$@"
+ext x?html?, has uzbl,           X, flag f = uzbl -- "$@"
+ext x?html?, has uzbl-tabbed,    X, flag f = uzbl-tabbed -- "$@"
+ext x?html?, has uzbl-browser,   X, flag f = uzbl-browser -- "$@"
+ext x?html?, has uzbl-core,      X, flag f = uzbl-core -- "$@"
+ext x?html?, has midori,         X, flag f = midori -- "$@"
+ext x?html?, has chromium,       X, flag f = chromium -- "$@"
+ext x?html?, has opera,          X, flag f = opera -- "$@"
+ext x?html?, has firefox,        X, flag f = firefox -- "$@"
+ext x?html?, has seamonkey,      X, flag f = seamonkey -- "$@"
+ext x?html?, has iceweasel,      X, flag f = iceweasel -- "$@"
+ext x?html?, has epiphany,       X, flag f = epiphany -- "$@"
+ext x?html?, has konqueror,      X, flag f = konqueror -- "$@"
+ext x?html?, has elinks,          terminal = elinks "$@"
+ext x?html?, has links2,          terminal = links2 "$@"
+ext x?html?, has links,           terminal = links "$@"
+ext x?html?, has lynx,            terminal = lynx -- "$@"
+ext x?html?, has w3m,             terminal = w3m "$@"
+
+#-------------------------------------------
+# Misc
+#-------------------------------------------
+ext csv, has vd               = vd "$1"
+
+mime ^text,  label editor = $EDITOR -- "$@"
+mime ^text,  label pager  = "$PAGER" -- "$@"
+!mime ^text, label editor, ext xml|json|tex|py|pl|rb|js|sh|php = $EDITOR -- "$@"
+!mime ^text, label pager,  ext xml|json|tex|py|pl|rb|js|sh|php = "$PAGER" -- "$@"
+
+ext 1                         = man "$1"
+ext s[wmf]c, has zsnes, X     = zsnes "$1"
+ext s[wmf]c, has snes9x-gtk,X = snes9x-gtk "$1"
+ext nes, has fceux, X         = fceux "$1"
+ext exe                       = wine "$1"
+name ^[mM]akefile$            = make
+
+#--------------------------------------------
+# Code
+#-------------------------------------------
+ext py  = python3       -- "$1"
+ext pl  = swipl         -- "$1"
+ext rb  = ruby          -- "$1"
+ext js  = deno          -- "$1"
+ext rkt = racket        -- "$1"
+ext sh  = sh            -- "$1"
+ext m   = mathicsscript -- "$1"
+
+#--------------------------------------------
+# Audio without X
+#-------------------------------------------
+mime ^audio|ogg$, terminal, has mpv      = mpv -- "$@"
+mime ^audio|ogg$, terminal, has mplayer2 = mplayer2 -- "$@"
+mime ^audio|ogg$, terminal, has mplayer  = mplayer -- "$@"
+ext midi?,        terminal, has wildmidi = wildmidi -- "$@"
+
+#--------------------------------------------
+# Video/Audio with a GUI
+#-------------------------------------------
+mime ^video|audio, has gmplayer, X, flag f = gmplayer -- "$@"
+mime ^video|audio, has smplayer, X, flag f = smplayer "$@"
+mime ^video,       has mpv,      X, flag f = mpv -- "$@"
+mime ^video,       has mpv,      X, flag f = mpv --fs -- "$@"
+mime ^video,       has mplayer2, X, flag f = mplayer2 -- "$@"
+mime ^video,       has mplayer2, X, flag f = mplayer2 -fs -- "$@"
+mime ^video,       has mplayer,  X, flag f = mplayer -- "$@"
+mime ^video,       has mplayer,  X, flag f = mplayer -fs -- "$@"
+mime ^video|audio, has vlc,      X, flag f = vlc -- "$@"
+mime ^video|audio, has totem,    X, flag f = totem -- "$@"
+mime ^video|audio, has totem,    X, flag f = totem --fullscreen -- "$@"
+
+#--------------------------------------------
+# Video without X:
+#-------------------------------------------
+mime ^video, terminal, !X, has mpv       = mpv -- "$@"
+mime ^video, terminal, !X, has mplayer2  = mplayer2 -- "$@"
+mime ^video, terminal, !X, has mplayer   = mplayer -- "$@"
+
+#-------------------------------------------
+# Documents
+#-------------------------------------------
+ext pdf, has llpp,     X, flag f = llpp "$@"
+ext pdf, has zathura,  X, flag f = zathura -- "$@"
+ext pdf, has mupdf,    X, flag f = mupdf "$@"
+ext pdf, has mupdf-x11,X, flag f = mupdf-x11 "$@"
+ext pdf, has apvlv,    X, flag f = apvlv -- "$@"
+ext pdf, has xpdf,     X, flag f = xpdf -- "$@"
+ext pdf, has evince,   X, flag f = evince -- "$@"
+ext pdf, has atril,    X, flag f = atril -- "$@"
+ext pdf, has okular,   X, flag f = okular -- "$@"
+ext pdf, has epdfview, X, flag f = epdfview -- "$@"
+ext pdf, has qpdfview, X, flag f = qpdfview "$@"
+
+ext docx?, has catdoc,       terminal = catdoc -- "$@" | "$PAGER"
+
+ext                        sxc|xlsx?|xlt|xlw|gnm|gnumeric, has gnumeric,    X, flag f = gnumeric -- "$@"
+ext                        sxc|xlsx?|xlt|xlw|gnm|gnumeric, has kspread,     X, flag f = kspread -- "$@"
+ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has libreoffice, X, flag f = libreoffice "$@"
+ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has soffice,     X, flag f = soffice "$@"
+ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has ooffice,     X, flag f = ooffice "$@"
+
+ext djvu, has zathura,X, flag f = zathura -- "$@"
+ext djvu, has evince, X, flag f = evince -- "$@"
+ext djvu, has atril,  X, flag f = atril -- "$@"
+
+#-------------------------------------------
+# Image Viewing:
+#-------------------------------------------
+mime ^image/svg, has inkscape, X, flag f = inkscape -- "$@"
+mime ^image/svg, has display,  X, flag f = display -- "$@"
+
+mime ^image, has pqiv,      X, flag f = pqiv -- "$@"
+mime ^image, has sxiv,      X, flag f = sxiv -- "$@"
+mime ^image, has feh,       X, flag f = feh -- "$@"
+mime ^image, has mirage,    X, flag f = mirage -- "$@"
+mime ^image, has ristretto, X, flag f = ristretto "$@"
+mime ^image, has eog,       X, flag f = eog -- "$@"
+mime ^image, has eom,       X, flag f = eom -- "$@"
+mime ^image, has gimp,      X, flag f = gimp -- "$@"
+ext xcf,                    X, flag f = gimp -- "$@"
+
+#-------------------------------------------
+# Archives
+#-------------------------------------------
+
+# avoid password prompt by providing empty password
+ext 7z, has 7z = 7z -p l "$@" | "$PAGER"
+# This requires atool
+ext ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz,  has als     = als -- "$@" | "$PAGER"
+ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has als     = als -- "$@" | "$PAGER"
+ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz,  has aunpack = aunpack -- "$@"
+ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has aunpack = aunpack -- "$@"
+
+# Fallback:
+ext tar|gz, has tar = tar vvtf "$@" | "$PAGER"
+ext tar|gz, has tar = tar vvxf "$@"
+
+#-------------------------------------------
+# Misc
+#-------------------------------------------
+label wallpaper, number 11, mime ^image, has feh, X = feh --bg-scale "$1"
+label wallpaper, number 12, mime ^image, has feh, X = feh --bg-tile "$1"
+label wallpaper, number 13, mime ^image, has feh, X = feh --bg-center "$1"
+label wallpaper, number 14, mime ^image, has feh, X = feh --bg-fill "$1"
+
+# Define the editor for non-text files + pager as last action
+              !mime ^text, !ext xml|json|tex|py|pl|rb|js|sh|php  = ask
+label editor, !mime ^text, !ext xml|json|tex|py|pl|rb|js|sh|php  = $EDITOR -- "$@"
+label pager,  !mime ^text, !ext xml|json|tex|py|pl|rb|js|sh|php  = "$PAGER" -- "$@"
+
+# The very last action, so that it's never triggered accidentally, is to execute a program:
+mime application/x-executable = "$1"
diff --git a/.config/ranger/scope.sh b/.config/ranger/scope.sh
@@ -0,0 +1,121 @@
+#!/usr/bin/env sh
+# ranger supports enhanced previews.  If the option "use_preview_script"
+# is set to True and this file exists, this script will be called and its
+# output is displayed in ranger.  ANSI color codes are supported.
+
+# NOTES: This script is considered a configuration file.  If you upgrade
+# ranger, it will be left untouched. (You must update it yourself.)
+# Also, ranger disables STDIN here, so interactive scripts won't work properly
+
+# Meanings of exit codes:
+# code | meaning    | action of ranger
+# -----+------------+-------------------------------------------
+# 0    | success    | success. display stdout as preview
+# 1    | no preview | failure. display no preview at all
+# 2    | plain text | display the plain content of the file
+# 3    | fix width  | success. Don't reload when width changes
+# 4    | fix height | success. Don't reload when height changes
+# 5    | fix both   | success. Don't ever reload
+# 6    | image      | success. display the image $cached points to as an image preview
+# 7    | image      | success. display the file directly as an image
+
+# Meaningful aliases for arguments:
+path="$1"            # Full path of the selected file
+width="$2"           # Width of the preview pane (number of fitting characters)
+height="$3"          # Height of the preview pane (number of fitting characters)
+cached="$4"          # Path that should be used to cache image previews
+preview_images="$5"  # "True" if image previews are enabled, "False" otherwise.
+
+maxln=200    # Stop after $maxln lines.  Can be used like ls | head -n $maxln
+
+# Find out something about the file:
+mimetype=$(file --mime-type -Lb "$path")
+extension=$(/bin/echo "${path##*.}" | awk '{print tolower($0)}')
+
+# Functions:
+# runs a command and saves its output into $output.  Useful if you need
+# the return value AND want to use the output in a pipe
+try() { output=$(eval '"$@"'); }
+
+# writes the output of the previously used "try" command
+dump() { /bin/echo "$output"; }
+
+# a common post-processing function used after most commands
+trim() { head -n "$maxln"; }
+
+# wraps highlight to treat exit code 141 (killed by SIGPIPE) as success
+safepipe() { "$@"; test $? = 0 -o $? = 141; }
+
+# Image previews, if enabled in ranger.
+if [ "$preview_images" = "True" ]; then
+    case "$mimetype" in
+        # Image previews for SVG files, disabled by default.
+        image/svg+xml)
+           convert "$path" "$cached" && exit 6 || exit 1;;
+        # Image previews for image files. w3mimgdisplay will be called for all
+        # image files (unless overriden as above), but might fail for
+        # unsupported types.
+        image/*)
+            exit 7;;
+        # Image preview for video, disabled by default.:
+        video/*)
+            ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;;
+    esac
+fi
+
+case "$extension" in
+    # Archive extensions:
+    a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\
+    rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)
+        try als "$path" && { dump | trim; exit 0; }
+        try acat "$path" && { dump | trim; exit 3; }
+        try bsdtar -lf "$path" && { dump | trim; exit 0; }
+        exit 1;;
+    rar)
+        # avoid password prompt by providing empty password
+        try unrar -p- lt "$path" && { dump | trim; exit 0; } || exit 1;;
+    7z)
+        # avoid password prompt by providing empty password
+        try 7z -p l "$path" && { dump | trim; exit 0; } || exit 1;;
+    # PDF documents:
+    pdf)
+        try pdftotext -l 10 -nopgbrk -q "$path" - && \
+            { dump | trim | fmt -s -w $width; exit 0; } || exit 1;;
+    # BitTorrent Files
+    torrent)
+        try transmission-show "$path" && { dump | trim; exit 5; } || exit 1;;
+    # ODT Files
+    odt|ods|odp|sxw)
+        try odt2txt "$path" && { dump | trim; exit 5; } || exit 1;;
+    # HTML Pages:
+    htm|html|xhtml)
+        try w3m    -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
+        try lynx   -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
+        try elinks -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
+        ;; # fall back to highlight/cat if the text browsers fail
+esac
+
+case "$mimetype" in
+    # Syntax highlight for text files:
+    text/* | */xml)
+        if [ "$(tput colors)" -ge 256 ]; then
+            pygmentize_format=terminal256
+            highlight_format=xterm256
+        else
+            pygmentize_format=terminal
+            highlight_format=ansi
+        fi
+        try safepipe highlight --out-format=${highlight_format} "$path" && { dump | trim; exit 5; }
+        try safepipe pygmentize -f ${pygmentize_format} "$path" && { dump | trim; exit 5; }
+        exit 2;;
+    # Ascii-previews of images:
+    image/*)
+        img2txt --gamma=0.6 --width="$width" "$path" && exit 4 || exit 1;;
+    # Display information about media files:
+    video/* | audio/*)
+        exiftool "$path" && exit 5
+        # Use sed to remove spaces so the output fits into the narrow window
+        try mediainfo "$path" && { dump | trim | sed 's/  \+:/: /;';  exit 5; } || exit 1;;
+esac
+
+exit 1
diff --git a/.config/tmux/tmux.conf b/.config/tmux/tmux.conf
@@ -0,0 +1,26 @@
+#                      _     _       
+#    ____             | |   | |      
+#   / __ \ _ __   __ _| |__ | | ___  
+#  / / _` | '_ \ / _` | '_ \| |/ _ \ 
+# | | (_| | |_) | (_| | |_) | | (_) |
+#  \ \__,_| .__/ \__,_|_.__/|_|\___/ 
+#   \____/| |                        
+#         |_|                        
+# 
+# Pablo (C) 2020
+
+set -g mouse on
+
+# Save the history
+set -g history-file "$XDG_CONFIG_HOME/tmux/tmux.history"
+
+# Open new panes in the current directory
+bind '"' split-window -c "#{pane_current_path}"
+bind  % split-window -h -c "#{pane_current_path}"
+
+# Resize the current pane using Alt + direction
+bind -n M-k resize-pane -U 1
+bind -n M-j resize-pane -D 1
+bind -n M-h resize-pane -L 1
+bind -n M-l resize-pane -R 1
+
diff --git a/.config/zathura/snazzy.conf b/.config/zathura/snazzy.conf
@@ -0,0 +1,22 @@
+set default-bg                  "#282a36"
+set default-fg                  "#34353e"
+set statusbar-fg                "#a5a5a9"
+set statusbar-bg                "#43454f"
+set inputbar-bg                 "#282a36"
+set inputbar-fg                 "#f1f1f0"
+set notification-bg             "#282a36"
+set notification-fg             "#f1f1f0"
+set notification-error-bg       "#282a36"
+set notification-error-fg       "#ff5c57"
+set notification-warning-bg     "#282a36"
+set notification-warning-fg     "#ff5c57"
+set highlight-color             "#f3f99d"
+set highlight-active-color      "#57c7ff"
+set completion-bg               "#34353e"
+set completion-fg               "#57c7ff"
+set completion-highlight-fg     "#f1f1f0"
+set completion-highlight-bg     "#57c7ff"
+set recolor-lightcolor          "#282a36"
+set recolor-darkcolor           "#eff0eb"
+set recolor                     "false"
+set recolor-keephue             "false"
diff --git a/.config/zathura/zathurarc b/.config/zathura/zathurarc
@@ -0,0 +1,31 @@
+#           _   _                              
+#          | | | |                             
+#  ______ _| |_| |__  _   _ _ __ __ _ _ __ ___ 
+# |_  / _` | __| '_ \| | | | '__/ _` | '__/ __|
+#  / / (_| | |_| | | | |_| | | | (_| | | | (__ 
+# /___\__,_|\__|_| |_|\__,_|_|  \__,_|_|  \___|
+#
+# Pablo (C) 2020
+
+# Use the snazzy color-scheme
+include snazzy.conf
+
+# Automatically invert the colors
+set recolor true
+
+# Keybindins
+# map K zoom in
+# map J zoom out
+map _ zoom out
+map r reload
+map i recolor
+
+# Configure window-size
+set window-width 1366
+set window-height 736
+
+set selection-clipboard clipboard
+
+# Fit the the PDF in the window
+set adjust-open width
+
diff --git a/.local/bin/aliases.sh b/.local/bin/aliases.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+#        _ _                           _     
+#   __ _| (_) __ _ ___  ___  ___   ___| |__  
+#  / _` | | |/ _` / __|/ _ \/ __| / __| '_ \ 
+# | (_| | | | (_| \__ \  __/\__ \_\__ \ | | |
+#  \__,_|_|_|\__,_|___/\___||___(_)___/_| |_|
+#
+# Pablo (C) 2021
+# 
+# File that contains all aliases variables I use. This can be sourced from,
+# bash, fish, sh, zsh, etc.
+
+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 lynx='lynx -cfg="$XDG_CONFIG_HOME/lynx/lynx.cfg"'
+# Hide my timezone when commiting
+alias git='env TZ=-0000 git' 
+alias abook='abook --config "$XDG_CONFIG_HOME"/abook/abookrc --datafile "$XDG_DATA_HOME"/abook/addressbook'
+# Make neomutt stealthy
+alias neomutt='env TZ=-0000 neomutt' 
+alias impressive='impressive --transition None -C ~/Pictures/Cursors/Laser\ Beam\ Normal.cur'
+alias ls='ls --color=auto'
+alias grep='grep --color=auto'
+alias fgrep='fgrep --color=auto'
+alias egrep='egrep --color=auto'
+alias matrix='cmatrix'
+
diff --git a/.local/bin/config b/.local/bin/config
@@ -0,0 +1,148 @@
+#!/bin/bash
+#                   __ _       
+#   ___ ___  _ __  / _(_) __ _ 
+#  / __/ _ \| '_ \| |_| |/ _` |
+# | (_| (_) | | | |  _| | (_| |
+#  \___\___/|_| |_|_| |_|\__, |
+#                        |___/ 
+#
+# A simple configuration manager
+# 2021 (C) Pablo
+# Free use of this software is granted under the terms of the GPL-3.0 License
+
+# Get the path to the git repository that should be used for storing stuff
+if [ -n "$DOTFILES_REPO" ]
+then
+  dotfiles_repo="$DOTFILES_REPO"
+elif [ -n "$XDG_DATA_HOME" ]
+then
+  dotfiles_repo="$XDG_DATA_HOME/dotfiles"
+else
+  dotfiles_repo="$HOME/.local/share/dotfiles"
+fi
+
+# Get the name of the files that holds the list of all dotfiles that should be
+# tracked
+if [ -n "$DOTFILES_LIST" ]
+then
+  dotfiles_list="$DOTFILES_LIST"
+elif [ -n "$XDG_CONFIG_HOME" ]
+then
+  dotfiles_list="$XDG_CONFIG_HOME/dotfiles.list"
+else
+  dotfiles_list="$HOME/.config/dotfiles.list"
+fi
+
+# Calls git in the appropriate repository
+call_git() 
+{
+  git --git-dir="$dotfiles_repo" --work-tree="$HOME" "$@"
+}
+
+# Parse the commands
+case "$1" in
+  # Commit and push updates to all remotes
+  update)
+    commit_msg_file="$(mktemp)"
+
+    # Add the relevant files to the repo
+    xargs git --git-dir="$dotfiles_repo" --work-tree="$HOME" add \
+      < "$dotfiles_list"
+
+    shift
+
+    while [ $# -gt 0 ]
+    do
+      case "$1" in
+        # Edit the commit message directly
+        -e|--edit)
+          printf '' > "$commit_msg_file"
+          $EDITOR "$commit_msg_file" 
+          break
+          ;;
+
+        # Append messages to the temporary file
+        *)
+          printf '%s\n\n' "$1" >> "$commit_msg_file"
+          shift
+          ;;
+      esac
+    done
+
+    # Commit the changes
+    call_git commit -F "$commit_msg_file" || exit $?
+
+    # Push the changes to all remotes
+    for remote in $(call_git remote -v | awk '/(push)/ { print $1 }' | uniq)
+    do
+      call_git push "$remote" master
+    done
+
+    rm "$commit_msg_file"
+    ;;
+
+  # Add files to the list of files
+  add)
+    shift
+
+    # Add files to the list of dotfiles
+    for item in "$@"
+    do
+      echo "Adding '$item' to the list of dotfiles"
+      realpath "$item" >> "$dotfiles_list"
+    done
+    ;;
+
+  # Remove files from the list of dotfiles
+  rm)
+    shift
+
+    # Remove files from the list of dotfiles
+    for item in "$@"
+    do
+      echo "Removing '$item' from the list of dotfile"
+      pattern="$(realpath "$item")"
+      pattern="${pattern//\//\\\/}"
+
+      # Remove the files from the git repository and from the list of files
+      # Awk is used because 'item' may be a directory
+      awk -i inplace "!/^$pattern/ { print }" "$dotfiles_list"
+      call_git rm "$item" --cached -r
+    done
+    ;;
+
+  # List the dotfiles specified in configurations list
+  list)
+    cat "$dotfiles_list"
+    ;;
+
+  # Show the configuration files that have been modified or deleted
+  status)
+    config_git_status="$(mktemp)"
+    call_git status > "$config_git_status"
+
+    echo 'modified files:'
+    awk '/modified/ { print $2 }' "$config_git_status" \
+      | xargs -r realpath \
+      | xargs -r -n 1 printf '    %s\n'
+
+    echo 'deleted files:'
+    awk '/deleted/ { print $2 }' "$config_git_status" \
+      | xargs -r realpath \
+      | xargs -r -n 1 printf '    %s\n'
+
+    rm "$config_git_status"
+    ;;
+
+  # Just pass the following arguments to git
+  --)
+    shift
+    call_git "$@"
+    ;;
+
+  # Just pass the arguments to git
+  *)
+    call_git "$@"
+    ;;
+esac
+
diff --git a/.local/bin/emojipick b/.local/bin/emojipick
@@ -0,0 +1,9 @@
+#!/bin/sh
+# Select an emoji with dmenu
+
+chosen=$(cut -d ';' -f1 ~/.local/share/emoji | dmenu -i -l 20 -fn 'IBM Plex Mono:bold' -nb '#282a36' -nf '#f1f1f0' -sb '#41a2d3'| sed "s/ .*//")
+
+[ -z "$chosen" ] && exit
+
+printf '%s' "$chosen" | xclip -selection clipboard
+notify-send "'$chosen' copied to clipboard" &
diff --git a/.local/bin/exports.sh b/.local/bin/exports.sh
@@ -0,0 +1,153 @@
+#!/bin/sh
+#                             _             _     
+#                            | |           | |    
+#   _____  ___ __   ___  _ __| |_ ___   ___| |__  
+#  / _ \ \/ / '_ \ / _ \| '__| __/ __| / __| '_ \ 
+# |  __/>  <| |_) | (_) | |  | |_\__ \_\__ \ | | |
+#  \___/_/\_\ .__/ \___/|_|   \__|___(_)___/_| |_|
+#           | |                                   
+#           |_|                                   
+#
+# Pablo (C) 2021
+# 
+# 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"
+
+# Configure the MANPATH variable
+export MANPATH="/usr/share/man"
+export MANPATH="$MANPATH:/usr/local/man"
+export MANPATH="$MANPATH:/usr/share/man"
+export MANPATH="$MANPATH:$XDG_DATA_HOME/man"
+export MANPATH="$MANPATH:$XDG_DATA_HOME/fzf/man"
+
+export DOTFILES_REPO="$XDG_DATA_HOME/dotfiles-repo"
+export DOTFILES_LIST="$XDG_CONFIG_HOME/dotfiles.list"
+
+# =========================== Programming Languages ==========================
+
+# C
+export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
+
+# Rust
+export CARGO_HOME="$XDG_DATA_HOME/cargo"
+export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
+
+# OCaml
+export OPAMROOT="$XDG_DATA_HOME/opam"
+
+# Python
+export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/init.py"
+
+# 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"
+
+# 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 NODE_REPL_HISTORY="$XDG_DATA_HOME"/node_repl_history
+
+# Wasmtime
+export WASMTIME_HOME="$XDG_DATA_HOME/wasmtime"
+
+# Julia
+export JULIA_DEPOT_PATH="$XDG_DATA_HOME/julia:$JULIA_DEPOT_PATH"
+export JULIA_HISTORY="$XDG_CONFIG_HOME/julia/history"
+
+# SageMath
+export DOT_SAGE="$XDG_CONFIG_HOME/sage"
+
+# Elm
+export ELM_HOME="$XDG_CACHE_HOME/elm"
+
+# ================================ Programs ==================================
+
+# Bash history
+export HISTFILE="$XDG_DATA_HOME/bash/history"
+
+# GTK 2
+export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc"
+
+# 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"
+
+# notmuch
+export NOTMUCH_CONFIG="$XDG_CONFIG_HOME"/notmuch/notmuchrc
+export NMBGIT="$XDG_DATA_HOME"/notmuch/nmbug
+
+# pass(1)
+export PASSWORD_STORE_DIR="$XDG_CONFIG_HOME"/password-store
+
+# Jupyter notebook
+export IPYTHONDIR="$XDG_CONFIG_HOME"/jupyter
+export JUPYTER_CONFIG_DIR="$XDG_CONFIG_HOME"/jupyter
+
+# mplayer(1)
+export MPLAYER_HOME="$XDG_CONFIG_HOME"/mplayer
+
+# aspell
+export ASPELL_CONF="home-dir $XDG_CONFIG_HOME/aspell/"
+
+# isync
+export MBSYNCRC="$XDG_CONFIG_HOME"/isync/mbsyncrc
+
+# cowsay cowthink
+export COWPATH="/usr/local/share/cows:/usr/share/cows:$XDG_DATA_HOME/cows"
+
+# Configure the PATH variable
+export PATH="/usr/local/sbin" 
+export PATH="$PATH:/usr/local/bin" 
+export PATH="$PATH:/usr/sbin" 
+export PATH="$PATH:/usr/bin" 
+export PATH="$PATH:/sbin" 
+export PATH="$PATH:/bin" 
+export PATH="$PATH:$HOME/.local/bin" 
+export PATH="$PATH:/usr/bin/vendor_perl" 
+export PATH="$PATH:$CARGO_HOME/bin" 
+export PATH="$PATH:$GOPATH/bin" 
+export PATH="$PATH:$DENO_INSTALL/bin" 
+export PATH="$PATH:$XDG_DATA_HOME/npm/bin" 
+export PATH="$PATH:$XDG_DATA_HOME/fzf/bin" 
+export PATH="$PATH:$HOME/.cabal/bin" 
+export PATH="$PATH:$GEM_HOME/ruby/3.0.0/bin"
+
+# Default programs
+export TERMINAL="alacritty"
+export EDITOR="nvim"
+export GIT_EDITOR="$EDITOR"
+export VISUAL="$EDITOR"
+export PAGER="less"
+
diff --git a/.local/bin/ico-sxiv b/.local/bin/ico-sxiv
@@ -0,0 +1,15 @@
+#!/bin/sh
+#  _                          _       
+# (_) ___ ___        _____  _(_)_   __
+# | |/ __/ _ \ _____/ __\ \/ / \ \ / /
+# | | (_| (_) |_____\__ \>  <| |\ V / 
+# |_|\___\___/      |___/_/\_\_| \_/  
+#                                     
+# View the individual entries of an ICO file in `sxiv`.
+# 
+# Copyright (C) 2020 Pablo Emilio Escobar Gaviria.
+# Free use of this software is granted under the terms of the GPL-3.0 License.
+
+TMP_DIR="$(mktemp -d)"
+convert "$1" "$TMP_DIR/icon.png" && sxiv "$TMP_DIR"/*.png
+rm "$TMP_DIR" -rf
diff --git a/.local/bin/mathpick b/.local/bin/mathpick
@@ -0,0 +1,9 @@
+#!/bin/sh
+# Select mathematical characters with dmenu
+
+chosen=$(cut -d ';' -f1 ~/.local/share/math-symbols | dmenu -i -l 20 -fn 'IBM Plex Mono:bold' -nb '#282a36' -nf '#f1f1f0' -sb '#41a2d3'| sed "s/ .*//")
+
+[ -z "$chosen" ] && exit
+
+printf '%s' "$chosen" | xclip -selection clipboard
+notify-send "'$chosen' copied to clipboard" &
diff --git a/.local/bin/texclear b/.local/bin/texclear
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+# Clears the build files of a LaTeX/XeLaTeX/Aspell build.
+# I have vim run this file whenever I exit a .tex file.
+
+case "$1" in
+	*.tex)
+	file=$(readlink -f "$1")
+	dir=$(dirname "$file")
+	base="${file%.*}"
+	find "$dir"  -maxdepth 1 -type f -regextype gnu-awk -regex "^$base\\.(4tc|xref|tmp|pyc|pyg|pyo|fls|vrb|fdb_latexmk|bak|swp|aux|log|synctex\\(busy\\)|lof|lot|maf|idx|mtc|mtc0|nav|out|snm|toc|bcf|run\\.xml|synctex\\.gz|blg|bbl|tex\\.bak|pdf_original)" -delete
+	rm -rdf "$dir/_minted-$(basename -- "$base")"
+	;;
+	*) printf "Give .tex file as argument.\\n" ;;
+esac
+
diff --git a/.local/bin/wheel b/.local/bin/wheel
@@ -0,0 +1,8 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+import re
+import sys
+from wheel.cli import main
+if __name__ == '__main__':
+    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
+    sys.exit(main())
diff --git a/.profile b/.profile
@@ -0,0 +1,5 @@
+. $HOME/.local/bin/exports.sh
+. $HOME/.local/bin/aliases.sh
+
+PS1='[\[\033[01;32m\]\u@\h\[\033[01;34m\] \W\[\e[00;37m\]]\$\[\033[00m\] '
+PS2='\[\033[01;34m\]\W \[\e[00;37m\]\$\[\033[00m\] '