Detailed changes
@@ -0,0 +1,21 @@
+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/>
@@ -0,0 +1,15 @@
+# YADR
+***Y**et **A**nother **D**otfiles **R**epository*
+
+[Chezmoi][chezmoi], a tool designed for securely maintining configs across
+diverse machines, manages everything found in this repo. Based on the device's
+hostname, it deploys dotfiles across Linux, Windows, and (soon) BSD[^1].
+
+Unless stated otherwise, I release everything here under [the
+Unlicense][unlicense].
+
+[^1]: I don't run BSD *yet* but I'm looking at setting it up on my Librebooted
+ Thinkpad X200 once I figure out GRUB payloads.
+
+[chezmoi]: https://www.chezmoi.io/
+[unlicense]: https://unlicense.org/
@@ -0,0 +1,80 @@
+directory: ~/Music/Final
+library: ~/.config/beets/library.db
+plugins:
+ - acousticbrainz
+ - alternatives
+ - badfiles
+ - bandcamp
+ - convert
+ #- discogs
+ - embedart
+ - fetchart
+ - ftintitle
+ - fuzzy
+ #- lyrics
+ - lastgenre
+ - mbsync
+ - mpdupdate
+ - missing
+ - scrub
+ - thumbnails
+ui:
+ color: yes
+paths:
+ default: $albumartist/$album/$track $title
+ singleton: $albumartist/Singles/$title
+lastgenre:
+ auto: yes
+ canonical: yes
+embedart:
+ auto: yes
+fetchart:
+ auto: yes
+ enforce_ratio: yes
+ sources: itunes amazon *
+lyrics:
+ fallback: ''
+ sources: "*"
+mpd:
+ host: localhost
+ port: 6600
+replaygain:
+ auto: yes
+ backend: gstreamer
+ noclip: yes
+scrub:
+ auto: yes
+bpd:
+ host: localhost
+ port: 6600
+ volume: 90
+bandcamp:
+ lyrics: true
+ art: true
+chroma:
+ auto: yes
+alternatives:
+ mobile:
+ directory: ../Mobile
+ paths:
+ default: $albumartist/$album/$track $title
+ singleton: $albumartist/Singles/$title
+ formats: mp3
+ query: "/home/amolith/Music/Final"
+convert:
+ auto: no
+ embed: yes
+ never_convert_lossy_files: yes
+ formats:
+ mp3:
+ command: ffmpeg -i $source -codec:a libmp3lame -b:a 320k -compression_level 2 $dest
+ extension: mp3
+import:
+ move: no
+ write: yes
+ resume: ask
+ duplicate_action: skip
+ bell: no
+ftintitle:
+ auto: yes
+ format: "feat. {0}"
@@ -0,0 +1,427 @@
+[global]
+ ### Display ###
+
+ # Which monitor should the notifications be displayed on.
+ monitor = 0
+
+ # Display notification on focused monitor. Possible modes are:
+ # mouse: follow mouse pointer
+ # keyboard: follow window with keyboard focus
+ # none: don't follow anything
+ #
+ # "keyboard" needs a window manager that exports the
+ # _NET_ACTIVE_WINDOW property.
+ # This should be the case for almost all modern window managers.
+ #
+ # If this option is set to mouse or keyboard, the monitor option
+ # will be ignored.
+ follow = none
+
+ # The geometry of the window:
+ # [{width}]x{height}[+/-{x}+/-{y}]
+ # The geometry of the message window.
+ # The height is measured in number of notifications everything else
+ # in pixels. If the width is omitted but the height is given
+ # ("-geometry x2"), the message window expands over the whole screen
+ # (dmenu-like). If width is 0, the window expands to the longest
+ # message displayed. A positive x is measured from the left, a
+ # negative from the right side of the screen. Y is measured from
+ # the top and down respectively.
+ # The width can be negative. In this case the actual width is the
+ # screen width minus the width defined in within the geometry option.
+ geometry = "300x0-23+46"
+
+ # Show how many messages are currently hidden (because of geometry).
+ indicate_hidden = yes
+
+ # Shrink window if it's smaller than the width. Will be ignored if
+ # width is 0.
+ shrink = no
+
+ # The transparency of the window. Range: [0; 100].
+ # This option will only work if a compositing window manager is
+ # present (e.g. xcompmgr, compiz, etc.).
+ transparency = 0
+
+ # The height of the entire notification. If the height is smaller
+ # than the font height and padding combined, it will be raised
+ # to the font height and padding.
+ notification_height = 0
+
+ # Draw a line of "separator_height" pixel height between two
+ # notifications.
+ # Set to 0 to disable.
+ separator_height = 2
+
+ # Padding between text and separator.
+ padding = 8
+
+ # Horizontal padding.
+ horizontal_padding = 8
+
+ # Defines width in pixels of frame around the notification window.
+ # Set to 0 to disable.
+ frame_width = 2
+
+ # Defines color of the frame around the notification window.
+ frame_color = "#F8F8F2"
+
+ # Define a color for the separator.
+ # possible values are:
+ # * auto: dunst tries to find a color fitting to the background;
+ # * foreground: use the same color as the foreground;
+ # * frame: use the same color as the frame;
+ # * anything else will be interpreted as a X color.
+ separator_color = frame
+
+ # Sort messages by urgency.
+ sort = yes
+
+ # Don't remove messages, if the user is idle (no mouse or keyboard input)
+ # for longer than idle_threshold seconds.
+ # Set to 0 to disable.
+ # A client can set the 'transient' hint to bypass this. See the rules
+ # section for how to disable this if necessary
+ idle_threshold = 1
+
+ ### Text ###
+
+ font = Triplicate T4
+
+ # The spacing between lines. If the height is smaller than the
+ # font height, it will get raised to the font height.
+ line_height = 0
+
+ # Possible values are:
+ # full: Allow a small subset of html markup in notifications:
+ # <b>bold</b>
+ # <i>italic</i>
+ # <s>strikethrough</s>
+ # <u>underline</u>
+ #
+ # For a complete reference see
+ # <https://developer.gnome.org/pango/stable/pango-Markup.html>.
+ #
+ # strip: This setting is provided for compatibility with some broken
+ # clients that send markup even though it's not enabled on the
+ # server. Dunst will try to strip the markup but the parsing is
+ # simplistic so using this option outside of matching rules for
+ # specific applications *IS GREATLY DISCOURAGED*.
+ #
+ # no: Disable markup parsing, incoming notifications will be treated as
+ # plain text. Dunst will not advertise that it has the body-markup
+ # capability if this is set as a global setting.
+ #
+ # It's important to note that markup inside the format option will be parsed
+ # regardless of what this is set to.
+ markup = full
+
+ # The format of the message. Possible variables are:
+ # %a appname
+ # %s summary
+ # %b body
+ # %i iconname (including its path)
+ # %I iconname (without its path)
+ # %p progress value if set ([ 0%] to [100%]) or nothing
+ # %n progress value if set without any extra characters
+ # %% Literal %
+ # Markup is allowed
+ format = "<b>%s</b>\n%b"
+
+ # Alignment of message text.
+ # Possible values are "left", "center" and "right".
+ alignment = left
+
+ # Vertical alignment of message text and icon.
+ # Possible values are "top", "center" and "bottom".
+ vertical_alignment = center
+
+ # Show age of message if message is older than show_age_threshold
+ # seconds.
+ # Set to -1 to disable.
+ show_age_threshold = 60
+
+ # Split notifications into multiple lines if they don't fit into
+ # geometry.
+ word_wrap = yes
+
+ # When word_wrap is set to no, specify where to make an ellipsis in long lines.
+ # Possible values are "start", "middle" and "end".
+ ellipsize = middle
+
+ # Ignore newlines '\n' in notifications.
+ ignore_newline = no
+
+ # Stack together notifications with the same content
+ stack_duplicates = true
+
+ # Hide the count of stacked notifications with the same content
+ hide_duplicate_count = false
+
+ # Display indicators for URLs (U) and actions (A).
+ show_indicators = yes
+
+ ### Icons ###
+
+ # Align icons left/right/off
+ icon_position = left
+
+ # Scale small icons up to this size, set to 0 to disable. Helpful
+ # for e.g. small files or high-dpi screens. In case of conflict,
+ # max_icon_size takes precedence over this.
+ min_icon_size = 0
+
+ # Scale larger icons down to this size, set to 0 to disable
+ max_icon_size = 50
+
+ # Paths to default icons.
+ icon_path = /usr/share/icons/Suru++-Dark/status/48@2x/:/usr/share/icons/Suru++-Dark/devices/64@2x/
+
+ ### History ###
+
+ # Should a notification popped up from history be sticky or timeout
+ # as if it would normally do.
+ sticky_history = yes
+
+ # Maximum amount of notifications kept in history
+ history_length = 50
+
+ ### Misc/Advanced ###
+
+ # dmenu path.
+ dmenu = /usr/bin/dmenu -p dunst:
+
+ # Browser for opening urls in context menu.
+ browser = /usr/bin/firefox-developer-edition -new-tab
+
+ # Always run rule-defined scripts, even if the notification is suppressed
+ always_run_script = true
+
+ # Define the title of the windows spawned by dunst
+ title = Dunst
+
+ # Define the class of the windows spawned by dunst
+ class = Dunst
+
+ # Print a notification on startup.
+ # This is mainly for error detection, since dbus (re-)starts dunst
+ # automatically after a crash.
+ startup_notification = true
+
+ # Manage dunst's desire for talking
+ # Can be one of the following values:
+ # crit: Critical features. Dunst aborts
+ # warn: Only non-fatal warnings
+ # mesg: Important Messages
+ # info: all unimportant stuff
+ # debug: all less than unimportant stuff
+ verbosity = mesg
+
+ # Define the corner radius of the notification window
+ # in pixel size. If the radius is 0, you have no rounded
+ # corners.
+ # The radius will be automatically lowered if it exceeds half of the
+ # notification height to avoid clipping text and/or icons.
+ corner_radius = 10
+
+ # Ignore the dbus closeNotification message.
+ # Useful to enforce the timeout set by dunst configuration. Without this
+ # parameter, an application may close the notification sent before the
+ # user defined timeout.
+ ignore_dbusclose = false
+
+ ### Legacy
+
+ # Use the Xinerama extension instead of RandR for multi-monitor support.
+ # This setting is provided for compatibility with older nVidia drivers that
+ # do not support RandR and using it on systems that support RandR is highly
+ # discouraged.
+ #
+ # By enabling this setting dunst will not be able to detect when a monitor
+ # is connected or disconnected which might break follow mode if the screen
+ # layout changes.
+ force_xinerama = false
+
+ ### mouse
+
+ # Defines list of actions for each mouse event
+ # Possible values are:
+ # * none: Don't do anything.
+ # * do_action: If the notification has exactly one action, or one is marked as default,
+ # invoke it. If there are multiple and no default, open the context menu.
+ # * close_current: Close current notification.
+ # * close_all: Close all notifications.
+ # These values can be strung together for each mouse event, and
+ # will be executed in sequence.
+ mouse_left_click = close_current
+ mouse_middle_click = do_action, close_current
+ mouse_right_click = close_all
+
+# Experimental features that may or may not work correctly. Do not expect them
+# to have a consistent behaviour across releases.
+[experimental]
+ # Calculate the dpi to use on a per-monitor basis.
+ # If this setting is enabled the Xft.dpi value will be ignored and instead
+ # dunst will attempt to calculate an appropriate dpi value for each monitor
+ # using the resolution and physical size. This might be useful in setups
+ # where there are multiple screens with very different dpi values.
+ per_monitor_dpi = false
+
+[shortcuts]
+
+ # Shortcuts are specified as [modifier+][modifier+]...key
+ # Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
+ # "mod3" and "mod4" (windows-key).
+ # Xev might be helpful to find names for keys.
+
+ # Close all notifications.
+ close_all = mod4+n
+
+ # Redisplay last message(s).
+ # On the US keyboard layout "grave" is normally above TAB and left
+ # of "1". Make sure this key actually exists on your keyboard layout,
+ # e.g. check output of 'xmodmap -pke'
+ #history = mod2+shift+n
+
+ # Context menu.
+ context = mod4+shift+n
+
+[urgency_low]
+ # IMPORTANT: colors have to be defined in quotation marks.
+ # Otherwise the "#" and following would be interpreted as a comment.
+ background = "#282A36"
+ foreground = "#F8F8F2"
+ timeout = 0
+ # Icon for notifications with low urgency, uncomment to enable
+ #icon = /path/to/icon
+
+[urgency_normal]
+ background = "#282A36"
+ foreground = "#F8F8F2"
+ timeout = 0
+ # Icon for notifications with normal urgency, uncomment to enable
+ #icon = /path/to/icon
+
+[urgency_critical]
+ background = "#282A36"
+ foreground = "#F8F8F2"
+ timeout = 0
+ # Icon for notifications with critical urgency, uncomment to enable
+ #icon = /path/to/icon
+
+# Every section that isn't one of the above is interpreted as a rules to
+# override settings for certain messages.
+#
+# Messages can be matched by
+# appname (discouraged, see desktop_entry)
+# body
+# category
+# desktop_entry
+# icon
+# match_transient
+# msg_urgency
+# stack_tag
+# summary
+#
+# and you can override the
+# background
+# foreground
+# format
+# frame_color
+# fullscreen
+# new_icon
+# set_stack_tag
+# set_transient
+# timeout
+# urgency
+#
+# Shell-like globbing will get expanded.
+#
+# Instead of the appname filter, it's recommended to use the desktop_entry filter.
+# GLib based applications export their desktop-entry name. In comparison to the appname,
+# the desktop-entry won't get localized.
+#
+# SCRIPTING
+# You can specify a script that gets run when the rule matches by
+# setting the "script" option.
+# The script will be called as follows:
+# script appname summary body icon urgency
+# where urgency can be "LOW", "NORMAL" or "CRITICAL".
+#
+# NOTE: if you don't want a notification to be displayed, set the format
+# to "".
+# NOTE: It might be helpful to run dunst -print in a terminal in order
+# to find fitting options for rules.
+
+# Disable the transient hint so that idle_threshold cannot be bypassed from the
+# client
+#[transient_disable]
+# match_transient = yes
+# set_transient = no
+#
+# Make the handling of transient notifications more strict by making them not
+# be placed in history.
+#[transient_history_ignore]
+# match_transient = yes
+# history_ignore = yes
+
+# fullscreen values
+# show: show the notifications, regardless if there is a fullscreen window opened
+# delay: displays the new notification, if there is no fullscreen window active
+# If the notification is already drawn, it won't get undrawn.
+# pushback: same as delay, but when switching into fullscreen, the notification will get
+# withdrawn from screen again and will get delayed like a new notification
+#[fullscreen_delay_everything]
+# fullscreen = delay
+#[fullscreen_show_critical]
+# msg_urgency = critical
+# fullscreen = show
+
+#[espeak]
+# summary = "*"
+# script = dunst_espeak.sh
+
+#[script-test]
+# summary = "*script*"
+# script = dunst_test.sh
+
+#[ignore]
+# # This notification will not be displayed
+# summary = "foobar"
+# format = ""
+
+#[history-ignore]
+# # This notification will not be saved in history
+# summary = "foobar"
+# history_ignore = yes
+
+#[skip-display]
+# # This notification will not be displayed, but will be included in the history
+# summary = "foobar"
+# skip_display = yes
+
+#[signed_on]
+# appname = Pidgin
+# summary = "*signed on*"
+# urgency = low
+#
+#[signed_off]
+# appname = Pidgin
+# summary = *signed off*
+# urgency = low
+#
+#[says]
+# appname = Pidgin
+# summary = *says*
+# urgency = critical
+#
+#[twitter]
+# appname = Pidgin
+# summary = *twitter.com*
+# urgency = normal
+#
+#[stack-volumes]
+# appname = "some_volume_notifiers"
+# set_stack_tag = "volume"
+#
+# vim: ft=cfg
@@ -0,0 +1,31 @@
+[help]
+ autoCorrect = never
+[init]
+ defaultBranch = master
+[user]
+ signingkey = 0xDB98CDD6D0BFDD35
+ name = Amolith
+ email = amolith@secluded.site
+[commit]
+ gpgsign = true
+[sendemail]
+ smtpserver = smtp.nixnet.email
+ smtpuser = amolith@secluded.site
+ smtpencryption = tls
+ smtpserverport = 587
+[core]
+ pager = delta
+[delta]
+ line-numbers = true
+ syntax-theme = base16
+[interactive]
+ diffFilter = delta --color-only
+[pull]
+ rebase = true
+[push]
+ followTags = true
+[filter "lfs"]
+ clean = git-lfs clean -- %f
+ smudge = git-lfs smudge -- %f
+ process = git-lfs filter-process
+ required = true
@@ -0,0 +1,63 @@
+set mainfont {sans 9}
+set textfont {monospace 9}
+set uifont {sans 9 bold}
+set tabstop 8
+set findmergefiles 0
+set maxgraphpct 50
+set maxwidth 16
+set cmitmode patch
+set wrapcomment none
+set autoselect 1
+set autosellen 40
+set showneartags 1
+set maxrefs 20
+set visiblerefs {"master"}
+set hideremotes 0
+set showlocalchanges 1
+set datetimeformat {%Y-%m-%d %H:%M:%S}
+set limitdiffs 1
+set uicolor grey85
+set want_ttk 1
+set bgcolor white
+set fgcolor black
+set uifgcolor black
+set uifgdisabledcolor #999
+set colors {"#00ff00" red blue magenta darkgrey brown orange}
+set diffcolors {red "#00a000" blue}
+set mergecolors {red blue "#00ff00" purple brown "#009090" magenta "#808000" "#009000" "#ff0080" cyan "#b07070" "#70b0f0" "#70f0b0" "#f0b070" "#ff70b0"}
+set markbgcolor #e0e0ff
+set diffcontext 3
+set selectbgcolor gray85
+set foundbgcolor yellow
+set currentsearchhitbgcolor orange
+set extdifftool meld
+set perfile_attrs 0
+set headbgcolor #00ff00
+set headfgcolor black
+set headoutlinecolor black
+set remotebgcolor #ffddaa
+set tagbgcolor yellow
+set tagfgcolor black
+set tagoutlinecolor black
+set reflinecolor black
+set filesepbgcolor #aaaaaa
+set filesepfgcolor black
+set linehoverbgcolor #ffff80
+set linehoverfgcolor black
+set linehoveroutlinecolor black
+set mainheadcirclecolor yellow
+set workingfilescirclecolor red
+set indexcirclecolor #00ff00
+set circlecolors {white blue gray blue blue}
+set linkfgcolor blue
+set circleoutlinecolor black
+set web_browser xdg-open
+set geometry(main) 1280x1365+1280+24
+set geometry(state) normal
+set geometry(topwidth) 1280
+set geometry(topheight) 255
+set geometry(pwsash0) "465 1"
+set geometry(pwsash1) "697 1"
+set geometry(botwidth) 582
+set geometry(botheight) 1105
+set permviews {}
@@ -0,0 +1,84 @@
+music_directory "~/Music/Final"
+playlist_directory "~/.config/mpd/playlists"
+db_file "~/.config/mpd/database"
+log_file "~/.config/mpd/log"
+pid_file "~/.config/mpd/pid"
+state_file "~/.config/mpd/state"
+sticker_file "~/.config/mpd/sticker.sql"
+bind_to_address "any"
+bind_to_address "~/.config/mpd/socket"
+port "6600"
+log_level "default"
+restore_paused "no"
+save_absolute_paths_in_playlists "no"
+metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
+auto_update "yes"
+follow_outside_symlinks "yes"
+follow_inside_symlinks "yes"
+zeroconf_enabled "yes"
+zeroconf_name "Music Player @ %h"
+#password "password@read,add,control,admin"
+#default_permissions "read,add,control,admin"
+input {
+ plugin "curl"
+# proxy "proxy.isp.com:8080"
+# proxy_user "user"
+# proxy_password "password"
+}
+audio_output {
+ type "pulse"
+ name "pulse audio"
+}
+#audio_output {
+# type "alsa"
+# name "My ALSA Device"
+## device "hw:0,0" # optional
+## mixer_type "hardware" # optional
+## mixer_device "default" # optional
+## mixer_control "PCM" # optional
+## mixer_index "0" # optional
+#}
+#
+# An example of a shout output (for streaming to Icecast):
+#
+#audio_output {
+# type "shout"
+# encoder "vorbis" # optional
+# name "My Shout Stream"
+# host "localhost"
+# port "8000"
+# mount "/mpd.ogg"
+# password "hackme"
+# quality "5.0"
+# bitrate "128"
+# format "44100:16:1"
+## protocol "icecast2" # optional
+## user "source" # optional
+## description "My Stream Description" # optional
+## url "http://example.com" # optional
+## genre "jazz" # optional
+## public "no" # optional
+## timeout "2" # optional
+## mixer_type "software" # optional
+#}
+#
+# An example of a recorder output:
+#
+#audio_output {
+# type "recorder"
+# name "My recorder"
+# encoder "vorbis" # optional, vorbis or lame
+# path "/var/lib/mpd/recorder/mpd.ogg"
+## quality "5.0" # do not define if bitrate is defined
+# bitrate "128" # do not define if quality is defined
+# format "44100:16:1"
+#}
+replaygain "auto"
+volume_normalization "yes"
+
+audio_output {
+ type "fifo"
+ name "my_fifo"
+ path "/tmp/mpd.fifo"
+ format "44100:16:2"
+}
@@ -0,0 +1,184 @@
+let mapleader =","
+
+if ! filereadable(expand('~/.config/nvim/autoload/plug.vim'))
+ echo "Downloading junegunn/vim-plug to manage plugins..."
+ silent !mkdir -p ~/.config/nvim/autoload/
+ silent !curl "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" > ~/.config/nvim/autoload/plug.vim
+endif
+
+call plug#begin()
+Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } " FZF integration
+Plug 'junegunn/fzf.vim' " FZF integration
+Plug 'ap/vim-css-color' " highlight css colour codes with that color
+Plug 'vim-airline/vim-airline' " status bar
+Plug 'vim-airline/vim-airline-themes' " status bar themes
+Plug 'tpope/vim-surround' " highlight open/close characters like [], {}, ()
+Plug 'cespare/vim-toml' " toml syntax highlighting
+Plug 'edkolev/tmuxline.vim' " apply vim statusbar theme to tmux
+Plug 'christoomey/vim-tmux-navigator' " Tmux integration
+" Plug 'chriskempson/base16-vim' " base16 color schemes
+" Plug 'morhetz/gruvbox' " gruvbox theme
+Plug 'rhysd/vim-grammarous' " LanguageTool integration
+Plug 'vim-syntastic/syntastic' " syntax checking for various languages
+Plug 'godlygeek/tabular' " required for aligning tables with next plugin
+Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
+call plug#end()
+
+" Set theme colours
+set background=dark
+"colorscheme wilmersdorf
+
+" LaTeX config
+{{- if eq .chezmoi.os "linux" }}
+let g:livepreview_previewer = 'zathura'
+{{- end }}
+let g:livepreview_use_biber = 1
+
+" Grammorous config
+{{- if eq .chezmoi.os "linux" }}
+let g:grammarous#languagetool_cmd = 'java -cp ~/languagetool/languagetool-server.jar org.languagetool.server.HTTPServer --port 8081 --allow-origin "*"'
+{{- end}}
+
+" netrw configuration
+let g:netrw_banner=0
+let g:netrw_browse_split=4
+let g:netrw_altv=1
+let g:netrw_liststyle=3
+let g:netrw_list_hide=netrw_gitignore#Hide()
+let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+'
+
+" syntastic settings
+set statusline+=%#warningmsg#
+set statusline+=%{SyntasticStatuslineFlag()}
+set statusline+=%*
+let g:syntastic_always_populate_loc_list = 1
+let g:syntastic_auto_loc_list = 1
+let g:syntastic_check_on_open = 1
+let g:syntastic_check_on_wq = 0
+
+""
+" Some basics
+""
+" Make ctags for supported languages
+command! MakeTags !ctags -R .
+" Add all subdirs to working path so :find works well
+set path+=**
+" Status line completion menu
+set wildmenu
+" Set above menu to a vertical instead of horizontal list
+set wildmode=full,list,full
+" Wrap long lines that continue past the viewport
+set linebreak
+" Highlight the column the cursor is on
+set cursorcolumn
+" Highlight the line the cursor is on
+set cursorline
+" Enables more colors
+set termguicolors
+" If there are folds, close some of them on startup
+set foldlevelstart=99
+" Use system clipboard for all yanking/pasting
+set clipboard+=unnamedplus
+" Use tabs but display them as 4 spaces instead of 8
+set ts=4 sts=4 sw=4 expandtab
+" Round the indent to a multiple of sw
+set shiftround
+" Set hidden character characters
+set listchars=tab:βΈ\ ,eol:Β¬,nbsp:β£,trail:β’,space:.,extends:β,precedes:β
+set backspace=indent,eol,start
+" Keep 12 lines above and below the cursor when scrolling
+set scrolloff=12
+" Disable mouse support
+set mouse=
+" Use indents to determine folds
+set foldmethod=indent
+" Set line numbers relative to current line
+set number relativenumber
+" Show partial commands in the bottom right
+set showcmd
+" Show which mode you're in
+set showmode
+" Display partial matches when searching
+set incsearch
+" Highlight search resultsβhide with :noh
+set hlsearch
+" Wrap searches around the end of the file
+set wrapscan
+" Tell Vim to be more liberal with creating hidden buffers
+set hidden
+" Case-insensitive search unless term contains uppercase chars
+set smartcase
+
+" Statusbar theme
+let g:airline_powerline_fonts = 1
+let g:airline_theme='bubblegum'
+if !exists('g:airline_symbols')
+ let g:airline_symbols = {}
+endif
+
+" Configure thesaurus
+let g:tq_mthesaur_file="~/.config/nvim/thesaurus/mthesaur.txt"
+let g:tq_enabled_backends=["datamuse_com","mthesaur_txt","openoffice_en"]
+
+""
+" Keybindings
+""
+" Insert timestamp at the end of the line in this format: 20200527T113245
+nnoremap <C-t><C-s> m'A<C-R>=strftime('%Y%m%dT%H%M%S')<CR>
+" Open a new tab
+nnoremap <C-t>t :tabnew<CR>
+" Toggle hidden characters
+nnoremap <C-l> :set list!<CR>
+
+" Window management
+map <C-h> <C-w>h
+map <C-j> <C-w>j
+map <C-k> <C-w>k
+map <C-l> <C-w>l
+
+" Snippets
+nnoremap ,nnm :read $HOME/.config/nvim/snippets/nnmail<CR>2jA
+nnoremap ,sig :read $HOME/.config/nvim/snippets/signature<CR>
+
+" only enable persistent undo if vim supports
+if has('persistent_undo')
+ set undodir=$HOME/.config/nvim/undofile
+ set undofile
+endif
+
+" Only enable autocommands when Vim supports them
+if has("autocmd")
+ " Disables automatic commenting on newline:
+ autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o
+
+ ""
+ " File-specific indentation settings
+ ""
+ autocmd FileType make setlocal ts=8 sts=8 sw=8 noexpandtab
+ autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab
+
+ ""
+ " Email configuration
+ ""
+ " Spellcheck in British English
+ autocmd FileType eml setlocal spell spelllang=en_gb
+ " Set lines to hard wrap at 72 chars
+ autocmd FileType eml set tw=72
+
+ ""
+ " Markdown Configuration
+ ""
+ " Treat all .md files as markdown
+ autocmd BufNewFile,BufRead *.md set filetype=markdown
+ " Spellcheck in British English
+ autocmd FileType markdown setlocal spell spelllang=en_gb
+
+ ""
+ " Working with LaTeX
+ ""
+ " Reduce udpatetime for faster previews
+ autocmd BufNewFile,BufRead *.tex setfiletype tex
+ autocmd FileType tex set ut=250
+ autocmd FileType tex set colorcolumn=72
+
+endif
@@ -0,0 +1,176 @@
+;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
+
+;; Place your private configuration here! Remember, you do not need to run 'doom
+;; sync' after modifying this file!
+
+
+;; Some functionality uses this to identify you, e.g. GPG configuration, email
+;; clients, file templates and snippets.
+(setq user-full-name "Amolith"
+ user-mail-address "amolith@secluded.site")
+
+;; Doom exposes five (optional) variables for controlling fonts in Doom. Here
+;; are the three important ones:
+;;
+;; + `doom-font'
+;; + `doom-variable-pitch-font'
+;; + `doom-big-font' -- used for `doom-big-font-mode'; use this for
+;; presentations or streaming.
+;;
+;; They all accept either a font-spec, font string ("Input Mono-12"), or xlfd
+;; font string. You generally only need these two:
+(setq doom-font (font-spec :family "Triplicate T4c" :size 16)
+ doom-variable-pitch-font (font-spec :family "Valkyrie T4" :size 16))
+
+;; There are two ways to load a theme. Both assume the theme is installed and
+;; available. You can either set `doom-theme' or manually load a theme with the
+;; `load-theme' function. This is the default:
+(setq doom-theme 'doom-dracula)
+
+;; If you use `org' and don't want your org files in the default location below,
+;; change `org-directory'. It must be set before org loads!
+(setq org-directory "~/Org/")
+
+;; This determines the style of line numbers in effect. If set to `nil', line
+;; numbers are disabled. For relative line numbers, set this to `relative'.
+(setq display-line-numbers-type t)
+
+
+;; Here are some additional functions/macros that could help you configure Doom:
+;;
+;; - `load!' for loading external *.el files relative to this one
+;; - `use-package!' for configuring packages
+;; - `after!' for running code after a package has loaded
+;; - `add-load-path!' for adding directories to the `load-path', relative to
+;; this file. Emacs searches the `load-path' when you load packages with
+;; `require' or `use-package'.
+;; - `map!' for binding new keys
+;;
+;; To get information about any of these functions/macros, move the cursor over
+;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
+;; This will open documentation for it, including demos of how they are used.
+;;
+;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
+;; they are implemented.
+
+;; Prettify bullets
+(use-package org-bullets
+ :init
+ (add-hook 'org-mode-hook 'org-bullets-mode))
+
+;; Replace ellipsis with downward-pointing arrow
+(setq org-ellipsis " ‡")
+
+;; Format Org text and hide markers
+(setq org-hide-emphasis-markers t)
+
+;; Keep point in about the centre of the screen
+(use-package smooth-scrolling
+ :ensure t
+ :config
+ (smooth-scrolling-mode 1)
+ (setq smooth-scroll-margin 20))
+
+;; Use fancy lambdas
+(global-prettify-symbols-mode t)
+
+;; Use email syntax highlighting in neomutt compositions
+(add-to-list 'auto-mode-alist '("/tmp/neomutt-*" . mail-mode))
+
+;; Prevent Emacs from indenting Org headers
+;(setq org-adapt-indentation nil)
+
+;; Allow export to markdown and beamer (for presentations).
+(require 'ox-md)
+(require 'ox-beamer)
+
+;; Don't ask before evaluating code blocks
+(setq org-confirm-babel-evaluate nil)
+
+;; Use =htmlize= to ensure that exported code blocks use syntax highlighting.
+(use-package htmlize)
+
+;; Translate regular ol' straight quotes to typographically-correct curly quotes
+;; when exporting.
+(setq org-export-with-smart-quotes t)
+
+;; Always use =pdflatex= when compiling LaTeX documents. I don't really have any
+;; use for DVIs.
+(setq TeX-PDF-mode t)
+
+;; Add ox-hugo for exporting blog.org files to Hugo-compatible markdown
+(use-package ox-hugo
+ :ensure t
+ :after ox)
+
+
+;; I've taken to charting my guitar music out with [ChordPro]. [Chordpro mode]
+;; just adds a major mode for syntax highlighting and some keybinds.
+;;
+;; [ChordPro]: https://www.chordpro.org
+;; [Chordpro mode]: https://github.com/hading/chordpro-mode
+(setq auto-mode-alist (cons '("\\.cho$" . chordpro-mode) auto-mode-alist))
+(autoload 'chordpro-mode "chordpro-mode")
+
+;; I use [LilyPond] for writing standard sheet music. When you install the
+;; package, it comes with some elisp files that Emacs needs to load and
+;; configure.
+;;
+;; [LilyPond]: https://lilypond.org/
+(require 'lilypond-mode)
+(add-to-list 'auto-mode-alist '("\\.ly$" . LilyPond-mode))
+{{- if eq .chezmoi.os "linux" }}
+(setq LilyPond-pdf-command "zathura")
+{{- end }}
+
+;; Define prose modes for enabling prose-related niceties
+(defvar prose-modes
+ '(gfm-mode
+ git-commit-mode
+ markdown-mode
+ message-mode
+ mail-mode
+ org-mode
+ text-mode))
+(defvar prose-mode-hooks
+ (mapcar (lambda (mode) (intern (format "%s-hook" mode)))
+ prose-modes))
+
+;; Enable spell-checking for all prose-related modes
+(use-package flyspell
+ :config
+ (dolist (hook prose-mode-hooks)
+ (add-hook hook 'flyspell-mode)))
+
+;; Wrap prose paragraphs automatically
+(dolist (hook prose-mode-hooks)
+ (add-hook hook 'turn-on-auto-fill))
+
+;; - Associate ~.md~ files with GitHub-flavoured Markdown
+;; - Use ~pandoc~ to render the results
+;; - Apply syntax highlighting in code blocks
+(use-package markdown-mode
+ :commands gfm-mode
+ :mode (("\\.md$" . gfm-mode))
+ :config
+ (custom-set-faces
+ '(markdown-pre-face ((t nil))))
+ (setq markdown-command "pandoc --standalone --mathjax --from=markdown"
+ markdown-fontify-code-blocks-natively t))
+
+;; When splitting windows, I want to switch to the new one immediately. By
+;; default, you have to press a few bindings. This makes that automatic.
+(defun amo/split-window-below-and-switch ()
+ "Split the window horizontally, then switch to the new pane."
+ (interactive)
+ (split-window-below)
+ (balance-windows)
+ (other-window 1))
+(defun amo/split-window-right-and-switch ()
+ "Split the window vertically, then switch to the new pane."
+ (interactive)
+ (split-window-right)
+ (balance-windows)
+ (other-window 1))
+(global-set-key (kbd "C-x 2") 'amo/split-window-below-and-switch)
+(global-set-key (kbd "C-x 3") 'amo/split-window-right-and-switch)
@@ -0,0 +1,190 @@
+;;; init.el -*- lexical-binding: t; -*-
+
+;; This file controls what Doom modules are enabled and what order they load
+;; in. Remember to run 'doom sync' after modifying it!
+
+;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
+;; documentation. There you'll find a "Module Index" link where you'll find
+;; a comprehensive list of Doom's modules and what flags they support.
+
+;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
+;; 'C-c c k' for non-vim users) to view its documentation. This works on
+;; flags as well (those symbols that start with a plus).
+;;
+;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
+;; directory (for easy access to its source code).
+
+(doom! :input
+ ;;chinese
+ ;;japanese
+ ;;layout ; auie,ctsrnm is the superior home row
+
+ :completion
+ company ; the ultimate code completion backend
+ ;;helm ; the *other* search engine for love and life
+ ;;ido ; the other *other* search engine...
+ ;;ivy ; a search engine for love and life
+ vertico ; the search engine of the future
+
+ :ui
+ ;;deft ; notational velocity for Emacs
+ doom ; what makes DOOM look the way it does
+ doom-dashboard ; a nifty splash screen for Emacs
+ doom-quit ; DOOM quit-message prompts when you quit Emacs
+ ;;(emoji +unicode) ; π
+ hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
+ ;;hydra
+ ;;indent-guides ; highlighted indent columns
+ ;;ligatures ; ligatures and symbols to make your code pretty again
+ ;;minimap ; show a map of the code on the side
+ modeline ; snazzy, Atom-inspired modeline, plus API
+ ;;nav-flash ; blink cursor line after big motions
+ ;;neotree ; a project drawer, like NERDTree for vim
+ ophints ; highlight the region an operation acts on
+ (popup +defaults) ; tame sudden yet inevitable temporary windows
+ ;;tabs ; a tab bar for Emacs
+ ;;treemacs ; a project drawer, like neotree but cooler
+ ;;unicode ; extended unicode support for various languages
+ vc-gutter ; vcs diff in the fringe
+ vi-tilde-fringe ; fringe tildes to mark beyond EOB
+ ;;window-select ; visually switch windows
+ workspaces ; tab emulation, persistence & separate workspaces
+ ;;zen ; distraction-free coding or writing
+
+ :editor
+ (evil +everywhere); come to the dark side, we have cookies
+ file-templates ; auto-snippets for empty files
+ fold ; (nigh) universal code folding
+ ;;(format +onsave) ; automated prettiness
+ ;;god ; run Emacs commands without modifier keys
+ ;;lispy ; vim for lisp, for people who don't like vim
+ ;;multiple-cursors ; editing in many places at once
+ ;;objed ; text object editing for the innocent
+ ;;parinfer ; turn lisp into python, sort of
+ ;;rotate-text ; cycle region at point between text candidates
+ snippets ; my elves. They type so I don't have to
+ ;;word-wrap ; soft wrapping with language-aware indent
+
+ :emacs
+ dired ; making dired pretty [functional]
+ electric ; smarter, keyword-based electric-indent
+ ;;ibuffer ; interactive buffer management
+ undo ; persistent, smarter undo for your inevitable mistakes
+ vc ; version-control and Emacs, sitting in a tree
+
+ :term
+ ;;eshell ; the elisp shell that works everywhere
+ ;;shell ; simple shell REPL for Emacs
+ ;;term ; basic terminal emulator for Emacs
+ vterm ; the best terminal emulation in Emacs
+
+ :checkers
+ syntax ; tasing you for every semicolon you forget
+ (spell +flyspell) ; tasing you for misspelling mispelling
+ grammar ; tasing grammar mistake every you make
+
+ :tools
+ ;;ansible
+ ;;biblio ; Writes a PhD for you (citation needed)
+ ;;debugger ; FIXME stepping through code, to help you add bugs
+ ;;direnv
+ ;;docker
+ editorconfig ; let someone else argue about tabs vs spaces
+ ;;ein ; tame Jupyter notebooks with emacs
+ (eval +overlay) ; run code, run (also, repls)
+ ;;gist ; interacting with github gists
+ lookup ; navigate your code and its documentation
+ lsp ; M-x vscode
+ magit ; a git porcelain for Emacs
+ make ; run make tasks from Emacs
+ ;;pass ; password manager for nerds
+ pdf ; pdf enhancements
+ ;;prodigy ; FIXME managing external services & code builders
+ rgb ; creating color strings
+ ;;taskrunner ; taskrunner for all your projects
+ ;;terraform ; infrastructure as code
+ ;;tmux ; an API for interacting with tmux
+ upload ; map local to remote projects via ssh/ftp
+
+ :os
+ (:if IS-MAC macos) ; improve compatibility with macOS
+ ;;tty ; improve the terminal Emacs experience
+
+ :lang
+ ;;agda ; types of types of types of types...
+ ;;beancount ; mind the GAAP
+ ;;cc ; C > C++ == 1
+ ;;clojure ; java with a lisp
+ ;;common-lisp ; if you've seen one lisp, you've seen them all
+ ;;coq ; proofs-as-programs
+ ;;crystal ; ruby at the speed of c
+ ;;csharp ; unity, .NET, and mono shenanigans
+ ;;data ; config/data formats
+ ;;(dart +flutter) ; paint ui and not much else
+ ;;dhall
+ ;;elixir ; erlang done right
+ ;;elm ; care for a cup of TEA?
+ emacs-lisp ; drown in parentheses
+ ;;erlang ; an elegant language for a more civilized age
+ ;;ess ; emacs speaks statistics
+ ;;factor
+ ;;faust ; dsp, but you get to keep your soul
+ ;;fsharp ; ML stands for Microsoft's Language
+ ;;fstar ; (dependent) types and (monadic) effects and Z3
+ ;;gdscript ; the language you waited for
+ (go +lsp) ; the hipster dialect
+ (haskell +lsp) ; a language that's lazier than I am
+ ;;hy ; readability of scheme w/ speed of python
+ ;;idris ; a language you can depend on
+ json ; At least it ain't XML
+ ;;(java +meghanada) ; the poster child for carpal tunnel syndrome
+ ;;javascript ; all(hope(abandon(ye(who(enter(here))))))
+ ;;julia ; a better, faster MATLAB
+ ;;kotlin ; a better, slicker Java(Script)
+ latex ; writing papers in Emacs has never been so fun
+ ;;lean ; for folks with too much to prove
+ ledger ; be audit you can be
+ ;;lua ; one-based indices? one-based indices
+ markdown ; writing docs for people to ignore
+ ;;nim ; python + lisp at the speed of c
+ ;;nix ; I hereby declare "nix geht mehr!"
+ ;;ocaml ; an objective camel
+ org ; organize your plain life in plain text
+ ;;php ; perl's insecure younger brother
+ ;;plantuml ; diagrams for confusing people more
+ ;;purescript ; javascript, but functional
+ python ; beautiful is better than ugly
+ ;;qt ; the 'cutest' gui framework ever
+ ;;racket ; a DSL for DSLs
+ ;;raku ; the artist formerly known as perl6
+ ;;rest ; Emacs as a REST client
+ ;;rst ; ReST in peace
+ ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
+ rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
+ ;;scala ; java, but good
+ ;;(scheme +guile) ; a fully conniving family of lisps
+ sh ; she sells {ba,z,fi}sh shells on the C xor
+ ;;sml
+ ;;solidity ; do you need a blockchain? No.
+ ;;swift ; who asked for emoji variables?
+ ;;terra ; Earth and Moon in alignment for performance.
+ web ; the tubes
+ yaml ; JSON, but readable
+ ;;zig ; C, but simpler
+
+ :email
+ ;;(mu4e +org +gmail)
+ notmuch
+ ;;(wanderlust +gmail)
+
+ :app
+ calendar
+ ;;emms
+ ;;everywhere ; *leave* Emacs!? You must be joking
+ ;;irc ; how neckbeards socialize
+ (rss +org) ; emacs as an RSS reader
+ ;;twitter ; twitter client https://twitter.com/vnought
+
+ :config
+ ;;literate
+ (default +bindings +smartparens))
@@ -0,0 +1,57 @@
+;; -*- no-byte-compile: t; -*-
+;;; $DOOMDIR/packages.el
+
+;; To install a package with Doom you must declare them here and run 'doom sync'
+;; on the command line, then restart Emacs for the changes to take effect -- or
+;; use 'M-x doom/reload'.
+
+
+;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
+;(package! some-package)
+
+(package! org-bullets)
+(package! smooth-scrolling)
+(package! htmlize)
+(package! ox-hugo)
+(package! flyspell)
+(package! markdown-mode)
+
+;; To install a package directly from a remote git repo, you must specify a
+;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
+;; https://github.com/raxod502/straight.el#the-recipe-format
+;(package! another-package
+; :recipe (:host github :repo "username/repo"))
+
+;; If the package you are trying to install does not contain a PACKAGENAME.el
+;; file, or is located in a subdirectory of the repo, you'll need to specify
+;; `:files' in the `:recipe':
+;(package! this-package
+; :recipe (:host github :repo "username/repo"
+; :files ("some-file.el" "src/lisp/*.el")))
+
+;; If you'd like to disable a package included with Doom, you can do so here
+;; with the `:disable' property:
+;(package! builtin-package :disable t)
+
+;; You can override the recipe of a built in package without having to specify
+;; all the properties for `:recipe'. These will inherit the rest of its recipe
+;; from Doom or MELPA/ELPA/Emacsmirror:
+;(package! builtin-package :recipe (:nonrecursive t))
+;(package! builtin-package-2 :recipe (:repo "myfork/package"))
+
+;; Specify a `:branch' to install a package from a particular branch or tag.
+;; This is required for some packages whose default branch isn't 'master' (which
+;; our package manager can't deal with; see raxod502/straight.el#279)
+;(package! builtin-package :recipe (:branch "develop"))
+
+;; Use `:pin' to specify a particular commit to install.
+;(package! builtin-package :pin "1a2b3c4d5e")
+
+
+;; Doom's packages are pinned to a specific commit and updated from release to
+;; release. The `unpin!' macro allows you to unpin single packages...
+;(unpin! pinned-package)
+;; ...or multiple packages
+;(unpin! pinned-package another-pinned-package)
+;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
+;(unpin! t)
@@ -0,0 +1,48 @@
+# Start configuration added by Zim install {{{
+# -------
+# Modules
+# -------
+
+# Sets sane Zsh built-in environment options.
+zmodule environment
+# Provides handy git aliases and functions.
+zmodule git
+# Applies correct bindkeys for input events.
+zmodule input
+# Sets a custom terminal title.
+zmodule termtitle
+# Utility aliases and functions. Adds colour to ls, grep and less.
+zmodule utility
+
+#
+# Prompt
+#
+# Exposes to prompts how long the last command took to execute, used by asciiship.
+zmodule duration-info
+# Exposes git repository status information to prompts, used by asciiship.
+zmodule git-info
+# A heavily reduced, ASCII-only version of the Spaceship and Starship prompts.
+zmodule asciiship
+
+# Additional completion definitions for Zsh.
+zmodule zsh-users/zsh-completions
+# Enables and configures smart and extensive tab completion.
+# completion must be sourced after zsh-users/zsh-completions
+zmodule completion
+# Fish-like autosuggestions for Zsh.
+zmodule zsh-users/zsh-autosuggestions
+# Fish-like syntax highlighting for Zsh.
+# zsh-users/zsh-syntax-highlighting must be sourced after completion
+zmodule zsh-users/zsh-syntax-highlighting
+# Fish-like history search (up arrow) for Zsh.
+# zsh-users/zsh-history-substring-search must be sourced after zsh-users/zsh-syntax-highlighting
+zmodule zsh-users/zsh-history-substring-search
+# }}} End configuration added by Zim install
+
+zmodule archive
+zmodule exa
+zmodule fzf
+zmodule git
+zmodule prompt-pwd
+zmodule pacman
+zmodule s1ck94
@@ -0,0 +1,240 @@
+# Start configuration added by Zim install
+#
+# User configuration sourced by interactive shells
+#
+
+# -----------------
+# Zsh configuration
+# -----------------
+
+#
+# History
+#
+
+# Remove older command from the history if a duplicate is to be added.
+setopt HIST_IGNORE_ALL_DUPS
+
+#
+# Input/output
+#
+
+# Set editor default keymap to emacs (`-e`) or vi (`-v`)
+bindkey -e
+
+# Prompt for spelling correction of commands.
+setopt CORRECT
+
+# Customize spelling correction prompt.
+#SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? '
+
+# Remove path separator from WORDCHARS.
+WORDCHARS=${WORDCHARS//[\/]}
+
+# -----------------
+# Zim configuration
+# -----------------
+
+# Use degit instead of git as the default tool to install and update modules.
+#zstyle ':zim:zmodule' use 'degit'
+
+# --------------------
+# Module configuration
+# --------------------
+
+#
+# completion
+#
+
+# Set a custom path for the completion dump file.
+# If none is provided, the default ${ZDOTDIR:-${HOME}}/.zcompdump is used.
+#zstyle ':zim:completion' dumpfile "${ZDOTDIR:-${HOME}}/.zcompdump-${ZSH_VERSION}"
+
+#
+# git
+#
+
+# Set a custom prefix for the generated aliases. The default prefix is 'G'.
+#zstyle ':zim:git' aliases-prefix 'g'
+
+#
+# input
+#
+
+# Append `../` to your input for each `.` you type after an initial `..`
+zstyle ':zim:input' double-dot-expand yes
+
+#
+# termtitle
+#
+
+# Set a custom terminal title format using prompt expansion escape sequences.
+# See http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Simple-Prompt-Escapes
+# If none is provided, the default '%n@%m: %~' is used.
+zstyle ':zim:termtitle' format '%1~'
+
+#
+# zsh-autosuggestions
+#
+
+# Customize the style that the suggestions are shown with.
+# See https://github.com/zsh-users/zsh-autosuggestions/blob/master/README.md#suggestion-highlight-style
+#ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=242'
+
+#
+# zsh-syntax-highlighting
+#
+
+# Set what highlighters will be used.
+# See https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters.md
+ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets)
+
+# Customize the main highlighter styles.
+# See https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters/main.md#how-to-tweak-it
+#typeset -A ZSH_HIGHLIGHT_STYLES
+#ZSH_HIGHLIGHT_STYLES[comment]='fg=242'
+
+# ------------------
+# Initialize modules
+# ------------------
+
+if [[ ! -e ${ZIM_HOME}/zimfw.zsh ]]; then
+ # Download zimfw script if missing.
+ command mkdir -p ${ZIM_HOME}
+ if (( ${+commands[curl]} )); then
+ command curl -fsSL -o ${ZIM_HOME}/zimfw.zsh https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh
+ else
+ command wget -nv -O ${ZIM_HOME}/zimfw.zsh https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh
+ fi
+fi
+if [[ ! ${ZIM_HOME}/init.zsh -nt ${ZDOTDIR:-${HOME}}/.zimrc ]]; then
+ # Install missing modules, and update ${ZIM_HOME}/init.zsh if missing or outdated.
+ source ${ZIM_HOME}/zimfw.zsh init -q
+fi
+source ${ZIM_HOME}/init.zsh
+
+# ------------------------------
+# Post-init module configuration
+# ------------------------------
+
+#
+# zsh-history-substring-search
+#
+
+# Bind ^[[A/^[[B manually so up/down works both before and after zle-line-init
+bindkey '^[[A' history-substring-search-up
+bindkey '^[[B' history-substring-search-down
+
+# Bind up and down keys
+zmodload -F zsh/terminfo +p:terminfo
+if [[ -n ${terminfo[kcuu1]} && -n ${terminfo[kcud1]} ]]; then
+ bindkey ${terminfo[kcuu1]} history-substring-search-up
+ bindkey ${terminfo[kcud1]} history-substring-search-down
+fi
+
+bindkey '^P' history-substring-search-up
+bindkey '^N' history-substring-search-down
+bindkey -M vicmd 'k' history-substring-search-up
+bindkey -M vicmd 'j' history-substring-search-down
+# End configuration added by Zim install
+
+# Executable paths
+export PATH="$PATH:$HOME/dotfiles/bin"
+export PATH="$PATH:$HOME/.emacs.d/bin"
+export PATH="$PATH:$HOME/.cargo/bin"
+export PATH="$PATH:$HOME/.local/bin"
+export ANDROID_HOME="$HOME/SDKs/Android"
+export PATH="$PATH:$ANDROID_HOME/cmdline-tools/tools/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator"
+export PATH="$PATH:$HOME/.gem/ruby/2.7.0/bin"
+export PATH="$PATH:$HOME/.gem/ruby/3.0.0/bin"
+export PATH="$PATH:$HOME/go/bin"
+
+CASE_SENSITIVE="false"
+
+export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
+
+#HYPHEN_INSENSITIVE="true"
+# Uncomment the following line if pasting URLs and other text is messed up.
+# DISABLE_MAGIC_FUNCTIONS=true
+
+# Uncomment the following line if you want to disable marking untracked files
+# under VCS as dirty. This makes repository status check for large repositories
+# much, much faster.
+# DISABLE_UNTRACKED_FILES_DIRTY="true"
+
+#plugins=(
+# git
+# golang
+# zsh-autosuggestions
+# zsh-completions
+# lxd-completion-zsh
+# fzf-zsh
+#)
+
+# Other completions
+compctl -g '~/.teamocil/*(:t:r)' teamocil
+
+#source $ZSH/oh-my-zsh.sh
+source /usr/share/z/z.sh
+
+# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
+#[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
+
+#source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
+
+# Ranger conf
+export RANGER_LOAD_DEFAULT_RC=false
+
+export LANG=en_GB.UTF-8
+export EDITOR='devour emacsclient -c'
+export VISUAL='devour emacsclient -c'
+export _JAVA_AWT_WM_NONREPARENTING=1
+export MANPAGER="nvim +Man!"
+export COLUMNS=80
+export MANWIDTH=80
+
+alias e="$EDITOR"
+alias u="linx-client"
+alias vim="nvim"
+alias tmp="cd $(mktemp -d)"
+alias send="rsync -avmzzP"
+alias tree="exa --tree"
+alias bat="bat -n --theme base16 --tabs 2"
+alias mov="ranger ~/Videos/Movies"
+alias tv="ranger ~/Videos/TV\ Shows"
+alias yt="ranger ~/Videos/YouTube"
+alias pass='str="$(pwgen -s 25 1)" && echo "$str" && echo -n "$str" | xclip -selection clipboard'
+alias secluded="cd ~/repos/sites/secluded/ && hugo --cleanDestinationDir && rsync -avmzz public/ hel1-srv1:/var/www/secluded/"
+alias erase="shred -vzfun 32"
+alias dl="youtube-dl -f bestvideo+bestaudio --write-sub --write-auto-sub --sub-lang en --sub-format srt/best --convert-subs srt --embed-subs -o '%(upload_date)s %(title)s.%(ext)s'"
+alias us="unsilence -t 15 -as 1.25"
+alias dotgit="python3 ~/dotfiles/dotgit/dotgit/__main__.py"
+alias roll="roll -v"
+alias dn="notify-send done"
+alias sxiv="sxiv -p"
+alias tt="tasktimer"
+
+# devour windows
+function zathura() { devour zathura "$1" }
+function inkscape() { devour inkscape "$1" }
+
+# Functions
+function gi() {
+ curl -sLw n https://www.toptal.com/developers/gitignore/api/$@ ;
+}
+function noti() {
+ curl 'https://notify.nixnet.services/message?token={{- .gotify_token | quote -}}' -F "title=$1" -F "message=$2" -F "priority=4"
+}
+
+PATH="{{ .chezmoi.homeDir }}/perl5/bin${PATH:+:${PATH}}"; export PATH;
+PERL5LIB="{{ .chezmoi.homeDir }}/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
+PERL_LOCAL_LIB_ROOT="{{ .chezmoi.homeDir }}/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
+PERL_MB_OPT="--install_base \"{{ .chezmoi.homeDir }}/perl5\""; export PERL_MB_OPT;
+PERL_MM_OPT="INSTALL_BASE={{ .chezmoi.homeDir }}/perl5"; export PERL_MM_OPT;
+autoload -U +X bashcompinit && bashcompinit
+complete -o nospace -C /usr/local/bin/bitcomplete bit
+
+
+# Necessary for SSH & YubiKey
+export GPG_TTY="$TTY"
+export SSH_AUTH_SOCK="/run/user/1000/gnupg/S.gpg-agent.ssh"
+gpgconf --launch gpg-agent