summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gitconfig43
-rw-r--r--gpg-agent.conf4
-rw-r--r--gpg.conf142
-rw-r--r--gtk3.ini15
-rw-r--r--home-configuration.scm231
-rw-r--r--htoprc59
-rw-r--r--i3.conf253
-rw-r--r--i3status.conf57
-rw-r--r--kitty.conf1339
-rw-r--r--lesskey18
-rw-r--r--prompt.zsh123
-rw-r--r--zshrc187
12 files changed, 2471 insertions, 0 deletions
diff --git a/gitconfig b/gitconfig
new file mode 100644
index 00000000..4c12b72c
--- /dev/null
+++ b/gitconfig
@@ -0,0 +1,43 @@
+# This is Git's per-user configuration file.
+[user]
+ name = Timo Wilken
+ email = timo.21.wilken@gmail.com
+ signingkey = 53EC3C06856883DD92355BC22FC78504681F69B0
+[commit]
+ gpgsign = true
+[url "https://"]
+ insteadOf = git://
+[url "ssh://git@gitlab.cern.ch:7999/"]
+ insteadOf = https://gitlab.cern.ch/
+[url "ssh://git@ssh.github.com/"]
+ insteadOf = gh:
+[gui]
+ fontui = -family \"Fira Sans\" -size 10 -weight normal -slant roman -underline 0 -overstrike 0
+ fontdiff = -family \"Fira Code\" -size 10 -weight normal -slant roman -underline 0 -overstrike 0
+ tabsize = 4
+[merge]
+ summary = true
+ conflictstyle = diff3
+[color]
+ ui = auto
+[pull]
+ rebase = false
+ ff = only
+[alias]
+ glog = log --decorate --graph --all --oneline
+ plog = log --decorate --graph --all --oneline --pretty=tformat:\"%C(yellow)%h %Cgreen%as %Cblue%<(10,trunc)%an%Cred%d%Creset %s\"
+[init]
+ defaultBranch = master
+[advice]
+ detachedHead = false
+# https://sw.kovidgoyal.net/kitty/kittens/diff/
+[diff]
+ tool = kitty
+ guitool = kitty.gui
+[difftool]
+ prompt = false
+ trustExitCode = true
+[difftool "kitty"]
+ cmd = kitty +kitten diff $LOCAL $REMOTE
+[difftool "kitty.gui"]
+ cmd = kitty kitty +kitten diff $LOCAL $REMOTE \ No newline at end of file
diff --git a/gpg-agent.conf b/gpg-agent.conf
new file mode 100644
index 00000000..6f476443
--- /dev/null
+++ b/gpg-agent.conf
@@ -0,0 +1,4 @@
+pinentry-program pinentry-rofi
+# Needed if spawning lots of parallel gpg --decrypt processes.
+# https://dev.gnupg.org/T3530
+auto-expand-secmem
diff --git a/gpg.conf b/gpg.conf
new file mode 100644
index 00000000..0d1d77a7
--- /dev/null
+++ b/gpg.conf
@@ -0,0 +1,142 @@
+# Options for GnuPG
+# Copyright 1998-2003, 2010 Free Software Foundation, Inc.
+# Copyright 1998-2003, 2010 Werner Koch
+#
+# This file is free software; as a special exception the author gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# Unless you specify which option file to use (with the command line
+# option "--options filename"), GnuPG uses the file ~/.gnupg/gpg.conf
+# by default.
+#
+# An options file can contain any long options which are available in
+# GnuPG. If the first non white space character of a line is a '#',
+# this line is ignored. Empty lines are also ignored.
+#
+# See the gpg man page for a list of options.
+
+
+# If you have more than 1 secret key in your keyring, you may want to
+# uncomment the following option and set your preferred keyid.
+
+#default-key 621CC013
+
+
+# If you do not pass a recipient to gpg, it will ask for one. Using
+# this option you can encrypt to a default key. Key validation will
+# not be done in this case. The second form uses the default key as
+# default recipient.
+
+#default-recipient some-user-id
+#default-recipient-self
+
+
+# Group names may be defined like this:
+# group mynames = paige 0x12345678 joe patti
+#
+# Any time "mynames" is a recipient (-r or --recipient), it will be
+# expanded to the names "paige", "joe", and "patti", and the key ID
+# "0x12345678". Note there is only one level of expansion - you
+# cannot make an group that points to another group. Note also that
+# if there are spaces in the recipient name, this will appear as two
+# recipients. In these cases it is better to use the key ID.
+
+#group mynames = paige 0x12345678 joe patti
+
+
+# GnuPG can automatically locate and retrieve keys as needed using
+# this option. This happens when encrypting to an email address (in
+# the "user@@example.com" form) and there are no keys matching
+# "user@example.com" in the local keyring. This option takes any
+# number mechanisms which are tried in the given order. The default
+# is "--auto-key-locate local" to search for keys only in the local
+# key database. Uncomment the next line to locate a missing key using
+# two DNS based mechanisms.
+
+#auto-key-locate local,pka,dane
+
+
+# Common options for keyserver functions:
+# (Note that the --keyserver option has been moved to dirmngr.conf)
+#
+# include-disabled = when searching, include keys marked as "disabled"
+# on the keyserver (not all keyservers support this).
+#
+# no-include-revoked = when searching, do not include keys marked as
+# "revoked" on the keyserver.
+#
+# verbose = show more information as the keys are fetched.
+# Can be used more than once to increase the amount
+# of information shown.
+#
+# auto-key-retrieve = automatically fetch keys as needed from the keyserver
+# when verifying signatures or when importing keys that
+# have been revoked by a revocation key that is not
+# present on the keyring.
+#
+# no-include-attributes = do not include attribute IDs (aka "photo IDs")
+# when sending keys to the keyserver.
+
+#keyserver-options auto-key-retrieve
+
+
+# Uncomment this line to display photo user IDs in key listings and
+# when a signature from a key with a photo is verified.
+
+#show-photos
+
+
+# Use this program to display photo user IDs
+#
+# %i is expanded to a temporary file that contains the photo.
+# %I is the same as %i, but the file isn't deleted afterwards by GnuPG.
+# %k is expanded to the key ID of the key.
+# %K is expanded to the long OpenPGP key ID of the key.
+# %t is expanded to the extension of the image (e.g. "jpg").
+# %T is expanded to the MIME type of the image (e.g. "image/jpeg").
+# %f is expanded to the fingerprint of the key.
+# %% is %, of course.
+#
+# If %i or %I are not present, then the photo is supplied to the
+# viewer on standard input. If your platform supports it, standard
+# input is the best way to do this as it avoids the time and effort in
+# generating and then cleaning up a secure temp file.
+#
+# The default program is "xloadimage -fork -quiet -title 'KeyID 0x%k' stdin"
+# On Mac OS X and Windows, the default is to use your regular JPEG image
+# viewer.
+#
+# Some other viewers:
+# photo-viewer "qiv %i"
+# photo-viewer "ee %i"
+# photo-viewer "display -title 'KeyID 0x%k'"
+#
+# This one saves a copy of the photo ID in your home directory:
+# photo-viewer "cat > ~/photoid-for-key-%k.%t"
+#
+# Use your MIME handler to view photos:
+# photo-viewer "metamail -q -d -b -c %T -s 'KeyID 0x%k' -f GnuPG"
+
+
+# Because some mailers change lines starting with "From " to ">From "
+# it is good to handle such lines in a special way when creating
+# cleartext signatures; all other PGP versions do it this way too.
+# To enable full OpenPGP compliance you may want to use this option.
+
+#no-escape-from-lines
+
+
+# Uncomment the following option to get rid of the copyright notice
+
+#no-greeting
+
+default-key 2FC78504681F69B0
+
+keyserver hkp://pool.sks-keyservers.net
+use-agent
+group Friends = DB3DB428A6E2D6DFDAC4531369C6F5CF9FB85A52
diff --git a/gtk3.ini b/gtk3.ini
new file mode 100644
index 00000000..527a4f68
--- /dev/null
+++ b/gtk3.ini
@@ -0,0 +1,15 @@
+[Settings]
+gtk-theme-name=Orchis-dark-compact
+gtk-icon-theme-name=Adwaita
+gtk-font-name=Sans 10
+gtk-cursor-theme-size=0
+gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
+gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
+gtk-button-images=0
+gtk-menu-images=0
+gtk-enable-event-sounds=1
+gtk-enable-input-feedback-sounds=1
+gtk-xft-antialias=1
+gtk-xft-hinting=1
+gtk-xft-hintstyle=hintfull
+gtk-xft-rgba=rgb
diff --git a/home-configuration.scm b/home-configuration.scm
new file mode 100644
index 00000000..bd82d32b
--- /dev/null
+++ b/home-configuration.scm
@@ -0,0 +1,231 @@
+;; This "home-environment" file can be passed to 'guix home reconfigure'
+;; to reproduce the content of your profile. This is "symbolic": it only
+;; specifies package names. To reproduce the exact same profile, you also
+;; need to capture the channels being used, as returned by "guix describe".
+;; See the "Replicating Guix" section in the manual.
+
+;; See also, for some tips:
+;; https://github.com/alezost/shepherd-config/blob/master/init.scm
+
+;; TODO: Move from Xorg/i3 to Wayland/sway.
+;; TODO: Theme stuff using https://github.com/catppuccin -- needs
+;; integration into config files. Can I do something fancy using
+;; `computed-file' to combine catppuccin-provided configs with my own,
+;; e.g. for kitty and rofi?
+;; Integrate upstream (ctp) configs into ~/guix-home using git submodules?
+;; https://github.com/catppuccin/rofi
+;; https://github.com/catppuccin/obs
+;; https://github.com/catppuccin/waybar
+;; https://github.com/catppuccin/insomnia
+;; https://github.com/catppuccin/kitty
+
+(use-modules (gnu home)
+ (gnu home services)
+ (gnu home services desktop)
+ (gnu home services shells)
+ (gnu home services shepherd)
+ (gnu packages)
+ (gnu services)
+ (gnu services shepherd)
+ (guix gexp))
+
+(define* (package-binary specification #:optional (binary specification))
+ "Get the path of BINARY inside the package referred to by SPECIFICATION."
+ (file-append (specification->package specification) "/bin/" binary))
+
+(home-environment
+ ;; Below is the list of packages that will show up in your
+ ;; Home profile, under ~/.guix-home/profile.
+ (packages
+ (cons*
+ ;; Install only bind-utils like dig, not the full suite.
+ (list (specification->package "bind") "utils")
+ (specifications->packages
+ '(;; CLI tools
+ "dos2unix" "dropbear" "emacs" "emacs-use-package" "file" "git"
+ "imagemagick" "lesspipe" "nvme-cli" "openssh" "powertop"
+ "python" "rsync" "sbcl" "smartmontools" "source-highlight" "tk"
+ "tlp" "tmux" "tree" "unzip" "zip"
+ ;; Shell
+ "zsh" "zsh-autosuggestions" "zsh-syntax-highlighting" "zsh-autopair"
+ ;; i3 and Xorg. i3 itself must be installed system-wide for gdm to pick it up.
+ ;; acpilight is a drop-in xbacklight replacement, as xbacklight doesn't work on my system.
+ "acpilight" "i3status" "dunst" "rofi" "rofi-pass" "hsetroot"
+ "xdot" "xclip" "xdotool" "xdpyinfo" "xev" "xfd" "xfontsel"
+ "xinput" "xkill" "xprop" "xrandr" "xrdb" "xsel" "xwininfo"
+ ;; GUI programs
+ "arandr" "gnupg" "pinentry-rofi" "icecat" "kitty" "nheko"
+ "neomutt" "password-store"
+ "gnome-keyring" ; nheko needs gnome-keyring to store secrets over dbus (kwallet doesn't do dbus).
+ "geoclue" ; for redshift
+ ;; Fonts
+ "font-libertinus"
+ "font-inconsolata" "font-fira-sans" "font-fira-code"
+ ;; Monospace fonts to try out!
+ "font-mononoki" ; https://madmalik.github.io/mononoki/
+ "font-victor-mono" ; https://rubjo.github.io/victor-mono/
+ ;; Theming
+ "orchis-theme" "hicolor-icon-theme"))))
+
+ ;; Below is the list of Home services. To search for available
+ ;; services, run 'guix home search KEYWORD' in a terminal.
+ (services
+ (list
+ ;; TODO: xrdb -merge ~/.Xdefaults && xrdb -merge ~/.Xresources
+
+ (service home-redshift-service-type
+ (home-redshift-configuration
+ ;; See info '(guix)Desktop Home Services'.
+ (location-provider 'manual)
+ ;; Approximate location
+ (latitude 46.0)
+ (longitude 6.0)
+ ;; (location-provider 'geoclue2) ; currently waits forever for a location -- not sure why geoclue doesn't work
+ ;; (daytime-temperature 6500) ; default 6500
+ ;; (nighttime-temperature 4500) ; default 4500
+ (daytime-brightness 1.0)
+ (nighttime-brightness 0.7)
+ (extra-content "fade=0"))) ; with fade=1, restarting redshift causes flickering for a few secs
+
+ (simple-service
+ 'user-services home-shepherd-service-type
+ (list
+ (shepherd-service
+ (documentation "User Emacs daemon; connect using emacsclient.")
+ (provision '(emacs))
+ (start #~(make-forkexec-constructor
+ (list #$(package-binary "emacs") "--fg-daemon")))
+ (stop #~(make-kill-destructor)))
+ (shepherd-service
+ (documentation "User GPG agent daemon.")
+ (provision '(gpg-agent))
+ (start #~(lambda _
+ (invoke #$(package-binary "gnupg" "gpg-agent")
+ "--daemon" "--no-detach")))
+ (stop #~(lambda _
+ (invoke "gpg-connect-agent" "killagent" "/bye"))))))
+
+ (service home-xdg-configuration-files-service-type
+ `(;; All alibuild needs is an empty file.
+ ("alibuild/disable-analytics" ,(plain-file "alibuild-disable-analytics" ""))
+ ("git/config" ,(local-file "gitconfig"))
+ ("gtk-3.0/settings.ini" ,(local-file "gtk3.ini"))
+ ("htop/htoprc" ,(local-file "htoprc"))
+ ("i3/config" ,(local-file "i3.conf"))
+ ("i3status/config" ,(local-file "i3status.conf"))
+ ("kitty/kitty.conf"
+ ,(text-file* "kitty.conf"
+ (local-file "kitty.conf")
+ (local-file "catppuccin/kitty/mocha.conf")))
+ ("lesskey" ,(local-file "lesskey"))))
+
+ (service home-files-service-type
+ `(;; https://sw.kovidgoyal.net/kitty/kittens/diff/
+ (".local/bin/kdiff"
+ ,(program-file "kdiff" #~(apply execl #$(package-binary "kitty")
+ "+kitten" "diff" (cdr (command-line)))))
+ ;; GnuPG config files must be in ~/.local/share/gnupg, not ~/.config,
+ ;; so we can't use `home-xdg-configuration-files-service-type'.
+ (".local/share/gnupg/gpg.conf" ,(local-file "gpg.conf"))
+ (".local/share/gnupg/gpg-agent.conf"
+ ;; We need to use #$output for `computed-file' to work.
+ ;; Of course this isn't documented anywhere!
+ ,(computed-file "gpg-agent.conf" #~(call-with-output-file #$output
+ (lambda (port)
+ (format port "\
+pinentry-program ~a
+# Needed if spawning lots of parallel gpg --decrypt processes. https://dev.gnupg.org/T3530
+auto-expand-secmem
+" #$(package-binary "pinentry-rofi"))))))))
+
+ (service home-zsh-service-type
+ (home-zsh-configuration
+ (zshrc (list (local-file "zshrc")
+ (local-file "prompt.zsh")))))
+
+ (simple-service
+ 'env-vars home-environment-variables-service-type
+ ;; The `home-xdg-base-directories' service (enabled by default) sets $XDG_* variables for us.
+ `(("GUIX_PACKAGE_PATH" . "$HOME/packages/guix")
+ ;; ("GUILE_LOAD_PATH" .
+ ;; "$XDG_CONFIG_HOME/guix/current/share/guile/site/3.0${GUILE_LOAD_PATH:+:}$GUILE_LOAD_PATH")
+ ;; ("GUILE_LOAD_COMPILED_PATH" .
+ ;; ,(string-append
+ ;; "$XDG_CONFIG_HOME/guix/current/lib/guile/3.0/site-ccache:"
+ ;; "$XDG_CONFIG_HOME/guix/current/share/guile/site/3.0"
+ ;; "${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH"))
+
+ ;; Auto-compilation is annoying and creates a bunch of files that are never cleaned up.
+ ("GUILE_AUTO_COMPILE" . "0")
+
+ ("EDITOR" . "emacsclient -qc")
+ ("TERMINAL" . "kitty")
+ ("PAGER" . "less")
+ ;; Guix force-overrides $LESS by default, so force-force it to do what I want instead.
+ ("GUIX_PAGER" . "env -u LESS less --ignore-case --quit-if-one-screen --RAW-CONTROL-CHARS --LONG-PROMPT --chop-long-lines")
+
+ ;; Shell history -- primarily for zsh, but Emacs' eshell uses this too
+ ("HISTSIZE" . "10000000")
+
+ ("NVIM_TUI_ENABLE_CURSOR_SHAPE" . "1")
+ ("LEDGER_FILE" . "$HOME/sync/ledger/ledger.journal")
+ ("GTAGSLABEL" . "pygments")
+
+ ;; ("GTK3_MODULES" . "$GTK3_MODULES${GTK3_MODULES:+:}libplotinus")
+
+ ;; Disable at-spi-dbus-launcher accessibility service.
+ ("NO_AT_BRIDGE" . "1")
+
+ ;; For appmenu/global menu in Java applications.
+ ;; https://gitlab.com/vala-panel-project/vala-panel-appmenu#experimental-features
+ ("JAYATANA_FORCE" . "1")
+ ;; Appmenu; GTK look-and-feel; XDG compliance in Java
+ ;; https://wiki.manjaro.org/index.php?title=Set_all_Java_apps_to_use_GTK%2B_font_%26_theme_settings
+ ;; TODO: install jayatana and add "-javaagent:/usr/share/java/jayatanaag.jar" option
+ ("_JAVA_OPTIONS" .
+ ,(string-append
+ "$_JAVA_OPTIONS${_JAVA_OPTIONS:+ }-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true "
+ "-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel "
+ "-Dswing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel "
+ "-Djava.util.prefs.userRoot=$XDG_CONFIG_HOME/java"))
+
+ ;; For programs from kde-servicemenus-pdf.
+ ("LANGUAGE" . "en")
+
+ ;; Smooth trackpad scrolling in Firefox.
+ ;; https://wiki.archlinux.org/index.php/Firefox/Tweaks#Pixel-perfect_trackpad_scrolling
+ ("MOZ_USE_XINPUT2" . "1")
+
+ ;; XDG basedir spec compliance for various programs
+ ;; See: https://wiki.archlinux.org/index.php/XDG_Base_Directory for a list of programs
+ ("ANDROID_EMULATOR_HOME" . "$XDG_DATA_HOME/android-emulator")
+ ("ASPELL_CONF" . "per-conf $XDG_CONFIG_HOME/aspell/aspell.conf; home-dir $XDG_DATA_HOME/aspell")
+ ("BUP_DIR" . "$XDG_DATA_HOME/bup")
+ ("CARGO_HOME" . "$XDG_DATA_HOME/cargo")
+ ("DSHGROUP_PATH" . "$XDG_DATA_HOME/dsh/group:/etc/dsh/group")
+ ("ELECTRUMDIR" . "$XDG_DATA_HOME/electrum")
+ ("FG_HOME" . "$XDG_DATA_HOME/fgfs")
+ ("GETIPLAYERUSERPREFS" . "$XDG_DATA_HOME/get_iplayer")
+ ("GNUPGHOME" . "$XDG_DATA_HOME/gnupg")
+ ("GTK2_RC_FILES" . "$XDG_CONFIG_HOME/gtk-2.0/gtkrc")
+ ("ICEAUTHORITY" . "$XDG_CACHE_HOME/ICEauthority")
+ ("INPUTRC" . "$XDG_CONFIG_HOME/readline/inputrc")
+ ("IPYTHONDIR" . "$XDG_CONFIG_HOME/ipython")
+ ("JUPYTER_CONFIG_DIR" . "$XDG_CONFIG_HOME/jupyter")
+ ("NPM_CONFIG_USERCONFIG" . "$XDG_CONFIG_HOME/npm/npmrc")
+ ("PASSWORD_STORE_DIR" . "$XDG_DATA_HOME/password-store")
+ ("PLTUSERHOME" . "$XDG_DATA_HOME/racket")
+ ("PYLINTHOME" . "$XDG_CACHE_HOME/pylint")
+ ("PYLINTRC" . "$XDG_CONFIG_HOME/pylint/pylintrc")
+ ("RECOLL_CONFDIR" . "$XDG_CONFIG_HOME/recoll")
+ ("RLWRAP_HOME" . "$XDG_DATA_HOME/rlwrap")
+ ("STACK_ROOT" . "$XDG_DATA_HOME/stack")
+ ("TMUX_TMPDIR" . "$XDG_RUNTIME_DIR")
+ ("WEECHAT_HOME" . "$XDG_CONFIG_HOME/weechat")
+ ("XCOMPOSECACHE" . "$XDG_CACHE_HOME/X11/XCompose")
+ ("XCOMPOSEFILE" . "$XDG_CONFIG_HOME/X11/XCompose")
+ ("ZDOTDIR" . "$XDG_CONFIG_HOME/zsh")
+ ;; ("ZPLUG_HOME" . "$XDG_DATA_HOME/zplug")
+ ;; KONAN_DATA_DIR=~/.konan by default; grows to multiple GiB.
+ ;; https://discuss.kotlinlang.org/t/change-konan-folder-location/18309
+ ("KONAN_DATA_DIR" . "$XDG_CACHE_HOME/konan"))))))
diff --git a/htoprc b/htoprc
new file mode 100644
index 00000000..d20d6347
--- /dev/null
+++ b/htoprc
@@ -0,0 +1,59 @@
+# Beware! This file is rewritten by htop when settings are changed in the interface.
+# The parser is also very primitive, and not human-friendly.
+htop_version=3.2.0
+config_reader_min_version=3
+fields=0 48 17 18 38 39 40 2 46 47 49 1
+hide_kernel_threads=1
+hide_userland_threads=1
+shadow_other_users=0
+show_thread_names=1
+show_program_path=0
+highlight_base_name=1
+highlight_deleted_exe=1
+highlight_megabytes=1
+highlight_threads=1
+highlight_changes=0
+highlight_changes_delay_secs=5
+find_comm_in_cmdline=1
+strip_exe_from_cmdline=1
+show_merged_command=0
+header_margin=1
+screen_tabs=0
+detailed_cpu_time=1
+cpu_count_from_one=0
+show_cpu_usage=1
+show_cpu_frequency=1
+update_process_names=1
+account_guest_in_cpu_meter=0
+color_scheme=0
+enable_mouse=1
+delay=15
+hide_function_bar=1
+header_layout=two_50_50
+column_meters_0=LeftCPUs Memory Swap
+column_meter_modes_0=1 1 1
+column_meters_1=RightCPUs Tasks LoadAverage Uptime
+column_meter_modes_1=1 2 2 2
+tree_view=1
+sort_key=46
+tree_sort_key=0
+sort_direction=1
+tree_sort_direction=1
+tree_view_always_by_pid=1
+all_branches_collapsed=0
+screen:Main=PID USER PRIORITY NICE M_VIRT M_RESIDENT M_SHARE STATE PERCENT_CPU PERCENT_MEM TIME Command
+.sort_key=PERCENT_CPU
+.tree_sort_key=PID
+.tree_view=1
+.tree_view_always_by_pid=1
+.sort_direction=1
+.tree_sort_direction=1
+.all_branches_collapsed=0
+screen:I/O=PID USER EXE IO_PRIORITY IO_RATE IO_READ_RATE IO_WRITE_RATE
+.sort_key=IO_RATE
+.tree_sort_key=PID
+.tree_view=0
+.tree_view_always_by_pid=0
+.sort_direction=-1
+.tree_sort_direction=1
+.all_branches_collapsed=0
diff --git a/i3.conf b/i3.conf
new file mode 100644
index 00000000..c054c889
--- /dev/null
+++ b/i3.conf
@@ -0,0 +1,253 @@
+#
+# i3 config file (v4)
+#
+# Please see http://i3wm.org/docs/userguide.html for a complete reference!
+# Use xev to see keycodes for special keys.
+
+# Appearance and Styling {{{
+set_from_resource $font i3wm.font pango:Fira Sans 10
+set_from_resource $c_fg i3wm.fg #cdd6f4
+set_from_resource $c_bg i3wm.bg #181825
+set_from_resource $c_active i3wm.active #585b70
+set_from_resource $c_inactive i3wm.inactive #b4befe
+set_from_resource $c_urgent i3wm.urgent #f9e2af
+
+# Font for window titles. Will also be used by the bar unless a different font
+# is used in the bar {} block below.
+font $font
+
+title_align center
+default_border pixel 3
+default_floating_border pixel 3
+hide_edge_borders smart
+gaps inner 15
+gaps outer 0
+smart_gaps on
+
+# class border background text indicator child_border
+client.focused $c_active $c_active $c_fg $c_active $c_active
+client.focused_inactive $c_bg $c_bg $c_fg $c_bg $c_bg
+client.unfocused $c_bg $c_bg $c_inactive $c_bg $c_bg
+client.urgent $c_urgent $c_urgent $c_fg $c_urgent $c_urgent
+client.placeholder $c_bg $c_bg $c_inactive $c_bg $c_bg
+client.background $c_bg
+# }}}
+
+# Basic Configuration {{{
+# use the Super key as $mod
+set $mod Mod4
+
+# Use Mouse+$mod to drag floating windows to their wanted position
+floating_modifier $mod
+
+# using plasma's logout screen instead of i3's
+bindsym $mod+shift+e exec --no-startup-id qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout -1 -1 -1
+
+# essential applications
+bindsym $mod+Return exec i3-sensible-terminal
+bindsym $mod+i exec icecat --new-window
+bindsym $mod+shift+i exec icecat --new-tab "$(xclip -out)"
+bindsym $mod+e exec $EDITOR
+bindsym $mod+slash exec dolphin --new-window
+bindsym $mod+semicolon exec --no-startup-id nheko
+# bindsym $mod+z exec konsole --fullscreen --profile rga-fzf
+bindsym $mod+y exec --no-startup-id connect-headphones.sh connect
+bindsym $mod+shift+y exec --no-startup-id connect-headphones.sh disconnect
+
+# kill focused window
+bindsym $mod+shift+q kill
+
+# rofi menus
+bindsym $mod+q exec rofi -show combi
+bindsym $mod+d exec --no-startup-id krunner
+bindsym $mod+p exec passmenu --type-all
+bindsym $mod+shift+p exec passmenu --type-pass
+bindsym $mod+o exec passmenu --type-otp
+bindsym $mod+comma exec rofi-colors.sh
+bindsym $mod+shift+Return exec rofi -show ssh
+# }}}
+
+# Basic Movement {{{
+# change focus
+bindsym $mod+h focus left
+bindsym $mod+j focus down
+bindsym $mod+k focus up
+bindsym $mod+l focus right
+bindsym $mod+Left focus left
+bindsym $mod+Down focus down
+bindsym $mod+Up focus up
+bindsym $mod+Right focus right
+
+# move focused window
+bindsym $mod+shift+h move left
+bindsym $mod+shift+j move down
+bindsym $mod+shift+k move up
+bindsym $mod+shift+l move right
+bindsym $mod+shift+Left move left
+bindsym $mod+shift+Down move down
+bindsym $mod+shift+Up move up
+bindsym $mod+shift+Right move right
+
+bindsym $mod+a focus parent
+bindsym $mod+shift+a focus child
+# }}}
+
+# Layout {{{
+bindsym $mod+b split h
+bindsym $mod+v split v
+
+# enter fullscreen mode for the focused container
+bindsym $mod+f fullscreen toggle
+bindsym $mod+shift+f floating enable, resize set 1920 1080, move position 0 0
+
+# change container layout (stacked, tabbed, toggle split)
+bindsym $mod+s layout stacking
+bindsym $mod+w layout tabbed
+bindsym $mod+x layout toggle split
+
+bindsym $mod+shift+space floating toggle
+# change focus between tiling / floating windows
+bindsym $mod+space focus mode_toggle
+
+# scratchpad
+bindsym $mod+numbersign scratchpad show
+bindsym $mod+shift+numbersign move to scratchpad
+bindsym $mod+apostrophe sticky disable, floating disable
+bindsym $mod+shift+apostrophe sticky enable, floating enable
+
+# move workspaces
+bindsym $mod+shift+comma move workspace to output left
+bindsym $mod+shift+period move workspace to output right
+# }}}
+
+# Default Workspaces {{{
+# switch to workspace
+bindsym $mod+Escape workspace back_and_forth
+bindsym $mod+1 workspace 1
+bindsym $mod+2 workspace 2
+bindsym $mod+3 workspace 3
+bindsym $mod+4 workspace 4
+bindsym $mod+5 workspace 5
+bindsym $mod+6 workspace 6
+bindsym $mod+7 workspace 7
+bindsym $mod+8 workspace 8
+bindsym $mod+9 workspace 9
+bindsym $mod+0 workspace 10
+bindsym $mod+parenleft workspace prev
+bindsym $mod+parenright workspace next
+
+# move focused container to workspace
+bindsym $mod+shift+Escape move container to workspace back_and_forth
+bindsym $mod+shift+1 move container to workspace 1
+bindsym $mod+shift+2 move container to workspace 2
+bindsym $mod+shift+3 move container to workspace 3
+bindsym $mod+shift+4 move container to workspace 4
+bindsym $mod+shift+5 move container to workspace 5
+bindsym $mod+shift+6 move container to workspace 6
+bindsym $mod+shift+7 move container to workspace 7
+bindsym $mod+shift+8 move container to workspace 8
+bindsym $mod+shift+9 move container to workspace 9
+bindsym $mod+shift+0 move container to workspace 10
+bindsym $mod+shift+parenleft move container to workspace prev
+bindsym $mod+shift+parenright move container to workspace next
+# }}}
+
+# Custom Workspaces {{{
+set $ws_terminal 0:>_
+bindsym $mod+grave workspace "$ws_terminal"
+bindsym $mod+shift+grave move container to workspace "$ws_terminal"
+
+set $ws_coding 50:🖊️
+bindsym $mod+c workspace "$ws_coding"
+bindsym $mod+shift+c move container to workspace "$ws_coding"
+
+set $ws_games 60:🎮
+bindsym $mod+g workspace "$ws_games"
+bindsym $mod+shift+g move container to workspace "$ws_games"
+
+set $ws_music 80:🎵
+bindsym $mod+u workspace "$ws_music"
+bindsym $mod+shift+u move container to workspace "$ws_music"
+
+set $ws_messaging 90:💬
+bindsym $mod+m workspace "$ws_messaging"
+bindsym $mod+shift+m move container to workspace "$ws_messaging"
+
+assign [class="^Franz$"] "$ws_messaging"
+assign [window_role="^weechat$"] "$ws_messaging"
+assign [window_role="^mutt$"] "$ws_messaging"
+assign [class="^evolution-initial$"] "$ws_messaging"
+assign [class="^kontact$"] "$ws_messaging"
+
+# NOTE: no_focus will also be ignored for the first window on a workspace as
+# there shouldn’t be a reason to not focus the window in this case. This allows
+# for better usability in combination with workspace_layout. (From i3 docs)
+#no_focus [class="^Franz$"]
+#no_focus [window_role="^weechat$"]
+#no_focus [window_role="^mutt$"]
+#no_focus [class="^evolution-initial$"]
+
+## PlayOnLinux
+for_window [title="PlayOnLinux"] floating enable
+
+## Plasma/KDE: https://ryanlue.com/posts/2019-06-13-kde-i3
+# Don’t treat Plasma pop-ups as full-sized windows
+for_window [class="plasmashell"] floating enable
+# Don’t spawn an empty window for the Plasma Desktop
+for_window [title="Desktop — Plasma"] move scratchpad
+# Don’t let notifications and non-interactive pop-up windows steal focus
+#no_focus [class="plasmashell" window_type="on_screen_display"]
+# https://github.com/heckelson/i3-and-kde-plasma
+# Move notifications to top-right corner.
+#for_window [class="plasmashell" window_type="notification"] move up 400, move right 750, no_focus
+# Notifications appear in the centre of the screen. According to
+# https://old.reddit.com/r/i3wm/comments/bw1yfs/kde_notifications_appearing_in_the_centre_of/,
+# setting notifications to appear in the top-left corner gets placement right.
+no_focus [class="plasmashell" window_type="notification"]
+
+for_window [class="^Pyneedle$"] floating enable
+for_window [instance="^emacs-initial$"] floating enable
+for_window [class="^Spotify$"] move container to workspace "$ws_music"
+for_window [class="^Pidgin$"] move container to workspace "$ws_messaging"
+# }}}
+
+# Modes {{{
+mode "resize" {
+ bindsym h resize shrink width 10 px or 10 ppt
+ bindsym j resize grow height 10 px or 10 ppt
+ bindsym k resize shrink height 10 px or 10 ppt
+ bindsym l resize grow width 10 px or 10 ppt
+
+ bindsym shift+h resize shrink width 5 px or 5 ppt
+ bindsym shift+j resize grow height 5 px or 5 ppt
+ bindsym shift+k resize shrink height 5 px or 5 ppt
+ bindsym shift+l resize grow width 5 px or 5 ppt
+
+ bindsym left resize shrink width 10 px or 10 ppt
+ bindsym down resize grow height 10 px or 10 ppt
+ bindsym up resize shrink height 10 px or 10 ppt
+ bindsym right resize grow width 10 px or 10 ppt
+
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
+bindsym $mod+r mode "resize"
+# }}}
+
+# Autostart Applications {{{
+#exec --no-startup-id /usr/bin/systemctl --no-block --user start display-manager-i3.service #xsession.target
+exec --no-startup-id ~/.config/X11/xinitrc
+# }}}
+
+bar {
+ status_command i3status
+ #mode hide # only show up when pressing $mod
+ modifier $mod
+ position bottom
+ tray_output primary
+ # Fitts's law
+ tray_padding 0
+ workspace_min_width 20 px
+ strip_workspace_numbers yes
+ binding_mode_indicator yes
+}
diff --git a/i3status.conf b/i3status.conf
new file mode 100644
index 00000000..571c5d0f
--- /dev/null
+++ b/i3status.conf
@@ -0,0 +1,57 @@
+# See i3status(1).
+
+general {
+ colors = true
+ # A short interval is fine as i3bar suspends the i3status process
+ # when the bar isn't being shown.
+ interval = 1
+}
+
+order += "wireless wlp3s0"
+wireless wlp3s0 {
+ format_up = "W (%quality @ %essid, %bitrate / %frequency) %ip"
+ format_down = "W down"
+ format_quality = "%03d%s"
+}
+order += "ethernet enp2s0f1"
+ethernet enp2s0f1 {
+ format_up = "E (%speed) %ip"
+ format_down = "E down"
+}
+
+order += "battery 0"
+battery 0 {
+ format = "%status %percentage %remaining %emptytime"
+ format_down = "no battery"
+ status_chr = "charging"
+ status_bat = "battery"
+ status_unk = "unknown"
+ status_full = "full"
+ path = "/sys/class/power_supply/BAT%d/uevent"
+ low_threshold = 25
+}
+
+order += "cpu_usage"
+
+order += "cpu_temperature 0"
+cpu_temperature 0 {
+ format = "%degrees °C"
+}
+
+order += "memory"
+memory {
+ format = "%used"
+ memory_used_method = "classical" # total memory - free - buffers - cache
+}
+
+order += "volume master"
+volume master {
+ format = "♪ %volume"
+ format_muted = "♪ ∅"
+ device = "pulse"
+}
+
+order += "tztime local"
+tztime local {
+ format = "%a %-d %b, %H:%M"
+}
diff --git a/kitty.conf b/kitty.conf
new file mode 100644
index 00000000..8032ad40
--- /dev/null
+++ b/kitty.conf
@@ -0,0 +1,1339 @@
+# vim:fileencoding=utf-8:ft=conf:foldmethod=marker
+
+#: Fonts {{{
+
+#: kitty has very powerful font management. You can configure
+#: individual font faces and even specify special fonts for particular
+#: characters.
+
+# font_family monospace
+# bold_font auto
+# italic_font auto
+# bold_italic_font auto
+
+#: You can specify different fonts for the bold/italic/bold-italic
+#: variants. To get a full list of supported fonts use the `kitty
+#: list-fonts` command. By default they are derived automatically, by
+#: the OSes font system. Setting them manually is useful for font
+#: families that have many weight variants like Book, Medium, Thick,
+#: etc. For example::
+
+#: font_family Operator Mono Book
+#: bold_font Operator Mono Medium
+#: italic_font Operator Mono Book Italic
+#: bold_italic_font Operator Mono Medium Italic
+
+font_size 10.0
+
+#: Font size (in pts)
+
+# force_ltr no
+
+#: kitty does not support BIDI (bidirectional text), however, for RTL
+#: scripts, words are automatically displayed in RTL. That is to say,
+#: in an RTL script, the words "HELLO WORLD" display in kitty as
+#: "WORLD HELLO", and if you try to select a substring of an RTL-
+#: shaped string, you will get the character that would be there had
+#: the the string been LTR. For example, assuming the Hebrew word
+#: ירושלים, selecting the character that on the screen appears to be ם
+#: actually writes into the selection buffer the character י.
+
+#: kitty's default behavior is useful in conjunction with a filter to
+#: reverse the word order, however, if you wish to manipulate RTL
+#: glyphs, it can be very challenging to work with, so this option is
+#: provided to turn it off. Furthermore, this option can be used with
+#: the command line program GNU FriBidi
+#: <https://github.com/fribidi/fribidi#executable> to get BIDI
+#: support, because it will force kitty to always treat the text as
+#: LTR, which FriBidi expects for terminals.
+
+# adjust_line_height 0
+# adjust_column_width 0
+
+#: Change the size of each character cell kitty renders. You can use
+#: either numbers, which are interpreted as pixels or percentages
+#: (number followed by %), which are interpreted as percentages of the
+#: unmodified values. You can use negative pixels or percentages less
+#: than 100% to reduce sizes (but this might cause rendering
+#: artifacts).
+
+# symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols
+
+#: Map the specified unicode codepoints to a particular font. Useful
+#: if you need special rendering for some symbols, such as for
+#: Powerline. Avoids the need for patched fonts. Each unicode code
+#: point is specified in the form U+<code point in hexadecimal>. You
+#: can specify multiple code points, separated by commas and ranges
+#: separated by hyphens. symbol_map itself can be specified multiple
+#: times. Syntax is::
+
+#: symbol_map codepoints Font Family Name
+
+# disable_ligatures never
+
+#: Choose how you want to handle multi-character ligatures. The
+#: default is to always render them. You can tell kitty to not render
+#: them when the cursor is over them by using cursor to make editing
+#: easier, or have kitty never render them at all by using always, if
+#: you don't like them. The ligature strategy can be set per-window
+#: either using the kitty remote control facility or by defining
+#: shortcuts for it in kitty.conf, for example::
+
+#: map alt+1 disable_ligatures_in active always
+#: map alt+2 disable_ligatures_in all never
+#: map alt+3 disable_ligatures_in tab cursor
+
+#: Note that this refers to programming ligatures, typically
+#: implemented using the calt OpenType feature. For disabling general
+#: ligatures, use the font_features setting.
+
+# font_features none
+
+#: Choose exactly which OpenType features to enable or disable. This
+#: is useful as some fonts might have features worthwhile in a
+#: terminal. For example, Fira Code Retina includes a discretionary
+#: feature, zero, which in that font changes the appearance of the
+#: zero (0), to make it more easily distinguishable from Ø. Fira Code
+#: Retina also includes other discretionary features known as
+#: Stylistic Sets which have the tags ss01 through ss20.
+
+#: Note that this code is indexed by PostScript name, and not the font
+#: family. This allows you to define very precise feature settings;
+#: e.g. you can disable a feature in the italic font but not in the
+#: regular font.
+
+#: On Linux, these are read from the FontConfig database first and
+#: then this, setting is applied, so they can be configured in a
+#: single, central place.
+
+#: To get the PostScript name for a font, use kitty + list-fonts
+#: --psnames:
+
+#: .. code-block:: sh
+
+#: $ kitty + list-fonts --psnames | grep Fira
+#: Fira Code
+#: Fira Code Bold (FiraCode-Bold)
+#: Fira Code Light (FiraCode-Light)
+#: Fira Code Medium (FiraCode-Medium)
+#: Fira Code Regular (FiraCode-Regular)
+#: Fira Code Retina (FiraCode-Retina)
+
+#: The part in brackets is the PostScript name.
+
+#: Enable alternate zero and oldstyle numerals::
+
+#: font_features FiraCode-Retina +zero +onum
+
+#: Enable only alternate zero::
+
+#: font_features FiraCode-Retina +zero
+
+#: Disable the normal ligatures, but keep the calt feature which (in
+#: this font) breaks up monotony::
+
+#: font_features TT2020StyleB-Regular -liga +calt
+
+#: In conjunction with force_ltr, you may want to disable Arabic
+#: shaping entirely, and only look at their isolated forms if they
+#: show up in a document. You can do this with e.g.::
+
+#: font_features UnifontMedium +isol -medi -fina -init
+
+# box_drawing_scale 0.001, 1, 1.5, 2
+
+#: Change the sizes of the lines used for the box drawing unicode
+#: characters These values are in pts. They will be scaled by the
+#: monitor DPI to arrive at a pixel value. There must be four values
+#: corresponding to thin, normal, thick, and very thick lines.
+
+#: }}}
+
+#: Cursor customization {{{
+
+# cursor #cccccc
+
+#: Default cursor color
+
+# cursor_text_color #111111
+
+#: Choose the color of text under the cursor. If you want it rendered
+#: with the background color of the cell underneath instead, use the
+#: special keyword: background
+
+# cursor_shape block
+
+#: The cursor shape can be one of (block, beam, underline)
+
+# cursor_beam_thickness 1.5
+
+#: Defines the thickness of the beam cursor (in pts)
+
+# cursor_underline_thickness 2.0
+
+#: Defines the thickness of the underline cursor (in pts)
+
+# cursor_blink_interval -1
+
+#: The interval (in seconds) at which to blink the cursor. Set to zero
+#: to disable blinking. Negative values mean use system default. Note
+#: that numbers smaller than repaint_delay will be limited to
+#: repaint_delay.
+
+# cursor_stop_blinking_after 15.0
+
+#: Stop blinking cursor after the specified number of seconds of
+#: keyboard inactivity. Set to zero to never stop blinking.
+
+#: }}}
+
+#: Scrollback {{{
+
+scrollback_lines 100000
+
+#: Number of lines of history to keep in memory for scrolling back.
+#: Memory is allocated on demand. Negative numbers are (effectively)
+#: infinite scrollback. Note that using very large scrollback is not
+#: recommended as it can slow down performance of the terminal and
+#: also use large amounts of RAM. Instead, consider using
+#: scrollback_pager_history_size.
+
+# scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER
+
+#: Program with which to view scrollback in a new window. The
+#: scrollback buffer is passed as STDIN to this program. If you change
+#: it, make sure the program you use can handle ANSI escape sequences
+#: for colors and text formatting. INPUT_LINE_NUMBER in the command
+#: line above will be replaced by an integer representing which line
+#: should be at the top of the screen. Similarly CURSOR_LINE and
+#: CURSOR_COLUMN will be replaced by the current cursor position.
+
+scrollback_pager_history_size 1024
+
+#: Separate scrollback history size, used only for browsing the
+#: scrollback buffer (in MB). This separate buffer is not available
+#: for interactive scrolling but will be piped to the pager program
+#: when viewing scrollback buffer in a separate window. The current
+#: implementation stores the data in UTF-8, so approximatively 10000
+#: lines per megabyte at 100 chars per line, for pure ASCII text,
+#: unformatted text. A value of zero or less disables this feature.
+#: The maximum allowed size is 4GB.
+
+scrollback_fill_enlarged_window yes
+
+#: Fill new space with lines from the scrollback buffer after
+#: enlarging a window.
+
+# wheel_scroll_multiplier 5.0
+
+#: Modify the amount scrolled by the mouse wheel. Note this is only
+#: used for low precision scrolling devices, not for high precision
+#: scrolling on platforms such as macOS and Wayland. Use negative
+#: numbers to change scroll direction.
+
+# touch_scroll_multiplier 1.0
+
+#: Modify the amount scrolled by a touchpad. Note this is only used
+#: for high precision scrolling devices on platforms such as macOS and
+#: Wayland. Use negative numbers to change scroll direction.
+
+#: }}}
+
+#: Mouse {{{
+
+# mouse_hide_wait 3.0
+
+#: Hide mouse cursor after the specified number of seconds of the
+#: mouse not being used. Set to zero to disable mouse cursor hiding.
+#: Set to a negative value to hide the mouse cursor immediately when
+#: typing text. Disabled by default on macOS as getting it to work
+#: robustly with the ever-changing sea of bugs that is Cocoa is too
+#: much effort.
+
+# url_color #0087bd
+# url_style curly
+
+#: The color and style for highlighting URLs on mouse-over. url_style
+#: can be one of: none, single, double, curly
+
+# open_url_modifiers kitty_mod
+
+#: The modifier keys to press when clicking with the mouse on URLs to
+#: open the URL
+
+# open_url_with default
+
+#: The program with which to open URLs that are clicked on. The
+#: special value default means to use the operating system's default
+#: URL handler.
+
+# url_prefixes http https file ftp gemini irc gopher mailto news git
+
+#: The set of URL prefixes to look for when detecting a URL under the
+#: mouse cursor.
+
+# detect_urls yes
+
+#: Detect URLs under the mouse. Detected URLs are highlighted with an
+#: underline and the mouse cursor becomes a hand over them. Even if
+#: this option is disabled, URLs are still clickable.
+
+# copy_on_select no
+
+#: Copy to clipboard or a private buffer on select. With this set to
+#: clipboard, simply selecting text with the mouse will cause the text
+#: to be copied to clipboard. Useful on platforms such as macOS that
+#: do not have the concept of primary selections. You can instead
+#: specify a name such as a1 to copy to a private kitty buffer
+#: instead. Map a shortcut with the paste_from_buffer action to paste
+#: from this private buffer. For example::
+
+#: map cmd+shift+v paste_from_buffer a1
+
+#: Note that copying to the clipboard is a security risk, as all
+#: programs, including websites open in your browser can read the
+#: contents of the system clipboard.
+
+# strip_trailing_spaces never
+
+#: Remove spaces at the end of lines when copying to clipboard. A
+#: value of smart will do it when using normal selections, but not
+#: rectangle selections. always will always do it.
+
+# rectangle_select_modifiers ctrl+alt
+
+#: The modifiers to use rectangular selection (i.e. to select text in
+#: a rectangular block with the mouse)
+
+# terminal_select_modifiers shift
+
+#: The modifiers to override mouse selection even when a terminal
+#: application has grabbed the mouse
+
+# select_by_word_characters @-./_~?&=%+#
+
+#: Characters considered part of a word when double clicking. In
+#: addition to these characters any character that is marked as an
+#: alphanumeric character in the unicode database will be matched.
+
+# click_interval -1.0
+
+#: The interval between successive clicks to detect double/triple
+#: clicks (in seconds). Negative numbers will use the system default
+#: instead, if available, or fallback to 0.5.
+
+focus_follows_mouse yes
+
+#: Set the active window to the window under the mouse when moving the
+#: mouse around
+
+# pointer_shape_when_grabbed arrow
+
+#: The shape of the mouse pointer when the program running in the
+#: terminal grabs the mouse. Valid values are: arrow, beam and hand
+
+# default_pointer_shape beam
+
+#: The default shape of the mouse pointer. Valid values are: arrow,
+#: beam and hand
+
+# pointer_shape_when_dragging beam
+
+#: The default shape of the mouse pointer when dragging across text.
+#: Valid values are: arrow, beam and hand
+
+#: }}}
+
+#: Performance tuning {{{
+
+# repaint_delay 10
+
+#: Delay (in milliseconds) between screen updates. Decreasing it,
+#: increases frames-per-second (FPS) at the cost of more CPU usage.
+#: The default value yields ~100 FPS which is more than sufficient for
+#: most uses. Note that to actually achieve 100 FPS you have to either
+#: set sync_to_monitor to no or use a monitor with a high refresh
+#: rate. Also, to minimize latency when there is pending input to be
+#: processed, repaint_delay is ignored.
+
+# input_delay 3
+
+#: Delay (in milliseconds) before input from the program running in
+#: the terminal is processed. Note that decreasing it will increase
+#: responsiveness, but also increase CPU usage and might cause flicker
+#: in full screen programs that redraw the entire screen on each loop,
+#: because kitty is so fast that partial screen updates will be drawn.
+
+# sync_to_monitor yes
+
+#: Sync screen updates to the refresh rate of the monitor. This
+#: prevents tearing (https://en.wikipedia.org/wiki/Screen_tearing)
+#: when scrolling. However, it limits the rendering speed to the
+#: refresh rate of your monitor. With a very high speed mouse/high
+#: keyboard repeat rate, you may notice some slight input latency. If
+#: so, set this to no.
+
+#: }}}
+
+#: Terminal bell {{{
+
+# enable_audio_bell yes
+
+#: Enable/disable the audio bell. Useful in environments that require
+#: silence.
+
+# visual_bell_duration 0.0
+
+#: Visual bell duration. Flash the screen when a bell occurs for the
+#: specified number of seconds. Set to zero to disable.
+
+# window_alert_on_bell yes
+
+#: Request window attention on bell. Makes the dock icon bounce on
+#: macOS or the taskbar flash on linux.
+
+# bell_on_tab yes
+
+#: Show a bell symbol on the tab if a bell occurs in one of the
+#: windows in the tab and the window is not the currently focused
+#: window
+
+# command_on_bell none
+
+#: Program to run when a bell occurs.
+
+#: }}}
+
+#: Window layout {{{
+
+# remember_window_size yes
+# initial_window_width 640
+# initial_window_height 400
+
+#: If enabled, the window size will be remembered so that new
+#: instances of kitty will have the same size as the previous
+#: instance. If disabled, the window will initially have size
+#: configured by initial_window_width/height, in pixels. You can use a
+#: suffix of "c" on the width/height values to have them interpreted
+#: as number of cells instead of pixels.
+
+# enabled_layouts *
+
+#: The enabled window layouts. A comma separated list of layout names.
+#: The special value all means all layouts. The first listed layout
+#: will be used as the startup layout. Default configuration is all
+#: layouts in alphabetical order. For a list of available layouts, see
+#: the https://sw.kovidgoyal.net/kitty/index.html#layouts.
+
+# window_resize_step_cells 2
+# window_resize_step_lines 2
+
+#: The step size (in units of cell width/cell height) to use when
+#: resizing windows. The cells value is used for horizontal resizing
+#: and the lines value for vertical resizing.
+
+# window_border_width 0.5pt
+
+#: The width of window borders. Can be either in pixels (px) or pts
+#: (pt). Values in pts will be rounded to the nearest number of pixels
+#: based on screen resolution. If not specified the unit is assumed to
+#: be pts. Note that borders are displayed only when more than one
+#: window is visible. They are meant to separate multiple windows.
+
+# draw_minimal_borders yes
+
+#: Draw only the minimum borders needed. This means that only the
+#: minimum needed borders for inactive windows are drawn. That is only
+#: the borders that separate the inactive window from a neighbor. Note
+#: that setting a non-zero window margin overrides this and causes all
+#: borders to be drawn.
+
+# window_margin_width 0
+
+#: The window margin (in pts) (blank area outside the border). A
+#: single value sets all four sides. Two values set the vertical and
+#: horizontal sides. Three values set top, horizontal and bottom. Four
+#: values set top, right, bottom and left.
+
+# single_window_margin_width -1
+
+#: The window margin (in pts) to use when only a single window is
+#: visible. Negative values will cause the value of
+#: window_margin_width to be used instead. A single value sets all
+#: four sides. Two values set the vertical and horizontal sides. Three
+#: values set top, horizontal and bottom. Four values set top, right,
+#: bottom and left.
+
+# window_padding_width 0
+
+#: The window padding (in pts) (blank area between the text and the
+#: window border). A single value sets all four sides. Two values set
+#: the vertical and horizontal sides. Three values set top, horizontal
+#: and bottom. Four values set top, right, bottom and left.
+
+# placement_strategy center
+
+#: When the window size is not an exact multiple of the cell size, the
+#: cell area of the terminal window will have some extra padding on
+#: the sides. You can control how that padding is distributed with
+#: this option. Using a value of center means the cell area will be
+#: placed centrally. A value of top-left means the padding will be on
+#: only the bottom and right edges.
+
+# active_border_color #00ff00
+
+#: The color for the border of the active window. Set this to none to
+#: not draw borders around the active window.
+
+# inactive_border_color #cccccc
+
+#: The color for the border of inactive windows
+
+# bell_border_color #ff5a00
+
+#: The color for the border of inactive windows in which a bell has
+#: occurred
+
+# inactive_text_alpha 1.0
+
+#: Fade the text in inactive windows by the specified amount (a number
+#: between zero and one, with zero being fully faded).
+
+# hide_window_decorations no
+
+#: Hide the window decorations (title-bar and window borders) with
+#: yes. On macOS, titlebar-only can be used to only hide the titlebar.
+#: Whether this works and exactly what effect it has depends on the
+#: window manager/operating system.
+
+# resize_debounce_time 0.1
+
+#: The time (in seconds) to wait before redrawing the screen when a
+#: resize event is received. On platforms such as macOS, where the
+#: operating system sends events corresponding to the start and end of
+#: a resize, this number is ignored.
+
+# resize_draw_strategy static
+
+#: Choose how kitty draws a window while a resize is in progress. A
+#: value of static means draw the current window contents, mostly
+#: unchanged. A value of scale means draw the current window contents
+#: scaled. A value of blank means draw a blank window. A value of size
+#: means show the window size in cells.
+
+# resize_in_steps no
+
+#: Resize the OS window in steps as large as the cells, instead of
+#: with the usual pixel accuracy. Combined with an
+#: initial_window_width and initial_window_height in number of cells,
+#: this option can be used to keep the margins as small as possible
+#: when resizing the OS window. Note that this does not currently work
+#: on Wayland.
+
+# confirm_os_window_close 0
+
+#: Ask for confirmation when closing an OS window or a tab that has at
+#: least this number of kitty windows in it. A value of zero disables
+#: confirmation. This confirmation also applies to requests to quit
+#: the entire application (all OS windows, via the quit action).
+
+#: }}}
+
+#: Tab bar {{{
+
+# tab_bar_edge bottom
+
+#: Which edge to show the tab bar on, top or bottom
+
+# tab_bar_margin_width 0.0
+
+#: The margin to the left and right of the tab bar (in pts)
+
+# tab_bar_style fade
+
+#: The tab bar style, can be one of: fade, separator, powerline, or
+#: hidden. In the fade style, each tab's edges fade into the
+#: background color, in the separator style, tabs are separated by a
+#: configurable separator, and the powerline shows the tabs as a
+#: continuous line. If you use the hidden style, you might want to
+#: create a mapping for the select_tab action which presents you with
+#: a list of tabs and allows for easy switching to a tab.
+
+# tab_bar_min_tabs 2
+
+#: The minimum number of tabs that must exist before the tab bar is
+#: shown
+
+# tab_switch_strategy previous
+
+#: The algorithm to use when switching to a tab when the current tab
+#: is closed. The default of previous will switch to the last used
+#: tab. A value of left will switch to the tab to the left of the
+#: closed tab. A value of right will switch to the tab to the right of
+#: the closed tab. A value of last will switch to the right-most tab.
+
+# tab_fade 0.25 0.5 0.75 1
+
+#: Control how each tab fades into the background when using fade for
+#: the tab_bar_style. Each number is an alpha (between zero and one)
+#: that controls how much the corresponding cell fades into the
+#: background, with zero being no fade and one being full fade. You
+#: can change the number of cells used by adding/removing entries to
+#: this list.
+
+# tab_separator " ┇"
+
+#: The separator between tabs in the tab bar when using separator as
+#: the tab_bar_style.
+
+# tab_powerline_style angled
+
+#: The powerline separator style between tabs in the tab bar when
+#: using powerline as the tab_bar_style, can be one of: angled,
+#: slanted, or round.
+
+# tab_activity_symbol none
+
+#: Some text or a unicode symbol to show on the tab if a window in the
+#: tab that does not have focus has some activity.
+
+# tab_title_template "{title}"
+
+#: A template to render the tab title. The default just renders the
+#: title. If you wish to include the tab-index as well, use something
+#: like: {index}: {title}. Useful if you have shortcuts mapped for
+#: goto_tab N. In addition you can use {layout_name} for the current
+#: layout name and {num_windows} for the number of windows in the tab.
+#: Note that formatting is done by Python's string formatting
+#: machinery, so you can use, for instance, {layout_name[:2].upper()}
+#: to show only the first two letters of the layout name, upper-cased.
+#: If you want to style the text, you can use styling directives, for
+#: example: {fmt.fg.red}red{fmt.fg.default}normal{fmt.bg._00FF00}green
+#: bg{fmt.bg.normal}. Similarly, for bold and italic:
+#: {fmt.bold}bold{fmt.nobold}normal{fmt.italic}italic{fmt.noitalic}.
+
+# active_tab_title_template none
+
+#: Template to use for active tabs, if not specified falls back to
+#: tab_title_template.
+
+# active_tab_foreground #000
+# active_tab_background #eee
+# active_tab_font_style bold-italic
+# inactive_tab_foreground #444
+# inactive_tab_background #999
+# inactive_tab_font_style normal
+
+#: Tab bar colors and styles
+
+# tab_bar_background none
+
+#: Background color for the tab bar. Defaults to using the terminal
+#: background color.
+
+#: }}}
+
+#: Color scheme {{{
+
+# foreground #dddddd
+# background #000000
+
+#: The foreground and background colors
+
+# background_opacity 1.0
+
+#: The opacity of the background. A number between 0 and 1, where 1 is
+#: opaque and 0 is fully transparent. This will only work if
+#: supported by the OS (for instance, when using a compositor under
+#: X11). Note that it only sets the background color's opacity in
+#: cells that have the same background color as the default terminal
+#: background. This is so that things like the status bar in vim,
+#: powerline prompts, etc. still look good. But it means that if you
+#: use a color theme with a background color in your editor, it will
+#: not be rendered as transparent. Instead you should change the
+#: default background color in your kitty config and not use a
+#: background color in the editor color scheme. Or use the escape
+#: codes to set the terminals default colors in a shell script to
+#: launch your editor. Be aware that using a value less than 1.0 is a
+#: (possibly significant) performance hit. If you want to dynamically
+#: change transparency of windows set dynamic_background_opacity to
+#: yes (this is off by default as it has a performance cost)
+
+# background_image none
+
+#: Path to a background image. Must be in PNG format.
+
+# background_image_layout tiled
+
+#: Whether to tile or scale the background image.
+
+# background_image_linear no
+
+#: When background image is scaled, whether linear interpolation
+#: should be used.
+
+# dynamic_background_opacity no
+
+#: Allow changing of the background_opacity dynamically, using either
+#: keyboard shortcuts (increase_background_opacity and
+#: decrease_background_opacity) or the remote control facility.
+
+# background_tint 0.0
+
+#: How much to tint the background image by the background color. The
+#: tint is applied only under the text area, not margin/borders. Makes
+#: it easier to read the text. Tinting is done using the current
+#: background color for each window. This setting applies only if
+#: background_opacity is set and transparent windows are supported or
+#: background_image is set.
+
+# dim_opacity 0.75
+
+#: How much to dim text that has the DIM/FAINT attribute set. One
+#: means no dimming and zero means fully dimmed (i.e. invisible).
+
+# selection_foreground #000000
+
+#: The foreground for text selected with the mouse. A value of none
+#: means to leave the color unchanged.
+
+# selection_background #fffacd
+
+#: The background for text selected with the mouse.
+
+
+#: The 256 terminal colors. There are 8 basic colors, each color has a
+#: dull and bright version, for the first 16 colors. You can set the
+#: remaining 240 colors as color16 to color255.
+
+# color0 #000000
+# color8 #767676
+
+#: black
+
+# color1 #cc0403
+# color9 #f2201f
+
+#: red
+
+# color2 #19cb00
+# color10 #23fd00
+
+#: green
+
+# color3 #cecb00
+# color11 #fffd00
+
+#: yellow
+
+# color4 #0d73cc
+# color12 #1a8fff
+
+#: blue
+
+# color5 #cb1ed1
+# color13 #fd28ff
+
+#: magenta
+
+# color6 #0dcdcd
+# color14 #14ffff
+
+#: cyan
+
+# color7 #dddddd
+# color15 #ffffff
+
+#: white
+
+# mark1_foreground black
+
+#: Color for marks of type 1
+
+# mark1_background #98d3cb
+
+#: Color for marks of type 1 (light steel blue)
+
+# mark2_foreground black
+
+#: Color for marks of type 2
+
+# mark2_background #f2dcd3
+
+#: Color for marks of type 1 (beige)
+
+# mark3_foreground black
+
+#: Color for marks of type 3
+
+# mark3_background #f274bc
+
+#: Color for marks of type 1 (violet)
+
+#: }}}
+
+#: Advanced {{{
+
+# shell .
+
+#: The shell program to execute. The default value of . means to use
+#: whatever shell is set as the default shell for the current user.
+#: Note that on macOS if you change this, you might need to add
+#: --login to ensure that the shell starts in interactive mode and
+#: reads its startup rc files.
+
+# editor .
+
+#: The console editor to use when editing the kitty config file or
+#: similar tasks. A value of . means to use the environment variables
+#: VISUAL and EDITOR in that order. Note that this environment
+#: variable has to be set not just in your shell startup scripts but
+#: system-wide, otherwise kitty will not see it.
+
+# close_on_child_death no
+
+#: Close the window when the child process (shell) exits. If no (the
+#: default), the terminal will remain open when the child exits as
+#: long as there are still processes outputting to the terminal (for
+#: example disowned or backgrounded processes). If yes, the window
+#: will close as soon as the child process exits. Note that setting it
+#: to yes means that any background processes still using the terminal
+#: can fail silently because their stdout/stderr/stdin no longer work.
+
+# allow_remote_control no
+
+#: Allow other programs to control kitty. If you turn this on other
+#: programs can control all aspects of kitty, including sending text
+#: to kitty windows, opening new windows, closing windows, reading the
+#: content of windows, etc. Note that this even works over ssh
+#: connections. You can chose to either allow any program running
+#: within kitty to control it, with yes or only programs that connect
+#: to the socket specified with the kitty --listen-on command line
+#: option, if you use the value socket-only. The latter is useful if
+#: you want to prevent programs running on a remote computer over ssh
+#: from controlling kitty.
+
+# listen_on none
+
+#: Tell kitty to listen to the specified unix/tcp socket for remote
+#: control connections. Note that this will apply to all kitty
+#: instances. It can be overridden by the kitty --listen-on command
+#: line flag. This option accepts only UNIX sockets, such as
+#: unix:${TEMP}/mykitty or (on Linux) unix:@mykitty. Environment
+#: variables are expanded. If {kitty_pid} is present then it is
+#: replaced by the PID of the kitty process, otherwise the PID of the
+#: kitty process is appended to the value, with a hyphen. This option
+#: is ignored unless you also set allow_remote_control to enable
+#: remote control. See the help for kitty --listen-on for more
+#: details.
+
+# env
+
+#: Specify environment variables to set in all child processes. Note
+#: that environment variables are expanded recursively, so if you
+#: use::
+
+#: env MYVAR1=a
+#: env MYVAR2=${MYVAR1}/${HOME}/b
+
+#: The value of MYVAR2 will be a/<path to home directory>/b.
+
+# update_check_interval 0.0
+
+#: Periodically check if an update to kitty is available. If an update
+#: is found a system notification is displayed informing you of the
+#: available update. The default is to check every 24 hrs, set to zero
+#: to disable.
+
+# startup_session none
+
+#: Path to a session file to use for all kitty instances. Can be
+#: overridden by using the kitty --session command line option for
+#: individual instances. See
+#: https://sw.kovidgoyal.net/kitty/index.html#sessions in the kitty
+#: documentation for details. Note that relative paths are interpreted
+#: with respect to the kitty config directory. Environment variables
+#: in the path are expanded.
+
+# clipboard_control write-clipboard write-primary
+
+#: Allow programs running in kitty to read and write from the
+#: clipboard. You can control exactly which actions are allowed. The
+#: set of possible actions is: write-clipboard read-clipboard write-
+#: primary read-primary. You can additionally specify no-append to
+#: disable kitty's protocol extension for clipboard concatenation. The
+#: default is to allow writing to the clipboard and primary selection
+#: with concatenation enabled. Note that enabling the read
+#: functionality is a security risk as it means that any program, even
+#: one running on a remote server via SSH can read your clipboard.
+
+# allow_hyperlinks yes
+
+#: Process hyperlink (OSC 8) escape sequences. If disabled OSC 8
+#: escape sequences are ignored. Otherwise they become clickable
+#: links, that you can click by holding down ctrl+shift and clicking
+#: with the mouse. The special value of ``ask`` means that kitty will
+#: ask before opening the link.
+
+term xterm-256color
+# term xterm-kitty
+# "less" doesn't apply $LESS_TERMCAP_* vars properly under
+# xterm-kitty, and ssh hosts don't know xterm-kitty.
+
+#: The value of the TERM environment variable to set. Changing this
+#: can break many terminal programs, only change it if you know what
+#: you are doing, not because you read some advice on Stack Overflow
+#: to change it. The TERM variable is used by various programs to get
+#: information about the capabilities and behavior of the terminal. If
+#: you change it, depending on what programs you run, and how
+#: different the terminal you are changing it to is, various things
+#: from key-presses, to colors, to various advanced features may not
+#: work.
+
+#: }}}
+
+#: OS specific tweaks {{{
+
+# wayland_titlebar_color system
+
+#: Change the color of the kitty window's titlebar on Wayland systems
+#: with client side window decorations such as GNOME. A value of
+#: system means to use the default system color, a value of background
+#: means to use the background color of the currently active window
+#: and finally you can use an arbitrary color, such as #12af59 or red.
+
+# macos_titlebar_color system
+
+#: Change the color of the kitty window's titlebar on macOS. A value
+#: of system means to use the default system color, a value of
+#: background means to use the background color of the currently
+#: active window and finally you can use an arbitrary color, such as
+#: #12af59 or red. WARNING: This option works by using a hack, as
+#: there is no proper Cocoa API for it. It sets the background color
+#: of the entire window and makes the titlebar transparent. As such it
+#: is incompatible with background_opacity. If you want to use both,
+#: you are probably better off just hiding the titlebar with
+#: hide_window_decorations.
+
+# macos_option_as_alt no
+
+#: Use the option key as an alt key. With this set to no, kitty will
+#: use the macOS native Option+Key = unicode character behavior. This
+#: will break any Alt+key keyboard shortcuts in your terminal
+#: programs, but you can use the macOS unicode input technique. You
+#: can use the values: left, right, or both to use only the left,
+#: right or both Option keys as Alt, instead.
+
+# macos_hide_from_tasks no
+
+#: Hide the kitty window from running tasks (⌘+Tab) on macOS.
+
+# macos_quit_when_last_window_closed no
+
+#: Have kitty quit when all the top-level windows are closed. By
+#: default, kitty will stay running, even with no open windows, as is
+#: the expected behavior on macOS.
+
+# macos_window_resizable yes
+
+#: Disable this if you want kitty top-level (OS) windows to not be
+#: resizable on macOS.
+
+# macos_thicken_font 0
+
+#: Draw an extra border around the font with the given width, to
+#: increase legibility at small font sizes. For example, a value of
+#: 0.75 will result in rendering that looks similar to sub-pixel
+#: antialiasing at common font sizes.
+
+# macos_traditional_fullscreen no
+
+#: Use the traditional full-screen transition, that is faster, but
+#: less pretty.
+
+# macos_show_window_title_in all
+
+#: Show or hide the window title in the macOS window or menu-bar. A
+#: value of window will show the title of the currently active window
+#: at the top of the macOS window. A value of menubar will show the
+#: title of the currently active window in the macOS menu-bar, making
+#: use of otherwise wasted space. all will show the title everywhere
+#: and none hides the title in the window and the menu-bar.
+
+# macos_custom_beam_cursor no
+
+#: Enable/disable custom mouse cursor for macOS that is easier to see
+#: on both light and dark backgrounds. WARNING: this might make your
+#: mouse cursor invisible on dual GPU machines.
+
+# linux_display_server auto
+
+#: Choose between Wayland and X11 backends. By default, an appropriate
+#: backend based on the system state is chosen automatically. Set it
+#: to x11 or wayland to force the choice.
+
+#: }}}
+
+#: Keyboard shortcuts {{{
+
+#: Keys are identified simply by their lowercase unicode characters.
+#: For example: ``a`` for the A key, ``[`` for the left square bracket
+#: key, etc. For functional keys, such as ``Enter or Escape`` the
+#: names are present at https://sw.kovidgoyal.net/kitty/keyboard-
+#: protocol.html#functional-key-definitions. For a list of modifier
+#: names, see: GLFW mods
+#: <https://www.glfw.org/docs/latest/group__mods.html>
+
+#: On Linux you can also use XKB key names to bind keys that are not
+#: supported by GLFW. See XKB keys
+#: <https://github.com/xkbcommon/libxkbcommon/blob/master/xkbcommon/xkbcommon-
+#: keysyms.h> for a list of key names. The name to use is the part
+#: after the XKB_KEY_ prefix. Note that you can only use an XKB key
+#: name for keys that are not known as GLFW keys.
+
+#: Finally, you can use raw system key codes to map keys, again only
+#: for keys that are not known as GLFW keys. To see the system key
+#: code for a key, start kitty with the kitty --debug-keyboard option.
+#: Then kitty will output some debug text for every key event. In that
+#: text look for ``native_code`` the value of that becomes the key
+#: name in the shortcut. For example:
+
+#: .. code-block:: none
+
+#: on_key_input: glfw key: 65 native_code: 0x61 action: PRESS mods: 0x0 text: 'a'
+
+#: Here, the key name for the A key is 0x61 and you can use it with::
+
+#: map ctrl+0x61 something
+
+#: to map ctrl+a to something.
+
+#: You can use the special action no_op to unmap a keyboard shortcut
+#: that is assigned in the default configuration::
+
+#: map kitty_mod+space no_op
+
+#: You can combine multiple actions to be triggered by a single
+#: shortcut, using the syntax below::
+
+#: map key combine <separator> action1 <separator> action2 <separator> action3 ...
+
+#: For example::
+
+#: map kitty_mod+e combine : new_window : next_layout
+
+#: this will create a new window and switch to the next available
+#: layout
+
+#: You can use multi-key shortcuts using the syntax shown below::
+
+#: map key1>key2>key3 action
+
+#: For example::
+
+#: map ctrl+f>2 set_font_size 20
+
+# kitty_mod ctrl+shift
+
+#: The value of kitty_mod is used as the modifier for all default
+#: shortcuts, you can change it in your kitty.conf to change the
+#: modifiers for all the default shortcuts.
+
+# clear_all_shortcuts no
+
+#: You can have kitty remove all shortcut definition seen up to this
+#: point. Useful, for instance, to remove the default shortcuts.
+
+# kitten_alias hints hints --hints-offset=0
+
+#: You can create aliases for kitten names, this allows overriding the
+#: defaults for kitten options and can also be used to shorten
+#: repeated mappings of the same kitten with a specific group of
+#: options. For example, the above alias changes the default value of
+#: kitty +kitten hints --hints-offset to zero for all mappings,
+#: including the builtin ones.
+
+#: Clipboard {{{
+
+# map kitty_mod+c copy_to_clipboard
+
+#: There is also a copy_or_interrupt action that can be optionally
+#: mapped to Ctrl+c. It will copy only if there is a selection and
+#: send an interrupt otherwise. Similarly, copy_and_clear_or_interrupt
+#: will copy and clear the selection or send an interrupt if there is
+#: no selection.
+
+# map kitty_mod+v paste_from_clipboard
+# map kitty_mod+s paste_from_selection
+# map shift+insert paste_from_selection
+# map kitty_mod+o pass_selection_to_program
+
+#: You can also pass the contents of the current selection to any
+#: program using pass_selection_to_program. By default, the system's
+#: open program is used, but you can specify your own, the selection
+#: will be passed as a command line argument to the program, for
+#: example::
+
+#: map kitty_mod+o pass_selection_to_program firefox
+
+#: You can pass the current selection to a terminal program running in
+#: a new kitty window, by using the @selection placeholder::
+
+#: map kitty_mod+y new_window less @selection
+
+#: }}}
+
+#: Scrolling {{{
+
+# map kitty_mod+up scroll_line_up
+# map kitty_mod+k scroll_line_up
+# map kitty_mod+down scroll_line_down
+# map kitty_mod+j scroll_line_down
+# map kitty_mod+page_up scroll_page_up
+# map kitty_mod+page_down scroll_page_down
+# map kitty_mod+home scroll_home
+# map kitty_mod+end scroll_end
+# map kitty_mod+h show_scrollback
+
+#: You can pipe the contents of the current screen + history buffer as
+#: STDIN to an arbitrary program using the ``launch`` function. For
+#: example, the following opens the scrollback buffer in less in an
+#: overlay window::
+
+#: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R
+
+#: For more details on piping screen and buffer contents to external
+#: programs, see launch.
+
+#: }}}
+
+#: Window management {{{
+
+# map kitty_mod+enter new_window
+
+#: You can open a new window running an arbitrary program, for
+#: example::
+
+#: map kitty_mod+y launch mutt
+
+#: You can open a new window with the current working directory set to
+#: the working directory of the current window using::
+
+#: map ctrl+alt+enter launch --cwd=current
+
+#: You can open a new window that is allowed to control kitty via the
+#: kitty remote control facility by prefixing the command line with @.
+#: Any programs running in that window will be allowed to control
+#: kitty. For example::
+
+#: map ctrl+enter launch --allow-remote-control some_program
+
+#: You can open a new window next to the currently active window or as
+#: the first window, with::
+
+#: map ctrl+n launch --location=neighbor some_program
+#: map ctrl+f launch --location=first some_program
+
+#: For more details, see launch.
+
+# map kitty_mod+n new_os_window
+
+#: Works like new_window above, except that it opens a top level OS
+#: kitty window. In particular you can use new_os_window_with_cwd to
+#: open a window with the current working directory.
+
+# map kitty_mod+w close_window
+# map kitty_mod+] next_window
+# map kitty_mod+[ previous_window
+# map kitty_mod+f move_window_forward
+# map kitty_mod+b move_window_backward
+# map kitty_mod+` move_window_to_top
+# map kitty_mod+r start_resizing_window
+# map kitty_mod+1 first_window
+# map kitty_mod+2 second_window
+# map kitty_mod+3 third_window
+# map kitty_mod+4 fourth_window
+# map kitty_mod+5 fifth_window
+# map kitty_mod+6 sixth_window
+# map kitty_mod+7 seventh_window
+# map kitty_mod+8 eighth_window
+# map kitty_mod+9 ninth_window
+# map kitty_mod+0 tenth_window
+#: }}}
+
+#: Tab management {{{
+
+# map kitty_mod+right next_tab
+# map kitty_mod+left previous_tab
+# map kitty_mod+t new_tab
+# map kitty_mod+q close_tab
+# map kitty_mod+. move_tab_forward
+# map kitty_mod+, move_tab_backward
+# map kitty_mod+alt+t set_tab_title
+
+#: You can also create shortcuts to go to specific tabs, with 1 being
+#: the first tab, 2 the second tab and -1 being the previously active
+#: tab, and any number larger than the last tab being the last tab::
+
+#: map ctrl+alt+1 goto_tab 1
+#: map ctrl+alt+2 goto_tab 2
+
+#: Just as with new_window above, you can also pass the name of
+#: arbitrary commands to run when using new_tab and use
+#: new_tab_with_cwd. Finally, if you want the new tab to open next to
+#: the current tab rather than at the end of the tabs list, use::
+
+#: map ctrl+t new_tab !neighbor [optional cmd to run]
+#: }}}
+
+#: Layout management {{{
+
+# map kitty_mod+l next_layout
+
+#: You can also create shortcuts to switch to specific layouts::
+
+#: map ctrl+alt+t goto_layout tall
+#: map ctrl+alt+s goto_layout stack
+
+#: Similarly, to switch back to the previous layout::
+
+#: map ctrl+alt+p last_used_layout
+#: }}}
+
+#: Font sizes {{{
+
+#: You can change the font size for all top-level kitty OS windows at
+#: a time or only the current one.
+
+# map kitty_mod+equal change_font_size all +2.0
+# map kitty_mod+plus change_font_size all +2.0
+# map kitty_mod+kp_add change_font_size all +2.0
+# map kitty_mod+minus change_font_size all -2.0
+# map kitty_mod+kp_subtract change_font_size all -2.0
+# map kitty_mod+backspace change_font_size all 0
+
+#: To setup shortcuts for specific font sizes::
+
+#: map kitty_mod+f6 change_font_size all 10.0
+
+#: To setup shortcuts to change only the current OS window's font
+#: size::
+
+#: map kitty_mod+f6 change_font_size current 10.0
+#: }}}
+
+#: Select and act on visible text {{{
+
+#: Use the hints kitten to select text and either pass it to an
+#: external program or insert it into the terminal or copy it to the
+#: clipboard.
+
+# map kitty_mod+e kitten hints
+
+#: Open a currently visible URL using the keyboard. The program used
+#: to open the URL is specified in open_url_with.
+
+# map kitty_mod+p>f kitten hints --type path --program -
+
+#: Select a path/filename and insert it into the terminal. Useful, for
+#: instance to run git commands on a filename output from a previous
+#: git command.
+
+# map kitty_mod+p>shift+f kitten hints --type path
+
+#: Select a path/filename and open it with the default open program.
+
+# map kitty_mod+p>l kitten hints --type line --program -
+
+#: Select a line of text and insert it into the terminal. Use for the
+#: output of things like: ls -1
+
+# map kitty_mod+p>w kitten hints --type word --program -
+
+#: Select words and insert into terminal.
+
+# map kitty_mod+p>h kitten hints --type hash --program -
+
+#: Select something that looks like a hash and insert it into the
+#: terminal. Useful with git, which uses sha1 hashes to identify
+#: commits
+
+# map kitty_mod+p>n kitten hints --type linenum
+
+#: Select something that looks like filename:linenum and open it in
+#: vim at the specified line number.
+
+# map kitty_mod+p>y kitten hints --type hyperlink
+
+#: Select a hyperlink (i.e. a URL that has been marked as such by the
+#: terminal program, for example, by ls --hyperlink=auto).
+
+
+#: The hints kitten has many more modes of operation that you can map
+#: to different shortcuts. For a full description see kittens/hints.
+#: }}}
+
+#: Miscellaneous {{{
+
+# map kitty_mod+f11 toggle_fullscreen
+# map kitty_mod+f10 toggle_maximized
+# map kitty_mod+u kitten unicode_input
+# map kitty_mod+f2 edit_config_file
+# map kitty_mod+escape kitty_shell window
+
+#: Open the kitty shell in a new window/tab/overlay/os_window to
+#: control kitty using commands.
+
+# map kitty_mod+a>m set_background_opacity +0.1
+# map kitty_mod+a>l set_background_opacity -0.1
+# map kitty_mod+a>1 set_background_opacity 1
+# map kitty_mod+a>d set_background_opacity default
+# map kitty_mod+delete clear_terminal reset active
+
+#: You can create shortcuts to clear/reset the terminal. For example::
+
+#: # Reset the terminal
+#: map kitty_mod+f9 clear_terminal reset active
+#: # Clear the terminal screen by erasing all contents
+#: map kitty_mod+f10 clear_terminal clear active
+#: # Clear the terminal scrollback by erasing it
+#: map kitty_mod+f11 clear_terminal scrollback active
+#: # Scroll the contents of the screen into the scrollback
+#: map kitty_mod+f12 clear_terminal scroll active
+
+#: If you want to operate on all windows instead of just the current
+#: one, use all instead of active.
+
+#: It is also possible to remap Ctrl+L to both scroll the current
+#: screen contents into the scrollback buffer and clear the screen,
+#: instead of just clearing the screen::
+
+#: map ctrl+l combine : clear_terminal scroll active : send_text normal,application \x0c
+
+
+#: You can tell kitty to send arbitrary (UTF-8) encoded text to the
+#: client program when pressing specified shortcut keys. For example::
+
+#: map ctrl+alt+a send_text all Special text
+
+#: This will send "Special text" when you press the ctrl+alt+a key
+#: combination. The text to be sent is a python string literal so you
+#: can use escapes like \x1b to send control codes or \u21fb to send
+#: unicode characters (or you can just input the unicode characters
+#: directly as UTF-8 text). The first argument to send_text is the
+#: keyboard modes in which to activate the shortcut. The possible
+#: values are normal or application or kitty or a comma separated
+#: combination of them. The special keyword all means all modes. The
+#: modes normal and application refer to the DECCKM cursor key mode
+#: for terminals, and kitty refers to the special kitty extended
+#: keyboard protocol.
+
+#: Another example, that outputs a word and then moves the cursor to
+#: the start of the line (same as pressing the Home key)::
+
+#: map ctrl+alt+a send_text normal Word\x1b[H
+#: map ctrl+alt+a send_text application Word\x1bOH
+
+#: }}}
+
+# }}} \ No newline at end of file
diff --git a/lesskey b/lesskey
new file mode 100644
index 00000000..10b6fc72
--- /dev/null
+++ b/lesskey
@@ -0,0 +1,18 @@
+# -*- mode: conf-space -*-
+# No compilation is necessary any more in recent less versions.
+
+#command
+{ prev-file
+} next-file
+N reverse-search
+n repeat-search
+^h back-screen
+
+#env
+LESS=--ignore-case --quit-if-one-screen --save-marks --RAW-CONTROL-CHARS --LONG-PROMPT --chop-long-lines --status-column --HILITE-UNREAD
+LESSOPEN=|src-hilite-lesspipe.sh %s
+LESSHISTFILE=$XDG_DATA_HOME/less/history
+LESSHISTSIZE=1000
+# *? setting is shared between LESS{,UTF}BINFMT, with the latter's setting taking priority
+LESSBINFMT=*k%02X
+LESSUTFBINFMT=U+%04lX
diff --git a/prompt.zsh b/prompt.zsh
new file mode 100644
index 00000000..3898f89d
--- /dev/null
+++ b/prompt.zsh
@@ -0,0 +1,123 @@
+# fast prompt theme
+# MIT License
+# Based on lean prompt theme by Miek Gieben: https://github.com/miekg/lean
+# Based on Pure by Sindre Sorhus: https://github.com/sindresorhus/pure
+
+: ${PROMPT_FAST_NOTITLE=0} ${PROMPT_FAST_VIMODE=y} ${PROMPT_FAST_VIMODE_FORMAT=%S} ${PROMPT_FAST_CMD_MAX_EXEC_TIME=5}
+
+prompt_fast_help () {
+ cat << EOF
+This is a one line prompt that tries to stay out of your face. It utilizes the
+left side prompt for most information, like the CWD. When the exit code of a
+process isn't zero the prompt turns red and the exit code is displayed. If a
+process takes more than 5 (default) seconds to run the total running time is
+shown in the next prompt.
+
+Configuration:
+
+PROMPT_FAST_VIMODE: used to determine whether or not to display indicator (default on)
+PROMPT_FAST_VIMODE_FORMAT: Defaults to "%S"
+PROMPT_FAST_NOTITLE: used to determine whether or not to set the title, set to 0
+ by default. Set it to your own condition, make it 1 when you don't want the
+ title set.
+PROMPT_FAST_CMD_MAX_EXEC_TIME: if a commands takes more than this many seconds,
+ show how long it took
+EOF
+}
+
+# fastest possible way to check if repo is dirty
+prompt_fast_git_dirty () {
+ # check if we're in a git repo
+ git rev-parse --is-inside-work-tree &>/dev/null &&
+ # check if it's dirty
+ [ -n "$(git status --porcelain --ignore-submodules -uno 2>/dev/null | head -n 1)" ] &&
+ echo ' +'
+}
+
+# displays the exec time of the last command if set threshold was exceeded
+prompt_fast_cmd_exec_time () {
+ [ -n "$cmd_timestamp" ] || return
+ integer elapsed=$EPOCHSECONDS-$cmd_timestamp
+ ((elapsed > PROMPT_FAST_CMD_MAX_EXEC_TIME)) || return
+ # turns seconds into human readable time, 165392 => 1d 21h 56m 32s
+ ((elapsed > 60 * 60 * 24)) && print -f '%dd ' $((elapsed / 60 / 60 / 24))
+ ((elapsed > 60 * 60)) && print -f '%dh ' $((elapsed / 60 / 60 % 24))
+ ((elapsed > 60)) && print -f '%dm ' $((elapsed / 60 % 60))
+ ((elapsed > 0)) && print -f '%ds ' $((elapsed % 60))
+}
+
+prompt_fast_set_title () {
+ # shows the current tty and dir and executed command in the title when a process is active
+ print -Pn '\e]0;'
+ tr -dc '[:print:]' <<< "$1"
+ print -Pn ' - %~$prompt_fast_title_host\a'
+}
+
+prompt_fast_preexec () {
+ cmd_timestamp=$EPOCHSECONDS
+ ((PROMPT_FAST_NOTITLE != 1)) && prompt_fast_set_title "$1"
+}
+
+prompt_fast_pwd () {
+ local fast_path="$(print -Pn '%~')"
+ if (($#fast_path / $COLUMNS.0 * 100 > ${PROMPT_FAST_PATH_PERCENT:-33})); then
+ print -Pn '%-1~/…/%2/'
+ else
+ print "$fast_path"
+ fi
+}
+
+prompt_fast_precmd () {
+ ((PROMPT_FAST_NOTITLE != 1)) && print -Pn "\\e]0;%~$prompt_fast_title_host\a"
+
+ vcs_info
+
+ local a j jobs=()
+ for a j (${(kv)jobstates}); do
+ i=${${(@s,:,)j}[2]}
+ jobs+=($a${i//[^+-]/})
+ done
+ # print with [ ] and space separated
+ local prompt_fast_jobs=${jobs:+%F{8}[${(j: :)jobs}] }
+ local vimode=${${KEYMAP/vicmd/${PROMPT_FAST_VIMODE:+$PROMPT_FAST_VIMODE_FORMAT}}/(main|viins)/}
+
+ setopt promptsubst
+ local vcs_info_str='$vcs_info_msg_0_' # avoid https://github.com/njhartwell/pw3nage
+ local genv_short=${GUIX_ENVIRONMENT##*/}
+ genv_short=${genv_short:0:5}
+ local italic=$'\e[03m'
+ PROMPT="${TMUX+%F{green\}t }${GUIX_ENVIRONMENT+%F{11\}${genv_short}%u }$prompt_fast_jobs$prompt_fast_host%F{blue}$(prompt_fast_pwd)%F{8}$vcs_info_str$(prompt_fast_git_dirty) %F{yellow}$(prompt_fast_cmd_exec_time)%(?..%B%F{red}%?%f%b )%(?.%F{blue}.%B%F{red})$vimode%#%s%u%f%k%b "
+
+ unset cmd_timestamp # reset value since `preexec` isn't always triggered
+}
+
+zle-keymap-select () {
+ prompt_fast_precmd
+ zle reset-prompt
+}
+
+prompt_fast_setup () {
+ prompt_opts=(cr percent sp subst)
+
+ #zmodload zsh/datetime # for strftime -- appears unused
+ autoload -Uz add-zsh-hook
+ autoload -Uz vcs_info
+
+ [ -z "$PROMPT_FAST_VIMODE" ] && zle -N zle-keymap-select
+
+ add-zsh-hook precmd prompt_fast_precmd
+ add-zsh-hook preexec prompt_fast_preexec
+
+ zstyle ':vcs_info:*' enable git
+ zstyle ':vcs_info:git*' formats ' %b'
+ zstyle ':vcs_info:git*' actionformats ' %b|%a'
+
+ if [ -n "$SSH_CONNECTION" ]; then
+ prompt_fast_title_host=' - %n@%m'
+ prompt_fast_host='%F{yellow}%n@%m:'
+ fi
+
+ return 0
+}
+
+prompt_fast_setup "$@"
diff --git a/zshrc b/zshrc
new file mode 100644
index 00000000..24ef3dec
--- /dev/null
+++ b/zshrc
@@ -0,0 +1,187 @@
+zmodload zsh/attr
+zmodload -F zsh/cap b:cap
+zmodload zsh/datetime
+zmodload zsh/system
+zmodload zsh/terminfo
+
+setopt extendedglob interactivecomments
+
+# So we don't have to call tput.
+autoload -Uz colors
+colors
+
+# GPG-agent setup
+GPG_TTY=$(tty) && export GPG_TTY
+
+## Key bindings
+# vi-like key mappings
+bindkey -v
+
+bindkey '^[[A' up-line-or-history # up
+bindkey '^[[B' down-line-or-history # down
+
+bindkey '^[[1;5A' up-line-or-history # C-up
+bindkey '^[[1;5B' down-line-or-history # C-down
+bindkey '^[[1;5C' vi-forward-word # C-right
+bindkey '^[[1;5D' vi-backward-word # C-left
+
+bindkey '^[[H' vi-beginning-of-line # home
+bindkey '^[[F' vi-end-of-line # end
+
+## History setup
+# HISTSIZE should be set through ~/.pam_environment.
+HISTSIZE=10000000
+HISTFILE=${XDG_DATA_HOME:-$HOME/.local/share}/zsh/history
+SAVEHIST=$HISTSIZE
+setopt appendhistory sharehistory incappendhistory extendedhistory histverify histreduceblanks
+
+## Completion setup
+
+# don't need to run 'hash -r' after commands are added/removed
+zstyle ':completion:*' rehash true
+
+# enable completion list colours
+# http://linuxshellaccount.blogspot.com/2008/12/color-completion-using-zsh-modules-on.html
+zstyle ':completion:*:*:*:*:hosts' list-colors "=*=${fg[blue]}"
+zstyle ':completion:*:*:*:*:users' list-colors "=*=${fg[green]}=${fg[red]}"
+
+# formatting and messages
+# http://www.masterzen.fr/2009/04/19/in-love-with-zsh-part-one/
+zstyle ':completion:*' verbose yes
+zstyle ':completion:*:descriptions' format "${fg[green]}%B--- %d%b"
+zstyle ':completion:*:messages' format '%d'
+zstyle ':completion:*:warnings' format "${fg[red]}%BNo matches for:%b %d"
+zstyle ':completion:*:corrections' format "${fg[yellow]}%B%d (%e char)%b"
+
+# https://stackoverflow.com/a/24237590
+#zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
+
+# (mostly) from compinstall
+zstyle ':completion:*' auto-description '(param: %d)'
+zstyle ':completion:*' completer _expand _complete _ignored _approximate
+zstyle ':completion:*' expand prefix suffix
+zstyle ':completion:*' file-sort name
+zstyle ':completion:*' group-name ''
+zstyle ':completion:*' ignore-parents parent pwd directory
+zstyle ':completion:*' insert-unambiguous false
+eval "$(dircolors)" # set LS_COLORS
+zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
+zstyle ':completion:*' list-suffixes true
+zstyle ':completion:*' matcher-list '' 'm:{[:lower:]}={[:upper:]}' 'r:|[._-]=** r:|=**' 'l:|=* r:|=*'
+zstyle ':completion:*' max-errors 3
+zstyle ':completion:*' original true
+zstyle ':completion:*' verbose true
+
+autoload -Uz compinit
+if mkdir -p "${XDG_CACHE_HOME:-$HOME/.cache}/zsh"; then
+ compinit -d "${XDG_CACHE_HOME:-$HOME/.cache}/zsh/zcompdump-$ZSH_VERSION"
+else
+ # Don't use dump file.
+ compinit -D
+fi
+
+## Aliases
+# Tell emacsclient to return immediately after opening the file. Can't put this
+# in $EDITOR as many programs expect $EDITOR to exit only when done editing.
+alias em='emacsclient -qcn'
+alias se='sudo -e'
+alias ls='\ls --color=auto -h'
+alias la='\ls --color=auto -hA'
+alias grep='\grep --color=auto'
+alias diff='\diff -s --color=auto'
+alias cdiff='\diff -s --color=always'
+alias ipy='ipython3 --autoindent --automagic --pprint --no-banner --no-confirm-exit --term-title --autocall=1 --colors=Neutral'
+alias ispy="isympy -qI -- $(whence ipy | cut -d ' ' -f 2-)"
+alias rot13='caesar 13'
+alias ga='git add'
+alias gb='git branch'
+alias gc='git commit'
+alias gd='git diff'
+alias gf='git fetch'
+alias gk='git checkout'
+alias gg='git glog'
+alias gl='git pull'
+alias gp='git push'
+alias gs='git status'
+alias sc='systemctl'
+alias scu='systemctl --user'
+alias sclog='sudo journalctl --system -xfu'
+alias sculog='journalctl --user -xfu'
+alias wget='\wget --hsts-file="${XDG_CACHE_HOME:-$HOME/.cache}/wget-hsts"'
+alias aurora="REQUESTS_CA_BUNDLE=${XDG_CONFIG_HOME:-$HOME/.config}/cern-ca-bundle.crt \aurora"
+alias aurora_admin="REQUESTS_CA_BUNDLE=${XDG_CONFIG_HOME:-$HOME/.config}/cern-ca-bundle.crt \aurora_admin"
+
+# Recutils 1.8 has a bug when TMPDIR is on a different mount point, see
+# https://lists.gnu.org/archive/html/bug-recutils/2019-08/msg00001.html.
+for _recutil in rec2csv recdel recfix recfmt recinf recins recsel recset; do
+ alias "$_recutil=TMPDIR=. $_recutil"
+done
+unset _recutil
+
+# Arch
+_cmds=('in' -S sinfo -Si linfo -Qi grp -Sg own -Qo lsf -Ql lsr -Sl lst -Qdt lstt -Qdtt)
+_sudo_cmds=(upg -Syu ins -U ind '-S --asdeps' dep '-D --asdeps' re -R rem -Rns rec -Rnsc
+ ssch -Ss lsch -Qs upd -Sy rmt '-Rs $(paclst -q)' rmtt '-Rs $(paclstt -q)'
+ remt '-Rns $(paclst -q)' remtt '-Rns $(paclstt -q)')
+for _cmd _args in ${(kv)_cmds}; do
+ alias "a$_cmd=pikaur $_args"
+ alias "pac$_cmd=pacman $_args"
+done
+for _cmd _args in ${(kv)_sudo_cmds}; do
+ alias "a$_cmd=pikaur $_args"
+ alias "pac$_cmd=sudo pacman $_args"
+done
+unset _cmd _args _cmds _sudo_cmds
+
+ppscm () {
+ guile -c "(use-modules (ice-9 pretty-print)) (with-input-from-file \"$1\" (compose pretty-print read))" |
+ source-highlight -s scheme -f esc | less -RSM
+}
+
+# Less: use pretty colours for bold/underline/... -- mostly in `man'
+# https://wiki.archlinux.org/index.php/Color_output_in_console#less
+# See terminfo(5) for tput code names.
+# blink -> italic white-on-red
+export LESS_TERMCAP_mb=$'\e'"[${color[standout]}m${fg[white]}${bg[red]}"
+# bold -> bold blue
+export LESS_TERMCAP_md="${fg_bold[blue]}"
+# reverse video -> reverse, bright yellow background
+export LESS_TERMCAP_so=$'\e'"[${color[reverse]}m${fg_bold[yellow]}"
+# underline -> italic green
+export LESS_TERMCAP_us=$'\e'"[${color[standout]}m${fg[green]}"
+# reset bold/blink, reverse video, underline
+export LESS_TERMCAP_me="$reset_color" LESS_TERMCAP_se="$reset_color" LESS_TERMCAP_ue="$reset_color"
+
+## Plugins
+_load_plugin () {
+ local _try_path
+ for _try_path in {/usr,"$GUIX_ENVIRONMENT","$HOME/.guix-profile","$HOME/.guix-home/profile"}"/share/zsh/plugins/$1/$1"{.plugin,}.zsh; do
+ [ -r "$_try_path" ] && . "$_try_path" && return 0
+ done
+ return 1
+}
+
+if _load_plugin zsh-autosuggestions; then
+ bindkey '^ ' autosuggest-accept
+ bindkey -M vicmd '^I' autosuggest-accept
+ ZSH_AUTOSUGGEST_STRATEGY=(history completion)
+ ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=20
+ ZSH_AUTOSUGGEST_USE_ASYNC=1
+ ZSH_AUTOSUGGEST_MANUAL_REBIND=1
+fi
+
+if _load_plugin zsh-history-substring-search; then
+ bindkey '^[[A' history-substring-search-up
+ bindkey '^[[B' history-substring-search-down
+ bindkey -M emacs '^P' history-substring-search-up
+ bindkey -M emacs '^N' history-substring-search-down
+ bindkey -M vicmd 'k' history-substring-search-up
+ bindkey -M vicmd 'j' history-substring-search-down
+fi
+
+_load_plugin zsh-autopair
+
+_load_plugin fast-syntax-highlighting ||
+ _load_plugin zsh-syntax-highlighting
+
+unset _load_plugin