aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.chezmoidata.toml3
-rw-r--r--.chezmoiignore92
-rw-r--r--.chezmoiremove7
-rw-r--r--.gitattributes2
-rwxr-xr-x.githooks/post-commit9
-rw-r--r--.gitignore17
-rw-r--r--.gitmodules9
-rwxr-xr-xMakefile10
-rw-r--r--README565
-rw-r--r--afs/symlink_cclub1
-rw-r--r--bin/executable_Internet.m3u.sh40
-rwxr-xr-xbin/executable_copyright.awk122
-rwxr-xr-xbin/executable_do_blue.sh4
-rwxr-xr-xbin/executable_do_dac.sh19
-rwxr-xr-xbin/executable_do_speakers.sh13
-rwxr-xr-xbin/executable_icd112
-rwxr-xr-xbin/executable_lbdb-fetchaddr-wrapper7
-rwxr-xr-xbin/executable_mailx-alias13
-rwxr-xr-xbin/executable_mice.sh25
-rwxr-xr-xbin/executable_mpd_only.sh7
-rwxr-xr-xbin/executable_mpd_others.sh10
-rwxr-xr-xbin/executable_mutt-fetchbug161
-rwxr-xr-xbin/executable_mutt_bgrun115
-rwxr-xr-xbin/executable_mutt_oauth2.py419
-rwxr-xr-xbin/executable_ptmp50
-rwxr-xr-xbin/executable_startaudio3
-rwxr-xr-xbin/executable_tmcg29
-rwxr-xr-xbin/executable_wd-bak14
-rwxr-xr-xbin/executable_wd-mount18
-rw-r--r--bin/executable_wd-umount21
-rw-r--r--chezmoi.toml.censored14
-rw-r--r--crontab37
-rw-r--r--dot_Xresources.tmpl86
-rw-r--r--dot_asoundrc33
-rw-r--r--dot_aspell.conf1
-rw-r--r--dot_aspell.en.prepl31
-rw-r--r--dot_aspell.en.pws134
-rw-r--r--dot_baresip/accounts.tmpl36
-rw-r--r--dot_caffrc69
-rw-r--r--dot_config/alacritty/alacritty.yml36
-rw-r--r--dot_config/beets/config.yaml.tmpl125
-rw-r--r--dot_config/catgirl/bitlbee.tmpl8
-rw-r--r--dot_config/catgirl/encrypted_private_weechat-sdf.pem.asc110
-rw-r--r--dot_config/catgirl/encrypted_private_weechat.pem.asc110
-rw-r--r--dot_config/catgirl/libera.tmpl9
-rw-r--r--dot_config/catgirl/oftc.tmpl8
-rw-r--r--dot_config/catgirl/otaku9
-rw-r--r--dot_config/catgirl/schmorp.tmpl8
-rw-r--r--dot_config/catgirl/sdf.tmpl8
-rw-r--r--dot_config/catgirl/tilde.tmpl8
-rw-r--r--dot_config/encrypted_private_wpa_supplicant.conf.tmpl.asc62
-rw-r--r--dot_config/fontconfig/fonts.conf33
-rw-r--r--dot_config/mimeapps.list11
-rw-r--r--dot_config/ncmpcpp/config.tmpl3
-rw-r--r--dot_config/private_borgmatic/encrypted_private_home.yaml.asc39
-rw-r--r--dot_config/private_borgmatic/encrypted_private_music.yaml.asc38
-rw-r--r--dot_config/private_borgmatic/encrypted_private_pictures.yaml.asc38
-rw-r--r--dot_config/private_borgmatic/encrypted_private_tosh.yaml.asc39
-rw-r--r--dot_config/pulse/daemon.conf4
-rw-r--r--dot_config/pulse/default.pa4
-rw-r--r--dot_config/redshift.conf.tmpl13
-rw-r--r--dot_config/systemd/user/backup-email.service38
-rw-r--r--dot_config/systemd/user/backup-email.timer10
-rw-r--r--dot_config/systemd/user/backup-irclogs.service37
-rw-r--r--dot_config/systemd/user/backup-irclogs.timer10
-rw-r--r--dot_config/systemd/user/borgmatic@.service61
-rw-r--r--dot_config/systemd/user/borgmatic@.timer10
-rw-r--r--dot_config/zathura/zathurarc3
-rw-r--r--dot_cwmrc.tmpl242
-rwxr-xr-xdot_dzen/executable_battery.sh49
-rwxr-xr-xdot_dzen/executable_dzen.sh156
-rwxr-xr-xdot_dzen/executable_temperature.sh26
-rw-r--r--dot_dzen/icons/arrow_down.xbm4
-rw-r--r--dot_dzen/icons/arrow_up.xbm4
-rw-r--r--dot_dzen/icons/bluetooth.xbm4
-rw-r--r--dot_dzen/icons/corner.xbm5
-rw-r--r--dot_dzen/icons/cpu.xbm6
-rw-r--r--dot_dzen/icons/down.xbm6
-rw-r--r--dot_dzen/icons/fwd.xbm4
-rw-r--r--dot_dzen/icons/layout-full-black.xbm5
-rw-r--r--dot_dzen/icons/layout-full.xbm8
-rw-r--r--dot_dzen/icons/layout-gimp.xbm8
-rw-r--r--dot_dzen/icons/layout-im-full.xbm8
-rw-r--r--dot_dzen/icons/layout-im-mirror.xbm8
-rw-r--r--dot_dzen/icons/layout-im-tall.xbm8
-rw-r--r--dot_dzen/icons/layout-im.xbm8
-rw-r--r--dot_dzen/icons/layout-mirror-black.xbm5
-rw-r--r--dot_dzen/icons/layout-mirror-bottom.xbm8
-rw-r--r--dot_dzen/icons/layout-mirror-top.xbm8
-rw-r--r--dot_dzen/icons/layout-tall-black.xbm5
-rw-r--r--dot_dzen/icons/layout-tall-left.xbm8
-rw-r--r--dot_dzen/icons/layout-tall-right.xbm8
-rw-r--r--dot_dzen/icons/layout-threecol.xbm8
-rw-r--r--dot_dzen/icons/load.xbm6
-rw-r--r--dot_dzen/icons/mail.xbm4
-rw-r--r--dot_dzen/icons/mem.xbm6
-rw-r--r--dot_dzen/icons/mpd.xbm6
-rw-r--r--dot_dzen/icons/net-wifi.xbm6
-rw-r--r--dot_dzen/icons/net-wifi3.xbm6
-rw-r--r--dot_dzen/icons/net-wifi4.xbm6
-rw-r--r--dot_dzen/icons/net-wifi5.xbm6
-rw-r--r--dot_dzen/icons/net-wired.xbm6
-rw-r--r--dot_dzen/icons/net-wired2.xbm6
-rw-r--r--dot_dzen/icons/next.xbm4
-rw-r--r--dot_dzen/icons/pause.xbm4
-rw-r--r--dot_dzen/icons/phones.xbm4
-rw-r--r--dot_dzen/icons/play.xbm4
-rw-r--r--dot_dzen/icons/plus.xbm5
-rw-r--r--dot_dzen/icons/power-ac.xbm6
-rw-r--r--dot_dzen/icons/power-bat.xbm6
-rw-r--r--dot_dzen/icons/power-bat2.xbm6
-rw-r--r--dot_dzen/icons/prev.xbm4
-rw-r--r--dot_dzen/icons/rwd.xbm4
-rw-r--r--dot_dzen/icons/spkr_hi.xbm4
-rw-r--r--dot_dzen/icons/spkr_mute.xbm4
-rw-r--r--dot_dzen/icons/square.xbm5
-rw-r--r--dot_dzen/icons/stop.xbm4
-rw-r--r--dot_dzen/icons/temp.xbm6
-rw-r--r--dot_dzen/icons/up.xbm6
-rw-r--r--dot_dzen/icons/vol-hi.xbm6
-rw-r--r--dot_dzen/icons/vol-mute.xbm6
-rw-r--r--dot_dzen/icons/wifi_01.xbm4
-rw-r--r--dot_dzen/icons/wifi_02.xbm4
-rw-r--r--dot_emacs.d/elpa/private_gnupg/private_pubring.kbxbin0 -> 2413 bytes
-rw-r--r--dot_emacs.d/local/dictem/AUTHORS (renamed from AUTHORS)0
-rw-r--r--dot_emacs.d/local/dictem/COPYING (renamed from COPYING)0
-rw-r--r--dot_emacs.d/local/dictem/NEWS (renamed from NEWS)0
-rw-r--r--dot_emacs.d/local/dictem/README558
-rw-r--r--dot_emacs.d/local/dictem/TODO (renamed from TODO)0
-rw-r--r--dot_emacs.d/local/dictem/dictem-elisp.el (renamed from dictem-elisp.el)0
-rw-r--r--dot_emacs.d/local/dictem/dictem-lingvo-dsl.el (renamed from dictem-lingvo-dsl.el)0
-rw-r--r--dot_emacs.d/local/dictem/dictem.el (renamed from dictem.el)0
-rw-r--r--dot_emacs.d/themes/ryanakca-theme.el50
-rw-r--r--dot_emacs.tmpl1020
-rw-r--r--dot_forward1
-rw-r--r--dot_gbp.conf10
-rw-r--r--dot_gitconfig47
-rw-r--r--dot_gitconfig-debian3
-rw-r--r--dot_gtkrc-2.01
-rw-r--r--dot_inputrc4
-rw-r--r--dot_kshrc11
-rw-r--r--dot_latexmkrc3
-rw-r--r--dot_lbdb/lbdbrc.tmpl3
-rwxr-xr-xdot_local/lib/git-core/git-subrepo1897
-rw-r--r--dot_mailcap7
-rw-r--r--dot_mailrc8
-rw-r--r--dot_mutt/accounts.rc80
-rw-r--r--dot_mutt/accounts/9rak.queensu.ca/folders.rc5
-rw-r--r--dot_mutt/accounts/9rak.queensu.ca/format.rc5
-rw-r--r--dot_mutt/accounts/9rak.queensu.ca/main.rc12
-rw-r--r--dot_mutt/accounts/9rak.queensu.ca/private_read.rc.tmpl8
-rw-r--r--dot_mutt/accounts/9rak.queensu.ca/send.rc10
-rw-r--r--dot_mutt/accounts/rak.rak.ac/encrypted_savehooks.rc.asc48
-rw-r--r--dot_mutt/accounts/rak.rak.ac/folders.rc5
-rw-r--r--dot_mutt/accounts/rak.rak.ac/format.rc5
-rw-r--r--dot_mutt/accounts/rak.rak.ac/main.rc13
-rw-r--r--dot_mutt/accounts/rak.rak.ac/private_read.rc.tmpl7
-rw-r--r--dot_mutt/accounts/rak.rak.ac/send.rc8
-rw-r--r--dot_mutt/accounts/rkavanag.alumni.cmu.edu/encrypted_private_alias.rc.asc113
-rw-r--r--dot_mutt/accounts/rkavanag.alumni.cmu.edu/folders.rc4
-rw-r--r--dot_mutt/accounts/rkavanag.alumni.cmu.edu/format.rc5
-rw-r--r--dot_mutt/accounts/rkavanag.alumni.cmu.edu/main.rc12
-rw-r--r--dot_mutt/accounts/rkavanag.alumni.cmu.edu/private_read.rc.tmpl8
-rw-r--r--dot_mutt/accounts/rkavanag.alumni.cmu.edu/send.rc8
-rw-r--r--dot_mutt/accounts/ryan.kavanagh.mail.mcgill.ca/main.rc24
-rw-r--r--dot_mutt/accounts/ryan.kavanagh.mcgill.ca/main.rc24
-rw-r--r--dot_mutt/accounts/ryanakca.gmail.com/encrypted_private_savehooks.rc.asc43
-rw-r--r--dot_mutt/accounts/ryanakca.gmail.com/folders.rc8
-rw-r--r--dot_mutt/accounts/ryanakca.gmail.com/format.rc5
-rw-r--r--dot_mutt/accounts/ryanakca.gmail.com/main.rc11
-rw-r--r--dot_mutt/accounts/ryanakca.gmail.com/private_read.rc.tmpl7
-rw-r--r--dot_mutt/accounts/ryanakca.gmail.com/send.rc8
-rw-r--r--dot_mutt/accounts/ryank.mail.cs.mcgill.ca/encrypted_alias.rc.asc40
-rw-r--r--dot_mutt/accounts/ryank.mail.cs.mcgill.ca/folders.rc5
-rw-r--r--dot_mutt/accounts/ryank.mail.cs.mcgill.ca/format.rc5
-rw-r--r--dot_mutt/accounts/ryank.mail.cs.mcgill.ca/main.rc12
-rw-r--r--dot_mutt/accounts/ryank.mail.cs.mcgill.ca/private_read.rc.tmpl7
-rw-r--r--dot_mutt/accounts/ryank.mail.cs.mcgill.ca/send.rc8
-rw-r--r--dot_mutt/color.rc114
-rw-r--r--dot_mutt/encrypted_private_alias.rc.asc75
-rw-r--r--dot_mutt/gpg.rc11
-rw-r--r--dot_mutt/mailinglists.rc6
-rw-r--r--dot_mutt/news.rc71
-rw-r--r--dot_mutt/private_cache/bodies/.keep0
-rw-r--r--dot_mutt/score.rc24
-rw-r--r--dot_muttrc.tmpl163
-rw-r--r--dot_quiltrc-dpkg11
-rw-r--r--dot_reportbugrc20
-rw-r--r--dot_s-nail.rc165
-rw-r--r--dot_sbuildrc124
-rw-r--r--dot_screenlayout/executable_asteria-home.sh2
-rw-r--r--dot_screenlayout/executable_asteria-solo.sh2
-rwxr-xr-xdot_screenlayout/executable_zeta.rak.ac-home.sh2
-rwxr-xr-xdot_screenlayout/executable_zeta.rak.ac-solo.sh2
-rw-r--r--dot_screenlayout/executable_zeta.rak.ac-work.sh2
-rw-r--r--dot_screenlayout/private_executable_asteria-work.sh2
-rw-r--r--dot_signature2
-rw-r--r--dot_texmf/bibtex/bib/symlink_library.bib1
-rw-r--r--dot_texmf/web2c/updmap.cfg2
-rw-r--r--dot_tmux-mail.conf26
-rw-r--r--dot_tmux.conf66
-rw-r--r--dot_urxvt/ext/executable_font-size486
-rw-r--r--dot_vf1-bookmarks.txt4
-rw-r--r--dot_vf1rc4
-rw-r--r--dot_vim/colors/brookstream.vim83
-rw-r--r--dot_vim/plugin/gnupg.vim1226
-rw-r--r--dot_vimrc28
-rw-r--r--dot_xkb/keycodes/sunt6fix4
-rw-r--r--dot_xkb/symbols/dpr106
-rw-r--r--dot_xkb/symbols/icd111
-rw-r--r--dot_xkb/symbols/lalt_meta4
-rw-r--r--dot_xkb/symbols/myswap5
-rw-r--r--dot_xmonad/executable_build13
-rw-r--r--dot_xmonad/xmonad-config.cabal13
-rw-r--r--dot_xmonad/xmonad.hs.tmpl423
-rw-r--r--dot_zlogout5
-rw-r--r--dot_zsh/p10k.zsh1611
m---------dot_zsh/powerlevel10k0
-rw-r--r--dot_zshenv26
-rw-r--r--dot_zshrc.tmpl665
-rw-r--r--emacsen/Makefile48
m---------emacsen/dictem0
-rw-r--r--etc/hosts8
-rw-r--r--etc/iked.conf15
-rw-r--r--etc/mpd.conf43
-rwxr-xr-xetc/network-setup.sh10
-rwxr-xr-xetc/networkd-dispatcher/carrier.d/run-he-ipv6-update.sh5
-rwxr-xr-xetc/resolv.conf6
-rw-r--r--etc/schroot/experimental.sources.list2
-rw-r--r--etc/schroot/schroot.conf47
-rwxr-xr-xetc/schroot/setup.d/60append-apt-sources34
-rwxr-xr-xetc/schroot/setup.d/80append-apt-sources13
-rw-r--r--etc/smtpd.conf23
-rw-r--r--etc/systemd/network/10-wlp3s0.network5
-rw-r--r--etc/systemd/network/20-dummy1.netdev3
-rw-r--r--etc/systemd/network/20-dummy1.network6
-rw-r--r--etc/systemd/network/20-dummy3.netdev3
-rw-r--r--etc/systemd/network/20-dummy3.network6
-rw-r--r--etc/systemd/network/25-he-ipv6.netdev10
-rw-r--r--etc/systemd/network/25-he-ipv6.network9
-rw-r--r--etc/systemd/resolved.conf34
-rw-r--r--etc/systemd/system/fix-f4-led.service11
-rw-r--r--etc/systemd/system/he-ipv6-update.service26
-rw-r--r--etc/systemd/system/var-lib-mpd-music.automount9
-rw-r--r--etc/systemd/system/var-lib-mpd-music.mount11
l---------etc/wpa_supplicant/wpa_supplicant-wlp3s0.conf1
-rw-r--r--executable_dot_xinitrc.tmpl60
-rw-r--r--fonts/Brill_Typeface_2.06/00_Brill_Fonts_Read_Me_First.txt45
-rw-r--r--fonts/Brill_Typeface_2.06/Brill Bold 2.06 051.ttfbin0 -> 1620108 bytes
-rw-r--r--fonts/Brill_Typeface_2.06/Brill Bold Italic 2.06 051.ttfbin0 -> 1742508 bytes
-rw-r--r--fonts/Brill_Typeface_2.06/Brill Italic 2.06 051.ttfbin0 -> 1548620 bytes
-rw-r--r--fonts/Brill_Typeface_2.06/Brill Roman 2.06 051.ttfbin0 -> 1591208 bytes
-rw-r--r--fonts/Brill_Typeface_2.06/Brill_Fonts_End_User_License_Agreement_2.06.pdfbin0 -> 134734 bytes
-rw-r--r--fonts/Brill_Typeface_2.06/Brill_Typeface_User_Guide_2.06.pdfbin0 -> 855556 bytes
-rw-r--r--fonts/Courier-Prime/.DS_Storebin0 -> 6148 bytes
-rw-r--r--fonts/Courier-Prime/Courier Prime Bold Italic.ttfbin0 -> 91908 bytes
-rw-r--r--fonts/Courier-Prime/Courier Prime Bold.ttfbin0 -> 91368 bytes
-rw-r--r--fonts/Courier-Prime/Courier Prime Italic.ttfbin0 -> 96196 bytes
-rw-r--r--fonts/Courier-Prime/Courier Prime.ttfbin0 -> 98156 bytes
-rw-r--r--fonts/Courier-Prime/LICENSE/OFL-FAQ.txt369
-rw-r--r--fonts/Courier-Prime/LICENSE/OFL.txt94
-rw-r--r--fonts/Courier-Prime/Read me.txt44
-rw-r--r--fonts/Fell/Fell Types License.txt1
-rw-r--r--fonts/Fell/IMFeDPit29C.otfbin0 -> 251708 bytes
-rw-r--r--fonts/Fell/IMFeDPrm29C.otfbin0 -> 248448 bytes
-rw-r--r--fonts/Fell/IMFeENit29C.otfbin0 -> 156664 bytes
-rw-r--r--fonts/Fell/IMFeENrm29C.otfbin0 -> 195568 bytes
-rw-r--r--fonts/Fell/IMFeFCit29C.otfbin0 -> 137720 bytes
-rw-r--r--fonts/Fell/IMFeFCrm29C.otfbin0 -> 149380 bytes
-rw-r--r--fonts/Fell/IMFeFlow1.otfbin0 -> 157912 bytes
-rw-r--r--fonts/Fell/IMFeFlow2.otfbin0 -> 65000 bytes
-rw-r--r--fonts/Fell/IMFeGPit29C.otfbin0 -> 214508 bytes
-rw-r--r--fonts/Fell/IMFeGPrm29C.otfbin0 -> 243476 bytes
-rw-r--r--fonts/Fell/IMFePIit29C.otfbin0 -> 228676 bytes
-rw-r--r--fonts/Fell/IMFePIrm29C.otfbin0 -> 243104 bytes
-rw-r--r--fonts/Fell/IMFeTLrm29C.otfbin0 -> 64364 bytes
m---------fonts/Inconsolata-Hellenic0
-rw-r--r--fonts/InconsolataHellenic.otfbin0 -> 49784 bytes
-rw-r--r--fonts/Input_Fonts/ChangeLog.txt26
-rw-r--r--fonts/Input_Fonts/INSTALL.txt75
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Black.ttfbin0 -> 136996 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-BlackItalic.ttfbin0 -> 138452 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Bold.ttfbin0 -> 110016 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-BoldItalic.ttfbin0 -> 112608 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-ExtraLight.ttfbin0 -> 128552 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-ExtraLightItalic.ttfbin0 -> 130056 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Italic.ttfbin0 -> 111732 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Light.ttfbin0 -> 108884 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-LightItalic.ttfbin0 -> 111528 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Medium.ttfbin0 -> 110032 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-MediumItalic.ttfbin0 -> 112672 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Regular.ttfbin0 -> 109152 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Thin.ttfbin0 -> 123524 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-ThinItalic.ttfbin0 -> 125432 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Black.ttfbin0 -> 134740 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-BlackItalic.ttfbin0 -> 137820 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Bold.ttfbin0 -> 108680 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-BoldItalic.ttfbin0 -> 111232 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-ExtraLight.ttfbin0 -> 125892 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-ExtraLightItalic.ttfbin0 -> 128156 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Italic.ttfbin0 -> 110664 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Light.ttfbin0 -> 107928 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-LightItalic.ttfbin0 -> 110528 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Medium.ttfbin0 -> 108888 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-MediumItalic.ttfbin0 -> 111528 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Regular.ttfbin0 -> 108116 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Thin.ttfbin0 -> 122208 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-ThinItalic.ttfbin0 -> 124540 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Black.ttfbin0 -> 136664 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-BlackItalic.ttfbin0 -> 139304 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Bold.ttfbin0 -> 109520 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-BoldItalic.ttfbin0 -> 112252 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-ExtraLight.ttfbin0 -> 126944 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-ExtraLightItalic.ttfbin0 -> 129736 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Italic.ttfbin0 -> 111624 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Light.ttfbin0 -> 108872 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-LightItalic.ttfbin0 -> 111500 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Medium.ttfbin0 -> 109736 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-MediumItalic.ttfbin0 -> 112368 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Regular.ttfbin0 -> 109028 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Thin.ttfbin0 -> 123520 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-ThinItalic.ttfbin0 -> 126048 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Black.ttfbin0 -> 135792 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-BlackItalic.ttfbin0 -> 137732 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Bold.ttfbin0 -> 109768 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-BoldItalic.ttfbin0 -> 112328 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-ExtraLight.ttfbin0 -> 126980 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-ExtraLightItalic.ttfbin0 -> 128704 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Italic.ttfbin0 -> 111664 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Light.ttfbin0 -> 109028 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-LightItalic.ttfbin0 -> 111664 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Medium.ttfbin0 -> 109940 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-MediumItalic.ttfbin0 -> 112576 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Regular.ttfbin0 -> 109076 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Thin.ttfbin0 -> 123572 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-ThinItalic.ttfbin0 -> 125576 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Black.ttfbin0 -> 148424 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-BlackItalic.ttfbin0 -> 149656 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Bold.ttfbin0 -> 127568 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-BoldItalic.ttfbin0 -> 129756 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-ExtraLight.ttfbin0 -> 141648 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-ExtraLightItalic.ttfbin0 -> 143292 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Italic.ttfbin0 -> 129248 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Light.ttfbin0 -> 126748 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-LightItalic.ttfbin0 -> 129192 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Medium.ttfbin0 -> 127324 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-MediumItalic.ttfbin0 -> 129760 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Regular.ttfbin0 -> 126728 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Thin.ttfbin0 -> 136884 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-ThinItalic.ttfbin0 -> 138612 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Black.ttfbin0 -> 148300 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-BlackItalic.ttfbin0 -> 150920 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Bold.ttfbin0 -> 127772 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-BoldItalic.ttfbin0 -> 130140 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-ExtraLight.ttfbin0 -> 139744 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-ExtraLightItalic.ttfbin0 -> 141756 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Italic.ttfbin0 -> 129220 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Light.ttfbin0 -> 126880 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-LightItalic.ttfbin0 -> 129160 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Medium.ttfbin0 -> 127316 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-MediumItalic.ttfbin0 -> 129724 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Regular.ttfbin0 -> 126760 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Thin.ttfbin0 -> 135832 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-ThinItalic.ttfbin0 -> 137936 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Black.ttfbin0 -> 149144 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-BlackItalic.ttfbin0 -> 150508 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Bold.ttfbin0 -> 128232 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-BoldItalic.ttfbin0 -> 130744 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-ExtraLight.ttfbin0 -> 140096 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-ExtraLightItalic.ttfbin0 -> 142524 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Italic.ttfbin0 -> 129952 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Light.ttfbin0 -> 127292 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-LightItalic.ttfbin0 -> 129864 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Medium.ttfbin0 -> 128064 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-MediumItalic.ttfbin0 -> 130440 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Regular.ttfbin0 -> 127528 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Thin.ttfbin0 -> 136640 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-ThinItalic.ttfbin0 -> 138952 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Black.ttfbin0 -> 148456 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-BlackItalic.ttfbin0 -> 150056 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Bold.ttfbin0 -> 128096 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-BoldItalic.ttfbin0 -> 130520 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-ExtraLight.ttfbin0 -> 140284 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-ExtraLightItalic.ttfbin0 -> 141768 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Italic.ttfbin0 -> 129988 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Light.ttfbin0 -> 127292 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-LightItalic.ttfbin0 -> 129824 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Medium.ttfbin0 -> 128104 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-MediumItalic.ttfbin0 -> 130580 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Regular.ttfbin0 -> 127524 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Thin.ttfbin0 -> 136696 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-ThinItalic.ttfbin0 -> 138400 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Black.ttfbin0 -> 149380 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-BlackItalic.ttfbin0 -> 149348 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Bold.ttfbin0 -> 122344 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-BoldItalic.ttfbin0 -> 123560 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-ExtraLight.ttfbin0 -> 157552 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-ExtraLightItalic.ttfbin0 -> 159276 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Italic.ttfbin0 -> 148744 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Light.ttfbin0 -> 145800 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-LightItalic.ttfbin0 -> 149120 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Medium.ttfbin0 -> 145868 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-MediumItalic.ttfbin0 -> 149232 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Regular.ttfbin0 -> 145488 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Thin.ttfbin0 -> 148624 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-ThinItalic.ttfbin0 -> 150680 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Black.ttfbin0 -> 148964 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-BlackItalic.ttfbin0 -> 150276 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Bold.ttfbin0 -> 122348 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-BoldItalic.ttfbin0 -> 123620 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-ExtraLight.ttfbin0 -> 139300 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-ExtraLightItalic.ttfbin0 -> 140572 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Italic.ttfbin0 -> 123232 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Light.ttfbin0 -> 122356 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-LightItalic.ttfbin0 -> 123612 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Medium.ttfbin0 -> 122412 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-MediumItalic.ttfbin0 -> 149752 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Regular.ttfbin0 -> 122360 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Thin.ttfbin0 -> 148064 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-ThinItalic.ttfbin0 -> 151076 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Black.ttfbin0 -> 166048 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-BlackItalic.ttfbin0 -> 167256 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Bold.ttfbin0 -> 146316 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-BoldItalic.ttfbin0 -> 149764 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-ExtraLight.ttfbin0 -> 155476 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-ExtraLightItalic.ttfbin0 -> 158332 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Italic.ttfbin0 -> 149180 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Light.ttfbin0 -> 146356 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-LightItalic.ttfbin0 -> 149728 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Medium.ttfbin0 -> 146432 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-MediumItalic.ttfbin0 -> 149948 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Regular.ttfbin0 -> 145928 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Thin.ttfbin0 -> 148408 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-ThinItalic.ttfbin0 -> 151312 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Black.ttfbin0 -> 166296 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-BlackItalic.ttfbin0 -> 167356 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Bold.ttfbin0 -> 146216 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-BoldItalic.ttfbin0 -> 149696 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-ExtraLight.ttfbin0 -> 155864 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-ExtraLightItalic.ttfbin0 -> 157460 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Italic.ttfbin0 -> 149156 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Light.ttfbin0 -> 146496 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-LightItalic.ttfbin0 -> 149824 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Medium.ttfbin0 -> 146868 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-MediumItalic.ttfbin0 -> 150248 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Regular.ttfbin0 -> 145868 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Thin.ttfbin0 -> 148664 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-ThinItalic.ttfbin0 -> 150756 bytes
-rw-r--r--fonts/Input_Fonts/Input_Fonts/SETTINGS.txt12
-rw-r--r--fonts/Input_Fonts/LICENSE.txt30
-rw-r--r--fonts/Input_Fonts/README.txt155
-rw-r--r--fonts/Input_Fonts/Scripts/_template_Bold.txtbin0 -> 111068 bytes
-rw-r--r--fonts/Input_Fonts/Scripts/_template_BoldItalic.txtbin0 -> 113256 bytes
-rw-r--r--fonts/Input_Fonts/Scripts/_template_Italic.txtbin0 -> 113024 bytes
-rw-r--r--fonts/Input_Fonts/Scripts/_template_Regular.txtbin0 -> 110636 bytes
-rw-r--r--fonts/Input_Fonts/Scripts/inputCustomize.py274
-rw-r--r--fonts/Makefile24
-rw-r--r--fonts/Quando/OFL.txt97
-rw-r--r--fonts/Quando/Quando-Regular.ttfbin0 -> 119688 bytes
-rwxr-xr-xfonts/SourceCodePro_FontsOnly-1.017/LICENSE.txt93
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/OTF/.DS_Storebin0 -> 6148 bytes
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Black.otfbin0 -> 88912 bytes
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Bold.otfbin0 -> 92676 bytes
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-ExtraLight.otfbin0 -> 85084 bytes
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Light.otfbin0 -> 88600 bytes
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Medium.otfbin0 -> 89596 bytes
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Regular.otfbin0 -> 90056 bytes
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Semibold.otfbin0 -> 90032 bytes
-rwxr-xr-xfonts/SourceCodePro_FontsOnly-1.017/ReadMe.html72
-rwxr-xr-xfonts/SourceCodePro_FontsOnly-1.017/SourceCodeProReadMe.html269
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/TTF/.DS_Storebin0 -> 6148 bytes
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Black.ttfbin0 -> 120356 bytes
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Bold.ttfbin0 -> 120504 bytes
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-ExtraLight.ttfbin0 -> 121568 bytes
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Light.ttfbin0 -> 121284 bytes
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Medium.ttfbin0 -> 120244 bytes
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Regular.ttfbin0 -> 120548 bytes
-rw-r--r--fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Semibold.ttfbin0 -> 120252 bytes
-rw-r--r--fonts/Vollkorn/Fontlog.txt46
-rw-r--r--fonts/Vollkorn/OFL-FAQ.txt235
-rw-r--r--fonts/Vollkorn/OpenFontLicense.txt93
-rw-r--r--fonts/Vollkorn/Vollkorn-Bold.ttfbin0 -> 68608 bytes
-rw-r--r--fonts/Vollkorn/Vollkorn-BoldItalic.ttfbin0 -> 55208 bytes
-rw-r--r--fonts/Vollkorn/Vollkorn-Italic.ttfbin0 -> 57552 bytes
-rw-r--r--fonts/Vollkorn/Vollkorn-Regular.ttfbin0 -> 62004 bytes
-rwxr-xr-xfonts/convert.pe3
-rw-r--r--fonts/ubuntu-font-family-0.80/CONTRIBUTING.txt21
-rw-r--r--fonts/ubuntu-font-family-0.80/FONTLOG.txt274
-rw-r--r--fonts/ubuntu-font-family-0.80/LICENCE-FAQ.txt177
-rw-r--r--fonts/ubuntu-font-family-0.80/LICENCE.txt96
-rw-r--r--fonts/ubuntu-font-family-0.80/README.txt15
-rw-r--r--fonts/ubuntu-font-family-0.80/TRADEMARKS.txt4
-rw-r--r--fonts/ubuntu-font-family-0.80/Ubuntu-B.ttfbin0 -> 333616 bytes
-rw-r--r--fonts/ubuntu-font-family-0.80/Ubuntu-BI.ttfbin0 -> 356980 bytes
-rw-r--r--fonts/ubuntu-font-family-0.80/Ubuntu-C.ttfbin0 -> 350420 bytes
-rw-r--r--fonts/ubuntu-font-family-0.80/Ubuntu-L.ttfbin0 -> 415552 bytes
-rw-r--r--fonts/ubuntu-font-family-0.80/Ubuntu-LI.ttfbin0 -> 409608 bytes
-rw-r--r--fonts/ubuntu-font-family-0.80/Ubuntu-M.ttfbin0 -> 341324 bytes
-rw-r--r--fonts/ubuntu-font-family-0.80/Ubuntu-MI.ttfbin0 -> 366992 bytes
-rw-r--r--fonts/ubuntu-font-family-0.80/Ubuntu-R.ttfbin0 -> 353824 bytes
-rw-r--r--fonts/ubuntu-font-family-0.80/Ubuntu-RI.ttfbin0 -> 386440 bytes
-rw-r--r--fonts/ubuntu-font-family-0.80/UbuntuMono-B.ttfbin0 -> 191400 bytes
-rw-r--r--fonts/ubuntu-font-family-0.80/UbuntuMono-BI.ttfbin0 -> 216208 bytes
-rw-r--r--fonts/ubuntu-font-family-0.80/UbuntuMono-R.ttfbin0 -> 205748 bytes
-rw-r--r--fonts/ubuntu-font-family-0.80/UbuntuMono-RI.ttfbin0 -> 210216 bytes
-rw-r--r--fonts/ubuntu-font-family-0.80/copyright.txt5
-rw-r--r--packages-debian227
-rw-r--r--packages-openbsd104
-rw-r--r--private_dot_cups/lpoptions1
-rw-r--r--private_dot_gnupg/gpg-agent.conf.tmpl1
-rw-r--r--private_dot_gnupg/gpg.conf7
-rw-r--r--private_dot_netrc.tmpl12
-rw-r--r--private_dot_recoll/recoll.conf10
-rw-r--r--private_dot_ssh/authorized_keys.tmpl4
-rw-r--r--private_dot_ssh/cm_socket/.keep0
-rw-r--r--private_dot_ssh/config.tmpl123
-rw-r--r--private_dot_ssh/known_hosts.d/club.cc.cmu.edu4
-rw-r--r--private_dot_ssh/known_hosts.d/cs.mcgill.ca3
-rw-r--r--private_dot_ssh/known_hosts.d/debian406
-rw-r--r--private_dot_ssh/known_hosts.d/mit.edu12
-rw-r--r--private_dot_ssh/known_hosts.d/queensu.ca16
-rw-r--r--private_dot_ssh/known_hosts.d/rak.ac1
-rw-r--r--private_dot_ssh/known_hosts.d/rsync.net1
-rw-r--r--private_dot_ssh/known_hosts.d/sdf.org3
-rw-r--r--private_dot_ssh/private_keys/asteria/certs/eos.rak.ac.pub1
-rw-r--r--private_dot_ssh/private_keys/asteria/certs/hades.rak.ac.pub1
-rw-r--r--private_dot_ssh/private_keys/asteria/certs/rak.pub1
-rw-r--r--private_dot_ssh/private_keys/asteria/id_ed25519.pub1
-rw-r--r--private_dot_ssh/private_keys/demeter/certs/eos.rak.ac.pub1
-rw-r--r--private_dot_ssh/private_keys/demeter/certs/hades.rak.ac.pub1
-rw-r--r--private_dot_ssh/private_keys/demeter/certs/rak.pub1
-rw-r--r--private_dot_ssh/private_keys/demeter/id_ed25519.pub1
-rw-r--r--private_dot_ssh/private_keys/demeter/id_rsa.pub1
-rw-r--r--private_dot_ssh/private_keys/zeta/certs/eos.rak.ac.pub1
-rw-r--r--private_dot_ssh/private_keys/zeta/certs/hades.rak.ac.pub1
-rw-r--r--private_dot_ssh/private_keys/zeta/certs/rak.pub1
-rw-r--r--private_dot_ssh/private_keys/zeta/id_rsa.pub1
-rw-r--r--private_dot_ssh/private_known_hosts23
-rw-r--r--root/.kshrc5
-rw-r--r--root/.profile23
-rw-r--r--symlink_dot_xsession1
541 files changed, 17461 insertions, 545 deletions
diff --git a/.chezmoidata.toml b/.chezmoidata.toml
new file mode 100644
index 0000000..f0dd2c7
--- /dev/null
+++ b/.chezmoidata.toml
@@ -0,0 +1,3 @@
+latitude = "45.5017"
+longitude = "-73.5673"
+username.musicbrainz = "ryanakca"
diff --git a/.chezmoiignore b/.chezmoiignore
new file mode 100644
index 0000000..076df73
--- /dev/null
+++ b/.chezmoiignore
@@ -0,0 +1,92 @@
+# files in repo
+README
+etc
+emacsen
+Makefile
+fonts
+root
+packages-debian
+packages-openbsd
+.gitmodules
+chezmoi.toml.censored
+crontab
+
+{{- if ne .chezmoi.os "openbsd" }}
+# only install if on openbsd
+.urxvt/perl
+.xmonad/build
+.xmonad/xmonad-config.cabal
+{{- end }}
+
+# files in home
+.*~
+.**/*~
+.Xauthority
+.auth.gpg
+.bash_history
+.cache
+.config/GIMP
+.config/Recoll.org
+.config/Signal
+.config/borg
+.config/chezmoi
+.config/dconf
+.config/evince
+.config/gtk-3.0
+.config/htop
+.config/ncmpcpp/*
+!.config/ncmpcpp/config
+.config/pavucontrol.ini
+.config/pulse/*
+!.config/pulse/daemon.conf
+!.config/pulse/default.pa
+.emacs.d/auto-save-list
+.emacs.d/elpa/*
+!.emacs.d/elpa/gnupg
+!.emacs.d/elpa/gnupg/pubring.kbx
+.emacs.d/transient
+.fonts
+.gnupg/*
+!.gnupg/gpg-agent.conf.tmpl
+!.gnupg/gpg.conf
+.go
+.keychain
+.lbdb/*
+!.lbdb/lbdbrc
+.lesshst
+.local/share
+.lyrics
+.mozilla
+.mutt/cache
+.mutt/tmp
+.opam
+.recoll
+.ssh/known_hosts.old
+.ssh/keys/{{ .chezmoi.hostname }}/id_ed25519
+.ssh/keys/{{ .chezmoi.hostname }}/id_rsa
+.texlive202*
+.texmf/doc
+.texmf/fonts
+.texmf/tex
+.texmf/web2c/tlmgr.log
+.urxvt
+.urxvt/urxvt-*
+.viminfo
+.w3m
+.xkb/keymap
+.xmonad/layout
+.xmonad/prompt-history
+.xmonad/xmonad-x86_64-linux
+.xmonad/xmonad.errors
+.xmonad/xmonad.hi
+.xmonad/xmonad.o
+.xsession-errors
+.zcompdump
+.zsh/**/*.zwc
+.zsh/cache
+.zsh/history
+Documents
+Downloads
+News
+src
+tmp
diff --git a/.chezmoiremove b/.chezmoiremove
new file mode 100644
index 0000000..4ef2a8b
--- /dev/null
+++ b/.chezmoiremove
@@ -0,0 +1,7 @@
+.gnupg/dirmngr.conf
+.lbdbrc
+.pulse
+.screenlayout/zeta-home.sh
+.screenlayout/zeta-solo.sh
+.screenlayout/zeta-work.sh
+bin/mutt
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..d22bce5
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+*.gpg filter=gpg diff=gpg
+*.asc filter=gpg diff=gpg
diff --git a/.githooks/post-commit b/.githooks/post-commit
new file mode 100755
index 0000000..5752673
--- /dev/null
+++ b/.githooks/post-commit
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+if [ $(git diff -G PASS -i HEAD~1..HEAD | wc -l) != 0 ]; then
+ echo "#######################################################"
+ echo "# You committed something containing the string PASS. #"
+ echo "# Please make sure this is safe before pushing. #"
+ echo "#######################################################"
+ git diff -G PASS -i HEAD~1..HEAD
+fi
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c104f2e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,17 @@
+.*.swo
+.*.swp
+build
+SUBSTS.local
+SUBSTS.merged
+.mutt/alias.rc
+.mutt/alias-*.rc
+.mutt/savehooks.rc
+.ssh/id_rsa
+.ssh/id_ecdsa
+.ssh/id_rsa.lambda
+emacsen/make-*
+.irssi/_windowlist
+.irssi/certs/*
+.irssi/away.log
+.irssi/config.autosave
+.config/wpa_supplicant.conf
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..6c03175
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,9 @@
+[submodule "emacsen/dictem"]
+ path = emacsen/dictem
+ url = https://github.com/cheusov/dictem.git
+[submodule "dot_fonts/Inconsolata-Hellenic"]
+ path = fonts/Inconsolata-Hellenic
+ url = git://github.com/cosmix/Inconsolata-Hellenic.git
+[submodule "dot_zsh/powerlevel10k"]
+ path = dot_zsh/powerlevel10k
+ url = https://github.com/romkatv/powerlevel10k.git
diff --git a/Makefile b/Makefile
new file mode 100755
index 0000000..b520759
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,10 @@
+#!gmake -f
+
+udh: udh-master
+
+# As a backup for when master changes
+udh-%:
+ # -L to follow symlinks
+ rsync -avzL $(@:udh-%=%).debian.org:/var/lib/misc/ssh_known_hosts private_dot_ssh/known_hosts.d/debian
+
+.PHONY: udh
diff --git a/README b/README
index c1d6e78..7fbe04f 100644
--- a/README
+++ b/README
@@ -1,558 +1,33 @@
-DictEm is a Dictionary protocol client for GNU Emacs.
+dotfiles as of Decmeber 2021 use chezmoi instead of a 10+ year old
+Makefile.
-It uses a console dict client (http://sf.net/projects/dict) and
-implements all functions of the client part of DICT protocol
-(RFC-2229, www.dict.org), i.e. looking up words and definitions,
-obtaining information about available strategies, provided databases,
-information about DICT server etc.
+ cp chezmoi.toml.censored ~/.config/chezmoi/chezmoi.toml
-Unlike dictionary.el
-(http://www.myrkr.in-berlin.de/dictionary/index.html) DictEm widely
-uses autocompletion that is used for selecting dictionary and search
-strategy. Moreover, DictEm provides several hooks which may be used
-for buffer postprocessing. For example, inbuilt hyperlinking and
-highlighting mechanisms are based on this possibility. Another example
-is that information obtained from DICT server that is in HTML, ROFF or
-INFO format can be easily viewed by Emacs+DictEm if the user supplies
-appropriate conversion functions. Of course DictEm can be differently
-configured for different Emacs modes (major, minor or buffer
-oriented), that allows modularized access to all data serviced by DICT
-servers. This makes it ideal tool for translating articles between a
-series of foreign languages, browsing manuals and other tasks
-depending on Emacs mode user currently works with.
+After a checkout, don't forget to run
-Additionally DictEm supports accessing so called virtual dictionaries (a set
-of dictionaries provided by DICT server that user prefers to treat as
-a single one).
+ git config core.hooksPath .githooks
-Yet another feature DictEm provides is a set of useful functions with
-a help of which user can extend DictEm functionality such as to define
-new search strategies or even provide new functionality such as to use
-another sources of data other than DICT servers.
+To get the submodules setup, run
-See below for a set of example configuration and extensions.
+ git submodule init
+ git submodule update
-Also DictEm uses customization mechanism provided by Emacs that helps
-Emacs users to easily configure DictEm.
+To push to self-host and github, add the following to .git/config
-COPYING
-============
+[remote "origin"]
+ url = git@github.com:ryanakca/ryanakca-dotfiles.git
+ url = hades.rak.ac:public_git/ryanakca-dotfiles.git
+ fetch = +refs/heads/*:refs/remotes/origin/*
-See the file COPYING
+To install fonts:
-DOWNLOAD
-========
+ make -C fonts install
-Latest sources can be downloaded from
-http://sourceforge.net/projects/dictem
-or
-http://freshmeat.net/projects/dictem
+To install emacs packages:
-INSTALLATION
-============
+ make -C emacsen
+ make -C emacsen install
-* In order to uncompress dictem tarball run the following.
+To update Debian known hosts:
- tar xfv dictem-x.y.z.tar.gz
-
- If you read this file, you probably have already done this.
-
-* Change your current directory to dictem.
-
- cd dictem-x.y.z
-
-* Copy *.el file to the directory you want.
-
- cp *.el /path/to/emacs/el/files
-
-* Make sure that DICT client named dict
- (available at http://sf.net/projects/dict)
- is installed on your system.
- Console dict client is used by DictEm for accessing the DICT server.
- dict-1.9.14 or later is strongly recommended.
- If you'll set dictem-option-mime variable to t (read below),
- dict-1.10.3 or later MUST be used.
-
-REPORTING BUGS
-==============
-
- Please send all bug reports and suggestions directly to
- Aleksey Cheusov <vle@gmx.net>.
- Reporting bugs at sf.net is also good.
-
- Also note that there exists dict-beta@dict.org mailing list (low
- traffic) where you can ask questions about DICT protocol and
- software.
-
-CONFIGURING
-=============
-
-Customization group
--------------------
-
-Take note, that DictEm defines customization group "dictem".
-So, it may be easier for you to customize DictEm by running
-M-x customize-group <RET> dictem <RET>
-
-Manual Configuration
---------------------
-
-Ex.1
-
-The easiest configuration of dictem may look like this
-
-; Add to load-path variable a new directory with files of dictem
-(add-to-list 'load-path "/path/you/installed/dictem/to")
-
-; Loading dictem functions
-(require 'dictem)
-
-; Setting the dictionary server hostname.
-; This part is optional, if dictem-server is nil (the default value)
-; "dict" command line utility will use its ows config file
-; ~/.dictrc or PREFIX/etc/dict.conf.
-; Keeping dictem-server variable unset is recomended because
-; this allows to try _list of_ servers until connection is made,
-; see dict(1) for details.
-;(setq dictem-server "localhost")
-;(setq dictem-server "dict.org")
-
-
-; Setting the dictionary server port.
-; Setting dictem-port is usually not necessary because
-; most DICT servers use the default port 2628.
-;(setq dictem-port "2628")
-
-; Code necessary to obtain database and strategy list from DICT
-; server. As of version 0.90, dictem runs this function from
-; dictem-select-database and dictem-select-strategy if an
-; initialization was not completed or failed previously, that is
-; running dictem-initialize is optional
-(dictem-initialize)
-
-; Assigning hot keys for accessing DICT server
-
-; SEARCH = MATCH + DEFINE
-; Ask for word, database and search strategy
-; and show definitions found
-(global-set-key "\C-cs" 'dictem-run-search)
-
-; MATCH
-; Ask for word, database and search strategy
-; and show matches found
-(global-set-key "\C-cm" 'dictem-run-match)
-
-; DEFINE
-; Ask for word and database name
-; and show definitions found
-(global-set-key "\C-cd" 'dictem-run-define)
-
-; SHOW SERVER
-; Show information about DICT server
-(global-set-key "\C-c\M-r" 'dictem-run-show-server)
-
-; SHOW INFO
-; Show information about the database
-(global-set-key "\C-c\M-i" 'dictem-run-show-info)
-
-; SHOW DB
-; Show a list of databases provided by DICT server
-(global-set-key "\C-c\M-b" 'dictem-run-show-databases)
-
--------
-Ex.2
-
-There are a few functions that can make dictem look
-a bit nicer and be more functional. They should
-be added to special hooks like the following.
-
-; For creating hyperlinks on database names
-; and found matches.
-; Click on them with mouse-2
-(add-hook 'dictem-postprocess-match-hook
- 'dictem-postprocess-match)
-
-; For highlighting the separator between the definitions found.
-; This also creates hyperlink on database names.
-(add-hook 'dictem-postprocess-definition-hook
- 'dictem-postprocess-definition-separator)
-
-; For creating hyperlinks in dictem buffer
-; that contains definitions.
-(add-hook 'dictem-postprocess-definition-hook
- 'dictem-postprocess-definition-hyperlinks)
-
-; For creating hyperlinks in dictem buffer
-; that contains information about a database.
-(add-hook 'dictem-postprocess-show-info-hook
- 'dictem-postprocess-definition-hyperlinks)
-
--------
-Ex.3
-
-If you want to combine some databases in you own "virtual" dictionary,
-create them like this
-
-(setq dictem-user-databases-alist
- '(("_en-ru" . ("mueller7" "korolew_en-ru"))
- ("_en-en" . ("foldoc" "gcide" "wn"))
- ("_ru-ru" . ("beslov" "ushakov" "ozhegov" "brok_and_efr"))
- ("_unidoc" . ("susv3" "man" "info" "howto" "rfc"))
- ))
-
-As a result four new special database collections will be created
-and new names will appear when
-dictem-run function will ask you about database name.
-
--------
-Ex.4
-
-You can even create virtual dictionaries which consist of
-databases from different DICT server.
-The dict url form dict:///religion means 'dict' command line tool
-will be called without -h option, i.e. a list of dictionary servers
-from .dictrc (or dict.conf) will be used.
-
-(setq dictem-user-databases-alist
- '(("_en-ru" . ("dict://mova.org/mueller7"
- "dict://dict.org:2628/web1913"))
- ("_ru-ru" . ("beslov" "dict:///religion"))
- ))
-
-another example:
-
-(setq dictem-user-databases-alist
- `(("en-en" . ("dict://dict.org:2628/english"))
- ("en-ru" . ("dict:///en-ru"
- "dict://dict.org:2628/eng-rus"
- ))
- ))
-
--------
-Ex.5
-
-If your DICT server provides too many databases and most of which
-are of no interest for you, you can disable them
-and use only those specified in dictem-user-databases-alist variable.
-
-(setq dictem-use-user-databases-only t)
-
--------
-Ex.6
-
-Of course, you can assign your own key bindings in dictem buffer
-
-(define-key dictem-mode-map [tab] 'dictem-next-link)
-(define-key dictem-mode-map [(backtab)] 'dictem-previous-link)
-
--------
-Ex.7
-
-You are not limited to the default DICT server only.
-The following code will allow you to access any server you want.
-You'll be asked for host and port.
-
-; DEFINE
-(global-set-key
- "\C-c\M-d"
- '(lambda ()
- (interactive)
- (save-dictem
- (let* ((dictem-server (read-string "server: "
- dictem-server nil "dict.org"))
- (dictem-port (read-string "port: "
- (dictem-get-port) nil "2628")))
- (dictem-initialize)
- (call-interactively 'dictem-run-define)))))
-
-; MATCH
-(global-set-key
- "\C-c\M-m"
- '(lambda ()
- (interactive)
- (save-dictem
- (let* ((dictem-server (read-string "server: "
- dictem-server nil "dict.org"))
- (dictem-port (read-string "port: "
- (dictem-get-port) nil "2628")))
- (dictem-initialize)
- (call-interactively 'dictem-run-match)))))
-
-; SEARCH = MATCH+DEFINE
-(global-set-key
- "\C-c\M-s"
- '(lambda ()
- (interactive)
- (save-dictem
- (let* ((dictem-server (read-string "server: "
- dictem-server nil "dict.org"))
- (dictem-port (read-string "port: "
- (dictem-get-port) nil "2628")))
- (dictem-initialize)
- (call-interactively 'dictem-run-search)))))
-
-; SHOW INFO
-(global-set-key
- "\C-c\M-i"
- '(lambda ()
- (interactive)
- (save-dictem
- (let* ((dictem-server (read-string "server: "
- dictem-server nil "dict.org"))
- (dictem-port (read-string "port: "
- (dictem-get-port) nil "2628")))
- (dictem-initialize)
- (call-interactively 'dictem-run-show-info)))))
-
-; SHOW SERVER
-(global-set-key
- "\C-c\M-r"
- '(lambda ()
- (interactive)
- (save-dictem
- (let* ((dictem-server (read-string "server: "
- dictem-server nil "dict.org"))
- (dictem-port (read-string "port: "
- (dictem-get-port) nil "2628")))
- (dictem-initialize)
- (call-interactively 'dictem-run-show-server)))))
-
--------
-Ex.8
-
-Some databases may have specially formatted definitions,
-for example, HTML, MIME, DICF or ROFF formats.
-It is easy to postprocess them.
-
-; All functions from dictem-postprocess-each-definition-hook
-; will be run for each definition which in turn will be narrowed.
-; Current database name is kept in dictem-current-dbname variable.
-; The following code demonstrates how to highlight SUSV3 and ROFF
-; definitions.
-(add-hook 'dictem-postprocess-definition-hook
- 'dictem-postprocess-each-definition)
-
-; Function for highlighting definition from the database "susv3".
-(defun dictem-highlight-susv3-definition ()
- (cond ((string= "susv3" dictem-current-dbname)
- (goto-char (point-min))
- (while (search-forward-regexp
- "^ *[QWERTYUIOPASDFGHJKLZXCVBNM ]+$" nil t)
- (put-text-property
- (match-beginning 0) (match-end 0) 'face 'bold)
- ))))
-
-; Function to show roff-formatted text from the database "man".
-(require 'woman)
-(defun dictem-highlight-man-definition ()
- (cond ((string= "man" dictem-current-dbname)
- (goto-char (point-min))
- (while (search-forward-regexp "^ " nil t)
- (replace-match ""))
- (goto-char (point-min))
- (forward-line 2)
- (woman-decode-region (point) (point-max))
- )))
-
-(add-hook 'dictem-postprocess-each-definition-hook
- 'dictem-highlight-susv3-definition)
-(add-hook 'dictem-postprocess-each-definition-hook
- 'dictem-highlight-man-definition)
-
--------
-Ex.9
-
-; The dictem's top level function is 'dictem-run'.
-; By using it more advanced ELISP programmers
-; can create their own search scenaria. Look at this code.
-
-(dictem-run
- 'dictem-base-search
- "gcide" "apple" "lev")
-
-(dictem-run
- 'dictem-base-match
- "dict://mova.org/mueller7" "apple" "exact")
-
-(dictem-run
- 'dictem-base-define
- '("dict://mova.org/mueller7" "dict://dict.org/gcide")
- "apple" "exact")
-
-(dictem-run 'dictem-base-show-info "dict://dict.org/gcide")
-
-(let ((dictem-server "localhost"))
- (dictem-run
- '(lambda (a b c)
- (dictem-base-show-strategies nil nil nil)
- (dictem-base-show-databases nil nil nil)
- (dictem-base-show-server nil nil nil)
- )))
-
-(dictem-run
- '(lambda (a b c)
- (dictem-base-define
- '("man" "susv3")
- (dictem-read-query (thing-at-point 'word))
- nil ))
- nil nil)
-
-(let ((query (dictem-read-query (thing-at-point 'word))))
- (dictem-run
- `((lambda (a b c)
- (dictem-base-match
- '("gcide" "wn")
- ,query "exact"))
- (lambda (a b c)
- (dictem-base-search
- '("mueller7" "korolew_en-ru")
- ,query "word")))))
-
--------
-Ex.10
-
-By default dictem remembers the database name and strategy that
-was used last time.
-The dictem-select-database and dictem-select-strategy functions
-will use these values as a default in the minibuffer.
-If you dislike this behaviour, set variables
-dictem-default-database and/or dictem-default-strategy.
-
-(add-hook 'c-mode-common-hook
- '(lambda ()
- (interactive)
- (make-local-variable 'dictem-default-database)
- (setq dictem-default-database "man")
- ))
-
-The example above sets default database to "man"
-in C buffers.
-
--------
-Ex.11
-
-As of dictem-0.0.4 dictem-empty-initial-input customizable variable
-tells dictem-read-query whether to leave initial input empty or not.
-It is `nil' by default.
-For emulating behaviour of older releases, set it to `t'.
-
-(setq dictem-empty-initial-input t)
-
--------
-Ex. 12
-
-By default dictem-postprocess-definition-hyperlinks function
-assumes that hyperlinks have the following form: {foo} or {foo|bar}.
-Sometimes "{" and "}" characters are general characters
-in definitions. The following code changes "{" and "}" for
-"{link-beg " and " link-end" respectively
-inside definitions obtained from the databases "^infopage-..."
-
-; new function is used for creating hyperlinks
-; which works differently depending on database name
-(defun my-dictem-postprocess-definition-hyperlinks ()
- "Creating hyperlinks according to database name"
- (interactive)
- (cond (
- ((string-match "^infopage-" dictem-current-dbname)
- (let ((dictem-hyperlink-beginning "{link-beg ")
- (dictem-hyperlink-end " link-end}")
- )
- (dictem-postprocess-definition-hyperlinks)))
- (t (dictem-postprocess-definition-hyperlinks)))))
-
-; definitions from each database are processed separately
-(add-hook 'dictem-postprocess-definition-hook
- 'dictem-postprocess-each-definition)
-(add-hook 'dictem-postprocess-each-definition-hook
- 'my-dictem-postprocess-definition-hyperlinks)
-
--------
-Ex. 13
-
-You may want to remove "XXX definition[s] found" header
-from the DEFINE buffers.
-It may be done with a help of
-dictem-postprocess-definition-remove-header function.
-
-(add-hook 'dictem-postprocess-definition-hook
- 'dictem-postprocess-definition-remove-header)
-
--------
-Ex. 14
-
-As of version 0.7 dictem can handle dictionaries defined by user.
-This allows to use dictem not only for accessing DICT servers,
-but also for accesing users' databases.
-
-; DEFINE function for the database "mysuperdb"
-(defun dictem-mysuperdb-DEFINE (query)
- (cond
- ((string= query "apple") '("Apples grow on the trees"
- "Apple may be green, yellow or red"))
- ((string= query "potato") '("Potato is a vegetable"
- "Potato is a traditional Belarusian food"))
- (t (dictem-make-error
- 20 (format "No definitions for %s" query)))
- ))
-
-; MATCH function for the database "mysuperdb"
-(defun dictem-mysuperdb-MATCH (query strategy)
- ; the name of strategy is ignored
- (let ((apple (string-match query "apple"))
- (potato (string-match query "potato")))
- (cond
- ((and (string= strategy "exact") (string= query "apple"))
- '("apple"))
- ((and (string= strategy "exact") (string= query "potato"))
- '("potato"))
- ((and apple potato)
- '("apple" "potato"))
- (apple
- '("apple"))
- (potato
- '("potato"))
- (t (dictem-make-error
- 20 (format "No matches for %s/%s" query strategy)))
- )))
-
-; Initializing a list of user-defined databases
-(setq dictem-user-databases-alist
- `(("_en-en" . ("foldoc" "gcide" "wn"))
- ("_ru-ru" . ("beslov" "ushakov" "ozhegov" "brok_and_efr"))
- ,(dictem-make-userdb
- ; the name of the database
- "mysuperdb"
- ; short description
- "My super database"
- ; MATCH function
- (symbol-function 'dictem-mysuperdb-MATCH)
- ; DEFINE function
- (symbol-function 'dictem-mysuperdb-DEFINE))
- ))
-
--------
-Ex. 15
-
-Last years many dictionary servers provide too many bilingual dictionaries,
-most of which may be not very interesting for you.
-DictEm allows to exclude such dictionaries from an autocompletion menu
-by setting a list of regular expressions in dictem-exclude-databases
-variable.
-If, for example, you don't speak french and german and use
-dict://dict.org server, your config may look like this
-
-(setq dictem-server "dict.org")
-(setq dictem-exclude-databases '("ger-" "-ger" "fra-" "-fra"))
-(dictem-initialize)
-
-Note that, (dictem-initialize) is placed after initializing
-dictem-exclude-databases variable.
-
--------
-If you have read to this point and all the examples above seem easy,
-you are probably a ELISP Guru.
-So, I have nothing more to tell you ;-)
-Feel free to inspect the code, and I hope you'll find DictEm useful.
-
-Dict'em All! ;-)
+ gmake udh
diff --git a/afs/symlink_cclub b/afs/symlink_cclub
new file mode 100644
index 0000000..4f8faf5
--- /dev/null
+++ b/afs/symlink_cclub
@@ -0,0 +1 @@
+/afs/club.cc.cmu.edu/usr/rak
diff --git a/bin/executable_Internet.m3u.sh b/bin/executable_Internet.m3u.sh
new file mode 100644
index 0000000..b417f07
--- /dev/null
+++ b/bin/executable_Internet.m3u.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+#
+# Updates the internet radio playlists for MPD
+# Best run from a cronjob
+
+BASE=/var/lib/mpd/playlists/
+
+playlist() {
+ cat<<EOF > "${BASE}/radio-$1.m3u"
+#EXTM3U
+#EXTINF:-1,$2
+$3
+EOF
+}
+
+getstream() {
+ curl -s "$1" | grep '^File1=' | sed -e 's/File1=//g'
+}
+
+playlist "1920s" "1920s Radio Network" "$(getstream 'http://kara.fast-serv.com:8398/listen.pls')"
+# playlist "CFSF-FM" "CFSF-FM 99.3 (Sturgeon Falls)" 'http://listenlive.vistaradio.ca/CFSF'
+# playlist "CHYK-FM" "CHYK-FM 104.1 (Timmins)" 'http://rubix.wavestreamer.com:8015/stream/1/'
+playlist "CINN-FM" "CINN-FM 99.1 (Hearst)" 'http://stream2.statsradio.com:8050/stream'
+# playlist "CJFO-FM" "CJFO-FM 94.5 (Ottawa)" 'http://stream03.ustream.ca:8000/cjfofm128.mp3'
+playlist "CKGN-FM" "CKGN-FM 89.7 (Kapuskasing)" 'http://stream03.ustream.ca:80/ckgn128.mp3'
+playlist "WYEP" "WYEP 91.3 (Pittsburgh)" 'https://ais-sa3.cdnstream1.com/2557_128.mp3'
+playlist "WZUM" "WZUM 88.1 (Pittsburgh)" 'http://pubmusic.streamguys1.com/wzum-aac'
+playlist "Dismuke" "Radio Dismuke" "$(getstream 'https://early1900s.org/radiodismuke/radiodismuke.pls')"
+playlist "russhit" "99.6 Радио РуÑÑкий Хит" "$(curl -s http://ruhit.fm/player.htm | grep ruhit_64 | sed -e 's/.*="//g;s/".*//g')"
+
+# http://colombiacrossover.com/
+playlist "salsa.dura" "Colombia Salsa Dura" "$(getstream 'http://64.37.50.226:8054/listen.pls?sid=1')"
+
+# http://www.tenientiko.com/
+playlist "salsa.catedral" "La Catedral de la Salsa" "$(getstream 'http://176.31.120.166:4450/listen.pls?sid=1')"
+
+# http://www.rockolapegassera.com
+playlist "cumbia.rockola" "Rockola Pegassera 107.9" "$(getstream 'http://54.39.19.215:8004/listen.pls?sid=1')"
+
+playlist "salsa.metro" "El Metro Salsero" 'http://s5.voscast.com:7516/stream'
diff --git a/bin/executable_copyright.awk b/bin/executable_copyright.awk
new file mode 100755
index 0000000..371a9c2
--- /dev/null
+++ b/bin/executable_copyright.awk
@@ -0,0 +1,122 @@
+#!/usr/bin/gawk -f
+# Copyright (C) 2013 Ryan Kavanagh <rak@debian.org>
+# Given a series of lines in the format
+# Copyright (c) NNNN, MMMM-MMMM, ..., NNNN John Smith <jsmith@example.org>
+# group years and emails by person.
+
+{
+ match($0, /.*Copyright.*[0-9][,]? +/);
+ DATE_LENGTH = RLENGTH;
+ match($0, /<.*>/);
+ EMAIL_START = RSTART;
+ if (RLENGTH != -1) {
+ NAME = substr($0, DATE_LENGTH + 1, EMAIL_START - DATE_LENGTH - 2);
+ EMAIL = substr($0, EMAIL_START);
+ } else {
+ # No email on this line
+ NAME = substr($0, DATE_LENGTH + 1);
+ }
+ match($0, /.*Copyright +\([cC]\) +/);
+ DATE_START = RLENGTH + 1;
+ YEARS = substr($0, DATE_START, DATE_LENGTH - DATE_START);
+ gsub(/, +/, " ", YEARS);
+ gsub(/,/, " ", YEARS);
+ people_years[NAME] = people_years[NAME] " " YEARS;
+ if (EMAIL_LENGTH != -1) {
+ email_pattern = "/.*" EMAIL ".*/";
+ if (!(NAME in people_emails)) {
+ people_emails[NAME] = EMAIL;
+ } else if (!match(people_emails[NAME], EMAIL)) {
+ people_emails[NAME] = people_emails[NAME] "," EMAIL;
+ }
+ }
+} END {
+ for (person in people_years) {
+ delete years_array;
+ split(people_years[person], years_array);
+ # Split any hyphenated years;
+ for (year in years_array) {
+ if (years_array[year] ~ /[0-9]+-[0-9]+/) {
+ delete split_year;
+ split(years_array[year], split_year, /-/);
+ years_array[year] = split_year[1];
+ if (split_year[1] != split_year[2]) {
+ # Make sure it isn't some crappy input like 2012-2012
+ for (j = 1; j <= split_year[2] - split_year[1]; j++) {
+ years_array[length(years_array) + 1] = \
+ years_array[year] + j;
+ }
+ }
+ }
+ }
+ # Sort the years
+ asort(years_array);
+ # Delete any duplicates:
+ for (i = 1; i <= length(years_array); i++) {
+ if (i > 1 && years_array[i-1] == years_array[i]) {
+ # Delete years_array[i-1] instead of years_array[i] so that we
+ # can still check the next year with ease
+ delete years_array[i-1];
+ }
+ }
+ # Final sort
+ asort(years_array);
+ # Remove duplicates and generate year string
+ year_string = "";
+ # Force AWK to access the years in order
+ added_hyphen = 0;
+ for (i = 1; i <= length(years_array); i++) {
+ if (i > 1) {
+ if (years_array[i - 1] != years_array[i]) {
+ # added_hyphen tracks if the last character in the string is
+ # a hyphen
+ if ((!added_hyphen) && (years_array[i - 1] == years_array[i] - 1)) {
+ # year_string isn't terminated by a hyphen, and the year
+ # at i-1 is one less than the current one
+ year_string = year_string "-";
+ added_hyphen = 1;
+ } else if (added_hyphen && (years_array[i - 1] != years_array[i] - 1)) {
+ # The string is terminated by a hyphen, but the current
+ # year does not immediately follow the preceeding
+ # one
+ year_string = year_string years_array[i-1] ", " years_array[i];
+ added_hyphen = 0;
+ } else if (!added_hyphen) {
+ year_string = year_string ", " years_array[i];
+ }
+ }
+ } else {
+ year_string = years_array[i];
+ }
+ }
+ # We've added a hyphen, but run out of years to check, terminate it
+ if (added_hyphen) {
+ year_string = year_string years_array[length(years_array)];
+ }
+ final_line[years_array[length(years_array)]][length(years_array)][person] = \
+ "Copyright (C) " year_string "\t" person " " people_emails[person];
+ }
+ # We can't sort the years indices with asorti because we want a numerical,
+ # not lexicographic sort of the indices.
+ j = 0;
+ delete years_sorted;
+ for (i in final_line) years_sorted[j++] = i+0;
+ n_years_entries = asort(years_sorted);
+ # And output the lines with the most recent contributor first
+ for (y = n_years_entries; y >= 1; y--) {
+ # Sort the contributors with most recent contribution in year
+ # by_year[y] by number of years contributed:
+ j = 0;
+ delete contributions_sorted;
+ for (i in final_line[years_sorted[y]]) contributions_sorted[j++] = i+0;
+ n_contrib_entries = asort(contributions_sorted);
+ for (c = n_contrib_entries; c >= 1; c--) {
+ # Finally, sort by contributor name
+ asorti(final_line[years_sorted[y]][contributions_sorted[c]], by_person);
+ # And output the lines in alphabetical order by person name
+ for (n = 1; n <= length(by_person); n++) {
+ print final_line[years_sorted[y]][contributions_sorted[c]][by_person[n]];
+ }
+ }
+ }
+}
diff --git a/bin/executable_do_blue.sh b/bin/executable_do_blue.sh
new file mode 100755
index 0000000..b908d14
--- /dev/null
+++ b/bin/executable_do_blue.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+pacmd list-modules module-bluez5-discover | grep -q module-bluez5-discover || \
+ pacmd load-module module-bluez5-discover
+echo "connect CD:0D:69:69:9A:1B" | bluetoothctl
diff --git a/bin/executable_do_dac.sh b/bin/executable_do_dac.sh
new file mode 100755
index 0000000..7ae913e
--- /dev/null
+++ b/bin/executable_do_dac.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+USB_CARD="alsa_card.usb-FiiO_DigiHug_USB_Audio-01"
+USB_SINK="alsa_output.usb-FiiO_DigiHug_USB_Audio-01.iec958-stereo"
+SPEAKERS="alsa_output.pci-0000_00_1b.0.analog-stereo"
+
+pacmd set-sink-mute "${SPEAKERS}" 1
+pacmd set-card-profile "${USB_CARD}" output:iec958-stereo
+pacmd set-sink-mute "${USB_SINK}" 0
+
+if pacmd list-modules | grep module-ladspa-sink; then
+ pacmd unload-module module-ladspa-sink
+fi
+pacmd load-module module-ladspa-sink sink_name=binaural sink_master="${USB_SINK}" plugin=bs2b label=bs2b control=700,4.5
+
+for s in $(pacmd list-sink-inputs | awk '$1 == "index:" {print $2}')
+do
+ pacmd move-sink-input $s "${USB_SINK}" >/dev/null 2>&1
+done
diff --git a/bin/executable_do_speakers.sh b/bin/executable_do_speakers.sh
new file mode 100755
index 0000000..84b82e1
--- /dev/null
+++ b/bin/executable_do_speakers.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+USB_CARD="alsa_card.usb-FiiO_DigiHug_USB_Audio-01"
+USB_SINK="alsa_output.usb-FiiO_DigiHug_USB_Audio-01.iec958-stereo"
+SPEAKERS="alsa_output.pci-0000_00_1b.0.analog-stereo"
+
+pacmd set-sink-mute "${USB_SINK}" 1
+pacmd set-sink-mute "${SPEAKERS}" 0
+
+for s in $(pacmd list-sink-inputs | awk '$1 == "index:" {print $2}')
+do
+ pacmd move-sink-input $s "${SPEAKERS}" >/dev/null 2>&1
+done
diff --git a/bin/executable_icd b/bin/executable_icd
new file mode 100755
index 0000000..367b87f
--- /dev/null
+++ b/bin/executable_icd
@@ -0,0 +1,112 @@
+#!/bin/sh
+
+XKB_DIR=${HOME}/.xkb
+[ -d ${XKB_DIR}/keymap ] || mkdir -p ${XKB_DIR}/keymap
+
+GLOBAL_OPTIONS="\
+ -I${XKB_DIR} \
+ -layout icd,ru \
+ -variant icd, \
+ -option terminate:ctrl_alt_bksp \
+ -option nbsp:level3n \
+ -option lalt_meta:lalt_meta \
+ -option grp:shifts_toggle"
+
+LAPTOP_OPTIONS="\
+ ${GLOBAL_OPTIONS} \
+ -option lv3:ralt_switch_multikey"
+
+KIN_OPTIONS="\
+ ${GLOBAL_OPTIONS} \
+ -option lv3:switch \
+ -option caps:swapescape"
+
+SUN_OPTIONS="\
+ ${GLOBAL_OPTIONS} \
+ -geometry sun(type6unix) \
+ -option caps:escape \
+ -option lv3:menu_switch \
+ -option myswap:switch_lalt_lsuper"
+
+ERG_OPTIONS="\
+ ${GLOBAL_OPTIONS} \
+ -option lv3:switch \
+ -option caps:escape"
+
+
+case `uname` in
+ OpenBSD)
+ LAPTOP_ID=$(xinput | grep "/dev/wskbd" | sed -e 's/.*id=\([0-9]\+\).*/\1/g')
+ ;;
+ Linux)
+ LAPTOP_ID=$(xinput | grep "AT Translated Set 2 keyboard" | sed -e 's/.*id=\([0-9]\+\).*/\1/g')
+ KIN_USB_ID=$(lsusb | grep -i "Kinesis Advantage Pro" | awk '{ print $6 }')
+ ERG_USB_ID=$(lsusb | grep -i "feed:1307" | awk '{ print $6 }')
+ SUN_USB_ID=$(lsusb | grep -i "Sun Microsystems, Inc. Type 6 Keyboard" | awk '{ print $6 }')
+ ;;
+ *)
+ ;;
+esac
+
+echo "Setting up laptop"
+setxkbmap ${LAPTOP_OPTIONS} -device ${LAPTOP_ID} -print > ${XKB_DIR}/keymap/icd.laptop
+# xkbcomp -I${HOME}/.xkb -i ${LAPTOP_ID} -synch \
+xkbcomp -I${HOME}/.xkb -synch \
+ ${HOME}/.xkb/keymap/icd.laptop $DISPLAY # 2> /dev/null
+
+if [ "x${KIN_USB_ID}" != "x" ]; then
+ echo "Setting up Kinesis"
+ KIN_XINPUT_ID=$(xinput | grep ${KIN_USB_ID} | sed -e 's/.*id=\([0-9]\+\).*/\1/g')
+ for XID in $KIN_XINPUT_ID; do
+ echo $XID
+ setxkbmap \
+ -I${XKB_DIR} \
+ -device ${XID} \
+ ${KIN_OPTIONS} \
+ -print | sed -e 's@+ctrl(nocaps)@@g;s@bksp)@bksp)+lalt_meta(lalt_meta)@g' > ${HOME}/.xkb/keymap/icd.kin
+ xkbcomp -I${HOME}/.xkb -i ${XID} -synch \
+ ${HOME}/.xkb/keymap/icd.kin ${DISPLAY} # 2> /dev/null
+ done
+ xkbcomp -I${HOME}/.xkb -synch \
+ ${HOME}/.xkb/keymap/icd.kin ${DISPLAY} # 2> /dev/null
+ xmodmap -e "remove mod1 = Alt_R"
+ xmodmap -e "add mod4 = Alt_R"
+fi
+
+if [ "x${SUN_USB_ID}" != "x" ]; then
+ echo "Setting up Sun Type 6"
+ SUN_XINPUT_ID=$(xinput | grep ${SUN_USB_ID} | sed -e 's/.*id=\([0-9]\+\).*/\1/g')
+ echo "ID: ${SUN_XINPUT_ID}"
+ for XID in $SUN_XINPUT_ID; do
+ echo $XID
+ setxkbmap \
+ -I${XKB_DIR} \
+ -device ${XID} \
+ ${SUN_OPTIONS} \
+ -print | sed -e '/xkb_keycodes/s/"[[:space:]]/+sunt6fix&/' > ${HOME}/.xkb/keymap/icd.sun
+ xkbcomp -I${HOME}/.xkb -i ${XID} -synch \
+ ${HOME}/.xkb/keymap/icd.sun ${DISPLAY} # 2> /dev/null
+ done
+fi
+
+echo ${ERG_USB_ID}
+if [ "x${ERG_USB_ID}" != "x" ]; then
+ echo "Setting up ergodox"
+ ERG_XINPUT_ID=$(xinput | grep "ErgoDox EZ" | grep keyboard | sed -e 's/.*id=\([0-9]\+\).*/\1/g')
+ echo "ID: ${ERG_XINPUT_ID}"
+ for XID in $ERG_XINPUT_ID; do
+ echo $XID
+ setxkbmap \
+ -I${XKB_DIR} \
+ -device ${XID} \
+ ${ERG_OPTIONS} \
+ -print > ${HOME}/.xkb/keymap/icd.erg
+ # -print | sed -e 's@+group(shifts_toggle)@+ctrl(nocaps)&@g' > ${HOME}/.xkb/keymap/icd.erg
+ # xkbcomp -I${HOME}/.xkb -i ${XID} -synch \
+ xkbcomp -I${HOME}/.xkb -synch \
+ ${HOME}/.xkb/keymap/icd.erg ${DISPLAY} # 2> /dev/null
+ done
+fi
+
+
+echo icd > ${HOME}/.xmonad/layout
diff --git a/bin/executable_lbdb-fetchaddr-wrapper b/bin/executable_lbdb-fetchaddr-wrapper
new file mode 100755
index 0000000..bb1270a
--- /dev/null
+++ b/bin/executable_lbdb-fetchaddr-wrapper
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if command -v lbdb-fetchaddr > /dev/null; then
+ { tee /dev/fd/3 | lbdb-fetchaddr >&2; } 3>&1
+else
+ cat
+fi
diff --git a/bin/executable_mailx-alias b/bin/executable_mailx-alias
new file mode 100755
index 0000000..c1d961a
--- /dev/null
+++ b/bin/executable_mailx-alias
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+MUTT_ALIAS=${HOME}/.mutt/alias.rc
+MAILX_ALIAS=${HOME}/.mailx-aliases.rc
+
+awk '{
+ NAME="";
+ for (i = 3; i < NF; i++) {
+ NAME=NAME " " $i;
+ };
+ NAME = substr(NAME, 2);
+ print "alias", $2, "\"" $NF, "(" NAME ")\"";
+}' $MUTT_ALIAS > $MAILX_ALIAS
diff --git a/bin/executable_mice.sh b/bin/executable_mice.sh
new file mode 100755
index 0000000..794f86f
--- /dev/null
+++ b/bin/executable_mice.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# Synaptics:
+synclient HorizTwoFingerScroll=0 || true
+synclient HorizEdgeScroll=1 || true
+# Enable circular scrolling with top edge activating
+synclient CircularScrolling=1 || true
+synclient CircScrollTrigger=1 || true
+# One finger is left click
+synclient TapButton1=1 || true
+# Two is right click
+synclient TapButton2=3 || true
+# Three is middle click
+synclient TapButton3=2 || true
+# Enable coasting
+synclient CoastingSpeed=5
+synclient CoastingFriction=30
+
+trackball=$(xinput | grep "Kensington Expert Wireless TB" | grep pointer | sed -e 's/.*id=//g;s/\s\+.*//g')
+if [ "x${trackball}" != "x" ]; then
+ xinput set-button-map "${trackball}" 1 2 8 4 5 6 7 3 9 10 11 12 13 14 15 16
+ xinput set-prop "${trackball}" "libinput Accel Speed" 0.25
+fi
+
+
diff --git a/bin/executable_mpd_only.sh b/bin/executable_mpd_only.sh
new file mode 100755
index 0000000..468c6a5
--- /dev/null
+++ b/bin/executable_mpd_only.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+set -e
+
+systemctl --user stop pulseaudio.socket
+mpc enable "DigiHug USB Audio"
+mpc disable "My Pulse Output"
diff --git a/bin/executable_mpd_others.sh b/bin/executable_mpd_others.sh
new file mode 100755
index 0000000..b27e11e
--- /dev/null
+++ b/bin/executable_mpd_others.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+set -e
+
+systemctl --user start pulseaudio.socket
+systemctl --user start pulseaudio.service
+mpc disable "DigiHug USB Audio"
+mpc enable "My Pulse Output"
+pacmd load-module module-udev-detect
+${HOME}/bin/do_dac.sh
diff --git a/bin/executable_mutt-fetchbug b/bin/executable_mutt-fetchbug
new file mode 100755
index 0000000..93ffc58
--- /dev/null
+++ b/bin/executable_mutt-fetchbug
@@ -0,0 +1,161 @@
+#!/usr/bin/perl -w
+#
+# mutt-fetchbug, extensively based off of
+# mutt-notmuch - notmuch (of a) helper for Mutt
+#
+# Copyright: © 2011 Stefano Zacchiroli <zack@upsilon.cc>
+# License: GNU General Public License (GPL), version 3 or above
+#
+# Differences between mutt-notmuch and mutt-fetchbug are
+# Copyright: © 2012 Ryan Kavanagh <rak@debian.org>
+# License: GNU General Public License (GPL), version 3 or above
+#
+# See the bottom of this file for more documentation.
+# A manpage can be obtained by running "pod2man mutt-fetchbug > mutt-fetchbug.1"
+
+use strict;
+use warnings;
+
+use File::Path;
+use Getopt::Long;
+use Pod::Usage;
+
+# search($btsmbox, $query)
+# Fetch bugs matching $query with bts; store results in $btsmbox
+sub search($$) {
+ my ($btsmbox, $query) = @_;
+
+ system("bts --cache-mode=mbox cache $query"
+ . " && ln -fs ~/.cache/devscripts/bts/$query.mbox $btsmbox");
+}
+
+sub search_action($$@) {
+ my ($interactive, $btsmbox, @params) = @_;
+
+ if (! $interactive) {
+ fetch($btsmbox, join(' ', @params));
+ } else {
+ my $query = "";
+ my $done = 0;
+ while (! $done) {
+ print "bug number ('?' for man): ";
+ chomp($query = <STDIN>);
+ if ($query eq "?") {
+ system("man bts");
+ } elsif ($query eq "") {
+ $done = 1; # quit doing nothing
+ } else {
+ search($btsmbox, $query);
+ $done = 1;
+ }
+ }
+ }
+}
+
+sub die_usage() {
+ my %podflags = ( "verbose" => 1,
+ "exitval" => 2 );
+ pod2usage(%podflags);
+}
+
+sub main() {
+ my $btsmbox = "$ENV{HOME}/.cache/mutt_btsresults";
+ my $interactive = 0;
+ my $help_needed = 0;
+
+ my $getopt = GetOptions(
+ "h|help" => \$help_needed,
+ "o|output-mbox=s" => \$btsmbox,
+ "p|prompt" => \$interactive);
+ if (! $getopt || $#ARGV < 0) { die_usage() };
+ my ($action, @params) = ($ARGV[0], @ARGV[1..$#ARGV]);
+
+ if ($help_needed) {
+ die_usage();
+ } elsif ($action eq "search" && $#ARGV == 0 && ! $interactive) {
+ print STDERR "Error: no search term provided\n\n";
+ die_usage();
+ } elsif ($action eq "search") {
+ search_action($interactive, $btsmbox, @params);
+ } else {
+ die_usage();
+ }
+}
+
+main();
+
+__END__
+
+=head1 NAME
+
+mutt-fetchbug - 'bts show' frontend for Mutt
+
+=head1 SYNOPSIS
+
+=over
+
+=item B<mutt-fetchbug> [I<OPTION>]... search [I<SEARCH-TERM>]...
+
+=back
+
+=head1 DESCRIPTION
+
+mutt-fetchbug is a frontend to the 'bts show' command (Debian package:
+devscripts) designed to fetch bugs and place them in a predefined mbox. The
+search term should typically be a bug number.
+
+=head1 OPTIONS
+
+=over 4
+
+=item -o DIR
+
+=item --output-mbox DIR
+
+Store search results as (symlink) mbox MBOX. Beware: MBOX will be overwritten.
+(Default: F<~/.cache/mutt_btsresults/>)
+
+=item -p
+
+=item --prompt
+
+Instead of using command line search terms, prompt the user for them (only for
+"search").
+
+=item -h
+
+=item --help
+
+Show usage information and exit.
+
+=back
+
+=head1 INTEGRATION WITH MUTT
+
+mutt-fetchbug can be used to integrate 'bts show' with the Mutt mail user agent
+(unsurprisingly, given the name). To that end, you should define the following
+macros in your F<~/.muttrc> (replacing F<~/bin/mutt-fetchbug> for the actual
+location of mutt-fetchbug on your system):
+
+ macro index <F7> \
+ "<enter-command>unset wait_key<enter><shell-escape>~/bin/mutt-fetchbug --prompt search<enter><change-folder-readonly>~/.cache/mutt_btsresults<enter><enter-command>set wait_key<enter>" \
+ "fetch bug(s) (using bts show)"
+
+The macro (activated by <F7>) will prompt the user for a bug number and then
+jump to a temporary mbox showing the fetched bug.
+
+=head1 SEE ALSO
+
+mutt(1), bts(1)
+
+=head1 AUTHOR
+
+mutt-fetchbug is extensively based off of 'mutt-notmuch', which is
+Copyright: (C) 2011 Stefano Zacchiroli <zack@upsilon.cc>.
+
+All differences between mutt-fetchbug and mutt-notmuch are
+Copyright (C) 2012 Ryan Kavanagh <rak@debian.org>
+
+License: GNU General Public License (GPL), version 3 or higher
+
+=cut
diff --git a/bin/executable_mutt_bgrun b/bin/executable_mutt_bgrun
new file mode 100755
index 0000000..f833bab
--- /dev/null
+++ b/bin/executable_mutt_bgrun
@@ -0,0 +1,115 @@
+#!/bin/sh
+# @(#) mutt_bgrun $Revision: 1.4 $
+
+# mutt_bgrun - run an attachment viewer from mutt in the background
+# Copyright (C) 1999-2002 Gary A. Johnson
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# SYNOPSIS
+# mutt_bgrun viewer [viewer options] file
+#
+# DESCRIPTION
+# Mutt invokes external attachment viewers by writing the
+# attachment to a temporary file, executing the pipeline specified
+# for that attachment type in the mailcap file, waiting for the
+# pipeline to terminate, writing nulls over the temporary file,
+# then deleting it. This causes problems when using graphical
+# viewers such as qvpview and acroread to view attachments.
+#
+# If qvpview, for example, is executed in the foreground, the mutt
+# user interface is hung until qvpview exits, so the user can't do
+# anything else with mutt until he or she finishes reading the
+# attachment and exits qvpview. This is especially annoying when
+# a message contains several MS Office attachments--one would like
+# to have them all open at once.
+#
+# If qvpview is executed in the background, it must be given
+# enough time to completely read the file before returning control
+# to mutt, since mutt will then obliterate the file. Qvpview is
+# so slow that this time can exceed 20 seconds, and the bound is
+# unknown. So this is again annoying.
+#
+# The solution provided here is to invoke the specified viewer
+# from this script after first copying mutt's temporary file to
+# another temporary file. This script can then quickly return
+# control to mutt while the viewer can take as much time as it
+# needs to read and render the attachment.
+#
+# EXAMPLE
+# To use qvpview to view MS Office attachments from mutt, add the
+# following lines to mutt's mailcap file.
+#
+# application/msword; mutt_bgrun qvpview %s
+# application/vnd.ms-excel; mutt_bgrun qvpview %s
+# application/vnd.ms-powerpoint; mutt_bgrun qvpview %s
+#
+# AUTHOR
+# Gary A. Johnson
+# <garyjohn@spk.agilent.com>
+#
+# ACKNOWLEDGEMENTS
+# My thanks to the people who have commented on this script and
+# offered solutions to shortcomings and bugs, especially Edmund
+# GRIMLEY EVANS <edmundo@rano.org> and Andreas Somogyi
+# <aso@somogyi.nu>.
+
+prog=${0##*/}
+
+# Check the arguments first.
+
+if [ "$#" -lt "2" ]
+then
+ echo "usage: $prog viewer [viewer options] file" >&2
+ exit 1
+fi
+
+# Separate the arguments. Assume the first is the viewer, the last is
+# the file, and all in between are options to the viewer.
+
+viewer="$1"
+shift
+
+while [ "$#" -gt "1" ]
+do
+ options="$options $1"
+ shift
+done
+
+file=$1
+
+# Create a temporary directory for our copy of the temporary file.
+#
+# This is more secure than creating a temporary file in an existing
+# directory.
+
+tmpdir=/tmp/$LOGNAME$$
+umask 077
+mkdir "$tmpdir" || exit 1
+tmpfile="$tmpdir/${file##*/}"
+
+# Copy mutt's temporary file to our temporary directory so that we can
+# let mutt overwrite and delete it when we exit.
+
+cp "$file" "$tmpfile"
+
+# Run the viewer in the background and delete the temporary files when done.
+
+(
+ "$viewer" $options "$tmpfile"
+ sleep 2
+ rm -f "$tmpfile"
+ rmdir "$tmpdir"
+) &
diff --git a/bin/executable_mutt_oauth2.py b/bin/executable_mutt_oauth2.py
new file mode 100755
index 0000000..f67364e
--- /dev/null
+++ b/bin/executable_mutt_oauth2.py
@@ -0,0 +1,419 @@
+#!/usr/bin/env python3
+#
+# Mutt OAuth2 token management script, version 2020-08-07
+# Written against python 3.7.3, not tried with earlier python versions.
+#
+# Copyright (C) 2020 Alexander Perlis
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+'''Mutt OAuth2 token management'''
+
+import sys
+import json
+import argparse
+import urllib.parse
+import urllib.request
+import imaplib
+import poplib
+import smtplib
+import base64
+import secrets
+import hashlib
+import time
+from datetime import timedelta, datetime
+from pathlib import Path
+import socket
+import http.server
+import subprocess
+
+# The token file must be encrypted because it contains multi-use bearer tokens
+# whose usage does not require additional verification. Specify whichever
+# encryption and decryption pipes you prefer. They should read from standard
+# input and write to standard output. The example values here invoke GPG,
+# although won't work until an appropriate identity appears in the first line.
+ENCRYPTION_PIPE = ['cat']
+DECRYPTION_PIPE = ['cat']
+
+registrations = {
+ 'google': {
+ 'authorize_endpoint': 'https://accounts.google.com/o/oauth2/auth',
+ 'devicecode_endpoint': 'https://oauth2.googleapis.com/device/code',
+ 'token_endpoint': 'https://accounts.google.com/o/oauth2/token',
+ 'redirect_uri': 'urn:ietf:wg:oauth:2.0:oob',
+ 'imap_endpoint': 'imap.gmail.com',
+ 'pop_endpoint': 'pop.gmail.com',
+ 'smtp_endpoint': 'smtp.gmail.com',
+ 'sasl_method': 'OAUTHBEARER',
+ 'scope': 'https://mail.google.com/',
+ 'client_id': '',
+ 'client_secret': '',
+ },
+ 'microsoft': {
+ 'authorize_endpoint': 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
+ 'devicecode_endpoint': 'https://login.microsoftonline.com/common/oauth2/v2.0/devicecode',
+ 'token_endpoint': 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
+ 'redirect_uri': 'https://login.microsoftonline.com/common/oauth2/nativeclient',
+ 'tenant': 'common',
+ 'imap_endpoint': 'outlook.office365.com',
+ 'pop_endpoint': 'outlook.office365.com',
+ 'smtp_endpoint': 'smtp.office365.com',
+ 'sasl_method': 'XOAUTH2',
+ 'scope': ('offline_access https://outlook.office.com/IMAP.AccessAsUser.All '
+ 'https://outlook.office.com/POP.AccessAsUser.All '
+ 'https://outlook.office.com/SMTP.Send'),
+ 'client_id': '08162f7c-0fd2-4200-a84a-f25a4db0b584',
+ 'client_secret': 'TxRBilcHdC6WGBee]fs?QR:SJ8nI[g82',
+ },
+}
+
+ap = argparse.ArgumentParser(epilog='''
+This script obtains and prints a valid OAuth2 access token. State is maintained in an
+encrypted TOKENFILE. Run with "--verbose --authorize" to get started or whenever all
+tokens have expired, optionally with "--authflow" to override the default authorization
+flow. To truly start over from scratch, first delete TOKENFILE. Use "--verbose --test"
+to test the IMAP/POP/SMTP endpoints.
+''')
+ap.add_argument('-v', '--verbose', action='store_true', help='increase verbosity')
+ap.add_argument('-d', '--debug', action='store_true', help='enable debug output')
+ap.add_argument('tokenfile', help='persistent token storage')
+ap.add_argument('-a', '--authorize', action='store_true', help='manually authorize new tokens')
+ap.add_argument('--authflow', help='authcode | localhostauthcode | devicecode')
+ap.add_argument('-t', '--test', action='store_true', help='test IMAP/POP/SMTP endpoints')
+args = ap.parse_args()
+
+token = {}
+path = Path(args.tokenfile)
+if path.exists():
+ if 0o777 & path.stat().st_mode != 0o600:
+ sys.exit('Token file has unsafe mode. Suggest deleting and starting over.')
+ try:
+ sub = subprocess.run(DECRYPTION_PIPE, check=True, input=path.read_bytes(),
+ capture_output=True)
+ token = json.loads(sub.stdout)
+ except subprocess.CalledProcessError:
+ sys.exit('Difficulty decrypting token file. Is your decryption agent primed for '
+ 'non-interactive usage, or an appropriate environment variable such as '
+ 'GPG_TTY set to allow interactive agent usage from inside a pipe?')
+
+
+def writetokenfile():
+ '''Writes global token dictionary into token file.'''
+ if not path.exists():
+ path.touch(mode=0o600)
+ if 0o777 & path.stat().st_mode != 0o600:
+ sys.exit('Token file has unsafe mode. Suggest deleting and starting over.')
+ sub2 = subprocess.run(ENCRYPTION_PIPE, check=True, input=json.dumps(token).encode(),
+ capture_output=True)
+ path.write_bytes(sub2.stdout)
+
+
+if args.debug:
+ print('Obtained from token file:', json.dumps(token))
+if not token:
+ if not args.authorize:
+ sys.exit('You must run script with "--authorize" at least once.')
+ print('Available app and endpoint registrations:', *registrations)
+ token['registration'] = input('OAuth2 registration: ')
+ token['authflow'] = input('Preferred OAuth2 flow ("authcode" or "localhostauthcode" '
+ 'or "devicecode"): ')
+ token['email'] = input('Account e-mail address: ')
+ token['access_token'] = ''
+ token['access_token_expiration'] = ''
+ token['refresh_token'] = ''
+ writetokenfile()
+
+if token['registration'] not in registrations:
+ sys.exit(f'ERROR: Unknown registration "{token["registration"]}". Delete token file '
+ f'and start over.')
+registration = registrations[token['registration']]
+
+authflow = token['authflow']
+if args.authflow:
+ authflow = args.authflow
+
+baseparams = {'client_id': registration['client_id']}
+# Microsoft uses 'tenant' but Google does not
+if 'tenant' in registration:
+ baseparams['tenant'] = registration['tenant']
+
+
+def access_token_valid():
+ '''Returns True when stored access token exists and is still valid at this time.'''
+ token_exp = token['access_token_expiration']
+ return token_exp and datetime.now() < datetime.fromisoformat(token_exp)
+
+
+def update_tokens(r):
+ '''Takes a response dictionary, extracts tokens out of it, and updates token file.'''
+ token['access_token'] = r['access_token']
+ token['access_token_expiration'] = (datetime.now() +
+ timedelta(seconds=int(r['expires_in']))).isoformat()
+ if 'refresh_token' in r:
+ token['refresh_token'] = r['refresh_token']
+ writetokenfile()
+ if args.verbose:
+ print(f'NOTICE: Obtained new access token, expires {token["access_token_expiration"]}.')
+
+
+if args.authorize:
+ p = baseparams.copy()
+ p['scope'] = registration['scope']
+
+ if authflow in ('authcode', 'localhostauthcode'):
+ verifier = secrets.token_urlsafe(90)
+ challenge = base64.urlsafe_b64encode(hashlib.sha256(verifier.encode()).digest())[:-1]
+ redirect_uri = registration['redirect_uri']
+ listen_port = 0
+ if authflow == 'localhostauthcode':
+ # Find an available port to listen on
+ s = socket.socket()
+ s.bind(('127.0.0.1', 0))
+ listen_port = s.getsockname()[1]
+ s.close()
+ redirect_uri = 'http://localhost:'+str(listen_port)+'/'
+ # Probably should edit the port number into the actual redirect URL.
+
+ p.update({'login_hint': token['email'],
+ 'response_type': 'code',
+ 'redirect_uri': redirect_uri,
+ 'code_challenge': challenge,
+ 'code_challenge_method': 'S256'})
+ print(registration["authorize_endpoint"] + '?' +
+ urllib.parse.urlencode(p, quote_via=urllib.parse.quote))
+
+ authcode = ''
+ if authflow == 'authcode':
+ authcode = input('Visit displayed URL to retrieve authorization code. Enter '
+ 'code from server (might be in browser address bar): ')
+ else:
+ print('Visit displayed URL to authorize this application. Waiting...',
+ end='', flush=True)
+
+ class MyHandler(http.server.BaseHTTPRequestHandler):
+ '''Handles the browser query resulting from redirect to redirect_uri.'''
+
+ # pylint: disable=C0103
+ def do_HEAD(self):
+ '''Response to a HEAD requests.'''
+ self.send_response(200)
+ self.send_header('Content-type', 'text/html')
+ self.end_headers()
+
+ def do_GET(self):
+ '''For GET request, extract code parameter from URL.'''
+ # pylint: disable=W0603
+ global authcode
+ querystring = urllib.parse.urlparse(self.path).query
+ querydict = urllib.parse.parse_qs(querystring)
+ if 'code' in querydict:
+ authcode = querydict['code'][0]
+ self.do_HEAD()
+ self.wfile.write(b'<html><head><title>Authorizaton result</title></head>')
+ self.wfile.write(b'<body><p>Authorization redirect completed. You may '
+ b'close this window.</p></body></html>')
+ with http.server.HTTPServer(('127.0.0.1', listen_port), MyHandler) as httpd:
+ try:
+ httpd.handle_request()
+ except KeyboardInterrupt:
+ pass
+
+ if not authcode:
+ sys.exit('Did not obtain an authcode.')
+
+ for k in 'response_type', 'login_hint', 'code_challenge', 'code_challenge_method':
+ del p[k]
+ p.update({'grant_type': 'authorization_code',
+ 'code': authcode,
+ 'client_secret': registration['client_secret'],
+ 'code_verifier': verifier})
+ try:
+ response = urllib.request.urlopen(registration['token_endpoint'],
+ urllib.parse.urlencode(p).encode())
+ except urllib.error.HTTPError as err:
+ print(err.code, err.reason)
+ response = err
+ response = response.read()
+ if args.debug:
+ print(response)
+ response = json.loads(response)
+ if 'error' in response:
+ print(response['error'])
+ if 'error_description' in response:
+ print(response['error_description'])
+ sys.exit(1)
+
+ elif authflow == 'devicecode':
+ try:
+ response = urllib.request.urlopen(registration['devicecode_endpoint'],
+ urllib.parse.urlencode(p).encode())
+ except urllib.error.HTTPError as err:
+ print(err.code, err.reason)
+ response = err
+ response = response.read()
+ if args.debug:
+ print(response)
+ response = json.loads(response)
+ if 'error' in response:
+ print(response['error'])
+ if 'error_description' in response:
+ print(response['error_description'])
+ sys.exit(1)
+ print(response['message'])
+ del p['scope']
+ p.update({'grant_type': 'urn:ietf:params:oauth:grant-type:device_code',
+ 'client_secret': registration['client_secret'],
+ 'device_code': response['device_code']})
+ interval = int(response['interval'])
+ print('Polling...', end='', flush=True)
+ while True:
+ time.sleep(interval)
+ print('.', end='', flush=True)
+ try:
+ response = urllib.request.urlopen(registration['token_endpoint'],
+ urllib.parse.urlencode(p).encode())
+ except urllib.error.HTTPError as err:
+ # Not actually always an error, might just mean "keep trying..."
+ response = err
+ response = response.read()
+ if args.debug:
+ print(response)
+ response = json.loads(response)
+ if 'error' not in response:
+ break
+ if response['error'] == 'authorization_declined':
+ print(' user declined authorization.')
+ sys.exit(1)
+ if response['error'] == 'expired_token':
+ print(' too much time has elapsed.')
+ sys.exit(1)
+ if response['error'] != 'authorization_pending':
+ print(response['error'])
+ if 'error_description' in response:
+ print(response['error_description'])
+ sys.exit(1)
+ print()
+
+ else:
+ sys.exit(f'ERROR: Unknown OAuth2 flow "{token["authflow"]}. Delete token file and '
+ f'start over.')
+
+ update_tokens(response)
+
+
+if not access_token_valid():
+ if args.verbose:
+ print('NOTICE: Invalid or expired access token; using refresh token '
+ 'to obtain new access token.')
+ if not token['refresh_token']:
+ sys.exit('ERROR: No refresh token. Run script with "--authorize".')
+ p = baseparams.copy()
+ p.update({'client_secret': registration['client_secret'],
+ 'refresh_token': token['refresh_token'],
+ 'grant_type': 'refresh_token'})
+ try:
+ response = urllib.request.urlopen(registration['token_endpoint'],
+ urllib.parse.urlencode(p).encode())
+ except urllib.error.HTTPError as err:
+ print(err.code, err.reason)
+ response = err
+ response = response.read()
+ if args.debug:
+ print(response)
+ response = json.loads(response)
+ if 'error' in response:
+ print(response['error'])
+ if 'error_description' in response:
+ print(response['error_description'])
+ print('Perhaps refresh token invalid. Try running once with "--authorize"')
+ sys.exit(1)
+ update_tokens(response)
+
+
+if not access_token_valid():
+ sys.exit('ERROR: No valid access token. This should not be able to happen.')
+
+
+if args.verbose:
+ print('Access Token: ', end='')
+print(token['access_token'])
+
+
+def build_sasl_string(user, host, port, bearer_token):
+ '''Build appropriate SASL string, which depends on cloud server's supported SASL method.'''
+ if registration['sasl_method'] == 'OAUTHBEARER':
+ return f'n,a={user},\1host={host}\1port={port}\1auth=Bearer {bearer_token}\1\1'
+ if registration['sasl_method'] == 'XOAUTH2':
+ return f'user={user}\1auth=Bearer {bearer_token}\1\1'
+ sys.exit(f'Unknown SASL method {registration["sasl_method"]}.')
+
+
+if args.test:
+ errors = False
+
+ imap_conn = imaplib.IMAP4_SSL(registration['imap_endpoint'])
+ sasl_string = build_sasl_string(token['email'], registration['imap_endpoint'], 993,
+ token['access_token'])
+ if args.debug:
+ imap_conn.debug = 4
+ try:
+ imap_conn.authenticate(registration['sasl_method'], lambda _: sasl_string.encode())
+ # Microsoft has a bug wherein a mismatch between username and token can still report a
+ # successful login... (Try a consumer login with the token from a work/school account.)
+ # Fortunately subsequent commands fail with an error. Thus we follow AUTH with another
+ # IMAP command before reporting success.
+ imap_conn.list()
+ if args.verbose:
+ print('IMAP authentication succeeded')
+ except imaplib.IMAP4.error as e:
+ print('IMAP authentication FAILED (does your account allow IMAP?):', e)
+ errors = True
+
+ pop_conn = poplib.POP3_SSL(registration['pop_endpoint'])
+ sasl_string = build_sasl_string(token['email'], registration['pop_endpoint'], 995,
+ token['access_token'])
+ if args.debug:
+ pop_conn.set_debuglevel(2)
+ try:
+ # poplib doesn't have an auth command taking an authenticator object
+ # Microsoft requires a two-line SASL for POP
+ # pylint: disable=W0212
+ pop_conn._shortcmd('AUTH ' + registration['sasl_method'])
+ pop_conn._shortcmd(base64.standard_b64encode(sasl_string.encode()).decode())
+ if args.verbose:
+ print('POP authentication succeeded')
+ except poplib.error_proto as e:
+ print('POP authentication FAILED (does your account allow POP?):', e.args[0].decode())
+ errors = True
+
+ # SMTP_SSL would be simpler but Microsoft does not answer on port 465.
+ smtp_conn = smtplib.SMTP(registration['smtp_endpoint'], 587)
+ sasl_string = build_sasl_string(token['email'], registration['smtp_endpoint'], 587,
+ token['access_token'])
+ smtp_conn.ehlo('test')
+ smtp_conn.starttls()
+ smtp_conn.ehlo('test')
+ if args.debug:
+ smtp_conn.set_debuglevel(2)
+ try:
+ smtp_conn.auth(registration['sasl_method'], lambda _=None: sasl_string)
+ if args.verbose:
+ print('SMTP authentication succeeded')
+ except smtplib.SMTPAuthenticationError as e:
+ print('SMTP authentication FAILED:', e)
+ errors = True
+
+ if errors:
+ sys.exit(1)
diff --git a/bin/executable_ptmp b/bin/executable_ptmp
new file mode 100755
index 0000000..e42c695
--- /dev/null
+++ b/bin/executable_ptmp
@@ -0,0 +1,50 @@
+#!/bin/sh
+# Copyright 2020 Ryan Kavanagh <rak@rak.ac>
+# Upload as temporary file
+#
+# Permission to use, copy, modify, and/or distribute this software for
+# any purpose with or without fee is hereby granted, provided that the
+# above copyright notice and this permission notice appear in all
+# copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+# WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+# AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+# DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
+# OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+DEST_DIR=hades.rak.ac:public_tmp
+OPT_SUFFIX=""
+
+while getopts s: f
+do
+ case $f in
+ s)
+ OPT_SUFFIX=".${OPTARG}";;
+ esac
+done
+shift `expr $OPTIND - 1`
+
+FILE="$@"
+
+if command -v md5sum >/dev/null; then
+ MD5=md5sum;
+elif command -v md5 >/dev/null; then
+ MD5="md5 -r";
+else
+ echo "No md5 found";
+fi
+
+PAD=$(${MD5} "${FILE}" | cut -f1 -d' ')
+BASE=$(basename "${FILE}")
+
+DEST_NAME="${PAD}.${BASE}${OPT_SUFFIX}"
+
+echo "${DEST_NAME}"
+
+scp "${FILE}" "${DEST_DIR}/${DEST_NAME}"
+
+echo "https://rak.ac/~tmp/${DEST_NAME}"
diff --git a/bin/executable_startaudio b/bin/executable_startaudio
new file mode 100755
index 0000000..3fbfa7f
--- /dev/null
+++ b/bin/executable_startaudio
@@ -0,0 +1,3 @@
+#!/bin/sh
+start-pulseaudio-x11
+${HOME}/bin/mpd_others.sh
diff --git a/bin/executable_tmcg b/bin/executable_tmcg
new file mode 100755
index 0000000..5ebb3cf
--- /dev/null
+++ b/bin/executable_tmcg
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+current_session () {
+ tty=$(tty)
+ for s in $(tmux list-sessions -F '#{session_name}'); do
+ tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
+ done | grep "${tty}" | awk '{print $2}'
+}
+
+SESSION=$(current_session)
+NEW=1
+
+if [ "x${SESSION}" = "x" ]; then
+ SESSION="irc"
+ tmux new-session -s "${SESSION}" -d
+ NEW=$?
+fi
+
+if ! tmux switch -t ${SESSION}:catgirl >/dev/null 2>&1; then
+ tmux new-window -c '~' -n catgirl catgirl libera
+ tmux split-window -t ${SESSION}:catgirl -c '~' catgirl oftc
+ tmux split-window -t ${SESSION}:catgirl -c '~' catgirl sdf
+ tmux split-window -t ${SESSION}:catgirl -c '~' catgirl tilde
+ tmux set-option -t ${SESSION}:catgirl remain-on-exit on
+ tmux selectl -t ${SESSION}:catgirl tiled
+ if test ${NEW} -eq 0; then
+ tmux kill-window -t ${SESSION}:0
+ fi
+fi
diff --git a/bin/executable_wd-bak b/bin/executable_wd-bak
new file mode 100755
index 0000000..f824fba
--- /dev/null
+++ b/bin/executable_wd-bak
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+wd-mount
+
+if ! mount | grep /media/wd-bak > /dev/null ; then
+ echo "/media/wd-bak not mounted"
+ exit 1
+fi
+
+rsync -avhHP --delete-after /media/t/ /media/wd-bak
+
+sudo umount /media/wd-bak
+sudo cryptdisks_stop wd-bak
+sudo cryptdisks_stop wd-bak-work
diff --git a/bin/executable_wd-mount b/bin/executable_wd-mount
new file mode 100755
index 0000000..49466c2
--- /dev/null
+++ b/bin/executable_wd-mount
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+case `uname` in
+ OpenBSD)
+ doas bioctl -c C -l fe3fd8d53b06049b.a softraid0
+ doas mount /media/wd
+ ;;
+ Linux)
+ if ! zpool list wd-pass > /dev/null 2>&1 ; then
+ sudo zpool import -l wd-pass
+ fi
+ ;;
+ *)
+ echo "Unknown host"
+ exit 1
+esac
+
+# vim: set sw=4:
diff --git a/bin/executable_wd-umount b/bin/executable_wd-umount
new file mode 100644
index 0000000..51a11e1
--- /dev/null
+++ b/bin/executable_wd-umount
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+case `uname` in
+ OpenBSD)
+ doas umount /mnt/wd
+ doas bioctl -d 79665ba14a5187ba
+ ;;
+ Linux)
+ if zpool list wd-pass > /dev/null 2>&1; then
+ if mount -l | grep -E '^/var/lib/mpd/music '; then
+ sudo umount --lazy -f /var/lib/mpd/music
+ fi
+ mount -l -t zfs | IFS=' on ' awk '{ print $1 }' | sudo xargs -I '{}' zfs umount -u '{}'
+ sudo zpool export wd-pass
+ fi
+ ;;
+ *)
+ echo "Unknown host"
+ exit 1
+ ;;
+esac
diff --git a/chezmoi.toml.censored b/chezmoi.toml.censored
new file mode 100644
index 0000000..b7905b0
--- /dev/null
+++ b/chezmoi.toml.censored
@@ -0,0 +1,14 @@
+[gpg]
+ recipient = "4E469519ED677734268FBD958F7BF8FC4A11C97A"
+[data]
+ keychain_keys = "id_ed25519"
+ password.cmu = ""
+ password.gmail = ""
+ password.local = ""
+ password.mcgill = ""
+ password.musicbrainz = ""
+ password.queensu = ""
+ password.rakac = ""
+ password.sdfsip = ""
+ password.socs = ""
+ pinentry = "/usr/bin/pinentry-curses"
diff --git a/crontab b/crontab
new file mode 100644
index 0000000..d049afc
--- /dev/null
+++ b/crontab
@@ -0,0 +1,37 @@
+# Edit this file to introduce tasks to be run by cron.
+#
+# Each task to run has to be defined through a single line
+# indicating with different fields when the task will be run
+# and what command to run for the task
+#
+# To define the time you can provide concrete values for
+# minute (m), hour (h), day of month (dom), month (mon),
+# and day of week (dow) or use '*' in these fields (for 'any').
+#
+# Notice that tasks will be started based on the cron's system
+# daemon's notion of time and timezones.
+#
+# Output of the crontab jobs (including errors) is sent through
+# email to the user the crontab file belongs to (unless redirected).
+#
+# For example, you can run a backup of all your user accounts
+# at 5 a.m every week with:
+# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
+#
+# For more information see the manual pages of crontab(5) and cron(8)
+#
+# m h dom mon dow command
+0 * * * * zsh -c "rkinits" >/dev/null 2>&1
+0 0 * * * TEXMFHOME=${HOME}/.texmf updmap -user > /dev/null
+0 0 * * * /home/rak/bin/Internet.m3u.sh
+0 0 * * sun mount | grep -q /media/t && /media/t/Archives/irc-logs/backup.sh
+0 2 * * * mount | grep -q /media/t && /media/t/Archives/email/rak.ac/backup.sh
+30 2 * * * mount | grep -q /media/t && /media/t/Archives/git.rak.ac/backup.sh
+0 4 * * * /home/rak/bin/borg-home.sh > /dev/null
+30 4 * * * mount | grep -q /media/t && /media/t/borg-tosh.sh > /dev/null
+0 23 1,15 * * /home/rak/bin/borg-check.sh
+35 23 * * * recollindex >/dev/null 2>&1
+0 * * * * ${HOME}/Documents/papers/commit-push.sh >/dev/null 2>&1
+0 0 * * * /usr/sbin/tmpreaper --mtime-dir 30d ~/Downloads
+0 0 * * * /usr/sbin/tmpreaper --mtime-dir 90d ~/tmp
+0 3 * * * updatedb -l 0 -o ~/.local/state/plocate/home.db -U ~
diff --git a/dot_Xresources.tmpl b/dot_Xresources.tmpl
new file mode 100644
index 0000000..d12665f
--- /dev/null
+++ b/dot_Xresources.tmpl
@@ -0,0 +1,86 @@
+URxvt.background: #000000
+URxvt.foreground: #ffffff
+URxvt.colorBD: #ffffff
+URxvt.hilightColor: #f0f0f0
+URxvt.scrollBar: false
+URxvt.scrollstyle: xterm
+URxvt.transparent: true
+URxvt.tint: black
+URxvt.shading: 15
+URxvt*color4: #0055FF
+URxvt*color12: #0088FF
+URxvt.underlineColor: yellow
+URxvt.saveLines: 8192
+URxvt.mapAlert: true
+URxvt.font: {{ if (eq .chezmoi.os "openbsd") }}xft:spleen:size=10{{ else }}xft:Spleen 16x32:antialias=false{{ end }},xft:Inconsolata:size=10,xft:Input Mono Medium:size=10,xft:DejaVu Sans Mono:size=10,xft:Liberation Mono:size=10,xft:symbola:size=10:minspace=False
+URxvt.perl-ext-common: default,matcher,font-size,-searchable-scrollback
+URxvt.pointerBlank: true
+URxvt.url-launcher: firefox
+URxvt.matcher.button: 1
+URxvt.visualBell: false
+URxvt.urgentOnBell: true
+URxvt.keysym.C-Up: font-size:increase
+URxvt.keysym.C-Down: font-size:decrease
+URxvt.keysym.C-S-Up: font-size:incglobal
+URxvt.keysym.C-S-Down: font-size:decglobal
+URxvt.keysym.C-equal: font-size:reset
+URxvt.keysym.C-slash: font-size:show
+URxvt.keysym.M-Y: perl:mark-and-yank:activate_mark_mode
+URxvt.keysym.M-U: perl:mark-and-yank:activate_mark_url_mode
+
+XConsole*background: black
+XConsole*foreground: white
+XConsole*borderWidth: 2
+XConsole*borderColor: grey
+XConsole.text.geometry: 480x130
+XConsole.verbose: true
+XConsole*iconic: true
+XConsole*font: fixed
+
+Xft.antialias: 1
+Xft.hinting: 1
+Xft.hintstyle: hintfull
+Xft.rgba: rgb
+
+XIdle.delay: 2
+XIdle.position: se
+XIdle.program: /usr/X11R6/bin/xlock
+XIdle.timeout: 60
+
+XLock.dpmsoff: 240
+XLock.dpmsstandby: 120
+XLock.dpmssuspend: 180
+XLock.lockdelay: 60
+XLock.logoutButton: -1
+XLock.mode: random
+Xlock.random.modelist: all,-image
+
+Xpdf*fileFilterStyle: filter_hidden_files
+
+XTerm*allowMouseOps: true
+XTerm*metaSendsEscape: true
+XTerm.VT100.translations: #override \
+ Ctrl <Key> Down: smaller-vt-font() \n\
+ Ctrl <Key> Up: larger-vt-font()
+XTerm.eightBitInput: false
+XTerm.termName: xterm-256color
+XTerm*faceName: xft:spleen:antialias=false
+XTerm*faceSize: 12
+XTerm*scrollBar: false
+XTerm*background: rgb:00/00/00
+XTerm*foreground: rgb:ff/ff/ff
+
+xscreensaver.cycle: 0:10:00
+xscreensaver.dpmsEnabled: True
+xscreensaver.dpmsQuickOff: True
+xscreensaver.fade: False
+xscreensaver.lock: True
+xscreensaver.lockTimeout: 0:00:00
+xscreensaver.mode: blank
+xscreensaver.passwdTimeout: 0:00:30
+xscreensaver.selected: -1
+xscreensaver.timeout: 0:02:00
+xscreensaver.timestamp: True
+xscreensaver.unfade: False
+
+! vim: set ft=xdefaults:
diff --git a/dot_asoundrc b/dot_asoundrc
new file mode 100644
index 0000000..f2639ec
--- /dev/null
+++ b/dot_asoundrc
@@ -0,0 +1,33 @@
+# pcm.jackplug {
+# type plug
+# slave { pcm "jack" }
+# }
+#
+# pcm.jack {
+# type jack
+# playback_ports {
+# 0 system:playback_1
+# 1 system:playback_2
+# }
+# capture_ports {
+# 0 system:capture_1
+# 1 system:capture_2
+# }
+# }
+#
+
+
+pcm.pulse {
+ type pulse
+}
+
+ctl.pulse {
+ type pulse
+}
+
+pcm.!default {
+ type pulse
+}
+ctl.!default {
+ type pulse
+}
diff --git a/dot_aspell.conf b/dot_aspell.conf
new file mode 100644
index 0000000..04ca59e
--- /dev/null
+++ b/dot_aspell.conf
@@ -0,0 +1 @@
+master en_CA-w_accents
diff --git a/dot_aspell.en.prepl b/dot_aspell.en.prepl
new file mode 100644
index 0000000..3d9a733
--- /dev/null
+++ b/dot_aspell.en.prepl
@@ -0,0 +1,31 @@
+personal_repl-1.1 en 0
+advertize advertise
+advize advise
+apprize apprise
+arize arise
+chastize chastise
+circumcize circumcise
+comprize comprise
+compromize compromise
+demize demise
+despize despise
+devize devise
+disguize disguise
+enterprize enterprise
+esthetic aesthetic
+excize excise
+exercize exercise
+franchize franchise
+guize guise
+improvize improvise
+incize incise
+merchandize merchandise
+mortize mortise
+onomatopeic onomatopoeic
+premize premise
+reprize reprise
+revize revise
+supervize supervise
+surmize surmise
+surprize surprise
+televize televise
diff --git a/dot_aspell.en.pws b/dot_aspell.en.pws
new file mode 100644
index 0000000..4495631
--- /dev/null
+++ b/dot_aspell.en.pws
@@ -0,0 +1,134 @@
+personal_ws-1.1 en 133
+Bohrer
+Bovik
+Bram
+Brookes
+CFP
+CMS
+Compositionally
+Coq
+Dekker
+Dingel
+Drs
+ECT
+FreeBSD
+Frobenius
+GHC
+GPAs
+GPS
+Hassan
+Hirschkoff
+Hyland
+Hyland's
+Kavanagh
+LCF
+Lambek
+Lawvere
+Lightstone
+Madiot
+McGill
+NSERC
+Naama
+PASED
+Panangaden
+Pientka
+Prakash
+Presheafs
+RAK
+Rashid
+Rudie
+SPARC
+Springer
+TSO
+UPMC
+Unital
+Wajc
+Yoneda
+acyclic
+adjoint
+adjunction
+amongst
+applicative
+arXiv
+assignables
+assistantship
+assistantships
+associativity
+atomicity
+balancedness
+bisimulation
+bisimulations
+boolean
+cartesian
+changelogs
+checkpointing
+coinductive
+compositional
+compositionality
+compositionally
+conjecturally
+correlatedly
+coöperative
+cryptographic
+decompositions
+denotational
+denotationally
+dequeue
+dequeuing
+endomorphism
+enqueue
+enqueues
+enqueuing
+essentialised
+executional
+existentials
+formalisations
+functor
+incentivisation
+interleavings
+internalisations
+isomorphism
+linearisation
+linearisations
+logics
+metadata
+metatheory
+metavariables
+modularly
+modus
+monoid
+monoids
+monotonicity
+morphism
+morphisms
+multimap
+multimaps
+multiset
+multisets
+naturality
+naïve
+onwards
+operad
+optimisations
+parametricity
+pomset
+pomsets
+ponens
+poset
+presheaf
+presheaves
+reorderings
+sequentialise
+sigbovik
+subphrases
+subsequence
+supérieure
+surjective
+toolchains
+topos
+unintuitive
+unrollings
+unsustainability
+untyped
+weakenings
+École
diff --git a/dot_baresip/accounts.tmpl b/dot_baresip/accounts.tmpl
new file mode 100644
index 0000000..acf8dcb
--- /dev/null
+++ b/dot_baresip/accounts.tmpl
@@ -0,0 +1,36 @@
+#
+# SIP accounts - one account per line
+#
+# Displayname <sip:user@domain;uri-params>;addr-params
+#
+# uri-params:
+# ;transport={udp,tcp,tls}
+#
+# addr-params:
+# ;answermode={manual,early,auto}
+# ;audio_codecs=opus/48000/2,pcma,...
+# ;auth_user=username
+# ;auth_pass=password
+# ;call_transfer=no
+# ;mediaenc={srtp,srtp-mand,srtp-mandf,dtls_srtp,zrtp}
+# ;medianat={stun,turn,ice}
+# ;mwi=no
+# ;outbound="sip:primary.example.com;transport=tcp"
+# ;outbound2=sip:secondary.example.com
+# ;ptime={10,20,30,40,...}
+# ;regint=3600
+# ;pubint=0 (publishing off)
+# ;regq=0.5
+# ;sipnat={outbound}
+# ;stunuser=STUN/TURN/ICE-username
+# ;stunpass=STUN/TURN/ICE-password
+# ;stunserver=stun:[user:pass]@host[:port]
+# ;video_codecs=h264,h263,...
+#
+# Examples:
+#
+# <sip:user@domain.com;transport=tcp>;auth_pass=secret
+# <sip:user@1.2.3.4;transport=tcp>;auth_pass=secret
+# <sip:user@[2001:df8:0:16:216:6fff:fe91:614c]:5070;transport=tcp>;auth_pass=secret
+#
+<sip:2023@sip.sdf.org>;auth_pass={{ .password.sdfsip }}
diff --git a/dot_caffrc b/dot_caffrc
new file mode 100644
index 0000000..0d54a59
--- /dev/null
+++ b/dot_caffrc
@@ -0,0 +1,69 @@
+# $Id: caffrc.sample 505 2013-10-18 08:16:20Z weasel $
+# vim:ft=perl:
+
+$CONFIG{'owner'} = 'Ryan Kavanagh';
+$CONFIG{'email'} = 'rak@debian.org';
+
+# you can get your long keyid from
+# gpg --with-colons --list-key <yourkeyid|name|emailaddress..>
+#
+# if you have a v4 key, it will simply be the last 16 digits of
+# your fingerprint.
+
+# This is the list of keys whose signatures you want to mail around. Usually
+# you would list all your keys here. To specify which keys to sign with, set
+# local-user. See the manpage for further details.
+$CONFIG{'keyid'} = [ qw{8F7BF8FC4A11C97A} ];
+$CONFIG{'also-encrypt-to'} = [ qw{8F7BF8FC4A11C97A} ];
+$CONFIG{'caffhome'} = $ENV{'HOME'}.'/.caff';
+
+$ENV{'PERL_MAILERS'} = [ 'sendmail', '-oem', '-oi' ];
+$CONFIG{'mailer-send'} = [ 'sendmail' ];
+
+# The options below need not be changed for normal operation.
+
+# Paths to GnuPG binaries:
+# $CONFIG{'gpg'} = 'gpg';
+# $CONFIG{'gpg-sign'} = $CONFIG{'gpg'};
+# $CONFIG{'gpg-delsig'} = '/home/weasel/tmp/gpg/gnupg-1.3.92/g10/gpg';
+
+# defaults to ~/.gnupg/secring.gpg
+# $CONFIG{'secret-keyring'} = '/tmp/gpg/secring.gpg';
+
+# Don't export UIDs by default, on which your latest signature is older than this age.
+# $CONFIG{'export-sig-age'} = 24*60*60;
+
+# Keyserver to download keys from. Default: pool.sks-keyservers.net.
+# $CONFIG{'keyserver'} = 'pgp.surfnet.nl';
+
+# Boolean options, all default to false (0).
+#
+# Skip fetching the keys from the keyserver.
+# $CONFIG{'no-download'} = 1;
+# Skip signing the keys.
+# $CONFIG{'no-sign'} = 1;
+# Ask to continue before starting the signing (for offline signing).
+# $CONFIG{'ask-sign'} = 1;
+
+# $CONFIG{'mail-template'} = <<'EOM'
+# Hi,
+#
+# please find attached the user id{(scalar @uids >= 2 ? 's' : '')}
+# {foreach $uid (@uids) {
+# $OUT .= "\t".$uid."\n";
+# };}of your key {$key} signed by me.
+#
+# Note that I did not upload your key to any keyservers.
+# If you have multiple user ids, I sent the signature for each user id
+# separately to that user id's associated email address. You can import
+# the signatures by running each through `gpg --import`.
+#
+# If you want this new signature to be available to others, please upload
+# it yourself. With GnuPG this can be done using
+# gpg --keyserver pool.sks-keyservers.net --send-key {$key}
+#
+# If you have any questions, don't hesitate to ask.
+#
+# Regards,
+# {$owner}
+# EOM
diff --git a/dot_config/alacritty/alacritty.yml b/dot_config/alacritty/alacritty.yml
new file mode 100644
index 0000000..8462ace
--- /dev/null
+++ b/dot_config/alacritty/alacritty.yml
@@ -0,0 +1,36 @@
+# Colors (iTerm 2 default theme)
+colors:
+ # Default colors
+ primary:
+ background: '0x101421'
+ foreground: '0xfffbf6'
+
+ # Normal colors
+ normal:
+ black: '0x2e2e2e'
+ red: '0xeb4129'
+ green: '0xabe047'
+ yellow: '0xf6c744'
+ blue: '0x47a0f3'
+ magenta: '0x7b5cb0'
+ cyan: '0x64dbed'
+ white: '0xe5e9f0'
+
+ # Bright colors
+ bright:
+ black: '0x565656'
+ red: '0xec5357'
+ green: '0xc0e17d'
+ yellow: '0xf9da6a'
+ blue: '0x49a4f8'
+ magenta: '0xa47de9'
+ cyan: '0x99faf2'
+ white: '0xffffff'
+
+font:
+ size: 16
+ normal:
+ family: Spleen
+
+keybinding:
+ - { key: N, mods: Command, action: SpawnNewInstance }
diff --git a/dot_config/beets/config.yaml.tmpl b/dot_config/beets/config.yaml.tmpl
new file mode 100644
index 0000000..6e9461c
--- /dev/null
+++ b/dot_config/beets/config.yaml.tmpl
@@ -0,0 +1,125 @@
+directory: /media/t/music_clean
+library: /media/t/music_clean/beetsmusic.blb
+plugins: mbsync duplicates fetchart mbcollection badfiles info smartplaylist
+
+import:
+ incremental: true
+ quiet_fallback: skip
+ log: /media/t/music_clean/import_log
+ move: true
+ write: true
+ autotag: true
+
+paths:
+ default: $format/$albumartist/$album/$track $title
+ singleton: $format/Singletons/$artist - $title
+ comp: $format/comp/$album/$track $title
+
+musicbrainz:
+ user: {{ .username.musicbrainz }}
+ pass: {{ .password.musicbrainz }}
+ auto: yes
+
+mbcollection:
+ collection: d1764520-a53c-4144-a95d-f3c1b43afa07
+
+match:
+ preferred:
+ countries: ['CA', 'US']
+ media: ['CD']
+
+smartplaylist:
+ relative_to: /media/t/music_clean
+ playlist_dir: /var/lib/mpd/playlists
+ playlists:
+ - name: bagpipesolo.m3u
+ query: [ 'album:"The Piper And The Maker"'
+ , 'artist:"Alasdair Gillies"'
+ , 'artist:"Allan MacDonald"'
+ , 'artist:"Andrew Carlisle"'
+ , 'artist:"Andrew Pitkeathly"'
+ , 'artist:"Andrew Wright"'
+ , 'artist:"Angus MacColl"'
+ , 'artist:"Angus MacKenzie & Gabe McVarish"'
+ , 'artist:"Anna Murray"'
+ , 'artist:"Bill Livingstone"'
+ , 'artist:"Brian Donaldson"'
+ , 'artist:"Bruce Gandy"'
+ , 'artist:"Calum MacPherson"'
+ , 'artist:"Derek Midgley"'
+ , 'artist:"Donald MacLeod"'
+ , 'artist:"Donald MacPherson"'
+ , 'artist:"Dr. Angus MacDonald"'
+ , 'artist:"Dr. Barrie J. MacLachlan Orme"'
+ , 'artist:"Duncan MacFadyen"'
+ , 'artist:"Fin Moore & Simon Bradley"'
+ , 'artist:"Gary West"'
+ , 'artist:"Gavin Stoddart"'
+ , 'artist:"Gordon Duncan"'
+ , 'artist:"Gordon Walker"'
+ , 'artist:"Graham Mulholland"'
+ , 'artist:"Graham Roy"'
+ , 'artist:"Greg Wilson"'
+ , 'artist:"Hugh MacCallum"'
+ , 'artist:"Iain MacDonald & Malcolm Stitt"'
+ , 'artist:"Iain MacFadyen"'
+ , 'artist:"Iain MacInnes"'
+ , 'artist:"Iain Macleod"'
+ , 'artist:"Iain Morrison"'
+ , 'artist:"Iain Speirs"'
+ , 'artist:"Ian K. MacDonald"'
+ , 'artist:"J. B. Robertson"'
+ , 'artist:"Jakez Pincet"'
+ , 'artist:"James Campbell"'
+ , 'artist:"James Haddow McIntosh"'
+ , 'artist:"James Murray"'
+ , 'artist:"John A. MacLellan"'
+ , 'artist:"John D. Burgess"'
+ , 'artist:"John Don MacKenzie"'
+ , 'artist:"John MacDougall of Inverness"'
+ , 'artist:"John MacDougall"'
+ , 'artist:"John MacFadyen"'
+ , 'artist:"John MacLellan"'
+ , 'artist:"John Wilson"'
+ , 'artist:"Malcolm Robertson"'
+ , 'artist:"Malcolm Ross MacPherson"'
+ , 'artist:"Michael Cusack"'
+ , 'artist:"Murray Henderson"'
+ , 'artist:"Niall Matheson"'
+ , 'artist:"Patrick Molard"'
+ , 'artist:"Pipe Major"'
+ , 'artist:"Robert B. Nicol"'
+ , 'artist:"Robert Reid"'
+ , 'artist:"Robert U. Brown"'
+ , 'artist:"Robert Wallace"'
+ , 'artist:"Roderick MacDonald"'
+ , 'artist:"Ronnie Lawrie"'
+ , 'artist:"Tobar An Dualchais"'
+ , 'artist:"Tom Speirs"'
+ , 'artist:"William Barrie"'
+ , 'artist:"William Boyle"'
+ , 'artist:"William Livingstone"'
+ , 'artist:"William M. MacDonald"'
+ , 'artist:"William Macdonald"'
+ , 'artist:"William McCallum"'
+ , 'artist:"Willie Connell"'
+ , 'artist:"Willie Connell; Brad Davidson"'
+ , 'artist:"Willie Connell; Jay Close"'
+ , 'artist:"Willie McCallum"'
+ ]
+ - name: francais.m3u
+ query: [ 'artist:"CÅ“ur de Pirate"'
+ , 'artist:"CANO"'
+ , 'artist:"Félix Leclerc"'
+ , 'artist:"Harmonium"'
+ , 'artist:"Jacques Brel"'
+ , 'artist:"Louane"'
+ , 'artist:"Pomme"'
+ , 'artist:"Stéphane Paquette"'
+ ]
+ - name: added-2020.m3u
+ query: [ "added:2020" ]
+ - name: added-2019.m3u
+ query: [ "added:2019" ]
+ - name: added-2018.m3u
+ query: [ "added:2018" ]
diff --git a/dot_config/catgirl/bitlbee.tmpl b/dot_config/catgirl/bitlbee.tmpl
new file mode 100644
index 0000000..bc38c1b
--- /dev/null
+++ b/dot_config/catgirl/bitlbee.tmpl
@@ -0,0 +1,8 @@
+cert = weechat.pem
+user = catgirl-{{ .chezmoi.hostname }}
+host = bitlbee.pounce.rak.ac
+port = 40404
+save = bitlbee
+hash = 0,13
+quiet
+timestamp = %d %X
diff --git a/dot_config/catgirl/encrypted_private_weechat-sdf.pem.asc b/dot_config/catgirl/encrypted_private_weechat-sdf.pem.asc
new file mode 100644
index 0000000..b0fb4a3
--- /dev/null
+++ b/dot_config/catgirl/encrypted_private_weechat-sdf.pem.asc
@@ -0,0 +1,110 @@
+-----BEGIN PGP MESSAGE-----
+
+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
+=eMfv
+-----END PGP MESSAGE-----
diff --git a/dot_config/catgirl/encrypted_private_weechat.pem.asc b/dot_config/catgirl/encrypted_private_weechat.pem.asc
new file mode 100644
index 0000000..4cdd3f3
--- /dev/null
+++ b/dot_config/catgirl/encrypted_private_weechat.pem.asc
@@ -0,0 +1,110 @@
+-----BEGIN PGP MESSAGE-----
+
+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
+=jkLw
+-----END PGP MESSAGE-----
diff --git a/dot_config/catgirl/libera.tmpl b/dot_config/catgirl/libera.tmpl
new file mode 100644
index 0000000..a42a2a6
--- /dev/null
+++ b/dot_config/catgirl/libera.tmpl
@@ -0,0 +1,9 @@
+cert = weechat.pem
+user = catgirl-{{ .chezmoi.hostname }}
+host = libera.pounce.rak.ac
+port = 40404
+save = libera
+hash = 0,13
+quiet
+timestamp = %d %X
+ignore = jan6 * * *
diff --git a/dot_config/catgirl/oftc.tmpl b/dot_config/catgirl/oftc.tmpl
new file mode 100644
index 0000000..c0e980d
--- /dev/null
+++ b/dot_config/catgirl/oftc.tmpl
@@ -0,0 +1,8 @@
+cert = weechat.pem
+user = catgirl-{{ .chezmoi.hostname }}
+host = oftc.pounce.rak.ac
+port = 40404
+save = oftc
+hash = 0,13
+quiet
+timestamp = %d %X
diff --git a/dot_config/catgirl/otaku b/dot_config/catgirl/otaku
new file mode 100644
index 0000000..624777b
--- /dev/null
+++ b/dot_config/catgirl/otaku
@@ -0,0 +1,9 @@
+host = irc.sdf.org
+save = otaku
+hash = 0,13
+nick = rak
+user = rak
+real = Ryan Kavanagh
+join = #anonradio,#gopher,#helpdesk,#hurtdesk,#plan9,#sdf
+quiet
+timestamp = %d %X
diff --git a/dot_config/catgirl/schmorp.tmpl b/dot_config/catgirl/schmorp.tmpl
new file mode 100644
index 0000000..150a090
--- /dev/null
+++ b/dot_config/catgirl/schmorp.tmpl
@@ -0,0 +1,8 @@
+cert = weechat.pem
+user = catgirl-{{ .chezmoi.hostname }}
+host = schmorp.pounce.rak.ac
+port = 40404
+save = schmorp
+hash = 0,13
+quiet
+timestamp = %d %X
diff --git a/dot_config/catgirl/sdf.tmpl b/dot_config/catgirl/sdf.tmpl
new file mode 100644
index 0000000..fb32002
--- /dev/null
+++ b/dot_config/catgirl/sdf.tmpl
@@ -0,0 +1,8 @@
+cert = weechat-sdf.pem
+user = catgirl-{{ .chezmoi.hostname }}
+host = sdf.pounce.rak.ac
+port = 40404
+save = sdf
+hash = 0,13
+quiet
+timestamp = %d %X
diff --git a/dot_config/catgirl/tilde.tmpl b/dot_config/catgirl/tilde.tmpl
new file mode 100644
index 0000000..6129adc
--- /dev/null
+++ b/dot_config/catgirl/tilde.tmpl
@@ -0,0 +1,8 @@
+cert = weechat-sdf.pem
+user = catgirl-{{ .chezmoi.hostname }}
+host = tilde.pounce.rak.ac
+port = 40404
+save = tilde
+hash = 0,13
+quiet
+timestamp = %d %X
diff --git a/dot_config/encrypted_private_wpa_supplicant.conf.tmpl.asc b/dot_config/encrypted_private_wpa_supplicant.conf.tmpl.asc
new file mode 100644
index 0000000..dc1c07b
--- /dev/null
+++ b/dot_config/encrypted_private_wpa_supplicant.conf.tmpl.asc
@@ -0,0 +1,62 @@
+-----BEGIN PGP MESSAGE-----
+
+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
+=WRzN
+-----END PGP MESSAGE-----
diff --git a/dot_config/fontconfig/fonts.conf b/dot_config/fontconfig/fonts.conf
new file mode 100644
index 0000000..1d1ab75
--- /dev/null
+++ b/dot_config/fontconfig/fonts.conf
@@ -0,0 +1,33 @@
+<?xml version='1.0'?>
+<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
+<fontconfig>
+ <match target="font">
+ <edit mode="assign" name="rgba">
+ <!-- Improves rendering on LCD screens according to -->
+ <!-- http://freedesktop.org/software/fontconfig/fontconfig-user.html -->
+ <const>rgb</const>
+ </edit>
+ </match>
+ <match target="font">
+ <edit mode="assign" name="lcdfilter">
+ <const>lcddefault</const>
+ </edit>
+ </match>
+ <match target="font">
+ <edit mode="assign" name="hinting">
+ <bool>true</bool>
+ </edit>
+ </match>
+ <match target="font">
+ <edit mode="assign" name="hintstyle">
+ <const>hintfull</const>
+ </edit>
+ </match>
+ <match target="font">
+ <edit mode="assign" name="antialias">
+ <bool>true</bool>
+ </edit>
+ </match>
+ <dir>~/.fonts</dir>
+ <dir>/usr/share/texlive/texmf-dist/fonts</dir>
+</fontconfig>
diff --git a/dot_config/mimeapps.list b/dot_config/mimeapps.list
new file mode 100644
index 0000000..cf6cc6f
--- /dev/null
+++ b/dot_config/mimeapps.list
@@ -0,0 +1,11 @@
+[Added Associations]
+x-scheme-handler/spotify=sp.desktop
+
+[Default Applications]
+application/pdf=org.gnome.Evince.desktop
+application/x-pdf=org.gnome.Evince.desktop
+text/html=firefox.desktop
+x-scheme-handler/http=firefox.desktop
+x-scheme-handler/https=firefox.desktop
+x-scheme-handler/about=firefox.desktop
+x-scheme-handler/unknown=firefox.desktop
diff --git a/dot_config/ncmpcpp/config.tmpl b/dot_config/ncmpcpp/config.tmpl
new file mode 100644
index 0000000..c9cae80
--- /dev/null
+++ b/dot_config/ncmpcpp/config.tmpl
@@ -0,0 +1,3 @@
+autocenter_mode = yes
+media_library_primary_tag = album_artist
+mpd_host = {{ if (eq .chezmoi.hostname "asteria") }}127.0.0.1{{ else }}asteria.home.arpa{{ end }}
diff --git a/dot_config/private_borgmatic/encrypted_private_home.yaml.asc b/dot_config/private_borgmatic/encrypted_private_home.yaml.asc
new file mode 100644
index 0000000..5ca20a1
--- /dev/null
+++ b/dot_config/private_borgmatic/encrypted_private_home.yaml.asc
@@ -0,0 +1,39 @@
+-----BEGIN PGP MESSAGE-----
+
+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
+7No58A==
+=o5Ju
+-----END PGP MESSAGE-----
diff --git a/dot_config/private_borgmatic/encrypted_private_music.yaml.asc b/dot_config/private_borgmatic/encrypted_private_music.yaml.asc
new file mode 100644
index 0000000..a6a46fb
--- /dev/null
+++ b/dot_config/private_borgmatic/encrypted_private_music.yaml.asc
@@ -0,0 +1,38 @@
+-----BEGIN PGP MESSAGE-----
+
+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
+VmifeQkZw1ZalXIan1F8T6SdoEeRNdnKew==
+=iDQK
+-----END PGP MESSAGE-----
diff --git a/dot_config/private_borgmatic/encrypted_private_pictures.yaml.asc b/dot_config/private_borgmatic/encrypted_private_pictures.yaml.asc
new file mode 100644
index 0000000..386f7d5
--- /dev/null
+++ b/dot_config/private_borgmatic/encrypted_private_pictures.yaml.asc
@@ -0,0 +1,38 @@
+-----BEGIN PGP MESSAGE-----
+
+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
+sdoEp7/ObeuA3D6ah40nM+q4FWtGtdk=
+=+84j
+-----END PGP MESSAGE-----
diff --git a/dot_config/private_borgmatic/encrypted_private_tosh.yaml.asc b/dot_config/private_borgmatic/encrypted_private_tosh.yaml.asc
new file mode 100644
index 0000000..d269968
--- /dev/null
+++ b/dot_config/private_borgmatic/encrypted_private_tosh.yaml.asc
@@ -0,0 +1,39 @@
+-----BEGIN PGP MESSAGE-----
+
+hQUMAwAAAAAAAAAAASgAueNW0JctISxO1fxH4uzZzeYvzUDdrzzYl5GVfiyeISqq
+n1ohW8pN5It5rxswfu7a6Q3+Ggob6/zw4KOv2vF3/ol+0b9dN2dviwxLjNPokZDX
+pXQI5WXaA/wqvMYZWDchpK6WnnKR3WZ5DbAq0Rn8rr5xiwU9NvINsvaNvft2Co9w
+bu/mfDKcOeiAFBWAFmFeCxIPGYW+AWOwpM7IqSZMmxiFBo1DsU32JIekfeuZN7Qe
+HPGjfPh/rr5WouC1j8mO0IcQlsLsK4tsIIB7rp7A6TCOzqXrRMcqEd2c2OYpqYlK
+zHKPzBzeQZuKXl8Pwxum+c60NBwsV6UF8ksQN7/FYnKjM6kcOCC59o2+5PBt1kr3
+ckI4bmyG1+5uOdi2uAthQg+PZuEqzTrmrhExIAUGR39JFxsm0DPKTXBwcqLg/Hsb
+thiSm4MNY70UlL1b2rFy+rAQMeJhgvtoJeGwgZylY6KeYGHvhSE5nxm2b5MiZpHl
+1t3+K3+sfKPyHHJDkd/Nu1WdqKUfGhrt5xinFPAPAJu1KN4V2Btw81wBFlTqLzmd
+1uxLMzjVyswrYWeRmTB0PnR3JpSvghv2aGYr469fbk5wEUTQExF37+jGafP19x9t
+Ebrafhi0LoyfmYHC2Zefzm5c0JKEgdnG/aURy9M78SgganJU6+3KMAM7XM84S4VQ
+TSUSUOSa2WSUmInlv5vtXyzkGucnGzkx202UNbA+6uMSFxFSTJY1hAr0sVJBmf6C
+glI1hX/CWCdUKDod27Kk60FDIPl3Rht67qxDk74Gc3tsEo0/ULG2Hxu+Ixzlsixu
+9EQNb1wMSEOrQjdw7PRjYcuElzJp5/nPJOtuGCct0b9W2qygfxYC2NfWHN11Bw53
+Ns+buVnhGK0EAabNlKPiBRQ9qADbN9ms5e43g+nD/hrw0tRt0X/GKDem0EGZ8SBQ
+UZCw1IW0Ot2Pg2bx/4zt+THiHHV0WYVu+tZ+ZsU9LL9L2UYHt5Q3MThJzVSVckql
+vnvvQ1mn5PL69v/Ysh9EfphwG4Aw0NAYsdtz2sSw4sjjLQ0EJxaveuUAAmUP2gq8
+yldve04HFU8nwbdTlG+z7D+NohgjIb7g+YCUYFpVrTKwcfl1oAdZvfWu2X3XZPFu
+zTBm94vwUFqkCMP+7XhzEUUlOveN8m4F/Q5r/fo5xKkRYtwD9Sw1S8GUQfMO5Y6k
+tsrX9q8FFkbnPmuHsUkU1yzWbJJ3ACnbB88PW5LjABNix2aQceioDXnSyvsBRnxH
+/kATRul/oMnyPxGe2NgQXdttntKxHdPfalutMDnN0CHQRnxZZQyVsx/2TznHo3xl
+PcO+W7k9qo6R0/cLRWgBIh805E7VxTIajEc/vtiHg1g0PBqat8fK7JDKy2o5P9Kb
+MOKrmUYl71FgLOZDxJRCj2rcAzD3mYYtlhCONEVtK5lLEbophql9VQUZcBW1lQ75
+gXMrhGyM9qvWoMLoQFbfDYVj31lMTbevfYpkGuJtFLUjb2U9pC8NBevXdQNqd2ls
+v/kP5BKko60e4JrB49YKHTiQN5jGGtmot4JtrjBvSoIg9LfmDUm2MjNClnDCV0GC
+X9n2ffp1xWVcbWzgmaQ2cgtk9ZwNhvSN/h0xAgZoIm/EE4sONL/6VxzZjH4Nue/q
+GIteQ78IsFjBZe7C8Op7vh9ocuetTvdnHmus3A9U32/uNlpgz2Vs1JHkW0l0t/zS
+wL0BBfcnAdPMRGN+aKV516ewxNSpU213ntHTqgm6mY8g4FgSVqvhNExCH31G8q0b
+UotfzvTXJpL47yJuEe7FtiqnlbDtYFGxeZcAeQsEDToSEm4XiG2/Yb/GNh5oGZqn
+oci32UzQ9kGoX1MCVxDaWQhbNJIhMrfCHANNoDCcEcpTfj1ValqfiGIQkPhvefN6
+PMneNAVgcIz59MyXMXo3JzQuwnAmO6LpqhGRS6j9Nea2//LCOx1Bqc69X7L+AnTZ
+1RpnszIoAb2eRw/RRrBYbK9TOHti0q2Xop/88KEz4R7iilouDUPh8heu5MLxKPEA
+hSOOVMMTbts3SueAh87RMnZE1TcVolHhYQkGHyTi5mpwp8PhHlnOt1JOtBXbeZsW
+/B31WD3yUEGDpBGFaFdYiY891htPI2gpUl6REOcwtUnjuXwfeEgE4L/4+Xf1v/8+
+Lun9+Hfgs7IUTwgWYRqtS37F9COfiwQ3tuxq0bauwUvmmlmDMGKgnm4nl70I6XQ=
+=mjV/
+-----END PGP MESSAGE-----
diff --git a/dot_config/pulse/daemon.conf b/dot_config/pulse/daemon.conf
new file mode 100644
index 0000000..24708e5
--- /dev/null
+++ b/dot_config/pulse/daemon.conf
@@ -0,0 +1,4 @@
+default-sample-channels = 6
+default-sample-format = s24le
+default-sample-rate = 96000
+flat-volumes = no
diff --git a/dot_config/pulse/default.pa b/dot_config/pulse/default.pa
new file mode 100644
index 0000000..e89f4fc
--- /dev/null
+++ b/dot_config/pulse/default.pa
@@ -0,0 +1,4 @@
+.include /etc/pulse/default.pa
+
+# module-native-protocol-tcp is used by mpd
+load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
diff --git a/dot_config/redshift.conf.tmpl b/dot_config/redshift.conf.tmpl
new file mode 100644
index 0000000..fee87a3
--- /dev/null
+++ b/dot_config/redshift.conf.tmpl
@@ -0,0 +1,13 @@
+[redshift]
+adjustment-method=randr
+location-provider=manual
+brightness-day=1.0
+brightness-night=0.5
+transition=1
+gamma-night=2.0
+temp-day=6500
+temp-night=2500
+
+[manual]
+lat={{ .latitude }}
+lon={{ .longitude }}
diff --git a/dot_config/systemd/user/backup-email.service b/dot_config/systemd/user/backup-email.service
new file mode 100644
index 0000000..47260f1
--- /dev/null
+++ b/dot_config/systemd/user/backup-email.service
@@ -0,0 +1,38 @@
+[Unit]
+Description=backup dovecot
+Wants=network-online.target
+BindsTo=dovecot.service
+After=network-online.target
+ConditionFileNotEmpty=/media/t/Archives/email/rak.ac/backup.sh
+Before=borgmatic@tosh.service
+
+[Install]
+WantedBy=borgmatic@tosh.service
+
+[Service]
+Type=oneshot
+LockPersonality=true
+MemoryDenyWriteExecute=no
+NoNewPrivileges=yes
+PrivateTmp=yes
+ProtectControlGroups=yes
+ProtectHostname=yes
+RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK
+RestrictNamespaces=yes
+RestrictRealtime=yes
+RestrictSUIDSGID=yes
+SystemCallArchitectures=native
+SystemCallFilter=@system-service
+SystemCallErrorNumber=EPERM
+ProtectSystem=full
+
+Nice=19
+CPUSchedulingPolicy=batch
+IOSchedulingClass=best-effort
+IOSchedulingPriority=7
+IOWeight=100
+
+Restart=no
+LogRateLimitIntervalSec=0
+
+ExecStart=/media/t/Archives/email/rak.ac/backup.sh
diff --git a/dot_config/systemd/user/backup-email.timer b/dot_config/systemd/user/backup-email.timer
new file mode 100644
index 0000000..bf49a60
--- /dev/null
+++ b/dot_config/systemd/user/backup-email.timer
@@ -0,0 +1,10 @@
+[Unit]
+Description=Backup email
+
+[Timer]
+OnCalendar=daily
+Persistent=true
+RandomizedDelaySec=3h
+
+[Install]
+WantedBy=timers.target
diff --git a/dot_config/systemd/user/backup-irclogs.service b/dot_config/systemd/user/backup-irclogs.service
new file mode 100644
index 0000000..424073a
--- /dev/null
+++ b/dot_config/systemd/user/backup-irclogs.service
@@ -0,0 +1,37 @@
+[Unit]
+Description=backup IRC logs
+Wants=network-online.target
+After=network-online.target
+ConditionFileNotEmpty=/media/t/Archives/irc-logs/backup.sh
+Before=borgmatic@tosh.service
+
+[Install]
+WantedBy=borgmatic@tosh.service
+
+[Service]
+Type=oneshot
+LockPersonality=true
+MemoryDenyWriteExecute=no
+NoNewPrivileges=yes
+PrivateTmp=yes
+ProtectControlGroups=yes
+ProtectHostname=yes
+RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK
+RestrictNamespaces=yes
+RestrictRealtime=yes
+RestrictSUIDSGID=yes
+SystemCallArchitectures=native
+SystemCallFilter=@system-service
+SystemCallErrorNumber=EPERM
+ProtectSystem=full
+
+Nice=19
+CPUSchedulingPolicy=batch
+IOSchedulingClass=best-effort
+IOSchedulingPriority=7
+IOWeight=100
+
+Restart=no
+LogRateLimitIntervalSec=0
+
+ExecStart=/media/t/Archives/irc-logs/backup.sh
diff --git a/dot_config/systemd/user/backup-irclogs.timer b/dot_config/systemd/user/backup-irclogs.timer
new file mode 100644
index 0000000..c074ecb
--- /dev/null
+++ b/dot_config/systemd/user/backup-irclogs.timer
@@ -0,0 +1,10 @@
+[Unit]
+Description=Backup irc logs
+
+[Timer]
+OnCalendar=weekly
+Persistent=true
+RandomizedDelaySec=1h
+
+[Install]
+WantedBy=timers.target
diff --git a/dot_config/systemd/user/borgmatic@.service b/dot_config/systemd/user/borgmatic@.service
new file mode 100644
index 0000000..0a2b3e7
--- /dev/null
+++ b/dot_config/systemd/user/borgmatic@.service
@@ -0,0 +1,61 @@
+[Unit]
+Description=borgmatic backup
+Wants=network-online.target
+After=network-online.target
+# Prevent borgmatic from running unless the machine is plugged into power. Remove this line if you
+# want to allow borgmatic to run anytime.
+ConditionACPower=true
+ConditionFileNotEmpty=/home/rak/.config/borgmatic/%I.yaml
+Documentation=https://torsion.org/borgmatic/
+
+[Service]
+Type=oneshot
+
+# Security settings for systemd running as root, optional but recommended to improve security. You
+# can disable individual settings if they cause problems for your use case. For more details, see
+# the systemd manual: https://www.freedesktop.org/software/systemd/man/systemd.exec.html
+LockPersonality=true
+# Certain borgmatic features like Healthchecks integration need MemoryDenyWriteExecute to be off.
+# But you can try setting it to "yes" for improved security if you don't use those features.
+MemoryDenyWriteExecute=no
+NoNewPrivileges=yes
+PrivateTmp=yes
+ProtectControlGroups=yes
+ProtectHostname=yes
+RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK
+RestrictNamespaces=yes
+RestrictRealtime=yes
+RestrictSUIDSGID=yes
+SystemCallArchitectures=native
+SystemCallFilter=@system-service
+SystemCallErrorNumber=EPERM
+# To restrict write access further, change "ProtectSystem" to "strict" and uncomment
+# "ReadWritePaths", "ReadOnlyPaths", "ProtectHome", and "BindPaths". Then add any local repository
+# paths to the list of "ReadWritePaths" and local backup source paths to "ReadOnlyPaths". This
+# leaves most of the filesystem read-only to borgmatic.
+ProtectSystem=full
+# ReadWritePaths=-/mnt/my_backup_drive
+# ReadOnlyPaths=-/var/lib/my_backup_source
+# This will mount a tmpfs on top of /root and pass through needed paths
+# ProtectHome=tmpfs
+# BindPaths=-/root/.cache/borg -/root/.config/borg -/root/.borgmatic
+
+# May interfere with running external programs within borgmatic hooks.
+#CapabilityBoundingSet=CAP_DAC_READ_SEARCH CAP_NET_RAW
+
+# Lower CPU and I/O priority.
+Nice=19
+CPUSchedulingPolicy=batch
+IOSchedulingClass=best-effort
+IOSchedulingPriority=7
+IOWeight=100
+
+Restart=no
+# Prevent rate limiting of borgmatic log events. If you are using an older version of systemd that
+# doesn't support this (pre-240 or so), you may have to remove this option.
+LogRateLimitIntervalSec=0
+
+# Delay start to prevent backups running during boot. Note that systemd-inhibit requires dbus and
+# dbus-user-session to be installed.
+#ExecStartPre=sleep 1m
+ExecStart=systemd-inhibit --who="borgmatic" --what="sleep:shutdown" --why="Prevent interrupting scheduled backup" /usr/bin/borgmatic --verbosity -1 --syslog-verbosity 1 -c ${HOME}/.config/borgmatic/%I.yaml
diff --git a/dot_config/systemd/user/borgmatic@.timer b/dot_config/systemd/user/borgmatic@.timer
new file mode 100644
index 0000000..d51c9b2
--- /dev/null
+++ b/dot_config/systemd/user/borgmatic@.timer
@@ -0,0 +1,10 @@
+[Unit]
+Description=Run borgmatic backup
+
+[Timer]
+OnCalendar=daily
+Persistent=true
+RandomizedDelaySec=3h
+
+[Install]
+WantedBy=timers.target
diff --git a/dot_config/zathura/zathurarc b/dot_config/zathura/zathurarc
new file mode 100644
index 0000000..7284dde
--- /dev/null
+++ b/dot_config/zathura/zathurarc
@@ -0,0 +1,3 @@
+set recolor false
+set recolor_darkcolor #BDE090
+set recolor_lightcolor #000000
diff --git a/dot_cwmrc.tmpl b/dot_cwmrc.tmpl
new file mode 100644
index 0000000..7f07727
--- /dev/null
+++ b/dot_cwmrc.tmpl
@@ -0,0 +1,242 @@
+autogroup 0 "xconsole", "XConsole"
+autogroup 1 "URxvt"
+autogroup 1 "XTerm"
+autogroup 2 "Mozilla Firefox"
+autogroup 2 "qutebrowser"
+autogroup 6 "pavucontrol", "Pavucontrol"
+
+# assign windows to current group
+sticky yes
+
+command term {{ if (eq .chezmoi.os "openbsd" "darwin") -}}xterm{{ else }}urxvtc{{ end }}
+command lock {{ if (eq .chezmoi.os "openbsd") -}}"xlock -dpmsoff 1"{{ else }}"slock xset dpms force off"{{ end }}
+command dpmsoff "xset dpms force off"
+
+color activeborder "#ff7701"
+
+# F: function description
+# K: default keybinding
+unbind-key all
+
+# F: restart Restart the running cwm(1).
+# D: CMS-r Restart.
+bind-key 4-semicolon restart
+
+# F: quit Quit cwm(1).
+# D: CMS-q Quit.
+bind-key 4S-semicolon quit
+
+# F: terminal Spawn a new terminal.
+# D: CM-Return Spawn a new terminal.
+bind-key 4S-Return terminal
+
+# F: lock Lock the screen.
+# D: CM-Delete Lock the screen.
+bind-key 4-l lock
+
+# F: menu-window Launch window search menu.
+# D: M-slash Search for windows.
+bind-key 4-slash menu-window
+
+# F: menu-window-hidden Launch hidden window search menu.
+
+# F: menu-cmd Launch application search menu.
+# D: C-slash Search for applications.
+bind-key 4-c menu-cmd
+
+# F: menu-group Launch group search menu.
+bind-key 4-g menu-group
+
+# F: menu-exec Launch “exec program†menu.
+# D: M-question Spawn “exec program†dialog.
+bind-key 4-z menu-exec
+
+# F: menu-exec-wm Launch “exec WindowManager†menu.
+# D: CM-w Spawn “exec WindowManager†menu, allowing a switch
+# D: to another window manager.
+
+# F: menu-ssh Launch “ssh†menu.
+# D: M-period Spawn “ssh to†dialog. This parses
+# D: $HOME/.ssh/known_hosts to provide host auto-
+# D: completion. ssh(1) will be executed via the
+# D: configured terminal emulator.
+
+# F: group-toggle-[n] Toggle visibility of group n, where n is 1-9.
+# D: CM-[n] Toggle visibility of group n, where n is 1-9.
+bind-key C4-ampersand group-toggle-1
+bind-key C4-bracketleft group-toggle-2
+bind-key C4-braceleft group-toggle-3
+bind-key C4-braceright group-toggle-4
+bind-key C4-parenleft group-toggle-5
+bind-key C4-equal group-toggle-6
+bind-key C4-asterisk group-toggle-7
+bind-key C4-parenright group-toggle-8
+bind-key C4-plus group-toggle-9
+
+# F: group-only-[n] Show only group n, where n is 1-9, hiding other
+# groups.
+bind-key 4-ampersand group-only-1
+bind-key 4-bracketleft group-only-2
+bind-key 4-braceleft group-only-3
+bind-key 4-braceright group-only-4
+bind-key 4-parenleft group-only-5
+bind-key 4-equal group-only-6
+bind-key 4-asterisk group-only-7
+bind-key 4-parenright group-only-8
+bind-key 4-plus group-only-9
+
+# F: group-close-[n] Close all windows in group n, where n is 1-9.
+
+# F: group-toggle-all Toggle visibility of all groups.
+# D: CM-a Toggle visibility of all groups.
+bind-key 4-a group-toggle-all
+
+# F: window-group Toggle group membership of current window.
+# D: CM-g Toggle group membership of current window.
+# D: CM-M1 Toggle group membership of current window.
+
+# F: window-movetogroup-[n] Hide current window from display and move to
+# F: group n, where n is 1-9.
+bind-key 4S-ampersand window-movetogroup-1
+bind-key 4S-bracketleft window-movetogroup-2
+bind-key 4S-braceleft window-movetogroup-3
+bind-key 4S-braceright window-movetogroup-4
+bind-key 4S-parenleft window-movetogroup-5
+bind-key 4S-equal window-movetogroup-6
+bind-key 4S-asterisk window-movetogroup-7
+bind-key 4S-parenright window-movetogroup-8
+bind-key 4S-plus window-movetogroup-9
+
+# F: group-cycle Forward cycle through groups.
+# D: M-Right Cycle through active groups.
+bind-key 4-Right group-cycle
+
+# F: group-rcycle Reverse cycle through groups.
+# D: M-Left Reverse cycle through active groups.
+bind-key 4-Left group-cycle
+
+# F: window-cycle Forward cycle through windows.
+# D: M-Tab Cycle through currently visible windows.
+bind-key 4-Tab window-cycle
+
+# F: window-rcycle Reverse cycle through windows.
+# D: MS-Tab Reverse cycle through currently visible windows.
+bind-key 4S-Tab window-rcycle
+
+# F: window-cycle-ingroup Forward cycle through windows in current group.
+# F: window-rcycle-ingroup Reverse cycle through windows in current group.
+bind-key C4-Tab window-cycle-ingroup
+bind-key C4S-Tab window-rcycle-ingroup
+
+# F: window-close Close current window.
+# D: CM-x Close current window.
+bind-key 4S-j window-close
+
+# F: window-hide Hide current window.
+# D: M-Return Hide current window.
+# D: CMS-M3 Hide current window.
+bind-key 4-Return window-hide
+
+# F: window-lower Lower current window.
+# D: M-Down Lower current window.
+# D: M-M3 Lower current window.
+bind-key 4-Down window-lower
+
+# F: window-raise Raise current window.
+# D: M-Up Raise current window.
+bind-key 4-Up window-raise
+
+# F: window-menu-label Label current window.
+# D: CM-n Label current window.
+bind-key C4-l window-menu-label
+
+# F: window-freeze Freeze current window geometry.
+# D: CMS-f Toggle freezing geometry of current window.
+
+# F: window-stick Stick current window to all groups (same as
+# F: assigning to nogroup).
+# D: CM-s Toggle stickiness of current window.
+
+# F: window-fullscreen Full-screen current window (gap + border
+# F: removed).
+# D: CM-f Toggle full-screen mode of current window.
+bind-key 4-s window-fullscreen
+
+# F: window-maximize Maximize current window (gap + border honored).
+# D: CM-m Toggle maximization of current window.
+bind-key C4-m window-maximize
+
+# F: window-vmaximize Vertically maximize current window (gap + border
+# F: honored).
+# D: CM-equal Toggle vertical maximization of current window.
+bind-key C4-s window-vmaximize
+
+# F: window-hmaximize Horizontally maximize current window (gap +
+# F: border honored).
+# D: CMS-equal Toggle horizontal maximization of current window.
+bind-key M4-s window-hmaximize
+
+# F: window-htile Current window is placed at the top of the
+# F: screen, maximized horizontally and resized to
+# F: htile (default half) of the vertical screen
+# F: space. Other windows in its group share
+# F: remaining screen space.
+bind-key 4M-space window-htile
+
+# F: window-vtile Current window is placed on the left of the
+# F: screen, maximized vertically and resized to
+# F: vtile (default half) of the horizontal screen
+# F: space. Other windows in its group share
+# F: remaining screen space.
+bind-key 4-space window-vtile
+
+# F: window-move Move current window.
+# D: M-M1 Move current window.
+bind-mouse 4-1 window-move
+
+# F: window-resize Resize current window.
+# D: M-M2 Resize current window
+bind-mouse 4-3 window-resize
+
+# F: window-resize-up
+# F: window-resize-down
+# F: window-resize-right
+# F: window-resize-left
+# D: CM-[hjkl] Resize window by a small amount.
+bind-key C4-h window-resize-down
+bind-key C4-t window-resize-up
+bind-key C4-d window-resize-left
+bind-key C4-n window-resize-right
+
+# F: window-resize-up-big
+# F: window-resize-down-big
+# F: window-resize-right-big
+# F: window-resize-left-big
+# D: CMS-[hjkl] Resize window by a large amount; see cwmrc(5).
+bind-key C4S-h window-resize-down-big
+bind-key C4S-t window-resize-up-big
+bind-key C4S-d window-resize-left-big
+bind-key C4S-n window-resize-right-big
+
+# F: window-move-up Move window moveamount pixels up.
+# F: window-move-down Move window moveamount pixels down.
+# F: window-move-right Move window moveamount pixels right.
+# F: window-move-left Move window moveamount pixels left.
+# D: M-[hjkl] Move window by a small amount.
+bind-key 4-h window-move-down
+bind-key 4-t window-move-up
+bind-key 4-d window-move-left
+bind-key 4-n window-move-right
+
+# F: window-move-up-big Move window 10 times moveamount pixels up.
+# F: window-move-down-big Move window 10 times moveamount pixels down.
+# F: window-move-right-big Move window 10 times moveamount pixels right.
+# F: window-move-left-big Move window 10 times moveamount pixels left.
+# D: MS-[hjkl] Move window by a large amount; see cwmrc(5).
+bind-key 4S-h window-move-down-big
+bind-key 4S-t window-move-up-big
+bind-key 4S-d window-move-left-big
+bind-key 4S-n window-move-right-big
+
+bind-key 4-F5 "xset dpms force off"
+bind-key 4-F6 icd
diff --git a/dot_dzen/executable_battery.sh b/dot_dzen/executable_battery.sh
new file mode 100755
index 0000000..c50e53d
--- /dev/null
+++ b/dot_dzen/executable_battery.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# original script by lyon8 <lyon8@gmx.net>
+# modifications from original by <sean.escriva@gmail.com>
+# show your laptop battery state in dzen
+# Taken from http://www.webframp.com/2008/08/17/switchdzen/ and modified by Ryan
+# Kavanagh <ryanakca@kubuntu.org> to add support for a missing battery and use
+# /sys instead of /proc/acpi/battery
+
+BG='#000000' # dzen backgrounad
+FG='#008dd5' # dzen foreground
+W=114 # width of the dzen bar
+GW=50 # width of the gauge
+GFG='#33ccff' # color of the gauge
+GH=7 # height of the gauge
+GBG='#333' # color of gauge background
+X=0 # x position
+Y=0 # y position
+FN='-misc-fixed-medium-r-semicondensed--12-110-75-75-c-60-iso8859-1' # font
+
+LOWBAT=10 # percentage of battery life marked as low
+LOWCOL='#ff4747' # color when battery is low
+CHGCOL='#60da11' # color when battery is charging
+TIME_INT=2 # time interval in seconds to hold display
+TIME_ITER=5 # no of iterations in which time is displayed
+
+PREBAR="^i(${HOME}/.dzen/icons/power-bat.xbm) " # caption (also icons are possible)
+
+echo -n $PREBAR #uncomment for an icon
+
+PRESENT=`acpi -b`;
+if [ "${PRESENT}" ]; then
+ STATUS=`echo ${PRESENT} | grep Charging`;
+
+ RPERC=`echo ${PRESENT} | cut -d, -f2 | sed -e 's/[^0-9]//g'`;
+
+ # draw the bar and pipe everything into dzen
+ if [ $RPERC -le $LOWBAT ]; then
+ GFG=$LOWCOL;
+ fi
+ if [ "${STATUS}" ]; then
+ GFG=$CHGCOL;
+ else
+ GFG='#33ccff';
+ fi
+ echo $RPERC
+else
+ echo '??'
+fi
diff --git a/dot_dzen/executable_dzen.sh b/dot_dzen/executable_dzen.sh
new file mode 100755
index 0000000..0d2b8e4
--- /dev/null
+++ b/dot_dzen/executable_dzen.sh
@@ -0,0 +1,156 @@
+#!/bin/sh
+
+typeset -A DISKS
+###
+# Config
+###
+DATE_FORMAT="%a %d %b, %Y"
+TIME_ZONES=("America/Toronto" "UTC")
+DISKS=(home /home root /)
+SEPERATOR=' ^fg(#86AA3F)^c(3)^fg() '
+BAR_BG='#7DA926'
+BAR_FG='#B9D56E'
+BAR_HH=6
+BAR_HW=40
+BAR_VH=12
+BAR_VW=3
+BAR_ARGS="-bg $BAR_BG -fg $BAR_FG -w $BAR_HW -h $BAR_HH"
+ICON_DIR="$HOME/.dzen/icons/"
+NETWORK_INTERFACE=eth0
+NET_DOWN_MAX=55
+NET_UP_MAX=14
+MAILDIR=~/.maildb/GMAIL/
+
+GLOBALIVAL=1m
+DATEIVAL=60
+TIMEIVAL=1
+DISKIVAL=1
+#CPUTEMPIVAL=5
+#CPUIVAL=1
+#NPIVAL=3
+NETIVAL=1
+
+
+###
+# Functions
+###
+_date()
+{
+ date +${DATE_FORMAT}
+}
+
+_time()
+{
+ local zone
+ print_space=0
+ for zone in $TIME_ZONES; do
+ [[ $print_space -eq 1 ]] && print -n " "
+ print -n "${zone:t}: $(TZ=$zone date '+%H:%M')"
+ print_space=1
+ done
+}
+
+#
+# Format: label1 mountpoint1 label2 mountpoint2 ... labelN mountpointN
+# Copied and modified from Rob
+get_disk_usage() {
+ local rstr; local tstr; local i; local sep
+ for i in ${(k)DISKS}; do
+ tstr=$(print `df -h $DISKS[$i]|sed -ne 's/^.* \([0-9]*\)% .*/\1/p'` 100 | \
+ dzen2-gdbar -h $BAR_HH -w $BAR_HW -fg $BAR_FG -bg $BAR_BG -l "${i}" -nonl | \
+ sed 's/[0-9]\+%//g;s/ / /g')
+ if [ ! -z "$rstr" ]; then
+ sep=${SEPERATOR}
+ fi
+ rstr="${rstr}${sep}${tstr}"
+ done
+ print -n $rstr
+}
+
+# Requires mesure
+get_net_rates() {
+ local up; local down
+ up=`mesure -K -l -c 3 -t -o $NETWORK_INTERFACE`
+ down=`mesure -K -l -c 3 -t -i $NETWORK_INTERFACE`
+ echo "$down $up"
+}
+
+#cpu_temp()
+#{
+# print -n ${(@)$(</proc/acpi/thermal_zone/THRM/temperature)[2,3]}
+#}
+#
+#np()
+#{
+# #MAXPOS="100"
+# CAPTION="^i(${ICON_DIR}/musicS.xbm)"
+# #POS=`mpc | sed -ne 's/^.*(\([0-9]*\)%).*$/\1/p'`
+# #POSM="$POS $MAXPOS"
+# print -n "$CAPTION "
+# mpc | head -n1 | tr -d '\n'
+# #echo "$POSM" | gdbar -h 7 -w 50 -fg $BAR_FG -bg $BAR_BG
+#}
+#
+#cpu()
+#{
+# gcpubar -c 2 -bg $BAR_BG -fg $BAR_FG -w $BAR_HW -h $BAR_HH | tail -n1 | tr -d '\n'
+#}
+
+has_new_mail() {
+ find ${MAILDIR}/*/new -not -type d | wc -l
+}
+
+DATEI=0
+TIMEI=0
+DISKI=0
+#NPI=0
+#CPUTEMPI=0
+#CPUI=0
+NETI=0
+
+date=$(_date)
+times=$(_time)
+disk_usage=$(get_disk_usage)
+#now_playing=$(np)
+#temp=$(cpu_temp)
+#cpumeter=$(cpu)
+net_rates=( `get_net_rates` )
+
+while true; do
+ [[ $DATEI -ge $DATEIVAL ]] && date=$(_date) && DATEI=0
+ [[ $TIMEI -ge $TIMEIVAL ]] && times=$(_time) && TIMEI=0
+ [[ $DISKI -ge $DISKIVAL ]] && disk_usage=$(get_disk_usage) && DISKI=0
+ #[[ $NPI -ge $NPIVAL ]] && now_playing=$(np) && NPI=0
+ #[[ $CPUI -ge $CPUIVAL ]] && cpumeter=$(cpu) && CPUI=0
+ #[[ $CPUTEMPI -ge $CPUTEMPIVAL ]] && temp=$(cpu_temp) && CPUTEMPI=0
+ [[ $NETI -ge $NETIVAL ]] && net_rates=( `get_net_rates` ) && NETI=0
+
+ # Disk usage
+ echo -n "${disk_usage}${SEPERATOR}"
+ # Network
+ echo $net_rates[1] | dzen2-gdbar -nonl -s v -w $BAR_VW -h $BAR_VH -min 0 \
+ -max $NET_DOWN_MAX -fg $BAR_FG -bg $BAR_BG
+ echo -n " "
+ echo $net_rates[2] | dzen2-gdbar -nonl -s v -w $BAR_VW -h $BAR_VH -min 0 \
+ -max $NET_UP_MAX -fg $BAR_FG -bg $BAR_BG
+ echo -n "${SEPERATOR}"
+ # Mail notification
+ if [ `has_new_mail` -gt 0 ]; then
+ echo -n "^fg(#73d216)"
+ fi
+ echo -n "^i(${ICON_DIR}/mail.xbm)^fg()${SEPERATOR}"
+ # Time and date
+ echo -n "${times}${SEPERATOR}"
+ echo -n "${date}"
+ echo
+
+ DATEI=$(($DATEI+1))
+ TIMEI=$(($TIMEI+1))
+ DISKI=$(($DISKI+1))
+ #NPI=$(($NPI+1))
+ #CPUI=$(($CPUI+1))
+ #CPUTEMPI=$(($CPUTEMPI+1))
+ NETI=$(($NETI+1))
+
+ sleep $GLOBALIVAL
+done
diff --git a/dot_dzen/executable_temperature.sh b/dot_dzen/executable_temperature.sh
new file mode 100755
index 0000000..4badbc5
--- /dev/null
+++ b/dot_dzen/executable_temperature.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+#
+# original script by lyon8 <lyon8@gmx.net>
+# modifications from original by <sean.escriva@gmail.com>
+# show your laptop battery state in dzen
+# Taken from http://www.webframp.com/2008/08/17/switchdzen/ and modified by Ryan
+# Kavanagh <ryanakca@kubuntu.org> to add support for a missing battery and use
+# /sys instead of /proc/acpi/battery
+
+BG='#171717' # dzen backgrounad
+FG='#11DD11' # dzen foreground
+W=130 # width of the dzen bar
+GW=50 # width of the gauge
+GFG='#33ccff' # color of the gauge
+GH=7 # height of the gauge
+GBG='#333' # color of gauge background
+X=922 # x position
+Y=0 # y position
+FN='snap' # font
+TIME_INT=10
+
+TEMPERATURE=`acpi -t`
+
+while true; do
+ echo $TEMPERATURE | sed -e 's/.*ok, //g' && sleep $TIME_INT
+done | dzen2 -ta c -tw $W -y $Y -x $X -fg $FG -bg $BG #-fn $FN
diff --git a/dot_dzen/icons/arrow_down.xbm b/dot_dzen/icons/arrow_down.xbm
new file mode 100644
index 0000000..0502235
--- /dev/null
+++ b/dot_dzen/icons/arrow_down.xbm
@@ -0,0 +1,4 @@
+#define net_down_03_width 8
+#define net_down_03_height 8
+static unsigned char net_down_03_bits[] = {
+ 0x38, 0x38, 0x38, 0x38, 0xFE, 0x7C, 0x38, 0x10 };
diff --git a/dot_dzen/icons/arrow_up.xbm b/dot_dzen/icons/arrow_up.xbm
new file mode 100644
index 0000000..b21c007
--- /dev/null
+++ b/dot_dzen/icons/arrow_up.xbm
@@ -0,0 +1,4 @@
+#define net_up_03_width 8
+#define net_up_03_height 8
+static unsigned char net_up_03_bits[] = {
+ 0x10, 0x38, 0x7C, 0xFE, 0x38, 0x38, 0x38, 0x38 };
diff --git a/dot_dzen/icons/bluetooth.xbm b/dot_dzen/icons/bluetooth.xbm
new file mode 100644
index 0000000..3cc42d5
--- /dev/null
+++ b/dot_dzen/icons/bluetooth.xbm
@@ -0,0 +1,4 @@
+#define bluetooth_width 8
+#define bluetooth_height 8
+static unsigned char bluetooth_bits[] = {
+ 0x18, 0x2A, 0x6C, 0x38, 0x38, 0x6C, 0x2A, 0x18 };
diff --git a/dot_dzen/icons/corner.xbm b/dot_dzen/icons/corner.xbm
new file mode 100644
index 0000000..0851adf
--- /dev/null
+++ b/dot_dzen/icons/corner.xbm
@@ -0,0 +1,5 @@
+#define corner_width 8
+#define corner_height 16
+static unsigned char corner_bits[] = {
+ 0x00, 0x00, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/cpu.xbm b/dot_dzen/icons/cpu.xbm
new file mode 100644
index 0000000..2c7d0e8
--- /dev/null
+++ b/dot_dzen/icons/cpu.xbm
@@ -0,0 +1,6 @@
+#define cpu2_width 16
+#define cpu2_height 16
+static unsigned char cpu2_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x12, 0xfc, 0x3f,
+ 0xfc, 0x3f, 0x1c, 0x38, 0x1c, 0x38, 0x1e, 0x78, 0xfc, 0x3f, 0xfe, 0x7f,
+ 0xfc, 0x3f, 0x48, 0x12, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/down.xbm b/dot_dzen/icons/down.xbm
new file mode 100644
index 0000000..bc350dd
--- /dev/null
+++ b/dot_dzen/icons/down.xbm
@@ -0,0 +1,6 @@
+#define down_width 16
+#define down_height 16
+static unsigned char down_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xe0, 0x03, 0xc0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/fwd.xbm b/dot_dzen/icons/fwd.xbm
new file mode 100644
index 0000000..3f52ea9
--- /dev/null
+++ b/dot_dzen/icons/fwd.xbm
@@ -0,0 +1,4 @@
+#define fwd_width 8
+#define fwd_height 8
+static unsigned char fwd_bits[] = {
+ 0x00, 0x12, 0x36, 0x7E, 0x7E, 0x36, 0x12, 0x00 };
diff --git a/dot_dzen/icons/layout-full-black.xbm b/dot_dzen/icons/layout-full-black.xbm
new file mode 100644
index 0000000..1c97fde
--- /dev/null
+++ b/dot_dzen/icons/layout-full-black.xbm
@@ -0,0 +1,5 @@
+#define full_width 12
+#define full_height 12
+static unsigned char full_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0xfc, 0x03, 0x04, 0x02, 0x04, 0x02,
+ 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0xfc, 0x03, 0x00, 0x00};
diff --git a/dot_dzen/icons/layout-full.xbm b/dot_dzen/icons/layout-full.xbm
new file mode 100644
index 0000000..f0492b6
--- /dev/null
+++ b/dot_dzen/icons/layout-full.xbm
@@ -0,0 +1,8 @@
+#define max_width 18
+#define max_height 18
+static unsigned char max_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFC, 0xFF, 0x00, 0xFC, 0xFF, 0x00, 0x04, 0x80, 0x00, 0x04, 0x80, 0x00,
+ 0x04, 0x80, 0x00, 0x04, 0x80, 0x00, 0x04, 0x80, 0x00, 0x04, 0x80, 0x00,
+ 0x04, 0x80, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/layout-gimp.xbm b/dot_dzen/icons/layout-gimp.xbm
new file mode 100644
index 0000000..4711c31
--- /dev/null
+++ b/dot_dzen/icons/layout-gimp.xbm
@@ -0,0 +1,8 @@
+#define layout_gimp_width 18
+#define layout_gimp_height 18
+static unsigned char layout_gimp_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7c, 0xfd, 0x01, 0x00, 0x00, 0x00, 0x7c, 0xfd, 0x01, 0x44, 0x25, 0x01,
+ 0x44, 0x25, 0x01, 0x44, 0x25, 0x01, 0x7c, 0x01, 0x00, 0x40, 0xfd, 0x01,
+ 0x7c, 0x05, 0x01, 0x00, 0x04, 0x01, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/layout-im-full.xbm b/dot_dzen/icons/layout-im-full.xbm
new file mode 100644
index 0000000..ba75847
--- /dev/null
+++ b/dot_dzen/icons/layout-im-full.xbm
@@ -0,0 +1,8 @@
+#define layout_im_full_width 18
+#define layout_im_full_height 18
+static unsigned char layout_im_full_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xfc, 0xff, 0x00, 0x44, 0x80, 0x00, 0x44, 0x80, 0x00, 0x44, 0x80, 0x00,
+ 0x44, 0x80, 0x00, 0x44, 0x80, 0x00, 0x44, 0x80, 0x00, 0x44, 0x80, 0x00,
+ 0x44, 0x80, 0x00, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/layout-im-mirror.xbm b/dot_dzen/icons/layout-im-mirror.xbm
new file mode 100644
index 0000000..6cb3ed1
--- /dev/null
+++ b/dot_dzen/icons/layout-im-mirror.xbm
@@ -0,0 +1,8 @@
+#define layout_im_mirror_width 18
+#define layout_im_mirror_height 18
+static unsigned char layout_im_mirror_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xfc, 0xff, 0x00, 0x44, 0x80, 0x00, 0x44, 0x80, 0x00, 0x44, 0x80, 0x00,
+ 0x44, 0x80, 0x00, 0x44, 0x80, 0x00, 0xc4, 0xff, 0x00, 0x44, 0x80, 0x00,
+ 0x44, 0x80, 0x00, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/layout-im-tall.xbm b/dot_dzen/icons/layout-im-tall.xbm
new file mode 100644
index 0000000..704f503
--- /dev/null
+++ b/dot_dzen/icons/layout-im-tall.xbm
@@ -0,0 +1,8 @@
+#define layout_im_tall_width 18
+#define layout_im_tall_height 18
+static unsigned char layout_im_tall_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xfc, 0xff, 0x00, 0x44, 0x90, 0x00, 0x44, 0x90, 0x00, 0x44, 0x90, 0x00,
+ 0x44, 0x90, 0x00, 0x44, 0x90, 0x00, 0x44, 0x90, 0x00, 0x44, 0x90, 0x00,
+ 0x44, 0x90, 0x00, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/layout-im.xbm b/dot_dzen/icons/layout-im.xbm
new file mode 100644
index 0000000..e5e296a
--- /dev/null
+++ b/dot_dzen/icons/layout-im.xbm
@@ -0,0 +1,8 @@
+#define layout_im_grid_width 18
+#define layout_im_grid_height 18
+static unsigned char layout_im_grid_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xfc, 0xff, 0x00, 0x04, 0x80, 0x00, 0xa4, 0xbf, 0x00, 0x84, 0xa4, 0x00,
+ 0xa4, 0xa4, 0x00, 0xa4, 0xa4, 0x00, 0xa4, 0xa4, 0x00, 0xa4, 0xa4, 0x00,
+ 0x04, 0x80, 0x00, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/layout-mirror-black.xbm b/dot_dzen/icons/layout-mirror-black.xbm
new file mode 100644
index 0000000..246fd37
--- /dev/null
+++ b/dot_dzen/icons/layout-mirror-black.xbm
@@ -0,0 +1,5 @@
+#define mtall_width 12
+#define mtall_height 12
+static unsigned char mtall_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0xfc, 0x03, 0xfc, 0x03, 0xfc, 0x03,
+ 0xfc, 0x03, 0x00, 0x00, 0x6c, 0x03, 0x6c, 0x03, 0x6c, 0x03, 0x00, 0x00};
diff --git a/dot_dzen/icons/layout-mirror-bottom.xbm b/dot_dzen/icons/layout-mirror-bottom.xbm
new file mode 100644
index 0000000..e1d8679
--- /dev/null
+++ b/dot_dzen/icons/layout-mirror-bottom.xbm
@@ -0,0 +1,8 @@
+#define tilebottom_width 18
+#define tilebottom_height 18
+static unsigned char tilebottom_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFC, 0xFF, 0x00, 0x04, 0x80, 0x00, 0x04, 0x80, 0x00, 0x04, 0x80, 0x00,
+ 0x04, 0x80, 0x00, 0x04, 0x80, 0x00, 0xFC, 0xFF, 0x00, 0x44, 0x88, 0x00,
+ 0x44, 0x88, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/layout-mirror-top.xbm b/dot_dzen/icons/layout-mirror-top.xbm
new file mode 100644
index 0000000..10e8ca2
--- /dev/null
+++ b/dot_dzen/icons/layout-mirror-top.xbm
@@ -0,0 +1,8 @@
+#define tiletop_width 18
+#define tiletop_height 18
+static unsigned char tiletop_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFC, 0xFF, 0x00, 0x44, 0x88, 0x00, 0x44, 0x88, 0x00, 0xFC, 0xFF, 0x00,
+ 0x04, 0x80, 0x00, 0x04, 0x80, 0x00, 0x04, 0x80, 0x00, 0x04, 0x80, 0x00,
+ 0x04, 0x80, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/layout-tall-black.xbm b/dot_dzen/icons/layout-tall-black.xbm
new file mode 100644
index 0000000..1a67757
--- /dev/null
+++ b/dot_dzen/icons/layout-tall-black.xbm
@@ -0,0 +1,5 @@
+#define tall_width 12
+#define tall_height 12
+static unsigned char tall_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x07, 0x7e, 0x07, 0x7e, 0x00, 0x7e, 0x07,
+ 0x7e, 0x07, 0x7e, 0x00, 0x7e, 0x07, 0x7e, 0x07, 0x00, 0x00, 0x00, 0x00};
diff --git a/dot_dzen/icons/layout-tall-left.xbm b/dot_dzen/icons/layout-tall-left.xbm
new file mode 100644
index 0000000..91e9b75
--- /dev/null
+++ b/dot_dzen/icons/layout-tall-left.xbm
@@ -0,0 +1,8 @@
+#define tileleft_width 18
+#define tileleft_height 18
+static unsigned char tileleft_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFC, 0xFF, 0x00, 0x44, 0x80, 0x00, 0x44, 0x80, 0x00, 0x7C, 0x80, 0x00,
+ 0x44, 0x80, 0x00, 0x44, 0x80, 0x00, 0x7C, 0x80, 0x00, 0x44, 0x80, 0x00,
+ 0x44, 0x80, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/layout-tall-right.xbm b/dot_dzen/icons/layout-tall-right.xbm
new file mode 100644
index 0000000..f3c44ba
--- /dev/null
+++ b/dot_dzen/icons/layout-tall-right.xbm
@@ -0,0 +1,8 @@
+#define tileright_width 18
+#define tileright_height 18
+static unsigned char tileright_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFC, 0xFF, 0x00, 0x04, 0x88, 0x00, 0x04, 0x88, 0x00, 0x04, 0xF8, 0x00,
+ 0x04, 0x88, 0x00, 0x04, 0x88, 0x00, 0x04, 0xF8, 0x00, 0x04, 0x88, 0x00,
+ 0x04, 0x88, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/layout-threecol.xbm b/dot_dzen/icons/layout-threecol.xbm
new file mode 100644
index 0000000..3009ecc
--- /dev/null
+++ b/dot_dzen/icons/layout-threecol.xbm
@@ -0,0 +1,8 @@
+#define threecol_width 18
+#define threecol_height 18
+static unsigned char threecol_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFC, 0xFF, 0x00, 0x44, 0x88, 0x00, 0x44, 0x88, 0x00, 0x44, 0x88, 0x00,
+ 0x44, 0x88, 0x00, 0x44, 0x88, 0x00, 0x44, 0x88, 0x00, 0x44, 0x88, 0x00,
+ 0x44, 0x88, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/load.xbm b/dot_dzen/icons/load.xbm
new file mode 100644
index 0000000..b9a1061
--- /dev/null
+++ b/dot_dzen/icons/load.xbm
@@ -0,0 +1,6 @@
+#define load_width 16
+#define load_height 16
+static unsigned char load_bits[] = {
+ 0x00, 0x00, 0xfe, 0x7f, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40,
+ 0x02, 0x44, 0x02, 0x4a, 0x02, 0x71, 0x8e, 0x40, 0x52, 0x40, 0x22, 0x40,
+ 0x02, 0x40, 0x02, 0x40, 0xfe, 0x7f, 0x00, 0x00 };
diff --git a/dot_dzen/icons/mail.xbm b/dot_dzen/icons/mail.xbm
new file mode 100644
index 0000000..295eb73
--- /dev/null
+++ b/dot_dzen/icons/mail.xbm
@@ -0,0 +1,4 @@
+#define mail_width 8
+#define mail_height 8
+static unsigned char mail_bits[] = {
+ 0x00, 0xFF, 0x7E, 0xBD, 0xDB, 0xE7, 0xFF, 0x00 };
diff --git a/dot_dzen/icons/mem.xbm b/dot_dzen/icons/mem.xbm
new file mode 100644
index 0000000..5c5bc8e
--- /dev/null
+++ b/dot_dzen/icons/mem.xbm
@@ -0,0 +1,6 @@
+#define load_mem_width 16
+#define load_mem_height 16
+static unsigned char load_mem_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x12, 0x48, 0x12, 0xfc, 0x3f,
+ 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0xfc, 0x3f, 0x48, 0x12,
+ 0x48, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/mpd.xbm b/dot_dzen/icons/mpd.xbm
new file mode 100644
index 0000000..8211667
--- /dev/null
+++ b/dot_dzen/icons/mpd.xbm
@@ -0,0 +1,6 @@
+#define mpd_width 16
+#define mpd_height 16
+static unsigned char mpd_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x40, 0x10,
+ 0x40, 0x10, 0x40, 0x10, 0x40, 0x10, 0x40, 0x10, 0x70, 0x1c, 0x78, 0x1e,
+ 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/net-wifi.xbm b/dot_dzen/icons/net-wifi.xbm
new file mode 100644
index 0000000..0b3a4a1
--- /dev/null
+++ b/dot_dzen/icons/net-wifi.xbm
@@ -0,0 +1,6 @@
+#define net_wifi4_width 16
+#define net_wifi4_height 16
+static unsigned char net_wifi4_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x08, 0x10, 0xe4, 0x27, 0x10, 0x08,
+ 0xc0, 0x03, 0x20, 0x04, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01,
+ 0xc0, 0x03, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00 };
diff --git a/dot_dzen/icons/net-wifi3.xbm b/dot_dzen/icons/net-wifi3.xbm
new file mode 100644
index 0000000..7ebb55d
--- /dev/null
+++ b/dot_dzen/icons/net-wifi3.xbm
@@ -0,0 +1,6 @@
+#define wireless3_full_width 16
+#define wireless3_full_height 16
+static unsigned char wireless3_full_bits[] = {
+ 0x00, 0x00, 0xf0, 0x0f, 0x08, 0x10, 0xe4, 0x27, 0x10, 0x08, 0x00, 0x00,
+ 0xc0, 0x03, 0xc0, 0x03, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f,
+ 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/net-wifi4.xbm b/dot_dzen/icons/net-wifi4.xbm
new file mode 100644
index 0000000..8179eb4
--- /dev/null
+++ b/dot_dzen/icons/net-wifi4.xbm
@@ -0,0 +1,6 @@
+#define net_wifi4_width 16
+#define net_wifi4_height 16
+static unsigned char net_wifi4_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0xfe, 0x7f, 0x00, 0x00,
+ 0xfc, 0x3f, 0xfc, 0x3f, 0x00, 0x00, 0xf8, 0x1f, 0xf8, 0x1f, 0x00, 0x00,
+ 0xe0, 0x07, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/net-wifi5.xbm b/dot_dzen/icons/net-wifi5.xbm
new file mode 100644
index 0000000..8a097ef
--- /dev/null
+++ b/dot_dzen/icons/net-wifi5.xbm
@@ -0,0 +1,6 @@
+#define wireless_full_width 16
+#define wireless_full_height 16
+static unsigned char wireless_full_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0xfe, 0x7f, 0x00, 0x00,
+ 0xfc, 0x3f, 0xf8, 0x1f, 0x00, 0x00, 0xf0, 0x0f, 0xe0, 0x07, 0x00, 0x00,
+ 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/net-wired.xbm b/dot_dzen/icons/net-wired.xbm
new file mode 100644
index 0000000..d9655d7
--- /dev/null
+++ b/dot_dzen/icons/net-wired.xbm
@@ -0,0 +1,6 @@
+#define network_eth2_width 16
+#define network_eth2_height 16
+static unsigned char network_eth2_bits[] = {
+ 0x00, 0x00, 0xfe, 0x7f, 0x02, 0x40, 0x02, 0x40, 0xc2, 0x43, 0xc2, 0x43,
+ 0xc2, 0x43, 0xf2, 0x4f, 0xf2, 0x4f, 0xf2, 0x4f, 0xf2, 0x4f, 0xf2, 0x4f,
+ 0x02, 0x40, 0x02, 0x40, 0xfe, 0x7f, 0x00, 0x00 };
diff --git a/dot_dzen/icons/net-wired2.xbm b/dot_dzen/icons/net-wired2.xbm
new file mode 100644
index 0000000..fb7276a
--- /dev/null
+++ b/dot_dzen/icons/net-wired2.xbm
@@ -0,0 +1,6 @@
+#define network_eth1_width 16
+#define network_eth1_height 16
+static unsigned char network_eth1_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x60, 0x03, 0x70, 0x07,
+ 0x78, 0x0f, 0x7f, 0x7f, 0x7f, 0x7f, 0x78, 0x0f, 0x70, 0x07, 0x60, 0x03,
+ 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/next.xbm b/dot_dzen/icons/next.xbm
new file mode 100644
index 0000000..3937532
--- /dev/null
+++ b/dot_dzen/icons/next.xbm
@@ -0,0 +1,4 @@
+#define next_width 8
+#define next_height 8
+static unsigned char next_bits[] = {
+ 0x00, 0x42, 0x4E, 0x7E, 0x7E, 0x4E, 0x42, 0x00 };
diff --git a/dot_dzen/icons/pause.xbm b/dot_dzen/icons/pause.xbm
new file mode 100644
index 0000000..6bb2251
--- /dev/null
+++ b/dot_dzen/icons/pause.xbm
@@ -0,0 +1,4 @@
+#define pause_width 8
+#define pause_height 8
+static unsigned char pause_bits[] = {
+ 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00 };
diff --git a/dot_dzen/icons/phones.xbm b/dot_dzen/icons/phones.xbm
new file mode 100644
index 0000000..cab8c58
--- /dev/null
+++ b/dot_dzen/icons/phones.xbm
@@ -0,0 +1,4 @@
+#define phones_width 8
+#define phones_height 8
+static unsigned char phones_bits[] = {
+ 0x3C, 0x42, 0x81, 0x81, 0xA5, 0xE7, 0xE7, 0x66 };
diff --git a/dot_dzen/icons/play.xbm b/dot_dzen/icons/play.xbm
new file mode 100644
index 0000000..d42ad52
--- /dev/null
+++ b/dot_dzen/icons/play.xbm
@@ -0,0 +1,4 @@
+#define play_width 8
+#define play_height 8
+static unsigned char play_bits[] = {
+ 0x00, 0x06, 0x1E, 0x7E, 0x7E, 0x1E, 0x06, 0x00 };
diff --git a/dot_dzen/icons/plus.xbm b/dot_dzen/icons/plus.xbm
new file mode 100644
index 0000000..f8e5f8a
--- /dev/null
+++ b/dot_dzen/icons/plus.xbm
@@ -0,0 +1,5 @@
+#define occupied_width 8
+#define occupied_height 16
+static unsigned char occupied_bits[] = {
+ 0x00, 0x00, 0x08, 0x08, 0x3e, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/power-ac.xbm b/dot_dzen/icons/power-ac.xbm
new file mode 100644
index 0000000..45ed243
--- /dev/null
+++ b/dot_dzen/icons/power-ac.xbm
@@ -0,0 +1,6 @@
+#define power_ac_width 16
+#define power_ac_height 16
+static unsigned char power_ac_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x07, 0xc0, 0x3f,
+ 0xe0, 0x07, 0xfc, 0x07, 0xfc, 0x07, 0xe0, 0x07, 0xc0, 0x3f, 0x80, 0x07,
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/power-bat.xbm b/dot_dzen/icons/power-bat.xbm
new file mode 100644
index 0000000..c450bbc
--- /dev/null
+++ b/dot_dzen/icons/power-bat.xbm
@@ -0,0 +1,6 @@
+#define battery_width 16
+#define battery_height 16
+static unsigned char battery_bits[] = {
+ 0x00, 0x00, 0xc0, 0x03, 0xc0, 0x03, 0xf0, 0x0f, 0xf0, 0x0f, 0x10, 0x08,
+ 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f,
+ 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0x00, 0x00 };
diff --git a/dot_dzen/icons/power-bat2.xbm b/dot_dzen/icons/power-bat2.xbm
new file mode 100644
index 0000000..e7be632
--- /dev/null
+++ b/dot_dzen/icons/power-bat2.xbm
@@ -0,0 +1,6 @@
+#define power_bat2_width 16
+#define power_bat2_height 16
+static unsigned char power_bat2_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x1f, 0x7e, 0x18,
+ 0x7e, 0x78, 0x7e, 0x78, 0x7e, 0x78, 0x7e, 0x78, 0x7e, 0x18, 0xfe, 0x1f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/prev.xbm b/dot_dzen/icons/prev.xbm
new file mode 100644
index 0000000..8774315
--- /dev/null
+++ b/dot_dzen/icons/prev.xbm
@@ -0,0 +1,4 @@
+#define prev_width 8
+#define prev_height 8
+static unsigned char prev_bits[] = {
+ 0x00, 0x42, 0x72, 0x7E, 0x7E, 0x72, 0x42, 0x00 };
diff --git a/dot_dzen/icons/rwd.xbm b/dot_dzen/icons/rwd.xbm
new file mode 100644
index 0000000..5170b21
--- /dev/null
+++ b/dot_dzen/icons/rwd.xbm
@@ -0,0 +1,4 @@
+#define rwd_width 8
+#define rwd_height 8
+static unsigned char rwd_bits[] = {
+ 0x00, 0x48, 0x6C, 0x7E, 0x7E, 0x6C, 0x48, 0x00 };
diff --git a/dot_dzen/icons/spkr_hi.xbm b/dot_dzen/icons/spkr_hi.xbm
new file mode 100644
index 0000000..7c2ffc4
--- /dev/null
+++ b/dot_dzen/icons/spkr_hi.xbm
@@ -0,0 +1,4 @@
+#define spkr_01_width 8
+#define spkr_01_height 8
+static unsigned char spkr_01_bits[] = {
+ 0x08, 0x4C, 0x8F, 0xAF, 0xAF, 0x8F, 0x4C, 0x08 };
diff --git a/dot_dzen/icons/spkr_mute.xbm b/dot_dzen/icons/spkr_mute.xbm
new file mode 100644
index 0000000..8265bf8
--- /dev/null
+++ b/dot_dzen/icons/spkr_mute.xbm
@@ -0,0 +1,4 @@
+#define spkr_02_width 8
+#define spkr_02_height 8
+static unsigned char spkr_02_bits[] = {
+ 0x08, 0x0C, 0x0F, 0x1F, 0x1F, 0x0F, 0x0C, 0x08 };
diff --git a/dot_dzen/icons/square.xbm b/dot_dzen/icons/square.xbm
new file mode 100644
index 0000000..4bc66cd
--- /dev/null
+++ b/dot_dzen/icons/square.xbm
@@ -0,0 +1,5 @@
+#define square_width 8
+#define square_height 16
+static unsigned char square_bits[] = {
+ 0x00, 0x00, 0x1e, 0x1e, 0x1e, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/stop.xbm b/dot_dzen/icons/stop.xbm
new file mode 100644
index 0000000..f92b64d
--- /dev/null
+++ b/dot_dzen/icons/stop.xbm
@@ -0,0 +1,4 @@
+#define stop_width 8
+#define stop_height 8
+static unsigned char stop_bits[] = {
+ 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00 };
diff --git a/dot_dzen/icons/temp.xbm b/dot_dzen/icons/temp.xbm
new file mode 100644
index 0000000..f37932b
--- /dev/null
+++ b/dot_dzen/icons/temp.xbm
@@ -0,0 +1,6 @@
+#define temp_width 16
+#define temp_height 16
+static unsigned char temp_bits[] = {
+ 0x00, 0x00, 0x80, 0x01, 0xc0, 0x0b, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x0b,
+ 0x40, 0x02, 0x40, 0x02, 0x40, 0x0a, 0x40, 0x02, 0x40, 0x02, 0x60, 0x06,
+ 0x20, 0x04, 0x60, 0x06, 0xc0, 0x03, 0x00, 0x00 };
diff --git a/dot_dzen/icons/up.xbm b/dot_dzen/icons/up.xbm
new file mode 100644
index 0000000..2fb6f25
--- /dev/null
+++ b/dot_dzen/icons/up.xbm
@@ -0,0 +1,6 @@
+#define up_width 16
+#define up_height 16
+static unsigned char up_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x00, 0xc0, 0x01, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/vol-hi.xbm b/dot_dzen/icons/vol-hi.xbm
new file mode 100644
index 0000000..7c4a849
--- /dev/null
+++ b/dot_dzen/icons/vol-hi.xbm
@@ -0,0 +1,6 @@
+#define vol_hi2_width 16
+#define vol_hi2_height 16
+static unsigned char vol_hi2_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x80, 0x21, 0xc0, 0x49, 0xfc, 0x51,
+ 0xfc, 0x55, 0xfc, 0x55, 0xfc, 0x55, 0xfc, 0x55, 0xfc, 0x51, 0xc0, 0x49,
+ 0x80, 0x21, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/vol-mute.xbm b/dot_dzen/icons/vol-mute.xbm
new file mode 100644
index 0000000..2d01f7b
--- /dev/null
+++ b/dot_dzen/icons/vol-mute.xbm
@@ -0,0 +1,6 @@
+#define vol_mute2_width 16
+#define vol_mute2_height 16
+static unsigned char vol_mute2_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x01, 0xc0, 0x01, 0xfc, 0x01,
+ 0xfc, 0x01, 0xfc, 0x29, 0xfc, 0x11, 0xfc, 0x29, 0xfc, 0x01, 0xc0, 0x01,
+ 0x80, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00 };
diff --git a/dot_dzen/icons/wifi_01.xbm b/dot_dzen/icons/wifi_01.xbm
new file mode 100644
index 0000000..315d0f7
--- /dev/null
+++ b/dot_dzen/icons/wifi_01.xbm
@@ -0,0 +1,4 @@
+#define wifi_01_width 8
+#define wifi_01_height 8
+static unsigned char wifi_01_bits[] = {
+ 0x80, 0xA0, 0xA8, 0xAB, 0xAB, 0xA8, 0xA0, 0x80 };
diff --git a/dot_dzen/icons/wifi_02.xbm b/dot_dzen/icons/wifi_02.xbm
new file mode 100644
index 0000000..bd2b3ee
--- /dev/null
+++ b/dot_dzen/icons/wifi_02.xbm
@@ -0,0 +1,4 @@
+#define wifi_02_width 8
+#define wifi_02_height 8
+static unsigned char wifi_02_bits[] = {
+ 0x40, 0x90, 0xA4, 0xA9, 0xA9, 0xA4, 0x90, 0x40 };
diff --git a/dot_emacs.d/elpa/private_gnupg/private_pubring.kbx b/dot_emacs.d/elpa/private_gnupg/private_pubring.kbx
new file mode 100644
index 0000000..e5f5b58
--- /dev/null
+++ b/dot_emacs.d/elpa/private_gnupg/private_pubring.kbx
Binary files differ
diff --git a/AUTHORS b/dot_emacs.d/local/dictem/AUTHORS
index b4dd7b6..b4dd7b6 100644
--- a/AUTHORS
+++ b/dot_emacs.d/local/dictem/AUTHORS
diff --git a/COPYING b/dot_emacs.d/local/dictem/COPYING
index bacce4d..bacce4d 100644
--- a/COPYING
+++ b/dot_emacs.d/local/dictem/COPYING
diff --git a/NEWS b/dot_emacs.d/local/dictem/NEWS
index 46f946b..46f946b 100644
--- a/NEWS
+++ b/dot_emacs.d/local/dictem/NEWS
diff --git a/dot_emacs.d/local/dictem/README b/dot_emacs.d/local/dictem/README
new file mode 100644
index 0000000..c1d6e78
--- /dev/null
+++ b/dot_emacs.d/local/dictem/README
@@ -0,0 +1,558 @@
+DictEm is a Dictionary protocol client for GNU Emacs.
+
+It uses a console dict client (http://sf.net/projects/dict) and
+implements all functions of the client part of DICT protocol
+(RFC-2229, www.dict.org), i.e. looking up words and definitions,
+obtaining information about available strategies, provided databases,
+information about DICT server etc.
+
+Unlike dictionary.el
+(http://www.myrkr.in-berlin.de/dictionary/index.html) DictEm widely
+uses autocompletion that is used for selecting dictionary and search
+strategy. Moreover, DictEm provides several hooks which may be used
+for buffer postprocessing. For example, inbuilt hyperlinking and
+highlighting mechanisms are based on this possibility. Another example
+is that information obtained from DICT server that is in HTML, ROFF or
+INFO format can be easily viewed by Emacs+DictEm if the user supplies
+appropriate conversion functions. Of course DictEm can be differently
+configured for different Emacs modes (major, minor or buffer
+oriented), that allows modularized access to all data serviced by DICT
+servers. This makes it ideal tool for translating articles between a
+series of foreign languages, browsing manuals and other tasks
+depending on Emacs mode user currently works with.
+
+Additionally DictEm supports accessing so called virtual dictionaries (a set
+of dictionaries provided by DICT server that user prefers to treat as
+a single one).
+
+Yet another feature DictEm provides is a set of useful functions with
+a help of which user can extend DictEm functionality such as to define
+new search strategies or even provide new functionality such as to use
+another sources of data other than DICT servers.
+
+See below for a set of example configuration and extensions.
+
+Also DictEm uses customization mechanism provided by Emacs that helps
+Emacs users to easily configure DictEm.
+
+COPYING
+============
+
+See the file COPYING
+
+DOWNLOAD
+========
+
+Latest sources can be downloaded from
+http://sourceforge.net/projects/dictem
+or
+http://freshmeat.net/projects/dictem
+
+INSTALLATION
+============
+
+* In order to uncompress dictem tarball run the following.
+
+ tar xfv dictem-x.y.z.tar.gz
+
+ If you read this file, you probably have already done this.
+
+* Change your current directory to dictem.
+
+ cd dictem-x.y.z
+
+* Copy *.el file to the directory you want.
+
+ cp *.el /path/to/emacs/el/files
+
+* Make sure that DICT client named dict
+ (available at http://sf.net/projects/dict)
+ is installed on your system.
+ Console dict client is used by DictEm for accessing the DICT server.
+ dict-1.9.14 or later is strongly recommended.
+ If you'll set dictem-option-mime variable to t (read below),
+ dict-1.10.3 or later MUST be used.
+
+REPORTING BUGS
+==============
+
+ Please send all bug reports and suggestions directly to
+ Aleksey Cheusov <vle@gmx.net>.
+ Reporting bugs at sf.net is also good.
+
+ Also note that there exists dict-beta@dict.org mailing list (low
+ traffic) where you can ask questions about DICT protocol and
+ software.
+
+CONFIGURING
+=============
+
+Customization group
+-------------------
+
+Take note, that DictEm defines customization group "dictem".
+So, it may be easier for you to customize DictEm by running
+M-x customize-group <RET> dictem <RET>
+
+Manual Configuration
+--------------------
+
+Ex.1
+
+The easiest configuration of dictem may look like this
+
+; Add to load-path variable a new directory with files of dictem
+(add-to-list 'load-path "/path/you/installed/dictem/to")
+
+; Loading dictem functions
+(require 'dictem)
+
+; Setting the dictionary server hostname.
+; This part is optional, if dictem-server is nil (the default value)
+; "dict" command line utility will use its ows config file
+; ~/.dictrc or PREFIX/etc/dict.conf.
+; Keeping dictem-server variable unset is recomended because
+; this allows to try _list of_ servers until connection is made,
+; see dict(1) for details.
+;(setq dictem-server "localhost")
+;(setq dictem-server "dict.org")
+
+
+; Setting the dictionary server port.
+; Setting dictem-port is usually not necessary because
+; most DICT servers use the default port 2628.
+;(setq dictem-port "2628")
+
+; Code necessary to obtain database and strategy list from DICT
+; server. As of version 0.90, dictem runs this function from
+; dictem-select-database and dictem-select-strategy if an
+; initialization was not completed or failed previously, that is
+; running dictem-initialize is optional
+(dictem-initialize)
+
+; Assigning hot keys for accessing DICT server
+
+; SEARCH = MATCH + DEFINE
+; Ask for word, database and search strategy
+; and show definitions found
+(global-set-key "\C-cs" 'dictem-run-search)
+
+; MATCH
+; Ask for word, database and search strategy
+; and show matches found
+(global-set-key "\C-cm" 'dictem-run-match)
+
+; DEFINE
+; Ask for word and database name
+; and show definitions found
+(global-set-key "\C-cd" 'dictem-run-define)
+
+; SHOW SERVER
+; Show information about DICT server
+(global-set-key "\C-c\M-r" 'dictem-run-show-server)
+
+; SHOW INFO
+; Show information about the database
+(global-set-key "\C-c\M-i" 'dictem-run-show-info)
+
+; SHOW DB
+; Show a list of databases provided by DICT server
+(global-set-key "\C-c\M-b" 'dictem-run-show-databases)
+
+-------
+Ex.2
+
+There are a few functions that can make dictem look
+a bit nicer and be more functional. They should
+be added to special hooks like the following.
+
+; For creating hyperlinks on database names
+; and found matches.
+; Click on them with mouse-2
+(add-hook 'dictem-postprocess-match-hook
+ 'dictem-postprocess-match)
+
+; For highlighting the separator between the definitions found.
+; This also creates hyperlink on database names.
+(add-hook 'dictem-postprocess-definition-hook
+ 'dictem-postprocess-definition-separator)
+
+; For creating hyperlinks in dictem buffer
+; that contains definitions.
+(add-hook 'dictem-postprocess-definition-hook
+ 'dictem-postprocess-definition-hyperlinks)
+
+; For creating hyperlinks in dictem buffer
+; that contains information about a database.
+(add-hook 'dictem-postprocess-show-info-hook
+ 'dictem-postprocess-definition-hyperlinks)
+
+-------
+Ex.3
+
+If you want to combine some databases in you own "virtual" dictionary,
+create them like this
+
+(setq dictem-user-databases-alist
+ '(("_en-ru" . ("mueller7" "korolew_en-ru"))
+ ("_en-en" . ("foldoc" "gcide" "wn"))
+ ("_ru-ru" . ("beslov" "ushakov" "ozhegov" "brok_and_efr"))
+ ("_unidoc" . ("susv3" "man" "info" "howto" "rfc"))
+ ))
+
+As a result four new special database collections will be created
+and new names will appear when
+dictem-run function will ask you about database name.
+
+-------
+Ex.4
+
+You can even create virtual dictionaries which consist of
+databases from different DICT server.
+The dict url form dict:///religion means 'dict' command line tool
+will be called without -h option, i.e. a list of dictionary servers
+from .dictrc (or dict.conf) will be used.
+
+(setq dictem-user-databases-alist
+ '(("_en-ru" . ("dict://mova.org/mueller7"
+ "dict://dict.org:2628/web1913"))
+ ("_ru-ru" . ("beslov" "dict:///religion"))
+ ))
+
+another example:
+
+(setq dictem-user-databases-alist
+ `(("en-en" . ("dict://dict.org:2628/english"))
+ ("en-ru" . ("dict:///en-ru"
+ "dict://dict.org:2628/eng-rus"
+ ))
+ ))
+
+-------
+Ex.5
+
+If your DICT server provides too many databases and most of which
+are of no interest for you, you can disable them
+and use only those specified in dictem-user-databases-alist variable.
+
+(setq dictem-use-user-databases-only t)
+
+-------
+Ex.6
+
+Of course, you can assign your own key bindings in dictem buffer
+
+(define-key dictem-mode-map [tab] 'dictem-next-link)
+(define-key dictem-mode-map [(backtab)] 'dictem-previous-link)
+
+-------
+Ex.7
+
+You are not limited to the default DICT server only.
+The following code will allow you to access any server you want.
+You'll be asked for host and port.
+
+; DEFINE
+(global-set-key
+ "\C-c\M-d"
+ '(lambda ()
+ (interactive)
+ (save-dictem
+ (let* ((dictem-server (read-string "server: "
+ dictem-server nil "dict.org"))
+ (dictem-port (read-string "port: "
+ (dictem-get-port) nil "2628")))
+ (dictem-initialize)
+ (call-interactively 'dictem-run-define)))))
+
+; MATCH
+(global-set-key
+ "\C-c\M-m"
+ '(lambda ()
+ (interactive)
+ (save-dictem
+ (let* ((dictem-server (read-string "server: "
+ dictem-server nil "dict.org"))
+ (dictem-port (read-string "port: "
+ (dictem-get-port) nil "2628")))
+ (dictem-initialize)
+ (call-interactively 'dictem-run-match)))))
+
+; SEARCH = MATCH+DEFINE
+(global-set-key
+ "\C-c\M-s"
+ '(lambda ()
+ (interactive)
+ (save-dictem
+ (let* ((dictem-server (read-string "server: "
+ dictem-server nil "dict.org"))
+ (dictem-port (read-string "port: "
+ (dictem-get-port) nil "2628")))
+ (dictem-initialize)
+ (call-interactively 'dictem-run-search)))))
+
+; SHOW INFO
+(global-set-key
+ "\C-c\M-i"
+ '(lambda ()
+ (interactive)
+ (save-dictem
+ (let* ((dictem-server (read-string "server: "
+ dictem-server nil "dict.org"))
+ (dictem-port (read-string "port: "
+ (dictem-get-port) nil "2628")))
+ (dictem-initialize)
+ (call-interactively 'dictem-run-show-info)))))
+
+; SHOW SERVER
+(global-set-key
+ "\C-c\M-r"
+ '(lambda ()
+ (interactive)
+ (save-dictem
+ (let* ((dictem-server (read-string "server: "
+ dictem-server nil "dict.org"))
+ (dictem-port (read-string "port: "
+ (dictem-get-port) nil "2628")))
+ (dictem-initialize)
+ (call-interactively 'dictem-run-show-server)))))
+
+-------
+Ex.8
+
+Some databases may have specially formatted definitions,
+for example, HTML, MIME, DICF or ROFF formats.
+It is easy to postprocess them.
+
+; All functions from dictem-postprocess-each-definition-hook
+; will be run for each definition which in turn will be narrowed.
+; Current database name is kept in dictem-current-dbname variable.
+; The following code demonstrates how to highlight SUSV3 and ROFF
+; definitions.
+(add-hook 'dictem-postprocess-definition-hook
+ 'dictem-postprocess-each-definition)
+
+; Function for highlighting definition from the database "susv3".
+(defun dictem-highlight-susv3-definition ()
+ (cond ((string= "susv3" dictem-current-dbname)
+ (goto-char (point-min))
+ (while (search-forward-regexp
+ "^ *[QWERTYUIOPASDFGHJKLZXCVBNM ]+$" nil t)
+ (put-text-property
+ (match-beginning 0) (match-end 0) 'face 'bold)
+ ))))
+
+; Function to show roff-formatted text from the database "man".
+(require 'woman)
+(defun dictem-highlight-man-definition ()
+ (cond ((string= "man" dictem-current-dbname)
+ (goto-char (point-min))
+ (while (search-forward-regexp "^ " nil t)
+ (replace-match ""))
+ (goto-char (point-min))
+ (forward-line 2)
+ (woman-decode-region (point) (point-max))
+ )))
+
+(add-hook 'dictem-postprocess-each-definition-hook
+ 'dictem-highlight-susv3-definition)
+(add-hook 'dictem-postprocess-each-definition-hook
+ 'dictem-highlight-man-definition)
+
+-------
+Ex.9
+
+; The dictem's top level function is 'dictem-run'.
+; By using it more advanced ELISP programmers
+; can create their own search scenaria. Look at this code.
+
+(dictem-run
+ 'dictem-base-search
+ "gcide" "apple" "lev")
+
+(dictem-run
+ 'dictem-base-match
+ "dict://mova.org/mueller7" "apple" "exact")
+
+(dictem-run
+ 'dictem-base-define
+ '("dict://mova.org/mueller7" "dict://dict.org/gcide")
+ "apple" "exact")
+
+(dictem-run 'dictem-base-show-info "dict://dict.org/gcide")
+
+(let ((dictem-server "localhost"))
+ (dictem-run
+ '(lambda (a b c)
+ (dictem-base-show-strategies nil nil nil)
+ (dictem-base-show-databases nil nil nil)
+ (dictem-base-show-server nil nil nil)
+ )))
+
+(dictem-run
+ '(lambda (a b c)
+ (dictem-base-define
+ '("man" "susv3")
+ (dictem-read-query (thing-at-point 'word))
+ nil ))
+ nil nil)
+
+(let ((query (dictem-read-query (thing-at-point 'word))))
+ (dictem-run
+ `((lambda (a b c)
+ (dictem-base-match
+ '("gcide" "wn")
+ ,query "exact"))
+ (lambda (a b c)
+ (dictem-base-search
+ '("mueller7" "korolew_en-ru")
+ ,query "word")))))
+
+-------
+Ex.10
+
+By default dictem remembers the database name and strategy that
+was used last time.
+The dictem-select-database and dictem-select-strategy functions
+will use these values as a default in the minibuffer.
+If you dislike this behaviour, set variables
+dictem-default-database and/or dictem-default-strategy.
+
+(add-hook 'c-mode-common-hook
+ '(lambda ()
+ (interactive)
+ (make-local-variable 'dictem-default-database)
+ (setq dictem-default-database "man")
+ ))
+
+The example above sets default database to "man"
+in C buffers.
+
+-------
+Ex.11
+
+As of dictem-0.0.4 dictem-empty-initial-input customizable variable
+tells dictem-read-query whether to leave initial input empty or not.
+It is `nil' by default.
+For emulating behaviour of older releases, set it to `t'.
+
+(setq dictem-empty-initial-input t)
+
+-------
+Ex. 12
+
+By default dictem-postprocess-definition-hyperlinks function
+assumes that hyperlinks have the following form: {foo} or {foo|bar}.
+Sometimes "{" and "}" characters are general characters
+in definitions. The following code changes "{" and "}" for
+"{link-beg " and " link-end" respectively
+inside definitions obtained from the databases "^infopage-..."
+
+; new function is used for creating hyperlinks
+; which works differently depending on database name
+(defun my-dictem-postprocess-definition-hyperlinks ()
+ "Creating hyperlinks according to database name"
+ (interactive)
+ (cond (
+ ((string-match "^infopage-" dictem-current-dbname)
+ (let ((dictem-hyperlink-beginning "{link-beg ")
+ (dictem-hyperlink-end " link-end}")
+ )
+ (dictem-postprocess-definition-hyperlinks)))
+ (t (dictem-postprocess-definition-hyperlinks)))))
+
+; definitions from each database are processed separately
+(add-hook 'dictem-postprocess-definition-hook
+ 'dictem-postprocess-each-definition)
+(add-hook 'dictem-postprocess-each-definition-hook
+ 'my-dictem-postprocess-definition-hyperlinks)
+
+-------
+Ex. 13
+
+You may want to remove "XXX definition[s] found" header
+from the DEFINE buffers.
+It may be done with a help of
+dictem-postprocess-definition-remove-header function.
+
+(add-hook 'dictem-postprocess-definition-hook
+ 'dictem-postprocess-definition-remove-header)
+
+-------
+Ex. 14
+
+As of version 0.7 dictem can handle dictionaries defined by user.
+This allows to use dictem not only for accessing DICT servers,
+but also for accesing users' databases.
+
+; DEFINE function for the database "mysuperdb"
+(defun dictem-mysuperdb-DEFINE (query)
+ (cond
+ ((string= query "apple") '("Apples grow on the trees"
+ "Apple may be green, yellow or red"))
+ ((string= query "potato") '("Potato is a vegetable"
+ "Potato is a traditional Belarusian food"))
+ (t (dictem-make-error
+ 20 (format "No definitions for %s" query)))
+ ))
+
+; MATCH function for the database "mysuperdb"
+(defun dictem-mysuperdb-MATCH (query strategy)
+ ; the name of strategy is ignored
+ (let ((apple (string-match query "apple"))
+ (potato (string-match query "potato")))
+ (cond
+ ((and (string= strategy "exact") (string= query "apple"))
+ '("apple"))
+ ((and (string= strategy "exact") (string= query "potato"))
+ '("potato"))
+ ((and apple potato)
+ '("apple" "potato"))
+ (apple
+ '("apple"))
+ (potato
+ '("potato"))
+ (t (dictem-make-error
+ 20 (format "No matches for %s/%s" query strategy)))
+ )))
+
+; Initializing a list of user-defined databases
+(setq dictem-user-databases-alist
+ `(("_en-en" . ("foldoc" "gcide" "wn"))
+ ("_ru-ru" . ("beslov" "ushakov" "ozhegov" "brok_and_efr"))
+ ,(dictem-make-userdb
+ ; the name of the database
+ "mysuperdb"
+ ; short description
+ "My super database"
+ ; MATCH function
+ (symbol-function 'dictem-mysuperdb-MATCH)
+ ; DEFINE function
+ (symbol-function 'dictem-mysuperdb-DEFINE))
+ ))
+
+-------
+Ex. 15
+
+Last years many dictionary servers provide too many bilingual dictionaries,
+most of which may be not very interesting for you.
+DictEm allows to exclude such dictionaries from an autocompletion menu
+by setting a list of regular expressions in dictem-exclude-databases
+variable.
+If, for example, you don't speak french and german and use
+dict://dict.org server, your config may look like this
+
+(setq dictem-server "dict.org")
+(setq dictem-exclude-databases '("ger-" "-ger" "fra-" "-fra"))
+(dictem-initialize)
+
+Note that, (dictem-initialize) is placed after initializing
+dictem-exclude-databases variable.
+
+-------
+If you have read to this point and all the examples above seem easy,
+you are probably a ELISP Guru.
+So, I have nothing more to tell you ;-)
+Feel free to inspect the code, and I hope you'll find DictEm useful.
+
+Dict'em All! ;-)
diff --git a/TODO b/dot_emacs.d/local/dictem/TODO
index 38b7ccf..38b7ccf 100644
--- a/TODO
+++ b/dot_emacs.d/local/dictem/TODO
diff --git a/dictem-elisp.el b/dot_emacs.d/local/dictem/dictem-elisp.el
index 7ee6cbc..7ee6cbc 100644
--- a/dictem-elisp.el
+++ b/dot_emacs.d/local/dictem/dictem-elisp.el
diff --git a/dictem-lingvo-dsl.el b/dot_emacs.d/local/dictem/dictem-lingvo-dsl.el
index 35f92d5..35f92d5 100644
--- a/dictem-lingvo-dsl.el
+++ b/dot_emacs.d/local/dictem/dictem-lingvo-dsl.el
diff --git a/dictem.el b/dot_emacs.d/local/dictem/dictem.el
index 8602ca3..8602ca3 100644
--- a/dictem.el
+++ b/dot_emacs.d/local/dictem/dictem.el
diff --git a/dot_emacs.d/themes/ryanakca-theme.el b/dot_emacs.d/themes/ryanakca-theme.el
new file mode 100644
index 0000000..52f9616
--- /dev/null
+++ b/dot_emacs.d/themes/ryanakca-theme.el
@@ -0,0 +1,50 @@
+(deftheme ryanakca
+ "Created 2013-03-01.")
+
+(custom-theme-set-faces
+ 'ryanakca
+ '(default ((t (:inherit nil :stipple nil :background "#080808" :foreground "#eeeeee" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 83 :width normal :foundry "unknown" :family "Inconsolata"))))
+ '(cursor ((t (:background "green" :foreground "black"))))
+ '(fixed-pitch ((t (:family "courier"))))
+ '(variable-pitch ((t (:family "helv"))))
+ '(escape-glyph ((t (:foreground "purple2"))))
+ '(minibuffer-prompt ((t (:foreground "chartreuse" :weight bold))))
+ '(highlight ((t (:underline t :foreground "#ffffff" :background "DodgerBlue4"))))
+ '(region ((t (:foreground "#f6f3e8" :background "#103050"))))
+ '(shadow ((((class color grayscale) (min-colors 88) (background light)) (:foreground "grey50")) (((class color grayscale) (min-colors 88) (background dark)) (:foreground "grey70")) (((class color) (min-colors 8) (background light)) (:foreground "green")) (((class color) (min-colors 8) (background dark)) (:foreground "yellow"))))
+ '(secondary-selection ((t (:foreground "#f6f3e8" :background "#333366"))))
+ '(trailing-whitespace ((t (:background "#a40000"))))
+ '(font-lock-builtin-face ((t (:foreground "LightCoral"))))
+ '(font-lock-comment-delimiter-face ((t (:foreground "#DC45DC" :inherit font-lock-comment-face))))
+ '(font-lock-comment-face ((t (:foreground "#DC45DC" :slant oblique))))
+ '(font-lock-constant-face ((t (:foreground "orchid" :weight bold))))
+ '(font-lock-doc-face ((t (:slant oblique :foreground "moccasin" :inherit (font-lock-string-face)))))
+ '(font-lock-function-name-face ((t (:foreground "deep sky blue" :weight bold :height 1.1))))
+ '(font-lock-keyword-face ((t (:foreground "yellow" :weight bold))))
+ '(font-lock-negation-char-face ((t nil)))
+ '(font-lock-preprocessor-face ((t (:slant italic :foreground "gold" :inherit (font-lock-builtin-face)))))
+ '(font-lock-regexp-grouping-backslash ((t (:weight bold :inherit (bold)))))
+ '(font-lock-regexp-grouping-construct ((t (:weight bold :inherit (bold)))))
+ '(font-lock-string-face ((t (:foreground "burlywood"))))
+ '(font-lock-type-face ((t (:weight bold :foreground "CadetBlue1"))))
+ '(font-lock-variable-name-face ((t (:weight bold :foreground "SeaGreen2"))))
+ '(font-lock-warning-face ((t (:inherit error :foreground "red" :weight bold))))
+ '(button ((t (:weight bold :underline t :box (:line-width 2 :color "grey" :style released-button) :foreground "#f6f3e8" :background "#333333" :inherit (link)))))
+ '(link ((t (:foreground "#afffff" :underline t))))
+ '(link-visited ((t (:underline t :foreground "#afd7ff" :inherit link))))
+ '(fringe ((t (:foreground "Wheat" :background "black"))))
+ '(header-line ((t (:height 0.9 :box (:line-width -1 :color "grey20" :style released-button) :inverse-video t :foreground "#e7f6da" :background "#303030" :inherit (mode-line)))))
+ '(tooltip ((t (:family "helv" :foreground "black" :background "lightyellow" :inherit (variable-pitch)))))
+ '(mode-line ((t (:family "DejaVu Sans" :height 0.9 :box (:line-width 1 :color nil :style released-button) :foreground "black" :background "gray75"))))
+ '(mode-line-buffer-id ((t (:height 0.9 :weight bold :underline "red" :overline "red" :foreground "blue4"))))
+ '(mode-line-emphasis ((t (:weight bold))))
+ '(mode-line-highlight ((t (:box (:line-width 2 :color "grey40" :style released-button)))))
+ '(mode-line-inactive ((t (:height 0.9 :weight light :box (:line-width 1 :color "gray40" :style nil) :foreground "black" :background "gray40" :inherit (mode-line)))))
+ '(isearch ((t (:background "#d7afff" :foreground "#5f0000"))))
+ '(isearch-fail ((((class color) (min-colors 88) (background light)) (:background "RosyBrown1")) (((class color) (min-colors 88) (background dark)) (:background "red4")) (((class color) (min-colors 16)) (:background "red")) (((class color) (min-colors 8)) (:background "red")) (((class color grayscale)) (:foreground "grey")) (t (:inverse-video t))))
+ '(lazy-highlight ((t (:foreground "white" :background "cadetblue"))))
+ '(match ((t (:background "DeepPink4"))))
+ '(next-error ((t (:background "blue3" :inherit (region)))))
+ '(query-replace ((t (:foreground "brown4" :background "palevioletred2" :inherit (isearch))))))
+
+(provide-theme 'ryanakca)
diff --git a/dot_emacs.tmpl b/dot_emacs.tmpl
new file mode 100644
index 0000000..8fc67a1
--- /dev/null
+++ b/dot_emacs.tmpl
@@ -0,0 +1,1020 @@
+;; (setq debug-on-error t)
+
+(require 'package)
+(setq package-enable-at-startup nil)
+(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
+(package-initialize)
+
+;; Bootstrap `use-package'
+(unless (package-installed-p 'use-package)
+ (package-refresh-contents)
+ (package-install 'use-package))
+
+(eval-when-compile
+ (require 'use-package))
+
+;;; General emacs configuration
+(use-package emacs
+ :init ; executed before package is loaded
+ (fset 'yes-or-no-p 'y-or-n-p)
+ (put 'narrow-to-region 'disabled nil)
+ :hook ; add functions onto hook; only basename needed
+ ((text-mode . turn-on-auto-fill)
+ (text-mode . flyspell-mode)
+ (before-save . whitespace-cleanup))
+ :bind ; key bindings
+ (("C-x a r" . align-regexp))
+ :config ; executed after package is loaded
+ (defadvice ; align-regexp should use spaces.
+ align-regexp
+ (around align-regexp-with-spaces activate)
+ (let ((indent-tabs-mode nil)) ad-do-it))
+ :custom
+ (inhibit-startup-screen t)
+ (default-input-method "TeX")
+ (user-full-name "Ryan Kavanagh")
+ (user-mail-address "rak@rak.ac")
+ (face-font-family-alternatives
+ (append '(("Spleen 16x32" "Ubuntu Mono" "FreeMono" "Liberation Mono"))
+ face-font-family-alternatives))
+ :custom-face
+ (default ((t (:family "Spleen 16x32"
+ {{ if (eq .chezmoi.os "openbsd") -}}
+ :height 80 ; unit is 1/10 pt
+ {{- else -}}
+ :height 130 ; unit is 1/10 pt
+ {{- end }}
+ )))))
+
+(if (string= (system-name) "demeter.rak.ac")
+ (use-package leuven-theme ; nice theme for lecturing / projectors
+ :ensure t
+ :config
+ (load-theme 'leuven t))
+ (use-package moe-theme
+ :ensure t
+ :after powerline ; must be loaded after for powerline-moe-theme to work
+ :config
+ (moe-dark)
+ (moe-theme-powerline)))
+
+(defun single-lines-only ()
+ "Replace multiple blank lines with a single one"
+ (interactive)
+ (goto-char (point-min))
+ (while (re-search-forward "\\(^\\s-*$\\)\n" nil t)
+ (replace-match "\n")
+ (forward-char 1)))
+
+(use-package ace-window
+ :ensure t
+ :custom
+ ;; home row keys
+ (aw-keys '(?h ?t ?n ?s ?a ?o ?e ?u ?i ?d))
+ :bind (("M-o" . ace-window))
+ :config
+ ;; need to redefine a few of these because the defaults
+ ;; overlap with customized aw-keys
+ (setq aw-dispatch-alist
+ '((?x aw-delete-window "Delete Window")
+ (?m aw-swap-window "Swap Windows")
+ (?M aw-move-window "Move Window")
+ (?c aw-copy-window "Copy Window")
+ (?j aw-switch-buffer-in-window "Select Buffer")
+ (?f aw-flip-window)
+ (?p aw-switch-buffer-other-window "Switch Buffer Other Window")
+ (?c aw-split-window-fair "Split Fair Window")
+ (?v aw-split-window-vert "Split Vert Window")
+ (?b aw-split-window-horz "Split Horz Window")
+ (?1 delete-other-windows "Delete Other Windows")
+ (?? aw-show-dispatch-help))))
+
+(use-package aggressive-indent
+ :ensure t
+ :config
+ (global-aggressive-indent-mode 1))
+
+(use-package autorevert
+ :diminish auto-revert-mode)
+
+(use-package avy
+ :ensure t
+ :config
+ (avy-setup-default)
+ :bind
+ (("C-c C-j" . avy-resume)
+ ("C-;" . avy-goto-char-2)))
+
+(use-package bibtex
+ :mode ("\\.bib\'" . bibtex-mode)
+ :custom
+ (bibtex-dialect 'biblatex)
+ (bibtex-maintain-sorted-entries 'crossref)
+ ;; Use only the first author name if there are more than 2 authors
+ (bibtex-autokey-names 1)
+ ;; Otherwise use both names
+ (bibtex-autokey-names-stretch 1)
+ (bibtex-autokey-name-separator "_")
+ (bibtex-autokey-name-year-separator "_")
+ (bibtex-autokey-year-length 4)
+ (bibtex-autokey-year-title-separator ":_")
+ (bibtex-autokey-titleword-length 5)
+ (bibtex-autokey-titlewords 3)
+ ;; Make all title words lowercase
+ (bibtex-autokey-preserve-case 1)
+ :bind (:map bibtex-mode-map
+ ("C-c C-c" . org-ref-clean-bibtex-entry)
+ ("C-c s" . bibtex-sort-buffer))
+ :config
+ (defun my/bibtex-generate-autokey (autogenerated)
+ (let ((key (bibtex-autokey-get-field "_key")))
+ (if (string= "" key) autogenerated key)))
+ (advice-add 'bibtex-generate-autokey :filter-return #'my/bibtex-generate-autokey)
+ ;; stolen from bibtex.el and modified to handle "Mac Lane"
+ (defun my/bibtex-autokey-demangle-name (fullname)
+ "Get the last part from a well-formed FULLNAME and perform abbreviations."
+ (let* (case-fold-search
+ (name (cond ((string-match "\\(\\(Ma?c\\|De\\) +[[:upper:]][^, ]*\\)[^,]*," fullname)
+ ;; Name is of the form "Mac Last, First" or
+ ;; "Mac Last, Jr, First" or "Mc Last, First" or
+ ;; "Mc Last, Jr, First"
+ ;; --> Take Mac Last or Mc Last, as appropriate
+ ;; and replace spaces by concatenation
+ (let ((mclast (match-string 1 fullname)))
+ (when (string-match split-string-default-separators mclast)
+ (replace-match "" nil nil mclast))))
+ ((string-match "\\([[:upper:]][^, ]*\\)[^,]*," fullname)
+ ;; Name is of the form "von Last, First" or
+ ;; "von Last, Jr, First"
+ ;; --> Take the first capital part before the comma
+ (match-string 1 fullname))
+ ((string-match "\\([^, ]*\\)," fullname)
+ ;; Strange name: we have a comma, but nothing capital
+ ;; So we accept even lowercase names
+ (match-string 1 fullname))
+ ((string-match "\\(\\<[[:lower:]][^ ]* +\\)+\\([[:upper:]][^ ]*\\)"
+ fullname)
+ ;; name is of the form "First von Last", "von Last",
+ ;; "First von von Last", or "d'Last"
+ ;; --> take the first capital part after the "von" parts
+ (match-string 2 fullname))
+ ((string-match "\\([^ ]+\\) *\\'" fullname)
+ ;; name is of the form "First Middle Last" or "Last"
+ ;; --> take the last token
+ (match-string 1 fullname))
+ (t (error "Name `%s' is incorrectly formed" fullname)))))
+ (funcall bibtex-autokey-name-case-convert-function
+ (bibtex-autokey-abbrev name bibtex-autokey-name-length))))
+ (advice-add 'bibtex-autokey-demangle-name :override 'my/bibtex-autokey-demangle-name)
+ ;; Until https://debbugs.gnu.org/cgi/bugreport.cgi?bug=36252 gets fixed
+ (defun bibtex-autokey-get-year ()
+ "Return year field contents as a string obeying `bibtex-autokey-year-length'.
+If the year field is absent, extract the year from a valid ISO8601-2
+Extended Format date in the date field and return it as a string obeing
+`bibtex-autokey-year-length'."
+ (let ((yearfield (bibtex-autokey-get-field "year"))
+ (datefield (bibtex-autokey-get-field "date"))
+ (shortener (lambda (year)
+ (substring year (max 0 (- (length year)
+ bibtex-autokey-year-length))))))
+ (if (string= "" yearfield)
+ (cond ((string-match "[./]*\\(-?[[:digit:]]+X*\\)\\([-/.[:digit:]:T~?%X]*\\)"
+ datefield)
+ ;; Matches ISO8601-2 Extended Format specification level 1
+ ;; examples listed in tables 3, 4, and 5 on pp. 38-40 of the
+ ;; biblatex package manual, version 3.12
+ (funcall shortener (match-string 1 datefield)))
+ (t (error "Date field `%s' is incorrectly formed" datefield)))
+ (funcall shortener yearfield))))
+ ;; Don't have accented characters in keys
+ (let ((charMap '(;; This list based on Xah Lee's http://ergoemacs.org/emacs/emacs_zap_gremlins.html
+ ;; Case-sensitivity (see bibtex-autokey-name-change-strings) requires us to
+ ;; duplicate everything
+ ("ß" . "ss")
+ ("á\\|à\\|â\\|ä\\|Ä\\|ÇŽ\\|ã\\|Ã¥\\|Ä…\\|ă\\|ạ\\|ả\\|ả\\|ấ\\|ầ\\|ẩ\\|ẫ\\|ậ\\|ắ\\|ằ\\|ẳ\\|ặ" . "a")
+ ("æ" . "ae")
+ ("ç\\|Ä\\|ć" . "c")
+ ("é\\|è\\|ê\\|ë\\|Ä“\\|Ä›\\|Ä™\\|ẹ\\|ẻ\\|ẽ\\|ế\\|á»\\|ể\\|á»…\\|ệ" . "e")
+ ("í\\|ì\\|î\\|ï\\|Ä«\\|Ç\\|ỉ\\|ị" . "i")
+ ("ñ\\|ň\\|ń" . "n")
+ ("ó\\|ò\\|ô\\|ö\\|õ\\|Ç’\\|ø\\|Å\\|ồ\\|Æ¡\\|á»\\|á»\\|ố\\|ổ\\|á»—\\|á»™\\|á»›\\|á»\\|ở\\|ợ" . "o")
+ ("ú\\|ù\\|û\\|ü\\|ū\\|ũ\\|ư\\|ụ\\|ủ\\|ứ\\|ừ\\|ử\\|ữ\\|ự" . "u")
+ ("ý\\|ÿ\\|ỳ\\|ỷ\\|ỹ" . "y")
+ ("þ" . "th")
+ ("Ä\\|ð\\|Ä‘" . "d")
+ ("Ä©" . "i")
+ ("ľ\\|ĺ\\|ł" . "l")
+ ("Å™\\|Å•" . "r")
+ ("Å¡\\|Å›" . "s")
+ ("Å¥" . "t")
+ ("ž\\|ź\\|ż" . "z")
+ ("Å“" . "oe")
+ (" " . " ") ; thin space etc
+ ("–" . "-")
+ ("—\\|一" . "--"))))
+ ;; For some reason, *-name-* and *-titleword-* get clobbered, even
+ ;; though the original value in decribe-variable clearly shows
+ ;; them having been based on the extended
+ ;; bibtex-autokey-transcriptions. Force them to be the right
+ ;; thing.
+ (progn (seq-do (lambda (pair) (add-to-list 'bibtex-autokey-transcriptions pair)) charMap)
+ (seq-do (lambda (pair) (add-to-list 'bibtex-autokey-name-change-strings pair)) charMap)
+ (seq-do (lambda (pair) (add-to-list 'bibtex-autokey-titleword-change-strings pair)) charMap))))
+
+(use-package bibtex-completion
+ :ensure ivy-bibtex
+ :custom
+ (bibtex-completion-bibliography "~/Documents/papers/library.bib")
+ (bibtex-completion-library-path '("~/Documents/papers/pdfs/"))
+ (bibtex-completion-notes-path "~/Documents/papers/notes/")
+ (bibtex-completion-notes-extension ".org")
+ (bibtex-completion-pdf-extension '(".pdf" ".djvu" ".txt")))
+
+(use-package cc-mode
+ :custom
+ (c-default-style "bsd"))
+
+(use-package company
+ :ensure t
+ :bind
+ ("<tab>" . company-indent-or-complete-common)
+ :hook
+ (after-init . global-company-mode))
+
+(use-package company-auctex
+ :ensure t
+ :after latex
+ :config
+ (company-auctex-init))
+
+(use-package company-bibtex
+ :ensure t
+ :hook
+ (bibtex-mode . (lambda () (add-to-list 'company-backends 'company-bibtex))))
+
+(use-package company-box
+ :ensure t
+ :diminish
+ :hook (company-mode . company-box-mode))
+
+(use-package company-coq
+ :ensure t
+ :hook (coq-mode . company-coq-mode))
+
+(use-package company-math
+ :ensure t
+ :config
+ (add-to-list 'company-backends 'company-math-symbols-unicode)
+ (add-to-list 'company-backends 'company-latex-commands))
+
+(use-package company-org-block
+ :ensure t
+ :hook ((org-mode . (lambda ()
+ (setq-local company-backends '(company-org-block))
+ (company-mode +1)))))
+
+(use-package counsel
+ :ensure t
+ :bind (("C-x C-b" . counsel-ibuffer)
+ ("C-x C-f" . counsel-find-file)
+ ("M-x" . counsel-M-x)
+ ("M-y" . counsel-yank-pop)))
+
+(use-package cus-edit
+ :custom
+ (custom-file null-device "Don't store customizations"))
+
+(use-package diary
+ :ensure diary-lib
+ :custom
+ (diary-display-function 'diary-fancy-display)
+ :hook ((diary-list-entries . diary-include-other-diary-files)
+ (diary-list-entries . diary-sort-entries)))
+
+(use-package dictem
+ :load-path "~/.emacs.d/dictem/")
+
+(use-package diminish
+ :ensure t)
+
+(use-package doi-utils
+ ;; provided by org-ref
+ :ensure org-ref)
+
+(use-package dtrt-indent
+ :ensure t)
+
+(use-package dune
+ :ensure t)
+
+(use-package dune-format
+ :ensure t)
+
+(use-package eldoc
+ :diminish)
+
+(use-package elpher
+ :ensure t)
+
+(use-package elpy
+ :ensure t
+ :after python
+ :config (elpy-enable)
+ :custom
+ (elpy-rpc-python-command "python3"))
+
+(use-package ess
+ :ensure t)
+
+(use-package fill-column-indicator
+ :ensure t)
+
+(use-package gnus
+ :ensure t
+ :defer t
+ :bind
+ ;; (:map gnus-summary-buffer-map
+ ;; ("SPC" . (gnus-summary-goto-next-page)
+ :custom
+ (gnus-select-method
+ '(nntp "news.club.cc.cmu.edu"
+ (nntp-address "news.club.cc.cmu.edu")
+ (nntp-via-address "news-cclub")
+ (nntp-via-rlogin-command "ssh")
+ (nntp-open-connection-function nntp-open-via-rlogin-and-netcat)))
+ (gnus-home-score-file "gnus.SCORE")
+ (gnus-secondary-select-methods
+ '((nntp "news.gmane.io")
+ ; (nntp "news.eternal-september.org")
+ ; (nntp "nntp.olduse.net")
+ (nnimap "imap.rak.ac")
+ (nnimap "mail.cs.mcgill.ca")
+ (nntp "tilde.team"
+ (nntp-address "localhost")
+ (nntp-via-address "tilde.team")
+ (nntp-via-rlogin-command "ssh")
+ (nntp-via-rlogin-command-switches ("-C"))
+ (nntp-open-connection-function nntp-open-via-rlogin-and-netcat))))
+ (gnus-parameters
+ '(("^nntp+.*" (address . "rak@rak.ac"))
+ ("^nnimap+imap\\.rak\\.ac:.*"
+ (posting-style
+ (address . "rak@rak.ac")
+ (gcc "nnimap+imap.rak.ac:Sent")))
+ ("^nnimap+mail\\.cs\\.mcgill\\.ca:.*"
+ (posting-style
+ (address . "rkavanagh@cs.mcgill.ca")
+ (gcc "nnimap+mail.cs.mcgill.ca:INBOX.Sent")))))
+ (gnus-cloud-method "imap.rak.ac")
+ (gnus-cloud-storage-method 'base64)
+ (gnus-update-message-archive-method t)
+ (gnus-message-archive-method
+ '(nnfolder "archive" ; this gets included in the server buffer
+ (nnfolder-inhibit-expiry t)
+ (nnfolder-get-new-mail nil)
+ (nnfolder-active-file "~/News/sent/active")
+ (nnfolder-directory "~/News/sent")))
+ (gnus-check-new-newsgroups nil)
+ (gnus-group-line-format "%M%S%p%P%5y:%B%(%G%) %z\n")
+ (gnus-topic-display-empty-topics nil)
+ :hook
+ (message-send . gnus-score-followup-article)
+ (gnus-group-mode . gnus-topic-mode))
+
+(use-package haskell-mode
+ :ensure t
+ :hook ((haskell-mode . turn-on-haskell-doc-mode)
+ (haskell-mode . turn-on-haskell-indentation)))
+
+(use-package info-look
+ :ensure t)
+
+(use-package ispell
+ :ensure t
+ :defer t
+ :custom
+ (ispell-dictionary "en_CA-w_accents"))
+
+(use-package ivy
+ :ensure t
+ :diminish
+ :custom
+ (ivy-use-virtual-buffers t)
+ (ivy-count-format "(%d/%d) ")
+ :config
+ (ivy-mode 1))
+
+(use-package ivy-bibtex
+ :ensure t
+ :bind (("C-c b" . ivy-bibtex)))
+
+(use-package latex
+ :ensure auctex
+ :after info-look
+ :mode ("\\.tex\\'" . TeX-latex-mode)
+ :init
+ ;; http://www.cs.au.dk/~abizjak/emacs/2016/03/06/latex-fill-paragraph.html
+ (defun ales/fill-paragraph (&optional P)
+ "When called with prefix argument call `fill-paragraph'.
+Otherwise split the current paragraph into one sentence per line."
+ (interactive "P")
+ (if (not P)
+ (save-excursion
+ (let ((fill-column 12345678)) ;; relies on dynamic binding
+ (fill-paragraph) ;; this will not work correctly if the paragraph is
+ ;; longer than 12345678 characters (in which case the
+ ;; file must be at least 12MB long. This is unlikely.)
+ (let ((end (save-excursion
+ (forward-paragraph 1)
+ (backward-sentence)
+ (point-marker)))) ;; remember where to stop
+ (beginning-of-line)
+ (while (progn (forward-sentence)
+ (<= (point) (marker-position end)))
+ (just-one-space) ;; leaves only one space, point is after it
+ (delete-char -1) ;; delete the space
+ (newline) ;; and insert a newline
+ (LaTeX-indent-line) ;; I only use this in combination with late, so this makes sense
+ ))))
+ ;; otherwise do ordinary fill paragraph
+ (fill-paragraph P)))
+ :hook
+ ((LaTeX-mode . turn-on-reftex)
+ (LaTeX-mode . turn-off-auto-fill)
+ (LaTeX-mode . turn-on-flyspell)
+ (LaTeX-mode . LaTeX-math-mode)
+ (LaTeX-mode . (lambda () (set (make-local-variable 'TeX-electric-math)
+ (cons "\\(" "\\)"))))
+ (LaTeX-mode . (lambda ()
+ (LaTeX-add-environments
+ '("axiom" LaTeX-env-label)
+ '("theorem" LaTeX-env-label)
+ '("proposition" LaTeX-env-label)
+ '("definition" LaTeX-env-label)
+ '("corollary" LaTeX-env-label)
+ '("lemma" LaTeX-env-label)
+ '("example" LaTeX-env-label)
+ '("conjecture" LaTeX-env-label)
+ '("figure" LaTeX-env-label))))
+ (LaTeX-mode . (lambda ()
+ ;; This must be a hook. Trying to set it in :config
+ ;; causes the variable to become buffer-local, so
+ ;; it never actually takes effect in all
+ ;; latex-moded buffers. So much time wasted debugging.
+ (add-to-list 'LaTeX-label-alist '("axiom" . "ax:"))
+ (add-to-list 'LaTeX-label-alist '("conjecture" . "conj:"))
+ (add-to-list 'LaTeX-label-alist '("corollary" . "cor:"))
+ (add-to-list 'LaTeX-label-alist '("definition" . "def:"))
+ (add-to-list 'LaTeX-label-alist '("proposition" . "prop:"))
+ (add-to-list 'LaTeX-label-alist '("theorem" . "theorem:"))
+ (add-to-list 'LaTeX-label-alist '("example" . "ex:"))
+ (add-to-list 'LaTeX-label-alist '("lemma" . "lemma:"))
+ (add-to-list 'LaTeX-label-alist '("figure" . "fig:")))))
+ :config
+ (info-lookup-add-help :mode 'LaTeX-mode
+ :regexp ".*"
+ :parse-rule "\\\\?[a-zA-Z]+\\|\\\\[^a-zA-Z]"
+ :doc-spec '(("(latex2e)Concept Index")
+ ("(latex2e)Command Index")))
+ :bind
+ (:map LaTeX-mode-map
+ ("M-q" . ales/fill-paragraph)))
+
+(use-package magit
+ :ensure t
+ :config
+ (put 'magit-clean 'disabled nil)
+ :custom
+ (magit-diff-refine-hunk 'all))
+
+(use-package markdown-mode
+ :ensure t
+ :init
+ (autoload 'markdown-mode "markdown-mode"
+ "Major mode for editing Markdown files" t)
+ :mode (("\\.markdown\\'" . markdown-mode)
+ ("\\.mdown\'" . markdown-mode)))
+
+(use-package menu-bar
+ :config
+ (menu-bar-mode -1)
+ :bind
+ ([S-f10] . menu-bar-mode))
+
+(use-package merlin
+ ;; ocaml assistant
+ :ensure t)
+
+(use-package message
+ :config
+ (defun whitespace-cleanup-mail ()
+ "Kill the whitespace in a buffer while preserving the last instance of '-- '."
+ (interactive)
+ (save-excursion
+ (save-restriction
+ (widen)
+ (let ((signature-delimiter
+ (progn
+ ;; Find the last occurence of "-- " in the buffer
+ ;; and set signature-delimiter to the position of the first -
+ ;; This means we must subtract 2, because re-search-backward
+ ;; returns the end of the occurence found
+ (goto-char (point-max))
+ (- (re-search-backward "^-- $" nil t) 2))))
+ (when signature-delimiter
+ (progn
+ ;; Run whitespace-cleanup on the region
+ ;; [start, signature-delimiter]. Include the first dash
+ ;; to avoid deleting any empty lines leading up to the
+ ;; delimiter.
+ (narrow-to-region (point-min) signature-delimiter)
+ (whitespace-cleanup)
+ (widen)
+ ;; Run it on the region [signature-delimiter, end).
+ ;; We include the signature delimiter so that we do not
+ ;; delete any empty lines immediately following it.
+ ;; A side-effect is that the first line might become "^--$".
+ ;; This means that we must re-add the space at the end of
+ ;; the first line. Easiest just replace the first line of the
+ ;; buffer by "^-- $".
+ (narrow-to-region signature-delimiter (point-max))
+ (whitespace-cleanup)
+ (goto-char (point-min))
+ (kill-whole-line 0)
+ (insert "-- ")))))))
+ :hook
+ ((message-mode . (lambda () (remove-hook 'before-save-hook 'whitespace-cleanup t)))
+ (message-mode . (lambda () (add-hook 'before-save-hook 'whitespace-cleanup-mail nil t))))
+ :custom
+ (message-citation-line-function 'message-insert-formatted-citation-line)
+ (message-send-mail-function 'message-send-mail-with-sendmail))
+
+(use-package mingus
+ ;; mpd client
+ :ensure t)
+
+(use-package minibuffer
+ :config
+ (add-to-list 'completion-styles 'substring)
+ :custom
+ ;; Cycle through tab-completions with tab if there are less than 5
+ (setq completion-cycle-threshold 5))
+
+(use-package ocp-indent
+ :ensure t)
+
+(use-package octave
+ :mode ("\\.m\'" . octave-mode))
+
+(use-package org
+ :bind (:map org-mode-map
+ ("<tab>" . org-cycle))
+ :hook
+ (org-mode . visual-line-mode)
+ :custom
+ (org-link-file-path-type 'relative))
+
+(use-package org-chef
+ :ensure t)
+
+(use-package org-noter
+ :ensure t
+ :custom
+ ;; Surely there's an easier way of setting this?
+ (org-noter-notes-search-path '("~/Documents/papers/notes/")))
+
+(use-package org-ref
+ :ensure t
+ :after ivy-bibtex)
+
+(use-package org-ref-arxiv
+ :ensure org-ref
+ :custom
+ (arxiv-entry-format-string "@Misc{%s,
+title = {%s},
+author = {%s},
+eprinttype = {arxiv},
+date = {%s},
+eprint = {%s},
+eprintclass = {%s},
+abstract = {%s},
+pagetotal = {MISSING},
+_checked = {NOT CHECKED},
+_source = {ev},
+}")
+ ;; redefine it to use a sensible date and stuff.
+ ;; my version of arxiv-get-bibtex-entry-via-arxiv-api
+ :config
+ (defun my/arxiv-get-bibtex-entry-via-arxiv-api (arxiv-number)
+ "Retrieve meta data for ARXIV-NUMBER.
+Returns a formatted BibTeX entry."
+ (with-current-buffer
+ (url-retrieve-synchronously (format "http://export.arxiv.org/api/query?id_list=%s" arxiv-number) t)
+ (let* ((parse-tree (libxml-parse-xml-region
+ (progn (goto-char 0)
+ (search-forward "<?xml ")
+ (match-beginning 0))
+ (point-max)))
+ (entry (assq 'entry parse-tree))
+ (authors (--map (nth 2 (nth 2 it))
+ (--filter (and (listp it) (eq (car it) 'author)) entry)))
+ (date (nth 2 (assq 'published entry)))
+ (title (nth 2 (assq 'title entry)))
+ (names (arxiv-bibtexify-authors authors))
+ (category (cdar (nth 1 (assq 'primary_category entry))))
+ (abstract (s-trim (nth 2 (assq 'summary entry))))
+ (url (nth 2 (assq 'id entry)))
+ (temp-bibtex (format arxiv-entry-format-string "" title names date arxiv-number category abstract url))
+ (key (with-temp-buffer
+ (insert temp-bibtex)
+ (bibtex-mode)
+ (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
+ (org-ref-replace-nonascii)
+ (bibtex-generate-autokey))))
+ (format arxiv-entry-format-string key title names date arxiv-number category abstract url))))
+ (advice-add 'arxiv-get-bibtex-entry-via-arxiv-api :override 'my/arxiv-get-bibtex-entry-via-arxiv-api))
+
+(use-package org-ref-bibtex
+ :ensure org-ref
+ :after bibtex-completion ; needs bibtex-completion-library-path
+ :custom
+ (org-ref-title-case-types '(("article" "title")
+ ("book" "booktitle" "title")
+ ("collection" "booktitle" "title")
+ ("incollection" "booktitle" "title")
+ ("inproceedings" "booktitle" "title")
+ ("misc" "title")
+ ("proceedings" "title")
+ ("report" "title")
+ ("thesis" "title")))
+ (org-ref-bibtex-journal-abbreviations
+ '(("CACM" "Communications of the ACM" "Comm. ACM")
+ ("Discourse \\& Society")
+ ("ENTCS" "Electronic Notes in Theoretical Computer Science")
+ ("Information and Computation")
+ ("International Journal of Foundations of Computer Science" "Int. J. Found. Comput. Sci.")
+ ("JSL" "The Journal of Symbolic Logic")
+ ("Journal of Computer Security")
+ ("Journal of Logic and Computation" "J. Logic Computat.")
+ ("LCNS" "Lecture Notes in Computer Science" "Lect. Notes Comput. Sc.")
+ ("LMCS" "Logical Methods in Computer Science")
+ ("Le Devoir")
+ ("MSCS" "Mathematical Structures in Computer Science" "Math. Struct. Comp. Sci.")
+ ("Nordic Journal of Philosophical Logic")
+ ("PACMPL" "Proceedings of the ACM on Programming Languages" "Proc. ACM Program. Lang.")
+ ("Philosophy Compass")
+ ("Piping Today")
+ ("Proceedings of the Aristotelian Society")
+ ("Publications of the Research Institute for Mathematical Sciences" "Publ. RIMS")
+ ("Reason Papers")
+ ("Reprints in Theory and Applications of Categories")
+ ("Rice University Studies")
+ ("Rice University Studies")
+ ("SICOMP" "SIAM Journal on Computing")
+ ("Science")
+ ("TAC" "Theory and Applications of Categories")
+ ("TCS" "Theoretical Computer Science")
+ ("TUGboat")
+ ("The American Mathematical Monthly")
+ ("The Review of Symbolic Logic")
+ ("The Voice")
+ ("Topoi")
+ ("Transactions of the American Mathematical Society")
+ ("{ACM} {SIGACT} News" "ACM SIGACT News"))))
+
+(use-package reftex-cite
+ :ensure t)
+
+(use-package org-ref-core
+ :ensure org-ref
+ :after org-ref-bibtex
+ :after reftex-cite
+ :after ivy-bibtex
+ :bind (:map bibtex-mode-map
+ ("C-c C-c" . org-ref-clean-bibtex-entry)
+ ("C-c e" . my/set-source-ev)
+ ("C-c d" . my/set-checked-date))
+ :config
+ (defun my/org-ref-title-case-english ()
+ "Call org-ref-title-case only if the language field is set
+ to `english' or is missing. This will avoid having foreign-
+ language titles re-cased."
+ (interactive)
+ (let ((langfield (bibtex-autokey-get-field "language")))
+ (if (= (length langfield) 0)
+ (org-ref-title-case))))
+ (defun my/set-checked-date ()
+ "Set the _checked field of a bibtex entry to the current date."
+ (interactive)
+ (save-excursion
+ (bibtex-beginning-of-entry)
+ (bibtex-set-field "_checked" (format-time-string "%Y-%m-%d"))))
+ (defun my/set-source-ev ()
+ "Set the _source field of a bibtex entry to ev."
+ (interactive)
+ (save-excursion
+ (bibtex-beginning-of-entry)
+ (bibtex-set-field "_source" "ev")))
+ ;; taken from org-ref-bibtex.el and extended
+ (setq org-ref-nonascii-latex-replacements
+ (append '(("ï¬" . "fi")
+ ("ıÌ" . "{\\\\'i}")
+ ("ω" . "$\\\\omega$")
+ ("‘" . "`") ; LEFT SINGLE QUOTATION MARK
+ ("’" . "'") ; RIGHT SINGLE QUOTATION MARK
+ ("“" . "``")
+ ("′" . "'") ; PRIME
+ ("∇" . "$\\\\nabla$")
+ ("ι" . "$\\\\iota$")
+ ("â€" . "''"))
+ org-ref-nonascii-latex-replacements))
+ (defun my/org-ref-format-url-if-doi ()
+ "Override built-in function. Originally, this reformatted
+the url to point to DOI. I would rather kill the URL field
+entirely if it contains the DOI. bibtex-clean-entry will then
+delete the field."
+ (interactive)
+ (save-excursion
+ (bibtex-beginning-of-entry)
+ (let ((doi (bibtex-autokey-get-field "doi")))
+ (unless (string-empty-p doi)
+ (when (string-match-p (regexp-quote (org-ref-bibtex-entry-doi))
+ (bibtex-autokey-get-field "url"))
+ (bibtex-set-field "url" ""))))))
+ (defun my/org-ref-biblatex-journaltitle ()
+ "Rename journal to journaltitle"
+ (interactive)
+ (save-excursion
+ (bibtex-beginning-of-entry)
+ (let ((journal (bibtex-autokey-get-field "journal"))
+ (journaltitle (bibtex-autokey-get-field "journaltitle")))
+ (when (and (string-empty-p journaltitle)
+ (not (string-empty-p journal)))
+ (bibtex-beginning-of-entry)
+ (bibtex-set-field "journal" "")
+ (bibtex-set-field "journaltitle" journal)))))
+ (defun my/biblatex-date ()
+ "Convert 'year' + 'month' fields to 'date' field"
+ (interactive)
+ (save-excursion
+ (bibtex-beginning-of-entry)
+ (let* ((year (bibtex-autokey-get-field "year"))
+ (month (downcase (bibtex-autokey-get-field "month")))
+ (nummonth (cond ((string= month "jan") "01")
+ ((string= month "feb") "02")
+ ((string= month "mar") "03")
+ ((string= month "apr") "04")
+ ((string= month "may") "05")
+ ((string= month "jun") "06")
+ ((string= month "jul") "07")
+ ((string= month "aug") "08")
+ ((string= month "sep") "09")
+ ((string= month "oct") "10")
+ ((string= month "nov") "11")
+ ((string= month "dec") "12")
+ (t "")))
+ (olddate (bibtex-autokey-get-field "date"))
+ (newdate (cond ((string-empty-p year) nil)
+ ((string-empty-p nummonth) year)
+ (t (concat year "-" nummonth)))))
+ (when (and (string-empty-p olddate)
+ (not (string-empty-p newdate)))
+ (bibtex-beginning-of-entry)
+ (bibtex-set-field "date" newdate)
+ (bibtex-set-field "year" "")
+ (bibtex-set-field "month" "")))))
+ (defun my/orcb-check-journal ()
+ "Check entry at point to see if journal exists in `org-ref-bibtex-journal-abbreviations'.
+If not, issue a warning."
+ (interactive)
+ (when
+ (string= "article"
+ (downcase
+ (cdr (assoc "=type=" (bibtex-parse-entry)))))
+ (save-excursion
+ (bibtex-beginning-of-entry)
+ (let* ((entry (bibtex-parse-entry t))
+ (journal (replace-regexp-in-string "[[:space:]\n]+" " " (reftex-get-bib-field "journaltitle" entry))))
+ (when (null journal)
+ (error "Unable to get journal for this entry."))
+ (unless (member journal (-flatten org-ref-bibtex-journal-abbreviations))
+ (message "Journal \"%s\" not found in org-ref-bibtex-journal-abbreviations." journal))))))
+ :custom
+ (org-ref-default-bibliography '("~/Documents/papers/library.bib"))
+ (org-ref-bibliography-notes "~/Documents/papers/notes.org")
+ (org-ref-pdf-directory "~/Documents/papers/pdfs/")
+ ;; don't fudge with the output of bibtex-generate-autokey
+ (org-ref-clean-bibtex-key-function 'identity)
+ ;; let helm-bibtex find the notes file for an entry
+ (org-ref-notes-function
+ (lambda (thekey)
+ (let ((bibtex-completion-bibliography (org-ref-find-bibliography)))
+ (bibtex-completion-edit-notes
+ (list (car (org-ref-get-bibtex-key-and-file thekey)))))))
+ (org-ref-clean-bibtex-entry-hook
+ '(my/org-ref-biblatex-journaltitle
+ bibtex-clean-entry
+ my/org-ref-format-url-if-doi
+ orcb-key-comma
+ org-ref-replace-nonascii
+ orcb-&
+ orcb-%
+ my/org-ref-title-case-english ;; all entries, -article does only articles
+ my/org-ref-biblatex-journaltitle
+ my/biblatex-date
+ orcb-key
+ orcb-clean-doi
+ my/orcb-check-journal
+ org-ref-sort-bibtex-entry
+ orcb-fix-spacing
+ orcb-clean-nil-opinionated)))
+
+(use-package org-ref-isbn
+ :ensure org-ref)
+
+(use-package org-ref-pdf
+ :ensure org-ref)
+
+(use-package ox-md
+ ;; org-mode to markdown exporter
+ :ensure org
+ :after (org))
+
+(use-package outline
+ :ensure t
+ :hook (LaTeX-mode . outline-minor-mode))
+
+(use-package outline-magic
+ :ensure t
+ :after outline
+ :bind (:map outline-minor-mode-map ([f10] . outline-cycle)))
+
+(use-package paren
+ :ensure t
+ :config
+ (show-paren-mode t)
+ :custom
+ ;; highlight entire expression when on delimiters
+ (show-paren-style 'expression))
+
+(use-package pdf-tools
+ :ensure t
+ :config
+ (pdf-tools-install))
+
+(use-package powerline
+ :ensure t)
+
+(use-package proof-general
+ :ensure t
+ :custom
+ (proof-disappearing-proofs t)
+ (proof-electric-terminator-enable t)
+ (proof-three-window-enable t)
+ (proof-three-window-mode-policy 'hybrid)
+ :custom-face
+ (proof-locked-face ((t (:weight bold)))))
+
+(use-package py-autopep8
+ :ensure t
+ :hook (python-mode . py-autopep8-enable-on-save)
+ :custom
+ (py-autopep8-options '("--max-line-length=80")))
+
+(use-package python
+ :ensure t
+ :mode ("\\.py\\'" . python-mode)
+ :custom (python-python-command "/usr/bin/python3")
+ :interpreter ("python3" . python-mode)
+ :custom
+ (python-indent-guess-indent-offset nil)
+ (python-indent-offset 4)
+ (python-shell-interpreter "python3"))
+
+(use-package rainbow-delimiters
+ :ensure t
+ :hook ((LaTeX-mode prog-mode) . rainbow-delimiters-mode))
+
+(use-package rainbow-mode
+ :ensure t)
+
+(use-package reftex
+ :ensure t
+ :after latex
+ :hook (LaTeX-mode . reftex-mode)
+ :custom
+ (reftex-default-bibliography '("~/Documents/papers/library.bib"))
+ (reftex-label-alist '(("axiom" ?a "ax:%f:" "~\\ref{%s}" t ("axiom" "ax.") -3)
+ ("theorem" ?h "theorem:%F:" "~\\ref{%s}" t ("theorem" "th.") -3)
+ ("proposition" ?p "prop:%F:" "~\\ref{%s}" t ("proposition" "prop.") -3)
+ ("definition" ?d "def:%F:" "~\\ref{%s}" t ("definition" "def.") -3)
+ ("corollary" ?c "cor:%F:" "~\\ref{%s}" t ("corollary" "cor.") -3)
+ ("lemma" ?l "lemma:%F:" "~\\ref{%s}" t ("lemma" "lem.") -3)
+ ("conjecture" ?j "conj:%F:" "~\\ref{%s}" t ("conjecture" "conj.") -3)
+ ("example" ?X "ex:%F:" "~\\ref{%s}" t ("example" "ex.") -3)
+ ("figure" ?F "fig:%F:" "~\\ref{%s}" t ("figure" "fig.") -3)
+ ("ax" ?a "ax:%F:" "~\\ref{%s}" t ("axiom" "ax.") -3)
+ ("thm" ?h "theorem:%F:" "~\\ref{%s}" t ("theorem" "th.") -3)
+ ("prop" ?p "prop:%F:" "~\\ref{%s}" t ("proposition" "prop.") -3)
+ ("defi" ?d "def:%F:" "~\\ref{%s}" t ("definition" "def.") -3)
+ ("cor" ?c "cor:%F:" "~\\ref{%s}" t ("corollary" "cor.") -3)
+ ("lem" ?l "lemma:%F:" "~\\ref{%s}" t ("lemma" "lem.") -3)
+ ("conj" ?j "conj:%F:" "~\\ref{%s}" t ("conjecture" "conj.") -3)
+ ("enumerate" 105 "item:%F:" "~\\ref{%s}" item (regexp "items?" "Punkte?"))
+ ("equation" 101 "eq:%F:" "~\\eqref{%s}" t
+ (regexp "equations?" "eqs?\\." "eqn\\." "Gleichung\\(en\\)?" "Gl\\."))
+ ("eqnarray" 101 "eq:%F:" nil eqnarray-like))))
+
+(use-package sass-mode
+ :ensure t)
+
+(use-package scroll-bar
+ :custom
+ (scroll-bar-mode nil))
+
+(use-package sendmail
+ :custom
+ (mail-specify-envelope-from t)
+ (mail-envelope-from 'header))
+
+(use-package simple
+ :custom
+ (column-mode-number t))
+
+(use-package smerge-mode
+ :commands smerge-mode
+ :init ;; weirdly won't work if under custom
+ (setq smerge-command-prefix (kbd "C-c v")))
+
+(use-package sml-mode
+ :ensure t
+ :mode ("\\.sml\\'" . sml-mode))
+
+(use-package solar
+ :custom
+ ;; Use 24 hour time in diary, calendar, etc.
+ (calendar-time-display-form
+ '(24-hours ":" minutes (if time-zone " (") time-zone (if time-zone ")")))
+ (calendar-latitude 40.4)
+ (calendar-longitude -79.9)
+ (calendar-location-name "Pittsburgh, PA"))
+
+(use-package spaceline
+ :ensure t
+ :requires spaceline-config)
+
+(use-package tex
+ :ensure auctex
+ :custom
+ (reftex-plug-into-AUCTeX t)
+ (TeX-parse-self t) ; Parse documents to provide completion for packages, etc.
+ (TeX-auto-save t) ; Automatically save style information
+ (TeX-clean-confirm nil) ; Don't ask for confirmation when cleaning
+ (TeX-source-correlate-mode t) ; Provide forward and inverse search with SyncTeX
+ (TeX-source-correlate-method 'synctex)
+ (TeX-PDF-mode t) ; use pdftex by default
+ :config
+ (cond
+ ((eq system-type 'darwin)
+ (add-to-list 'TeX-view-program-list
+ '("Zathura"
+ ("zathura "
+ (mode-io-correlate " --synctex-forward %n:0:%b -x \"emacsclient +%{line} %{input}\" ")
+ " %o")
+ "zathura"))))
+ (add-to-list 'TeX-view-program-selection '(output-pdf "Zathura")))
+
+(use-package tool-bar
+ :config
+ (tool-bar-mode -1))
+
+(use-package tramp
+ :defer t
+ :custom
+ (tramp-default-method "ssh"))
+
+(use-package tuareg
+ :ensure t
+ :config
+ (add-hook 'tuareg-mode-hook 'merlin-mode t))
+
+(use-package twittering-mode
+ :ensure t
+ :custom
+ (twittering-icon-mode t)
+ (twittering-icon-storage-file "~/.emacs.d/storage/twittering-mode-icons.gz")
+ (twittering-use-icon-storage t))
+
+(use-package vc-git
+ :requires vc
+ :config
+ (add-to-list 'vc-handled-backends 'git))
+
+(use-package windmove
+ :config
+ (windmove-default-keybindings)
+ :custom
+ (windmove-wrap-around t))
+
+(use-package yaml-mode
+ :ensure t)
diff --git a/dot_forward b/dot_forward
new file mode 100644
index 0000000..3d887eb
--- /dev/null
+++ b/dot_forward
@@ -0,0 +1 @@
+rak@rak.ac
diff --git a/dot_gbp.conf b/dot_gbp.conf
new file mode 100644
index 0000000..a9bcb8b
--- /dev/null
+++ b/dot_gbp.conf
@@ -0,0 +1,10 @@
+[DEFAULT]
+sign-tags = True
+
+[clone]
+# Ensure the correct orig tarball is present.
+postclone=origtargz
+
+[buildpackage]
+# Pick up the orig tarballs created by the origtargz postclone hook.
+tarball-dir = ..
diff --git a/dot_gitconfig b/dot_gitconfig
new file mode 100644
index 0000000..b7c44cc
--- /dev/null
+++ b/dot_gitconfig
@@ -0,0 +1,47 @@
+[user]
+ name = Ryan Kavanagh
+ email = rak@rak.ac
+[color]
+ ui = auto
+[sendemail]
+ smtpserver = /usr/sbin/sendmail
+[alias]
+ wdiff = diff --color-words
+ pusha = push origin :
+ lg = !"git lg1"
+ lg1 = !"git lg1-specific --all"
+ lg2 = !"git lg2-specific --all"
+ lg3 = !"git lg3-specific --all"
+ lsd = !"git lg3-specific --all --simplify-by-decoration"
+
+ lg1-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)'
+ lg2-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'
+ lg3-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset) %C(bold cyan)(committed: %cD)%C(reset) %C(auto)%d%C(reset)%n'' %C(white)%s%C(reset)%n'' %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)'
+
+ rl = reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)'
+
+ subrepo = !~/.local/lib/git-core/git-subrepo
+[push]
+ default = simple
+[url "git://anonscm.debian.org"]
+ insteadOf = "git://git.debian.org"
+[url "ssh://git.debian.org"]
+ pushInsteadOf = "git://git.debian.org"
+[rerere]
+ enabled = true
+[url "git@salsa.debian.org:"]
+ pushInsteadOf = https://salsa.debian.org/
+ insteadOf = https://salsa.debian.org/
+[core]
+ quotePath = false
+[includeIf "gitdir:/media/t/work/packaging/"]
+ path = ~/.gitconfig-debian
+[diff]
+ mnemonicPrefix = true
+ algorithm = histogram
+[diff "gpg"]
+ textconv = gpg --no-tty --decrypt
+[help]
+ autocorrect = prompt
+[init]
+ defaultBranch = master
diff --git a/dot_gitconfig-debian b/dot_gitconfig-debian
new file mode 100644
index 0000000..409be7c
--- /dev/null
+++ b/dot_gitconfig-debian
@@ -0,0 +1,3 @@
+[user]
+ name = Ryan Kavanagh
+ email = rak@debian.org
diff --git a/dot_gtkrc-2.0 b/dot_gtkrc-2.0
new file mode 100644
index 0000000..99749fa
--- /dev/null
+++ b/dot_gtkrc-2.0
@@ -0,0 +1 @@
+gtk-key-theme-name = "Emacs"
diff --git a/dot_inputrc b/dot_inputrc
new file mode 100644
index 0000000..64ed44d
--- /dev/null
+++ b/dot_inputrc
@@ -0,0 +1,4 @@
+set meta-flag on
+set convert-meta off
+set output-meta on
+set bell-style visible
diff --git a/dot_kshrc b/dot_kshrc
new file mode 100644
index 0000000..3acab9c
--- /dev/null
+++ b/dot_kshrc
@@ -0,0 +1,11 @@
+[ -f /etc/ksh.kshrc ] && . /etc/ksh.kshrc || true
+
+export PPROMPT='<$USER@$HOST:$PWD:!>'"$PS1S"
+export PS1=$PPROMPT
+
+export HISTFILE="$HOME/.ksh_history"
+export HISTSIZE=5000
+
+export VISUAL="vim"
+export EDITOR="$VISUAL"
+set -o emacs
diff --git a/dot_latexmkrc b/dot_latexmkrc
new file mode 100644
index 0000000..1ebddcc
--- /dev/null
+++ b/dot_latexmkrc
@@ -0,0 +1,3 @@
+$pdflatex = 'pdflatex -synctex=1 -interaction=nonstopmode';
+$pdf_mode = 1;
+@generated_exts = (@generated_exts, 'synctex.gz', 'run.xml', 'lox');
diff --git a/dot_lbdb/lbdbrc.tmpl b/dot_lbdb/lbdbrc.tmpl
new file mode 100644
index 0000000..148bdbe
--- /dev/null
+++ b/dot_lbdb/lbdbrc.tmpl
@@ -0,0 +1,3 @@
+KEEP_DUPES="yes"
+METHODS="m_inmail {{ if (not (eq .chezmoi.os "openbsd")) }}m_gpg {{ end }}m_muttalias"
+MUTTALIAS_FILES="aliases.rc accounts/rkavanag.alumni.cmu.edu/alias.rc accounts/ryank.mail.cs.mcgill.ca/alias.rc"
diff --git a/dot_local/lib/git-core/git-subrepo b/dot_local/lib/git-core/git-subrepo
new file mode 100755
index 0000000..3865570
--- /dev/null
+++ b/dot_local/lib/git-core/git-subrepo
@@ -0,0 +1,1897 @@
+#!/usr/bin/env bash
+#
+#
+# Copyright 2013-2020 - Ingy döt Net <ingy@ingy.net>
+#
+
+
+# Exit on any errors:
+set -e
+
+# Import Bash+ helper functions:
+SOURCE="$BASH_SOURCE"
+while [[ -h $SOURCE ]]; do
+ DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+ SOURCE="$(readlink "$SOURCE")"
+ [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
+done
+SOURCE_DIR="$(dirname "$SOURCE")"
+
+if [[ -z "$GIT_SUBREPO_ROOT" ]]; then
+ # If `make install` installation used:
+ source "${SOURCE_DIR}/git-subrepo.d/bash+.bash"
+else
+ # If `source .rc` method used:
+ source "${SOURCE_DIR}/../ext/bashplus/lib/bash+.bash"
+fi
+bash+:import :std can
+
+VERSION=0.4.1
+REQUIRED_GIT_VERSION=2.7.0
+GIT_TMP="$(git rev-parse --git-common-dir 2> /dev/null || echo .git)/tmp"
+
+# `git rev-parse` turns this into a getopt parser and a command usage message:
+GETOPT_SPEC="\
+git subrepo <command> <arguments> <options>
+
+Commands:
+ clone Clone a remote repository into a local subdirectory
+ init Turn a current subdirectory into a subrepo
+ pull Pull upstream changes to the subrepo
+ push Push local subrepo changes upstream
+
+ fetch Fetch a subrepo's remote branch (and create a ref for it)
+ branch Create a branch containing the local subrepo commits
+ commit Commit a merged subrepo branch into the mainline
+
+ status Get status of a subrepo (or all of them)
+ clean Remove branches, remotes and refs for a subrepo
+ config Set subrepo configuration properties
+
+ help Documentation for git-subrepo (or specific command)
+ version Display git-subrepo version info
+ upgrade Upgrade the git-subrepo software itself
+
+See 'git help subrepo' for complete documentation and usage of each command.
+
+Options:
+--
+h Show the command summary
+help Help overview
+version Print the git-subrepo version number
+
+a,all Perform command on all current subrepos
+A,ALL Perform command on all subrepos and subsubrepos
+b,branch= Specify the upstream branch to push/pull/fetch
+e,edit Edit commit message
+f,force Force certain operations
+F,fetch Fetch the upstream content first
+M,method= Method when you join, valid options are 'merge' or 'rebase'
+ Default is 'merge'
+m,message= Specify a commit message
+r,remote= Specify the upstream remote to push/pull/fetch
+s,squash Squash commits on push
+u,update Add the --branch and/or --remote overrides to .gitrepo
+
+q,quiet Show minimal output
+v,verbose Show verbose output
+d,debug Show the actual commands used
+x,DEBUG Turn on -x Bash debugging
+"
+
+#------------------------------------------------------------------------------
+# Top level function:
+#------------------------------------------------------------------------------
+main() {
+ # Define global variables:
+ local command= # Subrepo subcommand to run
+ local command_arguments=() # Command args after getopt parsing
+ local commit_msg_args=() # Arguments to show in the commit msg
+ local subrepos=() # List of multiple subrepos
+
+ local all_wanted=false # Apply command to all subrepos
+ local ALL_wanted=false # Apply command to all subrepos and subsubrepos
+ local force_wanted=false # Force certain operations
+ local fetch_wanted=false # Fetch requested before a command
+ local squash_wanted=false # Squash commits on push
+ local update_wanted=false # Update .gitrepo with --branch and/or --remote
+
+ local quiet_wanted=false # Output should be quiet
+ local verbose_wanted=false # Output should be verbose
+ local debug_wanted=false # Show debug messages
+
+ local subdir= # Subdirectory of the subrepo being used
+ local subref= # Valid git ref format of subdir
+ local gitrepo= # Path to .gitrepo file
+ local worktree= # Worktree created by 'git worktree'
+ local start_pwd=$(pwd) # Store the original directory
+
+ local original_head_commit= # HEAD commit id at start of command
+ local original_head_branch= # HEAD ref at start of command
+ local upstream_head_commit= # HEAD commit id from a subrepo fetch
+
+ local subrepo_remote= # Remote url for subrepo's upstream repo
+ local subrepo_branch= # Upstream branch to clone/push/pull
+ local subrepo_commit= # Upstream HEAD from previous clone/pull
+ local subrepo_parent= # Local commit from before previous clone/pull
+ local subrepo_former= # A retired gitrepo key that might still exist
+
+ local refs_subrepo_branch= # A subrepo ref -> commit of branch/pull command
+ local refs_subrepo_commit= # A subrepo ref -> commit last merged
+ local refs_subrepo_fetch= # A subrepo ref -> FETCH_HEAD after fetch
+ local refs_subrepo_push= # A subrepo ref -> branch after push
+
+ local override_remote= # Remote specified with -r
+ local override_branch= # Remote specified with -b
+
+ local edit_wanted=false # Edit commit message using -e
+ local wanted_commit_message= # Custom commit message using -m
+
+ local join_method= # Current join method (rebase/merge)
+
+ local FAIL=true # Flag for RUN: fail on error
+ local OUT=false # Flag for RUN: put output in $output
+ local TTY=false # Flag for RUN: print output directly
+ local SAY=true # Flag for RUN: print command for verbose
+ local EXEC=false # Flag for RUN: run subprocess
+ local OK=true # Flag that commands have succeeded
+ local CODE=0 # Failure reason code
+ local INDENT= # Verbose indentation
+
+ local git_version= # Git version in use
+
+ # Check environment and parse CLI options:
+ assert-environment-ok
+
+ # Parse and validate command options:
+ get-command-options "$@"
+
+ # Make sure repo is in the proper state:
+ assert-repo-is-ready
+
+ command-init
+
+ if $all_wanted && [[ ! $command =~ ^(help|status)$ ]]; then
+ # Run the command on all subrepos
+ local args=( "${command_arguments[@]}" )
+ get-all-subrepos
+ for subdir in ${subrepos[*]}; do
+ command-prepare
+ subrepo_remote=
+ subrepo_branch=
+ command_arguments=( "$subdir" "${args[@]}" )
+ "command:$command"
+ done
+ else
+ # Run the command on a specific subrepo
+ command-prepare
+ "command:$command"
+ fi
+}
+
+#------------------------------------------------------------------------------
+# API command functions.
+#
+# Most of these commands call a subrepo:$command function to do the actual
+# work. The user facing output (via `say`) is done up here. The
+# subrepo:* worker functions are meant to be called internally and don't print
+# info to the user.
+#------------------------------------------------------------------------------
+
+# `git subrepo clone <url> [<subdir>]` command:
+command:clone() {
+ command-setup +subrepo_remote subdir:guess-subdir
+
+ # Clone (or reclone) the subrepo into the subdir:
+ local reclone_up_to_date=false
+ subrepo:clone
+ if "$reclone_up_to_date"; then
+ say "Subrepo '$subdir' is up to date."
+ return
+ fi
+
+ # Successful command output:
+ local re=
+ $force_wanted && re=re
+ local remote="$subrepo_remote"
+ say "Subrepo '$remote' ($subrepo_branch) ${re}cloned into '$subdir'."
+}
+
+# `git subrepo init <subdir>` command:
+command:init() {
+ command-setup +subdir
+ local remote="${subrepo_remote:=none}"
+ local branch="${subrepo_branch:=master}"
+
+ # Init new subrepo from the subdir:
+ subrepo:init
+ if OK; then
+ if [[ $remote == none ]]; then
+ say "Subrepo created from '$subdir' (with no remote)."
+ else
+ say "Subrepo created from '$subdir' with remote '$remote' ($branch)."
+ fi
+ else
+ die "Unknown init error code: '$CODE'"
+ fi
+ return 0
+}
+
+# `git subrepo pull <subdir>` command:
+command:pull() {
+ command-setup +subdir
+
+ subrepo:pull
+ if OK; then
+ say "Subrepo '$subdir' pulled from '$subrepo_remote' ($subrepo_branch)."
+ elif [[ $CODE -eq -1 ]]; then
+ say "Subrepo '$subdir' is up to date."
+ elif [[ $CODE -eq 1 ]]; then
+ error-join
+ return "$CODE"
+ else
+ die "Unknown pull error code: '$CODE'"
+ fi
+ return 0
+}
+
+# `git subrepo push <subdir>` command:
+command:push() {
+ local branch=
+ command-setup +subdir branch
+
+ subrepo:push
+ if OK; then
+ say "Subrepo '$subdir' pushed to '$subrepo_remote' ($subrepo_branch)."
+ elif [[ $CODE -eq -2 ]]; then
+ say "Subrepo '$subdir' has no new commits to push."
+ elif [[ $CODE -eq 1 ]]; then
+ error-join
+ return "$CODE"
+ else
+ die "Unknown push error code: '$CODE'"
+ fi
+ return 0
+}
+
+# `git subrepo fetch <subdir>` command
+command:fetch() {
+ command-setup +subdir
+ if [[ $subrepo_remote == "none" ]]; then
+ say "Ignored '$subdir', no remote."
+ else
+ subrepo:fetch
+ say "Fetched '$subdir' from '$subrepo_remote' ($subrepo_branch)."
+ fi
+}
+
+# `git subrepo branch <subdir>` command:
+command:branch() {
+ command-setup +subdir
+ if $fetch_wanted; then
+ CALL subrepo:fetch
+ fi
+
+ local branch="subrepo/$subref"
+ if $force_wanted; then
+ # We must make sure that the worktree is removed as well
+ worktree="$GIT_TMP/$branch"
+ git:delete-branch "$branch"
+ fi
+
+ if git:branch-exists "$branch"; then
+ error "Branch '$branch' already exists. Use '--force' to override."
+ fi
+
+ # Create the subrepo branch:
+ subrepo:branch
+
+ say "Created branch '$branch' and worktree '$worktree'."
+}
+
+# `git subrepo commit <subdir>` command
+command:commit() {
+ command-setup +subdir subrepo_commit_ref
+
+ if "$fetch_wanted"; then
+ CALL subrepo:fetch
+ fi
+ git:rev-exists "$refs_subrepo_fetch" ||
+ error "Can't find ref '$refs_subrepo_fetch'. Try using -F."
+ upstream_head_commit="$(git rev-parse "$refs_subrepo_fetch")"
+
+ [[ -n $subrepo_commit_ref ]] ||
+ subrepo_commit_ref="subrepo/$subref"
+ subrepo:commit
+
+ say "Subrepo commit '$subrepo_commit_ref' committed as"
+ say "subdir '$subdir/' to branch '$original_head_branch'."
+}
+
+# `git subrepo status [<subdir>]` command:
+command:status() {
+ subrepo:status | ${GIT_SUBREPO_PAGER}
+}
+
+status-refs() {
+ local output=
+ while read line; do
+ [[ $line =~ ^([0-9a-f]+)\ refs/subrepo/$subref/([a-z]+) ]] || continue
+ local sha1=; sha1="$(git rev-parse --short "${BASH_REMATCH[1]}")"
+ local type="${BASH_REMATCH[2]}"
+ local ref="refs/subrepo/$subref/$type"
+ if [[ $type == branch ]]; then
+ output+=" Branch Ref: $sha1 ($ref)"$'\n'
+ elif [[ $type == commit ]]; then
+ output+=" Commit Ref: $sha1 ($ref)"$'\n'
+ elif [[ $type == fetch ]]; then
+ output+=" Fetch Ref: $sha1 ($ref)"$'\n'
+ elif [[ $type == pull ]]; then
+ output+=" Pull Ref: $sha1 ($ref)"$'\n'
+ elif [[ $type == push ]]; then
+ output+=" Push Ref: $sha1 ($ref)"$'\n'
+ fi
+ done < <(git show-ref)
+ if [[ -n $output ]]; then
+ printf " Refs:\n$output"
+ fi
+}
+
+# `git subrepo clean <subdir>` command
+command:clean() {
+ command-setup +subdir
+ local clean_list=()
+ subrepo:clean
+ for item in "${clean_list[@]}"; do
+ say "Removed $item."
+ done
+}
+
+# Wrap git config $gitrepo
+command:config() {
+ command-setup +subdir +config_option config_value
+ o "Update '$subdir' configuration with $config_option=$config_value"
+
+ if [[ ! $config_option =~ ^(branch|cmdver|commit|method|remote|version)$ ]]; then
+ error "Option $config_option not recognized"
+ fi
+
+ if [[ -z $config_value ]]; then
+ OUT=true RUN git config --file="$gitrepo" "subrepo.$config_option"
+ say "Subrepo '$subdir' option '$config_option' has value '$output'."
+ return
+ fi
+
+ if ! $force_wanted; then
+ # Only allow changing method without force
+ if [[ ! $config_option == "method" ]]; then
+ error "This option is autogenerated, use '--force' to override."
+ fi
+ fi
+
+ if [[ $config_option == "method" ]]; then
+ if [[ ! $config_value =~ ^(merge|rebase)$ ]]; then
+ error "Not a valid method. Valid options are 'merge' or 'rebase'."
+ fi
+ fi
+
+ RUN git config --file="$gitrepo" "subrepo.$config_option" "$config_value"
+ say "Subrepo '$subdir' option '$config_option' set to '$config_value'."
+}
+
+
+# Launch the manpage viewer:
+command:help() {
+ source "${SOURCE_DIR}/git-subrepo.d/help-functions.bash"
+ local cmd="${command_arguments[0]}"
+ if [[ -n $cmd ]]; then
+ if can "help:$cmd"; then
+ "help:$cmd"
+ echo
+ else
+ err "No help found for '$cmd'"
+ fi
+ elif $all_wanted; then
+ help:all
+ else
+ exec git help subrepo
+ fi
+ msg_ok=0
+}
+
+# Print version info.
+# TODO: Add short commit id after version.
+# Will need to get it from repo or make install can put it somewhere.
+command:version() {
+ cat <<...
+git-subrepo Version: $VERSION
+Copyright 2013-2020 Ingy döt Net
+https://github.com/ingydotnet/git-subrepo
+$BASH_SOURCE
+Git Version: $git_version
+
+...
+ :
+}
+
+command:upgrade() {
+ local path="$0"
+ if [[ $path =~ ^/ && $path =~ ^(.*/git-subrepo)/lib/git-subrepo$ ]]; then
+ local subrepo_root="${BASH_REMATCH[1]}"
+ (
+ o "Change directory to '$subrepo_root'."
+ cd "${BASH_REMATCH[1]}"
+
+ local branch="$(git rev-parse --abbrev-ref HEAD)"
+ if [[ $branch != master ]]; then
+ error "git-subrepo repo is not on the 'master' branch"
+ fi
+
+ o "'git pull' latest version."
+ RUN git pull --ff-only
+
+ say "git-subrepo is up to date."
+ )
+ else
+ die "\
+
+Sorry. Your installation can't use the 'git subrepo upgrade' command. The
+command only works if you installed git subrepo by adding
+'/path/to/git-subrepo' to your PATH.
+
+If you used 'make install' to install git-subrepo, then just do this:
+
+ cd /path/to/git-subrepo
+ git pull
+ make install
+
+"
+ fi
+}
+
+#------------------------------------------------------------------------------
+# Subrepo command worker functions.
+#------------------------------------------------------------------------------
+
+# Clone by fetching remote content into our subdir:
+subrepo:clone() {
+ re="$1"
+
+ FAIL=false RUN git rev-parse HEAD
+ if ! OK; then
+ error "You can't clone into an empty repository"
+ fi
+
+ # Turn off force unless really a reclone:
+ if $force_wanted && [[ ! -f $gitrepo ]]; then
+ force_wanted=false
+ fi
+
+ if $force_wanted; then
+ o "--force indicates a reclone."
+ CALL subrepo:fetch
+ read-gitrepo-file
+ o "Check if we already are up to date."
+ if [[ $upstream_head_commit == $subrepo_commit ]]; then
+ reclone_up_to_date=true
+ return
+ fi
+ o "Remove the old subdir."
+ RUN git rm -r -- "$subdir"
+ else
+ assert-subdir-empty
+ if [[ -z $subrepo_branch ]]; then
+ o "Determine the upstream head branch."
+ get-upstream-head-branch
+ subrepo_branch="$output"
+ fi
+
+ CALL subrepo:fetch
+ fi
+
+ o "Make the directory '$subdir/' for the clone."
+ RUN mkdir -p -- "$subdir"
+
+ o "Commit the new '$subdir/' content."
+ subrepo_commit_ref="$upstream_head_commit"
+ CALL subrepo:commit
+}
+
+# Init a new subrepo from current repo:
+subrepo:init() {
+ local branch_name="subrepo/${subref:??}"
+ # Check if subdir is proper candidate for this init:
+ assert-subdir-ready-for-init
+
+ o "Put info into '$subdir/.gitrepo' file."
+ update-gitrepo-file
+
+ o "Add the new '$subdir/.gitrepo' file."
+ # -f from pull request #219. TODO needs test.
+ RUN git add -f -- "$gitrepo"
+
+ o "Commit new subrepo to the '$original_head_branch' branch."
+ subrepo_commit_ref="$original_head_commit"
+ RUN git commit -m "$(get-commit-message)"
+
+ o "Create ref '$refs_subrepo_commit'."
+ git:make-ref "$refs_subrepo_commit" "$subrepo_commit_ref"
+}
+
+# Properly merge a local subrepo branch with upstream and commit to mainline:
+subrepo:pull() {
+ CALL subrepo:fetch
+
+ # Check if we already are up to date
+ # If the -u flag is present, always perform the operation
+ if [[ $upstream_head_commit == $subrepo_commit ]] && ! $update_wanted; then
+ OK=false; CODE=-1; return
+ fi
+
+ local branch_name="subrepo/$subref"
+ git:delete-branch "$branch_name"
+
+ subrepo_commit_ref="$branch_name"
+
+ o "Create subrepo branch '$branch_name'."
+ CALL subrepo:branch
+ cd "$worktree";
+
+ if [[ "$join_method" == "rebase" ]]; then
+ o "Rebase changes to $refs_subrepo_fetch"
+ FAIL=false OUT=true RUN git rebase "$refs_subrepo_fetch" "$branch_name"
+ if ! OK; then
+ say "The \"git rebase\" command failed:"
+ say
+ say " ${output//$'\n'/$'\n' }"
+ CODE=1
+ return
+ fi
+ else
+ o "Merge in changes from $refs_subrepo_fetch"
+ FAIL=false OUT=true RUN git merge "$refs_subrepo_fetch"
+ if ! OK; then
+ say "The \"git merge\" command failed:"
+ say
+ say " ${output//$'\n'/$'\n' }"
+ CODE=1
+ return
+ fi
+ fi
+
+ o "Back to $start_pwd"
+ cd "$start_pwd";
+
+ o "Create ref '$refs_subrepo_branch' for branch '$branch_name'."
+ git:make-ref "$refs_subrepo_branch" "$branch_name"
+
+ o "Commit the new '$subrepo_commit_ref' content."
+ CALL subrepo:commit
+}
+
+# Push a properly merged subrepo branch upstream:
+subrepo:push() {
+ local branch_name="$branch"
+ local new_upstream=false
+ local branch_created=false
+
+ if [[ -z $branch_name ]]; then
+ FAIL=false OUT=false CALL subrepo:fetch
+
+ if ! OK; then
+ # Check if we are pushing to a new upstream repo (or branch) and just
+ # push the commit directly. This is common after a `git subrepo init`:
+ # Force to case in
+ local re="(^|"$'\n'")fatal: couldn't find remote ref "
+ if [[ ${output,,} =~ $re ]]; then
+ o "Pushing to new upstream: $subrepo_remote ($subrepo_branch)."
+ new_upstream=true
+ else
+ error "Fetch for push failed: $output"
+ fi
+ else
+ # Check that we are up to date:
+ o "Check upstream head against .gitrepo commit."
+ if ! $force_wanted; then
+ if [[ $upstream_head_commit != $subrepo_commit ]]; then
+ error "There are new changes upstream, you need to pull first."
+ fi
+ fi
+ fi
+
+ branch_name="subrepo/$subref"
+ git:delete-branch "$branch_name"
+
+ if $squash_wanted; then
+ o "Squash commits"
+ subrepo_parent="HEAD^"
+ fi
+
+ o "Create subrepo branch '$branch_name'."
+ CALL subrepo:branch "$branch_name"
+ cd "$worktree";
+
+ if [[ "$join_method" == "rebase" ]]; then
+ o "Rebase changes to $refs_subrepo_fetch"
+ FAIL=false OUT=true RUN git rebase "$refs_subrepo_fetch" "$branch_name"
+ if ! OK; then
+ say "The \"git rebase\" command failed:"
+ say
+ say " ${output//$'\n'/$'\n' }"
+ CODE=1
+ return
+ fi
+ fi
+ branch_created=true
+ cd "$start_pwd"
+ else
+ if $squash_wanted; then
+ error "Squash option (-s) can't be used with branch parameter"
+ fi
+ fi
+
+ o "Make sure that '$branch_name' exists."
+ git:branch-exists "$branch_name" ||
+ error "No subrepo branch '$branch_name' to push."
+
+ o "Check if we have something to push"
+ new_upstream_head_commit="$(git rev-parse "$branch_name")"
+ if ! $new_upstream; then
+ if [[ $upstream_head_commit == $new_upstream_head_commit ]]; then
+ OK=false
+ CODE=-2
+ return
+ fi
+ fi
+
+ if ! $force_wanted; then
+ o "Make sure '$branch_name' contains the '$refs_subrepo_fetch' HEAD."
+ if ! git:commit-in-rev-list "$upstream_head_commit" "$branch_name"; then
+ error "Can't commit: '$branch_name' doesn't contain upstream HEAD: " \
+ "$upstream_head_commit"
+ fi
+ fi
+
+ local force=''
+ "$force_wanted" && force=' --force'
+
+ o "Push$force branch '$branch_name' to '$subrepo_remote' ($subrepo_branch)."
+ RUN git push$force "$subrepo_remote" "$branch_name":"$subrepo_branch"
+
+ o "Create ref '$refs_subrepo_push' for branch '$branch_name'."
+ git:make-ref "$refs_subrepo_push" "$branch_name"
+
+ if $branch_created; then
+ o "Remove branch '$branch_name'."
+ git:delete-branch "$branch_name"
+ fi
+
+ o "Put updates into '$subdir/.gitrepo' file."
+ upstream_head_commit="$new_upstream_head_commit"
+ subrepo_commit_ref="$upstream_head_commit"
+ update-gitrepo-file
+ RUN git commit -m "$(get-commit-message)"
+}
+
+# Fetch the subrepo's remote branch content:
+subrepo:fetch() {
+ if [[ $subrepo_remote == none ]]; then
+ error "Can't fetch subrepo. Remote is 'none' in '$subdir/.gitrepo'."
+ fi
+
+ o "Fetch the upstream: $subrepo_remote ($subrepo_branch)."
+ RUN git fetch --no-tags --quiet "$subrepo_remote" "$subrepo_branch"
+ OK || return
+
+ o "Get the upstream subrepo HEAD commit."
+ OUT=true RUN git rev-parse FETCH_HEAD^0
+ upstream_head_commit="$output"
+
+ o "Create ref '$refs_subrepo_fetch'."
+ git:make-ref "$refs_subrepo_fetch" FETCH_HEAD^0
+}
+
+# Create a subrepo branch containing all changes
+subrepo:branch() {
+ local branch="${1:-"subrepo/$subref"}"
+ o "Check if the '$branch' branch already exists."
+ git:branch-exists "$branch" && return
+
+ local last_gitrepo_commit=
+ local first_gitrepo_commit=
+
+ o "Subrepo parent: $subrepo_parent"
+ if [[ -n "$subrepo_parent" ]]; then
+ local prev_commit=
+ local ancestor=
+ o "Create new commits with parents into the subrepo fetch"
+ OUT=true RUN git rev-list --reverse --ancestry-path --topo-order "$subrepo_parent..HEAD"
+ local commit_list="$output"
+ for commit in $commit_list; do
+ o "Working on $commit"
+
+ FAIL=false OUT=true RUN git config --blob \
+ "$commit":"$subdir/.gitrepo" "subrepo.commit"
+ if [[ -z "$output" ]]; then
+ o "Ignore commit, no .gitrepo file"
+ continue
+ fi
+
+ local gitrepo_commit="$output"
+ o ".gitrepo reference commit: $gitrepo_commit"
+
+
+ # Only include the commit if it's a child of the previous commit
+ # This way we create a single path between $subrepo_parent..HEAD
+ if [[ -n "$ancestor" ]]; then
+ local is_direct_child=$(git show -s --pretty=format:"%P" $commit | grep "$ancestor")
+ o "is child: $is_direct_child"
+ if [[ -z "$is_direct_child" ]]; then
+ o "Ignore $commit, it's not in the selected path"
+ continue
+ fi
+ fi
+
+ # Remember the previous commit from the parent repo path
+ ancestor="$commit"
+
+ o "Check for rebase"
+ if git:rev-exists "$refs_subrepo_fetch"; then
+ if ! git:commit-in-rev-list "$gitrepo_commit" "$refs_subrepo_fetch"; then
+ error "Local repository does not contain $gitrepo_commit. Try to 'git subrepo fetch $subref' or add the '-F' flag to always fetch the latest content."
+ fi
+ fi
+
+ o "Find parents"
+ local first_parent=
+ [[ -n $prev_commit ]] && first_parent="-p $prev_commit"
+ local second_parent=
+ if [[ -z "$first_gitrepo_commit" ]]; then
+ first_gitrepo_commit="$gitrepo_commit"
+ second_parent="-p $gitrepo_commit"
+ fi
+
+ if [[ "$join_method" != "rebase" ]]; then
+ # In the rebase case we don't create merge commits
+ if [[ "$gitrepo_commit" != "$last_gitrepo_commit" ]]; then
+ second_parent="-p $gitrepo_commit"
+ last_gitrepo_commit="$gitrepo_commit"
+ fi
+ fi
+
+ o "Create a new commit $first_parent $second_parent"
+ FAIL=false RUN git cat-file -e "$commit":"$subdir"
+ if OK; then
+ o "Create with content"
+ local PREVIOUS_IFS=$IFS
+ IFS=$'\n'
+ local author_info=( $(git log -1 --format=%ad%n%ae%n%an "$commit") )
+ IFS=$PREVIOUS_IFS
+
+ # When we create new commits we leave the author information unchanged
+ # the committer will though be updated to the current user
+ # This should be analog how cherrypicking is handled allowing git
+ # to store both the original author but also the responsible committer
+ # that created the local version of the commit and pushed it.
+ prev_commit=$(git log -n 1 --format=%B "$commit" |
+ GIT_AUTHOR_DATE="${author_info[0]}" \
+ GIT_AUTHOR_EMAIL="${author_info[1]}" \
+ GIT_AUTHOR_NAME="${author_info[2]}" \
+ git commit-tree -F - $first_parent $second_parent "$commit":"$subdir")
+ else
+ o "Create empty placeholder"
+ prev_commit=$(git commit-tree -m "EMPTY" \
+ $first_parent $second_parent "4b825dc642cb6eb9a060e54bf8d69288fbee4904")
+ fi
+ done
+
+ o "Create branch '$branch' for this new commit set $prev_commit."
+ RUN git branch "$branch" "$prev_commit"
+ else
+ o "No parent setting, use the subdir content."
+ RUN git branch "$branch" HEAD
+ TTY=true FAIL=false RUN git filter-branch -f --subdirectory-filter \
+ "$subref" "$branch"
+ fi
+
+ o "Remove the .gitrepo file from $first_gitrepo_commit..$branch"
+ local filter="$branch"
+ [[ -n "$first_gitrepo_commit" ]] && filter="$first_gitrepo_commit..$branch"
+ FAIL=false RUN git filter-branch -f --prune-empty --tree-filter \
+ "rm -f .gitrepo" "$filter"
+
+ git:create-worktree "$branch"
+
+ o "Create ref '$refs_subrepo_branch'."
+ git:make-ref "$refs_subrepo_branch" "$branch"
+}
+
+# Commit a merged subrepo branch:
+subrepo:commit() {
+ o "Check that '$subrepo_commit_ref' exists."
+ git:rev-exists "$subrepo_commit_ref" ||
+ error "Commit ref '$subrepo_commit_ref' does not exist."
+
+ if ! "$force_wanted"; then
+ local upstream="$upstream_head_commit"
+ o "Make sure '$subrepo_commit_ref' contains the upstream HEAD."
+ if ! git:commit-in-rev-list "$upstream" "$subrepo_commit_ref"; then
+ error \
+ "Can't commit: '$subrepo_commit_ref' doesn't contain upstream HEAD."
+ fi
+ fi
+
+ if git ls-files -- "$subdir" | grep -q .; then
+ o "Remove old content of the subdir."
+ RUN git rm -r -- "$subdir"
+ fi
+
+ o "Put remote subrepo content into '$subdir/'."
+ RUN git read-tree --prefix="$subdir" -u "$subrepo_commit_ref"
+
+ o "Put info into '$subdir/.gitrepo' file."
+ update-gitrepo-file
+ RUN git add -f -- "$gitrepo"
+
+ local commit_message
+ if [[ -n "$wanted_commit_message" ]]; then
+ commit_message="$wanted_commit_message"
+ else
+ commit_message="$(get-commit-message)"
+ fi
+
+ local edit_flag=
+ $edit_wanted && edit_flag=--edit
+
+ [[ -n $commit_message ]] || commit_message="$(get-commit-message)"
+
+ local edit_flag=
+ $edit_wanted && edit_flag=--edit
+
+ o "Commit to the '$original_head_branch' branch."
+ if [[ $original_head_commit != none ]]; then
+ RUN git commit $edit_flag -m "$commit_message"
+ else
+ # We had cloned into an empty repo, side effect of prior git reset --mixed
+ # command is that subrepo's history is now part of the index. Commit
+ # without that history.
+ OUT=true RUN git write-tree
+ OUT=true RUN git commit-tree $edit_flag -m "$commit_message" "$output"
+ RUN git reset --hard "$output"
+ fi
+
+ # Clean up worktree to indicate that we are ready
+ git:remove-worktree
+
+ o "Create ref '$refs_subrepo_commit'."
+ git:make-ref "$refs_subrepo_commit" "$subrepo_commit_ref"
+}
+
+subrepo:status() {
+ if [[ ${#command_arguments[@]} -eq 0 ]]; then
+ get-all-subrepos
+ local count=${#subrepos[@]}
+ if ! "$quiet_wanted"; then
+ if [[ $count -eq 0 ]]; then
+ echo "No subrepos."
+ return
+ else
+ local s=; [[ $count -eq 1 ]] || s=s
+ echo "$count subrepo$s:"
+ echo
+ fi
+ fi
+ else
+ subrepos=("${command_arguments[@]}")
+ fi
+
+ for subdir in "${subrepos[@]}"; do
+ check-and-normalize-subdir
+ encode-subdir
+
+ if [[ ! -f $subdir/.gitrepo ]]; then
+ echo "'$subdir' is not a subrepo"
+ echo
+ continue
+ fi
+
+ refs_subrepo_fetch="refs/subrepo/$subref/fetch"
+ upstream_head_commit="$(
+ git rev-parse --short "$refs_subrepo_fetch" 2> /dev/null || true
+ )"
+ subrepo_remote=
+ subrepo_branch=
+
+ read-gitrepo-file
+ if $fetch_wanted; then
+ subrepo:fetch
+ fi
+
+ if $quiet_wanted; then
+ echo "$subdir"
+ continue
+ fi
+
+ echo "Git subrepo '$subdir':"
+ git:branch-exists "subrepo/$subref" &&
+ echo " Subrepo Branch: subrepo/$subref"
+ local remote="subrepo/$subref"
+ FAIL=false OUT=true RUN git config "remote.$remote.url"
+ [[ -n $output ]] &&
+ echo " Remote Name: subrepo/$subref"
+ echo " Remote URL: $subrepo_remote"
+ [[ -n $upstream_head_commit ]] &&
+ echo " Upstream Ref: $upstream_head_commit"
+ echo " Tracking Branch: $subrepo_branch"
+ [[ -z $subrepo_commit ]] ||
+ echo " Pulled Commit: $(git rev-parse --short $subrepo_commit)"
+ if [[ -n $subrepo_parent ]]; then
+ echo " Pull Parent: $(git rev-parse --short $subrepo_parent)"
+ # TODO Remove this eventually:
+ elif [[ -n $subrepo_former ]]; then
+ printf " Former Commit: $(git rev-parse --short $subrepo_former)"
+ echo " *** DEPRECATED ***"
+ fi
+
+ # Grep for directory, branch can be in detached state due to conflicts
+ local _worktree=$(git worktree list | grep "$GIT_TMP/subrepo/$subdir")
+ if [[ -n $_worktree ]]; then
+ echo " Worktree: $_worktree"
+ fi
+
+ if "$verbose_wanted"; then
+ status-refs
+ fi
+
+ echo
+ done
+}
+
+subrepo:clean() {
+ # Remove subrepo branches if exist:
+ local branch="subrepo/$subref"
+ local ref="refs/heads/$branch"
+ local worktree="$GIT_TMP/$branch"
+
+ o "Clean $subdir"
+ git:remove-worktree
+ if [[ -e .git/$ref ]]; then
+ o "Remove branch '$branch'."
+ RUN git update-ref -d "$ref"
+ clean_list+=("branch '$branch'")
+ fi
+
+ if "$force_wanted"; then
+ o "Remove all subrepo refs."
+ local suffix=""
+ if ! $all_wanted; then
+ suffix="$subref/"
+ fi
+ git show-ref | while read hash ref; do
+ if [[ "$ref" == refs/subrepo/$suffix* ]]; then
+ git update-ref -d "$ref"
+ fi
+ done
+ fi
+}
+
+#------------------------------------------------------------------------------
+# Support functions:
+#------------------------------------------------------------------------------
+
+
+# TODO:
+# Collect original options and arguments into an array for commit message
+# They should be normalized and pruned
+
+# Parse command line options:
+get-command-options() {
+ [[ $# -eq 0 ]] && set -- --help
+
+ [[ -n $GIT_SUBREPO_QUIET ]] && quiet_wanted=true
+ [[ -n $GIT_SUBREPO_VERBOSE ]] && verbose_wanted=true
+ [[ -n $GIT_SUBREPO_DEBUG ]] && debug_wanted=true
+
+ eval "$(
+ echo "$GETOPT_SPEC" |
+ git rev-parse --parseopt -- "$@" ||
+ echo exit $?
+ )"
+
+ while [[ $# -gt 0 ]]; do
+ local option="$1"; shift
+ case "$option" in
+ --) break ;;
+ -a) all_wanted=true ;;
+ -A) ALL_wanted=true
+ all_wanted=true ;;
+ -b) subrepo_branch="$1"
+ override_branch="$1"
+ commit_msg_args+=("--branch=$1")
+ shift ;;
+ -e) edit_wanted=true ;;
+ -f) force_wanted=true
+ commit_msg_args+=("--force") ;;
+ -F) fetch_wanted=true ;;
+ -m) wanted_commit_message="$1"
+ shift;;
+ -M) join_method="$1"
+ shift;;
+ -M) join_method="$1"
+ shift;;
+ -r) subrepo_remote="$1"
+ override_remote="$1"
+ commit_msg_args+=("--remote=$1")
+ shift ;;
+ -s) squash_wanted=true ;;
+ -u) update_wanted=true
+ commit_msg_args+=("--update") ;;
+ -q) quiet_wanted=true ;;
+ -v) verbose_wanted=true ;;
+ -d) debug_wanted=true ;;
+ -x) set -x ;;
+ --version)
+ echo "$VERSION"
+ exit ;;
+ *) usage-error "Unexpected option: '$option'." ;;
+ esac
+ done
+
+ # Set subrepo command:
+ command="$1"; shift
+
+ # Make sure command exists:
+ can "command:$command" ||
+ usage-error "'$command' is not a command. See 'git subrepo help'."
+
+ command_arguments=("$@")
+ if [[ ${#command_arguments} -gt 0 ]]; then
+ local first="${command_arguments[0]}"
+ first="${first%/}"
+ command_arguments[0]="$first"
+ fi
+ commit_msg_args+=("${command_arguments[@]}")
+
+ for option in all ALL edit fetch force squash; do
+ var="${option}_wanted"
+ if ${!var}; then
+ check_option $option
+ fi
+ done
+
+ if [[ -n $override_branch ]]; then
+ check_option branch
+ fi
+ if [[ -n $override_remote ]]; then
+ check_option remote
+ fi
+ if [[ -n $wanted_commit_message ]]; then
+ check_option message
+ fi
+ if $update_wanted; then
+ check_option update
+ if [[ -z $subrepo_branch && -z $subrepo_remote ]]; then
+ usage-error "Can't use '--update' without '--branch' or '--remote'."
+ fi
+ fi
+}
+
+options_help='all'
+options_branch='all fetch force'
+options_clean='ALL all force'
+options_clone='branch edit force message method'
+options_config='force'
+options_commit='edit fetch force message'
+options_fetch='all branch remote'
+options_init='branch remote method'
+options_pull='all branch edit force message remote update'
+options_push='all branch force remote squash update'
+options_status='ALL all fetch'
+check_option() {
+ local var="options_${command//-/_}"
+ [[ ${!var} =~ $1 ]] ||
+ usage-error "Invalid option '--$1' for '$command'."
+}
+
+#------------------------------------------------------------------------------
+# Command argument validation:
+#------------------------------------------------------------------------------
+
+command-init() {
+ # Export variable to let other processes (possibly git hooks) know that they
+ # are running under git-subrepo. Set to current process pid, so it can be
+ # further verified if need be:
+ export GIT_SUBREPO_RUNNING="$$"
+ export GIT_SUBREPO_COMMAND="$command"
+
+ : "${GIT_SUBREPO_PAGER:=${PAGER:-less}}"
+ if [[ $GIT_SUBREPO_PAGER == less ]]; then
+ GIT_SUBREPO_PAGER='less -FRX'
+ fi
+}
+
+command-prepare() {
+ local output=
+ if git:rev-exists HEAD; then
+ git:get-head-branch-commit
+ fi
+ original_head_commit="${output:-none}"
+}
+
+# Do the setup steps needed by most of the subrepo subcommands:
+command-setup() {
+ get-params "$@"
+
+ check-and-normalize-subdir
+ encode-subdir
+ gitrepo="$subdir/.gitrepo"
+
+ if ! $force_wanted; then
+ o "Check for worktree with branch subrepo/$subdir"
+ local _worktree=$(git worktree list | grep "\[subrepo/$subdir\]" | cut -d ' ' -f1)
+ if [[ $command =~ ^(commit)$ && -z $_worktree ]]; then
+ error "There is no worktree available, use the branch command first"
+ elif [[ ! $command =~ ^(branch|clean|commit|push)$ && -n $_worktree ]]; then
+ if [[ -e $gitrepo ]]; then
+ error "There is already a worktree with branch subrepo/$subdir.
+Use the --force flag to override this check or perform a subrepo clean
+to remove the worktree."
+ else
+ error "There is already a worktree with branch subrepo/$subdir.
+Use the --force flag to override this check or remove the worktree with
+1. rm -rf $_worktree
+2. git worktree prune
+"
+ fi
+ fi
+ fi
+
+ # Set refs_ variables:
+ refs_subrepo_branch="refs/subrepo/$subref/branch"
+ refs_subrepo_commit="refs/subrepo/$subref/commit"
+ refs_subrepo_fetch="refs/subrepo/$subref/fetch"
+ refs_subrepo_push="refs/subrepo/$subref/push"
+
+ # Read/parse the .gitrepo file (unless clone/init; doesn't exist yet)
+ if [[ ! $command =~ ^(clone|init)$ ]]; then
+ read-gitrepo-file
+ fi
+
+ true
+}
+
+# Parse command line args according to a simple dsl spec:
+get-params() {
+ local i=0
+ local num=${#command_arguments[@]}
+ for arg in $@; do
+ local value="${command_arguments[i]}"
+ value="${value//%/%%}"
+ value="${value//\\/\\\\}"
+ # If arg starts with '+' then it is required
+ if [[ $arg == +* ]]; then
+ if [[ $i -ge $num ]]; then
+ usage-error "Command '$command' requires arg '${arg#+}'."
+ fi
+ printf -v ${arg#+} -- "$value"
+ # Look for function name after ':' to provide a default value
+ else
+ if [[ $i -lt $num ]]; then
+ printf -v ${arg%:*} -- "$value"
+ elif [[ $arg =~ : ]]; then
+ "${arg#*:}"
+ fi
+ fi
+ let i=$((i+1))
+ done
+
+ # Check for extra arguments:
+ if [[ $num -gt $i ]]; then
+ set -- ${command_arguments[@]}
+ for ((j = 1; j <= i; j++)); do shift; done
+ error "Unknown argument(s) '$*' for '$command' command."
+ fi
+}
+
+check-and-normalize-subdir() {
+ # Sanity check subdir:
+ [[ -n $subdir ]] ||
+ die "subdir not set"
+ [[ $subdir =~ ^/ || $subdir =~ ^[A-Z]: ]] &&
+ usage-error "The subdir '$subdir' should not be absolute path."
+ subdir="${subdir#./}"
+ subdir="${subdir%/}"
+ [[ $subdir != *//* ]] || subdir=$(tr -s / <<< "$subdir")
+}
+
+# Determine the correct subdir path to use:
+guess-subdir() {
+ local dir="$subrepo_remote"
+ dir="${dir%.git}"
+ dir="${dir%/}"
+ dir="${dir##*/}"
+ [[ $dir =~ ^[-_a-zA-Z0-9]+$ ]] ||
+ error "Can't determine subdir from '$subrepo_remote'."
+ subdir="$dir"
+ check-and-normalize-subdir
+ encode-subdir
+}
+
+# Encode the subdir as a valid git ref format
+#
+# Input: env $subdir
+# Output: env $subref
+#
+# For detail rules about valid git refs, see the manual of git-check-ref-format:
+# URL: https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html
+# Shell: git check-ref-format --help
+#
+encode-subdir() {
+ subref=$subdir
+ if [[ ! $subref ]] || git check-ref-format "subrepo/$subref"; then
+ return
+ fi
+
+ ## 0. escape %, ensure the subref can be (almost) decoded back to subdir
+ subref=${subref//%/%25}
+
+ ## 1. They can include slash / for hierarchical (directory) grouping,
+ ## but no slash-separated component can begin with a dot . or
+ ## end with the sequence .lock.
+ subref=/$subref/
+ subref=${subref//\/.//%2e}
+ subref=${subref//.lock\//%2elock/}
+ subref=${subref#/}
+ subref=${subref%/}
+
+ ## 2. They must contain at least one /.
+ ## Note: 'subrepo/' be will prefixed, so this is always true.
+ ## 3. They cannot have two consecutive dots .. anywhere.
+ subref=${subref//../%2e%2e}
+ subref=${subref//%2e./%2e%2e}
+ subref=${subref//.%2e/%2e%2e}
+
+ ## 4. They cannot have ASCII control characters
+ ## (i.e. bytes whose values are lower than \040, or \177 DEL), space,
+ ## tilde ~, caret ^, or colon : anywhere.
+ ## 5. They cannot have question-mark ?, asterisk *,
+ ## or open bracket [ anywhere.
+ local i
+ for (( i = 1; i < 32; ++i )); do
+ # skip substitute NUL char (i=0), as bash will skip NUL in env
+ local x=$(printf "%02x" $i)
+ subref=${subref//$(printf "%b" "\x$x")/%$x}
+ done
+ subref=${subref//$'\177'/%7f}
+ subref=${subref// /%20}
+ subref=${subref//\~/%7e}
+ subref=${subref//^/%5e}
+ subref=${subref//:/%3a}
+ subref=${subref//\?/%3f}
+ subref=${subref//\*/%2a}
+ subref=${subref//\[/%5b}
+ subref=${subref//$'\n'/%0a}
+
+ ## 6. They cannot begin or end with a slash / or contain multiple
+ ## consecutive slashes.
+ ## Note: This rule is not revertable.
+ [[ $subref != *//* ]] || subref=$(tr -s / <<< "$subref")
+
+ ## 7. They cannot end with a dot ..
+ case "$subref" in
+ *.) subref=${subref%.}
+ subref+=%2e
+ ;;
+ esac
+
+ ## 8. They cannot contain a sequence @\{.
+ subref=${subref//@\{/%40\{}
+
+ ## 9. They cannot be the single character @.
+ ## Note: 'subrepo/' be will prefixed, so this is always true.
+
+ ## 10. They cannot contain a \.
+ subref=${subref//\\/%5c}
+
+ subref=$(git check-ref-format --normalize --allow-onelevel "$subref") ||
+ error "Can't determine valid subref from '$subdir'."
+}
+
+#------------------------------------------------------------------------------
+# State file (`.gitrepo`) functions:
+#------------------------------------------------------------------------------
+
+# Set subdir and gitrepo vars:
+read-gitrepo-file() {
+ gitrepo="$subdir/.gitrepo"
+
+ if [[ ! -f $gitrepo ]]; then
+ error "No '$gitrepo' file."
+ fi
+
+ # Read .gitrepo values:
+ if [[ -z $subrepo_remote ]]; then
+ SAY=false OUT=true RUN git config --file="$gitrepo" subrepo.remote
+ subrepo_remote="$output"
+ fi
+
+ if [[ -z $subrepo_branch ]]; then
+ SAY=false OUT=true RUN git config --file="$gitrepo" subrepo.branch
+ subrepo_branch="$output"
+ fi
+
+ SAY=false OUT=true RUN git config --file="$gitrepo" subrepo.commit
+ subrepo_commit="$output"
+
+ FAIL=false \
+ SAY=false OUT=true RUN git config --file="$gitrepo" subrepo.parent
+ subrepo_parent="$output"
+
+ FAIL=false \
+ SAY=false OUT=true RUN git config --file="$gitrepo" subrepo.method
+ if [[ $output == "rebase" ]]; then
+ join_method="rebase"
+ else
+ # This is the default method
+ join_method="merge"
+ fi
+
+ if [[ -z $subrepo_parent ]]; then
+ FAIL=false \
+ SAY=false OUT=true RUN git config --file="$gitrepo" subrepo.former
+ subrepo_former="$output"
+ fi
+}
+
+
+# Update the subdir/.gitrepo state file:
+update-gitrepo-file() {
+ local short_commit=
+
+ local newfile=false
+ if [[ ! -e $gitrepo ]]; then
+
+ FAIL=false RUN git cat-file -e "$original_head_commit":"$gitrepo"
+
+ if OK; then
+ o "Try to recreate gitrepo file from $original_head_commit"
+ git cat-file -p "$original_head_commit":"$gitrepo" > "$gitrepo"
+ else
+ newfile=true
+ cat <<... > "$gitrepo"
+; DO NOT EDIT (unless you know what you are doing)
+;
+; This subdirectory is a git "subrepo", and this file is maintained by the
+; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme
+;
+...
+ fi
+ fi
+
+
+ # TODO: only update remote and branch if supplied and $update_wanted
+ if $newfile || [[ $update_wanted && -n $override_remote ]]; then
+ RUN git config --file="$gitrepo" subrepo.remote "$subrepo_remote"
+ fi
+
+ if $newfile || [[ $update_wanted && -n $override_branch ]]; then
+ RUN git config --file="$gitrepo" subrepo.branch "$subrepo_branch"
+ fi
+
+ RUN git config --file="$gitrepo" subrepo.commit "$upstream_head_commit"
+ # Only write new parent when we are at the head of upstream
+ if [[ -n $upstream_head_commit && -n $subrepo_commit_ref ]]; then
+ OUT=true RUN git rev-parse "$subrepo_commit_ref"
+ o "$upstream_head_commit == $output"
+ if [[ $upstream_head_commit == $output ]]; then
+ RUN git config --file="$gitrepo" subrepo.parent "$original_head_commit"
+ fi
+ fi
+
+ [[ -z $join_method ]] && join_method="merge"
+ RUN git config --file="$gitrepo" subrepo.method "$join_method"
+
+ RUN git config --file="$gitrepo" subrepo.cmdver "$VERSION"
+
+ RUN git add -f -- "$gitrepo"
+}
+
+#------------------------------------------------------------------------------
+# Enviroment checks:
+#------------------------------------------------------------------------------
+
+# Check that system is ok for this command:
+assert-environment-ok() {
+ type git &> /dev/null ||
+ error "Can't find your 'git' command in '$PATH'."
+
+ git_version=$(git --version | cut -d ' ' -f3)
+
+ if [[ $(
+ printf "$REQUIRED_GIT_VERSION\n$git_version" |
+ sort -t. -k 1,1n -k 2,2n -k 3,3n |
+ head -n1
+ ) == "$git_version" &&
+ $git_version != "$REQUIRED_GIT_VERSION"
+ ]]; then
+ error "Requires git version $REQUIRED_GIT_VERSION or higher; "`
+ `"you have '$git_version'."
+ fi
+
+ if [[ ${BASH_VERSINFO[0]} -lt 4 ]] ; then
+ echo "The git-subrepo command requires that 'Bash 4+' is installed."
+ echo "It doesn't need to be your shell, but it must be in your PATH."
+ if [[ $OSTYPE == darwin* ]]; then
+ echo "You appear to be on macOS."
+ echo "Try: 'brew install bash'."
+ echo "This will not change your user shell, it just installs 'Bash 5.x'."
+ fi
+ exit 1
+ fi
+}
+
+# Make sure git repo is ready:
+assert-repo-is-ready() {
+ # Skip this for trivial info commands:
+ [[ $command =~ ^(help|version|upgrade)$ ]] && return
+
+ # We must be inside a git repo:
+ git rev-parse --git-dir &> /dev/null ||
+ error "Not inside a git repository."
+
+ # Get the original branch and commit:
+ git:get-head-branch-name
+ original_head_branch="$output"
+
+ # If a subrepo branch is currently checked out, then note it:
+ if [[ $original_head_branch =~ ^subrepo/(.*) ]]; then
+ error "Can't '$command' while subrepo branch is checked out."
+ fi
+
+ # Make sure we are on a branch:
+ [[ $original_head_branch == HEAD || -z $original_head_branch ]] &&
+ error "Must be on a branch to run this command."
+
+ # In a work-tree:
+ SAY=false OUT=true RUN git rev-parse --is-inside-work-tree
+ [[ $output == true ]] ||
+ error "Can't 'subrepo $command' outside a working tree."
+
+ # HEAD exists:
+ [[ $command == clone ]] ||
+ RUN git rev-parse --verify HEAD
+
+ assert-working-copy-is-clean
+
+ # For now, only support actions from top of repo:
+ if [[ -n "$(git rev-parse --show-prefix)" ]]; then
+ error "Need to run subrepo command from top level directory of the repo."
+ fi
+}
+
+assert-working-copy-is-clean() {
+ # Repo is in a clean state:
+ if [[ $command =~ ^(clone|init|pull|push|branch|commit)$ ]]; then
+ # TODO: Should we check for untracked files?
+ local pwd=$(pwd)
+ o "Assert that working copy is clean: $pwd"
+ git update-index -q --ignore-submodules --refresh
+ git diff-files --quiet --ignore-submodules ||
+ error "Can't $command subrepo. Unstaged changes. ($pwd)"
+ if [[ $command != clone ]] || git:rev-exists HEAD; then
+ git diff-index --quiet --ignore-submodules HEAD ||
+ error "Can't $command subrepo. Working tree has changes. ($pwd)"
+ git diff-index --quiet --cached --ignore-submodules HEAD ||
+ error "Can't $command subrepo. Index has changes. ($pwd)"
+ else
+ # Repo has no commits and we're cloning a subrepo. Working tree won't
+ # possibly have changes as there was nothing initial to change.
+ [[ -z $(git ls-files) ]] ||
+ error "Can't $command subrepo. Index has changes. ($pwd)"
+ fi
+ fi
+}
+
+# If subdir exists, make sure it is empty:
+assert-subdir-ready-for-init() {
+ if [[ ! -e $subdir ]]; then
+ error "The subdir '$subdir' does not exist."
+ fi
+ if [[ -e $subdir/.gitrepo ]]; then
+ error "The subdir '$subdir' is already a subrepo."
+ fi
+ # Check that subdir is part of the repo
+ if [[ -z $(git log -1 -- $subdir) ]]; then
+ error "The subdir '$subdir' is not part of this repo."
+ fi
+}
+
+# If subdir exists, make sure it is empty:
+assert-subdir-empty() {
+ if [[ -e $subdir ]] && [[ -n $(ls -A $subdir) ]]; then
+ error "The subdir '$subdir' exists and is not empty."
+ fi
+}
+
+#------------------------------------------------------------------------------
+# Getters of various information:
+#------------------------------------------------------------------------------
+
+# Find all the current subrepos by looking for all the subdirectories that
+# contain a `.gitrepo` file.
+get-all-subrepos() {
+ local paths=($(git ls-files | sed -n 's!/\.gitrepo$!!p' | sort))
+ subrepos=()
+ local path
+ for path in "${paths[@]}"; do
+ add-subrepo "$path"
+ done
+}
+
+add-subrepo() {
+ if ! $ALL_wanted; then
+ for path in "${subrepos[@]}"; do
+ [[ $1 =~ ^$path ]] && return
+ done
+ fi
+ subrepos+=("$1")
+}
+
+# Determine the upstream's default head branch:
+get-upstream-head-branch() {
+ OUT=true RUN git ls-remote $subrepo_remote
+ local remotes="$output"
+ [[ -n $remotes ]] ||
+ error "Failed to 'git ls-remote $subrepo_remote'."
+ local commit="$(
+ echo "$remotes" |
+ grep HEAD |
+ cut -f1
+ )"
+ local branch="$(
+ echo "$remotes" |
+ grep -E "$commit[[:space:]]+refs/heads/" |
+ grep -v HEAD |
+ head -n1 |
+ cut -f2
+ )"
+ [[ $branch =~ refs/heads/ ]] ||
+ error "Problem finding remote default head branch."
+ output="${branch#refs/heads/}"
+}
+
+# Commit msg for an action commit:
+# Don't use RUN here as it will pollute commit message
+get-commit-message() {
+ local commit="none"
+ if git:rev-exists "$upstream_head_commit"; then
+ commit=$(git rev-parse --short "$upstream_head_commit")
+ fi
+
+ local args=() debug_wanted=false
+ if $all_wanted; then
+ args+=("$subdir")
+ fi
+ args+=(${commit_msg_args[@]})
+
+ # Find the specific git-subrepo code used:
+ local command_remote='???'
+ local command_commit='???'
+ get-command-info
+
+ local merged="none"
+ if git:rev-exists "$subrepo_commit_ref"; then
+ merged=$(git rev-parse --short "$subrepo_commit_ref")
+ fi
+
+ local is_merge=""
+ if [[ $command != push ]]; then
+ if git:is_merge_commit "$subrepo_commit_ref"; then
+ is_merge=" (merge)"
+ fi
+ fi
+
+ # TODO: Consider output for push!
+
+ # Format subrepo commit message:
+ cat <<...
+git subrepo $command$is_merge ${args[@]}
+
+subrepo:
+ subdir: "$subdir"
+ merged: "$merged"
+upstream:
+ origin: "$subrepo_remote"
+ branch: "$subrepo_branch"
+ commit: "$commit"
+git-subrepo:
+ version: "$VERSION"
+ origin: "$command_remote"
+ commit: "$command_commit"
+...
+}
+
+# Get location and version info about the git-subrepo command itself. This
+# info goes into commit messages, so we can find out exactly how the commits
+# were done.
+get-command-info() {
+ local bin="$0"
+ if [[ $bin =~ / ]]; then
+ local lib="$(dirname "$bin")"
+ # XXX Makefile needs to install these symlinks:
+ # If `git-subrepo` was system-installed (`make install`):
+ if [[ -e $lib/git-subrepo.d/upstream ]] &&
+ [[ -e $lib/git-subrepo.d/commit ]]; then
+ command_remote=$(readlink "$lib/git-subrepo.d/upstream")
+ command_commit=$(readlink "$lib/git-subrepo.d/commit")
+ elif [[ $lib =~ / ]]; then
+ lib="$(dirname "$lib")"
+ if [[ -d $lib/.git ]]; then
+ local remote="$(
+ GIT_DIR=$lib/.git git remote -v |
+ grep '^origin' |
+ head -n1 |
+ cut -f2 |
+ cut -d ' ' -f1
+ )"
+ if [[ -n $remote ]]; then
+ command_remote="$remote"
+ else
+ local remote="$(
+ GIT_DIR=$lib/.git git remote -v |
+ head -n1 |
+ cut -f2 |
+ cut -d ' ' -f1
+ )"
+ if [[ -n $remote ]]; then
+ command_remote="$remote"
+ fi
+ fi
+ local commit="$(GIT_DIR="$lib/.git" git rev-parse --short HEAD)"
+ if [[ -n $commit ]]; then
+ command_commit="$commit"
+ fi
+ fi
+ fi
+ fi
+}
+
+#------------------------------------------------------------------------------
+# Instructional errors:
+#------------------------------------------------------------------------------
+
+error-join() {
+ cat <<...
+
+You will need to finish the $command by hand. A new working tree has been
+created at $worktree so that you can resolve the conflicts
+shown in the output above.
+
+This is the common conflict resolution workflow:
+
+ 1. cd $worktree
+ 2. Resolve the conflicts (see "git status").
+ 3. "git add" the resolved files.
+...
+
+ if [[ "$join_method" == "rebase" ]]; then
+ cat <<...
+ 4. git rebase --continue
+...
+ else
+ cat <<...
+ 4. git commit
+...
+ fi
+
+ cat <<...
+ 5. If there are more conflicts, restart at step 2.
+ 6. cd $start_pwd
+...
+ local branch_name="${branch:=subrepo/$subdir}"
+ if [[ "$command" == "push" ]]; then
+ cat <<...
+ 7. git subrepo push $subdir $branch_name
+...
+ else
+ cat <<...
+ 7. git subrepo commit $subdir
+...
+ fi
+
+ if [[ "$command" == "pull" && "$join_method" == "rebase" ]]; then
+ cat <<...
+
+After you have performed the steps above you can push your local changes
+without repeating the rebase by:
+ 1. git subrepo push $subdir $branch_name
+
+...
+ fi
+
+cat <<...
+See "git help $join_method" for details.
+
+Alternatively, you can abort the $command and reset back to where you started:
+
+ 1. git subrepo clean $subdir
+
+See "git help subrepo" for more help.
+
+...
+}
+
+#------------------------------------------------------------------------------
+# Git command wrappers:
+#------------------------------------------------------------------------------
+
+git:branch-exists() {
+ git:rev-exists "refs/heads/$1"
+}
+
+git:rev-exists() {
+ git rev-list "$1" -1 &> /dev/null
+}
+
+git:ref-exists() {
+ test -n "$(git for-each-ref "$1")"
+}
+
+git:get-head-branch-name() {
+ output=
+ local name="$(git symbolic-ref --short --quiet HEAD)"
+ [[ $name == HEAD ]] && return
+ output="$name"
+}
+
+git:get-head-branch-commit() {
+ output="$(git rev-parse HEAD)"
+}
+
+git:commit-in-rev-list() {
+ local commit="$1"
+ local list_head="$2"
+ git rev-list "$list_head" | grep -q "^$commit"
+}
+
+git:make-ref() {
+ local ref_name="$1"
+ local commit="$(git rev-parse "$2")"
+ RUN git update-ref "$ref_name" "$commit"
+}
+
+git:is_merge_commit() {
+ local commit="$1"
+ git show --summary "$commit" | grep -q ^Merge:
+}
+
+git:create-worktree() {
+ local branch="$1"
+ worktree="$GIT_TMP/$branch"
+ RUN git worktree add "$worktree" "$branch"
+}
+
+git:remove-worktree() {
+ o "Remove worktree: $worktree"
+ if [[ -d "$worktree" ]]; then
+ o "Check worktree for unsaved changes"
+ cd "$worktree"
+ assert-working-copy-is-clean
+ cd "$start_pwd"
+
+ o "Clean up worktree $worktree"
+ rm -rf "$worktree"
+ RUN git worktree prune
+ fi
+}
+
+git:delete-branch() {
+ local branch="$1"
+ o "Deleting old '$branch' branch."
+ # Remove worktree first, otherwise you can't delete the branch
+ git:remove-worktree
+ FAIL=false RUN git branch -D "$branch"
+}
+
+
+#------------------------------------------------------------------------------
+# Low level sugar commands:
+#------------------------------------------------------------------------------
+
+# Smart command runner:
+RUN() {
+ $debug_wanted && $SAY && say '>>>' $*
+ if $EXEC; then
+ "$@"
+ return $?
+ fi
+
+ OK=true
+ set +e
+ local rc=
+ local out=
+ if $debug_wanted && $TTY && interactive; then
+ "$@"
+ else
+ if $OUT; then
+ out="$("$@" 2>/dev/null)"
+ else
+ out="$("$@" 2>&1)"
+ fi
+ fi
+ rc=$?
+ set -e
+
+ if [[ $rc -ne 0 ]]; then
+ OK=false
+ $FAIL && error "Command failed: '$*'.\n$out"
+ fi
+ output="$out"
+}
+
+
+interactive() {
+ if [[ -t 0 && -t 1 ]]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+# Call a function with indent increased:
+CALL() {
+ local INDENT=" $INDENT"
+ "$@" || true
+}
+
+# Print verbose steps for commands with steps:
+o() {
+ if $verbose_wanted; then
+ echo "$INDENT* $@"
+ fi
+}
+
+# Print unless quiet mode:
+say() {
+ $quiet_wanted || echo "$@"
+}
+
+# Print to stderr:
+err() {
+ echo "$@" >&2
+}
+
+# Check if OK:
+OK() {
+ $OK
+}
+
+# Nicely report common error messages:
+usage-error() {
+ local msg="git-subrepo: $1" usage=
+ if [[ $GIT_SUBREPO_TEST_ERRORS != true ]]; then
+ source "${SOURCE_DIR}/git-subrepo.d/help-functions.bash"
+ if can "help:$command"; then
+ msg=$'\n'"$msg"$'\n'"$("help:$command")"$'\n'
+ fi
+ fi
+ echo "$msg" >&2
+ exit 1
+}
+
+# Nicely report common error messages:
+error() {
+ local msg="git-subrepo: $1" usage=
+ echo -e "$msg" >&2
+ exit 1
+}
+
+# Start at the end:
+[[ $BASH_SOURCE != "$0" ]] || main "$@"
+
+# Local Variables:
+# tab-width: 2
+# sh-indentation: 2
+# sh-basic-offset: 2
+# End:
+# vim: set ft=sh sw=2 lisp:
diff --git a/dot_mailcap b/dot_mailcap
new file mode 100644
index 0000000..908d198
--- /dev/null
+++ b/dot_mailcap
@@ -0,0 +1,7 @@
+text/html; mutt_bgrun firefox %s; nametemplate=%s.html
+text/html; w3m -T text/html -cols 80 -dump %s; nametemplate=%s.html; copiousoutput
+application/pdf; mutt_bgrun evince %s; nametemplate=%s.pdf; test=test "$DISPLAY" != ""; description=Portable Document Format
+application/x-pdf; mupdf %s; nametemplate=%s.pdf; test=test "$DISPLAY" != ""; description=Portable Document Format
+application/x-gzpdf; evince %s; nametemplate=%s.pdf.gz; test=test "$DISPLAY" != ""; description=Portable Document Format
+application/x-bzpdf; evince %s; nametemplate=%s.pdf.bz2; test=test "$DISPLAY" != ""; description=Portable Document Format
+audio/mpeg; mplayer %s; description=MPEG Audio
diff --git a/dot_mailrc b/dot_mailrc
new file mode 100644
index 0000000..c445eae
--- /dev/null
+++ b/dot_mailrc
@@ -0,0 +1,8 @@
+set ask
+set crt
+set editheaders
+ignore message-id received date fcc status resent-date resent-message-id resent-from in-reply-to
+
+set from=rak@rak.ac
+
+set mailx-extra-rc=~/.s-nail.rc
diff --git a/dot_mutt/accounts.rc b/dot_mutt/accounts.rc
new file mode 100644
index 0000000..1deb74b
--- /dev/null
+++ b/dot_mutt/accounts.rc
@@ -0,0 +1,80 @@
+# vim: syntax=muttrc
+
+account-hook imaps://ryanakca@gmail.com@imap.gmail.com \
+ source ~/.mutt/accounts/ryanakca.gmail.com/main.rc
+
+account-hook imaps://ryan.kavanagh@mcgill.ca@outlook.office365.com \
+ source ~/.mutt/accounts/ryan.kavanagh.mcgill.ca/main.rc
+
+account-hook imaps://ryan.kavanagh@mail.mcgill.ca@outlook.office365.com \
+ source ~/.mutt/accounts/ryan.kavanagh.mail.mcgill.ca/main.rc
+
+account-hook imaps://9rak@queensu.ca@outlook.office365.com \
+ source ~/.mutt/accounts/9rak.queensu.ca/main.rc
+
+account-hook imaps://imap.rak.ac \
+ source ~/.mutt/accounts/rak.rak.ac/main.rc
+
+account-hook imaps://mail.cs.mcgill.ca \
+ source ~/.mutt/accounts/ryank.mail.cs.mcgill.ca/main.rc
+
+account-hook imaps://rkavanag@alumni.cmu.edu@imap.gmail.com \
+ source ~/.mutt/accounts/rkavanag.alumni.cmu.edu/main.rc
+
+macro compose <F2> '<enter-command>set folder="imaps://ryanakca@gmail.com@imap.gmail.com"<enter>\
+<edit-fcc><kill-line><enter>\
+<enter-command>set sendmail="sendmail -oem -oi"<enter>\
+<edit-from><kill-line>Ryan Kavanagh <ryanakca@ubuntu.com><enter>' \
+"Send mail from Ubuntu account"
+
+macro compose <Esc><F2> '<enter-command>set folder="imaps://ryanakca@gmail.com@imap.gmail.com"<enter>\
+<edit-fcc><kill-line><enter>\
+<enter-command>set sendmail="sendmail -oem -oi"<enter>\
+<edit-from><kill-line>Ryan Kavanagh <ryanakca@kubuntu.org><enter>' \
+"Send mail from Kubuntu account"
+
+macro compose <F3> '<enter-command>set folder="imaps://rkavanag@alumni.cmu.edu@imap.gmail.com"<enter>\
+<edit-fcc><kill-line><enter>\
+<enter-command>set sendmail="sendmail -oem -oi"<enter>\
+<edit-from><kill-line>Ryan Kavanagh <rkavanag@alumni.cmu.edu><enter>' \
+"Send mail from CMU Alumni account"
+
+macro compose <Esc><F3> '<enter-command>set folder="imaps://rkavanag@alumni.cmu.edu@imap.gmail.com"<enter>\
+<edit-fcc><kill-line><enter>\
+<enter-command>set sendmail="sendmail -oem -oi"<enter>\
+<edit-from><kill-line>Ryan Kavanagh <rkavanagh@cs.cmu.edu><enter>' \
+"Send mail from CMU SCS account"
+
+macro compose <F4> '<enter-command>set folder="imaps://outlook.office365.com"<enter>\
+<edit-fcc><kill-line>=Sent Items<enter>\
+<edit-from><kill-line>Ryan Kavanagh <ryan.kavanagh@queensu.ca><enter>' \
+"Send mail from QueensU"
+
+macro compose <Esc><F4> '<enter-command>set folder="imaps://ryanakca@gmail.com@imap.gmail.com"<enter>\
+<edit-fcc><kill-line><enter>\
+<enter-command>set sendmail="sendmail -oem -oi"<enter>\
+<edit-from><kill-line>Ryan Kavanagh <ryan@cs.queensu.ca><enter>' \
+"Send mail from cs.queensu.ca"
+
+macro compose <F5> '<enter-command>set folder="imaps://imap.rak.ac/"<enter>\
+<edit-fcc><kill-line>=Sent<enter>\
+<enter-command>set sendmail="sendmail -oem -oi"<enter>\
+<edit-from><kill-line>Ryan Kavanagh <rak@debian.org><enter>' \
+"Send mail from Debian account"
+
+macro compose <Esc><F5> '<enter-command>set folder="imaps://imap.rak.ac/"<enter>\
+<edit-fcc><kill-line>=Sent<enter>\
+<enter-command>set sendmail="sendmail -oem -oi"<enter>\
+<edit-from><kill-line>Ryan Kavanagh <rak@rak.ac><enter>' \
+"Send mail from rak.ac"
+
+macro compose <F6> '<enter-command>set folder="imaps://mail.cs.mcgill.ca/"<enter>\
+<edit-fcc><kill-line>=INBOX.Sent<enter>\
+<enter-command>set sendmail="sendmail -oem -oi"<enter>\
+<edit-from><kill-line>Ryan Kavanagh <rkavanagh@cs.mcgill.ca><enter>' \
+"Send mail from McGill SOCS account"
+
+macro compose <Esc><F6> '<enter-command>set folder="imaps://ryan.kavanagh@mcgill.ca@outlook.office365.com"<enter>\
+<edit-fcc><kill-line><enter>\
+<edit-from><kill-line>Ryan Kavanagh <ryan.kavanagh@mcgill.ca><enter>' \
+"Send mail from McGill Staff account"
diff --git a/dot_mutt/accounts/9rak.queensu.ca/folders.rc b/dot_mutt/accounts/9rak.queensu.ca/folders.rc
new file mode 100644
index 0000000..2b552ff
--- /dev/null
+++ b/dot_mutt/accounts/9rak.queensu.ca/folders.rc
@@ -0,0 +1,5 @@
+# vim: syntax=muttrc
+
+set mbox = '+Read'
+set postponed = '+Drafts'
+set record = '+Sent Items'
diff --git a/dot_mutt/accounts/9rak.queensu.ca/format.rc b/dot_mutt/accounts/9rak.queensu.ca/format.rc
new file mode 100644
index 0000000..4ab31f0
--- /dev/null
+++ b/dot_mutt/accounts/9rak.queensu.ca/format.rc
@@ -0,0 +1,5 @@
+# vim: syntax=muttrc
+
+set pager_format = '-%Z-QUEENSU: %C/%m: %-20.20n %s%* -- (%P)'
+set compose_format = '-- QUEENSU: Compose [Approx. msg size: %l Atts: %a]%>-'
+set status_format = '-%r-QUEENSU: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---'
diff --git a/dot_mutt/accounts/9rak.queensu.ca/main.rc b/dot_mutt/accounts/9rak.queensu.ca/main.rc
new file mode 100644
index 0000000..0e81120
--- /dev/null
+++ b/dot_mutt/accounts/9rak.queensu.ca/main.rc
@@ -0,0 +1,12 @@
+# vim: syntax=muttrc
+
+cd ~/.mutt/accounts/9rak.queensu.ca
+
+set folder = 'imaps://9rak@queensu.ca@outlook.office365.com'
+
+source folders.rc
+source read.rc
+source send.rc
+source format.rc
+
+cd
diff --git a/dot_mutt/accounts/9rak.queensu.ca/private_read.rc.tmpl b/dot_mutt/accounts/9rak.queensu.ca/private_read.rc.tmpl
new file mode 100644
index 0000000..cc734ff
--- /dev/null
+++ b/dot_mutt/accounts/9rak.queensu.ca/private_read.rc.tmpl
@@ -0,0 +1,8 @@
+# vim: syntax=neomuttrc
+
+set imap_authenticators = 'xoauth2'
+set imap_oauth_refresh_command = '~/bin/mutt_oauth2.py --client-id="08162f7c-0fd2-4200-a84a-f25a4db0b584" --client-secret="TxRBilcHdC6WGBee]fs?QR:SJ8nI[g82" --encryption-pipe="cat" --decryption-pipe="cat" ~/.mutt/accounts/9rak.queensu.ca/xoauth2-token'
+set imap_passive = 'no'
+set imap_user = '9rak@queensu.ca'
+
+unset imap_pass
diff --git a/dot_mutt/accounts/9rak.queensu.ca/send.rc b/dot_mutt/accounts/9rak.queensu.ca/send.rc
new file mode 100644
index 0000000..af4f9c5
--- /dev/null
+++ b/dot_mutt/accounts/9rak.queensu.ca/send.rc
@@ -0,0 +1,10 @@
+# vim: syntax=muttrc
+
+set copy = yes
+set from = 'Ryan Kavanagh <ryan.kavanagh@queensu.ca>'
+set smtp_authenticators = 'xoauth2'
+set smtp_oauth_refresh_command = '~/bin/mutt_oauth2.py --client-id="08162f7c-0fd2-4200-a84a-f25a4db0b584" --client-secret="TxRBilcHdC6WGBee]fs?QR:SJ8nI[g82" --encryption-pipe="cat" --decryption-pipe="cat" ~/.mutt/accounts/9rak.queensu.ca/xoauth2-token'
+set smtp_url = 'smtp://9rak@queensu.ca@smtp.office365.com:587/'
+
+unset sendmail
+unset smtp_pass
diff --git a/dot_mutt/accounts/rak.rak.ac/encrypted_savehooks.rc.asc b/dot_mutt/accounts/rak.rak.ac/encrypted_savehooks.rc.asc
new file mode 100644
index 0000000..f310573
--- /dev/null
+++ b/dot_mutt/accounts/rak.rak.ac/encrypted_savehooks.rc.asc
@@ -0,0 +1,48 @@
+-----BEGIN PGP MESSAGE-----
+
+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
+=AZJ1
+-----END PGP MESSAGE-----
diff --git a/dot_mutt/accounts/rak.rak.ac/folders.rc b/dot_mutt/accounts/rak.rak.ac/folders.rc
new file mode 100644
index 0000000..334dd3f
--- /dev/null
+++ b/dot_mutt/accounts/rak.rak.ac/folders.rc
@@ -0,0 +1,5 @@
+# vim: syntax=muttrc
+
+set mbox = '=RAK'
+set postponed = '=Drafts'
+set record = '=Sent'
diff --git a/dot_mutt/accounts/rak.rak.ac/format.rc b/dot_mutt/accounts/rak.rak.ac/format.rc
new file mode 100644
index 0000000..c27e52a
--- /dev/null
+++ b/dot_mutt/accounts/rak.rak.ac/format.rc
@@ -0,0 +1,5 @@
+# vim: syntax=muttrc
+
+set pager_format = '-%Z-RAK.AC: %C/%m: %-20.20n %s%* -- (%P)'
+set compose_format = '-- RAK.AC: Compose [Approx. msg size: %l Atts: %a]%>-'
+set status_format = '-%r-RAK.AC: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---'
diff --git a/dot_mutt/accounts/rak.rak.ac/main.rc b/dot_mutt/accounts/rak.rak.ac/main.rc
new file mode 100644
index 0000000..2c1b109
--- /dev/null
+++ b/dot_mutt/accounts/rak.rak.ac/main.rc
@@ -0,0 +1,13 @@
+# vim: syntax=muttrc
+
+cd ~/.mutt/accounts/rak.rak.ac
+
+set folder = 'imaps://imap.rak.ac/'
+
+source folders.rc
+source read.rc
+source send.rc
+source format.rc
+source savehooks.rc
+
+cd
diff --git a/dot_mutt/accounts/rak.rak.ac/private_read.rc.tmpl b/dot_mutt/accounts/rak.rak.ac/private_read.rc.tmpl
new file mode 100644
index 0000000..6e061ff
--- /dev/null
+++ b/dot_mutt/accounts/rak.rak.ac/private_read.rc.tmpl
@@ -0,0 +1,7 @@
+# vim: syntax=muttrc
+
+set imap_delim_chars = '/'
+{{- if .password.rakac }}
+set imap_pass = '{{ .password.rakac }}'
+{{- end }}
+set imap_user = 'rak'
diff --git a/dot_mutt/accounts/rak.rak.ac/send.rc b/dot_mutt/accounts/rak.rak.ac/send.rc
new file mode 100644
index 0000000..b8d61e1
--- /dev/null
+++ b/dot_mutt/accounts/rak.rak.ac/send.rc
@@ -0,0 +1,8 @@
+# vim: syntax=muttrc
+
+set copy = yes
+set from = 'Ryan Kavanagh <rak@rak.ac>'
+set sendmail = 'sendmail -oem -oi'
+
+unset smtp_pass
+unset smtp_url
diff --git a/dot_mutt/accounts/rkavanag.alumni.cmu.edu/encrypted_private_alias.rc.asc b/dot_mutt/accounts/rkavanag.alumni.cmu.edu/encrypted_private_alias.rc.asc
new file mode 100644
index 0000000..c16c4f7
--- /dev/null
+++ b/dot_mutt/accounts/rkavanag.alumni.cmu.edu/encrypted_private_alias.rc.asc
@@ -0,0 +1,113 @@
+-----BEGIN PGP MESSAGE-----
+
+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
+mULSPY0ohlsPCK8vRCRdUKR5
+=czBL
+-----END PGP MESSAGE-----
diff --git a/dot_mutt/accounts/rkavanag.alumni.cmu.edu/folders.rc b/dot_mutt/accounts/rkavanag.alumni.cmu.edu/folders.rc
new file mode 100644
index 0000000..6e8a041
--- /dev/null
+++ b/dot_mutt/accounts/rkavanag.alumni.cmu.edu/folders.rc
@@ -0,0 +1,4 @@
+# vim: syntax=muttrc
+
+set mbox = '=Read'
+set record = '+[Gmail]/Sent Mail'
diff --git a/dot_mutt/accounts/rkavanag.alumni.cmu.edu/format.rc b/dot_mutt/accounts/rkavanag.alumni.cmu.edu/format.rc
new file mode 100644
index 0000000..1ef6580
--- /dev/null
+++ b/dot_mutt/accounts/rkavanag.alumni.cmu.edu/format.rc
@@ -0,0 +1,5 @@
+# vim: syntax=muttrc
+
+set pager_format = '-%Z-CMU: %C/%m: %-20.20n %s%* -- (%P)'
+set compose_format = '-- CMU: Compose [Approx. msg size: %l Atts: %a]%>-'
+set status_format = '-%r-CMU: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---'
diff --git a/dot_mutt/accounts/rkavanag.alumni.cmu.edu/main.rc b/dot_mutt/accounts/rkavanag.alumni.cmu.edu/main.rc
new file mode 100644
index 0000000..2360d6c
--- /dev/null
+++ b/dot_mutt/accounts/rkavanag.alumni.cmu.edu/main.rc
@@ -0,0 +1,12 @@
+# vim: syntax=muttrc
+
+cd ~/.mutt/accounts/rkavanag.alumni.cmu.edu
+
+set folder = 'imaps://rkavanag@alumni.cmu.edu@imap.gmail.com'
+
+source folders.rc
+source read.rc
+source send.rc
+source format.rc
+
+cd
diff --git a/dot_mutt/accounts/rkavanag.alumni.cmu.edu/private_read.rc.tmpl b/dot_mutt/accounts/rkavanag.alumni.cmu.edu/private_read.rc.tmpl
new file mode 100644
index 0000000..16febff
--- /dev/null
+++ b/dot_mutt/accounts/rkavanag.alumni.cmu.edu/private_read.rc.tmpl
@@ -0,0 +1,8 @@
+# vim: syntax=muttrc
+
+set imap_keepalive = 60
+{{- if .password.cmu }}
+set imap_pass = '{{ .password.cmu }}'
+{{- end }}
+set imap_passive = 'no'
+set imap_user = 'rkavanag@alumni.cmu.edu'
diff --git a/dot_mutt/accounts/rkavanag.alumni.cmu.edu/send.rc b/dot_mutt/accounts/rkavanag.alumni.cmu.edu/send.rc
new file mode 100644
index 0000000..46640c2
--- /dev/null
+++ b/dot_mutt/accounts/rkavanag.alumni.cmu.edu/send.rc
@@ -0,0 +1,8 @@
+# vim: syntax=muttrc
+
+set copy = no
+set from = 'Ryan Kavanagh <rkavanagh@cs.cmu.edu>'
+set sendmail = 'sendmail -oem -oi'
+
+unset smtp_pass
+unset smtp_url
diff --git a/dot_mutt/accounts/ryan.kavanagh.mail.mcgill.ca/main.rc b/dot_mutt/accounts/ryan.kavanagh.mail.mcgill.ca/main.rc
new file mode 100644
index 0000000..053a327
--- /dev/null
+++ b/dot_mutt/accounts/ryan.kavanagh.mail.mcgill.ca/main.rc
@@ -0,0 +1,24 @@
+# vim: syntax=muttrc
+
+set imap_user = 'ryan.kavanagh@mail.mcgill.ca'
+set imap_login = 'ryan.kavanagh@mail.mcgill.ca'
+set imap_authenticators = 'xoauth2'
+set imap_oauth_refresh_command = '~/bin/mutt_oauth2.py ~/.mutt/xoauth2-mail.mcgill.ca-token'
+
+set smtp_url = 'smtp://ryan.kavanagh@mail.mcgill.ca@smtp.office365.com:587/'
+set smtp_authenticators = 'xoauth2'
+set smtp_oauth_refresh_command = '~/bin/mutt_oauth2.py ~/.mutt/xoauth2-mail.mcgill.ca-token'
+unset smtp_pass
+set from = 'Ryan Kavanagh <ryan.kavanagh@mail.mcgill.ca>'
+
+set folder = 'imaps://ryan.kavanagh@mail.mcgill.ca@outlook.office365.com'
+set record = '=Sent Items'
+set copy = 'no'
+set postponed = '=Drafts'
+set spoolfile = '=Inbox'
+set imap_passive = 'no'
+set mbox = '=Archive'
+
+set pager_format = '-%Z-MAIL.MCGILL.CA: %C/%m: %-20.20n %s%* -- (%P)'
+set compose_format = '-- MAIL.MCGILL.CA: Compose [Approx. msg size: %l Atts: %a]%>-'
+set status_format = '-%r-MAIL.MCGILL.CA: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---'"
diff --git a/dot_mutt/accounts/ryan.kavanagh.mcgill.ca/main.rc b/dot_mutt/accounts/ryan.kavanagh.mcgill.ca/main.rc
new file mode 100644
index 0000000..cc70e66
--- /dev/null
+++ b/dot_mutt/accounts/ryan.kavanagh.mcgill.ca/main.rc
@@ -0,0 +1,24 @@
+# vim: syntax=muttrc
+
+set imap_authenticators = 'xoauth2'
+set imap_login = 'ryan.kavanagh@mcgill.ca'
+set imap_oauth_refresh_command = '~/bin/mutt_oauth2.py ~/.mutt/xoauth2-mcgill.ca-token'
+set imap_passive = 'no'
+set imap_user = 'ryan.kavanagh@mcgill.ca'
+
+set smtp_url = 'smtp://ryan.kavanagh@mcgill.ca@smtp.office365.com:587/'
+set smtp_authenticators = 'xoauth2'
+set smtp_oauth_refresh_command = '~/bin/mutt_oauth2.py ~/.mutt/xoauth2-mcgill.ca-token'
+unset smtp_pass
+unset sendmail
+set from = 'Ryan Kavanagh <ryan.kavanagh@mcgill.ca>'
+
+set folder = 'imaps://ryan.kavanagh@mcgill.ca@outlook.office365.com'
+set record = '=Sent Items'
+set copy = 'no'
+set postponed = '=Drafts'
+set mbox = '=Archive'
+
+set pager_format = '-%Z-MCGILL.CA: %C/%m: %-20.20n %s%* -- (%P)'
+set compose_format = '-- MCGILL.CA: Compose [Approx. msg size: %l Atts: %a]%>-'
+set status_format = '-%r-MCGILL.CA: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---'
diff --git a/dot_mutt/accounts/ryanakca.gmail.com/encrypted_private_savehooks.rc.asc b/dot_mutt/accounts/ryanakca.gmail.com/encrypted_private_savehooks.rc.asc
new file mode 100644
index 0000000..10b596c
--- /dev/null
+++ b/dot_mutt/accounts/ryanakca.gmail.com/encrypted_private_savehooks.rc.asc
@@ -0,0 +1,43 @@
+-----BEGIN PGP MESSAGE-----
+
+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
+IQWF++jjzVnTkjaSIZxqF4YO
+=T30Y
+-----END PGP MESSAGE-----
diff --git a/dot_mutt/accounts/ryanakca.gmail.com/folders.rc b/dot_mutt/accounts/ryanakca.gmail.com/folders.rc
new file mode 100644
index 0000000..60c24f2
--- /dev/null
+++ b/dot_mutt/accounts/ryanakca.gmail.com/folders.rc
@@ -0,0 +1,8 @@
+# vim: syntax=muttrc
+
+set folder = 'imaps://ryanakca@gmail.com@imap.gmail.com'
+
+set postponed = '=[Google Mail]/Drafts'
+set record = '=[Google Mail]/Sent Mail'
+
+unset mbox
diff --git a/dot_mutt/accounts/ryanakca.gmail.com/format.rc b/dot_mutt/accounts/ryanakca.gmail.com/format.rc
new file mode 100644
index 0000000..1af2c3e
--- /dev/null
+++ b/dot_mutt/accounts/ryanakca.gmail.com/format.rc
@@ -0,0 +1,5 @@
+# vim: syntax=muttrc
+
+set pager_format = '-%Z-GMAIL: %C/%m: %-20.20n %s%* -- (%P)'
+set compose_format = '-- GMAIL: Compose [Approx. msg size: %l Atts: %a]%>-'
+set status_format = '-%r-GMAIL: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---'
diff --git a/dot_mutt/accounts/ryanakca.gmail.com/main.rc b/dot_mutt/accounts/ryanakca.gmail.com/main.rc
new file mode 100644
index 0000000..7876e09
--- /dev/null
+++ b/dot_mutt/accounts/ryanakca.gmail.com/main.rc
@@ -0,0 +1,11 @@
+# vim: syntax=muttrc
+
+cd ~/.mutt/accounts/ryanakca.gmail.com
+
+source folders.rc
+source read.rc
+source send.rc
+source format.rc
+source savehooks.rc
+
+cd
diff --git a/dot_mutt/accounts/ryanakca.gmail.com/private_read.rc.tmpl b/dot_mutt/accounts/ryanakca.gmail.com/private_read.rc.tmpl
new file mode 100644
index 0000000..837c2d5
--- /dev/null
+++ b/dot_mutt/accounts/ryanakca.gmail.com/private_read.rc.tmpl
@@ -0,0 +1,7 @@
+# vim: syntax=muttrc
+
+{{- if .password.gmail }}
+set imap_pass = '{{ .password.gmail }}'
+{{- end }}
+set imap_passive = 'no'
+set imap_user = 'ryanakca@gmail.com'
diff --git a/dot_mutt/accounts/ryanakca.gmail.com/send.rc b/dot_mutt/accounts/ryanakca.gmail.com/send.rc
new file mode 100644
index 0000000..6df9cc1
--- /dev/null
+++ b/dot_mutt/accounts/ryanakca.gmail.com/send.rc
@@ -0,0 +1,8 @@
+# vim: syntax=muttrc
+
+set copy = no
+set from = 'Ryan Kavanagh <ryanakca@gmail.com>'
+set sendmail = 'sendmail -oem -oi'
+
+unset smtp_pass
+unset smtp_url
diff --git a/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/encrypted_alias.rc.asc b/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/encrypted_alias.rc.asc
new file mode 100644
index 0000000..21fc93b
--- /dev/null
+++ b/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/encrypted_alias.rc.asc
@@ -0,0 +1,40 @@
+-----BEGIN PGP MESSAGE-----
+
+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
+oEGlBXpwP1XcBb3o
+=hW88
+-----END PGP MESSAGE-----
diff --git a/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/folders.rc b/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/folders.rc
new file mode 100644
index 0000000..5645937
--- /dev/null
+++ b/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/folders.rc
@@ -0,0 +1,5 @@
+# vim: syntax=muttrc
+
+set mbox = '+INBOX.Read'
+set postponed = '+INBOX.Drafts'
+set record = '+INBOX.Sent'
diff --git a/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/format.rc b/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/format.rc
new file mode 100644
index 0000000..a4de8d1
--- /dev/null
+++ b/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/format.rc
@@ -0,0 +1,5 @@
+# vim: syntax=muttrc
+
+set pager_format = '-%Z-CS.MCGILL.CA: %C/%m: %-20.20n %s%* -- (%P)'
+set compose_format = '-- CS.MCGILL.CA: Compose [Approx. msg size: %l Atts: %a]%>-'
+set status_format = '-%r-CS.MCGILL.CA: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---
diff --git a/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/main.rc b/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/main.rc
new file mode 100644
index 0000000..e5619eb
--- /dev/null
+++ b/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/main.rc
@@ -0,0 +1,12 @@
+# vim: syntax=muttrc
+
+cd ~/.mutt/accounts/ryank.mail.cs.mcgill.ca
+
+set folder = 'imaps://mail.cs.mcgill.ca/'
+
+source folders.rc
+source read.rc
+source send.rc
+source format.rc
+
+cd
diff --git a/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/private_read.rc.tmpl b/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/private_read.rc.tmpl
new file mode 100644
index 0000000..569c016
--- /dev/null
+++ b/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/private_read.rc.tmpl
@@ -0,0 +1,7 @@
+# vim: syntax=muttrc
+
+set imap_delim_chars = '.'
+{{- if .password.socs }}
+set imap_pass = '{{ .password.socs }}'
+{{- end }}
+set imap_user = 'ryank'
diff --git a/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/send.rc b/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/send.rc
new file mode 100644
index 0000000..fc5b2da
--- /dev/null
+++ b/dot_mutt/accounts/ryank.mail.cs.mcgill.ca/send.rc
@@ -0,0 +1,8 @@
+# vim: syntax=muttrc
+
+set copy = yes
+set from = 'Ryan Kavanagh <rkavanagh@cs.mcgill.ca>'
+set sendmail = 'sendmail -oem -oi'
+
+unset smtp_pass
+unset smtp_url
diff --git a/dot_mutt/color.rc b/dot_mutt/color.rc
new file mode 100644
index 0000000..94e6817
--- /dev/null
+++ b/dot_mutt/color.rc
@@ -0,0 +1,114 @@
+# Score coloring
+# We put this first since we want it overridden if required by the colors
+# below.
+
+# Various smilies and the like
+color body brightwhite default "<[Gg]>" # <g>
+color body brightwhite default "<[Bb][Gg]>" # <bg>
+color body brightwhite default " [;:]-*[})>{(<|]" # :-) etc...
+# *bold*
+color body brightblue default "(^|[[:space:][:punct:]])\\*[^*]+\\*([[:space:][:punct:]]|$)"
+mono body bold "(^|[[:space:][:punct:]])\\*[^*]+\\*([[:space:][:punct:]]|$)"
+# _underline_
+color body brightblue default "(^|[[:space:][:punct:]])_[^_]+_([[:space:][:punct:]]|$)"
+mono body underline "(^|[[:space:][:punct:]])_[^_]+_([[:space:][:punct:]]|$)"
+# /italic/ (Sometimes gets directory names)
+color body brightblue default "(^|[[:space:][:punct:]])/[^/]+/([[:space:][:punct:]]|$)"
+mono body underline "(^|[[:space:][:punct:]])/[^/]+/([[:space:][:punct:]]|$)"
+
+# gruvbox dark (contrast dark):
+
+# bg0 = 234
+# bg1 = 237
+# bg2 = 239
+# bg3 = 241
+# bg4 = 243
+#
+# gray = 245
+#
+# fg0 = 229
+# fg1 = 223
+# fg2 = 250
+# fg3 = 248
+# fg4 = 246
+#
+# red = 167
+# green = 142
+# yellow = 214
+# blue = 109
+# purple = 175
+# aqua = 108
+# orange = 208
+
+
+# See http://www.mutt.org/doc/manual/#color
+
+color attachment color109 default
+color bold color229 default
+color error color167 default
+color hdrdefault color246 default
+color indicator color223 color237
+color markers color243 default
+color normal color223 default
+color quoted color250 default
+color quoted1 color108 default
+color quoted2 color250 default
+color quoted3 color108 default
+color quoted4 color250 default
+color quoted5 color108 default
+color search color234 color208
+color signature color108 default
+color status color234 color250
+color tilde color243 default
+color tree color142 default
+color underline color223 color239
+
+color sidebar_divider color250 default
+color sidebar_new color142 default
+
+# Note that the the last matching pattern is the
+# one that gets used, so order matters
+color index color142 default ~N # new messages
+color index color108 default ~O # old messages
+color index color109 default ~P # message is from you (consults $alternates)
+color index color175 default ~Q # messages which have been replied to
+color index color167 default ~= # duplicate
+color index color234 color214 ~F # flagged messages
+color index color234 color223 ~T # tagged messages
+color index color234 color167 ~D # deleted messages
+
+color header color214 default "^(To|From):"
+color header color142 default "^Subject:"
+color header color108 default "^X-Spam-Status:"
+color header color108 default "^Received:"
+color header color108 default "^List-Id:"
+
+# BSD's regex has RE_DUP_MAX set to 255.
+color body color142 default "[a-z]{3,255}://[-a-zA-Z0-9@:%._\\+~#=/?&,]+"
+color body color142 default "[a-zA-Z]([-a-zA-Z0-9_]+\\.){2,255}[-a-zA-Z0-9_]{2,255}"
+color body color208 default "[-a-z_0-9.%$]+@[-a-z_0-9.]+\\.[-a-z][-a-z]+"
+color body color208 default "mailto:[-a-z_0-9.]+@[-a-z_0-9.]+"
+color body color234 color214 "[;:]-*[)>(<lt;|]"
+color body color229 default "\\*[- A-Za-z]+\\*"
+
+color body color214 default "^-.*PGP.*-*"
+color body color142 default "^gpg: Good signature from"
+color body color167 default "^gpg: Can't.*$"
+color body color214 default "^gpg: WARNING:.*$"
+color body color167 default "^gpg: BAD signature from"
+color body color167 default "^gpg: Note: This key has expired!"
+color body color214 default "^gpg: There is no indication that the signature belongs to the owner."
+color body color214 default "^gpg: can't handle these multiple signatures"
+color body color214 default "^gpg: signature verification suppressed"
+color body color214 default "^gpg: invalid node with packet of type"
+
+color body color142 default "^Good signature from:"
+color body color167 default "^.?BAD.? signature from:"
+color body color142 default "^Verification successful"
+color body color167 default "^Verification [^s][^[:space:]]*$"
+
+color compose header color223 default
+color compose security_encrypt color175 default
+color compose security_sign color109 default
+color compose security_both color142 default
+color compose security_none color208 default
diff --git a/dot_mutt/encrypted_private_alias.rc.asc b/dot_mutt/encrypted_private_alias.rc.asc
new file mode 100644
index 0000000..d9b43dd
--- /dev/null
+++ b/dot_mutt/encrypted_private_alias.rc.asc
@@ -0,0 +1,75 @@
+-----BEGIN PGP MESSAGE-----
+
+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
+JJ51
+=yK33
+-----END PGP MESSAGE-----
diff --git a/dot_mutt/gpg.rc b/dot_mutt/gpg.rc
new file mode 100644
index 0000000..16c3534
--- /dev/null
+++ b/dot_mutt/gpg.rc
@@ -0,0 +1,11 @@
+set crypt_use_gpgme = yes
+set crypt_autosign = yes
+set crypt_replyencrypt = yes
+set crypt_replysign = yes
+set crypt_replysignencrypted = yes
+set crypt_verify_sig = yes
+
+set pgp_sign_as=0x4E469519ED677734268FBD958F7BF8FC4A11C97A
+set pgp_default_key=0x4E469519ED677734268FBD958F7BF8FC4A11C97A
+set pgp_self_encrypt = yes
+set pgp_use_gpg_agent = yes
diff --git a/dot_mutt/mailinglists.rc b/dot_mutt/mailinglists.rc
new file mode 100644
index 0000000..a05be8f
--- /dev/null
+++ b/dot_mutt/mailinglists.rc
@@ -0,0 +1,6 @@
+subscribe -group ml.cmu .*@lists.andrew.cmu.edu (cs-phd-students|pop-group|concertrg)@cs.cmu.edu
+subscribe -group ml.debian .*@.*lists.debian.org
+subscribe -group ml.openbsd (bugs|misc)@opensmtpd.org
+subscribe -group ml.opensmtpd misc@opensmtpd.org
+subscribe -group ml.ubuntu .*@.*lists.ubuntu.com
+subscribe -group ml.mcgill (complogic)@cs.mcgill.ca
diff --git a/dot_mutt/news.rc b/dot_mutt/news.rc
new file mode 100644
index 0000000..2b2d57b
--- /dev/null
+++ b/dot_mutt/news.rc
@@ -0,0 +1,71 @@
+# Example NeoMutt config file for the nntp feature.
+
+# --------------------------------------------------------------------------
+# VARIABLES - shown with their default values
+# --------------------------------------------------------------------------
+set ask_follow_up = no
+set ask_x_comment_to = no
+set catchup_newsgroup = ask-yes
+set followup_to_poster = ask-yes
+set group_index_format = '%4C %M%N %5s %-45.45f %d'
+set inews = ''
+set mime_subject = yes
+set newsgroups_charset = utf-8
+set newsrc = '~/.newsrc'
+set news_cache_dir = '~/.mutt/cache/'
+set news_server = 'news.club.cc.cmu.edu'
+set nntp_authenticators = ''
+set nntp_context = 1000
+set nntp_listgroup = yes
+set nntp_load_description = yes
+set nntp_pass = ''
+set nntp_poll = 60
+set nntp_user = ''
+set post_moderated = ask-yes
+set save_unsubscribed = no
+set show_new_news = yes
+set show_only_unread = no
+set x_comment_to = no
+# --------------------------------------------------------------------------
+# FUNCTIONS - shown with an example mapping
+# --------------------------------------------------------------------------
+# mark all articles in newsgroup as read
+bind browser,index y catchup
+# open a different newsgroup
+bind index i change-newsgroup
+# edit the Followup-To field
+bind compose o edit-followup-to
+# edit the newsgroups list
+bind compose N edit-newsgroups
+# edit the X-Comment-To field
+bind compose x edit-x-comment-to
+# followup to newsgroup
+bind attach,index,pager F followup-message
+# post message to newsgroup
+bind index,pager P post-message
+# load list of all newsgroups from NNTP server
+bind browser g reload-active
+# subscribe to current mbox (IMAP/NNTP only)
+bind browser s subscribe
+# subscribe to newsgroups matching a pattern
+bind browser S subscribe-pattern
+# mark all articles in newsgroup as unread
+bind browser Y uncatchup
+# unsubscribe from current mbox (IMAP/NNTP only)
+bind browser u unsubscribe
+# unsubscribe from newsgroups matching a pattern
+bind browser U unsubscribe-pattern
+# open a different newsgroup in read only mode
+bind index,pager \ei change-newsgroup-readonly
+# forward to newsgroup
+bind attach,index,pager \eF forward-to-group
+# get all children of the current message
+# bind index ??? get-children
+# get parent of the current message
+bind index \eG get-parent
+# reconstruct thread containing current message
+# bind index ??? reconstruct-thread
+# get message with Message-Id
+bind index \CG get-message
+# --------------------------------------------------------------------------
+# vim: syntax=neomuttrc
diff --git a/dot_mutt/private_cache/bodies/.keep b/dot_mutt/private_cache/bodies/.keep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dot_mutt/private_cache/bodies/.keep
diff --git a/dot_mutt/score.rc b/dot_mutt/score.rc
new file mode 100644
index 0000000..6cdceb4
--- /dev/null
+++ b/dot_mutt/score.rc
@@ -0,0 +1,24 @@
+uncolor index *
+unscore *
+source ~/.mutt/color.rc
+# Set directly to me
+score "~p" 8
+# from me
+score "~P" 8
+# I replied to
+score "~Q" 10
+# GPG signed
+score "~g" 4
+# GPG encrypted
+score "~G" 4
+# Flagged
+score "~F" 5
+# Known ML
+score "~l" 2
+# Add a point to messages less than 80,000 bytes
+score "~z 0-80000" 1
+# From EG
+score "~f MUTT_20_SCORE" 20
+score "~f MUTT_10_SCORE" 10
+# Unread
+score "~U" 2
diff --git a/dot_muttrc.tmpl b/dot_muttrc.tmpl
new file mode 100644
index 0000000..0552516
--- /dev/null
+++ b/dot_muttrc.tmpl
@@ -0,0 +1,163 @@
+set realname = 'Ryan Kavanagh' # default: ''
+set use_from = yes
+set use_envelope_from = yes
+set reverse_name = yes
+set reverse_realname = no
+alternates "ryanakca@(gmail\\.com|kubuntu\\.org|ubuntu\\.com)|(ryan\\.kavanagh|9rak)@queensu\\.ca|rak@(debian\\.org|rak\\.ac|ryanak\\.ca)|rkavanag@((andrew|alumni|cs)\\.cmu\\.edu)|rkavanagh@cs\\.cmu\\.edu|ryan@cs\\.queensu\\.ca|ryank@cs\\.mcgill\.ca|ryan\\.kavanagh@(mail\\.)?mcgill\\.ca|rak@sdf\\.org"
+
+set crypt_autosign = yes # default: no
+set crypt_replysign = yes # default: no
+set crypt_replysignencrypted = yes # default: no
+
+set editor="vim"
+
+set pager_context = 1
+
+set send_charset="utf-8"
+
+set imap_check_subscribed = yes # default: no
+set imap_list_subscribed = yes # default: no
+
+# Don't continue to next email when reaching end of current
+set pager_stop = yes
+
+# Display HTML mail only if there's no text/plain
+alternative_order text/plain text/html *
+auto_view text/html
+set display_filter="~/bin/lbdb-fetchaddr-wrapper"
+
+set timeout=15
+set mail_check=60
+
+set move = no
+
+set header_cache="~/.mutt/cache/headers"
+set message_cachedir="~/.mutt/cache/bodies"
+
+set edit_headers = yes
+
+# Sane subject format when forwarding:
+set forward_format = "Fwd: %s"
+# Mime forwarding
+set mime_forward = ask-yes
+
+#set arrow_cursor
+#noop pager G
+bind index G imap-fetch-mail
+bind index ( next-unread-mailbox
+bind index * next-unread
+bind pager i exit
+
+# To keep the macro .n from binding just .
+bind index . noop
+macro index .n "<tag-pattern>~N|~O<enter><tag-prefix-cond><tag-prefix><clear-flag>N<tag-prefix><clear-flag>O<untag-pattern>~T<enter>" "Catchup all new messages"
+
+my_hdr OpenPGP: id=4E469519ED677734268FBD958F7BF8FC4A11C97A\; url=https://rak.ac/contact/4E469519ED677734268FBD958F7BF8FC4A11C97A.asc\; preference=sign
+
+set sort=threads
+set sort_aux=date
+set move=no
+set mark_old=no
+ignore * # ignore all headers except for ...
+unignore date from to cc bcc subject
+hdr_order date from to cc bcc subject
+# MessageNo Mo Day (To if sent by me, from if sent to me) List [Flags (Hidden Messages/line count) Subject
+set index_format="%4C %{%m%d} %-16.16F [%Z] %?M?(#%03M)&(%4l)? %s"
+# Narrow / wide versions.
+macro index \cxn '<enter-command>set index_format="%4C %{%m%d} %-16.16F [%Z] %?M?(#%03M)&(%4l)? %s"<enter>'
+macro index \cxw '<enter-command>set index_format="%4C %{%y%m%d} %-16.16F %-15.15B [%Z] %?M?(#%03M)&(%4l)? %s"<enter>'
+
+set print_command="muttprint -2"
+
+set mark_old=yes
+
+set query_command="lbdbq %s"
+# set query_command = "abook --mutt-query '%s'"
+# macro generic,index,pager \ca "<shell-escape>abook<return>" "launch abook"
+# macro index,pager A "<pipe-message>abook --add-email-quiet<return>"
+set reverse_alias = yes
+set alias_file = ~/.mutt/alias.rc
+
+set ispell="aspell -e -c"
+
+# set up the sidebar, default not visible
+set mail_check_stats=yes
+set sidebar_visible = no
+set sidebar_short_path = yes
+set sidebar_folder_indent = yes
+set sidebar_width = 25
+set sidebar_format = "%B%?F? [%F]?%* %?N?%N?"
+set sidebar_divider_char = "┃"
+set sidebar_delim_chars = "/."
+set sidebar_non_empty_mailbox_only = yes
+set sidebar_sort_method = alpha
+# which # mailboxes to list in the sidebar
+# mailboxes =inbox =ml
+# color of folders with new mail
+
+# ctrl-n, ctrl-p to select next, prev folder #
+# ctrl-o to open selected folder
+bind index,pager \CP sidebar-prev
+bind index,pager \CN sidebar-next
+bind index,pager \CO sidebar-open
+
+# Remap bounce-message function to "B"
+bind index B bounce-message
+
+macro index b '<enter-command>toggle sidebar_visible<enter><refresh>'
+macro pager b '<enter-command>toggle sidebar_visible<enter><redraw-screen>'
+
+macro index \cb |urlscan\n
+macro pager \cb |urlscan\n
+macro index I 'c=INBOX<enter>'
+macro index x 'c=QueensU.INBOX<enter>'
+
+bind editor <space> noop
+
+unignore X-Label:
+
+set mbox_type=mbox
+
+# In case it's unset
+set sendmail="sendmail -oem -oi"
+
+set fcc_before_send=yes
+
+# For the -f option to work properly with account-hooks, it looks like I need
+# to unset the folder option
+unset folder
+# alias.rc before accounts.rc
+source ~/.mutt/alias.rc
+source ~/.mutt/accounts.rc
+source ~/.mutt/mailinglists.rc
+source ~/.mutt/score.rc
+source ~/.mutt/color.rc
+source ~/.mutt/savehooks.rc
+source ~/.mutt/gpg.rc
+source ~/.mutt/news.rc
+
+{{- if hasPrefix .chezmoi.homeDir "/sdf" }}
+set from = 'Ryan Kavanagh <rak@sdf.org>'
+{{- end }}
+
+set tmpdir='~/.mutt/tmp'
+
+macro index <F7> \
+ "<enter-command>unset wait_key<enter><shell-escape>~/bin/mutt-fetchbug --prompt search<enter><change-folder-readonly>~/.cache/mutt_btsresults<enter><enter-command>set wait_key<enter>" \
+ "fetch bug(s) (using bts show)"
+macro index <F8> \
+ "<enter-command>unset wait_key<enter><shell-escape>~/bin/mutt-notmuch --prompt search<enter><change-folder-readonly>~/.cache/mutt_results<enter>" \
+ "search mail (using notmuch)"
+macro index <F9> \
+ "<enter-command>unset wait_key<enter><pipe-message>~/bin/mutt-notmuch thread<enter><change-folder-readonly>~/.cache/mutt_results<enter><enter-command>set wait_key<enter>" \
+ "search and reconstruct owning thread (using notmuch)"
+
+macro index <Esc>N \
+ "<limit>~(~N|~O)<enter>" \
+ "Show only threads with new/old messages"
+
+macro index <Esc>A \
+ "<limit>all<enter>" \
+ "Show all messages (remove limit)"
+
+# vim: set ft=neomuttrc:
diff --git a/dot_quiltrc-dpkg b/dot_quiltrc-dpkg
new file mode 100644
index 0000000..1207660
--- /dev/null
+++ b/dot_quiltrc-dpkg
@@ -0,0 +1,11 @@
+d=. ; while [ ! -d $d/debian -a `readlink -e $d` != / ]; do d=$d/..; done
+if [ -d $d/debian ] && [ -z $QUILT_PATCHES ]; then
+ # if in Debian packaging tree with unset $QUILT_PATCHES
+ QUILT_PATCHES="debian/patches"
+ QUILT_PATCH_OPTS="--reject-format=unified"
+ QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto"
+ QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
+ QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33: â†
+ diff_ctx=35:diff_cctx=33"
+ if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi
+fi
diff --git a/dot_reportbugrc b/dot_reportbugrc
new file mode 100644
index 0000000..0772b6a
--- /dev/null
+++ b/dot_reportbugrc
@@ -0,0 +1,20 @@
+# reportbug preferences file
+# character encoding: UTF-8
+# Version of reportbug this preferences file was written by
+reportbug_version "4.12.6"
+# default operating mode: one of: novice, standard, advanced, expert
+mode expert
+# default user interface
+ui urwid
+# name and email setting (if non-default)
+realname "Ryan Kavanagh"
+email "rak@debian.org"
+# You can add other settings after this line. See
+# /etc/reportbug.conf for a full listing of options.
+keyid 4E469519ED677734268FBD958F7BF8FC4A11C97A
+sign gpg
+# Don't BCC me
+no-cc
+# But have debbugs notify me of the bug report once it has a number
+list-cc-me
+mutt
diff --git a/dot_s-nail.rc b/dot_s-nail.rc
new file mode 100644
index 0000000..1fe7ad6
--- /dev/null
+++ b/dot_s-nail.rc
@@ -0,0 +1,165 @@
+# vim: set commentstring=#%s:
+
+# This example assumes v15.0 compatibility mode
+set v15-compat
+
+# Request strict TLL transport layer security checks
+set tls-verify=strict
+
+# Send mail in utf-8, unless the original poster used a different charset
+set sendcharsets=utf-8
+set reply-in-same-charset
+
+# When replying, do not merge From: and To: of the original message into To:.
+# Instead old From: -> new To:, old To: -> merge Cc:.
+set recipients-in-cc
+
+# Wait on the MTA for errors reported through exit status (including the
+# built-in SMTP one)!
+set sendwait=mta
+
+# Don't move read messages to MBOX
+set hold
+
+# cache imap
+set imap-cache=~/.cache/mailx
+
+# make sure less displays colours
+set PAGER="less -FXQR"
+
+# always use the pager when needed
+set crt
+
+# set colour display
+set colour-pager
+
+# set colours
+if terminal && "$features" =% +colour
+ colour 256 view-header fg=brown "date,from,to,cc,bcc"
+ colour 256 view-header fg=green "subject"
+ colour 256 view-msginfo fg=white,bg=blue
+
+ colour 256 sum-dotmark ft=bold,fg=cyan dot
+ colour 256 sum-header fg=magenta older
+ colour 256 sum-thread bg=red dot
+ colour 256 sum-thread fg=cyan
+endif
+
+# Default to a threaded display
+set autosort=thread
+# Don't automatically collapse threads
+unset autocollapse
+
+# automatically launch visual editor when typing messages
+set editalong=v
+
+# Only include the selected header fields when typing messages
+headerpick type retain from_ date from to cc bcc subject \
+ message-id mail-followup-to reply-to
+
+# keep names when replying to messages
+set fullnames
+
+# Add my signature
+# Requires me to manually add the leading '-- '
+define ocs_signature {
+ read version
+ echo ''
+ echo '-- '
+ echo '~< ~/.signature'
+}
+set on-compose-splice=ocs_signature
+
+# When replying, quote message
+set quote
+# and prefix them with "> "
+set indentprefix="> "
+# and wrap lines to 72 characters
+set quote-fold=72
+# with the header
+set quote-inject-head="On %d, %f wrote:"
+
+# Be nice with mailing lists.
+set followup-to followup-to-honour=ask-yes reply-to-honour=ask-yes
+
+# use the system sendmail for sending mail
+set mta=sendmail
+
+# and lookup passwords in netrc
+set netrc-lookup
+
+#############
+# ACCOUNTS #
+############
+
+set alternates="ryanakca@gmail.com,rak@debian.org,ryanakca@ubuntu.com,ryanakca@kubuntu.org,rak@rak.ac,rak@ryanak.ca,rkavanag@andrew.cmu.edu,rkavanag@alumni.cmu.edu,rkavanag@cs.cmu.edu,rkavanagh@cs.cmu.edu,ryan@cs.queensu.ca"
+
+define gmail {
+ set from="Ryan Kavanagh <ryanakca@gmail.com>"
+ set folder=imaps://ryanakca%40gmail.com@imap.gmail.com/
+ unset MBOX
+ set record=+"[Google Mail]/Sent Items"
+}
+
+define queensu {
+ set from="Ryan Kavanagh <ryan.kavanagh@queensu.ca>"
+ set folder=imaps://9rak%40queensu.ca@pod51018.outlook.com/
+ set MBOX=+Read
+ set record=+"Sent Items"
+}
+
+define rak {
+ set from="Ryan Kavanagh <rak@rak.ac>"
+ set folder=imaps://rak@imap.rak.ac/
+ set MBOX=+RAK
+ set record=+Sent
+}
+
+define cmu {
+ set from="Ryan Kavanagh <rkavanagh@cs.cmu.edu>"
+ set folder=imaps://rkavanag%40alumni.cmu.edu@imap.gmail.com/
+ set MBOX=+Read
+ set record=+"[Gmail]/Sent Mail"
+}
+
+define socs {
+ set from="Ryan Kavanagh <rkavanagh@cs.mcgill.ca>"
+ set folder=imaps://mail.cs.mcgill.ca/
+ set mbox=+INBOX.Read
+ set record=+INBOX.Sent
+}
+
+define sdf {
+ set from="Ryan Kavanagh <rak@SDF.ORG>"
+ set folder=imaps://mx.sdf.org/
+ set mbox=+INBOX.Read
+ set record=+INBOX.Sent
+}
+
+# rak is the default account
+call rak
+set inbox=+INBOX
+
+account g {
+ call gmail
+}
+
+account q {
+ call queensu
+}
+
+account r {
+ call rak
+}
+
+account c {
+ call cmu
+}
+
+account s {
+ call socs
+}
+
+account sdf {
+ call sdf
+}
diff --git a/dot_sbuildrc b/dot_sbuildrc
new file mode 100644
index 0000000..1d259f6
--- /dev/null
+++ b/dot_sbuildrc
@@ -0,0 +1,124 @@
+# example for ~/.sbuildrc. (Also see /etc/sbuild/sbuild.conf.) -*- Perl -*-
+#
+# Default settings are commented out.
+# Additional options found in /etc/sbuild/sbuild.conf may be
+# overridden here.
+
+
+##
+## DPKG-BUILDPACKAGE OPTIONS
+##
+
+# Name to use as override in .changes files for the Maintainer: field
+# Defaults to the DEBEMAIL environment variable, if set, or else the
+# Maintainer: field will not be overridden unless set here.
+#$maintainer_name='Francesco Paolo Lovergine <frankie@debian.org>';
+
+# Name to use as override in .changes file for the Changed-By: field.
+#$uploader_name='Francesco Paolo Lovergine <frankie@debian.org>';
+
+# Key ID to use in .changes for the current upload.
+# It overrides both $maintainer_name and $uploader_name
+#$key_id='Francesco Paolo Lovergine <frankie@debian.org>';
+
+# PGP-related option to pass to dpkg-buildpackage. Usually neither .dsc
+# nor .changes files shall be signed automatically.
+#$pgp_options = ['-us', '-uc'];
+
+# By default, do not build a source package (binary only build).
+# Set to 1 to force creation of a source package, but note that
+# this is inappropriate for binary NMUs, where the option will
+# always be disabled.
+#$build_source = 0;
+
+# By default, the -s option only includes the .orig.tar.gz when needed
+# (i.e. when the Debian revision is 0 or 1). By setting this option
+# to 1, the .orig.tar.gz will always be included when -s is used.
+# This is equivalent to --force-orig-source.
+#$force_orig_source = 0;
+
+# PATH to set when running dpkg-buildpackage.
+#$path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin:/usr/games";
+
+# This command is run with the dpkg-buildpackage command line passed to it
+# (in the chroot, if doing a chrooted build). It is used by the sparc buildd
+# (which is sparc64) to call the wrapper script that sets the environment to
+# sparc (32-bit). It could be used for other build environment setup scripts
+#
+#$build_env_cmnd = "";
+
+$build_arch_all = 1;
+
+$run_lintian = 1;
+$lintian_opts = ['-i', '-I', '-v', '-E'];
+
+##
+## SBUILD BEHAVIOUR
+##
+
+# Default distribution. By default, no distribution is defined, and
+# the user must specify it with the -d option. However, a default may
+# be configured here if desired. Users must take care not to upload
+# to the wrong distribution when this option is set, for example
+# experimental packages will be built for upload to unstable when this
+# is not what is required.
+$distribution = 'unstable';
+
+# Default chroot (defaults to distribution[-arch][-sbuild])
+$chroot = 'chroot:unstable-amd64';
+
+# When to purge the build directory afterwards; possible values are "never",
+# "successful", and "always"
+#$purge_build_directory="successful";
+# We use LVM snapshots, no need
+$purge_build_directory="never";
+
+# sbuild behaviour; possible values are "user" (exit status reports
+# build failures) and "buildd" (exit status does not report build
+# failures) for use in a buildd setup.
+#$sbuild_mode = "user";
+
+
+##
+## TIMEOUTS
+##
+
+# Time to wait for a source dependency lock. The default is 1 minute.
+#$srcdep_lock_wait = 1; # 1 minute
+
+# Time (in minutes) of inactivity after which a build is terminated. Activity
+# is measured by output to the log file.
+#$stalled_pkg_timeout = 150;
+
+# Some packages may exceed the general timeout (e.g. redirecting output to
+# a file) and need a different timeout. Below are some examples.
+#%individual_stalled_pkg_timeout = (smalleiffel => 300,
+# jade => 300,
+# atlas => 300,
+# glibc => 1000,
+# 'gcc-3.3' => 300,
+# kwave => 600);
+#
+
+##
+## FILE AND DIRECTORY LOCATIONS
+##
+
+# This option is deprecated. Directory for chroot symlinks and sbuild
+# logs. Defaults to the current directory if unspecified. It is used
+# as the location of chroot symlinks (obsolete) and for current build
+# log symlinks and some build logs. There is no default; if unset, it
+# defaults to the current working directory. $HOME/build is another
+# common configuration.
+#$build_dir = undef;
+
+# Directory for writing build logs to
+$log_dir = "$HOME/tmp/sbuild/logs";
+
+# Directory for writing build statistics to
+$stats_dir = "$HOME/tmp/sbuild/stats";
+
+
+# don't remove this, Perl needs it:
+1;
+
diff --git a/dot_screenlayout/executable_asteria-home.sh b/dot_screenlayout/executable_asteria-home.sh
new file mode 100644
index 0000000..a463ffd
--- /dev/null
+++ b/dot_screenlayout/executable_asteria-home.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+xrandr --output eDP --mode 1920x1080 --pos 0x1080 --rotate normal --output HDMI-A-0 --off --output DisplayPort-0 --off --output DisplayPort-1 --primary --mode 1920x1080 --pos 0x0 --rotate normal
diff --git a/dot_screenlayout/executable_asteria-solo.sh b/dot_screenlayout/executable_asteria-solo.sh
new file mode 100644
index 0000000..7158440
--- /dev/null
+++ b/dot_screenlayout/executable_asteria-solo.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+xrandr --output eDP --primary --mode 1920x1080 --pos 0x0 --rotate normal --output HDMI-A-0 --off --output DisplayPort-0 --off --output DisplayPort-1 --off
diff --git a/dot_screenlayout/executable_zeta.rak.ac-home.sh b/dot_screenlayout/executable_zeta.rak.ac-home.sh
new file mode 100755
index 0000000..b4c76e9
--- /dev/null
+++ b/dot_screenlayout/executable_zeta.rak.ac-home.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+xrandr --output eDP-1 --mode 1920x1080 --pos 0x1080 --rotate normal --output DP-1 --off --output HDMI-1 --off --output DP-2 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output HDMI-2 --off
diff --git a/dot_screenlayout/executable_zeta.rak.ac-solo.sh b/dot_screenlayout/executable_zeta.rak.ac-solo.sh
new file mode 100755
index 0000000..18b58ed
--- /dev/null
+++ b/dot_screenlayout/executable_zeta.rak.ac-solo.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+xrandr --output HDMI-2 --off --output HDMI-1 --off --output DP-1 --off --output eDP-1 --mode 1920x1080 --pos 0x0 --rotate normal --output DP-2 --off
diff --git a/dot_screenlayout/executable_zeta.rak.ac-work.sh b/dot_screenlayout/executable_zeta.rak.ac-work.sh
new file mode 100644
index 0000000..8666d94
--- /dev/null
+++ b/dot_screenlayout/executable_zeta.rak.ac-work.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+xrandr --output eDP1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output DP1 --off --output DP2 --off --output HDMI1 --off --output HDMI2 --mode 1920x1200 --pos 1920x0 --rotate normal --output VIRTUAL1 --off
diff --git a/dot_screenlayout/private_executable_asteria-work.sh b/dot_screenlayout/private_executable_asteria-work.sh
new file mode 100644
index 0000000..042252d
--- /dev/null
+++ b/dot_screenlayout/private_executable_asteria-work.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+xrandr --output eDP --primary --mode 1920x1080 --pos 0x0 --rotate normal --output HDMI-A-0 --off --output DisplayPort-0 --off --output DisplayPort-1 --mode 1920x1200 --pos 1920x0 --rotate normal
diff --git a/dot_signature b/dot_signature
new file mode 100644
index 0000000..8ae035d
--- /dev/null
+++ b/dot_signature
@@ -0,0 +1,2 @@
+|)|/ Ryan Kavanagh | 4E46 9519 ED67 7734 268F
+|\|\ https://rak.ac | BD95 8F7B F8FC 4A11 C97A
diff --git a/dot_texmf/bibtex/bib/symlink_library.bib b/dot_texmf/bibtex/bib/symlink_library.bib
new file mode 100644
index 0000000..2fe6e7e
--- /dev/null
+++ b/dot_texmf/bibtex/bib/symlink_library.bib
@@ -0,0 +1 @@
+/home/rak/Documents/papers/library.bib
diff --git a/dot_texmf/web2c/updmap.cfg b/dot_texmf/web2c/updmap.cfg
new file mode 100644
index 0000000..4d45b0c
--- /dev/null
+++ b/dot_texmf/web2c/updmap.cfg
@@ -0,0 +1,2 @@
+Map MinionPro.map
+Map Brill.map
diff --git a/dot_tmux-mail.conf b/dot_tmux-mail.conf
new file mode 100644
index 0000000..f9be0bf
--- /dev/null
+++ b/dot_tmux-mail.conf
@@ -0,0 +1,26 @@
+source-file ~/.tmux.conf
+
+new-session -s mail -d -n mutt 'neomutt -f imaps://rkavanag%40alumni.cmu.edu@imap.gmail.com'
+split-window -c '~' 'neomutt -f imaps://imap.rak.ac'
+split-window -c '~' -h 'neomutt -f imaps://ryanakca@gmail.com@imap.gmail.com/'
+split-window -c '~' -h 'neomutt -f imaps://mail.cs.mcgill.ca'
+selectl -t mail tiled
+new-window -d -c '~' -n hades 'ssh hades.rak.ac'
+new-window -d -c '~' -n eos 'ssh eos.rak.ac'
+new-window -d -c '~' -n republic 'ssh republic'
+new-window -d -c '~' -n sdf 'ssh -t beastie.sdf.org /sdf/arpa/ns/r/rak/bin/tsdf'
+new-window -d -c '~' -n tt 'ssh -t tt bash -ic tt'
+new-window -d -c '~' -n grex 'ssh -t grex tmux new-session -A -s main'
+new-window -d -c '~' -n rtc 'ssh -t rtc'
+new-session -s mus -A -n ncmpcpp -c '~' 'ncmpcpp'
+select-window -t mail:mutt
+set-option -t mail:mutt remain-on-exit on
+set-option -t mail:hades remain-on-exit on
+set-option -t mail:eos remain-on-exit on
+set-option -t mail:republic remain-on-exit on
+set-option -t mail:sdf remain-on-exit on
+set-option -t mail:tt remain-on-exit on
+set-option -t mail:grex remain-on-exit on
+set-option -t mail:rtc remain-on-exit on
+set-option -t mus:ncmpcpp remain-on-exit on
+attach -t mail
diff --git a/dot_tmux.conf b/dot_tmux.conf
new file mode 100644
index 0000000..3daf5cb
--- /dev/null
+++ b/dot_tmux.conf
@@ -0,0 +1,66 @@
+setw -g automatic-rename
+set-option -g prefix C-t
+
+# screen like settings
+bind C-n next-window
+bind C-p previous-window
+bind C-d detach
+bind C-k confirm kill-window
+bind k confirm kill-window
+bind K confirm kill-server
+bind C-K confirm kill-server
+bind t send-prefix
+bind C-t send-prefix
+bind-key R respawn-pane
+
+# Enable the mouse
+set -g mouse on
+
+set -g set-titles on
+set -g base-index 0
+
+# Set window titles
+set-option -g set-titles on
+# [session:window-name host] command
+set-option -g set-titles-string '[#S:#I #H] #W'
+
+# Resize when possible
+setw -g aggressive-resize on
+
+# emacs key bindings
+set -g mode-keys emacs
+set -g status-keys emacs
+
+set -g renumber-windows on
+
+# active window colour in status
+# set -g window-status-current-bg white
+# set -g window-status-current-fg magenta
+# set -g window-status-bell-bg red
+# set -g window-status-bell-fg yellow
+
+# Powerline:
+set-option -g status on
+set-option -g status-interval 2
+set-option -g status-justify "centre"
+set-option -g status-left-length 100
+set-option -g status-right-length 100
+set-option -g status-bg colour235
+set-option -g status-fg colour254
+set-window-option -g status-left "[#S]"
+set-window-option -g window-status-current-format "#[fg=colour255, bg=colour27] #I ⯠#W #[fg=colour27, bg=colour235]"
+set-window-option -g status-right "\"#H\" %H:%M %d-%b"
+
+# Use 256 colours
+set -g default-terminal "screen-256color"
+
+# move tmux copy buffer into x clipboard
+bind C-y save-buffer ~/.tmux-buffer \; run "xsel -i -b <~/.tmux-buffer && rm ~/.tmux-buffer"
+#Copy CLIPBOARD to tmux paste buffer and paste tmux paste buffer
+bind C-v run "tmux set-buffer -- \"$(xsel -o -b)\"; tmux paste-buffer"
+
+bind C new-session
+
+# pane movement
+bind-key j command-prompt -p "join pane from:" "join-pane -s '%%'"
+bind-key s command-prompt -p "send pane to:" "join-pane -t '%%'"
diff --git a/dot_urxvt/ext/executable_font-size b/dot_urxvt/ext/executable_font-size
new file mode 100644
index 0000000..981da5c
--- /dev/null
+++ b/dot_urxvt/ext/executable_font-size
@@ -0,0 +1,486 @@
+#!/usr/bin/perl
+#
+# On-the-fly adjusting of the font size in urxvt
+#
+# Copyright (c) 2008 David O'Neill
+# 2012 Noah K. Tilton <noahktilton@gmail.com>
+# 2009-2012 Simon Lundström <simmel@soy.se>
+# 2012-2016 Jan Larres <jan@majutsushi.net>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# 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 OR COPYRIGHT HOLDERS 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.
+#
+# URL: https://github.com/majutsushi/urxvt-font-size
+#
+# Based on:
+# https://github.com/dave0/urxvt-font-size
+# https://github.com/noah/urxvt-font
+# https://github.com/simmel/urxvt-resize-font
+#
+# X11 fonts background:
+# http://keithp.com/~keithp/talks/xtc2001/paper/
+
+#:META:X_RESOURCE:%.step:interger:font size increase/decrease step
+
+=head1 NAME
+
+font-size - interactive font size setter
+
+=head1 USAGE
+
+Put the font-size script into $HOME/.urxvt/ext/ and add it to the list
+of enabled perl-extensions in ~/.Xresources:
+
+ URxvt.perl-ext-common: ...,font-size
+
+The extension automatically binds Ctrl++ to the 'increase' function,
+Ctrl+- to 'decrease', and Ctrl+0 to 'reset'. To use the other available functions
+or change the keys, add some keybindings of your own:
+
+ URxvt.keysym.C-Up: font-size:increase
+ URxvt.keysym.C-Down: font-size:decrease
+ URxvt.keysym.C-S-Up: font-size:incglobal
+ URxvt.keysym.C-S-Down: font-size:decglobal
+ URxvt.keysym.C-equal: font-size:reset
+ URxvt.keysym.C-slash: font-size:show
+
+Note that for urxvt versions older than 9.21 the resources have to look like this:
+
+ URxvt.keysym.C-Up: perl:font-size:increase
+ URxvt.keysym.C-Down: perl:font-size:decrease
+ URxvt.keysym.C-S-Up: perl:font-size:incglobal
+ URxvt.keysym.C-S-Down: perl:font-size:decglobal
+ URxvt.keysym.C-equal: perl:font-size:reset
+ URxvt.keysym.C-slash: perl:font-size:show
+
+Supported functions:
+
+=over 2
+
+=item * increase/decrease:
+
+ increase or decrease the font size of the current terminal.
+
+=item * incglobal/decglobal:
+
+ same as above and also adjust the X server values so all newly
+ started terminals will use the same fontsize.
+
+=item * incsave/decsave:
+
+ same as incglobal/decglobal and also modify the ~/.Xresources
+ file so the changed font sizes will persist over a restart of
+ the X server or a reboot.
+
+=item * reset:
+
+ reset the font size to the value of the resource when starting
+ the terminal.
+
+=item * show
+
+ show the current value of the 'font' resource in a popup.
+
+=back
+
+You can also change the step size that the script will use to increase
+the font size:
+
+ URxvt.font-size.step: 4
+
+The default step size is 1. This means that with this setting a
+size change sequence would be for example 8->12->16->20 instead of
+8->9->10->11->12 etc. Please note that many X11 fonts are only
+available in specific sizes, though, and odd sizes are often not
+available, resulting in an effective step size of 2 instead of 1
+in that case.
+=cut
+
+use strict;
+use warnings;
+
+my %escapecodes = (
+ "font" => 710,
+ "boldFont" => 711,
+ "italicFont" => 712,
+ "boldItalicFont" => 713
+);
+
+sub on_init {
+ my ($self) = @_;
+
+ $self->bind_action ("C-plus", "%:increase")
+ or warn "unable to register 'C-plus' as font-size increase hotkey\n";
+ $self->bind_action ("C-minus", "%:decrease")
+ or warn "unable to register 'C-minus' as font-size decrease hotkey\n";
+ $self->bind_action ("C-0", "%:reset")
+ or warn "unable to register 'C-0' as font-size reset hotkey\n";
+}
+
+sub on_start
+{
+ my ($self) = @_;
+
+ $self->{step} = $self->x_resource("%.step") || 1;
+
+ foreach my $type (qw(font boldFont italicFont boldItalicFont)) {
+ $self->{$type} = $self->x_resource($type) || "undef";
+ }
+}
+
+# Needed for backwards compatibility with < 9.21
+sub on_user_command
+{
+ my ($self, $cmd) = @_;
+
+ my $step = $self->{step};
+
+ if ($cmd eq "font-size:increase") {
+ fonts_change_size($self, $step, 0);
+ } elsif ($cmd eq "font-size:decrease") {
+ fonts_change_size($self, -$step, 0);
+ } elsif ($cmd eq "font-size:incglobal") {
+ fonts_change_size($self, $step, 1);
+ } elsif ($cmd eq "font-size:decglobal") {
+ fonts_change_size($self, -$step, 1);
+ } elsif ($cmd eq "font-size:incsave") {
+ fonts_change_size($self, $step, 2);
+ } elsif ($cmd eq "font-size:decsave") {
+ fonts_change_size($self, -$step, 2);
+ } elsif ($cmd eq "font-size:reset") {
+ fonts_reset($self);
+ } elsif ($cmd eq "font-size:show") {
+ fonts_show($self);
+ }
+}
+
+sub on_action
+{
+ my ($self, $action) = @_;
+
+ my $step = $self->{step};
+
+ if ($action eq "increase") {
+ fonts_change_size($self, $step, 0);
+ } elsif ($action eq "decrease") {
+ fonts_change_size($self, -$step, 0);
+ } elsif ($action eq "incglobal") {
+ fonts_change_size($self, $step, 1);
+ } elsif ($action eq "decglobal") {
+ fonts_change_size($self, -$step, 1);
+ } elsif ($action eq "incsave") {
+ fonts_change_size($self, $step, 2);
+ } elsif ($action eq "decsave") {
+ fonts_change_size($self, -$step, 2);
+ } elsif ($action eq "reset") {
+ fonts_reset($self);
+ } elsif ($action eq "show") {
+ fonts_show($self);
+ }
+}
+
+sub fonts_change_size
+{
+ my ($term, $delta, $save) = @_;
+
+ my @newfonts = ();
+
+ my $curres = $term->resource('font');
+ if (!$curres) {
+ $term->scr_add_lines("\r\nWarning: No font configured, trying a default.\r\nPlease set a font with the 'URxvt.font' resource.");
+ $curres = "fixed";
+ }
+ my @curfonts = split(/\s*,\s*/, $curres);
+
+ my $basefont = shift(@curfonts);
+ my ($newbasefont, $newbasedelta, $newbasesize) = handle_font($term, $basefont, $delta, 0, 0);
+ push @newfonts, $newbasefont;
+
+ # Only adjust other fonts if base font changed
+ if ($newbasefont ne $basefont) {
+ foreach my $font (@curfonts) {
+ my ($newfont, $newdelta, $newsize) = handle_font($term, $font, $delta, $newbasedelta, $newbasesize);
+ push @newfonts, $newfont;
+ }
+ my $newres = join(",", @newfonts);
+ font_apply_new($term, $newres, "font", $save);
+
+ handle_type($term, "boldFont", $delta, $newbasedelta, $newbasesize, $save);
+ handle_type($term, "italicFont", $delta, $newbasedelta, $newbasesize, $save);
+ handle_type($term, "boldItalicFont", $delta, $newbasedelta, $newbasesize, $save);
+ }
+
+ if ($save > 1) {
+ # write the new values back to the file
+ my $xresources = readlink $ENV{"HOME"} . "/.Xresources";
+ system("xrdb -edit " . $xresources);
+ }
+}
+
+sub fonts_reset
+{
+ my ($term) = @_;
+
+ foreach my $type (qw(font boldFont italicFont boldItalicFont)) {
+ my $initial = $term->{$type};
+ if ($initial ne "undef") {
+ font_apply_new($term, $initial, $type, 0);
+ }
+ }
+}
+
+sub fonts_show
+{
+ my ($term) = @_;
+
+ my $out = $term->resource('font');
+ $out =~ s/\s*,\s*/\n/g;
+
+ $term->{'font-size'}{'overlay'} = {
+ overlay => $term->overlay_simple(0, -1, $out),
+ timer => urxvt::timer->new->start(urxvt::NOW + 5)->cb(
+ sub {
+ delete $term->{'font-size'}{'overlay'};
+ }
+ ),
+ };
+}
+
+sub handle_type
+{
+ my ($term, $type, $delta, $basedelta, $basesize, $save) = @_;
+
+ my $curres = $term->resource($type);
+ if (!$curres) {
+ return;
+ }
+ my @curfonts = split(/\s*,\s*/, $curres);
+ my @newfonts = ();
+
+ foreach my $font (@curfonts) {
+ my ($newfont, $newdelta, $newsize) = handle_font($term, $font, $delta, $basedelta, $basesize);
+ push @newfonts, $newfont;
+ }
+
+ my $newres = join(",", @newfonts);
+ font_apply_new($term, $newres, $type, $save);
+}
+
+sub handle_font
+{
+ my ($term, $font, $delta, $basedelta, $basesize) = @_;
+
+ my $newfont;
+ my $newdelta;
+ my $newsize;
+ my $prefix = 0;
+
+ if ($font =~ /^\s*x:/) {
+ $font =~ s/^\s*x://;
+ $prefix = 1;
+ }
+ if ($font =~ /^\s*(\[.*\])?xft:/) {
+ ($newfont, $newdelta, $newsize) = font_change_size_xft($term, $font, $delta, $basedelta, $basesize);
+ } elsif ($font =~ /^\s*-/) {
+ ($newfont, $newdelta, $newsize) = font_change_size_xlfd($term, $font, $delta, $basedelta, $basesize);
+ } else {
+ # check whether the font is a valid alias and if yes resolve it to the
+ # actual font
+ my $lsfinfo = `xlsfonts -l $font 2>/dev/null`;
+
+ if ($lsfinfo eq "") {
+ # not a valid alias, ring the bell if it is the base font and just
+ # return the current font
+ if ($basesize == 0) {
+ $term->scr_bell;
+ }
+ return ($font, $basedelta, $basesize);
+ }
+
+ my $fontinfo = (split(/\n/, $lsfinfo))[-1];
+ my ($fontfull) = ($fontinfo =~ /\s+([-a-z0-9]+$)/);
+ ($newfont, $newdelta, $newsize) = font_change_size_xlfd($term, $fontfull, $delta, $basedelta, $basesize);
+ }
+
+ # $term->scr_add_lines("\r\nNew font is $newfont\n");
+ if ($prefix) {
+ $newfont = "x:$newfont";
+ }
+ return ($newfont, $newdelta, $newsize);
+}
+
+sub font_change_size_xft
+{
+ my ($term, $fontstring, $delta, $basedelta, $basesize) = @_;
+
+ my @pieces = split(/:/, $fontstring);
+ my @resized = ();
+ my $size = 0;
+ my $new_size = 0;
+
+ foreach my $piece (@pieces) {
+ if ($piece =~ /^(?:(?:pixel)?size=|[^=-]+-)(\d+(\.\d*)?)$/) {
+ $size = $1;
+
+ if ($basedelta != 0) {
+ $new_size = $size + $basedelta;
+ } else {
+ $new_size = $size + $delta;
+ }
+
+ $piece =~ s/(=|-)$size/$1$new_size/;
+ }
+ push @resized, $piece;
+ }
+
+ my $resized_str = join(":", @resized);
+
+ # don't make fonts too small
+ if ($new_size >= 6) {
+ return ($resized_str, $new_size - $size, $new_size);
+ } else {
+ if ($basesize == 0) {
+ $term->scr_bell;
+ }
+ return ($fontstring, 0, $size);
+ }
+}
+
+sub font_change_size_xlfd
+{
+ my ($term, $fontstring, $delta, $basedelta, $basesize) = @_;
+
+ #-xos4-terminus-medium-r-normal-*-12-*-*-*-*-*-*-1
+
+ my @fields = qw(foundry family weight slant setwidth style pixelSize pointSize Xresolution Yresolution spacing averageWidth registry encoding);
+
+ my %font;
+ $fontstring =~ s/^-//; # Strip leading - before split
+ @font{@fields} = split(/-/, $fontstring);
+
+ if ($font{pixelSize} eq '*') {
+ $term->scr_add_lines("\r\nWarning: Font size undefined, assuming 12.\r\nPlease set the 'URxvt.font' resource to a font with a concrete size.");
+ $font{pixelSize} = '12'
+ }
+ if ($font{registry} eq '*') {
+ $font{registry} ='iso8859';
+ }
+
+ # Blank out the size for the pattern
+ my %pattern = %font;
+ $pattern{foundry} = '*';
+ $pattern{setwidth} = '*';
+ $pattern{pixelSize} = '*';
+ $pattern{pointSize} = '*';
+ # if ($basesize != 0) {
+ # $pattern{Xresolution} = '*';
+ # $pattern{Yresolution} = '*';
+ # }
+ $pattern{averageWidth} = '*';
+ # make sure there are no empty fields
+ foreach my $field (@fields) {
+ $pattern{$field} = '*' unless defined($pattern{$field});
+ }
+ my $new_fontstring = '-' . join('-', @pattern{@fields});
+
+ my @candidates;
+ # $term->scr_add_lines("\r\nPattern is $new_fontstring\n");
+ open(FOO, "xlsfonts -fn '$new_fontstring' | sort -u |") or die $!;
+ while (<FOO>) {
+ chomp;
+ s/^-//; # Strip leading '-' before split
+ my @fontdata = split(/-/, $_);
+
+ push @candidates, [$fontdata[6], "-$_"];
+ # $term->scr_add_lines("\r\npossibly $fontdata[6] $_\n");
+ }
+ close(FOO);
+
+ if (!@candidates) {
+ die "No possible fonts!";
+ }
+
+ if ($basesize != 0) {
+ # sort by font size, descending
+ @candidates = sort {$b->[0] <=> $a->[0]} @candidates;
+
+ # font is not the base font, so find the largest font that is at most
+ # as large as the base font. If the largest possible font is smaller
+ # than the base font bail and hope that a 0-size font can be found at
+ # the end of the function
+ if ($candidates[0]->[0] > $basesize) {
+ foreach my $candidate (@candidates) {
+ if ($candidate->[0] <= $basesize) {
+ return ($candidate->[1], $candidate->[0] - $font{pixelSize}, $candidate->[0]);
+ }
+ }
+ }
+ } elsif ($delta > 0) {
+ # sort by font size, ascending
+ @candidates = sort {$a->[0] <=> $b->[0]} @candidates;
+
+ foreach my $candidate (@candidates) {
+ if ($candidate->[0] >= $font{pixelSize} + $delta) {
+ return ($candidate->[1], $candidate->[0] - $font{pixelSize}, $candidate->[0]);
+ }
+ }
+ } elsif ($delta < 0) {
+ # sort by font size, descending
+ @candidates = sort {$b->[0] <=> $a->[0]} @candidates;
+
+ foreach my $candidate (@candidates) {
+ if ($candidate->[0] <= $font{pixelSize} + $delta && $candidate->[0] != 0) {
+ return ($candidate->[1], $candidate->[0] - $font{pixelSize}, $candidate->[0]);
+ }
+ }
+ }
+
+ # no fitting font available, check whether a 0-size font can be used to
+ # fit the size of the base font
+ @candidates = sort {$a->[0] <=> $b->[0]} @candidates;
+ if ($basesize != 0 && $candidates[0]->[0] == 0) {
+ return ($candidates[0]->[1], $basedelta, $basesize);
+ } else {
+ # if there is absolutely no smaller/larger font that can be used
+ # return the current one, and beep if this is the base font
+ if ($basesize == 0) {
+ $term->scr_bell;
+ }
+ return ("-$fontstring", 0, $font{pixelSize});
+ }
+}
+
+sub font_apply_new
+{
+ my ($term, $newfont, $type, $save) = @_;
+
+ # $term->scr_add_lines("\r\nnew font is $newfont\n");
+
+ $term->cmd_parse("\033]" . $escapecodes{$type} . ";" . $newfont . "\033\\");
+
+ # load the xrdb db
+ # system("xrdb -load " . X_RESOURCES);
+
+ if ($save > 0) {
+ # merge the new values
+ open(XRDB_MERGE, "| xrdb -merge") || die "can't fork: $!";
+ local $SIG{PIPE} = sub { die "xrdb pipe broken" };
+ print XRDB_MERGE "URxvt." . $type . ": " . $newfont;
+ close(XRDB_MERGE) || die "bad xrdb: $! $?";
+ }
+}
diff --git a/dot_vf1-bookmarks.txt b/dot_vf1-bookmarks.txt
new file mode 100644
index 0000000..c7bd7bd
--- /dev/null
+++ b/dot_vf1-bookmarks.txt
@@ -0,0 +1,4 @@
+1rak /~rak/ republic.circumlunar.space 70
+1tomasino's moku-pona /moku-pona gopher.black 70
+1floodgap gopher.floodgap.com 70
+1gopher.black places /places gopher.black 70
diff --git a/dot_vf1rc b/dot_vf1rc
new file mode 100644
index 0000000..c98f839
--- /dev/null
+++ b/dot_vf1rc
@@ -0,0 +1,4 @@
+handler image/* display %s
+handler application/pdf open %s
+set color_menus True
+g gopher://rak.ac/
diff --git a/dot_vim/colors/brookstream.vim b/dot_vim/colors/brookstream.vim
new file mode 100644
index 0000000..ee907c6
--- /dev/null
+++ b/dot_vim/colors/brookstream.vim
@@ -0,0 +1,83 @@
+"--------------------------------------------------------------------
+" Name Of File: brookstream.vim.
+" Description: Gvim colorscheme, works best with version 6.1 GUI .
+" Maintainer: Peter Bäckström.
+" Creator: Peter Bäckström.
+" URL: http://www.brookstream.org (Swedish).
+" Credits: Inspiration from the darkdot scheme.
+" Last Change: Friday, April 13, 2003.
+" Installation: Drop this file in your $VIMRUNTIME/colors/ directory.
+"--------------------------------------------------------------------
+
+set background=dark
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+let g:colors_name="brookstream"
+
+"--------------------------------------------------------------------
+
+hi Normal gui=none guibg=#000000 guifg=#bbbbbb
+hi Cursor guibg=#44ff44 guifg=#000000
+hi Directory guifg=#44ffff
+hi DiffAdd guibg=#080808 guifg=#ffff00
+hi DiffDelete guibg=#080808 guifg=#444444
+hi DiffChange guibg=#080808 guifg=#ffffff
+hi DiffText guibg=#080808 guifg=#bb0000
+hi ErrorMsg guibg=#880000 guifg=#ffffff
+hi Folded guifg=#000088
+hi IncSearch guibg=#000000 guifg=#bbcccc
+hi LineNr guibg=#050505 guifg=#4682b4
+hi ModeMsg guifg=#ffffff
+hi MoreMsg guifg=#44ff44
+hi NonText guifg=#4444ff
+hi Question guifg=#ffff00
+hi SpecialKey guifg=#4444ff
+hi StatusLine gui=none guibg=#2f4f4f guifg=#ffffff
+hi StatusLineNC gui=none guibg=#bbbbbb guifg=#000000
+hi Title guifg=#ffffff
+hi Visual gui=none guibg=#bbbbbb guifg=#000000
+hi WarningMsg guifg=#ffff00
+
+" syntax highlighting groups ----------------------------------------
+
+hi Comment guifg=#696969
+hi Constant guifg=#00aaaa
+hi Identifier guifg=#00e5ee
+hi Statement guifg=#00ffff
+hi PreProc guifg=#8470ff
+hi Type guifg=#ffffff
+hi Special gui=none guifg=#87cefa
+hi Underlined gui=bold guifg=#4444ff
+hi Ignore guifg=#444444
+hi Error guibg=#000000 guifg=#bb0000
+hi Todo guibg=#aa0006 guifg=#fff300
+hi Operator gui=none guifg=#00bfff
+hi Function guifg=#1e90ff
+hi String gui=None guifg=#4682b4
+hi Boolean guifg=#9bcd9b
+
+"hi link Character Constant
+"hi link Number Constant
+"hi link Boolean Constant
+"hi link Float Number
+"hi link Conditional Statement
+"hi link Label Statement
+"hi link Keyword Statement
+"hi link Exception Statement
+"hi link Repeat Statement
+"hi link Include PreProc
+"hi link Define PreProc
+"hi link Macro PreProc
+"hi link PreCondit PreProc
+"hi link StorageClass Type
+"hi link Structure Type
+"hi link Typedef Type
+"hi link Tag Special
+"hi link Delimiter Special
+"hi link SpecialComment Special
+"hi link Debug Special
+"hi link FoldColumn Folded
+
+"- end of colorscheme -----------------------------------------------
diff --git a/dot_vim/plugin/gnupg.vim b/dot_vim/plugin/gnupg.vim
new file mode 100644
index 0000000..e2e7665
--- /dev/null
+++ b/dot_vim/plugin/gnupg.vim
@@ -0,0 +1,1226 @@
+" Name: gnupg.vim
+" Last Change: 2011 Nov 23
+" Maintainer: James McCoy <vega.james@gmail.com>
+" Original Author: Markus Braun <markus.braun@krawel.de>
+" Summary: Vim plugin for transparent editing of gpg encrypted files.
+" License: This program is free software; you can redistribute it and/or
+" modify it under the terms of the GNU General Public License
+" as published by the Free Software Foundation; either version
+" 2 of the License, or (at your option) any later version.
+" See http://www.gnu.org/copyleft/gpl-2.0.txt
+"
+" Section: Documentation {{{1
+"
+" Description: {{{2
+"
+" This script implements transparent editing of gpg encrypted files. The
+" filename must have a ".gpg", ".pgp" or ".asc" suffix. When opening such
+" a file the content is decrypted, when opening a new file the script will
+" ask for the recipients of the encrypted file. The file content will be
+" encrypted to all recipients before it is written. The script turns off
+" viminfo and swapfile to increase security.
+"
+" Installation: {{{2
+"
+" Copy the gnupg.vim file to the $HOME/.vim/plugin directory.
+" Refer to ':help add-plugin', ':help add-global-plugin' and ':help
+" runtimepath' for more details about Vim plugins.
+"
+" From "man 1 gpg-agent":
+"
+" ...
+" You should always add the following lines to your .bashrc or whatever
+" initialization file is used for all shell invocations:
+"
+" GPG_TTY=`tty`
+" export GPG_TTY
+"
+" It is important that this environment variable always reflects the outâ€
+" put of the tty command. For W32 systems this option is not required.
+" ...
+"
+" Most distributions provide software to ease handling of gpg and gpg-agent.
+" Examples are keychain or seahorse.
+"
+" Commands: {{{2
+"
+" :GPGEditRecipients
+" Opens a scratch buffer to change the list of recipients. Recipients that
+" are unknown (not in your public key) are highlighted and have
+" a prepended "!". Closing the buffer makes the changes permanent.
+"
+" :GPGViewRecipients
+" Prints the list of recipients.
+"
+" :GPGEditOptions
+" Opens a scratch buffer to change the options for encryption (symmetric,
+" asymmetric, signing). Closing the buffer makes the changes permanent.
+" WARNING: There is no check of the entered options, so you need to know
+" what you are doing.
+"
+" :GPGViewOptions
+" Prints the list of options.
+"
+" Variables: {{{2
+"
+" g:GPGExecutable
+" If set used as gpg executable, otherwise the system chooses what is run
+" when "gpg" is called. Defaults to "gpg".
+"
+" g:GPGUseAgent
+" If set to 0 a possible available gpg-agent won't be used. Defaults to 1.
+"
+" g:GPGPreferSymmetric
+" If set to 1 symmetric encryption is preferred for new files. Defaults to 0.
+"
+" g:GPGPreferArmor
+" If set to 1 armored data is preferred for new files. Defaults to 0
+" unless a "*.asc" file is being edited.
+"
+" g:GPGPreferSign
+" If set to 1 signed data is preferred for new files. Defaults to 0.
+"
+" g:GPGDefaultRecipients
+" If set, these recipients are used as defaults when no other recipient is
+" defined. This variable is a Vim list. Default is unset.
+"
+" g:GPGUsePipes
+" If set to 1, use pipes instead of temporary files when interacting with
+" gnupg. When set to 1, this can cause terminal-based gpg agents to not
+" display correctly when prompting for passwords. Defaults to 0.
+"
+" Known Issues: {{{2
+"
+" In some cases gvim can't decrypt files
+
+" This is caused by the fact that a running gvim has no TTY and thus gpg is
+" not able to ask for the passphrase by itself. This is a problem for Windows
+" and Linux versions of gvim and could not be solved unless a "terminal
+" emulation" is implemented for gvim. To circumvent this you have to use any
+" combination of gpg-agent and a graphical pinentry program:
+"
+" - gpg-agent only:
+" you need to provide the passphrase for the needed key to gpg-agent
+" in a terminal before you open files with gvim which require this key.
+"
+" - pinentry only:
+" you will get a popup window every time you open a file that needs to
+" be decrypted.
+"
+" - gpgagent and pinentry:
+" you will get a popup window the first time you open a file that
+" needs to be decrypted.
+"
+" Credits: {{{2
+"
+" - Mathieu Clabaut for inspirations through his vimspell.vim script.
+" - Richard Bronosky for patch to enable ".pgp" suffix.
+" - Erik Remmelzwaal for patch to enable windows support and patient beta
+" testing.
+" - Lars Becker for patch to make gpg2 working.
+" - Thomas Arendsen Hein for patch to convert encoding of gpg output.
+" - Karl-Heinz Ruskowski for patch to fix unknown recipients and trust model
+" and patient beta testing.
+" - Giel van Schijndel for patch to get GPG_TTY dynamically.
+" - Sebastian Luettich for patch to fix issue with symmetric encryption an set
+" recipients.
+" - Tim Swast for patch to generate signed files.
+" - James Vega for patches for better '*.asc' handling, better filename
+" escaping and better handling of multiple keyrings.
+"
+" Section: Plugin header {{{1
+
+" guard against multiple loads {{{2
+if (exists("g:loaded_gnupg") || &cp || exists("#BufReadCmd*.\(gpg\|asc\|pgp\)"))
+ finish
+endif
+let g:loaded_gnupg = '2.3'
+let s:GPGInitRun = 0
+
+" check for correct vim version {{{2
+if (v:version < 702)
+ echohl ErrorMsg | echo 'plugin gnupg.vim requires Vim version >= 7.2' | echohl None
+ finish
+endif
+
+" Section: Autocmd setup {{{1
+
+augroup GnuPG
+ autocmd!
+
+ " do the decryption
+ autocmd BufReadCmd,FileReadCmd *.\(gpg\|asc\|pgp\) call s:GPGInit()
+ autocmd BufReadCmd,FileReadCmd *.\(gpg\|asc\|pgp\) call s:GPGDecrypt()
+ autocmd BufReadCmd *.\(gpg\|asc\|pgp\) call s:GPGBufReadPost()
+
+ " convert all text to encrypted text before writing
+ autocmd BufWriteCmd,FileWriteCmd *.\(gpg\|asc\|pgp\) call s:GPGInit()
+ autocmd BufWriteCmd,FileWriteCmd *.\(gpg\|asc\|pgp\) call s:GPGEncrypt()
+
+ " cleanup on leaving vim
+ autocmd VimLeave *.\(gpg\|asc\|pgp\) call s:GPGCleanup()
+augroup END
+
+" Section: Constants {{{1
+
+let s:GPGMagicString = "\t \t"
+
+" Section: Highlight setup {{{1
+
+highlight default link GPGWarning WarningMsg
+highlight default link GPGError ErrorMsg
+highlight default link GPGHighlightUnknownRecipient ErrorMsg
+
+" Section: Functions {{{1
+
+" Function: s:GPGInit() {{{2
+"
+" initialize the plugin
+"
+function s:GPGInit()
+ call s:GPGDebug(3, ">>>>>>>> Entering s:GPGInit()")
+
+ " we don't want a swap file, as it writes unencrypted data to disk
+ setl noswapfile
+
+ " if persistent undo is present, disable it for this buffer
+ if exists('+undofile')
+ setl noundofile
+ endif
+
+ " the rest only has to be run once
+ if s:GPGInitRun
+ return
+ endif
+
+ " first make sure nothing is written to ~/.viminfo while editing
+ " an encrypted file.
+ set viminfo=
+
+ " check what gpg command to use
+ if (!exists("g:GPGExecutable"))
+ let g:GPGExecutable = "gpg --trust-model always"
+ endif
+
+ " check if gpg-agent is allowed
+ if (!exists("g:GPGUseAgent"))
+ let g:GPGUseAgent = 1
+ endif
+
+ " check if symmetric encryption is preferred
+ if (!exists("g:GPGPreferSymmetric"))
+ let g:GPGPreferSymmetric = 0
+ endif
+
+ " check if armored files are preferred
+ if (!exists("g:GPGPreferArmor"))
+ " .asc files should be armored as that's what the extension is used for
+ if expand('<afile>') =~ '\.asc$'
+ let g:GPGPreferArmor = 1
+ else
+ let g:GPGPreferArmor = 0
+ endif
+ endif
+
+ " check if signed files are preferred
+ if (!exists("g:GPGPreferSign"))
+ let g:GPGPreferSign = 0
+ endif
+
+ " start with empty default recipients if none is defined so far
+ if (!exists("g:GPGDefaultRecipients"))
+ let g:GPGDefaultRecipients = []
+ endif
+
+ " prefer not to use pipes since it can garble gpg agent display
+ if (!exists("g:GPGUsePipes"))
+ let g:GPGUsePipes = 0
+ endif
+
+ " allow alternate gnupg homedir
+ if (!exists('g:GPGHomedir'))
+ let g:GPGHomedir = ''
+ endif
+
+ " print version
+ call s:GPGDebug(1, "gnupg.vim ". g:loaded_gnupg)
+
+ " determine if gnupg can use the gpg-agent
+ if (exists("$GPG_AGENT_INFO") && g:GPGUseAgent == 1)
+ if (!exists("$GPG_TTY") && !has("gui_running"))
+ let $GPG_TTY = system("tty")
+ if (v:shell_error)
+ let $GPG_TTY = ""
+ echohl GPGError
+ echom "The GPG_TTY is not set and no TTY could be found using the `tty` command!"
+ echom "gpg-agent might not work."
+ echohl None
+ endif
+ endif
+ let s:GPGCommand = g:GPGExecutable . " --use-agent"
+ else
+ let s:GPGCommand = g:GPGExecutable . " --no-use-agent"
+ endif
+
+ " don't use tty in gvim except for windows: we get their a tty for free.
+ " FIXME find a better way to avoid an error.
+ " with this solution only --use-agent will work
+ if (has("gui_running") && !has("gui_win32"))
+ let s:GPGCommand = s:GPGCommand . " --no-tty"
+ endif
+
+ " setup shell environment for unix and windows
+ let s:shellredirsave = &shellredir
+ let s:shellsave = &shell
+ let s:shelltempsave = &shelltemp
+ " noshelltemp isn't currently supported on Windows, but it doesn't cause any
+ " errors and this future proofs us against requiring changes if Windows
+ " gains noshelltemp functionality
+ let s:shelltemp = !g:GPGUsePipes
+ if (has("unix"))
+ " unix specific settings
+ let s:shellredir = ">%s 2>&1"
+ let s:shell = '/bin/sh'
+ let s:stderrredirnull = '2>/dev/null'
+ let s:GPGCommand = "LANG=C LC_ALL=C " . s:GPGCommand
+ else
+ " windows specific settings
+ let s:shellredir = '>%s'
+ let s:shell = &shell
+ let s:stderrredirnull = '2>nul'
+ endif
+
+ call s:GPGDebug(3, "shellredirsave: " . s:shellredirsave)
+ call s:GPGDebug(3, "shellsave: " . s:shellsave)
+ call s:GPGDebug(3, "shelltempsave: " . s:shelltempsave)
+
+ call s:GPGDebug(3, "shell: " . s:shell)
+ call s:GPGDebug(3, "shellcmdflag: " . &shellcmdflag)
+ call s:GPGDebug(3, "shellxquote: " . &shellxquote)
+ call s:GPGDebug(3, "shellredir: " . s:shellredir)
+ call s:GPGDebug(3, "stderrredirnull: " . s:stderrredirnull)
+
+ call s:GPGDebug(3, "shell implementation: " . resolve(s:shell))
+
+ " find the supported algorithms
+ let output = s:GPGSystem({ 'level': 2, 'args': '--version' })
+
+ let s:GPGPubkey = substitute(output, ".*Pubkey: \\(.\\{-}\\)\n.*", "\\1", "")
+ let s:GPGCipher = substitute(output, ".*Cipher: \\(.\\{-}\\)\n.*", "\\1", "")
+ let s:GPGHash = substitute(output, ".*Hash: \\(.\\{-}\\)\n.*", "\\1", "")
+ let s:GPGCompress = substitute(output, ".*Compress.\\{-}: \\(.\\{-}\\)\n.*", "\\1", "")
+
+ call s:GPGDebug(2, "public key algorithms: " . s:GPGPubkey)
+ call s:GPGDebug(2, "cipher algorithms: " . s:GPGCipher)
+ call s:GPGDebug(2, "hashing algorithms: " . s:GPGHash)
+ call s:GPGDebug(2, "compression algorithms: " . s:GPGCompress)
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGInit()")
+ let s:GPGInitRun = 1
+endfunction
+
+" Function: s:GPGCleanup() {{{2
+"
+" cleanup on leaving vim
+"
+function s:GPGCleanup()
+ call s:GPGDebug(3, ">>>>>>>> Entering s:GPGCleanup()")
+
+ " wipe out screen
+ new +only
+ redraw!
+
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGCleanup()")
+endfunction
+
+" Function: s:GPGDecrypt() {{{2
+"
+" decrypt the buffer and find all recipients of the encrypted file
+"
+function s:GPGDecrypt()
+ call s:GPGDebug(3, ">>>>>>>> Entering s:GPGDecrypt()")
+
+ " get the filename of the current buffer
+ let filename = expand("<afile>:p")
+
+ " clear GPGRecipients and GPGOptions
+ let b:GPGRecipients = g:GPGDefaultRecipients
+ let b:GPGOptions = []
+
+ " File doesn't exist yet, so nothing to decrypt
+ if empty(glob(filename))
+ return
+ endif
+
+ " Only let this if the file actually exists, otherwise GPG functionality
+ " will be disabled when editing a buffer that doesn't yet have a backing
+ " file
+ let b:GPGEncrypted = 0
+
+ " find the recipients of the file
+ let cmd = { 'level': 3 }
+ let cmd.args = '--verbose --decrypt --list-only --dry-run --batch --no-use-agent --logger-fd 1 ' . shellescape(filename)
+ let output = s:GPGSystem(cmd)
+
+ let asymmPattern = 'gpg: public key is \%(0x\)\=[[:xdigit:]]\{8,16}'
+ " check if the file is symmetric/asymmetric encrypted
+ if (match(output, "gpg: encrypted with [[:digit:]]\\+ passphrase") >= 0)
+ " file is symmetric encrypted
+ let b:GPGEncrypted = 1
+ call s:GPGDebug(1, "this file is symmetric encrypted")
+
+ let b:GPGOptions += ["symmetric"]
+
+ " find the used cipher algorithm
+ let cipher = substitute(output, ".*gpg: \\([^ ]\\+\\) encrypted data.*", "\\1", "")
+ if (match(s:GPGCipher, "\\<" . cipher . "\\>") >= 0)
+ let b:GPGOptions += ["cipher-algo " . cipher]
+ call s:GPGDebug(1, "cipher-algo is " . cipher)
+ else
+ echohl GPGWarning
+ echom "The cipher " . cipher . " is not known by the local gpg command. Using default!"
+ echo
+ echohl None
+ endif
+ elseif (match(output, asymmPattern) >= 0)
+ " file is asymmetric encrypted
+ let b:GPGEncrypted = 1
+ call s:GPGDebug(1, "this file is asymmetric encrypted")
+
+ let b:GPGOptions += ["encrypt"]
+
+ " find the used public keys
+ let start = match(output, asymmPattern)
+ while (start >= 0)
+ let start = start + strlen("gpg: public key is ")
+ let recipient = matchstr(output, '[[:xdigit:]]\{8,16}', start)
+ call s:GPGDebug(1, "recipient is " . recipient)
+ let name = s:GPGNameToID(recipient)
+ if (strlen(name) > 0)
+ let b:GPGRecipients += [name]
+ call s:GPGDebug(1, "name of recipient is " . name)
+ else
+ let b:GPGRecipients += [recipient]
+ echohl GPGWarning
+ echom "The recipient \"" . recipient . "\" is not in your public keyring!"
+ echohl None
+ end
+ let start = match(output, asymmPattern, start)
+ endwhile
+ else
+ " file is not encrypted
+ let b:GPGEncrypted = 0
+ call s:GPGDebug(1, "this file is not encrypted")
+ echohl GPGWarning
+ echom "File is not encrypted, all GPG functions disabled!"
+ echohl None
+ silent exe '.r ' . fnameescape(filename)
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGDecrypt()")
+ return
+ endif
+
+ " check if the message is armored
+ if (match(output, "gpg: armor header") >= 0)
+ call s:GPGDebug(1, "this file is armored")
+ let b:GPGOptions += ["armor"]
+ endif
+
+ " finally decrypt the buffer content
+ " since even with the --quiet option passphrase typos will be reported,
+ " we must redirect stderr (using shell temporarily)
+ call s:GPGDebug(1, "decrypting file")
+ let cmd = { 'level': 1, 'ex': 'r !' }
+ let cmd.args = '--quiet --decrypt ' . shellescape(filename, 1)
+ call s:GPGExecute(cmd)
+
+ if (v:shell_error) " message could not be decrypted
+ echohl GPGError
+ let blackhole = input("Message could not be decrypted! (Press ENTER)")
+ echohl None
+ silent bwipeout!
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGDecrypt()")
+ return
+ endif
+
+ " refresh screen
+ redraw!
+
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGDecrypt()")
+endfunction
+
+function s:GPGBufReadPost()
+ call s:GPGDebug(3, ">>>>>>>> Entering s:GPGBufReadPost()")
+ silent 1delete
+ " call the autocommand for the file minus .gpg$
+ execute ':doautocmd BufReadPost ' . fnameescape(expand('<afile>:r'))
+ call s:GPGDebug(2, 'called autocommand for ' . fnameescape(expand('<afile>:r')))
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGBufReadPost()")
+endfunction
+
+" Function: s:GPGEncrypt() {{{2
+"
+" encrypts the buffer to all previous recipients
+"
+function s:GPGEncrypt()
+ call s:GPGDebug(3, ">>>>>>>> Entering s:GPGEncrypt()")
+
+ " store encoding and switch to a safe one
+ if (&fileencoding != &encoding)
+ let s:GPGEncoding = &encoding
+ let &encoding = &fileencoding
+ call s:GPGDebug(2, "encoding was \"" . s:GPGEncoding . "\", switched to \"" . &encoding . "\"")
+ else
+ let s:GPGEncoding = ""
+ call s:GPGDebug(2, "encoding and fileencoding are the same (\"" . &encoding . "\"), not switching")
+ endif
+
+ " guard for unencrypted files
+ if (exists("b:GPGEncrypted") && b:GPGEncrypted == 0)
+ echohl GPGError
+ let blackhole = input("Message could not be encrypted! (Press ENTER)")
+ echohl None
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGEncrypt()")
+ return
+ endif
+
+ " initialize GPGOptions if not happened before
+ if (!exists("b:GPGOptions") || len(b:GPGOptions) == 0)
+ let b:GPGOptions = []
+ if (exists("g:GPGPreferSymmetric") && g:GPGPreferSymmetric == 1)
+ let b:GPGOptions += ["symmetric"]
+ let b:GPGRecipients = []
+ else
+ let b:GPGOptions += ["encrypt"]
+ endif
+ if (exists("g:GPGPreferArmor") && g:GPGPreferArmor == 1)
+ let b:GPGOptions += ["armor"]
+ endif
+ if (exists("g:GPGPreferSign") && g:GPGPreferSign == 1)
+ let b:GPGOptions += ["sign"]
+ endif
+ call s:GPGDebug(1, "no options set, so using default options: " . string(b:GPGOptions))
+ endif
+
+ " built list of options
+ let options = ""
+ for option in b:GPGOptions
+ let options = options . " --" . option . " "
+ endfor
+
+ if (!exists('b:GPGRecipients'))
+ let b:GPGRecipients = []
+ endif
+
+ " check here again if all recipients are available in the keyring
+ let [ recipients, unknownrecipients ] = s:GPGCheckRecipients(b:GPGRecipients)
+
+ " check if there are unknown recipients and warn
+ if (len(unknownrecipients) > 0)
+ echohl GPGWarning
+ echom "Please use GPGEditRecipients to correct!!"
+ echo
+ echohl None
+
+ " Let user know whats happend and copy known_recipients back to buffer
+ let dummy = input("Press ENTER to quit")
+ endif
+
+ " built list of recipients
+ if (len(recipients) > 0)
+ for gpgid in recipients
+ let options = options . " -r " . gpgid
+ endfor
+ endif
+
+ " encrypt the buffer
+ let destfile = tempname()
+ let cmd = { 'level': 1, 'ex': "'[,']w !" }
+ let cmd.args = '--quiet --no-encrypt-to ' . options
+ let cmd.redirect = '>' . shellescape(destfile, 1)
+ call s:GPGExecute(cmd)
+
+ " restore encoding
+ if (s:GPGEncoding != "")
+ let &encoding = s:GPGEncoding
+ call s:GPGDebug(2, "restored encoding \"" . &encoding . "\"")
+ endif
+
+ if (v:shell_error) " message could not be encrypted
+ " Command failed, so clean up the tempfile
+ call delete(destfile)
+ echohl GPGError
+ let blackhole = input("Message could not be encrypted! (Press ENTER)")
+ echohl None
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGEncrypt()")
+ return
+ endif
+
+ call rename(destfile, resolve(expand('<afile>')))
+ setl nomodified
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGEncrypt()")
+endfunction
+
+" Function: s:GPGViewRecipients() {{{2
+"
+" echo the recipients
+"
+function s:GPGViewRecipients()
+ call s:GPGDebug(3, ">>>>>>>> Entering s:GPGViewRecipients()")
+
+ " guard for unencrypted files
+ if (exists("b:GPGEncrypted") && b:GPGEncrypted == 0)
+ echohl GPGWarning
+ echom "File is not encrypted, all GPG functions disabled!"
+ echohl None
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGViewRecipients()")
+ return
+ endif
+
+ let [ recipients, unknownrecipients ] = s:GPGCheckRecipients(b:GPGRecipients)
+
+ echo 'This file has following recipients (Unknown recipients have a prepended "!"):'
+ " echo the recipients
+ for name in recipients
+ let name = s:GPGIDToName(name)
+ echo name
+ endfor
+
+ " echo the unknown recipients
+ echohl GPGWarning
+ for name in unknownrecipients
+ let name = "!" . name
+ echo name
+ endfor
+ echohl None
+
+ " check if there is any known recipient
+ if (len(recipients) == 0)
+ echohl GPGError
+ echom 'There are no known recipients!'
+ echohl None
+ endif
+
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGViewRecipients()")
+endfunction
+
+" Function: s:GPGEditRecipients() {{{2
+"
+" create a scratch buffer with all recipients to add/remove recipients
+"
+function s:GPGEditRecipients()
+ call s:GPGDebug(3, ">>>>>>>> Entering s:GPGEditRecipients()")
+
+ " guard for unencrypted files
+ if (exists("b:GPGEncrypted") && b:GPGEncrypted == 0)
+ echohl GPGWarning
+ echom "File is not encrypted, all GPG functions disabled!"
+ echohl None
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGEditRecipients()")
+ return
+ endif
+
+ " only do this if it isn't already a GPGRecipients_* buffer
+ if (match(bufname("%"), "^\\(GPGRecipients_\\|GPGOptions_\\)") != 0 && match(bufname("%"), "\.\\(gpg\\|asc\\|pgp\\)$") >= 0)
+
+ " save buffer name
+ let buffername = bufname("%")
+ let editbuffername = "GPGRecipients_" . buffername
+
+ " check if this buffer exists
+ if (!bufexists(editbuffername))
+ " create scratch buffer
+ execute 'silent! split ' . fnameescape(editbuffername)
+
+ " add a autocommand to regenerate the recipients after a write
+ autocmd BufHidden,BufUnload,BufWriteCmd <buffer> call s:GPGFinishRecipientsBuffer()
+ else
+ if (bufwinnr(editbuffername) >= 0)
+ " switch to scratch buffer window
+ execute 'silent! ' . bufwinnr(editbuffername) . "wincmd w"
+ else
+ " split scratch buffer window
+ execute 'silent! sbuffer ' . fnameescape(editbuffername)
+
+ " add a autocommand to regenerate the recipients after a write
+ autocmd BufHidden,BufUnload,BufWriteCmd <buffer> call s:GPGFinishRecipientsBuffer()
+ endif
+
+ " empty the buffer
+ silent %delete
+ endif
+
+ " Mark the buffer as a scratch buffer
+ setlocal buftype=acwrite
+ setlocal bufhidden=hide
+ setlocal noswapfile
+ setlocal nowrap
+ setlocal nobuflisted
+ setlocal nonumber
+
+ " so we know for which other buffer this edit buffer is
+ let b:GPGCorrespondingTo = buffername
+
+ " put some comments to the scratch buffer
+ silent put ='GPG: ----------------------------------------------------------------------'
+ silent put ='GPG: Please edit the list of recipients, one recipient per line.'
+ silent put ='GPG: Unknown recipients have a prepended \"!\".'
+ silent put ='GPG: Lines beginning with \"GPG:\" are removed automatically.'
+ silent put ='GPG: Data after recipients between and including \"(\" and \")\" is ignored.'
+ silent put ='GPG: Closing this buffer commits changes.'
+ silent put ='GPG: ----------------------------------------------------------------------'
+
+ " get the recipients
+ let [ recipients, unknownrecipients ] = s:GPGCheckRecipients(getbufvar(b:GPGCorrespondingTo, "GPGRecipients"))
+
+ " if there are no known or unknown recipients, use the default ones
+ if (len(recipients) == 0 && len(unknownrecipients) == 0)
+ if (type(g:GPGDefaultRecipients) == type([]))
+ let [ recipients, unknownrecipients ] = s:GPGCheckRecipients(g:GPGDefaultRecipients)
+ else
+ echohl GPGWarning
+ echom "g:GPGDefaultRecipients is not a Vim list, please correct this in your vimrc!"
+ echohl None
+ endif
+ endif
+
+ " put the recipients in the scratch buffer
+ for name in recipients
+ let name = s:GPGIDToName(name)
+ silent put =name
+ endfor
+
+ " put the unknown recipients in the scratch buffer
+ let syntaxPattern = "\\(nonexxistinwordinthisbuffer"
+ for name in unknownrecipients
+ let name = "!" . name
+ let syntaxPattern = syntaxPattern . "\\|" . fnameescape(name)
+ silent put =name
+ endfor
+ let syntaxPattern = syntaxPattern . "\\)"
+
+ " define highlight
+ if (has("syntax") && exists("g:syntax_on"))
+ execute 'syntax match GPGUnknownRecipient "' . syntaxPattern . '"'
+ highlight clear GPGUnknownRecipient
+ highlight link GPGUnknownRecipient GPGHighlightUnknownRecipient
+
+ syntax match GPGComment "^GPG:.*$"
+ execute 'syntax match GPGComment "' . s:GPGMagicString . '.*$"'
+ highlight clear GPGComment
+ highlight link GPGComment Comment
+ endif
+
+ " delete the empty first line
+ silent 1delete
+
+ " jump to the first recipient
+ silent $
+
+ endif
+
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGEditRecipients()")
+endfunction
+
+" Function: s:GPGFinishRecipientsBuffer() {{{2
+"
+" create a new recipient list from RecipientsBuffer
+"
+function s:GPGFinishRecipientsBuffer()
+ call s:GPGDebug(3, ">>>>>>>> Entering s:GPGFinishRecipientsBuffer()")
+
+ " guard for unencrypted files
+ if (exists("b:GPGEncrypted") && b:GPGEncrypted == 0)
+ echohl GPGWarning
+ echom "File is not encrypted, all GPG functions disabled!"
+ echohl None
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGFinishRecipientsBuffer()")
+ return
+ endif
+
+ " go to buffer before doing work
+ if (bufnr("%") != expand("<abuf>"))
+ " switch to scratch buffer window
+ execute 'silent! ' . bufwinnr(expand("<afile>")) . "wincmd w"
+ endif
+
+ " delete the autocommand
+ autocmd! * <buffer>
+
+
+ " get the recipients from the scratch buffer
+ let recipients = []
+ let lines = getline(1,"$")
+ for recipient in lines
+ " delete all text after magic string
+ let recipient = substitute(recipient, s:GPGMagicString . ".*$", "", "")
+
+ " delete all spaces at beginning and end of the recipient
+ " also delete a '!' at the beginning of the recipient
+ let recipient = substitute(recipient, "^[[:space:]!]*\\(.\\{-}\\)[[:space:]]*$", "\\1", "")
+
+ " delete comment lines
+ let recipient = substitute(recipient, "^GPG:.*$", "", "")
+
+ " only do this if the line is not empty
+ if (strlen(recipient) > 0)
+ let gpgid = s:GPGNameToID(recipient)
+ if (strlen(gpgid) > 0)
+ if (match(recipients, gpgid) < 0)
+ let recipients += [gpgid]
+ endif
+ else
+ if (match(recipients, recipient) < 0)
+ let recipients += [recipient]
+ echohl GPGWarning
+ echom "The recipient \"" . recipient . "\" is not in your public keyring!"
+ echohl None
+ endif
+ endif
+ endif
+ endfor
+
+ " write back the new recipient list to the corresponding buffer and mark it
+ " as modified. Buffer is now for sure a encrypted buffer.
+ call setbufvar(b:GPGCorrespondingTo, "GPGRecipients", recipients)
+ call setbufvar(b:GPGCorrespondingTo, "&mod", 1)
+ call setbufvar(b:GPGCorrespondingTo, "GPGEncrypted", 1)
+
+ " check if there is any known recipient
+ if (len(recipients) == 0)
+ echohl GPGError
+ echom 'There are no known recipients!'
+ echohl None
+ endif
+
+ " reset modified flag
+ setl nomodified
+
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGFinishRecipientsBuffer()")
+endfunction
+
+" Function: s:GPGViewOptions() {{{2
+"
+" echo the recipients
+"
+function s:GPGViewOptions()
+ call s:GPGDebug(3, ">>>>>>>> Entering s:GPGViewOptions()")
+
+ " guard for unencrypted files
+ if (exists("b:GPGEncrypted") && b:GPGEncrypted == 0)
+ echohl GPGWarning
+ echom "File is not encrypted, all GPG functions disabled!"
+ echohl None
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGViewOptions()")
+ return
+ endif
+
+ if (exists("b:GPGOptions"))
+ echo 'This file has following options:'
+ " echo the options
+ for option in b:GPGOptions
+ echo option
+ endfor
+ endif
+
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGViewOptions()")
+endfunction
+
+" Function: s:GPGEditOptions() {{{2
+"
+" create a scratch buffer with all recipients to add/remove recipients
+"
+function s:GPGEditOptions()
+ call s:GPGDebug(3, ">>>>>>>> Entering s:GPGEditOptions()")
+
+ " guard for unencrypted files
+ if (exists("b:GPGEncrypted") && b:GPGEncrypted == 0)
+ echohl GPGWarning
+ echom "File is not encrypted, all GPG functions disabled!"
+ echohl None
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGEditOptions()")
+ return
+ endif
+
+ " only do this if it isn't already a GPGOptions_* buffer
+ if (match(bufname("%"), "^\\(GPGRecipients_\\|GPGOptions_\\)") != 0 && match(bufname("%"), "\.\\(gpg\\|asc\\|pgp\\)$") >= 0)
+
+ " save buffer name
+ let buffername = bufname("%")
+ let editbuffername = "GPGOptions_" . buffername
+
+ " check if this buffer exists
+ if (!bufexists(editbuffername))
+ " create scratch buffer
+ execute 'silent! split ' . fnameescape(editbuffername)
+
+ " add a autocommand to regenerate the options after a write
+ autocmd BufHidden,BufUnload,BufWriteCmd <buffer> call s:GPGFinishOptionsBuffer()
+ else
+ if (bufwinnr(editbuffername) >= 0)
+ " switch to scratch buffer window
+ execute 'silent! ' . bufwinnr(editbuffername) . "wincmd w"
+ else
+ " split scratch buffer window
+ execute 'silent! sbuffer ' . fnameescape(editbuffername)
+
+ " add a autocommand to regenerate the options after a write
+ autocmd BufHidden,BufUnload,BufWriteCmd <buffer> call s:GPGFinishOptionsBuffer()
+ endif
+
+ " empty the buffer
+ silent %delete
+ endif
+
+ " Mark the buffer as a scratch buffer
+ setlocal buftype=nofile
+ setlocal noswapfile
+ setlocal nowrap
+ setlocal nobuflisted
+ setlocal nonumber
+
+ " so we know for which other buffer this edit buffer is
+ let b:GPGCorrespondingTo = buffername
+
+ " put some comments to the scratch buffer
+ silent put ='GPG: ----------------------------------------------------------------------'
+ silent put ='GPG: THERE IS NO CHECK OF THE ENTERED OPTIONS!'
+ silent put ='GPG: YOU NEED TO KNOW WHAT YOU ARE DOING!'
+ silent put ='GPG: IF IN DOUBT, QUICKLY EXIT USING :x OR :bd.'
+ silent put ='GPG: Please edit the list of options, one option per line.'
+ silent put ='GPG: Please refer to the gpg documentation for valid options.'
+ silent put ='GPG: Lines beginning with \"GPG:\" are removed automatically.'
+ silent put ='GPG: Closing this buffer commits changes.'
+ silent put ='GPG: ----------------------------------------------------------------------'
+
+ " put the options in the scratch buffer
+ let options = getbufvar(b:GPGCorrespondingTo, "GPGOptions")
+
+ for option in options
+ silent put =option
+ endfor
+
+ " delete the empty first line
+ silent 1delete
+
+ " jump to the first option
+ silent $
+
+ " define highlight
+ if (has("syntax") && exists("g:syntax_on"))
+ syntax match GPGComment "^GPG:.*$"
+ highlight clear GPGComment
+ highlight link GPGComment Comment
+ endif
+ endif
+
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGEditOptions()")
+endfunction
+
+" Function: s:GPGFinishOptionsBuffer() {{{2
+"
+" create a new option list from OptionsBuffer
+"
+function s:GPGFinishOptionsBuffer()
+ call s:GPGDebug(3, ">>>>>>>> Entering s:GPGFinishOptionsBuffer()")
+
+ " guard for unencrypted files
+ if (exists("b:GPGEncrypted") && b:GPGEncrypted == 0)
+ echohl GPGWarning
+ echom "File is not encrypted, all GPG functions disabled!"
+ echohl None
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGFinishOptionsBuffer()")
+ return
+ endif
+
+ " go to buffer before doing work
+ if (bufnr("%") != expand("<abuf>"))
+ " switch to scratch buffer window
+ execute 'silent! ' . bufwinnr(expand("<afile>")) . "wincmd w"
+ endif
+
+ " clear options and unknownOptions
+ let options = []
+ let unknownOptions = []
+
+ " delete the autocommand
+ autocmd! * <buffer>
+
+ " get the options from the scratch buffer
+ let lines = getline(1, "$")
+ for option in lines
+ " delete all spaces at beginning and end of the option
+ " also delete a '!' at the beginning of the option
+ let option = substitute(option, "^[[:space:]!]*\\(.\\{-}\\)[[:space:]]*$", "\\1", "")
+ " delete comment lines
+ let option = substitute(option, "^GPG:.*$", "", "")
+
+ " only do this if the line is not empty
+ if (strlen(option) > 0 && match(options, option) < 0)
+ let options += [option]
+ endif
+ endfor
+
+ " write back the new option list to the corresponding buffer and mark it
+ " as modified
+ call setbufvar(b:GPGCorrespondingTo, "GPGOptions", options)
+ call setbufvar(b:GPGCorrespondingTo, "&mod", 1)
+
+ " reset modified flag
+ setl nomodified
+
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGFinishOptionsBuffer()")
+endfunction
+
+" Function: s:GPGCheckRecipients(tocheck) {{{2
+"
+" check if recipients are known
+" Returns: two lists recipients and unknownrecipients
+"
+function s:GPGCheckRecipients(tocheck)
+ call s:GPGDebug(3, ">>>>>>>> Entering s:GPGCheckRecipients()")
+
+ let recipients = []
+ let unknownrecipients = []
+
+ if (type(a:tocheck) == type([]))
+ for recipient in a:tocheck
+ let gpgid = s:GPGNameToID(recipient)
+ if (strlen(gpgid) > 0)
+ if (match(recipients, gpgid) < 0)
+ let recipients += [gpgid]
+ endif
+ else
+ if (match(unknownrecipients, recipient) < 0)
+ let unknownrecipients += [recipient]
+ echohl GPGWarning
+ echom "The recipient \"" . recipient . "\" is not in your public keyring!"
+ echohl None
+ endif
+ end
+ endfor
+ endif
+
+ call s:GPGDebug(2, "recipients are: " . string(recipients))
+ call s:GPGDebug(2, "unknown recipients are: " . string(unknownrecipients))
+
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGCheckRecipients()")
+ return [ recipients, unknownrecipients ]
+endfunction
+
+" Function: s:GPGNameToID(name) {{{2
+"
+" find GPG key ID corresponding to a name
+" Returns: ID for the given name
+"
+function s:GPGNameToID(name)
+ call s:GPGDebug(3, ">>>>>>>> Entering s:GPGNameToID()")
+
+ " ask gpg for the id for a name
+ let cmd = { 'level': 2 }
+ let cmd.args = '--quiet --with-colons --fixed-list-mode --list-keys ' . shellescape(a:name)
+ let output = s:GPGSystem(cmd)
+
+ " when called with "--with-colons" gpg encodes its output _ALWAYS_ as UTF-8,
+ " so convert it, if necessary
+ if (&encoding != "utf-8")
+ let output = iconv(output, "utf-8", &encoding)
+ endif
+ let lines = split(output, "\n")
+
+ " parse the output of gpg
+ let pubseen = 0
+ let counter = 0
+ let gpgids = []
+ let duplicates = {}
+ let choices = "The name \"" . a:name . "\" is ambiguous. Please select the correct key:\n"
+ for line in lines
+
+ " check if this line has already been processed
+ if !has_key(duplicates, line)
+ let duplicates[line] = 1
+
+ let fields = split(line, ":")
+ " search for the next uid
+ if (pubseen == 1)
+ if (fields[0] == "uid")
+ let choices = choices . " " . fields[9] . "\n"
+ else
+ let pubseen = 0
+ endif
+ endif
+
+ " search for the next pub
+ if (pubseen == 0)
+ if (fields[0] == "pub")
+ let identity = fields[4]
+ let gpgids += [identity]
+ if exists("*strftime")
+ let choices = choices . counter . ": ID: 0x" . identity . " created at " . strftime("%c", fields[5]) . "\n"
+ else
+ let choices = choices . counter . ": ID: 0x" . identity . "\n"
+ endif
+ let counter = counter+1
+ let pubseen = 1
+ endif
+ endif
+ endif
+
+ endfor
+
+ " counter > 1 means we have more than one results
+ let answer = 0
+ if (counter > 1)
+ let choices = choices . "Enter number: "
+ let answer = input(choices, "0")
+ while (answer == "")
+ let answer = input("Enter number: ", "0")
+ endwhile
+ endif
+
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGNameToID()")
+ return get(gpgids, answer, "")
+endfunction
+
+" Function: s:GPGIDToName(identity) {{{2
+"
+" find name corresponding to a GPG key ID
+" Returns: Name for the given ID
+"
+function s:GPGIDToName(identity)
+ call s:GPGDebug(3, ">>>>>>>> Entering s:GPGIDToName()")
+
+ " TODO is the encryption subkey really unique?
+
+ " ask gpg for the id for a name
+ let cmd = { 'level': 2 }
+ let cmd.args = '--quiet --with-colons --fixed-list-mode --list-keys ' . a:identity
+ let output = s:GPGSystem(cmd)
+
+ " when called with "--with-colons" gpg encodes its output _ALWAYS_ as UTF-8,
+ " so convert it, if necessary
+ if (&encoding != "utf-8")
+ let output = iconv(output, "utf-8", &encoding)
+ endif
+ let lines = split(output, "\n")
+
+ " parse the output of gpg
+ let pubseen = 0
+ let uid = ""
+ for line in lines
+ let fields = split(line, ":")
+ if (pubseen == 0) " search for the next pub
+ if (fields[0] == "pub")
+ let pubseen = 1
+ endif
+ else " search for the next uid
+ if (fields[0] == "uid")
+ let pubseen = 0
+ if exists("*strftime")
+ let uid = fields[9] . s:GPGMagicString . "(ID: 0x" . a:identity . " created at " . strftime("%c", fields[5]) . ")"
+ else
+ let uid = fields[9] . s:GPGMagicString . "(ID: 0x" . a:identity . ")"
+ endif
+ break
+ endif
+ endif
+ endfor
+
+ call s:GPGDebug(3, "<<<<<<<< Leaving s:GPGIDToName()")
+ return uid
+endfunction
+
+function s:GPGPreCmd()
+ let &shellredir = s:shellredir
+ let &shell = s:shell
+ let &shelltemp = s:shelltemp
+endfunction
+
+function s:GPGPostCmd()
+ let &shellredir = s:shellredirsave
+ let &shell = s:shellsave
+ let &shelltemp = s:shelltempsave
+endfunction
+
+" Function: s:GPGSystem(dict) {{{2
+"
+" run g:GPGCommand using system(), logging the commandline and output
+" Recognized keys are:
+" level - Debug level at which the commandline and output will be logged
+" args - Arguments to be given to g:GPGCommand
+"
+" Returns: command output
+"
+function s:GPGSystem(dict)
+ let commandline = printf('%s %s', s:GPGCommand, a:dict.args)
+ if (!empty(g:GPGHomedir))
+ let commandline .= ' --homedir ' . shellescape(g:GPGHomedir)
+ endif
+ let commandline .= ' ' . s:stderrredirnull
+ call s:GPGDebug(a:dict.level, "command: ". commandline)
+
+ call s:GPGPreCmd()
+ let output = system(commandline)
+ call s:GPGPostCmd()
+
+ call s:GPGDebug(a:dict.level, "output: ". output)
+ return output
+endfunction
+
+" Function: s:GPGExecute(dict) {{{2
+"
+" run g:GPGCommand using :execute, logging the commandline
+" Recognized keys are:
+" level - Debug level at which the commandline will be logged
+" args - Arguments to be given to g:GPGCommand
+" ex - Ex command which will be :executed
+" redirect - Shell redirect to use, if needed
+"
+function s:GPGExecute(dict)
+ let commandline = printf('%s%s %s', a:dict.ex, s:GPGCommand, a:dict.args)
+ if (!empty(g:GPGHomedir))
+ let commandline .= ' --homedir ' . shellescape(g:GPGHomedir, 1)
+ endif
+ if (has_key(a:dict, 'redirect'))
+ let commandline .= ' ' . a:dict.redirect
+ endif
+ let commandline .= ' ' . s:stderrredirnull
+ call s:GPGDebug(a:dict.level, "command: " . commandline)
+
+ call s:GPGPreCmd()
+ execute commandline
+ call s:GPGPostCmd()
+endfunction
+
+" Function: s:GPGDebug(level, text) {{{2
+"
+" output debug message, if this message has high enough importance
+" only define function if GPGDebugLevel set at all
+"
+function s:GPGDebug(level, text)
+ if exists("g:GPGDebugLevel") && g:GPGDebugLevel >= a:level
+ if exists("g:GPGDebugLog")
+ execute "redir >> " . g:GPGDebugLog
+ echom "GnuPG: " . a:text
+ redir END
+ else
+ echom "GnuPG: " . a:text
+ endif
+ endif
+endfunction
+
+" Section: Commands {{{1
+
+command! GPGViewRecipients call s:GPGViewRecipients()
+command! GPGEditRecipients call s:GPGEditRecipients()
+command! GPGViewOptions call s:GPGViewOptions()
+command! GPGEditOptions call s:GPGEditOptions()
+
+" Section: Menu {{{1
+
+if (has("menu"))
+ amenu <silent> Plugin.GnuPG.View\ Recipients :GPGViewRecipients<CR>
+ amenu <silent> Plugin.GnuPG.Edit\ Recipients :GPGEditRecipients<CR>
+ amenu <silent> Plugin.GnuPG.View\ Options :GPGViewOptions<CR>
+ amenu <silent> Plugin.GnuPG.Edit\ Options :GPGEditOptions<CR>
+endif
+
+" vim600: set foldmethod=marker foldlevel=0 :
diff --git a/dot_vimrc b/dot_vimrc
new file mode 100644
index 0000000..9586033
--- /dev/null
+++ b/dot_vimrc
@@ -0,0 +1,28 @@
+" Appearance
+syntax on
+colorscheme brookstream
+set bg=dark
+set modeline
+set modelines=1
+
+" Tabbing
+set expandtab
+set shiftwidth=4
+set smarttab
+set autoindent
+
+" We want a mouse in consoles, so:"
+set mouse=a
+
+" Use system plugins
+filetype plugin on
+
+" Use system per-filetype indentation
+filetype indent on
+
+set textwidth=80
+
+set pastetoggle=<F10>
+
+au BufEnter ~/.mutt/tmp/* set textwidth=72 | set list lcs=trail:-,nbsp:%
+au BufEnter */gophermap set list lcs=trail:-,nbsp:%,tab:»·,space:·
diff --git a/dot_xkb/keycodes/sunt6fix b/dot_xkb/keycodes/sunt6fix
new file mode 100644
index 0000000..e599b3c
--- /dev/null
+++ b/dot_xkb/keycodes/sunt6fix
@@ -0,0 +1,4 @@
+xkb_keycodes {
+ <PGUP> = 86;
+ <PGDN> = 104;
+};
diff --git a/dot_xkb/symbols/dpr b/dot_xkb/symbols/dpr
new file mode 100644
index 0000000..580b68a
--- /dev/null
+++ b/dot_xkb/symbols/dpr
@@ -0,0 +1,106 @@
+// Phonetic Russian (Dvorak)
+// By: Ryan Kavanagh <ryanakca@kubuntu.org> , http://ryanak.ca/
+//
+// Based on the ICD layout
+//
+// SHIFT: ~ % 7 5 3 1 9 0 2 4 6 8 Ц BCKSP
+// NORMAL: $ & [ { } ( = * ) + ] ! ц BCKSP
+// AltGr: d~ ø € Â¥ d˘ d¨ d¸ d`` d` d´ dË Â¡ # BCKSP
+// SFT-AG: ¢ Ø £ ¤ ` BCKSP
+//
+// TAB : < > П Ы Ф Г Ч Р Л Щ Й ?
+// TAB ; , . п ы ф г ч р л щ й /
+// TAB ä « » p y f g c r l ? @ |
+// TAB Ä · P Y F G C R L / ^ \
+//
+// CAPL РО Е У И Д Х Т РС ъ ENTER
+// CAPL а о е у и д Ñ… Ñ‚ н Ñ ÑŒ ENTER
+// CAPL a o e u i d h t n s - ENTER
+// CAPL A O E U I D H T N S _ ENTER
+//
+// SHIFT " Я Ж К РБ М Ш В З SHIFT
+// SHIFT ' Ñ Ð¶ к Ñ‘ б м ш в з SHIFT
+// SHIFT â q j k x b m w v z SHIFT
+// SHIFT Â Q J K X B M W V Z
+//
+// Legend: dX -> dead_X
+//
+// en dash: AltGr-hyphen_minus
+// em dash: Shift-AltGr-hyphen_minus
+// dead_doublegrave: AltGr-asterisk
+// dead_abovedot: on AltGr-backslash
+// dead_belowdot: on Shift-AltGr-backslash
+
+partial alphanumeric_keys
+xkb_symbols "dpr" {
+ include "ru(phonetic)"
+
+ name[Group1] = "Russia - Dvorak Phonetic";
+
+ // Unmodified Shift AltGr Shift+AltGr
+ // symbols row, left side
+ key <TLDE> { [ dollar, asciitilde, dead_tilde, cent ] };
+ key <AE01> { [ ampersand, percent, oslash, Ooblique ] };
+ key <AE02> { [ bracketleft, 7, EuroSign, sterling ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE03> { [ braceleft, 5, yen, currency ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE04> { [ braceright, 3, dead_hook ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE05> { [ parenleft, 1, dead_diaeresis ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE06> { [ equal, 9, dead_cedilla ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+
+ // symbols row, right side
+ key <AE07> { [ asterisk, 0, dead_doublegrave ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE08> { [ parenright, 2, dead_grave ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE09> { [ plus, 4, dead_acute ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE10> { [ bracketright, 6, dead_doubleacute ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE11> { [ exclam, 8, exclamdown ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE12> { [ Cyrillic_tse, Cyrillic_TSE, numbersign, grave ] };
+ key <BKSP> { [ BackSpace ] };
+
+ // upper row, left side
+ key <AD01> { [ semicolon, colon, adiaeresis, Adiaeresis ] };
+ key <AD02> { [ comma, less, guillemotleft, degree ] };
+ key <AD03> { [ period, greater, guillemotright, periodcentered ] };
+ key <AD04> { [ Cyrillic_pe, Cyrillic_PE, p, P ] };
+ key <AD05> { [ Cyrillic_yeru, Cyrillic_YERU, y, Y ] };
+
+ // upper row, right side
+ key <AD06> { [ Cyrillic_ef, Cyrillic_EF, f, F ] };
+ key <AD07> { [ Cyrillic_ghe, Cyrillic_GHE, g, G ] };
+ key <AD08> { [ Cyrillic_che, Cyrillic_CHE, c, C ] };
+ key <AD09> { [ Cyrillic_er, Cyrillic_ER, r, R ] };
+ key <AD10> { [ Cyrillic_el, Cyrillic_EL, l, L ] };
+ key <AD11> { [ Cyrillic_shcha, Cyrillic_SHCHA, question, slash ] };
+ key <AD12> { [ Cyrillic_shorti, Cyrillic_SHORTI,at, asciicircum] };
+ key <BKSL> { [ question, slash, bar, backslash ] };
+
+ // home row, left side
+ key <AC01> { [ Cyrillic_a, Cyrillic_A, a, A ] };
+ key <AC02> { [ Cyrillic_o, Cyrillic_O, o, O ] };
+ key <AC03> { [ Cyrillic_ie, Cyrillic_IE, e, E ] };
+ key <AC04> { [ Cyrillic_u, Cyrillic_U, u, U ] };
+ key <AC05> { [ Cyrillic_i, Cyrillic_I, i, I ] };
+
+ // home row, right side
+ key <AC06> { [ Cyrillic_de, Cyrillic_DE, d, D ] };
+ key <AC07> { [ Cyrillic_ha, Cyrillic_HA, h, H ] };
+ key <AC08> { [ Cyrillic_te, Cyrillic_TE, t, T ] };
+ key <AC09> { [ Cyrillic_en, Cyrillic_EN, n, N ] };
+ key <AC10> { [ Cyrillic_es, Cyrillic_ES, s, S ] };
+ key <AC11> { [ Cyrillic_softsign,Cyrillic_hardsign,minus, underscore ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+
+ // lower row, left side
+ key <AB01> { [ apostrophe, quotedbl, acircumflex, Acircumflex] };
+ key <AB02> { [ Cyrillic_ya, Cyrillic_YA, q, Q ] };
+ key <AB03> { [ Cyrillic_zhe, Cyrillic_ZHE, j, J ] };
+ key <AB04> { [ Cyrillic_ka, Cyrillic_KA, k, K ] };
+ key <AB05> { [ Cyrillic_yu, Cyrillic_YU, x, X ] };
+
+ // lower row, right side
+ key <AB06> { [ Cyrillic_be, Cyrillic_BE, b, B ] };
+ key <AB07> { [ Cyrillic_em, Cyrillic_EM, m, M ] };
+ key <AB08> { [ Cyrillic_sha, Cyrillic_SHA, w, W ] };
+ key <AB09> { [ Cyrillic_ve, Cyrillic_VE, v, V ] };
+ key <AB10> { [ Cyrillic_ze, Cyrillic_ZE, z, Z ] };
+ key <AB11> { [ Shift_R, Shift_R, Shift_R, Shift_R ] };
+
+};
diff --git a/dot_xkb/symbols/icd b/dot_xkb/symbols/icd
new file mode 100644
index 0000000..9ace6b7
--- /dev/null
+++ b/dot_xkb/symbols/icd
@@ -0,0 +1,111 @@
+// International Coder Dvorak
+// By: Ryan Kavanagh <rak@ryanak.ca> , http://ryanak.ca/
+//
+// Optimised for typing in English, French and Spanish.
+//
+// Based on the Dvorak International (dvorak-intl) layout:
+// Stephane Magnenat (stephane at magnenat dot net, http://stephane.magnenat.net)
+// Based on information from http://www.poupinou.org/dvorak/index.html
+// Based on the Programmer Dvorak (dvp) layout:
+// Programmer Dvorak, by Roland Kaufmann <rlndkfmn at gmail dot com>
+// License: BSD, available at <http://www.kaufmann.no/roland/dvorak/license.html>
+//
+// SHIFT: ~ % 7 5 3 1 9 0 2 4 6 8 ` BCKSP
+// NORMAL: $ & [ { } ( = * ) + ] ! # BCKSP
+// AltGr: ¢ ¤ € £ d˘ d¨ d¸ d`` d` d´ dË Â¡ dËš BCKSP
+// SFT-AG: d~ ₽ ¥ d˳ BCKSP
+//
+// TAB : < > P Y F G C R L ? ^ |
+// TAB ; , . p y f g c r l / @ \
+// TAB ä « » ü í ç þ ¿ dˆ d'
+// TAB Ä ° · Ü à Ç Þ dˇ d.
+//
+// CAPL A O E U I D H T N S _ ENTER
+// CAPL a o e u i d h t n s - ENTER
+// CAPL à ó é û î ð œ æ ñ ß – ENTER
+// CAPL À Ó É Û Î à Œ Æ Ñ ‾ — ENTER
+//
+// SHIFT " Q J K X B M W V Z SHIFT
+// SHIFT ' q j k x b m w v z SHIFT
+// SHIFT â ô è ù ï ê ¶ SHIFT
+// SHIFT Â Ô È Ù à Ê §
+//
+// Legend: dX -> dead_X
+//
+// en dash: AltGr-hyphen_minus
+// em dash: Shift-AltGr-hyphen_minus
+// dead_doublegrave: AltGr-asterisk
+// dead_abovedot: on AltGr-backslash
+// dead_belowdot: on Shift-AltGr-backslash
+
+partial alphanumeric_keys
+xkb_symbols "icd" {
+ include "us(dvp)"
+
+ name[Group1] = "USA - International Coder Dvorak";
+
+ // Unmodified Shift AltGr Shift+AltGr
+ // symbols row, left side
+ key <TLDE> { [ dollar, asciitilde, cent, dead_tilde ] };
+ key <AE01> { [ ampersand, percent, currency, U20BD ] };
+ key <AE02> { [ bracketleft, 7, EuroSign, yen ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE03> { [ braceleft, 5, sterling ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE04> { [ braceright, 3, dead_hook ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE05> { [ parenleft, 1, dead_diaeresis ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE06> { [ equal, 9, dead_cedilla ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+
+ // symbols row, right side
+ key <AE07> { [ asterisk, 0, dead_doublegrave ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE08> { [ parenright, 2, dead_grave ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE09> { [ plus, 4, dead_acute ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE10> { [ bracketright, 6, dead_doubleacute ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE11> { [ exclam, 8, exclamdown ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+ key <AE12> { [ numbersign, grave, dead_abovering, dead_belowring ] };
+ key <BKSP> { [ BackSpace ] };
+
+ // upper row, left side
+ key <AD01> { [ semicolon, colon, adiaeresis, Adiaeresis ] };
+ key <AD02> { [ comma, less, guillemotleft, degree ] };
+ key <AD03> { [ period, greater, guillemotright, periodcentered ] };
+ key <AD04> { [ p, P, udiaeresis, Udiaeresis ] };
+ key <AD05> { [ y, Y, iacute, Iacute ] };
+
+ // upper row, right side
+ key <AD06> { [ f, F, udiaeresis, Udiaeresis ] };
+ key <AD07> { [ g, G ] };
+ key <AD08> { [ c, C, ccedilla, Ccedilla ] };
+ key <AD09> { [ r, R ] };
+ key <AD10> { [ l, L, thorn, THORN ] };
+ key <AD11> { [ slash, question, questiondown ] };
+ key <AD12> { [ at, asciicircum, dead_circumflex, dead_caron ] };
+ key <BKSL> { [ backslash, bar, dead_abovedot, dead_belowdot ] };
+
+ // home row, left side
+ key <AC01> { [ a, A, agrave, Agrave ] };
+ key <AC02> { [ o, O, oacute, Oacute ] };
+ key <AC03> { [ e, E, eacute, Eacute ] };
+ key <AC04> { [ u, U, ucircumflex, Ucircumflex] };
+ key <AC05> { [ i, I, icircumflex, Icircumflex] };
+
+ // home row, right side
+ key <AC06> { [ d, D, eth, ETH ] };
+ key <AC07> { [ h, H, oe, OE ] };
+ key <AC08> { [ t, T, ae, AE ] };
+ key <AC09> { [ n, N, ntilde, Ntilde ] };
+ key <AC10> { [ s, S, ssharp, overline ] };
+ key <AC11> { [ minus, underscore, endash, emdash ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" };
+
+ // lower row, left side
+ key <AB01> { [ apostrophe, quotedbl, acircumflex, Acircumflex] };
+ key <AB02> { [ q, Q, ocircumflex, Ocircumflex] };
+ key <AB03> { [ j, J, egrave, Egrave ] };
+ key <AB04> { [ k, K, ugrave, Ugrave ] };
+ key <AB05> { [ x, X, idiaeresis, Idiaeresis ] };
+
+ // lower row, right side
+ key <AB06> { [ b, B ] };
+ key <AB07> { [ m, M, ecircumflex, Ecircumflex] };
+ key <AB08> { [ w, W, paragraph, section ] };
+ key <AB11> { [ Shift_R, Shift_R, Shift_R, Shift_R ] };
+
+};
diff --git a/dot_xkb/symbols/lalt_meta b/dot_xkb/symbols/lalt_meta
new file mode 100644
index 0000000..9e27570
--- /dev/null
+++ b/dot_xkb/symbols/lalt_meta
@@ -0,0 +1,4 @@
+partial modifier_keys
+xkb_symbols "lalt_meta" {
+ key <LALT> { [ Meta_L ] } ;
+};
diff --git a/dot_xkb/symbols/myswap b/dot_xkb/symbols/myswap
new file mode 100644
index 0000000..474d7d7
--- /dev/null
+++ b/dot_xkb/symbols/myswap
@@ -0,0 +1,5 @@
+partial modifier_keys
+xkb_symbols "switch_lalt_lsuper" {
+ key <LALT> { [ Super_L ] } ;
+ key <LMTA> { [ Alt_L ] };
+};
diff --git a/dot_xmonad/executable_build b/dot_xmonad/executable_build
new file mode 100644
index 0000000..fa37a66
--- /dev/null
+++ b/dot_xmonad/executable_build
@@ -0,0 +1,13 @@
+#!/bin/ksh -eu
+
+output_file="${1}"
+
+if [ "${output_file}" -nt xmonad.hs ] && [ "${output_file}" -nt /usr/local/bin/xmonad ]; then
+ echo "${output_file}" is newer than xmonad.hs
+ exit 0
+fi
+
+cabal v2-install exe:xmonad-config --overwrite-policy=always --install-method=copy
+
+[ -e "${output_file}" ] && mv -f "${output_file}" "${output_file}.old"
+install "${HOME}/.cabal/bin/xmonad-config" "${output_file}"
diff --git a/dot_xmonad/xmonad-config.cabal b/dot_xmonad/xmonad-config.cabal
new file mode 100644
index 0000000..87e58cf
--- /dev/null
+++ b/dot_xmonad/xmonad-config.cabal
@@ -0,0 +1,13 @@
+cabal-version: 2.4
+
+name: xmonad-config
+version: 0.1.0.0
+synopsis: XMonad config
+author: Greg Steuck
+maintainer: xmonad@nest.cx
+
+executable xmonad-config
+ main-is: xmonad.hs
+ build-depends: base, containers, xmonad, xmonad-contrib
+ hs-source-dirs: .
+ default-language: Haskell2010
diff --git a/dot_xmonad/xmonad.hs.tmpl b/dot_xmonad/xmonad.hs.tmpl
new file mode 100644
index 0000000..ac70ae8
--- /dev/null
+++ b/dot_xmonad/xmonad.hs.tmpl
@@ -0,0 +1,423 @@
+{-# OPTIONS_GHC -W -fwarn-unused-imports -fno-warn-missing-signatures -O2 #-}
+import Control.Monad (liftM2)
+import Data.Map (fromList, toList, union)
+import System.Environment (getEnv, setEnv)
+import System.IO (hPutStrLn)
+import XMonad
+import XMonad.Actions.CopyWindow (copy, kill1, killAllOtherCopies)
+import XMonad.Actions.CycleWS (moveTo, nextWS, emptyWS, WSType(Not)
+ , prevWS, shiftToNext, shiftToPrev, toggleWS)
+import XMonad.Actions.DynamicWorkspaces (addWorkspacePrompt, removeWorkspace
+ , renameWorkspace, selectWorkspace
+ , withWorkspace)
+import XMonad.Actions.GridSelect (HasColorizer, GSConfig, buildDefaultGSConfig
+ , defaultColorizer, goToSelected
+ , gridselectWorkspace, gs_navigate, navNSearch)
+import XMonad.Actions.Submap (submap)
+import XMonad.Hooks.DynamicLog (dzenColor, dynamicLogWithPP
+ , ppCurrent, ppVisible, ppSep, ppHidden
+ , ppUrgent, ppTitle, ppExtras
+ , ppOrder, ppOutput, trim, wrap)
+import XMonad.Hooks.ManageDocks (avoidStruts, docks, docksEventHook
+ , ToggleStruts(ToggleStruts))
+import XMonad.Hooks.ManageHelpers (isFullscreen, doFullFloat)
+import XMonad.Hooks.UrgencyHook (focusUrgent)
+import XMonad.Layout.Accordion (Accordion(Accordion))
+import XMonad.Layout.Dishes (Dishes(Dishes))
+import XMonad.Layout.FixedColumn (FixedColumn(FixedColumn))
+import XMonad.Layout.Grid (Grid(Grid))
+import XMonad.Layout.LimitWindows (limitWindows)
+import XMonad.Layout.Magnifier (magnifiercz')
+import XMonad.Layout.MultiToggle (mkToggle, single, Toggle(Toggle))
+import XMonad.Layout.MultiToggle.Instances (StdTransformers(MIRROR))
+import XMonad.Layout.NoBorders (smartBorders)
+import XMonad.Layout.NoFrillsDecoration (activeBorderColor, activeColor
+ , activeTextColor, decoHeight, fontName
+ , inactiveBorderColor, inactiveColor
+ , inactiveTextColor, urgentColor
+ , urgentTextColor)
+import XMonad.Layout.PerWorkspace (onWorkspace)
+import XMonad.Layout.ResizableTile (ResizableTall(ResizableTall))
+import XMonad.Layout.Tabbed (shrinkText, tabbed)
+import XMonad.Layout.ThreeColumns (ThreeCol(ThreeColMid))
+import XMonad.Layout.ToggleLayouts (toggleLayouts, ToggleLayout(ToggleLayout))
+import XMonad.Layout.WindowNavigation (Navigate(Move))
+import XMonad.Prompt (fgColor, bgColor, XPPosition(Bottom), height, font
+ , position, promptBorderWidth)
+import XMonad.Prompt.Shell (shellPrompt)
+import XMonad.Util.Loggers (date, logCmd)
+import XMonad.Util.Run (spawnPipe)
+import XMonad.Util.Themes (theme, themeAuthor, themeDescription, ThemeInfo(TI)
+ , themeName)
+import XMonad.Util.Types (Direction1D(Next, Prev), Direction2D(L, R, U, D))
+import XMonad.StackSet (shiftMaster, greedyView, shift)
+
+---------------
+-- BINDINGS
+---------------
+
+myMod = mod4Mask -- windows key
+myCtrl = controlMask
+myTerminal = {{ if (eq .chezmoi.os "linux") }}"urxvtc"{{ else }}"xterm"{{ end }}
+
+-- Mouse bindings: default actions bound to mouse events
+myMouseBindings (XConfig {XMonad.modMask = modMask}) = fromList $
+ -- mod-button1 %! Set the window to floating mode and move by dragging
+ [ ((modMask, button1), (\w -> focus w >> mouseMoveWindow w
+ >> windows shiftMaster))
+ -- mod-button2 %! Raise the window to the top of the stack
+ , ((modMask, button2), (\w -> focus w >> windows shiftMaster))
+ -- mod-button3 %! Set the window to floating mode and resize by dragging
+ , ((modMask, button3), (\w -> focus w >> mouseResizeWindow w
+ >> windows shiftMaster))
+ -- you may also bind events to the mouse scroll wheel (button4 and button5)
+ , ((modMask, button5), (\_ -> moveTo Next (Not emptyWS)))
+ , ((modMask, button4), (\_ -> moveTo Prev (Not emptyWS)))
+ -- scroll wheel click, bottom right corner on trackball
+ , ((modMask, 6), (\w -> focus w >> kill))
+ , ((modMask, 8), (\w -> focus w >> kill))
+ ]
+
+mykeys _ = [
+ ((myMod, xK_Left), prevWS)
+ , ((myMod, xK_Right), nextWS)
+ , ((myMod .|. shiftMask, xK_Left), shiftToPrev >> prevWS)
+ , ((myMod .|. shiftMask, xK_Right), shiftToNext >> nextWS)
+ , ((myMod, xK_a), toggleWS)
+ , ((myMod, xK_z), shellPrompt myXPConfig)
+ , ((myMod, xK_g), goToSelected myGSConfig)
+ , ((myMod .|. shiftMask, xK_m), sendMessage $ Toggle MIRROR)
+ , ((myMod .|. shiftMask, xK_g), gridselectWorkspace myGSConfig greedyView)
+ , ((myMod, xK_x), sendMessage ToggleStruts)
+ , ((myMod, xK_F1), spawn "${HOME}/.screenlayout/`hostname`-work.sh")
+ , ((myMod, xK_F2), spawn "${HOME}/.screenlayout/`hostname`-home.sh")
+ , ((myMod, xK_F3), spawn "${HOME}/.screenlayout/`hostname`-solo.sh")
+ , ((myMod, xK_F4), spawn "sleep 0.5 && xset dpms force suspend")
+ , ((myMod, xK_F5), spawn "sleep 0.5 && xset dpms force off")
+ , ((myMod, xK_F6), spawn "sleep 0.5 && ${HOME}/bin/icd && ${HOME}/bin/mice.sh")
+ , ((myMod, xK_Up), spawn "sleep 0.5 && b u")
+ , ((myMod, xK_Down), spawn "sleep 0.5 && b d")
+ , ((myMod, xK_l), spawn {{ if (eq .chezmoi.os "linux") }}"slock xset dpms force off"{{ else }}"xlock"{{ end }})
+ , ((myMod .|. myCtrl .|. shiftMask, xK_Right), sendMessage $ Move R)
+ , ((myMod .|. myCtrl .|. shiftMask, xK_Left), sendMessage $ Move L)
+ , ((myMod .|. myCtrl .|. shiftMask, xK_Up), sendMessage $ Move U)
+ , ((myMod .|. myCtrl .|. shiftMask, xK_Down), sendMessage $ Move D)
+ , ((myMod, xK_BackSpace), focusUrgent)
+ , ((myMod, xK_s), sendMessage $ ToggleLayout)
+ , ((myMod, xK_b), submap . fromList $
+ [ ((m, k), f)
+ | m <- [0, myMod]
+ , (k, f) <- [ (xK_a, addWorkspacePrompt myXPConfig)
+ , (xK_c, withWorkspace myXPConfig
+ (windows . copy))
+ , (xK_d, kill1)
+ , (xK_k, removeWorkspace)
+ , (xK_m, withWorkspace myXPConfig
+ (windows . shift))
+ , (xK_o, killAllOtherCopies)
+ , (xK_r, renameWorkspace myXPConfig)
+ , (xK_s, selectWorkspace myXPConfig)
+ ]
+ ]
+ )]
+
+dvorakify kl = fromList $ map (\((m, k), d) -> ((m, dk k), d)) $ toList kl
+ where
+ dk :: KeySym -> KeySym
+ dk k | k == xK_grave = xK_dollar
+ | k == xK_asciitilde = xK_asciitilde
+
+ | k == xK_1 = xK_ampersand
+ | k == xK_exclam = xK_percent
+
+ | k == xK_2 = xK_bracketleft
+ | k == xK_at = xK_7
+
+ | k == xK_3 = xK_braceleft
+ | k == xK_numbersign = xK_5
+
+ | k == xK_4 = xK_braceright
+ | k == xK_dollar = xK_3
+
+ | k == xK_5 = xK_parenleft
+ | k == xK_percent = xK_1
+
+ | k == xK_6 = xK_equal
+ | k == xK_asciicircum = xK_9
+
+ | k == xK_7 = xK_asterisk
+ | k == xK_ampersand = xK_0
+
+ | k == xK_8 = xK_parenright
+ | k == xK_asterisk = xK_2
+
+ | k == xK_9 = xK_plus
+ | k == xK_parenleft = xK_4
+
+ | k == xK_0 = xK_bracketright
+ | k == xK_parenright = xK_6
+
+ | k == xK_minus = xK_exclam
+ | k == xK_underscore = xK_8
+
+ | k == xK_equal = xK_numbersign
+ | k == xK_plus = xK_grave
+
+ | k == xK_q = xK_semicolon -- upper row, left side
+ | k == xK_Q = xK_colon
+
+ | k == xK_w = xK_comma
+ | k == xK_W = xK_less
+
+ | k == xK_e = xK_period
+ | k == xK_E = xK_greater
+
+ | k == xK_bracketleft = xK_slash -- upper row, top right
+ | k == xK_braceleft = xK_question
+
+ | k == xK_bracketright = xK_at
+ | k == xK_braceright = xK_asciicircum
+
+ | k == xK_R = xK_P
+ | k == xK_T = xK_Y
+ | k == xK_Y = xK_F
+ | k == xK_U = xK_G
+ | k == xK_I = xK_C
+ | k == xK_O = xK_R
+ | k == xK_P = xK_L
+ | k == xK_A = xK_A
+ | k == xK_S = xK_O
+ | k == xK_D = xK_E
+ | k == xK_F = xK_U
+ | k == xK_G = xK_I
+ | k == xK_H = xK_D
+ | k == xK_J = xK_H
+ | k == xK_K = xK_T
+ | k == xK_L = xK_N
+ | k == xK_Z = xK_quotedbl
+ | k == xK_X = xK_Q
+ | k == xK_C = xK_J
+ | k == xK_V = xK_K
+ | k == xK_B = xK_X
+ | k == xK_N = xK_B
+ | k == xK_M = xK_M
+
+ | k == xK_r = xK_p
+ | k == xK_t = xK_y
+ | k == xK_y = xK_f
+ | k == xK_u = xK_g
+ | k == xK_i = xK_c
+ | k == xK_o = xK_r
+ | k == xK_p = xK_l
+ | k == xK_a = xK_a
+ | k == xK_s = xK_o
+ | k == xK_d = xK_e
+ | k == xK_f = xK_u
+ | k == xK_g = xK_i
+ | k == xK_h = xK_d
+ | k == xK_j = xK_h
+ | k == xK_k = xK_t
+ | k == xK_l = xK_n
+ | k == xK_z = xK_apostrophe
+ | k == xK_x = xK_q
+ | k == xK_c = xK_j
+ | k == xK_v = xK_k
+ | k == xK_b = xK_x
+ | k == xK_n = xK_b
+ | k == xK_m = xK_m
+
+ | k == xK_comma = xK_w -- bottom right
+ | k == xK_less = xK_W
+
+ | k == xK_period = xK_v
+ | k == xK_greater = xK_V
+
+ | k == xK_slash = xK_z
+ | k == xK_question = xK_Z
+
+ | otherwise = k
+
+-------------
+-- THEMES
+-------------
+
+-- Color names are easier to remember:
+colorBlack = "#000000"
+colorOrange = "#ff7701"
+-- colorDarkGray = "#171717"
+-- colorPink = "#e3008d"
+colorGreen = "#00aa4a"
+colorBlue = "#008dd5"
+colorYellow = "#fee100"
+colorWhite = "#cfbfad"
+-- colorBrightGreen = "#00FF00"
+colorRed = "#FF0000"
+
+xftFont = "Inconsolata:size=8"
+
+newTheme :: ThemeInfo
+newTheme = TI "" "" "" def
+
+rakTheme :: ThemeInfo
+rakTheme =
+ newTheme { themeName = "rakTheme"
+ , themeAuthor = "Ryan Kavanagh"
+ , themeDescription = "Small decorations: orange and blue theme"
+ , theme = def { activeColor = colorBlack
+ , inactiveColor = colorBlack
+ , activeBorderColor = colorOrange
+ , inactiveBorderColor = colorBlack
+ , activeTextColor = colorOrange
+ , inactiveTextColor = colorBlue
+ , urgentColor = colorRed
+ , urgentTextColor = colorYellow
+ , decoHeight = 13
+ , fontName = "Inconsolata"
+ }
+ }
+
+myTheme = theme rakTheme
+
+myXPConfig = def {
+ fgColor = "white"
+ , bgColor = "black"
+ , promptBorderWidth = 0
+ , position = Bottom
+ , height = 15
+ , font = "xft:" ++ xftFont
+ }
+
+-----------------
+-- LAYOUTS
+-----------------
+
+-- My workspaces
+
+myWorkspaces = ["term", "web", "chatter", "reading", "gnus", "music", "LaTeX", "work", "radio"]
+ ++ (map show [9..20])
+
+-- smartBorders removes borders when there's no ambiguity
+myLayout = mkToggle (single MIRROR) (smartBorders $ toggleLayouts Full
+ $ avoidStruts perWS)
+ where
+ -- Per workspace layout selection.
+ perWS = onWorkspace "term" (myTall ||| customRyan) $
+ onWorkspace "web" (tabbed shrinkText myTheme
+ ||| mySplit ||| myTCM) $
+ onWorkspace "LaTeX" latexFirst $
+ customRyan
+
+ -- Each of these allows toggling through a set of layouts
+ -- in the same logical order, but from a different starting point.
+ customRyan = myGrid ||| myDish ||| Accordion ||| myCode
+ ||| myFixed ||| myTall
+ latexFirst = myFixed ||| customRyan
+
+ -- This is a three column mode, with the master in the middle.
+ myTCM = ThreeColMid 1 (3/100) (1/2)
+ -- This is a tall-like layout with magnification.
+ -- The master window is fixed at 80 columns wide, making this good
+ -- for coding. Limited to 3 visible windows at a time to ensure all
+ -- are a good size.
+ myCode = limitWindows 3 $ magnifiercz' 1.4 $ FixedColumn 1 20 80 10
+
+ -- Stack with one large master window.
+ -- It's easy to overflow a stack to the point that windows are too
+ -- small, so only show first 5.
+ myDish = limitWindows 5 $ Dishes nmaster ratio
+ where
+ -- The default number of windows in the master pane
+ nmaster = 1
+ -- Default proportion of screen occupied by other panes
+ ratio = 1/5
+
+ -- Split screen, optimized for web browsing.
+ mySplit = magnifiercz' 1.4 $ Tall nmaster delta ratio
+ where
+ -- The default number of windows in the master pane
+ nmaster = 1
+ -- Percent of screen to increment by when resizing panes
+ delta = 3/100
+ -- Default proportion of screen occupied by master pane
+ ratio = 60/100
+
+ -- Standard grid.
+ myGrid = Grid
+
+ myFixed = FixedColumn 1 20 80 10
+
+ myTall = ResizableTall nmaster delta ratio [50/100]
+ where
+ nmaster = 1
+ delta = 3/100
+ ratio = 1/2
+
+-------------------
+-- STATUS BAR
+-------------------
+
+statusBarCmd = "dzen2" ++
+ " -dock" ++
+ " -bg '" ++ colorBlack ++ "'" ++
+ " -fg '" ++ colorBlue ++ "'" ++
+ " -sa c" ++
+ " -fn '" ++ xftFont ++ "'" ++
+ " -w 925 -x 0 -y 0 -ta l -e ''"
+
+-- dynamiclog pretty printer for dzen
+mPP h = def
+ { ppCurrent = dzenColor colorOrange colorBlack
+ , ppVisible = dzenColor colorGreen colorBlack
+ , ppHidden = dzenColor colorBlue colorBlack
+ , ppUrgent = dzenColor colorRed colorBlack . wrap "[" "]"
+ , ppSep = dzenColor "grey60" colorBlack " ^r(1x8) "
+ , ppTitle = dzenColor colorWhite colorBlack . trim
+ , ppOrder = \(ws:l:t:d:b:o) -> [b,d,ws,l,t] ++ o
+ , ppExtras = [date "%H:%M:%S", batteryCheck]
+ , ppOutput = hPutStrLn h
+ }
+ where
+ batteryCheck = logCmd ("${HOME}/.dzen/battery.sh")
+
+---------------------
+-- GENERAL CONFIG
+--------------------
+
+myGSConfig :: HasColorizer a => GSConfig a
+myGSConfig = (buildDefaultGSConfig defaultColorizer) { gs_navigate = navNSearch }
+
+myManageHook = composeAll . concat $
+ [ [ className =? c --> doFloat | c <- floats]
+ , [ className =? c --> viewShift "web" | c <- web]
+ , [ className =? c --> viewShift "chatter" | c <- chatter]
+ , [ className =? c --> viewShift "music" | c <- music]
+ , [ isFullscreen --> doFullFloat ]
+ ]
+ where
+ viewShift = doF . liftM2 (.) greedyView shift
+ floats = ["MPlayer"]
+ web = ["Firefox", "Firefox-esr", "Navigator", "google-chrome", "Google-chrome"]
+ chatter = ["slack", "Slack"]
+ music = ["pavucontrol", "Pavucontrol"]
+
+myConfig dzenPipe = docks $ def {
+ workspaces = myWorkspaces
+ , modMask = myMod
+ , terminal = myTerminal
+ , normalBorderColor = inactiveBorderColor myTheme
+ , focusedBorderColor = activeBorderColor myTheme
+ , borderWidth = 1
+ , layoutHook = myLayout
+ , manageHook = manageHook def <+> myManageHook
+ , mouseBindings = myMouseBindings
+ , keys = \x -> (fromList $ mykeys x)
+ `union` dvorakify (keys def x)
+ , logHook = dynamicLogWithPP $ mPP dzenPipe
+ }
+
+main = do
+ dzenPipe <- spawnPipe statusBarCmd
+ path <- getEnv "PATH"
+ home <- getEnv "HOME"
+ setEnv "PATH" (home ++ "/bin:" ++ path)
+ xmonad $ myConfig dzenPipe
diff --git a/dot_zlogout b/dot_zlogout
new file mode 100644
index 0000000..d3e5006
--- /dev/null
+++ b/dot_zlogout
@@ -0,0 +1,5 @@
+# when leaving the console clear the screen to increase privacy
+
+if [ "$SHLVL" = 1 ]; then
+ [ -x /usr/bin/clear ] && /usr/bin/clear
+fi
diff --git a/dot_zsh/p10k.zsh b/dot_zsh/p10k.zsh
new file mode 100644
index 0000000..3a41f03
--- /dev/null
+++ b/dot_zsh/p10k.zsh
@@ -0,0 +1,1611 @@
+# Generated by Powerlevel10k configuration wizard on 2021-12-13 at 15:06 EST.
+# Based on romkatv/powerlevel10k/config/p10k-lean.zsh, checksum 54401.
+# Wizard options: compatible, unicode, lean, 24h time, 1 line, compact, concise,
+# transient_prompt, instant_prompt=verbose.
+# Type `p10k configure` to generate another config.
+#
+# Config for Powerlevel10k with lean prompt style. Type `p10k configure` to generate
+# your own config based on it.
+#
+# Tip: Looking for a nice color? Here's a one-liner to print colormap.
+#
+# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done
+
+# Temporarily change options.
+'builtin' 'local' '-a' 'p10k_config_opts'
+[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases')
+[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob')
+[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand')
+'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand'
+
+() {
+ emulate -L zsh -o extended_glob
+
+ # Unset all configuration options. This allows you to apply configuration changes without
+ # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`.
+ unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR'
+
+ # Zsh >= 5.1 is required.
+ autoload -Uz is-at-least && is-at-least 5.1 || return
+
+ # The list of segments shown on the left. Fill it with the most important segments.
+ typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
+ # os_icon # os identifier
+ dir # current directory
+ vcs # git status
+ prompt_char # prompt symbol
+ )
+
+ # The list of segments shown on the right. Fill it with less important segments.
+ # Right prompt on the last prompt line (where you are typing your commands) gets
+ # automatically hidden when the input line reaches it. Right prompt above the
+ # last prompt line gets hidden if it would overlap with left prompt.
+ typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
+ status # exit code of the last command
+ command_execution_time # duration of the last command
+ background_jobs # presence of background jobs
+ direnv # direnv status (https://direnv.net/)
+ asdf # asdf version manager (https://github.com/asdf-vm/asdf)
+ virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html)
+ anaconda # conda environment (https://conda.io/)
+ pyenv # python environment (https://github.com/pyenv/pyenv)
+ goenv # go environment (https://github.com/syndbg/goenv)
+ nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv)
+ nvm # node.js version from nvm (https://github.com/nvm-sh/nvm)
+ nodeenv # node.js environment (https://github.com/ekalinin/nodeenv)
+ # node_version # node.js version
+ # go_version # go version (https://golang.org)
+ # rust_version # rustc version (https://www.rust-lang.org)
+ # dotnet_version # .NET version (https://dotnet.microsoft.com)
+ # php_version # php version (https://www.php.net/)
+ # laravel_version # laravel php framework version (https://laravel.com/)
+ # java_version # java version (https://www.java.com/)
+ # package # name@version from package.json (https://docs.npmjs.com/files/package.json)
+ rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv)
+ rvm # ruby version from rvm (https://rvm.io)
+ fvm # flutter version management (https://github.com/leoafarias/fvm)
+ luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv)
+ jenv # java version from jenv (https://github.com/jenv/jenv)
+ plenv # perl version from plenv (https://github.com/tokuhirom/plenv)
+ phpenv # php version from phpenv (https://github.com/phpenv/phpenv)
+ scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv)
+ haskell_stack # haskell version from stack (https://haskellstack.org/)
+ kubecontext # current kubernetes context (https://kubernetes.io/)
+ terraform # terraform workspace (https://www.terraform.io)
+ # terraform_version # terraform version (https://www.terraform.io)
+ aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)
+ aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/)
+ azure # azure account name (https://docs.microsoft.com/en-us/cli/azure)
+ gcloud # google cloud cli account and project (https://cloud.google.com/)
+ google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production)
+ toolbox # toolbox name (https://github.com/containers/toolbox)
+ context # user@hostname
+ nordvpn # nordvpn connection status, linux only (https://nordvpn.com/)
+ ranger # ranger shell (https://github.com/ranger/ranger)
+ nnn # nnn shell (https://github.com/jarun/nnn)
+ xplr # xplr shell (https://github.com/sayanarijit/xplr)
+ vim_shell # vim shell indicator (:sh)
+ midnight_commander # midnight commander shell (https://midnight-commander.org/)
+ nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html)
+ # vpn_ip # virtual private network indicator
+ # load # CPU load
+ # disk_usage # disk usage
+ # ram # free RAM
+ # swap # used swap
+ todo # todo items (https://github.com/todotxt/todo.txt-cli)
+ timewarrior # timewarrior tracking status (https://timewarrior.net/)
+ taskwarrior # taskwarrior task count (https://taskwarrior.org/)
+ time # current time
+ # ip # ip address and bandwidth usage for a specified network interface
+ # public_ip # public IP address
+ # proxy # system-wide http/https/ftp proxy
+ battery # internal battery
+ # wifi # wifi speed
+ # example # example user-defined segment (see prompt_example function below)
+ )
+
+ # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you.
+ typeset -g POWERLEVEL9K_MODE=compatible
+ # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid
+ # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added.
+ typeset -g POWERLEVEL9K_ICON_PADDING=none
+
+ # Basic style options that define the overall look of your prompt. You probably don't want to
+ # change them.
+ typeset -g POWERLEVEL9K_BACKGROUND= # transparent background
+ typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace
+ typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space
+ typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol
+
+ # When set to true, icons appear before content on both sides of the prompt. When set
+ # to false, icons go after content. If empty or not set, icons go before content in the left
+ # prompt and after content in the right prompt.
+ #
+ # You can also override it for a specific segment:
+ #
+ # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false
+ #
+ # Or for a specific segment in specific state:
+ #
+ # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false
+ typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=true
+
+ # Add an empty line before each prompt.
+ typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=false
+
+ # Connect left prompt lines with these symbols.
+ typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=
+ typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX=
+ typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX=
+ # Connect right prompt lines with these symbols.
+ typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX=
+ typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX=
+ typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX=
+
+ # The left end of left prompt.
+ typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL=
+ # The right end of right prompt.
+ typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL=
+
+ # Ruler, a.k.a. the horizontal line before each prompt. If you set it to true, you'll
+ # probably want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false above and
+ # POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' below.
+ typeset -g POWERLEVEL9K_SHOW_RULER=false
+ typeset -g POWERLEVEL9K_RULER_CHAR='─' # reasonable alternative: '·'
+ typeset -g POWERLEVEL9K_RULER_FOREGROUND=242
+
+ # Filler between left and right prompt on the first prompt line. You can set it to '·' or '─'
+ # to make it easier to see the alignment between left and right prompt and to separate prompt
+ # from command output. It serves the same purpose as ruler (see above) without increasing
+ # the number of prompt lines. You'll probably want to set POWERLEVEL9K_SHOW_RULER=false
+ # if using this. You might also like POWERLEVEL9K_PROMPT_ADD_NEWLINE=false for more compact
+ # prompt.
+ typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' '
+ if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then
+ # The color of the filler.
+ typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=242
+ # Add a space between the end of left prompt and the filler.
+ typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=' '
+ # Add a space between the filler and the start of right prompt.
+ typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL=' '
+ # Start filler from the edge of the screen if there are no left segments on the first line.
+ typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}'
+ # End filler on the edge of the screen if there are no right segments on the first line.
+ typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}'
+ fi
+
+ #################################[ os_icon: os identifier ]##################################
+ # OS identifier color.
+ typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='â­'
+
+ ################################[ prompt_char: prompt symbol ]################################
+ # Green prompt symbol if the last command succeeded.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76
+ # Red prompt symbol if the last command failed.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196
+ # Default prompt symbol.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='â¯'
+ # Prompt symbol in command vi mode.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='â®'
+ # Prompt symbol in visual vi mode.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V'
+ # Prompt symbol in overwrite vi mode.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='â–¶'
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true
+ # No line terminator if prompt_char is the last segment.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=''
+ # No line introducer if prompt_char is the first segment.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL=
+
+ ##################################[ dir: current directory ]##################################
+ # Default current directory color.
+ typeset -g POWERLEVEL9K_DIR_FOREGROUND=31
+ # If directory is too long, shorten some of its segments to the shortest possible unique
+ # prefix. The shortened directory can be tab-completed to the original.
+ typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique
+ # Replace removed segment suffixes with this symbol.
+ typeset -g POWERLEVEL9K_SHORTEN_DELIMITER=
+ # Color of the shortened directory segments.
+ typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103
+ # Color of the anchor directory segments. Anchor segments are never shortened. The first
+ # segment is always an anchor.
+ typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39
+ # Display anchor directory segments in bold.
+ typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true
+ # Don't shorten directories that contain any of these files. They are anchors.
+ local anchor_files=(
+ .bzr
+ .citc
+ .git
+ .hg
+ .node-version
+ .python-version
+ .go-version
+ .ruby-version
+ .lua-version
+ .java-version
+ .perl-version
+ .php-version
+ .tool-version
+ .shorten_folder_marker
+ .svn
+ .terraform
+ CVS
+ Cargo.toml
+ composer.json
+ go.mod
+ package.json
+ stack.yaml
+ )
+ typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})"
+ # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains
+ # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is
+ # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first)
+ # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers
+ # and other directories don't.
+ #
+ # Optionally, "first" and "last" can be followed by ":<offset>" where <offset> is an integer.
+ # This moves the truncation point to the right (positive offset) or to the left (negative offset)
+ # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0"
+ # respectively.
+ typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false
+ # Don't shorten this many last directory segments. They are anchors.
+ typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1
+ # Shorten directory if it's longer than this even if there is space for it. The value can
+ # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty,
+ # directory will be shortened only when prompt doesn't fit or when other parameters demand it
+ # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below).
+ # If set to `0`, directory will always be shortened to its minimum length.
+ typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80
+ # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this
+ # many columns for typing commands.
+ typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40
+ # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least
+ # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands.
+ typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50
+ # If set to true, embed a hyperlink into the directory. Useful for quickly
+ # opening a directory in the file manager simply by clicking the link.
+ # Can also be handy when the directory is shortened, as it allows you to see
+ # the full directory that was used in previous commands.
+ typeset -g POWERLEVEL9K_DIR_HYPERLINK=false
+
+ # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON
+ # and POWERLEVEL9K_DIR_CLASSES below.
+ typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3
+
+ # The default icon shown next to non-writable and non-existent directories when
+ # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3.
+ typeset -g POWERLEVEL9K_LOCK_ICON='∅'
+
+ # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different
+ # directories. It must be an array with 3 * N elements. Each triplet consists of:
+ #
+ # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with
+ # extended_glob option enabled.
+ # 2. Directory class for the purpose of styling.
+ # 3. An empty string.
+ #
+ # Triplets are tried in order. The first triplet whose pattern matches $PWD wins.
+ #
+ # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories
+ # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively.
+ #
+ # For example, given these settings:
+ #
+ # typeset -g POWERLEVEL9K_DIR_CLASSES=(
+ # '~/work(|/*)' WORK ''
+ # '~(|/*)' HOME ''
+ # '*' DEFAULT '')
+ #
+ # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one
+ # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or
+ # WORK_NON_EXISTENT.
+ #
+ # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an
+ # option to define custom colors and icons for different directory classes.
+ #
+ # # Styling for WORK.
+ # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31
+ # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103
+ # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39
+ #
+ # # Styling for WORK_NOT_WRITABLE.
+ # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=31
+ # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=103
+ # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=39
+ #
+ # # Styling for WORK_NON_EXISTENT.
+ # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=31
+ # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=103
+ # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=39
+ #
+ # If a styling parameter isn't explicitly defined for some class, it falls back to the classless
+ # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls
+ # back to POWERLEVEL9K_DIR_FOREGROUND.
+ #
+ typeset -g POWERLEVEL9K_DIR_CLASSES=()
+
+ # Custom prefix.
+ # typeset -g POWERLEVEL9K_DIR_PREFIX='%fin '
+
+ #####################################[ vcs: git status ]######################################
+ # Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon.
+ typeset -g POWERLEVEL9K_VCS_BRANCH_ICON=
+
+ # Untracked files icon. It's really a question mark, your font isn't broken.
+ # Change the value of this parameter to show a different icon.
+ typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?'
+
+ # Formatter for Git status.
+ #
+ # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42.
+ #
+ # You can edit the function to customize how Git status looks.
+ #
+ # VCS_STATUS_* parameters are set by gitstatus plugin. See reference:
+ # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh.
+ function my_git_formatter() {
+ emulate -L zsh
+
+ if [[ -n $P9K_CONTENT ]]; then
+ # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from
+ # gitstatus plugin). VCS_STATUS_* parameters are not available in this case.
+ typeset -g my_git_format=$P9K_CONTENT
+ return
+ fi
+
+ if (( $1 )); then
+ # Styling for up-to-date Git status.
+ local meta='%f' # default foreground
+ local clean='%76F' # green foreground
+ local modified='%178F' # yellow foreground
+ local untracked='%39F' # blue foreground
+ local conflicted='%196F' # red foreground
+ else
+ # Styling for incomplete and stale Git status.
+ local meta='%244F' # grey foreground
+ local clean='%244F' # grey foreground
+ local modified='%244F' # grey foreground
+ local untracked='%244F' # grey foreground
+ local conflicted='%244F' # grey foreground
+ fi
+
+ local res
+
+ if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then
+ local branch=${(V)VCS_STATUS_LOCAL_BRANCH}
+ # If local branch name is at most 32 characters long, show it in full.
+ # Otherwise show the first 12 … the last 12.
+ # Tip: To always show local branch name in full without truncation, delete the next line.
+ (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line
+ res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}"
+ fi
+
+ if [[ -n $VCS_STATUS_TAG
+ # Show tag only if not on a branch.
+ # Tip: To always show tag, delete the next line.
+ && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line
+ ]]; then
+ local tag=${(V)VCS_STATUS_TAG}
+ # If tag name is at most 32 characters long, show it in full.
+ # Otherwise show the first 12 … the last 12.
+ # Tip: To always show tag name in full without truncation, delete the next line.
+ (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line
+ res+="${meta}#${clean}${tag//\%/%%}"
+ fi
+
+ # Display the current Git commit if there is no branch and no tag.
+ # Tip: To always display the current Git commit, delete the next line.
+ [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line
+ res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}"
+
+ # Show tracking branch name if it differs from local branch.
+ if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then
+ res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}"
+ fi
+
+ # Display "wip" if the latest commit's summary contains "wip" or "WIP".
+ if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then
+ res+=" ${modified}wip"
+ fi
+
+ # ⇣42 if behind the remote.
+ (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}"
+ # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42.
+ (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" "
+ (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}"
+ # ⇠42 if behind the push remote.
+ (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}"
+ (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" "
+ # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42.
+ (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}"
+ # *42 if have stashes.
+ (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}"
+ # 'merge' if the repo is in an unusual state.
+ [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}"
+ # ~42 if have merge conflicts.
+ (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}"
+ # +42 if have staged changes.
+ (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}"
+ # !42 if have unstaged changes.
+ (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}"
+ # ?42 if have untracked files. It's really a question mark, your font isn't broken.
+ # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon.
+ # Remove the next line if you don't want to see untracked files at all.
+ (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}"
+ # "─" if the number of unstaged files is unknown. This can happen due to
+ # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower
+ # than the number of files in the Git index, or due to bash.showDirtyState being set to false
+ # in the repository config. The number of staged and untracked files may also be unknown
+ # in this case.
+ (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─"
+
+ typeset -g my_git_format=$res
+ }
+ functions -M my_git_formatter 2>/dev/null
+
+ # Don't count the number of unstaged, untracked and conflicted files in Git repositories with
+ # more than this many files in the index. Negative value means infinity.
+ #
+ # If you are working in Git repositories with tens of millions of files and seeing performance
+ # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output
+ # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's
+ # config: `git config bash.showDirtyState false`.
+ typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1
+
+ # Don't show Git status in prompt for repositories whose workdir matches this pattern.
+ # For example, if set to '~', the Git repository at $HOME/.git will be ignored.
+ # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'.
+ typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~'
+
+ # Disable the default Git status formatting.
+ typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true
+ # Install our own Git status formatter.
+ typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}'
+ typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}'
+ # Enable counters for staged, unstaged, etc.
+ typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1
+
+ # Icon color.
+ typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76
+ typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244
+ # Custom icon.
+ typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION=
+ # Custom prefix.
+ # typeset -g POWERLEVEL9K_VCS_PREFIX='%fon '
+
+ # Show status of repositories of these types. You can add svn and/or hg if you are
+ # using them. If you do, your prompt may become slow even when your current directory
+ # isn't in an svn or hg reposotiry.
+ typeset -g POWERLEVEL9K_VCS_BACKENDS=(git)
+
+ # These settings are used for repositories other than Git or when gitstatusd fails and
+ # Powerlevel10k has to fall back to using vcs_info.
+ typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76
+ typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76
+ typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178
+
+ ##########################[ status: exit code of the last command ]###########################
+ # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and
+ # style them independently from the regular OK and ERROR state.
+ typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true
+
+ # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as
+ # it will signify success by turning green.
+ typeset -g POWERLEVEL9K_STATUS_OK=false
+ typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70
+ typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔'
+
+ # Status when some part of a pipe command fails but the overall exit status is zero. It may look
+ # like this: 1|0.
+ typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true
+ typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70
+ typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔'
+
+ # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as
+ # it will signify error by turning red.
+ typeset -g POWERLEVEL9K_STATUS_ERROR=false
+ typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160
+ typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='Ñ…'
+
+ # Status when the last command was terminated by a signal.
+ typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true
+ typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160
+ # Use terse signal names: "INT" instead of "SIGINT(2)".
+ typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false
+ typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='Ñ…'
+
+ # Status when some part of a pipe command fails and the overall exit status is also non-zero.
+ # It may look like this: 1|0.
+ typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true
+ typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160
+ typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='Ñ…'
+
+ ###################[ command_execution_time: duration of the last command ]###################
+ # Show duration of the last command if takes at least this many seconds.
+ typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3
+ # Show this many fractional digits. Zero means round to seconds.
+ typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0
+ # Execution time color.
+ typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=101
+ # Duration format: 1d 2h 3m 4s.
+ typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s'
+ # Custom icon.
+ typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION=
+ # Custom prefix.
+ # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook '
+
+ #######################[ background_jobs: presence of background jobs ]#######################
+ # Don't show the number of background jobs.
+ typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false
+ # Background jobs color.
+ typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=70
+ # Custom icon.
+ typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='≡'
+
+ #######################[ direnv: direnv status (https://direnv.net/) ]########################
+ # Direnv color.
+ typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]###############
+ # Default asdf color. Only used to display tools for which there is no color override (see below).
+ # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND.
+ typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66
+
+ # There are four parameters that can be used to hide asdf tools. Each parameter describes
+ # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at
+ # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to
+ # hide a tool, it gets shown.
+ #
+ # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and
+ # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands:
+ #
+ # asdf local python 3.8.1
+ # asdf global python 3.8.1
+ #
+ # After running both commands the current python version is 3.8.1 and its source is "local" as
+ # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false,
+ # it'll hide python version in this case because 3.8.1 is the same as the global version.
+ # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't
+ # contain "local".
+
+ # Hide tool versions that don't come from one of these sources.
+ #
+ # Available sources:
+ #
+ # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable"
+ # - local `asdf current` says "set by /some/not/home/directory/file"
+ # - global `asdf current` says "set by /home/username/file"
+ #
+ # Note: If this parameter is set to (shell local global), it won't hide tools.
+ # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES.
+ typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global)
+
+ # If set to false, hide tool versions that are the same as global.
+ #
+ # Note: The name of this parameter doesn't reflect its meaning at all.
+ # Note: If this parameter is set to true, it won't hide tools.
+ # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW.
+ typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false
+
+ # If set to false, hide tool versions that are equal to "system".
+ #
+ # Note: If this parameter is set to true, it won't hide tools.
+ # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM.
+ typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true
+
+ # If set to non-empty value, hide tools unless there is a file matching the specified file pattern
+ # in the current directory, or its parent directory, or its grandparent directory, and so on.
+ #
+ # Note: If this parameter is set to empty value, it won't hide tools.
+ # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments.
+ # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB.
+ #
+ # Example: Hide nodejs version when there is no package.json and no *.js files in the current
+ # directory, in `..`, in `../..` and so on.
+ #
+ # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json'
+ typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB=
+
+ # Ruby version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168
+ # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Python version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37
+ # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Go version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=37
+ # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Node.js version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70
+ # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Rust version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37
+ # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # .NET Core version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134
+ # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_DOTNET_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Flutter version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38
+ # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Lua version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32
+ # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Java version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32
+ # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Perl version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67
+ # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Erlang version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125
+ # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Elixir version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129
+ # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Postgres version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31
+ # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # PHP version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99
+ # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Haskell version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=172
+ # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Julia version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=70
+ # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]###########
+ # NordVPN connection indicator color.
+ typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39
+ # Hide NordVPN connection indicator when not connected.
+ typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION=
+ typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION=
+ # Custom icon.
+ typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='nord'
+
+ #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]##################
+ # Ranger shell color.
+ typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178
+ # Custom icon.
+ typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='â–²'
+
+ ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]#######################
+ # Nnn shell color.
+ typeset -g POWERLEVEL9K_NNN_FOREGROUND=72
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]##################
+ # xplr shell color.
+ typeset -g POWERLEVEL9K_XPLR_FOREGROUND=72
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ###########################[ vim_shell: vim shell indicator (:sh) ]###########################
+ # Vim shell indicator color.
+ typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]######
+ # Midnight Commander shell color.
+ typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]##
+ # Nix shell color.
+ typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74
+
+ # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line.
+ # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION=
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ##################################[ disk_usage: disk usage ]##################################
+ # Colors for different levels of disk usage.
+ typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35
+ typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220
+ typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160
+ # Thresholds for different levels of disk usage (percentage points).
+ typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90
+ typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95
+ # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent.
+ typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ######################################[ ram: free RAM ]#######################################
+ # RAM color.
+ typeset -g POWERLEVEL9K_RAM_FOREGROUND=66
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ #####################################[ swap: used swap ]######################################
+ # Swap color.
+ typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ######################################[ load: CPU load ]######################################
+ # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15.
+ typeset -g POWERLEVEL9K_LOAD_WHICH=5
+ # Load color when load is under 50%.
+ typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66
+ # Load color when load is between 50% and 70%.
+ typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178
+ # Load color when load is over 70%.
+ typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################
+ # Todo color.
+ typeset -g POWERLEVEL9K_TODO_FOREGROUND=110
+ # Hide todo when the total number of tasks is zero.
+ typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true
+ # Hide todo when the number of tasks after filtering is zero.
+ typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false
+
+ # Todo format. The following parameters are available within the expansion.
+ #
+ # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks.
+ # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering.
+ #
+ # These variables correspond to the last line of the output of `todo.sh -p ls`:
+ #
+ # TODO: 24 of 42 tasks shown
+ #
+ # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT.
+ #
+ # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT'
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############
+ # Timewarrior color.
+ typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110
+ # If the tracked task is longer than 24 characters, truncate and append "…".
+ # Tip: To always display tasks without truncation, delete the following parameter.
+ # Tip: To hide task names and display just the icon when time tracking is enabled, set the
+ # value of the following parameter to "".
+ typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}'
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]##############
+ # Taskwarrior color.
+ typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74
+
+ # Taskwarrior segment format. The following parameters are available within the expansion.
+ #
+ # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`.
+ # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`.
+ #
+ # Zero values are represented as empty parameters.
+ #
+ # The default format:
+ #
+ # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT'
+ #
+ # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT'
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ##################################[ context: user@hostname ]##################################
+ # Context color when running with privileges.
+ typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178
+ # Context color in SSH without privileges.
+ typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180
+ # Default context color (no privileges, no SSH).
+ typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180
+
+ # Context format when running with privileges: bold user@hostname.
+ typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m'
+ # Context format when in SSH without privileges: user@hostname.
+ typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m'
+ # Default context format (no privileges, no SSH): user@hostname.
+ typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m'
+
+ # Don't show context unless running with privileges or in SSH.
+ # Tip: Remove the next line to always show context.
+ typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION=
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # Custom prefix.
+ # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%fwith '
+
+ ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]###
+ # Python virtual environment color.
+ typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37
+ # Don't show Python version next to the virtual environment name.
+ typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false
+ # If set to "false", won't show virtualenv if pyenv is already shown.
+ # If set to "if-different", won't show virtualenv if it's the same as pyenv.
+ typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false
+ # Separate environment name from Python version only with a space.
+ typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER=
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ #####################[ anaconda: conda environment (https://conda.io/) ]######################
+ # Anaconda environment color.
+ typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37
+
+ # Anaconda segment format. The following parameters are available within the expansion.
+ #
+ # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment.
+ # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment.
+ # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below).
+ # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version).
+ #
+ # CONDA_PROMPT_MODIFIER can be configured with the following command:
+ #
+ # conda config --set env_prompt '({default_env}) '
+ #
+ # The last argument is a Python format string that can use the following variables:
+ #
+ # - prefix The same as CONDA_PREFIX.
+ # - default_env The same as CONDA_DEFAULT_ENV.
+ # - name The last segment of CONDA_PREFIX.
+ # - stacked_env Comma-separated list of names in the environment stack. The first element is
+ # always the same as default_env.
+ #
+ # Note: '({default_env}) ' is the default value of env_prompt.
+ #
+ # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER
+ # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former
+ # is empty.
+ typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}'
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################
+ # Pyenv color.
+ typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37
+ # Hide python version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global)
+ # If set to false, hide python version if it's the same as global:
+ # $(pyenv version-name) == $(pyenv global).
+ typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide python version if it's equal to "system".
+ typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true
+
+ # Pyenv segment format. The following parameters are available within the expansion.
+ #
+ # - P9K_CONTENT Current pyenv environment (pyenv version-name).
+ # - P9K_PYENV_PYTHON_VERSION Current python version (python --version).
+ #
+ # The default format has the following logic:
+ #
+ # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or
+ # starts with "$P9K_PYENV_PYTHON_VERSION/".
+ # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION".
+ typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}'
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################
+ # Goenv color.
+ typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37
+ # Hide go version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global)
+ # If set to false, hide go version if it's the same as global:
+ # $(goenv version-name) == $(goenv global).
+ typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide go version if it's equal to "system".
+ typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]##########
+ # Nodenv color.
+ typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70
+ # Hide node version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global)
+ # If set to false, hide node version if it's the same as global:
+ # $(nodenv version-name) == $(nodenv global).
+ typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide node version if it's equal to "system".
+ typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]###############
+ # Nvm color.
+ typeset -g POWERLEVEL9K_NVM_FOREGROUND=70
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############
+ # Nodeenv color.
+ typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70
+ # Don't show Node version next to the environment name.
+ typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false
+ # Separate environment name from Node version only with a space.
+ typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER=
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ##############################[ node_version: node.js version ]###############################
+ # Node version color.
+ typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70
+ # Show node version only when in a directory tree containing package.json.
+ typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ #######################[ go_version: go version (https://golang.org) ]########################
+ # Go version color.
+ typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37
+ # Show go version only when in a go project subdirectory.
+ typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ #################[ rust_version: rustc version (https://www.rust-lang.org) ]##################
+ # Rust version color.
+ typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37
+ # Show rust version only when in a rust project subdirectory.
+ typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################
+ # .NET version color.
+ typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134
+ # Show .NET version only when in a .NET project subdirectory.
+ typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ #####################[ php_version: php version (https://www.php.net/) ]######################
+ # PHP version color.
+ typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99
+ # Show PHP version only when in a PHP project subdirectory.
+ typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]###########
+ # Laravel version color.
+ typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ####################[ java_version: java version (https://www.java.com/) ]####################
+ # Java version color.
+ typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=32
+ # Show java version only when in a java project subdirectory.
+ typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true
+ # Show brief version.
+ typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]####
+ # Package color.
+ typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=117
+ # Package format. The following parameters are available within the expansion.
+ #
+ # - P9K_PACKAGE_NAME The value of `name` field in package.json.
+ # - P9K_PACKAGE_VERSION The value of `version` field in package.json.
+ #
+ # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}'
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]##############
+ # Rbenv color.
+ typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168
+ # Hide ruby version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global)
+ # If set to false, hide ruby version if it's the same as global:
+ # $(rbenv version-name) == $(rbenv global).
+ typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide ruby version if it's equal to "system".
+ typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ #######################[ rvm: ruby version from rvm (https://rvm.io) ]########################
+ # Rvm color.
+ typeset -g POWERLEVEL9K_RVM_FOREGROUND=168
+ # Don't show @gemset at the end.
+ typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false
+ # Don't show ruby- at the front.
+ typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############
+ # Fvm color.
+ typeset -g POWERLEVEL9K_FVM_FOREGROUND=38
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]###########
+ # Lua color.
+ typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32
+ # Hide lua version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global)
+ # If set to false, hide lua version if it's the same as global:
+ # $(luaenv version-name) == $(luaenv global).
+ typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide lua version if it's equal to "system".
+ typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################
+ # Java color.
+ typeset -g POWERLEVEL9K_JENV_FOREGROUND=32
+ # Hide java version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global)
+ # If set to false, hide java version if it's the same as global:
+ # $(jenv version-name) == $(jenv global).
+ typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide java version if it's equal to "system".
+ typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############
+ # Perl color.
+ typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67
+ # Hide perl version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global)
+ # If set to false, hide perl version if it's the same as global:
+ # $(plenv version-name) == $(plenv global).
+ typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide perl version if it's equal to "system".
+ typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############
+ # PHP color.
+ typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99
+ # Hide php version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global)
+ # If set to false, hide php version if it's the same as global:
+ # $(phpenv version-name) == $(phpenv global).
+ typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide php version if it's equal to "system".
+ typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]#######
+ # Scala color.
+ typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=160
+ # Hide scala version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global)
+ # If set to false, hide scala version if it's the same as global:
+ # $(scalaenv version-name) == $(scalaenv global).
+ typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide scala version if it's equal to "system".
+ typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]###########
+ # Haskell color.
+ typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=172
+ # Hide haskell version if it doesn't come from one of these sources.
+ #
+ # shell: version is set by STACK_YAML
+ # local: version is set by stack.yaml up the directory tree
+ # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml)
+ typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local)
+ # If set to false, hide haskell version if it's the same as in the implicit global project.
+ typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]#############
+ # Show kubecontext only when the the command you are typing invokes one of these tools.
+ # Tip: Remove the next line to always show kubecontext.
+ typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern'
+
+ # Kubernetes context classes for the purpose of using different colors, icons and expansions with
+ # different contexts.
+ #
+ # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element
+ # in each pair defines a pattern against which the current kubernetes context gets matched.
+ # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below)
+ # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters,
+ # you'll see this value in your prompt. The second element of each pair in
+ # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The
+ # first match wins.
+ #
+ # For example, given these settings:
+ #
+ # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=(
+ # '*prod*' PROD
+ # '*test*' TEST
+ # '*' DEFAULT)
+ #
+ # If your current kubernetes context is "deathray-testing/default", its class is TEST
+ # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'.
+ #
+ # You can define different colors, icons and content expansions for different classes:
+ #
+ # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28
+ # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <'
+ typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=(
+ # '*prod*' PROD # These values are examples that are unlikely
+ # '*test*' TEST # to match your needs. Customize them as needed.
+ '*' DEFAULT)
+ typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134
+ typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='â—‹'
+
+ # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext
+ # segment. Parameter expansions are very flexible and fast, too. See reference:
+ # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion.
+ #
+ # Within the expansion the following parameters are always available:
+ #
+ # - P9K_CONTENT The content that would've been displayed if there was no content
+ # expansion defined.
+ # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the
+ # output of `kubectl config get-contexts`.
+ # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the
+ # output of `kubectl config get-contexts`.
+ # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE
+ # in the output of `kubectl config get-contexts`. If there is no
+ # namespace, the parameter is set to "default".
+ # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the
+ # output of `kubectl config get-contexts`.
+ #
+ # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS),
+ # the following extra parameters are available:
+ #
+ # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks".
+ # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID.
+ # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone.
+ # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster.
+ #
+ # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example,
+ # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01":
+ #
+ # - P9K_KUBECONTEXT_CLOUD_NAME=gke
+ # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account
+ # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a
+ # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01
+ #
+ # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01":
+ #
+ # - P9K_KUBECONTEXT_CLOUD_NAME=eks
+ # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012
+ # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1
+ # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01
+ typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION=
+ # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME.
+ POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}'
+ # Append the current context's namespace if it's not "default".
+ POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}'
+
+ # Custom prefix.
+ # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%fat '
+
+ ################[ terraform: terraform workspace (https://www.terraform.io) ]#################
+ # Don't show terraform workspace if it's literally "default".
+ typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false
+ # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element
+ # in each pair defines a pattern against which the current terraform workspace gets matched.
+ # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below)
+ # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters,
+ # you'll see this value in your prompt. The second element of each pair in
+ # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The
+ # first match wins.
+ #
+ # For example, given these settings:
+ #
+ # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=(
+ # '*prod*' PROD
+ # '*test*' TEST
+ # '*' OTHER)
+ #
+ # If your current terraform workspace is "project_test", its class is TEST because "project_test"
+ # doesn't match the pattern '*prod*' but does match '*test*'.
+ #
+ # You can define different colors, icons and content expansions for different classes:
+ #
+ # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28
+ # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <'
+ typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=(
+ # '*prod*' PROD # These values are examples that are unlikely
+ # '*test*' TEST # to match your needs. Customize them as needed.
+ '*' OTHER)
+ typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=38
+ # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ #############[ terraform_version: terraform version (https://www.terraform.io) ]##############
+ # Terraform version color.
+ typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=38
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]#
+ # Show aws only when the the command you are typing invokes one of these tools.
+ # Tip: Remove the next line to always show aws.
+ typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt'
+
+ # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element
+ # in each pair defines a pattern against which the current AWS profile gets matched.
+ # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below)
+ # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters,
+ # you'll see this value in your prompt. The second element of each pair in
+ # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The
+ # first match wins.
+ #
+ # For example, given these settings:
+ #
+ # typeset -g POWERLEVEL9K_AWS_CLASSES=(
+ # '*prod*' PROD
+ # '*test*' TEST
+ # '*' DEFAULT)
+ #
+ # If your current AWS profile is "company_test", its class is TEST
+ # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'.
+ #
+ # You can define different colors, icons and content expansions for different classes:
+ #
+ # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28
+ # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <'
+ typeset -g POWERLEVEL9K_AWS_CLASSES=(
+ # '*prod*' PROD # These values are examples that are unlikely
+ # '*test*' TEST # to match your needs. Customize them as needed.
+ '*' DEFAULT)
+ typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208
+ # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ # AWS segment format. The following parameters are available within the expansion.
+ #
+ # - P9K_AWS_PROFILE The name of the current AWS profile.
+ # - P9K_AWS_REGION The region associated with the current AWS profile.
+ typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}'
+
+ #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]#
+ # AWS Elastic Beanstalk environment color.
+ typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70
+ # Custom icon.
+ typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='eb'
+
+ ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]##########
+ # Show azure only when the the command you are typing invokes one of these tools.
+ # Tip: Remove the next line to always show azure.
+ typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt'
+ # Azure account name color.
+ typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32
+ # Custom icon.
+ typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='az'
+
+ ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]###########
+ # Show gcloud only when the the command you are typing invokes one of these tools.
+ # Tip: Remove the next line to always show gcloud.
+ typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs'
+ # Google cloud color.
+ typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32
+
+ # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or
+ # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative
+ # enough. You can use the following parameters in the expansions. Each of them corresponds to the
+ # output of `gcloud` tool.
+ #
+ # Parameter | Source
+ # -------------------------|--------------------------------------------------------------------
+ # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)'
+ # P9K_GCLOUD_ACCOUNT | gcloud config get-value account
+ # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project
+ # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)'
+ #
+ # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'.
+ #
+ # Obtaining project name requires sending a request to Google servers. This can take a long time
+ # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud
+ # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets
+ # set and gcloud prompt segment transitions to state COMPLETE.
+ #
+ # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL
+ # and COMPLETE. You can also hide gcloud in state PARTIAL by setting
+ # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and
+ # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty.
+ typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}'
+ typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}'
+
+ # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name
+ # this often. Negative value disables periodic polling. In this mode project name is retrieved
+ # only when the current configuration, account or project id changes.
+ typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]#
+ # Show google_app_cred only when the the command you are typing invokes one of these tools.
+ # Tip: Remove the next line to always show google_app_cred.
+ typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt'
+
+ # Google application credentials classes for the purpose of using different colors, icons and
+ # expansions with different credentials.
+ #
+ # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first
+ # element in each pair defines a pattern against which the current kubernetes context gets
+ # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion
+ # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION
+ # parameters, you'll see this value in your prompt. The second element of each pair in
+ # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order.
+ # The first match wins.
+ #
+ # For example, given these settings:
+ #
+ # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=(
+ # '*:*prod*:*' PROD
+ # '*:*test*:*' TEST
+ # '*' DEFAULT)
+ #
+ # If your current Google application credentials is "service_account deathray-testing x@y.com",
+ # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'.
+ #
+ # You can define different colors, icons and content expansions for different classes:
+ #
+ # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28
+ # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID'
+ typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=(
+ # '*:*prod*:*' PROD # These values are examples that are unlikely
+ # '*:*test*:*' TEST # to match your needs. Customize them as needed.
+ '*' DEFAULT)
+ typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32
+ # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by
+ # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference:
+ # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion.
+ #
+ # You can use the following parameters in the expansion. Each of them corresponds to one of the
+ # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS.
+ #
+ # Parameter | JSON key file field
+ # ---------------------------------+---------------
+ # P9K_GOOGLE_APP_CRED_TYPE | type
+ # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id
+ # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email
+ #
+ # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'.
+ typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}'
+
+ ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]###############
+ # Toolbox color.
+ typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=178
+ # Don't display the name of the toolbox if it matches fedora-toolbox-*.
+ typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}'
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='â­'
+ # Custom prefix.
+ # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%fin '
+
+ ###############################[ public_ip: public IP address ]###############################
+ # Public IP color.
+ typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ########################[ vpn_ip: virtual private network indicator ]#########################
+ # VPN IP color.
+ typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81
+ # When on VPN, show just an icon without the IP address.
+ # Tip: To display the private IP address when on VPN, remove the next line.
+ typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION=
+ # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN
+ # to see the name of the interface.
+ typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*'
+ # If set to true, show one segment per matching network interface. If set to false, show only
+ # one segment corresponding to the first matching network interface.
+ # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION.
+ typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ###########[ ip: ip address and bandwidth usage for a specified network interface ]###########
+ # IP color.
+ typeset -g POWERLEVEL9K_IP_FOREGROUND=38
+ # The following parameters are accessible within the expansion:
+ #
+ # Parameter | Meaning
+ # ----------------------+-------------------------------------------
+ # P9K_IP_IP | IP address
+ # P9K_IP_INTERFACE | network interface
+ # P9K_IP_RX_BYTES | total number of bytes received
+ # P9K_IP_TX_BYTES | total number of bytes sent
+ # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt
+ # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt
+ # P9K_IP_RX_RATE | receive rate (since last prompt)
+ # P9K_IP_TX_RATE | send rate (since last prompt)
+ typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='$P9K_IP_IP${P9K_IP_RX_RATE:+ %70F⇣$P9K_IP_RX_RATE}${P9K_IP_TX_RATE:+ %215F⇡$P9K_IP_TX_RATE}'
+ # Show information for the first network interface whose name matches this regular expression.
+ # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces.
+ typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*'
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ #########################[ proxy: system-wide http/https/ftp proxy ]##########################
+ # Proxy color.
+ typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ ################################[ battery: internal battery ]#################################
+ # Show battery in red when it's below this level and not connected to power supply.
+ typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20
+ typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160
+ # Show battery in green when it's charging or fully charged.
+ typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70
+ # Show battery in yellow when it's discharging.
+ typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178
+ # Battery pictograms going from low to high level of charge.
+ typeset -g POWERLEVEL9K_BATTERY_STAGES=('%K{232}â–' '%K{232}â–‚' '%K{232}â–ƒ' '%K{232}â–„' '%K{232}â–…' '%K{232}â–†' '%K{232}â–‡' '%K{232}â–ˆ')
+ # Don't show the remaining time to charge/discharge.
+ typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false
+
+ #####################################[ wifi: wifi speed ]#####################################
+ # WiFi color.
+ typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS).
+ #
+ # # Wifi colors and icons for different signal strength levels (low to high).
+ # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values
+ # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values
+ #
+ # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps'
+ # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}'
+ #
+ # The following parameters are accessible within the expansions:
+ #
+ # Parameter | Meaning
+ # ----------------------+---------------
+ # P9K_WIFI_SSID | service set identifier, a.k.a. network name
+ # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown
+ # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second
+ # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0
+ # P9K_WIFI_NOISE | noise in dBm, from -120 to 0
+ # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE)
+
+ ####################################[ time: current time ]####################################
+ # Current time color.
+ typeset -g POWERLEVEL9K_TIME_FOREGROUND=66
+ # Format for the current time: 09:51:02. See `man 3 strftime`.
+ typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}'
+ # If set to true, time will update when you hit enter. This way prompts for the past
+ # commands will contain the start times of their commands as opposed to the default
+ # behavior where they contain the end times of their preceding commands.
+ typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false
+ # Custom icon.
+ typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION=
+ # Custom prefix.
+ # typeset -g POWERLEVEL9K_TIME_PREFIX='%fat '
+
+ # Example of a user-defined prompt segment. Function prompt_example will be called on every
+ # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or
+ # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user.
+ #
+ # Type `p10k help segment` for documentation and a more sophisticated example.
+ function prompt_example() {
+ p10k segment -f 208 -i 'â­' -t 'hello, %n'
+ }
+
+ # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job
+ # is to generate the prompt segment for display in instant prompt. See
+ # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt.
+ #
+ # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function
+ # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k
+ # will replay these calls without actually calling instant_prompt_*. It is imperative that
+ # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this
+ # rule is not observed, the content of instant prompt will be incorrect.
+ #
+ # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If
+ # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt.
+ function instant_prompt_example() {
+ # Since prompt_example always makes the same `p10k segment` calls, we can call it from
+ # instant_prompt_example. This will give us the same `example` prompt segment in the instant
+ # and regular prompts.
+ prompt_example
+ }
+
+ # User-defined prompt segments can be customized the same way as built-in segments.
+ # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208
+ # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='â­'
+
+ # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt
+ # when accepting a command line. Supported values:
+ #
+ # - off: Don't change prompt when accepting a command line.
+ # - always: Trim down prompt when accepting a command line.
+ # - same-dir: Trim down prompt when accepting a command line unless this is the first command
+ # typed after changing current working directory.
+ typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always
+
+ # Instant prompt mode.
+ #
+ # - off: Disable instant prompt. Choose this if you've tried instant prompt and found
+ # it incompatible with your zsh configuration files.
+ # - quiet: Enable instant prompt and don't print warnings when detecting console output
+ # during zsh initialization. Choose this if you've read and understood
+ # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt.
+ # - verbose: Enable instant prompt and print a warning when detecting console output during
+ # zsh initialization. Choose this if you've never tried instant prompt, haven't
+ # seen the warning, or if you are unsure what this all means.
+ typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose
+
+ # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized.
+ # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload
+ # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you
+ # really need it.
+ typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true
+
+ # If p10k is already loaded, reload configuration.
+ # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true.
+ (( ! $+functions[p10k] )) || p10k reload
+}
+
+# Tell `p10k configure` which file it should overwrite.
+typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a}
+
+(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}
+'builtin' 'unset' 'p10k_config_opts'
diff --git a/dot_zsh/powerlevel10k b/dot_zsh/powerlevel10k
new file mode 160000
+Subproject 8a676a9157d2b0e00e88d06456ac7317f11c031
diff --git a/dot_zshenv b/dot_zshenv
new file mode 100644
index 0000000..787b5b7
--- /dev/null
+++ b/dot_zshenv
@@ -0,0 +1,26 @@
+# for gpg-agent/pinentry to work, even in non-interactive shells
+export GPG_TTY="${TTY}"
+
+# Otherwise we cannot use ^o as a keybinding
+case `uname` in
+ Darwin|OpenBSD)
+ stty discard undef
+ ;;
+esac
+
+aklogs () {
+ for r in CLUB.CC.CMU.EDU; do
+ KRB5CCNAME=`KRB5CCNAME=DIR:$HOME/.cache/krb5cc klist -l | grep $r | sed -e s'/.*:://g'` aklog -c $r -k $r
+ done
+}
+
+kinits () {
+ kinit -r 200h -f rak@CLUB.CC.CMU.EDU
+}
+
+rkinits () {
+ for r in rak@CLUB.CC.CMU.EDU; do
+ KRB5CCNAME=`KRB5CCNAME=DIR:$HOME/.cache/krb5cc klist -l | grep $r | sed -e s'/.*:://g'` kinit -R $r
+ done
+ KRB5CCNAME=DIR:$HOME/.cache/krb5cc aklogs
+}
diff --git a/dot_zshrc.tmpl b/dot_zshrc.tmpl
new file mode 100644
index 0000000..c0b1669
--- /dev/null
+++ b/dot_zshrc.tmpl
@@ -0,0 +1,665 @@
+#
+# ~/.zshrc
+# Z shell configuration file.
+# CREDITS
+# File was first taken from the following location:
+#
+# http://www.tomaw.net/configs/zshrc
+#
+# Some additions were made by me, Jonathan Patrick Davies <jpds@ubuntu.com>.
+# Among these are the Launchpad, Debian, Wikipedia/Wikitravel, BBC search,
+# Demonoid, Lonely Planet, Urbandictionary and other various functions. I also
+# implemented a few "if" statements to stop zsh complaining about any missing
+# objects and placed the dircolors support.
+#
+# The forkex() function is thanks to Siegfried-Angel Gevatter Pujals
+# <rainct@ubuntu.com>.
+#
+# Some of this file is thanks to <slarti@gentoo.org>, some is take from
+# spider's <spider@gentoo.org> zshrc, and some from the zshwiki.org.
+# Some bash functions are nicked from ciaranm's <ciaranm@gentoo.org>
+# bashrc.
+#
+# READ ME
+#
+# • Remember to change the stuff specific to me! It's all at the top of
+# this file.
+#
+# • You can obviously only get the most out of this file if you take the
+# time to read through the comments. Of course, you can still experience
+# zsh's superiority by simply plugging this file in and using it.
+#
+
+# BEGIN LOCAL
+
+if ! export LANG=$(locale -a | grep -E -i "en_CA.UTF-?8"); then
+ if ! export LANG=$(locale -a | grep -E -i "C.UTF-?8"); then
+ export LANG=C
+ fi
+fi
+export LC_TIME="en_GB.UTF-8"
+export LC_COLLATE=C # force strict lexicographic sorting
+export TIME_STYLE=long-iso # make ls -l use YYYY-MM-DD in dired
+export TZ="America/Toronto" # Force our time zone this location.
+export EDITOR="vim" # Long live vim (as our editor).
+export NAME="Ryan Kavanagh" # Our name.
+export EMAIL="rak@rak.ac" # Our email address.
+export GPGKEY="4E469519ED677734268FBD958F7BF8FC4A11C97A" # Our GnuPG key ID.
+export DEBFULLNAME=$NAME # These are used by Debian packaging...
+export DEBEMAIL="rak@debian.org" # ...programs.
+export DEBSIGN_KEYID=$GPGKEY # Key ID for signing Debian packages.
+export BZR_EMAIL="$NAME <$EMAIL>" # Override email for Bazaar.
+export GIT_AUTHOR_NAME=$NAME
+export DARCS_EMAIL="$NAME <$EMAIL>"
+export QUILT_PATCHES=debian/patches
+export MANWIDTH=80
+export MANOPT="-L en"
+export PAGER=less
+export LESS=-FQXR
+export PDFVIEWER=evince
+export BROWSER=firefox
+export TEXMFHOME=${HOME}/.texmf
+export KRB5CCNAME=DIR:${HOME}/.cache/krb5cc # kerberos credentials cache
+export GOPATH=${HOME}/.go
+export XDG_STATE_HOME="${HOME}/.local/state"
+
+export PATH=/usr/sbin:/sbin:${PATH}
+case `uname` in
+ Linux)
+ ;;
+ Darwin)
+ export PATH=/opt/local/bin:/opt/local/sbin:/usr/sbin:/sbin:$PATH
+ export MANPATH=/opt/local/share/man:${MANPATH}
+ ;;
+ OpenBSD)
+ export PATH=/usr/games:${PATH}
+ ;;
+ *)
+esac
+export PATH=${HOME}/bin:${PATH}
+
+alias apt-upgrade='sudo apt-get update && sudo apt-get dist-upgrade'
+
+alias 1920s='mplayer -playlist http://kara.fast-serv.com:8398/listen.pls'
+alias dismuke='mplayer -playlist https://early1900s.org/radiodismuke/radiodismuke.pls'
+alias wzum='mplayer http://pubmusic.streamguys1.com/wzum-aac'
+
+alias mplayer-fb='mplayer -vo fbdev'
+alias links2-fb='links2 -driver fb'
+
+alias itp='reportbug -M -B debian --email rak@debian.org --paranoid -K $GPGKEY wnpp'
+alias gibuild='gbp buildpackage --git-builder="sbuild -sAd u"'
+alias gibuildi='gbp buildpackage --git-ignore-new --git-builder="sbuild -sAd u"'
+alias dquilt="quilt --quiltrc=${HOME}/.quiltrc-dpkg"
+
+alias vi='vim'
+
+alias sm='tmux attach -t mail || tmux -f ${HOME}/.tmux-mail.conf attach -t mail'
+alias sshfw='ssh -oForwardAgent=yes'
+
+alias llocate="locate -d ${XDG_STATE_HOME}/plocate/home.db"
+
+# END LOCAL
+
+. ${HOME}/.opam/opam-init/init.zsh > /dev/null 2> /dev/null || true
+
+# Ensure that we possess a ~/.zsh/ directory. This is required for the
+# ~/.zsh/history file.
+if [ ! -d $HOME/.zsh/ ]; then
+ mkdir -p $HOME/.zsh/
+fi
+
+# We use powerline10k for our prompt
+for f in $HOME/.zsh/p10k.zsh $HOME/.zsh/powerlevel10k/powerlevel10k.zsh-theme; do
+ [[ ! -f $f ]] || source $f
+done
+if [[ -f $HOME/.zsh/powerlevel10k/gitstatus/gitstatusd-$(uname) ]]; then
+ GITSTATUS_DAEMON=$HOME/.zsh/powerlevel10k/gitstatus/gitstatusd-$(uname);
+elif [[ ! -f $HOME/.zsh/powerlevel10k/gitstatus/gitstatusd ]]; then
+ POWERLEVEL9K_DISABLE_GITSTATUS=true
+fi
+
+# Alias/custom commands
+#
+# Many of these options don's exist on BSD rm/cp/mkdir/ln/etc.
+#
+# Some are just in case - for 'rm', 'cp' and 'mv' - ask about overwriting or
+# deleting files.
+# Furthermore, be verbose about what each command is performing to be present of
+# what is occuring every time.
+if [[ `uname` = "Linux" ]]; then
+ alias cp="cp -iv"
+ alias mkdir="mkdir -v"
+ alias mv="mv -iv"
+ alias ln="ln -v"
+ # Only delete files on the current file system to avoid removing recursively
+ # from bind mounts.
+ alias rm="rm -iv --one-file-system"
+
+ alias grep="grep --colour=auto"
+
+ alias chown="chown -v"
+ alias chmod="chmod -v"
+ alias ls="ls --classify --color=always" # Add all colours and
+ # have fancy symbols for files, etc.
+elif [[ `uname` = "OpenBSD" && -x /usr/local/bin/colorls ]]; then
+ alias ls="colorls -G"
+fi
+
+# Colours.
+autoload -U colors; colors
+
+# Change word boundary characters. Nabbed from
+# http://zshwiki.org/KeyBindings.
+
+# By default: export WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>'
+# We remove the slash, period, angle brackets, dash here.
+export WORDCHARS='*?_-[]~=&;!#$%^(){}'
+
+# Follow GNU LS_COLORS for completion menus
+zmodload -i zsh/complist
+
+# Should dircolors exist. Fetch LS_COLORS from it.
+if [ "`which dircolors`" != 'dircolors not found' ]; then
+ eval "$(dircolors -b)"
+fi
+
+zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
+zstyle ':completion:*:*:kill:*' list-colors '=%*=01;31'
+
+# Load the completion system
+autoload -U compinit; compinit
+
+compdef _quilt dquilt=quilt # Quilt tab completion for dquilt
+
+## Key bindings
+# You may use:
+# % autoload -U zkbd
+# % zkbd
+# to discover your keys.
+
+
+typeset -U fpath
+
+# Actually, stick with emacs for the moment. The vi keymap just doesn't
+# seem to be as complete (even if it's nicer for editing, there's no
+# execute-named-cmd bound, for example).
+bindkey -e # Emacs keybindings.
+
+# pattern history search
+bindkey '^R' history-incremental-pattern-search-backward
+
+# Very powerful version of mv implemented in zsh. The main feature I
+# know of it that seperates it from the standard mv is that it saves you
+# time by being able to use patterns which are expanded into positional
+# parameters. So:
+#
+# slarti@pohl % zmv (*)foo ${1}bar
+#
+# On a series of files like onefoo, twofoo, threefoo, fivefoo would be
+# renamed to onebar twobar threebar fourbar.
+#
+# Although that's nifty enough, I suspect there are other features I
+# don't know about yet...
+#
+# Read $fpath/zmv for some more basic examples of usage, and also use
+# run-help on it :)
+autoload -U zmv
+
+# Like xargs, but instead of reading lines of arguments from standard input,
+# it takes them from the command line. This is possible/useful because,
+# especially with recursive glob operators, zsh often can construct a command
+# line for a shell function that is longer than can be accepted by an external
+# command. This is what's often referred to as the "shitty Linux exec limit" ;)
+# The limitation is on the number of characters or arguments.
+#
+# slarti@pohl % echo {1..30000}
+# zsh: argument list too long: /bin/echo
+# zsh: exit 127 /bin/echo {1..30000}
+autoload -U zargs
+
+# Makes it easy to type URLs as command line arguments. As you type, the
+# input character is analyzed and, if it mayn eed quoting, the current
+# word is checked for a URI scheme. If one is found and the current word
+# is not already quoted, a blackslash is inserted before the input
+# caracter.
+autoload -U url-quote-magic
+zle -N self-insert url-quote-magic
+
+# zed is a tiny command-line editor in pure ZSH; no other shell could do
+# this. zed itself is simple as anything, but it's killer feature for
+# me is that it can edit functions on the go with zed -f <funcname> (or
+# fned <funcname>. This is useful for me when I'm using and defining
+# functions interactively, for example, when I'm working through the
+# Portage tree in CVS. It allows me to edit a function on the fly,
+# without having to call the last definition back up from the history
+# and re-edit that in ZLE. It also indents the function, even if it was
+# defined on all one line in the line editor, making it easy as anything
+# to edit.
+#
+# ^X^W to save, ^C to abort.
+autoload -U zed
+
+# Incremental completion of a word. After starting this, a list of
+# completion choices can be shown after every character you type, which
+# can deleted with ^H or delete. Return will accept the current
+# completion. Hit tab for normal completion, ^G to get back where you
+# came from and ^D to list matches.
+autoload -U incremental-complete-word
+zle -N incremental-complete-word
+bindkey "^Xi" incremental-complete-word
+
+# This function allows you type a file pattern, and see the results of
+# the expansion at each step. When you hit return, they will be
+# inserted into the command line.
+autoload -U insert-files
+zle -N insert-files
+bindkey "^Xf" insert-files
+
+# This set of functions implements a sort of magic history searching.
+# After predict-on, typing characters causes the editor to look backward
+# in the history for the first line beginning with what you have typed so
+# far. After predict-off, editing returns to normal for the line found.
+# In fact, you often don't even need to use predict-off, because if the
+# line doesn't match something in the history, adding a key performs
+# standard completion - though editing in the middle is liable to delete
+# the rest of the line.
+autoload -U predict-on
+zle -N predict-on
+zle -N predict-off
+bindkey "^X^Z" predict-on
+bindkey "^Z" predict-off
+
+# run-help is a help finder, bound in ZLE to M-h. It doesn't need to be
+# autoloaded to work - the non-autoloaded version just looks up a man
+# page for the command under the cursor, then when that process is
+# finished it pulls your old command line back up from the buffer stack.
+# However, with the autoloaded function and:
+#
+# mkdir ~/zsh-help; cd ~/zsh-help MANPAGER="less" man zshbuiltins | \
+# colcrt | perl /usr/share/zsh/4.2.1/Util/helpfiles
+#
+# It'll work for zsh builtins too. By the way, I've assumed some things
+# in that command. ~/zsh-help can be wherever you like, MANPAGER needs
+# to be any standard pager (less, pg, more, just not the MANPAGER I have
+# defined in this file), colcrt can be col -bx, and the path to
+# helpfiles may be different for you (Util may not even be installed
+# with your distribution; fair enough, make install doesn't install it.
+# Dig up a source tarball and everything is in there).
+
+# Load the new one
+autoload -U run-help
+
+# Press Alt-H to show help for command we are currently on.
+bindkey '[[A' run-help
+
+# https://zsh.sourceforge.io/Doc/Release/Options.html#History
+# History file name and maximum size.
+HISTFILE="$HOME/.zsh/history"
+SAVEHIST=500000
+HISTSIZE=600000 # should be > SAVEHIST
+
+# Save each command’s beginning timestamp (in seconds since the epoch) and the
+# duration (in seconds) to the history file.
+setopt EXTENDED_HISTORY
+
+# If the internal history needs to be trimmed to add the current command line,
+# setting this option will cause the oldest history event that has a duplicate
+# to be lost before losing a unique event from the list.
+setopt HIST_EXPIRE_DUPS_FIRST
+
+# Better locking to avoid corruption
+setopt HIST_FCNTL_LOCK
+
+# When searching for history entries in the line editor, do not display
+# duplicates of a line previously found, even if the duplicates are not
+# contiguous.
+setopt HIST_FIND_NO_DUPS
+
+# Don't story commands in history if they start with a space
+setopt HIST_IGNORE_SPACE
+
+# Don't store history/fc -l in the history list when invoked
+setopt HIST_NO_STORE
+
+# Remove superfluous blanks from each command line being added to the history
+# list.
+setopt HIST_REDUCE_BLANKS
+
+# This option works like APPEND_HISTORY except that new history lines are added
+# to the $HISTFILE incrementally (as soon as they are entered), rather than
+# waiting until the shell exits. The file will still be periodically re-written
+# to trim it when the number of lines grows 20% beyond the value specified by
+# $SAVEHIST (see also the HIST_SAVE_BY_COPY option).
+setopt INC_APPEND_HISTORY
+
+# Push History from previous sessions. IF $HISTFILE exists.
+if [ -f $HISTFILE ]; then
+ fc -RI $HISTFILE
+fi
+
+
+
+# This function sets the window tile to user@host:/workingdir before each
+# prompt. If you're using screen, it sets the window title (works
+# wonderfully for 'hardstatus' lines.
+precmd() {
+# [[ -t 1 ]] || return
+ case $TERM in
+ *xterm*|rxvt*) print -Pn "\e]2;%n@%m:%~\a"
+ ;;
+ screen*) print -Pn "\ek%n@%m:%~\e\\"
+ ;;
+ esac
+}
+
+# This sets the window title to the last run command.
+preexec() {
+# [[ -t 1 ]] || return
+ case $TERM in
+ *xterm*|rxvt*) print -Pn "\e]2;$1\a"
+ ;;
+ screen*) print -Pn "\ek$1\e\\"
+ ;;
+ esac
+}
+
+# Custom commands.
+
+loop() {
+ while [ 1 -eq 1 ]; do
+ $@
+ done
+}
+
+# CTAN downloader
+
+ctand() {
+ wget http://mirror.ctan.org/macros/latex/contrib/$1.zip && unzip $1.zip
+}
+
+# For formating text files for a printer
+fmtpr() {
+ fmt --width=62 $@ | LC_ALL=C LANG=C pr -o 10 -W 62 -J -F -l 62
+}
+
+# Russian
+#
+
+verb.rus() {
+ curl -s "http://en.wiktionary.org/w/index.php?title=$1&action=edit" | grep 'ru-conj-'
+ firefox "http://en.wiktionary.org/w/index.php?title=$1"
+}
+
+#
+# Debian.
+#
+debian.bugs.number() {
+ # Debian Bug Tracker - by number.
+ w3m "http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=$1"
+}
+
+debian.bugs.package() {
+ # Debian Bug Tracker - by package.
+ w3m "http://bugs.debian.org/cgi-bin/pkgreport.cgi?src=$1"
+}
+
+debian.packages() {
+ # Debian Packages.
+ # Add 'src:' in front of the package name to search for source packages.
+ w3m "http://packages.debian.org/$1"
+}
+
+debian.qa.maintainer() {
+ # Debian QA Maintainer search by email address.
+ w3m "http://qa.debian.org/developer.php?login=$1"
+}
+
+debian.qa.package() {
+ # Debian QA Maintainer search by package name.
+ w3m "http://qa.debian.org/developer.php?package=$1"
+}
+
+debian.qa.pts() {
+ # Debian Package Tracking system - developers.
+ w3m "http://packages.qa.debian.org/$1"
+}
+
+debian.qa.task() {
+ # Debian QA - search for task.
+ w3m "http://qa.debian.org/developer.php?task=$1"
+}
+
+debian.wiki() {
+ # Search the Debian Wiki.
+ w3m "http://wiki.debian.org/?action=fullsearch&value=$@"
+}
+
+#
+# Others.
+#
+
+wttr() {
+ local request="wttr.in/${1-Montreal}"
+ [ "$(tput cols)" -lt 125 ] && request+='?n'
+ curl -H "Accept-Language: ${LANG%_*}" --compressed "$request"
+}
+
+google() {
+ # Google search.
+ w3m "http://www.google.com/search?q=$@"
+}
+
+wikipedia() {
+ # Wikipedia search. English section.
+ w3m "http://en.wikipedia.org/wiki/Special:Search?search=$@"
+}
+
+wiktionary() {
+ # Search Wiktionary for a term.
+ w3m "http://en.wiktionary.org/wiki/Special:Search?search=$@"
+}
+
+forkex() {
+ # Fork program $@ from console.
+ nohup "$@" >/dev/null 2>&1 <&1 & disown %%
+}
+
+gbp-snap() {
+ if [[ -e $@ ]]; then
+ git-dch -aSN $1
+ else
+ git-dch -aS
+ fi
+ gpg-mounter
+ gibuild --git-ignore-new
+ DSC=`head -n1 debian/changelog | sed -e 's/\(.*\) (\(.*\)).*/\1_\2.dsc/g'`
+ DIST=`head -n1 debian/changelog | sed -e 's/.* \(.*\);.*/\1/g'`
+ cd ..
+ sbuild -d $DIST $DSC
+}
+
+# Pretty menu!
+zstyle ':completion:*' menu select=1
+zstyle ':completion:*' select-prompt %SScroll active at %p%s.
+
+# Completion options.
+zstyle ':completion:*' completer _complete _prefix
+zstyle ':completion::prefix-1:*' completer _complete
+zstyle ':completion:incremental:*' completer _complete _correct
+zstyle ':completion:predict:*' completer _complete
+
+# Completion caching.
+zstyle ':completion::complete:*' use-cache 1
+zstyle ':completion::complete:*' cache-path ~/.zsh/cache/$HOST
+
+# Expand partial paths.
+zstyle ':completion:*' expand 'yes'
+zstyle ':completion:*' squeeze-slashes 'yes'
+
+# Include non-hidden directories in globbed file completions
+# for certain commands.
+zstyle ':completion::complete:*' '\'
+
+# Use menuselection for PID completion.
+zstyle ':completion:*:*:kill:*' menu yes select
+zstyle ':completion:*:kill:*' force-list always
+
+# tag-order 'globbed-files directories' all-files.
+zstyle ':completion::complete:*:tar:directories' file-patterns '*~.*(-/)'
+
+# Do not complete backup files as executables.
+zstyle ':completion:*:complete:-command-::commands' ignored-patterns '*\~'
+
+# Separate matches into groups.
+zstyle ':completion:*:matches' group 'yes'
+
+# With commands like rm, it's annoying if you keep getting offered the same
+# file multiple times. This fixes it. Also good for cp, et cetera..
+zstyle ':completion:*:rm:*' ignore-line yes
+zstyle ':completion:*:cp:*' ignore-line yes
+
+# Describe each match group.
+zstyle ':completion:*:descriptions' format "%B---- %d%b"
+
+# Messages/warnings format.
+zstyle ':completion:*:messages' format '%B%U---- %d%u%b'
+zstyle ':completion:*:warnings' format '%B%U---- no match for: %d%u%b'
+
+# Describe options in full.
+zstyle ':completion:*:options' description 'yes'
+zstyle ':completion:*:options' auto-description '%d'
+
+# Simulate spider's old abbrev-expand 3.0.5 patch
+#zstyle ':completion:*:history-words' stop verbose
+#zstyle ':completion:*:history-words' remove-all-dups yes
+#zstyle ':completion:*:history-words' list false
+
+# From the zshwiki. Hide CVS files/directories from being completed.
+zstyle ':completion:*:(all-|)files' ignored-patterns '(|*/)CVS'
+zstyle ':completion:*:cd:*' ignored-patterns '(*/)#CVS'
+
+# Also from the wiki. Hide uninteresting users from completion.
+zstyle ':completion:*:*:*:users' ignored-patterns \
+adm apache bin daemon games gdm halt ident junkbust lp mail mailnull \
+named news nfsnobody nobody nscd ntp operator pcap postgres radvd \
+rpc rpcuser rpm shutdown squid sshd sync uucp vcsa xfs backup bind \
+dictd gnats identd irc man messagebus postfix proxy sys \
+www-data alias amavis at clamav cmd5checkpw cron cyrus dhcp dnscache \
+dnslog foldingathome guest haldaemon jabber ldap mailman mpd mysql \
+nut p2p portage postmaster qmaild qmaill qmailp qmailq qmailr qmails \
+smmsp tinydns vpopmail wasabi zope
+
+# Approximate completion. From the wiki.
+zstyle ':completion:*' completer _complete _match _approximate
+zstyle ':completion:*:match:*' original only
+zstyle ':completion:*:approximate:*' max-errors 1 numeric
+
+zstyle ':completion:*:sudo:*' command-path /usr/sbin /usr/bin /sbin /bin \
+ /usr/X11R6/bin
+
+# Options
+setopt \
+NO_all_export \
+ always_last_prompt \
+ always_to_end \
+ append_history \
+ auto_cd \
+ auto_list \
+ auto_menu \
+ auto_name_dirs \
+ auto_param_keys \
+ auto_param_slash \
+ auto_pushd \
+ auto_remove_slash \
+NO_auto_resume \
+ bad_pattern \
+ bang_hist \
+NO_beep \
+ brace_ccl \
+ correct_all \
+NO_bsd_echo \
+NO_cdable_vars \
+NO_chase_links \
+ clobber \
+ complete_aliases \
+ complete_in_word \
+ correct \
+NO_correct_all \
+ csh_junkie_history \
+NO_csh_junkie_loops \
+NO_csh_junkie_quotes \
+NO_csh_null_glob \
+ equals \
+ extended_glob \
+ extended_history \
+ function_argzero \
+ glob \
+NO_glob_assign \
+ glob_complete \
+NO_glob_dots \
+NO_glob_subst \
+NO_hash_cmds \
+NO_hash_dirs \
+ hash_list_all \
+ hist_allow_clobber \
+ hist_beep \
+ hist_ignore_dups \
+ hist_ignore_space \
+NO_hist_no_store \
+ hist_verify \
+NO_hup \
+NO_ignore_braces \
+NO_ignore_eof \
+ interactive_comments \
+ inc_append_history \
+NO_list_ambiguous \
+NO_list_beep \
+ list_types \
+ long_list_jobs \
+ magic_equal_subst \
+NO_mail_warning \
+NO_mark_dirs \
+ menu_complete \
+ multios \
+ nomatch \
+ notify \
+NO_null_glob \
+ numeric_glob_sort \
+NO_overstrike \
+ path_dirs \
+ posix_builtins \
+NO_print_exit_value \
+NO_prompt_cr \
+ prompt_subst \
+ pushd_ignore_dups \
+NO_pushd_minus \
+ pushd_silent \
+ pushd_to_home \
+ rc_expand_param \
+NO_rc_quotes \
+NO_rm_star_silent \
+NO_sh_file_expansion \
+ sh_option_letters \
+ share_history \
+ short_loops \
+NO_sh_word_split \
+NO_single_line_zle \
+NO_sun_keyboard_hack \
+NO_verbose \
+ zle
+
+# GPG / SSH AGENT
+
+if command -v keychain > /dev/null && test -d ~/.ssh/keys/{{ .chezmoi.hostname }}; then
+ ls ~/.ssh/keys/{{ .chezmoi.hostname }}/id_* | \
+ grep -E -v '\.pub$' | \
+ xargs keychain {{ if (eq .chezmoi.os "linux") -}} --systemd {{- end }}
+ [ -z "$HOSTNAME" ] && HOSTNAME=`uname -n`
+ [ -f $HOME/.keychain/$HOSTNAME-sh ] &&
+ . $HOME/.keychain/$HOSTNAME-sh
+ [ -f $HOME/.keychain/$HOSTNAME-sh-gpg ] &&
+ . $HOME/.keychain/$HOSTNAME-sh-gpg
+fi
+
+# vim: set ft=zsh:
diff --git a/emacsen/Makefile b/emacsen/Makefile
new file mode 100644
index 0000000..ce070d9
--- /dev/null
+++ b/emacsen/Makefile
@@ -0,0 +1,48 @@
+EMACSD=~/.emacs.d/
+
+SUBDIRS = dictem
+
+MAKEDIRS = $(SUBDIRS:%=make-%)
+INSTALLDIRS = $(SUBDIRS:%=install-%)
+CLEANDIRS = $(SUBDIRS:%=clean-%)
+
+all: subdirs
+
+subdirs: $(MAKEDIRS)
+
+$(MAKEDIRS):
+ $(MAKE) -C $(@:make-%=%)
+ touch $@
+
+install: $(INSTALLDIRS)
+ [ ! -d $(EMACSD)/share/info ] || install-info $(EMACSD)/share/info/*.info $(EMACSD)/share/info/dir
+
+install-% : make-%
+$(INSTALLDIRS):
+ -mkdir -p $(EMACSD)/$(@:install-%=%)
+ $(MAKE) -C $(@:install-%=%) install DIR=$(EMACSD)/$(@:install-%=%)
+
+clean: $(CLEANDIRS)
+ rm -f make-*
+
+$(CLEANDIRS):
+ [ ! -f $(@:clean-%=%)/Makefile ] || $(MAKE) -C $(@:clean-%=%) clean
+
+# Manual overrides:
+make-dictem:
+ touch $@
+
+clean-dictem:
+ echo $@
+
+install-dictem:
+ -mkdir -p $(EMACSD)/$(@:install-%=%)
+ install -m 644 $(@:install-%=%)/*.el $(EMACSD)/$(@:install-%=%)
+
+clobber:
+ for dir in $(SUBDIRS); do \
+ git --git-dir=$${dir}/.git reset --hard HEAD; \
+ git --git-dir=$${dir}/.git clean -qxdf; \
+ done
+
+.PHONY: all install clean $(CLEANDIRS) clobber
diff --git a/emacsen/dictem b/emacsen/dictem
new file mode 160000
+Subproject 078e60824eb97ac4e9f0a3033b2f592219a8152
diff --git a/etc/hosts b/etc/hosts
new file mode 100644
index 0000000..d1c9cc3
--- /dev/null
+++ b/etc/hosts
@@ -0,0 +1,8 @@
+10.0.1.1 hades.home.arpa
+10.0.1.101 zeta.home.arpa
+10.0.1.102 demeter.home.arpa
+10.0.1.103 asteria.home.arpa
+10.0.3.1 eos.home.arpa
+10.0.3.101 zeta.home.arpa
+10.0.3.102 demeter.home.arpa
+10.0.3.103 asteria.home.arpa
diff --git a/etc/iked.conf b/etc/iked.conf
new file mode 100644
index 0000000..05e05ea
--- /dev/null
+++ b/etc/iked.conf
@@ -0,0 +1,15 @@
+ikev2 'hades' active esp \
+ from dynamic to 10.0.1.0/24 \
+ peer hades.rak.ac \
+ srcid '/CN=asteria.rak.ac' \
+ dstid '/CN=hades.rak.ac' \
+ request address 10.0.1.103 \
+ iface dummy0
+
+ikev2 'eos' active esp \
+ from dynamic to 10.0.3.0/24 \
+ peer eos.rak.ac \
+ srcid '/CN=asteria.rak.ac' \
+ dstid '/CN=eos.rak.ac' \
+ request address 10.0.3.103 \
+ iface dummy0
diff --git a/etc/mpd.conf b/etc/mpd.conf
new file mode 100644
index 0000000..163e377
--- /dev/null
+++ b/etc/mpd.conf
@@ -0,0 +1,43 @@
+music_directory "/var/lib/mpd/music"
+playlist_directory "/var/lib/mpd/playlists"
+db_file "/var/lib/mpd/tag_cache"
+state_file "/var/lib/mpd/state"
+sticker_file "/var/lib/mpd/sticker.sql"
+filesystem_charset "UTF-8"
+
+user "mpd"
+bind_to_address "any"
+auto_update "yes"
+
+input {
+ plugin "curl"
+}
+
+audio_output {
+ type "alsa"
+ name "DigiHug USB Audio"
+ device "hw:CARD=Audio,DEV=0"
+ mixer_type "none"
+ enabled "no"
+}
+audio_output {
+ type "pulse"
+ name "My Pulse Output"
+ server "127.0.0.1"
+ mixer_type "hardware"
+}
+audio_output {
+ type "fifo"
+ name "my_fifo"
+ path "/tmp/mpd.fifo"
+ format "44100:16:2"
+}
+audio_output {
+ type "httpd"
+ name "HTTP stream"
+ bind_to_address "10.0.1.103"
+ port "6688"
+ quality "5"
+ always_on "yes"
+ tags "yes"
+}
diff --git a/etc/network-setup.sh b/etc/network-setup.sh
new file mode 100755
index 0000000..bdcfed5
--- /dev/null
+++ b/etc/network-setup.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+cd $(dirname $0)
+sudo cp systemd/resolved.conf /etc/systemd
+test -f /etc/wpa_supplicant/wpa_supplicant-wlp3s0.conf || sudo ln -s ~rak/.config/wpa_supplicant /etc/wpa_supplicant/wpa_supplicant-wlp3s0.conf
+sudo systemctl enable wpa_supplicant@wlp3s0.service
+sudo systemctl enable systemd-networkd
+sudo systemctl restart wpa_supplicant@wlp3s0.service
+sudo systemctl restart systemd-networkd
+echo "If it works, then purge ifupdown"
diff --git a/etc/networkd-dispatcher/carrier.d/run-he-ipv6-update.sh b/etc/networkd-dispatcher/carrier.d/run-he-ipv6-update.sh
new file mode 100755
index 0000000..e88437f
--- /dev/null
+++ b/etc/networkd-dispatcher/carrier.d/run-he-ipv6-update.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if test $IFACE = "he-ipv6" -a $AdministrativeState = "configured"; then
+ systemctl restart he-ipv6-update.service
+fi
diff --git a/etc/resolv.conf b/etc/resolv.conf
new file mode 100755
index 0000000..eacbeb7
--- /dev/null
+++ b/etc/resolv.conf
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+sudo systemctl enable systemd-resolved.service
+sudo systemctl start systemd-resolved.service
+sudo rm /etc/resolv.conf
+sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
diff --git a/etc/schroot/experimental.sources.list b/etc/schroot/experimental.sources.list
new file mode 100644
index 0000000..29aa5d0
--- /dev/null
+++ b/etc/schroot/experimental.sources.list
@@ -0,0 +1,2 @@
+deb http://localhost:9999/debian experimental main
+deb-src http://localhost:9999/debian experimental main
diff --git a/etc/schroot/schroot.conf b/etc/schroot/schroot.conf
new file mode 100644
index 0000000..04d80a4
--- /dev/null
+++ b/etc/schroot/schroot.conf
@@ -0,0 +1,47 @@
+# schroot chroot definitions.
+# See schroot.conf(5) for complete documentation of the file format.
+
+[sid-snap]
+type=lvm-snapshot
+description=Debian sid LVM snapshot
+groups=sbuild,root
+root-users=rak
+root-groups=root,sbuild
+source-root-users=rak
+device=/dev/tosh/sid_amd64_chroot
+lvm-snapshot-options=--size 5G
+aliases=unstable,unstable-amd64,default
+
+[experimental-snap]
+type=lvm-snapshot
+description=Debian experimental LVM snapshot
+groups=sbuild,root
+root-users=rak
+root-groups=root,sbuild
+source-root-users=rak
+device=/dev/tosh/sid_amd64_chroot
+lvm-snapshot-options=--size 5G
+aliases=experimental,experimental-amd64
+
+[stretch-snap]
+type=lvm-snapshot
+description=Debian stretch LVM snapshot
+groups=sbuild,root
+root-users=rak
+root-groups=root,sbuild
+source-root-users=rak
+device=/dev/tosh/stretch_amd64_chroot
+lvm-snapshot-options=--size 5G
+aliases=stretch,stretch-amd64
+
+[anki]
+type=lvm-snapshot
+profile=desktop
+preserve-environment=true
+description=Anki chroot
+groups=sbuild,root
+root-users=rak
+root-groups=root,sbuild
+source-root-users=rak
+device=/dev/tosh/anki
+lvm-snapshot-options=--size 3G
diff --git a/etc/schroot/setup.d/60append-apt-sources b/etc/schroot/setup.d/60append-apt-sources
new file mode 100755
index 0000000..c98b8ce
--- /dev/null
+++ b/etc/schroot/setup.d/60append-apt-sources
@@ -0,0 +1,34 @@
+#!/bin/sh
+# https://www.pseudorandom.co.uk/2007/sbuild/
+# /etc/schroot/setup.d/60append-apt-sources
+
+AUTH_VERBOSITY="verbose"
+
+if [ $1 = "setup-start" ] || [ $1 = "setup-recover" ]; then
+
+ NAME=$(echo "${CHROOT_NAME}" | sed -e 's/-[a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]-[a-z0-9][a-z0-9][a-z0-9][a-z0-9]-[a-z0-9][a-z0-9][a-z0-9][a-z0-9]-[a-z0-9][a-z0-9][a-z0-9][a-z0-9]-[a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]//g')
+
+ EXTRA_APT_SOURCES="/etc/schroot/sources.list.d/${NAME}.sources.list"
+ APT_PREFS="/etc/schroot/sources.list.d/${NAME}.preferences"
+
+ if [ "$AUTH_VERBOSITY" = "verbose" ]; then
+ echo "Checking for auxiliary apt sources in $EXTRA_APT_SOURCES" >&2
+ fi
+ if [ -e "$EXTRA_APT_SOURCES" ]; then
+ if [ "$AUTH_VERBOSITY" = "verbose" ]; then
+ echo "... extra apt sources found" >&2
+ fi
+ cat "$EXTRA_APT_SOURCES" >> "${CHROOT_PATH}/etc/apt/sources.list"
+ fi
+
+ if [ "$AUTH_VERBOSITY" = "verbose" ]; then
+ echo "Checking for apt preferences in $APT_PREFS" >&2
+ fi
+ if [ -e "$APT_PREFS" ]; then
+ if [ "$AUTH_VERBOSITY" = "verbose" ]; then
+ echo "... apt preferences found" >&2
+ fi
+ install -m644 "$APT_PREFS" "${CHROOT_PATH}/etc/apt/preferences"
+ fi
+
+fi
diff --git a/etc/schroot/setup.d/80append-apt-sources b/etc/schroot/setup.d/80append-apt-sources
new file mode 100755
index 0000000..953a5b1
--- /dev/null
+++ b/etc/schroot/setup.d/80append-apt-sources
@@ -0,0 +1,13 @@
+#!/bin/sh
+# /etc/schroot/setup.d/80apt-get-update
+
+EXTRA_APT_SOURCES="/etc/schroot/sources.list.d/${CHROOT_NAME}.sources.list"
+APT_PREFS="/etc/schroot/sources.list.d/${CHROOT_NAME}.preferences"
+
+if [ -f "EXTRA_APT_SOURCES" -a $1 = "setup-start" ]; then
+ if : || [ "$AUTH_VERBOSITY" = "verbose" ]; then
+ chroot "${CHROOT_PATH}" apt-get update >&2 || true
+ else
+ chroot "${CHROOT_PATH}" apt-get update >/dev/null || true
+ fi
+fi
diff --git a/etc/smtpd.conf b/etc/smtpd.conf
new file mode 100644
index 0000000..4cf1486
--- /dev/null
+++ b/etc/smtpd.conf
@@ -0,0 +1,23 @@
+table aliases file:/etc/aliases
+table secrets file:/etc/smtpd.conf.auth
+
+action "local" forward-only alias <aliases>
+action "relay-rak" relay host smtp+tls://asteria@smtp.rak.ac:587 auth <secrets>
+action "relay-alumni" relay host smtp+tls://alumni@smtp.gmail.com:587 auth <secrets>
+action "relay-gmail" relay host smtp+tls://gmail@smtp.gmail.com:587 auth <secrets>
+action "relay-socs" relay host smtp+tls://socs@mail.cs.mcgill.ca:587 auth <secrets>
+action "relay-queensu" relay host smtp+tls://queensu@smtp.office365.com:587 \
+ auth <secrets> mail-from "9rak@queensu.ca"
+
+match for local action "local"
+match from mail-from "@rak.ac" for any action "relay-rak"
+match from mail-from "@ryanak.ca" for any action "relay-rak"
+match from mail-from "@debian.org" for any action "relay-rak"
+match from mail-from "@gmail.com" for any action "relay-gmail"
+match from mail-from "@cs.queensu.ca" for any action "relay-gmail"
+match from mail-from "@queensu.ca" for any action "relay-queensu"
+match from mail-from regex "ryanakca@(kubuntu.org|ubuntu.com)" for any action "relay-rak"
+match from mail-from regex "rkavanagh?@(cs|alumni)\.cmu\.edu" for any action "relay-alumni"
+match from mail-from regex "(ryank|rkavanagh)@cs\.mcgill\.ca" for any action "relay-socs"
+
+match from local for any action "relay-rak"
diff --git a/etc/systemd/network/10-wlp3s0.network b/etc/systemd/network/10-wlp3s0.network
new file mode 100644
index 0000000..65dfd51
--- /dev/null
+++ b/etc/systemd/network/10-wlp3s0.network
@@ -0,0 +1,5 @@
+[Match]
+Name=wlp3s0
+
+[Network]
+DHCP=yes
diff --git a/etc/systemd/network/20-dummy1.netdev b/etc/systemd/network/20-dummy1.netdev
new file mode 100644
index 0000000..318bb09
--- /dev/null
+++ b/etc/systemd/network/20-dummy1.netdev
@@ -0,0 +1,3 @@
+[NetDev]
+Name=dummy1
+Kind=dummy
diff --git a/etc/systemd/network/20-dummy1.network b/etc/systemd/network/20-dummy1.network
new file mode 100644
index 0000000..41bf4be
--- /dev/null
+++ b/etc/systemd/network/20-dummy1.network
@@ -0,0 +1,6 @@
+[Match]
+Name=dummy1
+Unmanaged=yes
+
+[Network]
+Domains=~home.arpa
diff --git a/etc/systemd/network/20-dummy3.netdev b/etc/systemd/network/20-dummy3.netdev
new file mode 100644
index 0000000..c9fa450
--- /dev/null
+++ b/etc/systemd/network/20-dummy3.netdev
@@ -0,0 +1,3 @@
+[NetDev]
+Name=dummy3
+Kind=dummy
diff --git a/etc/systemd/network/20-dummy3.network b/etc/systemd/network/20-dummy3.network
new file mode 100644
index 0000000..e0d4be5
--- /dev/null
+++ b/etc/systemd/network/20-dummy3.network
@@ -0,0 +1,6 @@
+[Match]
+Name=dummy3
+Unmanaged=yes
+
+[Network]
+Domains=~home.arpa
diff --git a/etc/systemd/network/25-he-ipv6.netdev b/etc/systemd/network/25-he-ipv6.netdev
new file mode 100644
index 0000000..b2d2047
--- /dev/null
+++ b/etc/systemd/network/25-he-ipv6.netdev
@@ -0,0 +1,10 @@
+[NetDev]
+Name=he-ipv6
+Kind=sit
+MTUBytes=1480
+
+[Tunnel]
+Local=192.168.1.103
+Remote=209.51.161.14
+TTL=255
+Independent=true
diff --git a/etc/systemd/network/25-he-ipv6.network b/etc/systemd/network/25-he-ipv6.network
new file mode 100644
index 0000000..6ce754f
--- /dev/null
+++ b/etc/systemd/network/25-he-ipv6.network
@@ -0,0 +1,9 @@
+[Match]
+Name=he-ipv6
+
+[Network]
+Gateway=2001:470:1f06:1d3::1
+Address=2001:470:1f06:1d3::2/64
+Address=2001:470:89ac:3::1/64
+DNS=2001:470:20::2
+BindCarrier=wlp3s0 enp5s0
diff --git a/etc/systemd/resolved.conf b/etc/systemd/resolved.conf
new file mode 100644
index 0000000..b40f8c0
--- /dev/null
+++ b/etc/systemd/resolved.conf
@@ -0,0 +1,34 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it under the
+# terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation; either version 2.1 of the License, or (at your option)
+# any later version.
+#
+# Entries in this file show the compile time defaults. Local configuration
+# should be created by either modifying this file, or by creating "drop-ins" in
+# the resolved.conf.d/ subdirectory. The latter is generally recommended.
+# Defaults can be restored by simply deleting this file and all drop-ins.
+#
+# Use 'systemd-analyze cat-config systemd/resolved.conf' to display the full config.
+#
+# See resolved.conf(5) for details.
+
+[Resolve]
+# Some examples of DNS servers which may be used for DNS= and FallbackDNS=:
+# Cloudflare: 1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com 2606:4700:4700::1111#cloudflare-dns.com 2606:4700:4700::1001#cloudflare-dns.com
+# Google: 8.8.8.8#dns.google 8.8.4.4#dns.google 2001:4860:4860::8888#dns.google 2001:4860:4860::8844#dns.google
+# Quad9: 9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net 2620:fe::fe#dns.quad9.net 2620:fe::9#dns.quad9.net
+#DNS=
+FallbackDNS=1.1.1.1#cloudflare-dns.com 8.8.8.8#dns.google
+Domains=rak.ac
+#DNSSEC=yes
+#DNSOverTLS=no
+#MulticastDNS=yes
+LLMNR=no
+#Cache=yes
+#CacheFromLocalhost=no
+#DNSStubListener=yes
+#DNSStubListenerExtra=
+#ReadEtcHosts=yes
+#ResolveUnicastSingleLabel=no
diff --git a/etc/systemd/system/fix-f4-led.service b/etc/systemd/system/fix-f4-led.service
new file mode 100644
index 0000000..87ccb0f
--- /dev/null
+++ b/etc/systemd/system/fix-f4-led.service
@@ -0,0 +1,11 @@
+# Enable with
+# systemctl enable --now fix-f4-led.service
+[Unit]
+Description=Fix F4 LED on Thinkpad
+
+[Service]
+Type=oneshot
+ExecStart=/bin/sh -c "echo 0 > /sys/class/leds/platform::micmute/brightness"
+
+[Install]
+WantedBy=multi-user.target
diff --git a/etc/systemd/system/he-ipv6-update.service b/etc/systemd/system/he-ipv6-update.service
new file mode 100644
index 0000000..e265b60
--- /dev/null
+++ b/etc/systemd/system/he-ipv6-update.service
@@ -0,0 +1,26 @@
+[Unit]
+Description=Update he-ipv6 tunnel end point
+After=network-online.target
+
+[Service]
+Type=oneshot
+ExecStart=curl --silent "https://USERNAME:PASSWORD@ipv4.tunnelbroker.net/nic/update?hostname=801807"
+# Prevent acquiring new privileges. Warning: breaks execution of SUID binaries
+NoNewPrivileges=yes
+PermissionsStartOnly=true
+# Prevent access to /dev
+PrivateDevices=yes
+# Use dedicated /tmp
+PrivateTmp=yes
+PrivateUsers=true
+# Hide user homes
+ProtectHome=yes
+# Prevent loading or reading kernel modules
+ProtectKernelModules=yes
+# Prevent altering kernel tunables
+ProtectKernelTunables=yes
+# strict or full, see docs
+ProtectSystem=strict
+
+[Install]
+WantedBy=network-online.target
diff --git a/etc/systemd/system/var-lib-mpd-music.automount b/etc/systemd/system/var-lib-mpd-music.automount
new file mode 100644
index 0000000..7314a79
--- /dev/null
+++ b/etc/systemd/system/var-lib-mpd-music.automount
@@ -0,0 +1,9 @@
+[Unit]
+Description=Automount /var/lib/mpd/music
+
+[Automount]
+Where=/var/lib/mpd/music
+DirectoryMode=0555
+
+[Install]
+WantedBy=multi-user.target mpd.service
diff --git a/etc/systemd/system/var-lib-mpd-music.mount b/etc/systemd/system/var-lib-mpd-music.mount
new file mode 100644
index 0000000..bab6239
--- /dev/null
+++ b/etc/systemd/system/var-lib-mpd-music.mount
@@ -0,0 +1,11 @@
+[Unit]
+Description=MPD music mount
+Requires=zfs-mount.service
+
+[Mount]
+What=/media/t/music_clean
+Where=/var/lib/mpd/music
+Options=bind,ro
+
+[Install]
+WantedBy=multi-user.target
diff --git a/etc/wpa_supplicant/wpa_supplicant-wlp3s0.conf b/etc/wpa_supplicant/wpa_supplicant-wlp3s0.conf
new file mode 120000
index 0000000..69979cf
--- /dev/null
+++ b/etc/wpa_supplicant/wpa_supplicant-wlp3s0.conf
@@ -0,0 +1 @@
+/home/rak/.config/wpa_supplicant.conf \ No newline at end of file
diff --git a/executable_dot_xinitrc.tmpl b/executable_dot_xinitrc.tmpl
new file mode 100644
index 0000000..2889df0
--- /dev/null
+++ b/executable_dot_xinitrc.tmpl
@@ -0,0 +1,60 @@
+#!/bin/sh
+
+# Make sure that everything started by our window manager
+# happens from ${HOME}
+cd ${HOME}
+
+# Load our resources
+if test -f ~/.Xresources; then
+ # -I specifies the path to look for
+ # #include references.
+ xrdb -merge -I$HOME ~/.Xresources
+fi
+
+# Set our background to black
+xsetroot -solid black
+
+# xset dpms standby suspend off
+xset dpms 180 210 240
+
+case `uname` in
+ Darwin)
+ # Don't forget to create a symlink from
+ # ~/.xinitrc.d/xinitrc.sh -> ~/.xinitrc
+ export LANG="{{ .locale }}"
+ export LC_TIME="en_GB.UTF-8"
+ export LC_COLLATE=C
+ urxvtd -q -f -o &
+ exec cwm
+ ;;
+
+ OpenBSD)
+ export LANG="{{ .locale }}"
+ export LC_TIME="en_GB.UTF-8"
+ export LC_COLLATE=C
+ [ -d /usr/local/share/fonts/spleen ] && xset +fp /usr/local/share/fonts/spleen/
+ redshift &
+ ${HOME}/bin/icd
+ xidle &
+ exec xmonad
+ ;;
+
+ Linux)
+ ${HOME}/bin/icd
+ ${HOME}/bin/mice.sh
+
+ redshift &
+ ${HOME}/.screenlayout/{{ .chezmoi.hostname }}-home.sh
+ trayer --tint black --edge top --SetDockType true --SetPartialStrut true \
+ --expand true --width 10 --transparent true --height 12 --align right &
+ ${HOME}/.dzen/battery.sh &
+
+ sh ${HOME}/bin/startaudio &
+ pavucontrol &
+
+ urxvtd -q -f -o &
+ urxvtc &
+
+ exec xmonad
+ ;;
+esac
diff --git a/fonts/Brill_Typeface_2.06/00_Brill_Fonts_Read_Me_First.txt b/fonts/Brill_Typeface_2.06/00_Brill_Fonts_Read_Me_First.txt
new file mode 100644
index 0000000..077ac34
--- /dev/null
+++ b/fonts/Brill_Typeface_2.06/00_Brill_Fonts_Read_Me_First.txt
@@ -0,0 +1,45 @@
+BRILL FONTS END USER LICENSE AGREEMENT
+Version 2.06, October 31, 2014
+PREAMBLE
+BRILL owns all intellectual property in the Brill Font Package and in the accompanying documentation and help files (including any input method software). The Brill Font Package is licensed, not sold.
+
+This Brill Font License allows the licensed fonts to be used by individuals or by institutional customers for non-commercial purposes without charge. Commercial use of any kind, including the embedding of the fonts or part(s) of them in any Commercial Product not published by BRILL is prohibited unless prior written permission has been secured from BRILL; write to brill-typeface@brill.com should you want to acquire such a permission. None of these fonts may be redistributed to others, nor may they be sold, without prior written consent from BRILL.
+
+1. Definitions
+
+“BRILL†in all capitals refers to the limited liability company Koninklijke Brill NV, of Plantijnstraat 2, 2321 JC Leiden, the Netherlands.
+
+“Brill†in lowercase letters with a capital initial refers to the set of font files released by BRILL under the conditions stated in this license.
+
+“Brill Documentation†refers to the documentation accompanying the Brill fonts.
+
+“Brill Font Package†refers to the whole package consisting of the Brill font software, the Brill Documentation, and the Keyboards (when the latter are included in a specific release package). The Brill fonts are in .otf format, or CFF-Flavoured OpenType (separate and technically distinct Brill Web Fonts are also available).
+
+“Brill Web Fonts†refers to a separate and technically distinct set of Brill fonts in .woff or Web Open Font Format. These are not covered by this Brill Fonts End User License Agreement but by a separate Brill Web Fonts End User License Agreement.
+“Commercial Product†as used herein shall mean a physical or electronic document or data file or executable file created by Use of the Font Software which is offered for distribution to the general public (or to some subset of the general public) in exchange for a fee or other consideration. By way of illustration and not by way of limitation, Licensee may use the Brill Fonts for all scholarly and teaching activities; embed the fonts in a PDF document or the like that is published on Licensee’s website; install the fonts on a secure network as part of the purchase of a Brill electronic product for the sole purpose of displaying and/or printing Brill products. Examples of prohibited Commercial Use are, without limitation: embedding a Brill font in a document prepared for publishers other than BRILL; publication of PDF files, or of products printed from PDF files, which contain embedded Brill fonts, for a fee or other consideration. Open Access publications are also considered commercial products under the terms of this license.
+“Derivative Work†shall mean binary data based upon or derived from Font Software (or any portion of Font Software) in any form in which such binary data may be recast, transformed, or adapted including, but not limited to, binary data in any format into which Font Software may be converted.
+
+“Font Software†refers to the ‘Brill’ family of fonts, initially consisting of a roman and an italic font. A bold and a bold italic font will be added later.
+
+“Keyboards†refers to the keyboard input software (also known as input method software) which may or may not be included with the Font Software.
+“Licensee†is the person or institution that has agreed to abide by this Agreement and is therefore allowed to use the Font Software in accordance with this Agreement.
+“Secure Network†is a network (whether a standalone network or a virtual network within the Internet) which is only accessible to Authorized Users approved by the Licensee whose identity is authenticated at the time of log-in and periodically thereafter consistent with current best practice, and whose conduct is subject to regulation by the Licensee.
+“Use†of the Font Software shall occur when an individual is able to give commands (whether by keyboard or otherwise) that are followed by the Font Software, regardless of the location in which the Font Software resides.
+Licensee hereby agrees to the following:
+2. Licensee is bound by the Agreement and acknowledges that all Use (as defined herein) of the Font Software (as defined herein) supplied to Licensee by Brill is governed by the Agreement.
+3. Licensee is hereby granted a non-exclusive, non-assignable, non-transferable (except as expressly permitted herein) license to access the Font Software subject to all of the terms and conditions of the Agreement. Licensee has no rights to the Font Software other than as expressly set forth in the Agreement. Licensee agrees that BRILL owns all right, title and interest in and to the Font Software, its structure, organization, code, and related files, including all property rights therein such as copyright, design and trademarks rights. Licensee agrees that the Font Software, its structure, organization, code, and related files are valuable property of BRILL and that any intentional Use of the Font Software not expressly permitted by the Agreement constitutes a theft of valuable property. All rights not expressly granted in the Agreement are expressly reserved to BRILL. Licensee may not use the Font Software to produce and/or distribute a Commercial Product without a separate license from BRILL authorizing licensee to do so.
+
+PERMISSION & CONDITIONS
+4. Permission is hereby granted, free of charge, to use, copy and embed unmodified copies of the Font Software for non-commercial purposes, subject to the following conditions:
+
+5. Neither the Font Software nor any of its individual components nor the Keyboards nor the Brill Documentation may be sold or redistributed. The sole source of the font software is the BRILL website: http://www.brill.com/brill-typeface
+6. Licensee may install and Use the Font Software on no more than three computers designated for individual use by Licensee (for instance: licensee’s home, office, and laptop computers). If the Font Software is used as part of an electronic product purchased from BRILL, it may be installed on as many computers as are covered by the BRILL electronic product license. In no case may the Font Software be installed or Used on a server that can be accessed via the Internet or other external network system (a system other than a LAN). The font software may not be served to the Web by whatever mechanism: licensee may not link to (copies of) the Brill fonts through program instructions (including, but not limited to, Cascading Style Sheets), thereby causing a copy or copies of a Brill font or part of a Brill font to be transferred to a computer other than that of licensee. For such web use, a separate set of technically distinct Brill Web Fonts is available.
+7. Licensee may not embed Font Software in a Commercial Product without a separate written license from BRILL, and licensee may not embed Font Software in an electronic document or data file for any reason other than licensee’s own personal Use.
+8. Licensee may not alter Font Software for the purpose of adding any functionality which such Font Software did not have when delivered to Licensee by BRILL. If the Font Software contains embedding bits that limit the capabilities of the Font Software, licensee may not change or alter the embedding bits. Embedding the Font in HTML web pages is not allowed. Embedding the Font in Adobe PDFs is allowed only in read-only PDFs. Such documents may be viewable and printable, but must not be editable by third parties.
+9. Licensee may take a digitized copy of the Font Software used for a particular document, or Font Software embedded in an electronic document, to a commercial printer or service bureau for use by the printer or service in printing such document but only if the printer or service bureau represents to licensee that it will delete the Font Software after completion of the job for which it was needed.
+10. Licensee acknowledges that the Font Software is protected by the copyright and other intellectual property law and by international treaties. Licensee agrees to treat the Font Software as one would any other copyrighted material, such as a book. Licensee may not copy the Font Software, except as expressly provided herein. Any copies that licensee is expressly permitted to make pursuant to the Agreement must contain the same copyright, trademark, and other proprietary notices that appear on or in the Font Software. Licensee agrees not to adapt, modify, alter, translate, convert, or otherwise change the Font Software, or to create Derivative Works from Font Software or any portion thereof. Licensee further agrees not to use Font Software in connection with software and/or hardware which create Derivative Works of such Font Software. Licensee agrees not to reverse engineer, decompile, disassemble, or otherwise attempt to discover the source code of the Font Software, provided, however, that if licensee is located in a European Community member country or any other country which provides rights materially similar to the rights set forth in this proviso, licensee may reverse engineer or decompile the Font Software only to the extent that sufficient information is not available for the purpose of creating an interoperable software program (but only for such purpose and only to the extent that sufficient information is not provided by BRILL upon written request). Licensee agrees to use trademarks associated with the Font Software according to accepted trademark practice, including identification of the trademark owner’s name. Trademarks can only be used to identify printed output produced by the Font Software. Licensee may not change any trademark or trade name designation for the Font Software.
+11. Licensee may not rent, lease, sublicense, give, lend, or further distribute the Font Software, or any copy thereof, except as expressly provided herein.
+12. Licensee may make one back-up copy of Font Software for archival purposes only, and licensee shall retain exclusive custody and control over such copy. Upon termination of the Agreement, licensee must destroy the original and any and all copies of the Font Software.
+13. BRILL DOES NOT WARRANT THE PERFORMANCE OR RESULTS LICENSEE MAY OBTAIN BY USING THE FONT SOFTWARE. THE FOREGOING STATES THE SOLE AND EXCLUSIVE REMEDIES FOR BRILL’S BREACH OF WARRANTY. BRILL MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, AS TO NON-INFRINGEMENT OF THIRD PARTY RIGHTS, MERCHANTABILITY, OR FITNESS FOR ANY PARTICULAR PURPOSE. IN NO EVENT WILL BRILL BE LIABLE TO LICENSEE OR ANYONE ELSE (I) FOR ANY CONSEQUENTIAL, INCIDENTAL OR SPECIAL DAMAGES, INCLUDING WITHOUT LIMITATION ANY LOST PROFITS, LOST DATA, LOST BUSINESS OPPORTUNITIES, OR LOST SAVINGS, EVEN IF BRILL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (II) FOR ANY CLAIM AGAINST LICENSEE BY ANY THIRD PARTY SEEKING SUCH DAMAGES EVEN IF BRILL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+14. The performance, construction and enforcement of this agreement shall be governed by the laws and statutes of the Netherlands. All disputes that may arise in connection with this present agreement or the breach thereof shall be settled exclusively by the competent court in The Hague, The Netherlands. The Agreement will not be governed by the United Nations Convention of Contracts for the International Sale of Goods, the application of which is expressly excluded. If any part of this Agreement is found void and unenforceable, it will not affect the validity of the balance of the Agreement, which shall remain valid and enforceable according to its terms.
+15. The Agreement shall automatically terminate upon failure by Licensee (or any authorized person or member of Licensee’s household or users of a Secure Network to whom Licensee has given permission to Use the Font Software) to comply with its terms. The termination of the Agreement shall not preclude BRILL from suing licensee for damages of any breach of the Agreement.
diff --git a/fonts/Brill_Typeface_2.06/Brill Bold 2.06 051.ttf b/fonts/Brill_Typeface_2.06/Brill Bold 2.06 051.ttf
new file mode 100644
index 0000000..0a2acb8
--- /dev/null
+++ b/fonts/Brill_Typeface_2.06/Brill Bold 2.06 051.ttf
Binary files differ
diff --git a/fonts/Brill_Typeface_2.06/Brill Bold Italic 2.06 051.ttf b/fonts/Brill_Typeface_2.06/Brill Bold Italic 2.06 051.ttf
new file mode 100644
index 0000000..e38adb7
--- /dev/null
+++ b/fonts/Brill_Typeface_2.06/Brill Bold Italic 2.06 051.ttf
Binary files differ
diff --git a/fonts/Brill_Typeface_2.06/Brill Italic 2.06 051.ttf b/fonts/Brill_Typeface_2.06/Brill Italic 2.06 051.ttf
new file mode 100644
index 0000000..e08e717
--- /dev/null
+++ b/fonts/Brill_Typeface_2.06/Brill Italic 2.06 051.ttf
Binary files differ
diff --git a/fonts/Brill_Typeface_2.06/Brill Roman 2.06 051.ttf b/fonts/Brill_Typeface_2.06/Brill Roman 2.06 051.ttf
new file mode 100644
index 0000000..6b4fb6b
--- /dev/null
+++ b/fonts/Brill_Typeface_2.06/Brill Roman 2.06 051.ttf
Binary files differ
diff --git a/fonts/Brill_Typeface_2.06/Brill_Fonts_End_User_License_Agreement_2.06.pdf b/fonts/Brill_Typeface_2.06/Brill_Fonts_End_User_License_Agreement_2.06.pdf
new file mode 100644
index 0000000..af654df
--- /dev/null
+++ b/fonts/Brill_Typeface_2.06/Brill_Fonts_End_User_License_Agreement_2.06.pdf
Binary files differ
diff --git a/fonts/Brill_Typeface_2.06/Brill_Typeface_User_Guide_2.06.pdf b/fonts/Brill_Typeface_2.06/Brill_Typeface_User_Guide_2.06.pdf
new file mode 100644
index 0000000..b11b5b6
--- /dev/null
+++ b/fonts/Brill_Typeface_2.06/Brill_Typeface_User_Guide_2.06.pdf
Binary files differ
diff --git a/fonts/Courier-Prime/.DS_Store b/fonts/Courier-Prime/.DS_Store
new file mode 100644
index 0000000..5008ddf
--- /dev/null
+++ b/fonts/Courier-Prime/.DS_Store
Binary files differ
diff --git a/fonts/Courier-Prime/Courier Prime Bold Italic.ttf b/fonts/Courier-Prime/Courier Prime Bold Italic.ttf
new file mode 100644
index 0000000..d4e7186
--- /dev/null
+++ b/fonts/Courier-Prime/Courier Prime Bold Italic.ttf
Binary files differ
diff --git a/fonts/Courier-Prime/Courier Prime Bold.ttf b/fonts/Courier-Prime/Courier Prime Bold.ttf
new file mode 100644
index 0000000..1b0888c
--- /dev/null
+++ b/fonts/Courier-Prime/Courier Prime Bold.ttf
Binary files differ
diff --git a/fonts/Courier-Prime/Courier Prime Italic.ttf b/fonts/Courier-Prime/Courier Prime Italic.ttf
new file mode 100644
index 0000000..75a1343
--- /dev/null
+++ b/fonts/Courier-Prime/Courier Prime Italic.ttf
Binary files differ
diff --git a/fonts/Courier-Prime/Courier Prime.ttf b/fonts/Courier-Prime/Courier Prime.ttf
new file mode 100644
index 0000000..db4e6c1
--- /dev/null
+++ b/fonts/Courier-Prime/Courier Prime.ttf
Binary files differ
diff --git a/fonts/Courier-Prime/LICENSE/OFL-FAQ.txt b/fonts/Courier-Prime/LICENSE/OFL-FAQ.txt
new file mode 100644
index 0000000..bf1aca8
--- /dev/null
+++ b/fonts/Courier-Prime/LICENSE/OFL-FAQ.txt
@@ -0,0 +1,369 @@
+OFL FAQ - Frequently Asked Questions about the SIL Open Font License (OFL)
+Version 1.1-update2 - 23 August 2010
+(See http://scripts.sil.org/OFL for updates)
+
+
+CONTENTS OF THIS FAQ
+1 USING AND DISTRIBUTING FONTS LICENSED UNDER THE OFL
+2 USING OFL FONTS FOR WEB PAGES AND ONLINE WEBFONT SERVICES
+3 MODIFYING OFL-LICENSED FONTS
+4 LICENSING YOUR ORIGINAL FONTS UNDER THE OFL
+5 CHOOSING RESERVED FONT NAMES
+6 ABOUT THE FONTLOG
+7 MAKING CONTRIBUTIONS TO OFL PROJECTS
+8 ABOUT THE LICENSE ITSELF
+9 ABOUT SIL INTERNATIONAL
+APPENDIX A - FONTLOG EXAMPLE
+
+
+1 USING AND DISTRIBUTING FONTS LICENSED UNDER THE OFL
+
+1.1 Can I use the fonts for a book or other print publication?
+Yes. You can mention the font and author in the book's colophon if you wish, but that is not required.
+
+1.2 Can the fonts be included with Free/Libre and Open Source Software collections such as GNU/Linux and BSD distributions?
+Yes! Fonts licensed under the OFL can be freely included alongside other software under FLOSS (Free/Libre and Open Source Software) licenses. Since fonts are typically aggregated with, not merged into, existing software, there is little need to be concerned about incompatibility with existing software licenses. You may also repackage the fonts and the accompanying components in a .rpm or .deb package and include them in distribution CD/DVDs and online repositories. (Also see section 5.9 about rebuilding from source.)
+
+1.3 I want to distribute the fonts with my program. Does this mean my program also has to be Free/Libre and Open Source Software?
+No. Only the portions based on the Font Software are required to be released under the OFL. The intent of the license is to allow aggregation or bundling with software under restricted licensing as well.
+
+1.4 Can I sell a software package that includes these fonts?
+Yes, you can do this with both the Original Version and a Modified Version of the fonts. Examples of bundling made possible by the OFL would include: word processors, design and publishing applications, training and educational software, games and entertainment software, mobile device applications, etc.
+
+1.5 Can I include the fonts on a CD of freeware or commercial fonts?
+Yes, as long some other font or software is also on the disk, so the OFL font is not sold by itself.
+
+1.6 Why won't the OFL let me sell the fonts alone?
+The intent is to keep people from making money by simply redistributing the fonts. The only people who ought to profit directly from the fonts should be the original authors, and those authors have kindly given up potential direct income to distribute their fonts under the OFL. Please honour and respect their contribution!
+
+1.7 What about sharing OFL fonts with friends on a CD, DVD or USB stick?
+You are very welcome to share open fonts with friends, family and colleagues through removable media. Just remember to include the full font package, including any copyright notices and licensing information as available in OFL.txt. In the case where you sell the font, it has to come bundled with software.
+
+1.8 Can I host the fonts on a web site for others to use?
+Yes, as long as you make the full font package available. In most cases it may be best to point users to the main site that distributes the Original Version so they always get the most recent stable and complete version. See also discussion of webfonts in Section 2.
+
+1.9 Can I host the fonts on a server for use over our internal network?
+Yes. If the fonts are transferred from the server to the client computer by means that allow them to be used even if the computer is no longer attached to the network, the full package (copyright notices, licensing information, etc.) should be included.
+
+1.10 Does the full OFL license text always need to accompany the font?
+The only situation in which an OFL font can be distributed without the text of the OFL (either in a separate file or in font metadata), is when a font is embedded in a document or bundled within a program. In the case of metadata included within a font, it is legally sufficient to include only a link to the text of the OFL on http://scripts.sil.org/OFL, but we strongly recommend against this. Most modern font formats include metadata fields that will accept the full OFL text, and full inclusion increases the likelihood that users will understand and properly apply the license.
+
+1.11 What do you mean by 'embedding'? How does that differ from other means of distribution?
+By 'embedding' we mean inclusion of the font in a document or file in a way that makes extraction (and redistribution) difficult or clearly discouraged. In many cases the names of embedded fonts might also not be obvious to those reading the document, the font data format might be altered, and only a subset of the font - only the glyphs required for the text - might be included. Any other means of delivering a font to another person is considered 'distribution', and needs to be accompanied by any copyright notices and licensing information available in OFL.txt.
+
+1.12 So can I embed OFL fonts in my document?
+Yes, either in full or a subset. The restrictions regarding font modification and redistribution do not apply, as the font is not intended for use outside the document.
+
+1.13 Does embedding alter the license of the document itself?
+No. Referencing or embedding an OFL font in any document does not change the license of the document itself. The requirement for fonts to remain under the OFL does not apply to any document created using the fonts and their derivatives. Similarly, creating any kind of graphic using a font under OFL does not make the resulting artwork subject to the OFL.
+
+1.14 If OFL fonts are extracted from a document in which they are embedded (such as a PDF file), what can be done with them? Is this a risk to author(s)?
+The few utilities that can extract fonts embedded in a PDF will typically output limited amounts of outlines - not a complete font. To create a working font from this method is much more difficult and time consuming than finding the source of the original OFL font. So there is little chance that an OFL font would be extracted and redistributed inappropriately through this method. Even so, copyright laws address any misrepresentation of authorship. All Font Software released under the OFL and marked as such by the author(s) is intended to remain under this license regardless of the distribution method, and cannot be redistributed under any other license. We strongly discourage any font extraction - we recommend directly using the font sources instead - but if you extract font outlines from a document, please be considerate: use your common sense and respect the work of the author(s) and the licensing model.
+
+1.15 What about distributing fonts with a document? Within a compressed folder structure? Is it distribution, bundling or embedding?
+Certain document formats may allow the inclusion of an unmodified font within their file structure which consists of a compressed folder containing the various resources forming the document (such as pictures and thumbnails). Including fonts within such a structure is understood as being different from embedding but rather similar to bundling (or mere aggregation) which the license explicitly allows. In this case the font is conveyed unchanged whereas embedding a font usually transforms it from the original format. The OFL does not allow anyone to extract the font from such a structure to then redistribute it under another license. The explicit permission to redistribute and embed does not cancel the requirement for the Font Software to remain under the license chosen by its author(s).
+
+1.16 What about ebooks shipping with open fonts?
+The requirements differ depending on whether the fonts are linked, embedded or distributed (bundled or aggregated). Some ebook formats use web technologies to do font linking via @font-face, others are designed for font embedding, some use fonts distributed with the document or reading software, and a few rely solely on the fonts already present on the target system. The license requirements depend on the type of inclusion as discussed in 1.15.
+
+1.17 Can Font Software released under the OFL be subject to URL-based access restrictions methods or DRM (Digital Rights Management) mechanisms?
+Yes, but these issues are out-of-scope for the OFL. The license itself neither encourages their use nor prohibits them since such mechanisms are not implemented in the components of the Font Software but through external software. Such restrictions are put in place for many different purposes corresponding to various usage scenarios. One common example is to limit potentially dangerous cross-site scripting attacks. However, in the spirit of libre/open fonts and unrestricted writing systems, we strongly encourage open sharing and reuse of OFL fonts, and the establishment of an environment where such restrictions are unnecessary. Note that whether you wish to use such mechanisms or you prefer not to, you must still abide by the rules set forth by the OFL when using fonts released by their authors under this license. Derivative fonts must be licensed under the OFL, even if they are part of a service for which you charge fees and/or for which access to source code is restricted. You may not sell the fonts on their own - they must be part of a larger software package, bundle or subscription plan. For example, even if the OFL font is distributed in a software package or via an online service using a DRM mechanism, the user would still have the right to extract that font, use, study, modify and redistribute it under the OFL.
+
+1.18 I've come across a font released under the OFL. How can I easily get more information about the Original Version? How can I know where it stands compared to the Original Version or other Modified Versions?
+Consult the copyright statement(s) in the license for ways to contact the original authors. Consult the FONTLOG for information on how the font differs from the Original Version, and get in touch with the various contributors via the information in the acknowledgement section. Please consider using the Original Versions of the fonts whenever possible.
+
+1.19 What do you mean in condition 4? Can you provide examples of abusive promotion / endorsement / advertisement vs. normal acknowledgement?
+The intent is that the goodwill and reputation of the author(s) should not be used in a way that makes it sound like the original author(s) endorse or approve of a specific Modified Version or software bundle. For example, it would not be right to advertise a word processor by naming the author(s) in a listing of software features, or to promote a Modified Version on a web site by saying "designed by ...". However, it would be appropriate to acknowledge the author(s) if your software package has a list of people who deserve thanks. We realize that this can seem to be a grey area, but the standard used to judge an acknowledgement is that if the acknowledgement benefits the author(s) it is allowed, but if it primarily benefits other parties, or could reflect poorly on the author(s), then it is not.
+
+
+2 USING OFL FONTS FOR WEBPAGES AND ONLINE WEBFONT SERVICES
+
+2.1 Can I make webpages using these fonts?
+Yes! Go ahead! Using CSS (Cascading Style Sheets) is recommended. Your three best options:
+- referring directly in your stylesheet to open fonts which may be available on the user's system
+- providing links to download the full package of the font - either from your own website or from elsewhere - so users can install it themselves
+- using @font-face to distribute the font directly to browsers. This is recommended and explicitly allowed by the licensing model because it is distribution. The font file itself is distributed with other components of the webpage. It is not embedded in the webpage but referenced through a web address which will cause the browser to retrieve and use the corresponding font to render the webpage (see 1.11 and 1.15 for details related to embedding fonts into documents). As you take advantage of the @font-face cross-platform standard, be aware that webfonts are often tuned for a web environment and not intended for installation and use outside a browser. The reasons in favour of using webfonts are to allow design of dynamic text elements instead of static graphics, to make it easier for content to be localized and translated, indexed and searched, and all this with cross-platform open standards without depending on restricted extensions or plugins. You should check the CSS cascade (the order in which fonts are being called or delivered to your users) when testing.
+
+2.2 Can I make and use WOFF (Web Open Font Format) versions of OFL fonts?
+Yes, but you need to be careful. A change in font format normally is considered modification, and Reserved Font Names (RFNs) cannot be used. Because of the design of the WOFF format, however, it is possible to create a WOFF version that is not considered modification, and so would not require a name change. You are allowed to create, use and distribute a WOFF version of an OFL font without changing the font name, but only if:
+
+- the original font data remains unchanged except for WOFF compression, and
+- WOFF-specific metadata is either omitted altogether or present and includes, unaltered, the contents of all equivalent metadata in the original font.
+
+If the original font data or metadata is changed, or the WOFF-specific metadata is incomplete, the font must be considered a Modified Version, the OFL restrictions would apply and the name of the font must be changed: any RFNs cannot be used and copyright notices and licensing information must be included and cannot be deleted or modified. You must come up with a unique name - we recommend one corresponding to your domain or your particular web application. Be aware that only the original author(s) can use RFNs. This is to prevent collisions between a derivative tuned to your audience and the original upstream version and so to reduce confusion.
+
+Please note that most WOFF conversion tools and online services do not meet the two requirements listed above, and so their output must be considered a Modified Version. So be very careful and check to be sure that the tool or service you're using is compressing unchanged data and completely and accurately reflecting the original font metadata.
+
+2.3 What about other webfont formats such as EOT/EOTLite/CWT/etc.?
+In most cases these formats alter the original font data more than WOFF, and do not completely support appropriate metadata, so their use must be considered modification and RFNs may not be used.
+
+2.4 Can I make OFL fonts available through webfont online services?
+Yes, you are welcome to include OFL fonts in online webfont services as long as you properly meet all the conditions of the license. The origin and open status of the font should be clear among the other fonts you are hosting. Authorship, copyright notices and license information must be sufficiently visible to your users or subscribers so they know where the font comes from and the rights granted by the author(s). Make sure the font file contains the needed copyright notice(s) and licensing information in its metadata. Please double-check the accuracy of every field to prevent contradictory information. Other font formats, including EOT/EOTLite/CWT and superior alternatives like WOFF, already provide fields for this information. Remember that if you modify the font within your library or convert it to another format for any reason the OFL restrictions apply and you need to change the names accordingly. Please respect the author's wishes as expressed in the OFL and do not misrepresent original designers and their work. Don't lump quality open fonts together with dubious freeware or public domain fonts. Consider how you can best work with the original designers and foundries, support their efforts and generate goodwill that will benefit your service. (See 1.17 for details related to URL-based access restrictions methods or DRM mechanisms).
+
+2.5 Can I make and publish CMS themes or templates that use OFL fonts? Can I include the fonts themselves in the themes or templates? Can I sell the whole package?
+Yes, you are very welcome to integrate open fonts into themes and templates for your preferred CMS and make them more widely available. Be aware that you can only sell the fonts and your CMS add-on as part of a software bundle. (See 1.4 for details and examples about selling bundles).
+
+2.6 Some webfont formats and services provide ways of "optimising" the font for a particular website or web application; is that allowed?
+Yes, it is permitted, but remember that these optimised versions are Modified Versions and so must follow OFL requirements like appropriate renaming. Also you need to bear in mind the other important parameters beyond compression, speed and responsiveness: you need to consider the audience of your particular website or web application, as choosing some optimisation parameters may turn out to be less than ideal for them. Subsetting by removing certain glyphs or features may seriously limit functionality of the font in various languages used by your users. It may also introduce degradation of quality in the rendering or specific bugs on the various platforms compared to the original font. In other words, remember that one person's optimised font may be another person's missing feature. Various advanced typographic features are also available through CSS and may provide the desired effects without the need to modify the font.
+
+
+3 MODIFYING OFL-LICENSED FONTS
+
+3.1 Can I change the fonts? Are there any limitations to what things I can and cannot change?
+You are allowed to change anything, as long as such changes do not violate the terms of the license. In other words, you are not allowed to remove the copyright statement(s) from the font, but you could put additional information into it that covers your contribution.
+
+3.2 I have a font that needs a few extra glyphs - can I take them from an OFL licensed font and copy them into mine?
+Yes, but if you distribute that font to others it must be under the OFL, and include the information mentioned in condition 2 of the license.
+
+3.3 Can I charge people for my additional work? In other words, if I add a bunch of special glyphs and/or OpenType/Graphite code, can I sell the enhanced font?
+Not by itself. Derivative fonts must be released under the OFL and cannot be sold by themselves. It is permitted, however, to include them in a larger software package (such as text editors, office suites or operating systems), even if the larger package is sold. In that case, you are strongly encouraged, but not required, to also make that derived font easily and freely available outside of the larger package.
+
+3.4 Can I pay someone to enhance the fonts for my use and distribution?
+Yes. This is a good way to fund the further development of the fonts. Keep in mind, however, that if the font is distributed to others it must be under the OFL. You won't be able to recover your investment by exclusively selling the font, but you will be making a valuable contribution to the community. Please remember how you have benefited from the contributions of others.
+
+3.5 I need to make substantial revisions to the font to make it work with my program. It will be a lot of work, and a big investment, and I want to be sure that it can only be distributed with my program. Can I restrict its use?
+No. If you redistribute a Modified Version of the font it must be under the OFL. You may not restrict it in any way beyond what the OFL permits and requires. This is intended to ensure that all released improvements to the fonts become available to everyone. But you will likely get an edge over competitors by being the first to distribute a bundle with the enhancements. Again, please remember how you have benefited from the contributions of others.
+
+3.6 Do I have to make any derivative fonts (including extended source files, build scripts, documentation, etc.) publicly available?
+No, but please consider sharing your improvements with others. You may find that you receive in return more than what you gave.
+
+3.7 If a trademark is claimed in the OFL font, does that trademark need to remain in modified fonts?
+Yes, any trademark notices must remain in any derivative fonts to respect trademark laws, but you may add any additional trademarks you claim, officially registered or not. For example if an OFL font called "Foo" contains a notice that "Foo is a trademark of Acme", then if you rename the font to "Bar" when creating a Modified Version, the new trademark notice could say "Foo is a trademark of Acme Inc. - Bar is a trademark of Roadrunner Technologies Ltd.". Trademarks work alongside the OFL and are not subject to the terms of the licensing agreement. Please refer to the appropriate trademark laws.
+
+
+4 LICENSING YOUR ORIGINAL FONTS UNDER THE OFL
+
+4.1 Can I use the SIL OFL for my own fonts?
+Yes! We heartily encourage everyone to use the OFL to distribute their own original fonts. It is a carefully constructed license that allows great freedom along with enough artistic integrity protection for the work of the authors as well as clear rules for other contributors and those who redistribute the fonts. The licensing model is used successfully by various organisations, both for-profit and not-for-profit, to release fonts of varying levels of scope and complexity.
+
+4.2 What do I have to do to apply the OFL to my font?
+If you want to release your fonts under the OFL, we recommend you do the following:
+
+4.2.1 Put your copyright and Reserved Font Names information at the beginning of the main OFL.txt file in place of the dedicated placeholders. Include this file in your release package.
+
+4.2.2 Put your copyright and the OFL text with Reserved Font Names into your font files (the copyright and license fields). A link to the OFL text on the OFL web site is an acceptable (but not recommended) alternative. Also add this information to any other components (build scripts, glyph databases, documentation, test files, etc). Depending on the format of your fonts and sources, you can use template human-readable headers or machine-readable metadata.
+
+4.2.3 Write an initial FONTLOG.txt for your font and include it in the release package.
+
+4.2.4 Include the relevant practical documentation on the license by including the OFL-FAQ.txt in your package.
+
+4.3 Will you make my font OFL for me?
+We won't do the work for you. We can, however, try to answer your questions, unfortunately we do not have the resources to review and check your font packages for correct use of the OFL.
+
+4.4 Will you distribute my OFL font for me?
+No, although if the font is of sufficient quality and general interest we may include a link to it on our partial list of OFL fonts on the OFL web site. You may wish to consider other open font catalogs or hosting services, such as the Unifont Font Guide (http://unifont.org/fontguide), The League of Movable Type (http://theleagueofmovabletype.com), Kernest (http://kernest.com/) or the Open Font Library (http://openfontlibrary.org/), which despite the name has no direct relationship to the OFL or SIL. We do not endorse any particular catalog or hosting service - it is your responsibility to determine if the service is right for you.
+
+4.5 Why should I use the OFL for my fonts?
+- to meet needs for fonts that can be modified to support minority languages
+- to provide a legal and clear way for people to respect your work but still use it (and reduce piracy)
+- to involve others in your font project
+- to enable your fonts to be expanded with new weights and improved writing system/language support
+- to allow more technical font developers to add features to your design (such as OpenType and Graphite support)
+- to renew the life of an old font lying on your hard drive with no business model
+- to allow your font to be included in Libre Software operating systems like Ubuntu
+- to give your font world status and wide, unrestricted distribution
+- to educate students about quality typeface and font design
+- to expand your test base and get more useful feedback
+- to extend your reach to new markets when users see your metadata and go to your website
+- to get your font more easily into one of the webfont online services
+- to attract attention for your commercial fonts
+- to make money through webfont services
+- to make money by bundling fonts with applications
+- to make money adjusting and extending existing open fonts
+- to get a better chance that foundations/NGOs/charities/companies who commission fonts will pick you
+- to be part of a sharing design and development community
+- to give back and contribute to a growing body of font sources
+
+
+5 CHOOSING RESERVED FONT NAMES
+
+5.1 What are Reserved Font Names?
+These are font names, or portions of font names, that the author has chosen to reserve for use only with the Original Version of the font, or for Modified Version(s) created by the original author.
+
+5.2 Why can't I use the Reserved Font Names in my derivative font names? I'd like people to know where the design came from.
+The best way to acknowledge the source of the design is to thank the original authors and any other contributors in the files that are distributed with your revised font (although no acknowledgement is required). The FONTLOG is a natural place to do this. Reserved Font Names ensure that the only fonts that have the original names are the unmodified Original Versions. This allows designers to maintain artistic integrity while allowing collaboration to happen. It eliminates potential confusion and name conflicts. When choosing a name, be creative and avoid names that reuse almost all the same letters in the same order or sound like the original. It will help everyone if Original Versions and Modified Versions can easily be distinguished from one another and from other derivatives. Any substitution and matching mechanism is outside the scope of the license.
+
+5.3 What do you mean by "primary name as presented to the user"? Are you referring to the font menu name?
+Yes, this applies to the font menu name and other mechanisms that specify a font in a document. It would be fine, however, to keep a text reference to the original fonts in the description field, in your modified source file or in documentation provided alongside your derivative as long as no one could be confused that your modified source is the original. But you cannot use the Reserved Font Names in any way to identify the font to the user (unless the Copyright Holder(s) allow(s) it through a separate agreement). Users who install derivatives (Modified Versions) on their systems should not see any of the original Reserved Font Names in their font menus, for example. Again, this is to ensure that users are not confused and do not mistake one font for another and so expect features only another derivative or the Original Version can actually offer.
+
+5.4 Am I not allowed to use any part of the Reserved Font Names?
+You may not use individual words from the Reserved Font Names, but you would be allowed to use parts of words, as long as you do not use any word from the Reserved Font Names entirely. We do not recommend using parts of words because of potential confusion, but it is allowed. For example, if "Foobar" was a Reserved Font Name, you would be allowed to use "Foo" or "bar", although we would not recommend it. Such an unfortunate choice would confuse the users of your fonts as well as make it harder for other designers to contribute.
+
+5.5 So what should I, as an author, identify as Reserved Font Names?
+Original authors are encouraged to name their fonts using clear, distinct names, and only declare the unique parts of the name as Reserved Font Names. For example, the author of a font called "Foobar Sans" would declare "Foobar" as a Reserved Font Name, but not "Sans", as that is a common typographical term, and may be a useful word to use in a derivative font name. Reserved Font Names should also be single words. A font called "Flowing River" should have Reserved Font Names "Flowing" and "River", not "Flowing River". You also need to be very careful about reserving font names which are already linked to trademarks (whether registered or not) which you do not own.
+
+5.6 Do I, as an author, have to identify any Reserved Font Names?
+No, but we strongly encourage you to do so. This is to avoid confusion between your work and Modified Versions.
+
+5.7 Are any names (such as the main font name) reserved by default?
+No. That is a change to the license as of version 1.1. If you want any names to be Reserved Font Names, they must be specified after the copyright statement(s).
+
+5.8 Is there any situation in which I can use Reserved Font Names for a Modified Version?
+The Copyright Holder(s) can give certain trusted parties the right to use any of the Reserved Font Names through separate written agreements. For example, even if "Foobar" is a RFN, you could write up an agreement to give company "XYZ" the right to distribute a modified version with a name that includes "Foobar". This allows for freedom without confusion.
+
+5.9 Do font rebuilds require a name change? Do I have to change the name of the font when my packaging workflow includes a full rebuild from source?
+Yes, all rebuilds which change the font data and the smart code are Modified Versions and the requirements of the OFL apply: you need to respect what the Author(s) have chosen in terms of Reserved Font Names. However if a package (or installer) is simply a wrapper or a compressed structure around the final font - leaving them intact on the inside - then no name change is required. Please get in touch with the author(s) and copyright holder(s) to inquire about the presence of font sources beyond the final font file(s) and the recommended build path. That build path may very well be non-trivial and hard to reproduce accurately by the maintainer. If a full font build path is made available by the upstream author(s) please be aware that any regressions and changes you may introduce when doing a rebuild for packaging purposes is your responsibility as a package maintainer since you are effectively creating a separate branch. You should make it very clear to your users that your rebuilt version is not the canonical one from upstream.
+
+5.10 Can I add other Reserved Font Names when making a derivative font?
+Yes. List your additional Reserved Font Names after your additional copyright statement, as indicated with example placeholders at the top of the OFL.txt file. Be sure you do not remove any exiting RFNs but only add your own.
+
+
+6 ABOUT THE FONTLOG
+
+6.1 What is this FONTLOG thing exactly?
+It has three purposes: 1) to provide basic information on the font to users and other developers, 2) to document changes that have been made to the font or accompanying files, either by the original authors or others, and 3) to provide a place to acknowledge authors and other contributors. Please use it!
+
+6.2 Is the FONTLOG required?
+It is not a requirement of the license, but we strongly recommend you have one.
+
+6.3 Am I required to update the FONTLOG when making Modified Versions?
+No, but users, designers and other developers might get very frustrated with you if you don't. People need to know how derivative fonts differ from the original, and how to take advantage of the changes, or build on them. There are utilities that can help create and maintain a FONTLOG, such as the FONTLOG support in FontForge.
+
+6.4 What should the FONTLOG look like?
+It is typically a separate text file (FONTLOG.txt), but can take other formats. It commonly includes these four sections:
+
+- brief header describing the FONTLOG itself and name of the font family
+- Basic Font Information - description of the font family, purpose and breadth
+- ChangeLog - chronological listing of changes
+- Acknowledgements - list of authors and contributors with contact information
+
+It could also include other sections, such as: where to find documentation, how to make contributions, information on contributing organizations, source code details, and a short design guide. See Appendix A for an example FONTLOG.
+
+
+7 MAKING CONTRIBUTIONS TO OFL PROJECTS
+
+7.1 Can I contribute work to OFL projects?
+In many cases, yes. It is common for OFL fonts to be developed by a team of people who welcome contributions from the wider community. Contact the original authors for specific information on how to participate in their projects.
+
+7.2 Why should I contribute my changes back to the original authors?
+It would benefit many people if you contributed back in response to what you've received. Your contributions and improvements to the fonts and other components could be a tremendous help and would encourage others to contribute as well and 'give back'. You will then benefit from other people's contributions as well. Sometimes maintaining your own separate version takes more effort than merging back with the original. Be aware that any contributions, however, must be either your own original creation or work that you own, and you may be asked to affirm that clearly when you contribute.
+
+7.3 I've made some very nice improvements to the font. Will you consider adopting them and putting them into future Original Versions?
+Most authors would be very happy to receive such contributions. Keep in mind that it is unlikely that they would want to incorporate major changes that would require additional work on their end. Any contributions would likely need to be made for all the fonts in a family and match the overall design and style. Authors are encouraged to include a guide to the design with the fonts. It would also help to have contributions submitted as patches or clearly marked changes - the use of smart source revision control systems like subversion, svk, mercurial, git or bzr is a good idea. Please follow the recommendations given by the author(s) in terms of preferred source formats and configuration parameters for sending contributions. If this is not indicated in a FONTLOG or other documentation of the font, consider asking them directly. Examples of useful contributions are bug fixes, additional glyphs, stylistic alternates (and the smart font code to access them) or improved hinting. Keep in mind that some kinds of changes (esp. hinting) may be technically difficult to integrate.
+
+7.4 How can I financially support the development of OFL fonts?
+It is likely that most authors of OFL fonts would accept financial contributions - contact them for instructions on how to do this. Such contributions would support future development. You can also pay for others to enhance the fonts and contribute the results back to the original authors for inclusion in the Original Version.
+
+
+8 ABOUT THE LICENSE ITSELF
+
+8.1 I see that this is version 1.1 of the license. Will there be later changes?
+Version 1.1 is the first minor revision of the OFL. We are confident that version 1.1 will meet most needs, but are open to future improvements. Any revisions would be for future font releases, and previously existing licenses would remain in effect. No retroactive changes are possible, although the Copyright Holder(s) can re-release the font under a revised OFL. All versions will be available on our web site: http://scripts.sil.org/OFL.
+
+8.2 Does this license restrict the rights of the Copyright Holder(s)?
+No. The Copyright Holder(s) still retain(s) all the rights to their creation; they are only releasing a portion of it for use in a specific way. For example, the Copyright Holder(s) may choose to release a 'basic' version of their font under the OFL, but sell a restricted 'enhanced' version. Only the Copyright Holder(s) can do this.
+
+8.3 Is the OFL a contract or a license?
+The OFL is a license and not a contract and so does not require you to sign it to have legal validity. By using, modifying and redistributing components under the OFL you indicate that you accept the license.
+
+8.4 I really like the terms of the OFL, but want to change it a little. Am I allowed to take ideas and actual wording from the OFL and put them into my own custom license for distributing my fonts?
+We strongly recommend against creating your very own unique open licensing model. Using a modified or derivative license will likely cut you off - along with the font(s) under that license - from the community of designers using the OFL, potentially expose you and your users to legal liabilities, and possibly put your work and rights at risk. The OFL went though a community and legal review process that took years of effort, and that review is only applicable to an unmodified OFL. The text of the OFL has been written by SIL (with review and consultation from the community) and is copyright (c) 2005-2010 SIL International. You may re-use the ideas and wording (in part, not in whole) in another non-proprietary license provided that you call your license by another unambiguous name, that you do not use the preamble, that you do not mention SIL and that you clearly present your license as different from the OFL so as not to cause confusion by being too similar to the original. If you feel the OFL does not meet your needs for an open license, please contact us.
+
+8.5 Can I translate the license and the FAQ into other languages?
+SIL certainly recognises the need for people who are not familiar with English to be able to understand the OFL and its use. Making the license very clear and readable has been a key goal for the OFL, but we know that people understand their own language best.
+
+If you are an experienced translator, you are very welcome to translate the OFL and OFL-FAQ so that designers and users in your language community can understand the license better. But only the original English version of the license has legal value and has been approved by the community. Translations do not count as legal substitutes and should only serve as a way to explain the original license. SIL - as the author and steward of the license for the community at large - does not approve any translation of the OFL as legally valid because even small translation ambiguities could be abused and create problems.
+
+SIL gives permission to publish unofficial translations into other languages provided that they comply with the following guidelines:
+
+- Put the following disclaimer in both English and the target language stating clearly that the translation is unofficial:
+
+"This is an unofficial translation of the SIL Open Font License into <language_name>. It was not published by SIL International, and does not legally state the distribution terms for fonts that use the OFL. A release under the OFL is only valid when using the original English text. However, we recognize that this unofficial translation will help users and designers not familiar with English to better understand and use the OFL. We encourage designers who consider releasing their creation under the OFL to read the OFL-FAQ in their own language if it is available. Please go to http://scripts.sil.org/OFL for the official version of the license and the accompanying OFL-FAQ."
+
+- Keep your unofficial translation current and update it at our request if needed, for example if there is any ambiguity which could lead to confusion.
+
+If you start such a unofficial translation effort of the OFL and OFL-FAQ please let us know.
+
+
+9 ABOUT SIL INTERNATIONAL
+
+9.1 Who is SIL International and what do they do?
+SIL serves language communities worldwide, building their capacity for sustainable language development, by means of research, translation, training and materials development. SIL makes its services available to all without regard to religious belief, political ideology, gender, race, or ethnic background. SIL's members and volunteers share a Christian commitment.
+
+9.2 What does this have to do with font licensing?
+The ability to read, write, type and publish in one's own language is one of the most critical needs for millions of people around the world. This requires fonts that are widely available and support lesser-known languages. SIL develops - and encourages others to develop - a complete stack of writing systems implementation components available under open licenses. This open stack includes input methods, smart fonts, smart rendering libraries and smart applications. There has been a need for a common open license that is specifically applicable to fonts and related software (a crucial component of this stack), so SIL developed the SIL Open Font License with the help of the Free/Libre and Open Source Software community.
+
+9.3 How can I contact SIL?
+Our main web site is: http://www.sil.org/
+Our site about complex scripts is: http://scripts.sil.org/
+Information about this license (and contact information) is at: http://scripts.sil.org/OFL
+
+
+APPENDIX A - FONTLOG EXAMPLE
+
+Here is an example of the recommended format for a FONTLOG, although other formats are allowed.
+
+-----
+FONTLOG for the GlobalFontFamily fonts
+
+This file provides detailed information on the GlobalFontFamily Font Software. This information should be distributed along with the GlobalFontFamily fonts and any derivative works.
+
+Basic Font Information
+
+GlobalFontFamily is a Unicode typeface family that supports all languages that use the Latin script and its variants, and could be expanded to support other scripts.
+
+NewWorldFontFamily is based on the GlobalFontFamily and also supports Greek, Hebrew, Cyrillic and Armenian.
+
+More specifically, this release supports the following Unicode ranges...
+This release contains...
+Documentation can be found at...
+To contribute to the project...
+
+ChangeLog
+
+1 August 2008 (Tom Parker) GlobalFontFamily version 1.2.1
+- Tweaked the smart font code (Branch merged with trunk version)
+- Provided improved build and debugging environment for smart behaviours
+
+7 February 2007 (Pat Johnson) NewWorldFontFamily Version 1.3
+- Added Greek and Cyrillic glyphs
+
+7 March 2006 (Fred Foobar) NewWorldFontFamily Version 1.2
+- Tweaked contextual behaviours
+
+1 Feb 2005 (Jane Doe) NewWorldFontFamily Version 1.1
+- Improved build script performance and verbosity
+- Extended the smart code documentation
+- Corrected minor typos in the documentation
+- Fixed position of combining inverted breve below (U+032F)
+- Added OpenType/Graphite smart code for Armenian
+- Added Armenian glyphs (U+0531 -> U+0587)
+- Released as "NewWorldFontFamily"
+
+1 Jan 2005 (Joe Smith) GlobalFontFamily Version 1.0
+- Initial release
+
+Acknowledgements
+
+If you make modifications be sure to add your name (N), email (E), web-address (if you have one) (W) and description (D). This list is in alphabetical order.
+
+N: Jane Doe
+E: jane@university.edu
+W: http://art.university.edu/projects/fonts
+D: Contributor - Armenian glyphs and code
+
+N: Fred Foobar
+E: fred@foobar.org
+W: http://foobar.org
+D: Contributor - misc Graphite fixes
+
+N: Pat Johnson
+E: pat@fontstudio.org
+W: http://pat.fontstudio.org
+D: Designer - Greek & Cyrillic glyphs based on Roman design
+
+N: Tom Parker
+E: tom@company.com
+W: http://www.company.com/tom/projects/fonts
+D: Engineer - original smart font code
+
+N: Joe Smith
+E: joe@fontstudio.org
+W: http://joe.fontstudio.org
+D: Designer - original Roman glyphs
+
+Fontstudio.org is an not-for-profit design group whose purpose is...
+Foobar.org is a distributed community of developers...
+Company.com is a small business who likes to support community designers...
+University.edu is a renowed educational institution with a strong design department...
+-----
diff --git a/fonts/Courier-Prime/LICENSE/OFL.txt b/fonts/Courier-Prime/LICENSE/OFL.txt
new file mode 100644
index 0000000..baff556
--- /dev/null
+++ b/fonts/Courier-Prime/LICENSE/OFL.txt
@@ -0,0 +1,94 @@
+Copyright (c) 2013, Quote-Unquote Apps (http://quoteunquoteapps.com),
+with Reserved Font Name Courier Prime.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/fonts/Courier-Prime/Read me.txt b/fonts/Courier-Prime/Read me.txt
new file mode 100644
index 0000000..c49013f
--- /dev/null
+++ b/fonts/Courier-Prime/Read me.txt
@@ -0,0 +1,44 @@
+ABOUT COURIER PRIME
+===================
+
+Courier Prime is a TrueType monospaced font designed specifically for screenplays. It was designed by Alan Dague-Greene for John August and released by Quote-Unquote Apps under the SIL Open Font License (OFL).
+
+Visit http://quoteunquoteapps.com/courierprime for more information and the latest updates.
+
+SIL Open Font License: http://scripts.sil.org/OFL
+
+INSTALLATION
+============
+
+Mac OS X:
+
+Select all the font files and double-click the selected files. Then, click 'Install Font' at the bottom of the preview window.
+
+Windows 7 & 8:
+
+The easiest way to install a font is to double-click on a font file to open the font preview and select 'Install'.
+
+Windows Vista:
+
+To install a TrueType or OpenType font on Windows Vista, right-click on the font file and then select 'Install'. You can also drag or paste a font into the Fonts Control Panel.
+
+Windows XP:
+
+1. From the 'Start' menu select 'Control Panel', then select the 'Appearance and Themes' category.
+
+2. Select 'Fonts' from the 'See Also' panel at the left of this screen.
+
+3. On the 'File' menu, select 'Install New Font...'
+
+4. Click the drive and folder that contain the fonts you want to add.
+
+5. To select more than one font to add, press and hold down the CTRL key, click the fonts you want, then click on 'OK'.
+
+For more information on installing fonts on Windows, visit this link: http://www.microsoft.com/typography/truetypeinstall.mspx
+
+
+CHANGELOG
+=========
+
+January 25, 2013 Courier Prime version 1.203
+- Initial release
diff --git a/fonts/Fell/Fell Types License.txt b/fonts/Fell/Fell Types License.txt
new file mode 100644
index 0000000..5f53e85
--- /dev/null
+++ b/fonts/Fell/Fell Types License.txt
@@ -0,0 +1 @@
+This Font Software is licensed under the SIL Open Font License, Version 1.1. \ No newline at end of file
diff --git a/fonts/Fell/IMFeDPit29C.otf b/fonts/Fell/IMFeDPit29C.otf
new file mode 100644
index 0000000..69c2373
--- /dev/null
+++ b/fonts/Fell/IMFeDPit29C.otf
Binary files differ
diff --git a/fonts/Fell/IMFeDPrm29C.otf b/fonts/Fell/IMFeDPrm29C.otf
new file mode 100644
index 0000000..86ae43b
--- /dev/null
+++ b/fonts/Fell/IMFeDPrm29C.otf
Binary files differ
diff --git a/fonts/Fell/IMFeENit29C.otf b/fonts/Fell/IMFeENit29C.otf
new file mode 100644
index 0000000..f0f8305
--- /dev/null
+++ b/fonts/Fell/IMFeENit29C.otf
Binary files differ
diff --git a/fonts/Fell/IMFeENrm29C.otf b/fonts/Fell/IMFeENrm29C.otf
new file mode 100644
index 0000000..c0f4118
--- /dev/null
+++ b/fonts/Fell/IMFeENrm29C.otf
Binary files differ
diff --git a/fonts/Fell/IMFeFCit29C.otf b/fonts/Fell/IMFeFCit29C.otf
new file mode 100644
index 0000000..92820c9
--- /dev/null
+++ b/fonts/Fell/IMFeFCit29C.otf
Binary files differ
diff --git a/fonts/Fell/IMFeFCrm29C.otf b/fonts/Fell/IMFeFCrm29C.otf
new file mode 100644
index 0000000..fa63edd
--- /dev/null
+++ b/fonts/Fell/IMFeFCrm29C.otf
Binary files differ
diff --git a/fonts/Fell/IMFeFlow1.otf b/fonts/Fell/IMFeFlow1.otf
new file mode 100644
index 0000000..3563122
--- /dev/null
+++ b/fonts/Fell/IMFeFlow1.otf
Binary files differ
diff --git a/fonts/Fell/IMFeFlow2.otf b/fonts/Fell/IMFeFlow2.otf
new file mode 100644
index 0000000..e5166b4
--- /dev/null
+++ b/fonts/Fell/IMFeFlow2.otf
Binary files differ
diff --git a/fonts/Fell/IMFeGPit29C.otf b/fonts/Fell/IMFeGPit29C.otf
new file mode 100644
index 0000000..85ef6bb
--- /dev/null
+++ b/fonts/Fell/IMFeGPit29C.otf
Binary files differ
diff --git a/fonts/Fell/IMFeGPrm29C.otf b/fonts/Fell/IMFeGPrm29C.otf
new file mode 100644
index 0000000..07558ba
--- /dev/null
+++ b/fonts/Fell/IMFeGPrm29C.otf
Binary files differ
diff --git a/fonts/Fell/IMFePIit29C.otf b/fonts/Fell/IMFePIit29C.otf
new file mode 100644
index 0000000..47f99e9
--- /dev/null
+++ b/fonts/Fell/IMFePIit29C.otf
Binary files differ
diff --git a/fonts/Fell/IMFePIrm29C.otf b/fonts/Fell/IMFePIrm29C.otf
new file mode 100644
index 0000000..33862e9
--- /dev/null
+++ b/fonts/Fell/IMFePIrm29C.otf
Binary files differ
diff --git a/fonts/Fell/IMFeTLrm29C.otf b/fonts/Fell/IMFeTLrm29C.otf
new file mode 100644
index 0000000..d18ae92
--- /dev/null
+++ b/fonts/Fell/IMFeTLrm29C.otf
Binary files differ
diff --git a/fonts/Inconsolata-Hellenic b/fonts/Inconsolata-Hellenic
new file mode 160000
+Subproject 69cccaee77e3d0d39a9d8aa504c078e3be79fdf
diff --git a/fonts/InconsolataHellenic.otf b/fonts/InconsolataHellenic.otf
new file mode 100644
index 0000000..b440b62
--- /dev/null
+++ b/fonts/InconsolataHellenic.otf
Binary files differ
diff --git a/fonts/Input_Fonts/ChangeLog.txt b/fonts/Input_Fonts/ChangeLog.txt
new file mode 100644
index 0000000..3fdd6f3
--- /dev/null
+++ b/fonts/Input_Fonts/ChangeLog.txt
@@ -0,0 +1,26 @@
+INPUT
+CHANGE LOG
+
+* v 1.2 2015-06-24 David Jonathan Ross <input@fontbureau.com>
+ * Removed ligatures and reset widths in Monospaced fonts so that they are strictly monospaced (all glyphs have same width value). This helps Input get recognized as monospaced by Ubuntu Terminal other apps.
+ * Fixed bug in Stylistic Set 20, fancy math characters.
+
+* v 1.1.5 2014-09-19 David Jonathan Ross <input@fontbureau.com>
+
+ * Changed default line-height option to 1.2x.
+ * Added web customization support for alternate curly bracket glyphs and dotless zero glyphs.
+ * Added “Download with these settings†button to preview page, which will automatically fill out the customization form on the download page.
+ * Added live-updating URL to preview and download pages, which allows bookmarking and sharing of customization settings.
+
+* v 1.1 2014-09-03 David Jonathan Ross <input@fontbureau.com>
+
+ * Added glyphs for [Powerline](https://github.com/Lokaltog/powerline) (U+E0A0–E0A2, U+E0B0–E0B3).
+ * Added glyph for high voltage sign character (U+26A1).
+ * Added alternate curly bracket glyphs for users who prefer simplified forms.
+ * Added alternate dotless zero glyph for users who don’t want a dot or slash in the zero.
+ * Added zero width space (U+200B) and zero width no-break space (U+FEFF).
+ * Added Stylistic Alternates {salt} OpenType feature.
+
+* v 1.0 2014-08-03 David Jonathan Ross <input@fontbureau.com>
+
+ * Initial release.
diff --git a/fonts/Input_Fonts/INSTALL.txt b/fonts/Input_Fonts/INSTALL.txt
new file mode 100644
index 0000000..f26959a
--- /dev/null
+++ b/fonts/Input_Fonts/INSTALL.txt
@@ -0,0 +1,75 @@
+INPUT
+===============
+
+## FONT INSTALLATION
+
+Once you have downloaded and unzipped your fonts, you can install them on your system. Please choose one of the methods below and follow the instructions to install your fonts.
+
+Using Font Management Software:
+
+Many users managing large collections of fonts use font management software, which allow them to activate and deactivate fonts, organize their font library, and provide various other features.
+
+If you are using font management software, follow the installation instructions that came with the software. Typically installation is as simple as dragging the font file into the font management software. 
+
+
+### Using Mac OS:
+
+Close all open applications, and locate the folder of fonts that you want to install in Finder.
+
+On Mac OS X, we recommend installing fonts using Font Book, an app. Simply drag the font files onto Font Book to install.
+
+Alternatively, you can drag the font files manually to the /User/Library/Fonts folder, or in versions prior to OS X, the /System/Fonts folder.
+
+
+### Using Windows:
+
+ 1. Navigate to Control Panel > Fonts. You can find the Control Panel in Start > Control Panel, or in versions prior to Windows XP,  Start > Settings > Control Panel. 
+
+ 2. Choose File > Install New Font.
+
+ 3. In the dialog, locate the fonts you want to install by choosing the drive and folder where the fonts are located. Once the folder is selected, the fonts will appear under List of Fonts.
+
+ 4. From the List of Fonts, select the fonts that you would like to install (CTRL+A will select all fonts in the list). We recommend that you select Copy fonts to the Fonts folder.
+
+ 5. When you see the font name in the Fonts folder, the font has been loaded and is ready for use.
+
+Alternatively, in recent versions of Windows, you can simply right-click on a font file and choose “Install†from the menu.
+
+### Linux
+
+Create a folder ~/.fonts and move all fonts to that directory. I recommend you copy only the *.ttf files to ~/.fonts, and run `fc-cache -fv`.
+
+### Using other operating systems:
+
+I have to admit, I don't have tons of experience installing fonts on other operating systems, but usually it’s as easy as putting the font files in the right folder. Please consult your the manual for your operating system.
+
+
+## TROUBLESHOOTING
+
+Many font installation issues are due to issues in the operating system's font caches. If you find that the fonts are not appearing in the font menu, follow the instructions below to clear your caches. If you continue to have issues installing your fonts, please contact us for assistance.
+
+
+### Clearing the Font Caches in Mac OS X:
+
+There are a variety of font cache files in Mac OS X, so we recommend you use a third party utility to clear them.
+
+FontNuke <http://www.jamapi.com/pr/fn/> is a free download that will clear font caches. Simply download the program, open it, and follow the instructions provided. Note that it requires you to restart your system.
+
+Many font management programs are also equipped to clear font caches. Please consult the instructions that came with that software.
+
+If you wish to clear the font caches manually, follow the instructions on this page: 
+
+<http://www.glyphsapp.com/tutorials/eliminating-font-cache-problems>
+
+Or, for earlier versions of OS X:
+
+<http://helpx.adobe.com/x-productkb/global/troubleshoot-fonts-mac-os-x.html>
+
+
+### Clearing the Font Cache in Windows:
+
+ 1. Locate the font cache file by navigating to C:\Windows\System32\FNTCACHE.DAT. In versions prior to Windows XP, the cache file is C:\WINDOWS\ttfCache.
+
+ 2. Delete this cache file by pressing the delete key or moving it to the Recycle Bin.
+
+ 3. Restart your computer, and the cache file will be rebuilt. \ No newline at end of file
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Black.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Black.ttf
new file mode 100644
index 0000000..c3f2691
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Black.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-BlackItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-BlackItalic.ttf
new file mode 100644
index 0000000..68de66e
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-BlackItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Bold.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Bold.ttf
new file mode 100644
index 0000000..48d8bea
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Bold.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-BoldItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-BoldItalic.ttf
new file mode 100644
index 0000000..a8be344
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-BoldItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-ExtraLight.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-ExtraLight.ttf
new file mode 100644
index 0000000..b6ad73a
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-ExtraLight.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-ExtraLightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-ExtraLightItalic.ttf
new file mode 100644
index 0000000..a22cec2
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-ExtraLightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Italic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Italic.ttf
new file mode 100644
index 0000000..e881a41
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Italic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Light.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Light.ttf
new file mode 100644
index 0000000..8c5d32a
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Light.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-LightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-LightItalic.ttf
new file mode 100644
index 0000000..fa14372
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-LightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Medium.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Medium.ttf
new file mode 100644
index 0000000..c5f41ef
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Medium.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-MediumItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-MediumItalic.ttf
new file mode 100644
index 0000000..123c699
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-MediumItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Regular.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Regular.ttf
new file mode 100644
index 0000000..918624d
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Regular.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Thin.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Thin.ttf
new file mode 100644
index 0000000..105949d
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-Thin.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-ThinItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-ThinItalic.ttf
new file mode 100644
index 0000000..f0cc2be
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMono/InputMono-ThinItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Black.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Black.ttf
new file mode 100644
index 0000000..566c04e
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Black.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-BlackItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-BlackItalic.ttf
new file mode 100644
index 0000000..b782ad4
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-BlackItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Bold.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Bold.ttf
new file mode 100644
index 0000000..2149615
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Bold.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-BoldItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-BoldItalic.ttf
new file mode 100644
index 0000000..d647295
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-BoldItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-ExtraLight.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-ExtraLight.ttf
new file mode 100644
index 0000000..f16177c
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-ExtraLight.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-ExtraLightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-ExtraLightItalic.ttf
new file mode 100644
index 0000000..d16873a
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-ExtraLightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Italic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Italic.ttf
new file mode 100644
index 0000000..190967a
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Italic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Light.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Light.ttf
new file mode 100644
index 0000000..1e8573e
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Light.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-LightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-LightItalic.ttf
new file mode 100644
index 0000000..3a396ef
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-LightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Medium.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Medium.ttf
new file mode 100644
index 0000000..5c7a5ac
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Medium.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-MediumItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-MediumItalic.ttf
new file mode 100644
index 0000000..49d71bc
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-MediumItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Regular.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Regular.ttf
new file mode 100644
index 0000000..68d3f2b
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Regular.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Thin.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Thin.ttf
new file mode 100644
index 0000000..d3c6950
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-Thin.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-ThinItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-ThinItalic.ttf
new file mode 100644
index 0000000..3111f4e
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCompressed/InputMonoCompressed-ThinItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Black.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Black.ttf
new file mode 100644
index 0000000..ebe7b1b
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Black.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-BlackItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-BlackItalic.ttf
new file mode 100644
index 0000000..1c79513
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-BlackItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Bold.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Bold.ttf
new file mode 100644
index 0000000..9a1d878
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Bold.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-BoldItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-BoldItalic.ttf
new file mode 100644
index 0000000..99b8cff
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-BoldItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-ExtraLight.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-ExtraLight.ttf
new file mode 100644
index 0000000..60770cd
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-ExtraLight.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-ExtraLightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-ExtraLightItalic.ttf
new file mode 100644
index 0000000..62a00ce
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-ExtraLightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Italic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Italic.ttf
new file mode 100644
index 0000000..e5c79ae
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Italic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Light.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Light.ttf
new file mode 100644
index 0000000..3ad203e
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Light.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-LightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-LightItalic.ttf
new file mode 100644
index 0000000..b1141f9
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-LightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Medium.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Medium.ttf
new file mode 100644
index 0000000..95d57af
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Medium.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-MediumItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-MediumItalic.ttf
new file mode 100644
index 0000000..952326f
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-MediumItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Regular.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Regular.ttf
new file mode 100644
index 0000000..4077faa
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Regular.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Thin.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Thin.ttf
new file mode 100644
index 0000000..94e2376
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-Thin.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-ThinItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-ThinItalic.ttf
new file mode 100644
index 0000000..ca17082
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoCondensed/InputMonoCondensed-ThinItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Black.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Black.ttf
new file mode 100644
index 0000000..aaed136
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Black.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-BlackItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-BlackItalic.ttf
new file mode 100644
index 0000000..649095e
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-BlackItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Bold.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Bold.ttf
new file mode 100644
index 0000000..4c50fcc
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Bold.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-BoldItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-BoldItalic.ttf
new file mode 100644
index 0000000..61f4f26
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-BoldItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-ExtraLight.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-ExtraLight.ttf
new file mode 100644
index 0000000..927bc02
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-ExtraLight.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-ExtraLightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-ExtraLightItalic.ttf
new file mode 100644
index 0000000..65983ac
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-ExtraLightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Italic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Italic.ttf
new file mode 100644
index 0000000..2937b9d
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Italic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Light.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Light.ttf
new file mode 100644
index 0000000..92f2e8c
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Light.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-LightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-LightItalic.ttf
new file mode 100644
index 0000000..3f148dd
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-LightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Medium.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Medium.ttf
new file mode 100644
index 0000000..e9b8cf8
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Medium.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-MediumItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-MediumItalic.ttf
new file mode 100644
index 0000000..344cc92
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-MediumItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Regular.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Regular.ttf
new file mode 100644
index 0000000..8e2ace8
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Regular.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Thin.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Thin.ttf
new file mode 100644
index 0000000..d16299e
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-Thin.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-ThinItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-ThinItalic.ttf
new file mode 100644
index 0000000..71142b5
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputMono/InputMonoNarrow/InputMonoNarrow-ThinItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Black.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Black.ttf
new file mode 100644
index 0000000..9d296a4
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Black.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-BlackItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-BlackItalic.ttf
new file mode 100644
index 0000000..3ed456a
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-BlackItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Bold.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Bold.ttf
new file mode 100644
index 0000000..26b10a8
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Bold.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-BoldItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-BoldItalic.ttf
new file mode 100644
index 0000000..384ebd3
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-BoldItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-ExtraLight.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-ExtraLight.ttf
new file mode 100644
index 0000000..0ee7752
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-ExtraLight.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-ExtraLightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-ExtraLightItalic.ttf
new file mode 100644
index 0000000..1cf7989
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-ExtraLightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Italic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Italic.ttf
new file mode 100644
index 0000000..eef5302
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Italic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Light.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Light.ttf
new file mode 100644
index 0000000..a4d0474
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Light.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-LightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-LightItalic.ttf
new file mode 100644
index 0000000..6e71380
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-LightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Medium.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Medium.ttf
new file mode 100644
index 0000000..fc231bd
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Medium.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-MediumItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-MediumItalic.ttf
new file mode 100644
index 0000000..ad4769d
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-MediumItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Regular.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Regular.ttf
new file mode 100644
index 0000000..707a59c
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Regular.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Thin.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Thin.ttf
new file mode 100644
index 0000000..dbd440e
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-Thin.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-ThinItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-ThinItalic.ttf
new file mode 100644
index 0000000..d542558
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSans/InputSans-ThinItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Black.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Black.ttf
new file mode 100644
index 0000000..c593a85
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Black.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-BlackItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-BlackItalic.ttf
new file mode 100644
index 0000000..0b25459
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-BlackItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Bold.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Bold.ttf
new file mode 100644
index 0000000..253c019
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Bold.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-BoldItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-BoldItalic.ttf
new file mode 100644
index 0000000..71d0ebf
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-BoldItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-ExtraLight.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-ExtraLight.ttf
new file mode 100644
index 0000000..3ced944
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-ExtraLight.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-ExtraLightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-ExtraLightItalic.ttf
new file mode 100644
index 0000000..a482d1c
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-ExtraLightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Italic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Italic.ttf
new file mode 100644
index 0000000..a6d80d2
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Italic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Light.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Light.ttf
new file mode 100644
index 0000000..78c5fb3
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Light.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-LightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-LightItalic.ttf
new file mode 100644
index 0000000..d122f73
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-LightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Medium.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Medium.ttf
new file mode 100644
index 0000000..0916bf5
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Medium.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-MediumItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-MediumItalic.ttf
new file mode 100644
index 0000000..575fe89
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-MediumItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Regular.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Regular.ttf
new file mode 100644
index 0000000..2e347d0
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Regular.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Thin.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Thin.ttf
new file mode 100644
index 0000000..fffec04
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-Thin.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-ThinItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-ThinItalic.ttf
new file mode 100644
index 0000000..0d73745
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCompressed/InputSansCompressed-ThinItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Black.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Black.ttf
new file mode 100644
index 0000000..2a4f9aa
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Black.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-BlackItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-BlackItalic.ttf
new file mode 100644
index 0000000..f250f1e
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-BlackItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Bold.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Bold.ttf
new file mode 100644
index 0000000..5d71086
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Bold.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-BoldItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-BoldItalic.ttf
new file mode 100644
index 0000000..411f2ad
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-BoldItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-ExtraLight.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-ExtraLight.ttf
new file mode 100644
index 0000000..489ca67
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-ExtraLight.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-ExtraLightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-ExtraLightItalic.ttf
new file mode 100644
index 0000000..0f68013
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-ExtraLightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Italic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Italic.ttf
new file mode 100644
index 0000000..b3674d2
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Italic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Light.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Light.ttf
new file mode 100644
index 0000000..be1f8c3
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Light.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-LightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-LightItalic.ttf
new file mode 100644
index 0000000..5dc944a
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-LightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Medium.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Medium.ttf
new file mode 100644
index 0000000..af27337
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Medium.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-MediumItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-MediumItalic.ttf
new file mode 100644
index 0000000..b0de08c
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-MediumItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Regular.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Regular.ttf
new file mode 100644
index 0000000..2093122
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Regular.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Thin.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Thin.ttf
new file mode 100644
index 0000000..96f2971
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-Thin.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-ThinItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-ThinItalic.ttf
new file mode 100644
index 0000000..caa4912
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansCondensed/InputSansCondensed-ThinItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Black.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Black.ttf
new file mode 100644
index 0000000..b46caa1
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Black.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-BlackItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-BlackItalic.ttf
new file mode 100644
index 0000000..8687581
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-BlackItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Bold.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Bold.ttf
new file mode 100644
index 0000000..5c4356a
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Bold.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-BoldItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-BoldItalic.ttf
new file mode 100644
index 0000000..455e609
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-BoldItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-ExtraLight.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-ExtraLight.ttf
new file mode 100644
index 0000000..845a2e1
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-ExtraLight.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-ExtraLightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-ExtraLightItalic.ttf
new file mode 100644
index 0000000..8848f1b
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-ExtraLightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Italic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Italic.ttf
new file mode 100644
index 0000000..e609d86
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Italic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Light.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Light.ttf
new file mode 100644
index 0000000..471b005
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Light.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-LightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-LightItalic.ttf
new file mode 100644
index 0000000..e43deeb
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-LightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Medium.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Medium.ttf
new file mode 100644
index 0000000..04957b1
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Medium.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-MediumItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-MediumItalic.ttf
new file mode 100644
index 0000000..ce2e791
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-MediumItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Regular.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Regular.ttf
new file mode 100644
index 0000000..82c0e98
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Regular.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Thin.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Thin.ttf
new file mode 100644
index 0000000..420a1c6
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-Thin.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-ThinItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-ThinItalic.ttf
new file mode 100644
index 0000000..8a5b136
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSans/InputSansNarrow/InputSansNarrow-ThinItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Black.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Black.ttf
new file mode 100644
index 0000000..edd9696
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Black.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-BlackItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-BlackItalic.ttf
new file mode 100644
index 0000000..c24fe52
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-BlackItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Bold.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Bold.ttf
new file mode 100644
index 0000000..b5ea936
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Bold.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-BoldItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-BoldItalic.ttf
new file mode 100644
index 0000000..d38ed1d
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-BoldItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-ExtraLight.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-ExtraLight.ttf
new file mode 100644
index 0000000..1d7460a
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-ExtraLight.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-ExtraLightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-ExtraLightItalic.ttf
new file mode 100644
index 0000000..e2f6b09
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-ExtraLightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Italic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Italic.ttf
new file mode 100644
index 0000000..6eeb195
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Italic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Light.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Light.ttf
new file mode 100644
index 0000000..789186f
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Light.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-LightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-LightItalic.ttf
new file mode 100644
index 0000000..336fb31
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-LightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Medium.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Medium.ttf
new file mode 100644
index 0000000..54c40d7
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Medium.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-MediumItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-MediumItalic.ttf
new file mode 100644
index 0000000..e993b8c
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-MediumItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Regular.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Regular.ttf
new file mode 100644
index 0000000..fdd4a21
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Regular.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Thin.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Thin.ttf
new file mode 100644
index 0000000..ea5926a
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-Thin.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-ThinItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-ThinItalic.ttf
new file mode 100644
index 0000000..d5beb97
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerif/InputSerif-ThinItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Black.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Black.ttf
new file mode 100644
index 0000000..b899886
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Black.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-BlackItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-BlackItalic.ttf
new file mode 100644
index 0000000..d9b2aa2
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-BlackItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Bold.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Bold.ttf
new file mode 100644
index 0000000..8043237
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Bold.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-BoldItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-BoldItalic.ttf
new file mode 100644
index 0000000..364dfca
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-BoldItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-ExtraLight.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-ExtraLight.ttf
new file mode 100644
index 0000000..8aa1a2e
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-ExtraLight.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-ExtraLightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-ExtraLightItalic.ttf
new file mode 100644
index 0000000..52d082c
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-ExtraLightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Italic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Italic.ttf
new file mode 100644
index 0000000..7564386
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Italic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Light.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Light.ttf
new file mode 100644
index 0000000..18f0c3f
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Light.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-LightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-LightItalic.ttf
new file mode 100644
index 0000000..f71c3af
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-LightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Medium.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Medium.ttf
new file mode 100644
index 0000000..dbba624
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Medium.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-MediumItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-MediumItalic.ttf
new file mode 100644
index 0000000..261dfec
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-MediumItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Regular.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Regular.ttf
new file mode 100644
index 0000000..b0514db
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Regular.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Thin.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Thin.ttf
new file mode 100644
index 0000000..4894d26
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-Thin.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-ThinItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-ThinItalic.ttf
new file mode 100644
index 0000000..f5d5ef2
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCompressed/InputSerifCompressed-ThinItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Black.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Black.ttf
new file mode 100644
index 0000000..8c4ef11
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Black.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-BlackItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-BlackItalic.ttf
new file mode 100644
index 0000000..fff4006
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-BlackItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Bold.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Bold.ttf
new file mode 100644
index 0000000..d36194b
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Bold.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-BoldItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-BoldItalic.ttf
new file mode 100644
index 0000000..d507853
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-BoldItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-ExtraLight.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-ExtraLight.ttf
new file mode 100644
index 0000000..d4828e1
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-ExtraLight.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-ExtraLightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-ExtraLightItalic.ttf
new file mode 100644
index 0000000..14ffb9a
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-ExtraLightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Italic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Italic.ttf
new file mode 100644
index 0000000..89340c4
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Italic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Light.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Light.ttf
new file mode 100644
index 0000000..7f760b8
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Light.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-LightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-LightItalic.ttf
new file mode 100644
index 0000000..a21b4f1
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-LightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Medium.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Medium.ttf
new file mode 100644
index 0000000..32f3f62
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Medium.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-MediumItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-MediumItalic.ttf
new file mode 100644
index 0000000..e661254
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-MediumItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Regular.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Regular.ttf
new file mode 100644
index 0000000..a2b8b92
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Regular.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Thin.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Thin.ttf
new file mode 100644
index 0000000..2a3e8db
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-Thin.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-ThinItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-ThinItalic.ttf
new file mode 100644
index 0000000..ae5a35e
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifCondensed/InputSerifCondensed-ThinItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Black.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Black.ttf
new file mode 100644
index 0000000..a4dcb5e
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Black.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-BlackItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-BlackItalic.ttf
new file mode 100644
index 0000000..467dc88
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-BlackItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Bold.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Bold.ttf
new file mode 100644
index 0000000..4d2269b
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Bold.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-BoldItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-BoldItalic.ttf
new file mode 100644
index 0000000..90d57c8
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-BoldItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-ExtraLight.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-ExtraLight.ttf
new file mode 100644
index 0000000..b579d98
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-ExtraLight.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-ExtraLightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-ExtraLightItalic.ttf
new file mode 100644
index 0000000..77c4c4e
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-ExtraLightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Italic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Italic.ttf
new file mode 100644
index 0000000..c8522e3
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Italic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Light.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Light.ttf
new file mode 100644
index 0000000..9c01374
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Light.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-LightItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-LightItalic.ttf
new file mode 100644
index 0000000..a7dbb68
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-LightItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Medium.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Medium.ttf
new file mode 100644
index 0000000..5473a4a
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Medium.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-MediumItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-MediumItalic.ttf
new file mode 100644
index 0000000..b957f83
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-MediumItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Regular.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Regular.ttf
new file mode 100644
index 0000000..a54fdcd
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Regular.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Thin.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Thin.ttf
new file mode 100644
index 0000000..703bead
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-Thin.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-ThinItalic.ttf b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-ThinItalic.ttf
new file mode 100644
index 0000000..92faf37
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/InputSerif/InputSerifNarrow/InputSerifNarrow-ThinItalic.ttf
Binary files differ
diff --git a/fonts/Input_Fonts/Input_Fonts/SETTINGS.txt b/fonts/Input_Fonts/Input_Fonts/SETTINGS.txt
new file mode 100644
index 0000000..44e17e0
--- /dev/null
+++ b/fonts/Input_Fonts/Input_Fonts/SETTINGS.txt
@@ -0,0 +1,12 @@
+INPUT
+SETTINGS
+
+These fonts have been customized with the settings below. You can further customize
+your fonts with the inputCustomize.py command-line tool found in this package, or
+by re-downloading the fonts at <http://input.fontbureau.com/download>.
+
+
+ Alternates
+ --l=serifs_round
+
+ Line Height: 1.2× \ No newline at end of file
diff --git a/fonts/Input_Fonts/LICENSE.txt b/fonts/Input_Fonts/LICENSE.txt
new file mode 100644
index 0000000..4be006a
--- /dev/null
+++ b/fonts/Input_Fonts/LICENSE.txt
@@ -0,0 +1,30 @@
+INPUT
+FONT SOFTWARE LICENSE AGREEMENT
+
+This License Agreement is a legal Agreement between you and the publisher; please read it carefully. This Font Software was developed specially for use by software developers and includes special terms dedicated to promoting the use of the Font Software for such purposes.
+
+FREE PERSONAL USE. The Font Software is free for personal use. For the purposes of this License, Personal Use is defined as any use on your own computer that involves computer programming, software development, or the composition of plaintext documents in personal, professional, or non-professional contexts. It is also permitted to publish screenshots of your development environment while using the Font Software.
+
+SEPARATE PUBLISHING LICENSE. If you use the Input Font Software in a non-development context, or in any context where the Font Software or its appearance will be published or distributed, you will need to purchase the appropriate License. The uses noted below require a separate license:
+
+ - Print and/or publishing of rich-text documents (such as PDF or Word)
+ - Websites, with fonts served via the WebType service
+ - Websites, with self-hosted fonts
+ - Embedding in Applications (“Appsâ€)
+ - Bundling of the Input Font with coding or text processing software 
+
+LIMITED MODIFICATIONS ALLOWED. The Font Software contains a customizing script that will swaps out alternate glyphs, line-height, and other features that are not available in some coding applications. Modifications created by the customizing script included in the Font Software are permitted. Modifications created by third party software is permitted for Personal Use, but is otherwise not permitted. Distribution of personally modified versions of the Font Software is not permitted.
+
+NO REDISTRIBUTION. You may not distribute the Font Software to third parties for the purposes of permitting the display of the Font Software or allowing or facilitating redistribution of the Font Software irrespective of the terms of the redistribution. For the purposes of clarity you are not permitted to embed the Font Software or otherwise bundle the Font Software with another file. All such uses require the purchase of a special license.
+
+LIMITATION OF LIABILITY. Except as may be otherwise provided for herein, the Font Software and related documentation is provided “AS IS†and without warranty of any kind and Licensor EXPRESSLY DISCLAIMS ALL WARRANTIES, EXPRESS AND IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. LICENSOR DOES NOT WARRANT THAT THE OPERATION OF THE FONT SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT THE FONT SOFTWARE IS WITHOUT DEFECTS. THE FONT SOFTWARE IS NOT INTENDED AND WAS NOT DESIGNED OR MANUFACTURED FOR USE IN ANY CIRCUMSTANCES WHERE THE FAILURE OF THE FONT SOFTWARE COULD LEAD TO DEATH, PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE. THE FONT SOFTWARE IS NOT FAULT TOLERANT AND IS NOT INTENDED FOR USE IN THE CONTROL OR OPERATION OF PROCESS CONTROL DEVICES OR EQUIPMENT FOR MANUFACTURING. UNDER NO CIRCUMSTANCES SHALL LICENSOR BE LIABLE TO LICENSEE OR ANY OTHER PARTY, WHETHER IN CONTRACT OR TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, FOR ANY SPECIAL, CONSEQUENTIAL, OR INCIDENTAL DAMAGES, INCLUDING LOST PROFITS, SAVINGS OR BUSINESS INTERRUPTION AS A RESULT OF THE USE OF THE FONT SOFTWARE EVEN IF NOTIFIED IN ADVANCE OF SUCH POSSIBILITY. Licensor’s liability to Licensee shall in no event exceed the cost of this Font Software License Agreement.
+
+COMPLIANCE WITH LAWS. Licensee shall be responsible for compliance with all laws, foreign and domestic, including but not limited to, all United States laws and regulations relating to the control of exports or the transfer of technology.
+
+ENTIRE AGREEMENT. This Agreement constitutes the entire understanding between the parties and supersedes all previous agreements, promises, representations and negotiations between the parties concerning the Font Software.
+
+GOVERNING LAW AND FORUM. The validity, construction, and performance of this agreement shall be governed by the laws of the State of New York without giving effect to its conflict of laws principles. Licensor and Licensee agree to settle all disputes, controversies, or claims relating to or arising from this Agreement in and specifically consent to personal jurisdiction of the state or federal district courts located in New York over any action arising out of or related to this Agreement. You agree that any breach of this License will cause irreparable harm to Licensor and that any damages are impossible to ascertain and that Licensor expressly shall be entitled to pursue equitable relief including, but not limited to, temporary restraining orders, and preliminary injunctions without the obligation of bond or other security in additions to other remedies under law.
+
+SEVERABILITY. If any provision of this Agreement is declared by a court of competent jurisdiction to be invalid, void or unenforceable, the remaining provisions of this Agreement shall continue in full force and effect, and the invalid provision shall be replaced by Licensor with a valid and enforceable provision that most closely effects the intent of the invalid provision.
+
+AUTHORIZED PARTIES. The parties, by their signatures or the downloading and installation of the Font Software represent that they are authorized to enter into this Agreement.
diff --git a/fonts/Input_Fonts/README.txt b/fonts/Input_Fonts/README.txt
new file mode 100644
index 0000000..6e95f6b
--- /dev/null
+++ b/fonts/Input_Fonts/README.txt
@@ -0,0 +1,155 @@
+INPUT
+===============
+
+Input is a font family designed for computer programming, data, and text composition. It was designed by David Jonathan Ross between 2012 and 2014 and published by The Font Bureau. It contains a wide array of styles so you can fine-tune the typography that works best in your editing environment. Beyond the 168 styles, there is also a command line tool that allows you to customize line-spacing and certain letterforms within the fonts.
+
+You can find more information about the fonts at [http://input.fontbureau.com].
+
+Please note: The entire Input font family is available at no cost for private use, which includes uses on your own computer in plaintext and code. You must purchase inexpensive publishing licenses in order to use Input in print, on the web, or in any publishing context.
+
+ * Web licenses: [http://www.webtype.com/font/input-family]
+ * Print/desktop licenses: [http://www.fontbureau.com/fonts/Input/styles]
+
+Both print/desktop and annual web licenses start at:
+ * US$5 per style
+ * US$40 for a 14-style package of one width of Sans, Serif, or Mono
+ * US$80 for a 56-style package of all widths of Sans, Serif, or Mono
+ * US$200 for the entire 168-style series
+
+Read the enclosed LICENSE.txt for more information, and learn more here: [http://input.fontbureau.com/download]
+
+Questions? Comments? Thoughts about coding typography? Feel free to get in touch: [input@fontbureau.com]
+
+If you’d like to support this project, please purchase a license.
+
+## INSTALLATION
+
+Follow the directions in INSTALL.txt.
+
+## FAMILIES
+
+Input Mono is a monospaced typeface, where all characters occupy a fixed width. Input Sans and Serif are proportional typefaces that are designed with all of the features of a good monospace — generous spacing, large punctuation, and easily distinguishable characters — but without the limitations of a fixed width.
+
+## WIDTHS
+
+Input comes in four widths: Normal, Narrow, Condensed, and Compressed.
+
+I generally tend towards the wider widths, though the narrower widths can be handy if you use a smaller screen, diff multiple files side-by-side, or if your code usually has long lines. I use Input Mono Compressed in my terminal.
+
+Input Mono Narrow approximates the copyfit of a 10-pitch font, and can be used as an alternative to Courier at the same size.
+
+## WEIGHTS
+
+Input comes in seven weights: Thin, Extra Light, Light, Regular, Medium, Bold, Black.
+
+The Light and Medium weights were designed to be only slightly lighter than Regular and Bold, so that they can appear to be a similar weight when used with light text on a dark background. However, on some operating systems (like Mac OS), a dark background color can cause such significant haloing that the Extra Light or Thin weights may be a better approximation.
+
+In Input’s proportional styles, the Thin, Extra Light, Light, and Regular weights all share the same setwidths, as do the Medium and Bold.
+
+## ITALICS
+
+Input’s Italics are always drawn on the same widths as the correspoding upright style. Input Serif’s Italics have an alternative serif arrangement, which makes them especially distinctive and useful when setting apart blocks of text.
+
+## SIZE
+
+These fonts are primarily intended for small sizes in subpixel-rendered environments. The design’s target size is 11px, but the core weights (Light, Regular, Medium, and Bold) can go anywhere from 9px to 16px, and are manually hinted to improve performance at small sizes across operating systems. The extreme weights (Thin, Extra Light, and Black) styles are intended for 16px+. For use at display sizes, I recommend applying negative tracking and reducing the wordspace.
+
+## COMBINING STYLES
+
+I can’t predict which styles will work best for you in which combinations, which is why I offer them all. There are plenty of ways that you can mix and match these styles. I have been experimenting with setting my code as follows:
+
+ * Sans for keywords, variables, and text
+ * Serif for strings, tags, and values
+ * Mono for working in a Terminal, or while editing code that uses wordspaces/tabs for alignment
+ * Bold for class and function definitions
+ * Italic for comments, special words (like ‘this’ or ‘self’), and secondary languages (like CSS within an HTML document)
+
+## ALTERNATES
+
+Input allows you to use OpenType features or a command-line interface to select your preferred form of easily confusable characters:
+
+ * Stylistic Set 01: Schoolbook a
+ * Stylistic Set 02: Schoolbook g
+
+ * Stylistic Set 03: i with top serif (Sans and Mono only)
+ * Stylistic Set 04: l with top serif (Sans and Mono only)
+
+ * Stylistic Set 05: i with top and bottom serif (Sans and Mono only)
+ * Stylistic Set 06: l with top and bottom serif (Sans and Mono only)
+
+ * Stylistic Set 07: i with full serif (Sans only)
+ * Stylistic Set 08: l with full serif (Sans only)
+
+ * Stylistic Set 09: i with top serif and tail (Sans and Mono only)
+ * Stylistic Set 10: l with top serif and tail (Sans and Mono only)
+
+ * Stylistic Set 11: Mid-height asterisk
+ * Stylistic Set 12: Straight braces
+
+ * Stylistic Set 13: Undotted square zero
+ * Slashed Zero ('zero')
+
+Here are some examples of how you can customize Input to mimic the arrangement of these characters in common fonts:
+
+ * Andale Mono
+ * OpenType features: ss03, ss06
+ * inputCustomize.py: --i=topserif --l=serifs
+ * Consolas
+ * OpenType features: ss07, ss08, zero
+ * inputCustomize.py: --i=serif --l=serif --zero=slash
+ * Menlo
+ * OpenType features: ss02, ss07, ss10, ss11, zero
+ * inputCustomize.py: --g=ss --i=serif --l=serifs_round --asterisk=height --zero=slash
+ * Monaco
+ * OpenType features: ss01, ss02, ss05, ss06, zero
+ * inputCustomize.py: --a=ss --g=ss --i=serifs --l=serifs --zero=slash
+ * Source Code Pro:
+ * OpenType features: ss03, ss10
+ * inputCustomize.py: --i=topserif --l=serifs_round --asterisk=height
+
+See more examples at [http://input.fontbureau.com/preview].
+
+## CUSTOMIZATION
+
+inputCustomize.py is a command-line python script that allows you to easily make adjustments to your fonts. It requires TTX/FontTools <http://sourceforge.net/projects/fonttools/>.
+
+My hope is that Input will encourage developers of source code editors to include better typographic support, so that these issues don’t need to be addressed in such a hacky way.
+
+### Alternates
+
+Since most coding applications don’t offer support of OpenType features, this tool will swap out default glyphs for their alternate forms. See description of the alternates above.
+
+### Hack for line-spacing
+
+Since many coding applications don’t include the option to adjust line-spacing, you can modify the built-in linespacing of the fonts.
+
+### Hack for four-style families
+
+Since most coding applications don’t allow you to use more than one four-style family, Input allows you to assemble arbitrary four-style families. I use this in order to combine Sans and Serif, by slotting InputSerif–Regular into the Bold Italic position.
+
+Font family “Inputâ€
+ * Regular: Input Sans Regular
+ * Italic: Input Sans Italic
+ * Bold: Input Sans Bold
+ * Bold Italic: Input Serif Regular
+
+If you would like to use multiple families at the same time, you can use the --suffix parameter to add a short suffix to Input’s menu names, which can help you distinguish different versions.
+
+### Examples
+
+You can use inputCustomize.py like this to work on all fonts in the current working directory:
+
+ $ cd /path/to/the/fonts/you/want/to/edit
+ $ python /path/to/inputCustomize.py --dest=/path/to/output --lineHeight=1.5 --fourStyleFamily --a --g --i=topserif --l=serifs_round --zero --asterisk
+
+Or like this, to create a family out of any four styles:
+
+ $ python /path/to/inputCustomize.py InputSans-Regular.ttf InputSans-Italic.ttf InputSans-Bold.ttf InputSerif-Regular.ttf --suffix=Hack --fourStyleFamily --a
+
+For more details, see the script’s help:
+
+ $ python /path/to/inputCustomize.py -h
+
+## SPECIAL THANKS
+
+All typefaces I work on are collaborations, but this typeface especially benefitted from the feedback and advice of a large number of people. I’d like to thank all of Input’s beta testers who tried it on for size; Maria Doreuli, who consulted with me on the Cyrillic; Matthew Butterick, who gave helpful advice as a coder and as typeface designer; the folks at Paratype, who made the hinting of this massive family possible; Frank Grießhammer, who wrote the excellent box drawing character generator and suggested the Thin weights; and finally my coworkers who all played a role in making this typeface happen: David Berlow, Sam Berlow, Petr van Blokland, Paley Dreier, CJ Dunn, Cyrus Highsmith, Indra Kupferschmid, Chris Lewis, André Mora, Jill Pichotta, and Nick Sherman. Thank you so much. – David Jonathan Ross \ No newline at end of file
diff --git a/fonts/Input_Fonts/Scripts/_template_Bold.txt b/fonts/Input_Fonts/Scripts/_template_Bold.txt
new file mode 100644
index 0000000..3db6755
--- /dev/null
+++ b/fonts/Input_Fonts/Scripts/_template_Bold.txt
Binary files differ
diff --git a/fonts/Input_Fonts/Scripts/_template_BoldItalic.txt b/fonts/Input_Fonts/Scripts/_template_BoldItalic.txt
new file mode 100644
index 0000000..d665af1
--- /dev/null
+++ b/fonts/Input_Fonts/Scripts/_template_BoldItalic.txt
Binary files differ
diff --git a/fonts/Input_Fonts/Scripts/_template_Italic.txt b/fonts/Input_Fonts/Scripts/_template_Italic.txt
new file mode 100644
index 0000000..2d7828e
--- /dev/null
+++ b/fonts/Input_Fonts/Scripts/_template_Italic.txt
Binary files differ
diff --git a/fonts/Input_Fonts/Scripts/_template_Regular.txt b/fonts/Input_Fonts/Scripts/_template_Regular.txt
new file mode 100644
index 0000000..86d9766
--- /dev/null
+++ b/fonts/Input_Fonts/Scripts/_template_Regular.txt
Binary files differ
diff --git a/fonts/Input_Fonts/Scripts/inputCustomize.py b/fonts/Input_Fonts/Scripts/inputCustomize.py
new file mode 100644
index 0000000..703c4f2
--- /dev/null
+++ b/fonts/Input_Fonts/Scripts/inputCustomize.py
@@ -0,0 +1,274 @@
+#!/usr/bin/env python2.6
+# -*- coding: utf-8 -*-
+
+# Thanks to Jonas Kjellström and Cody Boisclair for their help in finding bugs in this script!
+
+import re
+import os
+import sys
+import tempfile
+from fontTools.ttLib import TTFont, newTable
+
+doc = """USAGE: python /path/to/inputCustomize.py [INPUT] [--dest=OUTPUT] [OPTIONS]
+Use this script to customize one or more Input font files.
+Requires TTX/FontTools: <http://sourceforge.net/projects/fonttools/>
+
+If INPUT is missing, it will customize all fonts in the Current Working Directory.
+If OUTPUT is missing, it will overwrite the INPUT files.
+
+Options:
+ -h, --help Print this help text, and exit.
+ --lineHeight=<float> A multiplier for the font's built-in line-height.
+ --fourStyleFamily Only works when four INPUT files are provided.
+ Assigns Regular, Italic, Bold, and Bold Italic names to the
+ INPUT fonts in the order provided.
+ --suffix=<string> Append a suffix to the font names. Takes a string with no spaces.
+ --a=ss Swaps alternate single-story 'a' for the default double-story 'a'
+ --g=ss Swaps alternate single-story 'g' for the default double-story 'a'
+ --i=serif Swaps one of the alternate 'i' for the default in Sans/Mono
+ serifs
+ serifs_round
+ topserif
+ --l=serif Swaps one of the alternate 'l' for the default in Sans/Mono
+ serifs
+ serifs_round
+ topserif
+ --zero=slash Swaps the slashed zero for the default dotted zero
+ nodot Swaps a dotless zero for the default dotted zero
+ --asterisk=height Swaps the mid-height asterisk for the default superscripted asterisk
+ --braces=straight Swaps tamer straight-sided braces for the default super-curly braces
+
+ Example 1:
+ $ cd /path/to/the/top/level/of/the/fonts/you/want/to/edit
+ $ python /path/to/InputCustomize.py --dest=/path/to/output --lineHeight=1.5 --suffix=Hack --fourStyleFamily --a=ss --g=ss --i=topserif --l=serifs_round --zero=slash --asterisk=height
+
+ Example 2:
+ $ cd /path/to/the/top/level/of/the/fonts/you/want/to/edit
+ $ python /path/to/InputCustomize.py InputSans-Regular.ttf InputSans-Italic.ttf InputSans-Bold.ttf InputSerif-Regular.ttf --suffix=Hack --fourStyleFamily
+"""
+
+class InputModifier(object):
+ """
+ An object for manipulating Input, takes a TTFont. Sorry this is a little hacky.
+ """
+
+ def __init__(self, f):
+ self.f = f
+
+ def changeLineHeight(self, lineHeight):
+ """
+ Takes a line height multiplier and changes the line height.
+ """
+ f = self.f
+ baseAsc = f['OS/2'].sTypoAscender
+ baseDesc = f['OS/2'].sTypoDescender
+ multiplier = float(lineHeight)
+ f['hhea'].ascent = round(baseAsc * multiplier)
+ f['hhea'].descent = round(baseDesc * multiplier)
+ f['OS/2'].usWinAscent = round(baseAsc * multiplier)
+ f['OS/2'].usWinDescent = round(baseDesc * multiplier)*-1
+
+ def swap(self, swap):
+ """
+ Takes a dictionary of glyphs to swap and swaps 'em.
+ """
+ f = self.f
+ glyphNames = f.getGlyphNames()
+ maps = {
+ 'a': {'a': 97, 'aring': 229, 'adieresis': 228, 'acyrillic': 1072, 'aacute': 225, 'amacron': 257, 'agrave': 224, 'atilde': 227, 'acircumflex': 226, 'aogonek': 261, 'abreve': 259},
+ 'g': {'gdotaccent': 289, 'gbreve': 287, 'gcircumflex': 285, 'gcommaaccent': 291, 'g': 103},
+ 'i': {'i': 105, 'iacute': 237, 'iogonek': 303, 'igrave': 236, 'itilde': 297, 'icircumflex': 238, 'imacron': 299, 'ij': 307, 'ibreve': 301, 'yicyrillic': 1111, 'idieresis': 239, 'icyrillic': 1110, 'dotlessi': 305,},
+ 'l': {'l': 108, 'lcaron': 318, 'lcommaaccent': 316, 'lacute': 314, 'lslash': 322, 'ldot': 320},
+ 'zero': {'zero': 48},
+ 'asterisk': {'asterisk': 42},
+ 'braces': {'braceleft': 123, 'braceright': 125}
+ }
+ swapMap = {}
+ for k, v in swap.items():
+ for gname, u in maps[k].items():
+ newGname = gname + '.salt_' + v
+ if newGname in glyphNames:
+ swapMap[gname] = newGname
+ for table in f['cmap'].tables:
+ cmap = table.cmap
+ for u, gname in cmap.items():
+ if swapMap.has_key(gname):
+ cmap[u] = swapMap[gname]
+
+ def fourStyleFamily(self, position, suffix=None):
+ """
+ Replaces the name table and certain OS/2 values with those that will make a four-style family.
+ """
+ f = self.f
+ source = TTFont(fourStyleFamilySources[position])
+
+ tf = tempfile.mkstemp()
+ pathToXML = tf[1]
+ source.saveXML(pathToXML, tables=['name'])
+ os.close(tf[0])
+
+ with open(pathToXML, "r") as temp:
+ xml = temp.read()
+
+ # make the changes
+ if suffix:
+ xml = xml.replace("Input", "Input" + suffix)
+
+ # save the table
+ with open(pathToXML, 'w') as temp:
+ temp.write(xml)
+ temp.write('\r')
+
+ f['OS/2'].usWeightClass = source['OS/2'].usWeightClass
+ f['OS/2'].fsType = source['OS/2'].fsType
+
+ # write the table
+ f['name'] = newTable('name')
+ f.importXML(pathToXML)
+
+ def changeNames(self, suffix=None):
+ # this is a similar process to fourStyleFamily()
+
+ tf = tempfile.mkstemp()
+ pathToXML = tf[1]
+ f.saveXML(pathToXML, tables=['name'])
+ os.close(tf[0])
+
+ with open(pathToXML, "r") as temp:
+ xml = temp.read()
+
+ # make the changes
+ if suffix:
+ xml = xml.replace("Input", "Input" + suffix)
+
+ # save the table
+ with open(pathToXML, 'w') as temp:
+ temp.write(xml)
+ temp.write('\r')
+
+ # write the table
+ f['name'] = newTable('name')
+ f.importXML(pathToXML)
+
+
+
+
+
+baseTemplatePath = os.path.split(__file__)[0]
+fourStyleFamilySources = [
+ os.path.join(baseTemplatePath, '_template_Regular.txt'),
+ os.path.join(baseTemplatePath, '_template_Italic.txt'),
+ os.path.join(baseTemplatePath, '_template_Bold.txt'),
+ os.path.join(baseTemplatePath, '_template_BoldItalic.txt'),
+]
+
+fourStyleFileNameAppend = [ 'Regular', 'Italic', 'Bold', 'BoldItalic' ]
+
+if __name__ == "__main__":
+
+ # Get command-line arguments
+ go = True
+ arguments = sys.argv[1:]
+ paths = []
+ swap = {}
+ lineHeight = None
+ fourStyleFamily = None
+ suffix = None
+ destBase = None
+
+
+ # parse arguments
+ for argument in arguments:
+ key = None
+ value = None
+ if len(argument.split('=')) == 2:
+ key, value = argument.split('=')
+ key = key[2:]
+ elif argument[0:2] == '--':
+ key = argument[2:]
+ value = True
+ elif argument == '-h':
+ print doc
+ go = False
+ else:
+ key = argument
+ value = None
+ # assign preference variables
+ if value is None:
+ paths.append(key)
+ elif key == 'lineHeight':
+ lineHeight = value
+ elif key == 'fourStyleFamily':
+ fourStyleFamily = True
+ elif key == 'suffix':
+ suffix = value
+ elif key == 'dest':
+ destBase = value
+ elif key == 'help':
+ print doc
+ go = False
+ else:
+ swap[key] = value
+
+ # account for arguments where no value is given (for example, '--a' instead of '--a=ss')
+ if swap.get('a') is True:
+ swap['a'] = 'ss'
+ if swap.get('g') is True:
+ swap['g'] = 'ss'
+ if swap.get('i') is True:
+ swap['i'] = 'serifs'
+ if swap.get('l') is True:
+ swap['l'] = 'serifs'
+ if swap.get('zero') is True:
+ swap['zero'] = 'slash'
+ if swap.get('asterisk') is True:
+ swap['asterisk'] = 'height'
+ if swap.get('braces') is True:
+ swap['braces'] = 'straight'
+
+
+ # if specific paths were not supplied, collect them from the current directory
+ if not paths:
+ for root, dirs, files in os.walk(os.getcwd()):
+ for filename in files:
+ basePath, ext = os.path.splitext(filename)
+ if ext in ['.otf', '.ttf']:
+ paths.append(os.path.join(root, filename))
+
+ # if four paths were not supplied, do not process as a four-style family
+ if len(paths) != 4:
+ fourStyleFamily = None
+
+ if go:
+ for i, path in enumerate(paths):
+ print os.path.split(path)[1]
+ f = TTFont(path)
+ c = InputModifier(f)
+ if lineHeight:
+ c.changeLineHeight(lineHeight)
+ if swap:
+ c.swap(swap)
+ if fourStyleFamily:
+ c.fourStyleFamily(i, suffix)
+ base, ext = os.path.splitext(path)
+ path = base + '_as_' + fourStyleFileNameAppend[i] + ext
+ elif suffix:
+ c.changeNames(suffix)
+ if destBase:
+ baseScrap, fileAndExt = os.path.split(path)
+ destPath = os.path.join(destBase, fileAndExt)
+ else:
+ destPath = path
+ try:
+ os.remove(destPath)
+ except:
+ pass
+
+ # Take care of that weird "post" table issue, just in case. Delta#1
+ try:
+ del f['post'].mapping['Delta#1']
+ except:
+ pass
+
+ f.save(destPath)
+ print 'done'
diff --git a/fonts/Makefile b/fonts/Makefile
new file mode 100644
index 0000000..f3b3579
--- /dev/null
+++ b/fonts/Makefile
@@ -0,0 +1,24 @@
+fonts = Brill_Typeface_2.06 \
+ InconsolataHellenic.otf \
+ ubuntu-font-family-0.80 \
+ Courier-Prime \
+ Fell \
+ SourceCodePro_FontsOnly-1.017 \
+ Vollkorn
+
+all: $(fonts)
+
+clean:
+ rm -f $(fonts)
+
+install: $(fonts)
+ [ -d ~/.fonts ] || mkdir -p ~/.fonts
+ rsync -av $^ ~/.fonts
+ fc-cache ~/.fonts
+
+# Requires fontforge
+InconsolataHellenic.otf: Inconsolata-Hellenic/Inconsolata-Hellenic.sfd convert.pe
+ fontforge -script convert.pe $<
+ mv -f $(<:.sfd=.otf) $@
+
+.PHONY: all clean install
diff --git a/fonts/Quando/OFL.txt b/fonts/Quando/OFL.txt
new file mode 100644
index 0000000..f1a20ac
--- /dev/null
+++ b/fonts/Quando/OFL.txt
@@ -0,0 +1,97 @@
+Copyright (c) <dates>, <Copyright Holder> (<URL|email>),
+with Reserved Font Name <Reserved Font Name>.
+Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>),
+with Reserved Font Name <additional Reserved Font Name>.
+Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>).
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/fonts/Quando/Quando-Regular.ttf b/fonts/Quando/Quando-Regular.ttf
new file mode 100644
index 0000000..707610a
--- /dev/null
+++ b/fonts/Quando/Quando-Regular.ttf
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/LICENSE.txt b/fonts/SourceCodePro_FontsOnly-1.017/LICENSE.txt
new file mode 100755
index 0000000..d154618
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/LICENSE.txt
@@ -0,0 +1,93 @@
+Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+
+This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/OTF/.DS_Store b/fonts/SourceCodePro_FontsOnly-1.017/OTF/.DS_Store
new file mode 100644
index 0000000..5008ddf
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/OTF/.DS_Store
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Black.otf b/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Black.otf
new file mode 100644
index 0000000..74ab5c1
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Black.otf
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Bold.otf b/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Bold.otf
new file mode 100644
index 0000000..96b4877
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Bold.otf
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-ExtraLight.otf b/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-ExtraLight.otf
new file mode 100644
index 0000000..19c16c7
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-ExtraLight.otf
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Light.otf b/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Light.otf
new file mode 100644
index 0000000..f624ee1
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Light.otf
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Medium.otf b/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Medium.otf
new file mode 100644
index 0000000..be70672
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Medium.otf
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Regular.otf b/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Regular.otf
new file mode 100644
index 0000000..8f031da
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Regular.otf
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Semibold.otf b/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Semibold.otf
new file mode 100644
index 0000000..0dc6a39
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/OTF/SourceCodePro-Semibold.otf
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/ReadMe.html b/fonts/SourceCodePro_FontsOnly-1.017/ReadMe.html
new file mode 100755
index 0000000..1aeb775
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/ReadMe.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Read Me File for Adobe® OpenType® Fonts</title>
+ <meta charset="utf-8" />
+</head>
+<body bgcolor="white" link="#ce0000" alink="#ce0000" vlink="#9c6363">
+ <h2><font color="#333333"
+face="verdana,geneva,arial">Adobe&reg; OpenType&reg; Fonts</font></h2>
+ <p><font size="2" face="verdana,geneva,arial">Thank
+you for licensing Adobe OpenType fonts. In order to ensure that you
+have the most up-to-date product information, Adobe has posted <a
+href="http://www.adobe.com/type/browser/OTReadMe.html">an OpenType
+Read Me file</a> on the Adobe web site that contains information such
+as minimum system requirements, technical support contact information
+and software installation notes. We have also posted <a
+href="http://www.adobe.com/type/browser/pdfs/OTGuide.pdf">an OpenType
+User's Guide</a> in PDF format on the Adobe web site that can be
+viewed online and downloaded to your computer. <P>If you have
+licensed an Adobe OpenType Pro font, there may be additional PDF
+documents, such as a specimen book, a glyph complement showing, and a
+typeface-specific Read Me file, available on the typeface&#146;s
+product pages on the Adobe web site. These additional files may be
+viewed online or downloaded to your computer.<P>To get you started
+quickly, below are links to localized installation instructions for
+your fonts.
+
+<h4>Installation Instructions</h4><hr>
+<p lang=en><b>English</b><br>
+Instructions for installing this font can be found online at <a
+href="http://www.adobe.com/type/browser/fontinstall/instructions_main.html">http://www.adobe.com/type/browser/fontinstall/instructions_main.html</a>.</p>
+<p lang=fr><b>French / Fran&#231;ais</b><br>
+Le mode d'installation de cette police de caract&#232;re se trouve en
+ligne &#224; <a
+href="http://www.adobe.com/type/browser/fontinstall/instructions_main.html">http://www.adobe.com/type/browser/fontinstall/instructions_main.html</a>.</p>
+<p lang=de><b>German / Deutsch</b><br>
+Die Anweisungen zur Installation dieser Schriftart finden Sie online
+unter <a
+href="http://www.adobe.com/type/browser/fontinstall/instructions_main.html">http://www.adobe.com/type/browser/fontinstall/instructions_main.html</a>.</p>
+<p lang=it><b>Italian / Italiano</b><br>
+Le istruzioni per l'installazione di questo font sono disponibili
+online all'indirizzo <a
+href="http://www.adobe.com/type/browser/fontinstall/instructions_main.html">http://www.adobe.com/type/browser/fontinstall/instructions_main.html</a>.</p>
+<p lang=es><b>Spanish / Espa&#241;ol</b><br>
+Las instrucciones para instalar esta fuente se pueden encontrar
+online en <a
+href="http://www.adobe.com/type/browser/fontinstall/instructions_main.html">http://www.adobe.com/type/browser/fontinstall/instructions_main.html</a>.</p>
+<p lang=nl><b>Dutch / Hollands</b><br>
+De instructies voor de installatie van dit lettertype vindt u op <a
+href="http://www.adobe.com/type/browser/fontinstall/instructions_main.html">http://www.adobe.com/type/browser/fontinstall/instructions_main.html</a>.</p>
+<p><b>Swedish / Svenska</b><br>
+Anvisningar f&#246;r hur det h&#228;r teckensnittet installeras finns
+online p&#229; <a
+href="http://www.adobe.com/type/browser/fontinstall/instructions_main.html">http://www.adobe.com/type/browser/fontinstall/instructions_main.html</a>.</p>
+<p><b>Norwegian / Norsk</b><br>
+Instruksjoner for installering av skrifttypen finnes online p&#229;
+<a
+href="http://www.adobe.com/type/browser/fontinstall/instructions_main.html">http://www.adobe.com/type/browser/fontinstall/instructions_main.html</a>.</p>
+<p><b>Finnish / Suomi</b><br>
+Ohjeet t&#228;m&#228;n fontin asentamiseen l&#246;ytyv&#228;t
+osoitteesta <a
+href="http://www.adobe.com/type/browser/fontinstall/instructions_main.html">http://www.adobe.com/type/browser/fontinstall/instructions_main.html</a>.</p>
+<p><b>Danish / Dansk</b><br>
+Du finder en vejledning i installation af denne skrifttype online
+p&#229; adressen <a
+href="http://www.adobe.com/type/browser/fontinstall/instructions_main.html">http://www.adobe.com/type/browser/fontinstall/instructions_main.html</a>.</p>
+<p lang=ja><b>Japanese / 日本語</b><br>
+ã“ã®ãƒ•ã‚©ãƒ³ãƒˆã‚’インストールã™ã‚‹æ‰‹é †ã¯ã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã§ <a
+href="http://www.adobe.com/type/browser/fontinstall/instructions_main.html">http://www.adobe.com/type/browser/fontinstall/instructions_main.html</a>
+ã‚’å‚ç…§ã—ã¦ãã ã•ã„。</p>
+</body>
+</html>
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/SourceCodeProReadMe.html b/fonts/SourceCodePro_FontsOnly-1.017/SourceCodeProReadMe.html
new file mode 100755
index 0000000..a742d47
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/SourceCodeProReadMe.html
@@ -0,0 +1,269 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Read Me File for Source Code Pro</title>
+ <meta charset="utf-8" />
+ <meta name="description" content= "Read Me file for Source Code Pro ... " />
+
+
+ <title>Read Me</title>
+
+<style type="text/css" media="screen">
+/*********************** fonts ************************/
+ body
+ {font-family: sans-serif;
+ font-weight: normal;
+ font-size: 10pt;
+ color: #000000;
+ margin: 0px;
+ background-color: white;}
+
+ h1
+ {display:inline;
+ font-family: sans-serif;
+ font-weight: normal;
+ color: #999999;}
+
+ h2
+ {display:inline;
+ font-size: 10pt;
+ font-family: sans-serif;
+ font-weight: bold;
+ color: #666666;}
+/*********************** links ************************/
+
+ a:link
+ {color:#004477;
+ text-decoration:none;
+ margin: 0px 0px 0px 0px;}
+
+ a:visited
+ {color:#6d7f8e;
+ text-decoration:none;
+ margin: 0px 0px 0px 0px;}
+
+ a:hover
+ {color:#ff0000;
+ text-decoration:none;
+ margin: 0px 0px 0px 0px;}
+/*********************** div tags ************************/
+ #page
+ {float:left;
+ width:700px;
+ margin:20px 20px 20px 20px;}
+
+ #subTitle
+ {background-color:#e3e3e3;
+ float:left;
+ width:700px;
+ border-bottom:solid #999999 1.0pt;
+ border-bottom-alt:solid #999999 .5pt;
+ padding:2px 0px 4px 0px;}
+
+ #title
+ {background-color:#e3e3e3;
+ float:left;
+ width:700px;
+ border-bottom:solid #999999 1.0pt;
+ border-bottom-alt:solid #999999 .5pt;
+ padding:2px 0px 4px 0px;}
+
+ #description
+ {float:left;
+ width:700px;
+ padding:15px 0px 15px 0px;}
+.style6 {color: #666666}
+.style7 {color: #FF0000}
+</style>
+ </head>
+
+<body>
+
+<div id="page">
+ <h1><span style="font-size:16pt">Source&#153; Code Pro</span></h1>
+ <br />
+
+
+ <div id="description1">
+ <p> This document contains late-breaking product information, updates, and troubleshooting tips.<br />
+ <br />
+ <a href="#A1">Minimum system requirements</a> <br />
+ <a href="#A7">Font installation</a> <br />
+ <a href="#A2">Family information</a> <br />
+ <a href="#A3">Release Notes</a><br />
+ <a href="#A8">Known issues</a> <br />
+ <a href="#A9">Customer care</a> <br />
+ <a href="#A10">Other resources</a> <br />
+ <a href="#A12"></a><br />
+ </p>
+ </div>
+ <div id="title"><a name="A1" id="A1"></a><h2 class="style6">Minimum system requirements</h2>
+ </div>
+
+ <div id="description2">
+ <p>Windows&reg;</p>
+ <ul>
+ <li> Intel&reg; Pentium,&reg; Intel Centrino,&reg; Intel Xeon,&reg; or Intel Core&trade; Duo processor</li>
+ <li>Microsoft Windows 2000, Windows XP, Windows Vista&trade;, or Windows 7<br />
+ </li>
+ <li>16 MB of RAM (32 MB recommended)</li>
+ <li>Note:
+ Fonts from Font Folio 11 may also be installed under Microsoft Windows 98, Windows Millennium Edition,
+ and Windows NT&reg; 4.0 with Service Pack 4 if you install Adobe Type Manager&reg; (ATM&trade;) Light
+ 4.1 on your system. If using a PostScript&reg; printer on Windows 98/ME, AdobePS&trade; printer
+ driver 4.3 or later is recommended. If using a PostScript printer
+ on Windows NT 4.0, AdobePS printer driver 5.1.2 or later is recommended.</li>
+ </ul>
+ <p>Macintosh</p>
+ <ul>
+ <li> PowerPC&reg; G4 or G5 or multicore Intel processor</li>
+ <li>Mac OS X</li>
+ <li>16 MB of RAM (32 MB recommended)</li>
+ <li>If using a PostScript printer, the latest AdobePS printer driver is recommended.</li>
+ <li>Note: Fonts from Font Folio 11 may be installed under Mac OS 8.6 through 9.2 with ATM Light 4.6,
+ and under Classic mode in Mac OS X with ATM Light 4.6.2.</li>
+ </ul>
+ </div>
+
+
+ <div id="title3"><h2><a name="A7" id="A7">Font installation</a></h2></div>
+
+ <div id="description3">
+ <p>For information on installing these fonts, see<span class="style7"> <a title="http://www.adobe.com/go/learn_fontinstall_en" href="http://www.adobe.com/go/learn_fontinstall_en">http://www.adobe.com/go/learn_fontinstall_en</a>.</span></p>
+ </div>
+ <div id="title4"><h2><a name="A2" id="A2">Family information</a></h2></div>
+
+ <div id="description4">
+ <p><strong>History</strong></p>
+ Source Code Pro was designed by Paul D. Hunt as a companion to Source Sans. This complementary family was adapted from the Source design due to a request to create a monospaced version for coding applications. Source Code preserves the design features and vertical proportions of Source Sans, but alters the glyph widths so that they are uniform across all glyphs and weights. Although this family was designed specifically for coding environments, for which a regular weight will typically suffice, Source Code has been made available in the same weight range as the corresponding Source Sans design.<br><br>Source Code Pro currently supports a wide range of languages using the Latin script, and includes all the characters in the Adobe Latin 4 glyph set. As an open source project, it is expected that incremental updates will be made over time to extend glyph set coverage and functionality. Future releases are expected to add support for Greek and Cyrillic scripts, italics, and other features documented on the project page at <A HREF="http://sourceforge.net/adobe/sourcesans/wiki/Home/">Open@Adobe</A>, which is hosted by SourceForge.net®. If you are interested in contributing to this open source project, please visit this project page for information on how to become involved. Source Code Pro can be adapted and redistributed according to the terms of the <A HREF="http://www.adobe.com/type/browser/legal/pdfs/OpenFontLicense.pdf">Open Font License (OFL) agreement</A>.
+ <p><strong>Menu Names And Style Linking</strong> </p>
+
+<p>In many Windows&reg; applications, instead of every font appearing on
+the menu, fonts are grouped into style-linked sets, and only the name of
+the base style font for a set is shown in the menu. The italic and the
+bold weight fonts of the set (if any) are not shown in the font menu, but can still be
+accessed by selecting the base style font, and then using the italic
+and bold style buttons. In this family, such programs will show only the
+following base style font names in the menu:</p>
+<p>Source Code Pro<br>
+Source Code Pro Black<br>
+Source Code Pro ExtraLight<br>
+Source Code Pro Light<br>
+Source Code Pro Medium<br>
+Source Code Pro Semibold<br></p>
+<p>The other fonts in this family must be selected by choosing a menu name
+and then a style option following the guide below.</p>
+<table border="0">
+
+<tr> <td>Menu Name</td> <td> </td> <td>plus Style Option... </td> <td> </td> <td>selects this font</td> </tr>
+<tr> <td>Source Code Pro</td> <td> </td> <td>[none]</td> <td> </td> <td>Source Code Pro Regular</td> </tr>
+<tr> <td>Source Code Pro</td> <td> </td> <td>Bold</td> <td> </td> <td>Source Code Pro Bold</td> </tr>
+<tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr>
+<tr> <td>Source Code Pro ExtraLight</td> <td> </td> <td>[none]</td> <td> </td> <td>Source Code Pro ExtraLight</td> </tr>
+<tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr>
+<tr> <td>Source Code Pro Light</td> <td> </td> <td>[none]</td> <td> </td> <td>Source Code Pro Light</td> </tr>
+<tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr>
+<tr> <td>Source Code Pro Medium</td> <td> </td> <td>[none]</td> <td> </td> <td>Source Code Pro Medium</td> </tr>
+<tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr>
+<tr> <td>Source Code Pro Semibold</td> <td> </td> <td>[none]</td> <td> </td> <td>Source Code Pro Semibold</td> </tr>
+<tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr>
+<tr> <td>Source Code Pro Black</td> <td> </td> <td>[none]</td> <td> </td> <td>Source Code Pro Black</td> </tr>
+<tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr>
+
+
+
+</table>
+<p>On the Mac OS, although each font appears as a separate entry on the
+font menu, users may also select fonts by means of style links.
+Selecting a base style font and then using the style links (as described
+above for Windows) enhances cross-platform document compatibility with
+many applications, such as Microsoft&reg; Word and Adobe PageMaker&reg;,
+although it is unnecessary with more sophisticated Adobe applications
+such as recent versions of Illustrator&reg;, Photoshop&reg; or
+InDesign&reg;.</p>
+<p>One should not, however, select a base font which has no style-linked
+variant, and then use the bold or italic styling button. Doing so will
+either have no effect, or result in programmatic bolding or slanting of
+the base font, which will usually produce inferior screen and print
+results.</p>
+ </div>
+ <div id="title5"><h2><a name="A3" id="A3">Release Notes</a></h2></div>
+ <div id="description5">
+ <p>For all fonts of family Source Code Pro : version 1.017 created on Wed Jan 11 11:26:00 2013.</p>
+<p>version 1.017 created 2013/01/11</p>
+<ul>
+<li> Updates the design of the asterisk glyphs, bar, and broken bar.</li>
+<li> Updates the hinting to the default asterisk in all styles.</li>
+<li> Adds an new Medium weight to the font project.</li>
+<li> Updates design of the following glyphs to center them within glyph height/width:
+ <ul>
+ <li> lighttrpldashhorzbxd</li>
+ <li> heavytrpldashhorzbxd</li>
+ <li> lighttrpldashvertbxd</li>
+ <li> heavytrpldashvertbxd</li>
+ <li> lightquaddashhorzbxd</li>
+ <li> heavyquaddashhorzbxd</li>
+ <li> lightquaddashvertbxd</li>
+ <li> heavyquaddashvertbxd</li>
+ <li> lightdbldashhorzbxd</li>
+ <li> heavydbldashhorzbxd</li>
+ <li> lightdbldashvertbxd</li>
+ <li> heavydbldashvertbxd</li>
+ </ul>
+</li>
+</ul>
+ <p>For all fonts of family Source Code Pro : version 1.013 created on Thu Dec 06 18:18:45 2012.</p>
+<p>version 1.013 created 2012/12/06</p>
+<ul>
+<li> Updates design of asterisk and hyphen to accommodate coders' preferences.</li>
+<li> Realigns math and punctuation glyphs.</li>
+<li> Adds a stylistic set (ss01) for typographic alternates.</li>
+<li> Adds a stylistic set (ss04) for alternate dollar sign.</li>
+<li> Adds a small number of IPA characters.</li>
+<li> Adds box drawing characters and block elements.</li>
+</ul>
+<p>version 1.010 created 2012/09/30</p>
+<ul>
+<li> Fixed TrueType hinting problem in Bold ampersand.</li>
+</ul>
+<p>version 1.009 created 2012/09/20</p>
+<ul>
+<li> First release.</li>
+</ul>
+ </div>
+ <div id="title6"><h2><a name="A8" id="A8">Known issues</a></h2></div>
+
+ <div id="description6">
+ <ul> <li>Some glyphs in the font cannot be accessed unless you are using an OpenType-savvy application.
+ </li>
+</ul>
+ </div>
+
+ <div id="title7"><h2><a name="A9" id="A9"> Customer care</a></h2></div>
+
+ <div id="description7">
+ <p><strong>Customer Service</strong><br />
+ Adobe Customer Service provides assistance with product information, sales, registration, and other non-technical issues. To find out how to contact Adobe Customer Service, please visit Adobe.com for your region or country and click on Contact.</p>
+ <p><strong>Support Plan Options and Technical Resources </strong><br />
+ If you require technical assistance for your product, including information on free and paid support options and troubleshooting resources, more information is available at <a title="http://www.adobe.com/go/support/" href="http://www.adobe.com/go/support/"><span title="http://www.adobe.com/go/support/">http://www.adobe.com/go/support/</span></a>. Outside of North America, go to <a title="http://www.adobe.com/go/intlsupport/" href="http://www.adobe.com/go/intlsupport/"><span title="http://www.adobe.com/go/intlsupport/">http://www.adobe.com/go/intlsupport/</span></a>. Free troubleshooting resources include Adobe&rsquo;s support knowledgebase, Adobe user-to-user forums and more.</p>
+ </div>
+
+ <div id="title8"><h2><a name="A10" id="A10"> Other resources</a></h2></div>
+
+ <div id="description8">
+<p><strong>Online Resources</strong><br />
+<a href="http://www.adobe.com/type">Adobe Type Showroom</a><br />
+<a href="http://www.adobe.com/type/family_readmes.html">Adobe Type Showroom - all current Read-Me files for our font families</a><br />
+<a href="http://www.adobe.com/support/forums/">User Forums</a><br />
+</p>
+<p align="left"><br />
+ </p>
+ </div>
+ <br />
+ <br />
+ &copy; 2012 Adobe Systems Incorporated. All rights reserved.
+</div>
+</body>
+</html>
+
+ \ No newline at end of file
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/TTF/.DS_Store b/fonts/SourceCodePro_FontsOnly-1.017/TTF/.DS_Store
new file mode 100644
index 0000000..5008ddf
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/TTF/.DS_Store
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Black.ttf b/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Black.ttf
new file mode 100644
index 0000000..ea73e60
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Black.ttf
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Bold.ttf b/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Bold.ttf
new file mode 100644
index 0000000..a56f1fa
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Bold.ttf
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-ExtraLight.ttf b/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-ExtraLight.ttf
new file mode 100644
index 0000000..f409b71
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-ExtraLight.ttf
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Light.ttf b/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Light.ttf
new file mode 100644
index 0000000..51eb963
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Light.ttf
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Medium.ttf b/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Medium.ttf
new file mode 100644
index 0000000..1ee45eb
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Medium.ttf
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Regular.ttf b/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Regular.ttf
new file mode 100644
index 0000000..b2cff92
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Regular.ttf
Binary files differ
diff --git a/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Semibold.ttf b/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Semibold.ttf
new file mode 100644
index 0000000..b425f9c
--- /dev/null
+++ b/fonts/SourceCodePro_FontsOnly-1.017/TTF/SourceCodePro-Semibold.ttf
Binary files differ
diff --git a/fonts/Vollkorn/Fontlog.txt b/fonts/Vollkorn/Fontlog.txt
new file mode 100644
index 0000000..3ea0b37
--- /dev/null
+++ b/fonts/Vollkorn/Fontlog.txt
@@ -0,0 +1,46 @@
+
+FONTLOG for Vollkorn
+–––––––––––––––––––––––––––––––––––––––––
+This file provides detailed information on the Vollkorn Font Software.
+This information should be distributed along with the Vollkorn fonts and any derivative works.
+
+
+Basic Font Information
+–––––––––––––––––––––––––––––––––––––––––
+Vollkorn – the free and healthy typeface for bread and butter use, designed by Friedrich Althausen.
+Vollkorn came into being as my first type designing attempt. I published the Regular on my site grafikfritze.de in 2005 under a Creative-Commons-License. Until the counter finally collapsed two years later it had been downloaded thousands of times and used for web and print matters. It intends to be a quiet, modest and well working text face for bread and butter use. Unlike examples in the book faces from the renaissance until today, it has dark and meaty serifs and a bouncing and healthy look. It might be used as body type as well as for headlines or titles. »Vollkorn« is German for »wholemeal« which refers to the old term »Brotschrift«. It stood for the small fonts for every day use in hand setting times.
+Since 19 May 2010 Vollkorn is published under the OFL.
+Original Designers address: Friedrich Althausen, friedrichalthausen.de, Weimar, Germany
+
+
+ChangeLog
+–––––––––––––––––––––––––––––––––––––––––
+(This should list both major and minor changes, most recent first.)
+
+15 September 2010 (Yanone) Vollkorn Version 2.1
+- fixing TT-Hinting: droping-out horizontal strokes at 14 px
+
+07 September 2010 (Friedrich Althausen, supported by Yanone) Vollkorn Version 2.1
+- Initial release of the styles Vollkorn Italic and Bold-Italic
+- Small improvements in the Regular and Bold styles
+
+19 May 2010 (Friedrich Althausen, supported by Yanone) Vollkorn Version 2.0
+- Initial release of the fonts Vollkorn Regular and Bold under the SIL OFL 1.1
+
+late 2005 (Friedrich Althausen) Vollkorn Version 1.0
+- First release of Vollkorn under the Creative Commons License “Attribution 2.0 Germanyâ€
+
+
+Acknowledgements
+–––––––––––––––––––––––––––––––––––––––––
+(Here is where contributors can be acknowledged. If you make modifications be sure to add your name (N), email (E), web-address (W) and description (D). This list is sorted by last name in alphabetical order.)
+
+N: Friedrich Althausen
+E: post@friedrichalthausen.de
+W: http://friedrichalthausen.de/
+D: Designer – original Regular, Bold, Italic and Bold-Italic, ISO Latin 1 and some additional
+
+N: Jan Yanone Gerner
+E: post@yanone.de
+W: http://yanone.de/
+D: Engineer/Designer – TrueType hinting and mastering
diff --git a/fonts/Vollkorn/OFL-FAQ.txt b/fonts/Vollkorn/OFL-FAQ.txt
new file mode 100644
index 0000000..cc9c3dd
--- /dev/null
+++ b/fonts/Vollkorn/OFL-FAQ.txt
@@ -0,0 +1,235 @@
+OFL FAQ - Frequently Asked Questions about the SIL Open Font License (OFL)
+Version 1.1-update1 - 31 March 2009
+(See http://scripts.sil.org/OFL for updates)
+
+
+1 ABOUT USING AND DISTRIBUTING FONTS LICENSED UNDER THE OFL
+
+1.1 Can I use the fonts in any publication, even embedded in the file?
+Yes. You may use them like most other fonts, but unlike some fonts you may include an embedded subset of the fonts in your document. Such use does not require you to include this license or other files (listed in OFL condition 2), nor does it require any type of acknowledgement within the publication. Some mention of the font name within the publication information (such as in a colophon) is usually appreciated. If you wish to include the complete font as a separate file, you should distribute the full font package, including all existing acknowledgements, and comply with the OFL conditions. Of course, referencing or embedding an OFL font in any document does not change the license of the document itself. The requirement for fonts to remain under the OFL does not apply to any document created using the fonts and their derivatives. Similarly, creating any kind of graphic using a font under OFL does not make the resulting artwork subject to the OFL.
+
+1.2 Can I make web pages using these fonts?
+Yes! Go ahead! Using CSS (Cascading Style Sheets) is recommended. Direct usage of fonts retrieved from a remote server - also referred to as font linking - using cross-platform open standards like @font-face is encouraged. This is considered to be use and distribution for which the OFL explicitly grants permission. The font file itself is not embedded in the webpage but referenced through a web address (i.e. a URI regardless of file format or access protocol) which will cause the browser to retrieve and use the corresponding font to render the webpage. This usage scenario is different from font embedding within a document (i.e. a PDF) where the font or some of its elements become part of the document. Note that embedding in a document is also permitted by the license as indicated in 1.1. (See 1.10 for details related to URL-based access restrictions methods or DRM mechanisms).
+
+1.3 Can I make the fonts available to others from my web site?
+Yes, as long as you meet the conditions of the license (do not sell by itself, include the necessary files, include the necessary copyright and license information, rename Modified Versions, do not abuse the Author(s)' name(s) and do not sublicense). In the case where you are hosting fonts to be served on the web, make sure the file contains the needed copyright notice(s) and licensing information in its metadata. Please double-check the accuracy of every field to prevent contradictory information. If you are making the font available for use via the @font-face open standard, putting this information in the standard font metadata fields is sufficient. Other font formats, including EOT and proposed superior alternatives, already provide fields for this information.
+
+1.4 Can the fonts be included with Free/Libre and Open Source Software collections such as GNU/Linux and BSD distributions?
+Yes! Fonts licensed under the OFL can be freely aggregated with software under FLOSS (Free/Libre and Open Source Software) licenses. Since fonts are much more useful aggregated to than merged with existing software, possible incompatibility with existing software licenses is not a problem. You can also repackage the fonts and the accompanying components in a .rpm or .deb package and include them in distro CD/DVDs and online repositories.
+
+1.5 I want to distribute the fonts with my program. Does this mean my program also has to be free/libre and open source software?
+No. Only the portions based on the Font Software are required to be released under the OFL. The intent of the license is to allow aggregation or bundling with software under restricted licensing as well.
+
+1.6 Can I include the fonts on a CD of freeware or commercial fonts?
+Yes, as long some other font or software is also on the disk, so the OFL font is not sold by itself.
+
+1.7 Can I sell a software package that includes these fonts?
+Yes, you can do this with both the Original Version and a Modified Version. Examples of bundling made possible by the OFL would include: word processors, design and publishing applications, training and educational software, edutainment software, etc.
+
+1.8 Why won't the OFL let me sell the fonts alone?
+The intent is to keep people from making money by simply redistributing the fonts. The only people who ought to profit directly from the fonts should be the original authors, and those authors have kindly given up potential direct income to distribute their fonts under the OFL. Please honor and respect their contribution!
+
+1.9 I've come across a font released under the OFL. How can I easily get more information about the Original Version? How can I know where it stands compared to the Original Version or other Modified Versions?
+Consult the copyright statement(s) in the license for ways to contact the original authors. Consult the FONTLOG for information on how the font differs from the Original Version, and get in touch with the various contributors via the information in the acknowledgment section. Please consider using the Original Versions of the fonts whenever possible.
+
+1.10 What do you mean in condition 4? Can you provide examples of abusive promotion / endorsement / advertisement vs. normal acknowledgement?
+The intent is that the goodwill and reputation of the author(s) should not be used in a way that makes it sound like the original author(s) endorse or approve of a specific Modified Version or software bundle. For example, it would not be right to advertise a word processor by naming the author(s) in a listing of software features, or to promote a Modified Version on a web site by saying "designed by ...". However, it would be appropriate to acknowledge the author(s) if your software package has a list of people who deserve thanks. We realize that this can seem to be a gray area, but the standard used to judge an acknowledgement is that if the acknowledgement benefits the author(s) it is allowed, but if it primarily benefits other parties, or could reflect poorly on the author(s), then it is not.
+
+1.11 Can Font Software released under the OFL be subject to URL-based access restrictions methods or DRM mechanisms?
+Yes, but these issues are out-of-scope for the OFL. The license itself neither encourages their use nor prohibits them since such mechanisms are not implemented in the components of the Font Software but through external software. Such restrictions are put in place for many different purposes corresponding to various usage scenarios. One common example is to limit potentially dangerous cross-site scripting attacks. However, in the spirit of libre/open fonts and unrestricted writing systems, we strongly encourage open sharing and reuse of OFL fonts, and the establishment of an environment where such restrictions are unnecessary. Note that whether you wish to use such mechanisms or you prefer not to, you must still abide by the rules set forth by the OFL when using fonts released by their authors under this license. Derivative fonts must be licensed under the OFL, even if they are part of a service for which you charge fees and/or for which access to source code is restricted. You may not sell the fonts on their own - they must be part of a larger software package or bundle. For example, even if the OFL font is distributed in a software package or via an online service using a DRM mechanism, the user would still have the right to extract that font, use, study, modify and redistribute it under the OFL.
+
+1.12 What about distributing fonts with a document? Within a compressed folder structure like an OpenDocument file (.odt) for example? Is it redistribution, bundling or embedding?
+The vast majority of the time, documents circulated in electronic form reference a font name which will match the corresponding font on the target system but do not carry the font within themselves. There may, however, be some cases where you need to bundle a font with the document. Certain document formats may allow the inclusion of an unmodified font within their file structure which consists of a compressed folder containing the various resources forming the document (such as pictures and thumbnails). Including fonts within such a structure is understood as being different from embedding but rather similar to bundling (or mere aggregation) for which the licensing makes explicit provision. In this case the font is conveyed unchanged whereas embedding a font transforms it from the original format. The OFL does not allow anyone to extract the font from such a structure to then redistribute it under another license. The explicit permission to redistribute and embed does not cancel the requirement for the Font Software to remain under the license chosen by its Author(s).
+
+1.13 If OFL fonts are extracted from a document in which they are embedded (such as a PDF file), what can be done with them? Is this a risk to Author(s)?
+The few utilities that can extract fonts embedded in a PDF will only output limited amounts of outlines - not a complete font. To create a working font from this method is much more difficult than finding the source of the original OFL font. So there is little chance that an OFL font would be extracted and redistributed inappropriately through this method. Even so, copyright laws address any misrepresentation of authorship. All Font Software released under the OFL and marked as such by the Author(s) is intended to remain under this license regardless of the distribution method, and cannot be redistributed under any other license. We strongly discourage any font extraction - we recommend directly using the font sources instead - but if you extract font outlines from a document please be considerate, use your common sense and respect the work of the Author(s) and the licensing model.
+
+1.14 What about sharing OFL fonts with friends on a CD, DVD or USB stick?
+You are very welcome to share open fonts with friends, family and colleagues on such removable media. Please make sure that you share and share-alike as much as possible from what the Author(s) released and that you don't strip away useful information which may not be present in the binary font files themselves. Just remember that in the case where you sell the font, it has to come bundled with software.
+
+
+2 ABOUT MODIFYING OFL LICENSED FONTS
+
+2.1 Can I change the fonts? Are there any limitations to what things I can and cannot change?
+You are allowed to change anything, as long as such changes do not violate the terms of the license. In other words, you are not allowed to remove the copyright statement(s) from the font, but you could add additional information into it that covers your contribution.
+
+2.2 I have a font that needs a few extra glyphs - can I take them from an OFL licensed font and copy them into mine?
+Yes, but if you distribute that font to others it must be under the OFL, and include the information mentioned in condition 2 of the license.
+
+2.3 Can I charge people for my additional work? In other words, if I add a bunch of special glyphs and/or OpenType/Graphite code, can I sell the enhanced font?
+Not by itself. Derivative fonts must be released under the OFL and cannot be sold by themselves. It is permitted, however, to include them in a larger software package (such as text editors, office suites or operating systems), even if the larger package is sold. In that case, you are strongly encouraged, but not required, to also make that derived font easily and freely available outside of the larger package.
+
+2.4 Can I pay someone to enhance the fonts for my use and distribution?
+Yes. This is a good way to fund the further development of the fonts. Keep in mind, however, that if the font is distributed to others it must be under the OFL. You won't be able to recover your investment by exclusively selling the font, but you will be making a valuable contribution to the community. Please remember how you have benefitted from the contributions of others.
+
+2.5 I need to make substantial revisions to the font to make it work with my program. It will be a lot of work, and a big investment, and I want to be sure that it can only be distributed with my program. Can I restrict its use?
+No. If you redistribute a Modified Version of the font it must be under the OFL. You may not restrict it in any way. This is intended to ensure that all released improvements to the fonts become available to everyone. But you will likely get an edge over competitors by being the first to distribute a bundle with the enhancements. Again, please remember how you have benefitted from the contributions of others.
+
+2.6 Do I have to make any derivative fonts (including extended source files, build scripts, documentation, etc.) publicly available?
+No, but please do share your improvements with others. You may find that you receive more than what you gave in return.
+
+2.7 Why can't I use the Reserved Font Name(s) in my derivative font names? I'd like people to know where the design came from.
+The best way to acknowledge the source of the design is to thank the original authors and any other contributors in the files that are distributed with your revised font (although no acknowledgement is required). The FONTLOG is a natural place to do this. Reserved Font Name(s) ensure that the only fonts that have the original names are the unmodified Original Versions. This allows designers to maintain artistic integrity while allowing collaboration to happen. It eliminates potential confusion and name conflicts. When choosing a name be creative and avoid names that reuse almost all the same letters in the same order or sound like the original. Keep in mind that the Copyright Holder(s) can allow a specific trusted partner to use Reserved Font Name(s) through a separate written agreement.
+
+2.8 What do you mean by "primary name as presented to the user"? Are you referring to the font menu name?
+Yes, the requirement to change the visible name used to differentiate the font from others applies to the font menu name and other mechanisms to specify a font in a document. It would be fine, for example, to keep a text reference to the original fonts in the description field, in your modified source file or in documentation provided alongside your derivative as long as no one could be confused that your modified source is the original. But you cannot use the Reserved Font Names in any way to identify the font to the user (unless the Copyright Holder(s) allow(s) it through a separate agreement; see section 2.7). Users who install derivatives ("Modified Versions") on their systems should not see any of the original names ("Reserved Font Names") in their font menus, for example. Again, this is to ensure that users are not confused and do not mistake a font for another and so expect features only another derivative or the Original Version can actually offer. Ultimately, creating name conflicts will cause many problems for the users as well as for the designer of both the Original and Modified versions, so please think ahead and find a good name for your own derivative. Font substitution systems like fontconfig, or application-level font fallback configuration within OpenOffice.org or Scribus, will also get very confused if the name of the font they are configured to substitute to actually refers to another physical font on the user's hard drive. It will help everyone if Original Versions and Modified Versions can easily be distinguished from one another and from other derivatives. The substitution mechanism itself is outside the scope of the license. Users can always manually change a font reference in a document or set up some kind of substitution at a higher level but at the lower level the fonts themselves have to respect the Reserved Font Name(s) requirement to prevent ambiguity. If a substitution is currently active the user should be aware of it.
+
+2.9 Am I not allowed to use any part of the Reserved Font Names?
+You may not use the words of the font names, but you would be allowed to use parts of words, as long as you do not use any word from the Reserved Font Names entirely. We do not recommend using parts of words because of potential confusion, but it is allowed. For example, if "Foobar" was a Reserved Font Name, you would be allowed to use "Foo" or "bar", although we would not recommend it. Such an unfortunate choice would confuse the users of your fonts as well as make it harder for other designers to contribute.
+
+2.10 So what should I, as an author, identify as Reserved Font Names?
+Original authors are encouraged to name their fonts using clear, distinct names, and only declare the unique parts of the name as Reserved Font Names. For example, the author of a font called "Foobar Sans" would declare "Foobar" as a Reserved Font Name, but not "Sans", as that is a common typographical term, and may be a useful word to use in a derivative font name. Reserved Font Names should also be single words. A font called "Flowing River" should have Reserved Font Names "Flowing" and "River", not "Flowing River".
+
+2.11 Do I, as an author, have to identify any Reserved Font Names?
+No, but we strongly encourage you to do so. This is to avoid confusion between your work and Modified versions. You may, however, give certain trusted parties the right to use any of your Reserved Font Names through separate written agreements. For example, even if "Foobar" is a RFN, you could write up an agreement to give company "XYZ" the right to distribute a modified version with a name that includes "Foobar". This allows for freedom without confusion.
+
+2.12 Are any names (such as the main font name) reserved by default?
+No. That is a change to the license as of version 1.1. If you want any names to be Reserved Font Names, they must be specified after the copyright statement(s).
+
+2.13 What is this FONTLOG thing exactly?
+It has three purposes: 1) to provide basic information on the font to users and other developers, 2) to document changes that have been made to the font or accompanying files, either by the original authors or others, and 3) to provide a place to acknowledge the authors and other contributors. Please use it! See below for details on how changes should be noted.
+
+2.14 Am I required to update the FONTLOG?
+No, but users, designers and other developers might get very frustrated at you if you don't! People need to know how derivative fonts differ from the original, and how to take advantage of the changes, or build on them.
+
+
+3 ABOUT THE FONTLOG
+
+The FONTLOG can take a variety of formats, but should include these four sections:
+
+3.1 FONTLOG for <FontFamilyName>
+This file provides detailed information on the <FontFamilyName> Font Software. This information should be distributed along with the <FontFamilyName> fonts and any derivative works.
+
+3.2 Basic Font Information
+(Here is where you would describe the purpose and brief specifications for the font project, and where users can find more detailed documentation. It can also include references to how changes can be contributed back to the Original Version. You may also wish to include a short guide to the design, or a reference to such a document.)
+
+3.3 ChangeLog
+(This should list both major and minor changes, most recent first. Here are some examples:)
+
+7 February 2007 (Pat Johnson) <NewFontFamilyName> Version 1.3
+- Added Greek and Cyrillic glyphs
+- Released as "<NewFontFamilyName>"
+
+7 March 2006 (Fred Foobar) <NewFontFamilyName> Version 1.2
+- Tweaked contextual behaviours
+- Released as "<NewFontFamilyName>"
+
+1 Feb 2005 (Jane Doe) <NewFontFamilyName> Version 1.1
+- Improved build script performance and verbosity
+- Extended the smart code documentation
+- Corrected minor typos in the documentation
+- Fixed position of combining inverted breve below (U+032F)
+- Added OpenType/Graphite smart code for Armenian
+- Added Armenian glyphs (U+0531 -> U+0587)
+- Released as "<NewFontFamilyName>"
+
+1 Jan 2005 (Joe Smith) <FontFamilyName> Version 1.0
+- Initial release of font "<FontFamilyName>"
+
+3.4 Acknowledgements
+(Here is where contributors can be acknowledged.
+
+If you make modifications be sure to add your name (N), email (E), web-address (W) and description (D). This list is sorted by last name in alphabetical order.)
+
+N: Jane Doe
+E: jane@university.edu
+W: http://art.university.edu/projects/fonts
+D: Contributor - Armenian glyphs and code
+
+N: Fred Foobar
+E: fred@foobar.org
+W: http://foobar.org
+D: Contributor - misc Graphite fixes
+
+N: Pat Johnson
+E: pat@fontstudio.org
+W: http://pat.fontstudio.org
+D: Designer - Greek & Cyrillic glyphs based on Roman design
+
+N: Tom Parker
+E: tom@company.com
+W: http://www.company.com/tom/projects/fonts
+D: Engineer - original smart font code
+
+N: Joe Smith
+E: joe@fontstudio.org
+W: http://joe.fontstudio.org
+D: Designer - original Roman glyphs
+
+(Original authors can also include information here about their organization.)
+
+
+4 ABOUT MAKING CONTRIBUTIONS
+
+4.1 Why should I contribute my changes back to the original authors?
+It would benefit many people if you contributed back to what you've received. Providing your contributions and improvements to the fonts and other components (data files, source code, build scripts, documentation, etc.) could be a tremendous help and would encourage others to contribute as well and 'give back', which means you will have an opportunity to benefit from other people's contributions as well. Sometimes maintaining your own separate version takes more effort than merging back with the original. Be aware that any contributions, however, must be either your own original creation or work that you own, and you may be asked to affirm that clearly when you contribute.
+
+4.2 I've made some very nice improvements to the font, will you consider adopting them and putting them into future Original Versions?
+Most authors would be very happy to receive such contributions. Keep in mind that it is unlikely that they would want to incorporate major changes that would require additional work on their end. Any contributions would likely need to be made for all the fonts in a family and match the overall design and style. Authors are encouraged to include a guide to the design with the fonts. It would also help to have contributions submitted as patches or clearly marked changes (the use of smart source revision control systems like subversion, svk, mercurial, git or bzr is a good idea). Examples of useful contributions are bug fixes, additional glyphs, stylistic alternates (and the smart font code to access them) or improved hinting.
+
+4.3 How can I financially support the development of OFL fonts?
+It is likely that most authors of OFL fonts would accept financial contributions - contact them for instructions on how to do this. Such contributions would support future development. You can also pay for others to enhance the fonts and contribute the results back to the original authors for inclusion in the Original Version.
+
+
+5 ABOUT THE LICENSE
+
+5.1 I see that this is version 1.1 of the license. Will there be later changes?
+Version 1.1 is the first minor revision of the OFL. We are confident that version 1.1 will meet most needs, but are open to future improvements. Any revisions would be for future font releases, and previously existing licenses would remain in effect. No retroactive changes are possible, although the Copyright Holder(s) can re-release the font under a revised OFL. All versions will be available on our web site: http://scripts.sil.org/OFL.
+
+5.2 Can I use the SIL Open Font License for my own fonts?
+Yes! We heartily encourage anyone to use the OFL to distribute their own original fonts. It is a carefully constructed license that allows great freedom along with enough artistic integrity protection for the work of the authors as well as clear rules for other contributors and those who redistribute the fonts. Some additional information about using the OFL is included at the end of this FAQ.
+
+5.3 Does this license restrict the rights of the Copyright Holder(s)?
+No. The Copyright Holder(s) still retain(s) all the rights to their creation; they are only releasing a portion of it for use in a specific way. For example, the Copyright Holder(s) may choose to release a 'basic' version of their font under the OFL, but sell a restricted 'enhanced' version. Only the Copyright Holder(s) can do this.
+
+5.4 Is the OFL a contract or a license?
+The OFL is a license and not a contract and so does not require you to sign it to have legal validity. By using, modifying and redistributing components under the OFL you indicate that you accept the license.
+
+5.5 How about translating the license and the FAQ into other languages?
+SIL certainly recognises the need for people who are not familiar with English to be able to understand the OFL and this FAQ better in their own language. Making the license very clear and readable is a key goal of the OFL.
+
+If you are an experienced translator, you are very welcome to help by translating the OFL and its FAQ so that designers and users in your language community can understand the license better. But only the original English version of the license has legal value and has been approved by the community. Translations do not count as legal substitutes and should only serve as a way to explain the original license. SIL - as the author and steward of the license for the community at large - does not approve any translation of the OFL as legally valid because even small translation ambiguities could be abused and create problems.
+
+We give permission to publish unofficial translations into other languages provided that they comply with the following guidelines:
+
+- put the following disclaimer in both English and the target language stating clearly that the translation is unofficial:
+
+"This is an unofficial translation of the SIL Open Font License into $language. It was not published by SIL International, and does not legally state the distribution terms for fonts that use the OFL. A release under the OFL is only valid when using the original English text.
+
+However, we recognize that this unofficial translation will help users and designers not familiar with English to understand the SIL OFL better and make it easier to use and release font families under this collaborative font design model. We encourage designers who consider releasing their creation under the OFL to read the FAQ in their own language if it is available.
+
+Please go to http://scripts.sil.org/OFL for the official version of the license and the accompanying FAQ."
+
+- keep your unofficial translation current and update it at our request if needed, for example if there is any ambiguity which could lead to confusion.
+
+If you start such a unofficial translation effort of the OFL and its accompanying FAQ please let us know, thank you.
+
+
+6 ABOUT SIL INTERNATIONAL
+
+6.1 Who is SIL International and what does it do?
+SIL International is a worldwide faith-based education and development organization (NGO) that studies, documents, and assists in developing the world's lesser-known languages through literacy, linguistics, translation, and other academic disciplines. SIL makes its services available to all without regard to religious belief, political ideology, gender, race, or ethnic background. SIL's members and volunteers share a Christian commitment.
+
+6.2 What does this have to do with font licensing?
+The ability to read, write, type and publish in one's own language is one of the most critical needs for millions of people around the world. This requires fonts that are widely available and support lesser-known languages. SIL develops - and encourages others to develop - a complete stack of writing systems implementation components available under open licenses. This open stack includes input methods, smart fonts, smart rendering libraries and smart applications. There has been a need for a common open license that is specifically applicable to fonts and related software (a crucial component of this stack) so SIL developed the SIL Open Font License with the help of the FLOSS community.
+
+6.3 How can I contact SIL?
+Our main web site is: http://www.sil.org/
+Our site about complex scripts is: http://scripts.sil.org/
+Information about this license (including contact email information) is at: http://scripts.sil.org/OFL
+
+
+7 ABOUT USING THE OFL FOR YOUR ORIGINAL FONTS
+
+If you want to release your fonts under the OFL, you only need to do the following:
+
+7.1 Put your copyright and reserved font names information in the beginning of the main OFL file (simply use the dedicated placeholders).
+7.2 Put your copyright and the OFL references in your various font files (such as in the copyright, license and description fields) and in your other components (build scripts, glyph databases, documentation, rendering samples, etc). Accurate metadata in your font files is beneficial to you as an increasing number of applications are exposing this information to the user. For example, clickable links can bring users back to your website and let them know about other work you have done or services you provide. Depending on the format of your fonts and sources, you can use template human-readable headers or machine-readable metadata.
+7.3 Write an initial FONTLOG for your font and include it in the release package.
+7.4 Include the OFL license file in your release package.
+7.5 We also highly recommend you include the relevant practical documentation on the license by putting the OFL-FAQ in your package.
+7.6 If you wish, you can use the OFL Graphics on your web page.
+
+That's all. If you have any more questions please get in touch with us.
+
+
diff --git a/fonts/Vollkorn/OpenFontLicense.txt b/fonts/Vollkorn/OpenFontLicense.txt
new file mode 100644
index 0000000..1662aac
--- /dev/null
+++ b/fonts/Vollkorn/OpenFontLicense.txt
@@ -0,0 +1,93 @@
+Copyright (c) 2010, Friedrich Althausen (http://friedrichalthausen.de). All rights reserved.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/fonts/Vollkorn/Vollkorn-Bold.ttf b/fonts/Vollkorn/Vollkorn-Bold.ttf
new file mode 100644
index 0000000..9d4730f
--- /dev/null
+++ b/fonts/Vollkorn/Vollkorn-Bold.ttf
Binary files differ
diff --git a/fonts/Vollkorn/Vollkorn-BoldItalic.ttf b/fonts/Vollkorn/Vollkorn-BoldItalic.ttf
new file mode 100644
index 0000000..f703559
--- /dev/null
+++ b/fonts/Vollkorn/Vollkorn-BoldItalic.ttf
Binary files differ
diff --git a/fonts/Vollkorn/Vollkorn-Italic.ttf b/fonts/Vollkorn/Vollkorn-Italic.ttf
new file mode 100644
index 0000000..d55c2ee
--- /dev/null
+++ b/fonts/Vollkorn/Vollkorn-Italic.ttf
Binary files differ
diff --git a/fonts/Vollkorn/Vollkorn-Regular.ttf b/fonts/Vollkorn/Vollkorn-Regular.ttf
new file mode 100644
index 0000000..a913a1b
--- /dev/null
+++ b/fonts/Vollkorn/Vollkorn-Regular.ttf
Binary files differ
diff --git a/fonts/convert.pe b/fonts/convert.pe
new file mode 100755
index 0000000..6fca738
--- /dev/null
+++ b/fonts/convert.pe
@@ -0,0 +1,3 @@
+#!fontforge
+Open($1)
+Generate($1:r + ".otf")
diff --git a/fonts/ubuntu-font-family-0.80/CONTRIBUTING.txt b/fonts/ubuntu-font-family-0.80/CONTRIBUTING.txt
new file mode 100644
index 0000000..15bdc0c
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/CONTRIBUTING.txt
@@ -0,0 +1,21 @@
+The Ubuntu Font Family is very long-term endeavour, and the first time
+that a professionally-designed font has been funded specifically with
+the intent of being an on-going community expanded project:
+
+ http://font.ubuntu.com/
+
+Development of the Ubuntu Font Family is undertaken on Launchpad:
+
+ http://launchpad.net/ubuntu-font-family/
+
+and this is where milestones, bug management and releases are handled.
+
+Contributions are welcomed. Your work will be used on millions of
+computers every single day! Following the initial bootstrapping of
+Latin, Cyrillic, Greek, Arabic and Hebrew expansion will be undertaken
+by font designers from the font design and Ubuntu communities.
+
+To ensure that the Ubuntu Font Family can be re-licensed to future
+widely-used libre font licences, copyright assignment is being required:
+
+ https://launchpad.net/~uff-contributors
diff --git a/fonts/ubuntu-font-family-0.80/FONTLOG.txt b/fonts/ubuntu-font-family-0.80/FONTLOG.txt
new file mode 100644
index 0000000..35beb4f
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/FONTLOG.txt
@@ -0,0 +1,274 @@
+This is the FONTLOG file for the Ubuntu Font Family and attempts to follow
+the recommendations at: http://scripts.sil.org/OFL-FAQ_web#43cecb44
+
+
+Overview
+
+The new Ubuntu Font Family was started to enable the personality of
+Ubuntu to be seen and felt in every menu, button and dialog.
+The typeface is sans-serif, uses OpenType features and is manually
+hinted for clarity on desktop and mobile computing screens.
+
+The scope of the Ubuntu Font Family includes all the languages used by
+the various Ubuntu users around the world in tune with Ubuntu's
+philosophy which states that every user should be able to use their
+software in the language of their choice. So the Ubuntu Font Family
+project will be extended to cover many more written languages.
+
+
+History
+
+The Ubuntu Font Family has been creating during 2010 and 2011. As of
+September 2011 coverage is provided for Latin, Cyrillic and Greek across
+Regular, Italic, Bold and Bold-Italic.
+
+
+ChangeLog
+
+2011-09-22 (Paul Sladen) Ubuntu Font Family version 0.80
+
+ [Vincent Connare/Dalton Maag]
+ * Wish for addition of a monospaced member to the family (LP: #640382)
+ * Mono: No hinting yet - Ubuntu Beta Mono font looks jagged in
+ Netbeans and terrible with ClearType (LP: #820493)
+ * Emacs: choosing normal monospace font in Emacs but gives bold-italic
+ (LP: #791076)
+ * PUA: ensure that Ubuntu Circle of Friends logo is full size: (LP: #853855)
+ + U+E0FF becomes large size in proportionals, remains small width in
+ monospaces
+ + U+F0FF becomes small size (proportionals only)
+ + U+F200 is full ubuntu logomark (proportionals only)
+
+ [Paul Sladen]
+ * Monospace: Patch Family Name to be "Ubuntu Mono"
+ * Monospace: Patch U+EFFD version debugging glyph to be '0.8'
+
+ [Cody Boisclair]
+ * Monospace: Force .null HDMX advance to 500
+ * Monospace: Remap ASCII box-drawing characters (LP: #788757)
+
+ [Júlio Reis]
+ * Date corrections to 'FONTLOG' (LP: #836595)
+
+2011-03-08 (Paul Sladen) Ubuntu Font Family version 0.71.2
+
+ * (Production) Adjust Medium WeightClass to 500 (Md, MdIt) (LP: #730912)
+
+2011-03-07 (Paul Sladen) Ubuntu Font Family version 0.71.1
+
+ * (Design) Add Capitalised version of glyphs and kern. (Lt, LtIt,
+ Md, MdIt) DM (LP: #677446)
+ * (Design) Re-space and tighen Regular and Italic by amount specified
+ by Mark Shuttleworth (minus 4 FUnits). (Rg, It) (LP: #677149)
+ * (Design) Design: Latin (U+0192) made straight more like l/c f with
+ tail (LP: #670768)
+ * (Design) (U+01B3) should have hook on right, as the lowercase
+ (U+01B4) (LP: #681026)
+ * (Design) Tail of Light Italic germandbls, longs and lowercase 'f'
+ to match Italic/BoldItalic (LP: #623925)
+ * (Production) Update <case> feature (Lt, LtIt, Md, MdIt). DM
+ (LP: #676538, #676539)
+ * (Production) Remove Bulgarian locl feature for Italics. (LP: #708578)
+ * (Production) Update Description information with new string:
+ "The Ubuntu Font Family are libre fonts funded by Canonical Ltd
+ on behalf of the Ubuntu project. The font design work and
+ technical implementation is being undertaken by Dalton Maag. The
+ typeface is sans-serif, uses OpenType features and is manually
+ hinted for clarity on desktop and mobile computing screens. The
+ scope of the Ubuntu Font Family includes all the languages used
+ by the various Ubuntu users around the world in tune with
+ Ubuntu's philosophy which states that every user should be able
+ to use their software in the language of their choice. The
+ project is ongoing, and we expect the family will be extended to
+ cover many written languages in the coming years."
+ (Rg, It, Bd, BdIt, Lt, LtIt, Md, MdIt) (LP: #690590)
+ * (Production) Pixel per em indicator added at U+F000 (Lt, LtIt, Md,
+ MdIt) (LP: #615787)
+ * (Production) Version number indicator added at U+EFFD (Lt, LtIt, Md,
+ MdIt) (LP: #640623)
+ * (Production) fstype bit set to 0 - Editable (Lt, LtIt, Md, MdIt)
+ (LP: #648406)
+ * (Production) Localisation of name table has been removed because
+ of problems with Mac OS/X interpretation of localisation. DM
+ (LP: #730785)
+ * (Hinting) Regular '?' dot non-circular (has incorrect control
+ value). (LP: #654336)
+ * (Hinting) Too much space after latin capital 'G' in 13pt
+ regular. Now reduced. (LP: #683437)
+ * (Hinting) Balance Indian Rupee at 18,19pt (LP: #662177)
+ * (Hinting) Make Regular '£' less ambiguous at 13-15 ppm (LP: #685562)
+ * (Hinting) Regular capital 'W' made symmetrical at 31 ppem (LP: #686168)
+
+2010-12-14 (Paul Sladen) Ubuntu Font Family version 0.70.1
+
+ Packaging, rebuilt from '2010-12-08 UbuntuFontsSourceFiles_070.zip':
+ * (Midstream) Fstype bit != 0 (LP: #648406)
+ * (Midstream) Add unit test to validate fstype bits (LP: #648406)
+ * (Midstream) Add unit test to validate licence
+
+2010-12-14 (Paul Sladen) Ubuntu Font Family version 0.70
+
+ Release notes 0.70:
+ * (Design) Add Capitalised version of glyphs and kern. (Rg, It, Bd,
+ BdIt) DM (LP: #676538, #677446)
+ * (Design) Give acute and grave a slight upright move to more match
+ the Hungarian double acute angle. (Rg, It, Bd, BdIt) (LP: #656647)
+ * (Design) Shift Bold Italic accent glyphs to be consistent with the
+ Italic. (BdIt only) DM (LP: #677449)
+ * (Design) Check spacing and kerning of dcaron, lcaron and
+ tcaron. (Rg, It, Bd, BdIt) (LP: #664722)
+ * (Design) Add positive kerning to () {} [] to open out the
+ combinations so they are less like a closed box. (Rg, It, Bd,
+ BdIt) (LP: #671228)
+ * (Design) Change design of acute.asc and check highest points (Bd
+ and BdIt only) DM
+ * (Production) Update <case> feature. DM (LP: #676538, #676539)
+ * (Production) Remove Romanian locl feature. (Rg, It, Bd, BdIt)
+ (LP: #635615)
+ * (Production) Update Copyright information with new
+ strings. "Copyright 2010 Canonical Ltd. Licensed under the Ubuntu
+ Font Licence 1.0" Trademark string "Ubuntu and Canonical are
+ registered trademarks of Canonical Ltd." (Rg, It, Bd, BdIt) DM
+ (LP: #677450)
+ * (Design) Check aligning of hyphen, math signs em, en, check braces
+ and other brackets. 16/11 (LP: #676465)
+ * (Production) Pixel per em indicator added at U+F000 (Rg, It, Bd,
+ BdIt) (LP: #615787)
+ * (Production) Version number indicator added at U+EFFD (Rg, It, Bd,
+ BdIt) (LP: #640623)
+ * (Production) fstype bit set to 0 - Editable (Rg, It, Bd, BdIt)
+ (LP: #648406)
+
+2010-10-05 (Paul Sladen) Ubuntu Font Family version 0.69
+
+ [Dalton Maag]
+ * Italic,
+ - Hinting on lowercase Italic l amended 19ppm (LP: #632451)
+ - Hinting on lowercase Italic u amended 12ppm (LP: #626376)
+
+ * Regular, Italic, Bold, BoldItalic
+ - New Rupee Sign added @ U+20B9 (LP: #645987)
+ - Ubuntu Roundel added @ U+E0FF (LP: #651606)
+
+ [Paul Sladen]
+ * All
+ - Removed "!ubu" GSUB.calt ligature for U+E0FF (LP: #651606)
+
+
+Acknowledgements
+
+If you make modifications be sure to add your name (N), email (E),
+web-address (if you have one) (W) and description (D). This list is in
+alphabetical order.
+
+N: Ryan Abdullah
+W: http://www.rayan.de/
+D: Arabic calligraphy and design in collaboration with Dalton Maag
+D: Arabic testing
+
+N: Cody Boisclair
+D: Monospace low-level debugging and patching ('fixboxdrawing-ft.py')
+
+N: Amélie Bonet
+W: http://ameliebonet.com/
+D: Type design with Dalton Maag, particularly Ubuntu Mono and Ubuntu Condensed
+
+N: Jason Campbell
+W: http://www.campbellgraphics.com/design/fonts.shtml
+D: Monospace hinting (first phase) at Dalton Maag
+
+N: Pilar Cano
+W: http://www.pilarcano.com/
+D: Hebrew realisation with Dalton Maag
+
+N: Fernando Caro
+D: Type design with Dalton Maag, particularly Ubuntu Condensed
+
+N: Ron Carpenter
+W: http://www.daltonmaag.com/
+D: Type design with Dalton Maag
+D: Arabic realisation in collaboration with Ryan Abdullah
+
+N: Vincent Connare
+W: http://www.connare.com/
+D: Type design, and engineering with Dalton Maag
+D: Monospace hinting (second phase) at Dalton Maag
+
+N: Dave Crossland
+E: dave@understandingfonts.com
+W: http://understandingfonts.com/
+D: Documentation and libre licensing guidance
+D: Google Webfont integration at Google
+
+N: Steve Edwards
+W: http://www.madebymake.com/
+D: font.ubuntu.com revamp implementation with Canonical Web Team
+
+N: Iain Farrell
+W: http://www.flickr.com/photos/iain
+D: Ubuntu Font Family delivery for the Ubuntu UX team at Canonical
+
+N: Shiraaz Gabru
+W: http://www.daltonmaag.com/
+D: Ubuntu Font Family project management at Dalton Maag
+
+N: Marcus Haslam
+W: http://design.canonical.com/author/marcus-haslam/
+D: Creative inspiration
+
+N: Ben Laenen
+D: Inspiration behind the pixels-per-em (PPEM) readout debugging glyph at U+F000
+ (for this font the concept was re-implemented from scratch by Dalton-Maag)
+
+N: Bruno Maag
+W: http://www.daltonmaag.com/
+D: Stylistic direction of the Ubuntu Font Family, as head of Dalton Maag
+
+N: Ivanka Majic
+W: http://www.ivankamajic.com/
+D: Guiding the UX team and Cyrillic feedback
+
+N: David Marshall
+W: http://www.daltonmaag.com/
+D: Technical guidance and administration at Dalton Maag
+
+N: Malcolm Wooden
+W: http://www.daltonmaag.com/
+D: Font Engineering at Dalton Maag
+
+N: Lukas Paltram
+W: http://www.daltonmaag.com/
+D: Type design with Dalton Maag
+
+N: Júlio Reis
+D: Date fixes to the documentation
+
+N: Rodrigo Rivas
+D: Indian Rupee Sign glyph
+
+N: Mark Shuttleworth
+E: mark@ubuntu.com
+W: http://www.markshuttleworth.com/
+D: Executive quality-control and funding
+
+N: Paul Sladen
+E: ubuntu@paul.sladen.org
+W: http://www.paul.sladen.org/
+D: Bug triaging, packaging at Ubuntu and Canonical
+
+N: Nicolas Spalinger
+W: http://planet.open-fonts.org
+D: Continuous guidance on libre/open font licensing, best practises in source
+ tree layout, release and packaging (pkg-fonts Debian team)
+
+N: Kenneth Wimer
+D: Initial PPA packaging
+
+* Canonical Ltd is the primary commercial sponsor of the Ubuntu and
+ Kubuntu operating systems
+* Dalton Maag are a custom type foundry headed by Bruno Maag
+
+For further documentation, information on contributors, source code
+downloads and those involved with the Ubuntu Font Family, visit:
+
+ http://font.ubuntu.com/
diff --git a/fonts/ubuntu-font-family-0.80/LICENCE-FAQ.txt b/fonts/ubuntu-font-family-0.80/LICENCE-FAQ.txt
new file mode 100644
index 0000000..776a25e
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/LICENCE-FAQ.txt
@@ -0,0 +1,177 @@
+ Ubuntu Font Family Licensing FAQ
+
+ Stylistic Foundations
+
+ The Ubuntu Font Family is the first time that a libre typeface has been
+ designed professionally and explicitly with the intent of developing a
+ public and long-term community-based development process.
+
+ When developing an open project, it is generally necessary to have firm
+ foundations: a font needs to maintain harmony within itself even across
+ many type designers and writing systems. For the [1]Ubuntu Font Family,
+ the process has been guided with the type foundry Dalton Maag setting
+ the project up with firm stylistic foundation covering several
+ left-to-right scripts: Latin, Greek and Cyrillic; and right-to-left
+ scripts: Arabic and Hebrew (due in 2011).
+
+ With this starting point the community will, under the supervision of
+ [2]Canonical and [3]Dalton Maag, be able to build on the existing font
+ sources to expand their character coverage. Ultimately everybody will
+ be able to use the Ubuntu Font Family in their own written languages
+ across the whole of Unicode (and this will take some time!).
+
+ Licensing
+
+ The licence chosen by any free software project is one of the
+ foundational decisions that sets out how derivatives and contributions
+ can occur, and in turn what kind of community will form around the
+ project.
+
+ Using a licence that is compatible with other popular licences is a
+ powerful constraint because of the [4]network effects: the freedom to
+ share improvements between projects allows free software to reach
+ high-quality over time. Licence-proliferation leads to many
+ incompatible licences, undermining the network effect, the freedom to
+ share and ultimately making the libre movement that Ubuntu is a part of
+ less effective. For all kinds of software, writing a new licence is not
+ to be taken lightly and is a choice that needs to be thoroughly
+ justified if this path is taken.
+
+ Today it is not clear to Canonical what the best licence for a font
+ project like the Ubuntu Font Family is: one that starts life designed
+ by professionals and continues with the full range of community
+ development, from highly commercial work in new directions to curious
+ beginners' experimental contributions. The fast and steady pace of the
+ Ubuntu release cycle means that an interim libre licence has been
+ necessary to enable the consideration of the font family as part of
+ Ubuntu 10.10 operating system release.
+
+ Before taking any decision on licensing, Canonical as sponsor and
+ backer of the project has reviewed the many existing licenses used for
+ libre/open fonts and engaged the stewards of the most popular licenses
+ in detailed discussions. The current interim licence is the first step
+ in progressing the state-of-the-art in licensing for libre/open font
+ development.
+
+ The public discussion must now involve everyone in the (comparatively
+ new) area of the libre/open font community; including font users,
+ software freedom advocates, open source supporters and existing libre
+ font developers. Most importantly, the minds and wishes of professional
+ type designers considering entering the free software business
+ community must be taken on board.
+
+ Conversations and discussion has taken place, privately, with
+ individuals from the following groups (generally speaking personally on
+ behalf of themselves, rather than their affiliations):
+ * [5]SIL International
+ * [6]Open Font Library
+ * [7]Software Freedom Law Center
+ * [8]Google Font API
+
+ Document embedding
+
+ One issue highlighted early on in the survey of existing font licences
+ is that of document embedding. Almost all font licences, both free and
+ unfree, permit embedding a font into a document to a certain degree.
+ Embedding a font with other works that make up a document creates a
+ "combined work" and copyleft would normally require the whole document
+ to be distributed under the terms of the font licence. As beautiful as
+ the font might be, such a licence makes a font too restrictive for
+ useful general purpose digital publishing.
+
+ The situation is not entirely unique to fonts and is encountered also
+ with tools such as GNU Bison: a vanilla GNU GPL licence would require
+ anything generated with Bison to be made available under the terms of
+ the GPL as well. To avoid this, Bison is [9]published with an
+ additional permission to the GPL which allows the output of Bison to be
+ made available under any licence.
+
+ The conflict between licensing of fonts and licensing of documents, is
+ addressed in two popular libre font licences, the SIL OFL and GNU GPL:
+ * [10]SIL Open Font Licence: When OFL fonts are embedded in a
+ document, the OFL's terms do not apply to that document. (See
+ [11]OFL-FAQ for details.
+ * [12]GPL Font Exception: The situation is resolved by granting an
+ additional permission to allow documents to not be covered by the
+ GPL. (The exception is being reviewed).
+
+ The Ubuntu Font Family must also resolve this conflict, ensuring that
+ if the font is embedded and then extracted it is once again clearly
+ under the terms of its libre licence.
+
+ Long-term licensing
+
+ Those individuals involved, especially from Ubuntu and Canonical, are
+ interested in finding a long-term libre licence that finds broad favour
+ across the whole libre/open font community. The deliberation during the
+ past months has been on how to licence the Ubuntu Font Family in the
+ short-term, while knowingly encouraging everyone to pursue a long-term
+ goal.
+ * [13]Copyright assignment will be required so that the Ubuntu Font
+ Family's licensing can be progressively expanded to one (or more)
+ licences, as best practice continues to evolve within the
+ libre/open font community.
+ * Canonical will support and fund legal work on libre font licensing.
+ It is recognised that the cost and time commitments required are
+ likely to be significant. We invite other capable parties to join
+ in supporting this activity.
+
+ The GPL version 3 (GPLv3) will be used for Ubuntu Font Family build
+ scripts and the CC-BY-SA for associated documentation and non-font
+ content: all items which do not end up embedded in general works and
+ documents.
+
+Ubuntu Font Licence
+
+ For the short-term only, the initial licence is the [14]Ubuntu Font
+ License (UFL). This is loosely inspired from the work on the SIL
+ OFL 1.1, and seeks to clarify the issues that arose during discussions
+ and legal review, from the perspective of the backers, Canonical Ltd.
+ Those already using established licensing models such as the GPL, OFL
+ or Creative Commons licensing should have no worries about continuing
+ to use them. The Ubuntu Font Licence (UFL) and the SIL Open Font
+ Licence (SIL OFL) are not identical and should not be confused with
+ each other. Please read the terms precisely. The UFL is only intended
+ as an interim license, and the overriding aim is to support the
+ creation of a more suitable and generic libre font licence. As soon as
+ such a licence is developed, the Ubuntu Font Family will migrate to
+ it—made possible by copyright assignment in the interium. Between the
+ OFL 1.1, and the UFL 1.0, the following changes are made to produce the
+ Ubuntu Font Licence:
+ * Clarification:
+
+ 1. Document embedding (see [15]embedding section above).
+ 2. Apply at point of distribution, instead of receipt
+ 3. Author vs. copyright holder disambiguation (type designers are
+ authors, with the copyright holder normally being the funder)
+ 4. Define "Propagate" (for internationalisation, similar to the GPLv3)
+ 5. Define "Substantially Changed"
+ 6. Trademarks are explicitly not transferred
+ 7. Refine renaming requirement
+
+ Streamlining:
+ 8. Remove "not to be sold separately" clause
+ 9. Remove "Reserved Font Name(s)" declaration
+
+ A visual demonstration of how these points were implemented can be
+ found in the accompanying coloured diff between SIL OFL 1.1 and the
+ Ubuntu Font Licence 1.0: [16]ofl-1.1-ufl-1.0.diff.html
+
+References
+
+ 1. http://font.ubuntu.com/
+ 2. http://www.canonical.com/
+ 3. http://www.daltonmaag.com/
+ 4. http://en.wikipedia.org/wiki/Network_effect
+ 5. http://scripts.sil.org/
+ 6. http://openfontlibrary.org/
+ 7. http://www.softwarefreedom.org/
+ 8. http://code.google.com/webfonts
+ 9. http://www.gnu.org/licenses/gpl-faq.html#CanIUseGPLToolsForNF
+ 10. http://scripts.sil.org/OFL_web
+ 11. http://scripts.sil.org/OFL-FAQ_web
+ 12. http://www.gnu.org/licenses/gpl-faq.html#FontException
+ 13. https://launchpad.net/~uff-contributors
+ 14. http://font.ubuntu.com/ufl/ubuntu-font-licence-1.0.txt
+ 15. http://font.ubuntu.com/ufl/FAQ.html#embedding
+ 16. http://font.ubuntu.com/ufl/ofl-1.1-ufl-1.0.diff.html
diff --git a/fonts/ubuntu-font-family-0.80/LICENCE.txt b/fonts/ubuntu-font-family-0.80/LICENCE.txt
new file mode 100644
index 0000000..ae78a8f
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/LICENCE.txt
@@ -0,0 +1,96 @@
+-------------------------------
+UBUNTU FONT LICENCE Version 1.0
+-------------------------------
+
+PREAMBLE
+This licence allows the licensed fonts to be used, studied, modified and
+redistributed freely. The fonts, including any derivative works, can be
+bundled, embedded, and redistributed provided the terms of this licence
+are met. The fonts and derivatives, however, cannot be released under
+any other licence. The requirement for fonts to remain under this
+licence does not require any document created using the fonts or their
+derivatives to be published under this licence, as long as the primary
+purpose of the document is not to be a vehicle for the distribution of
+the fonts.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this licence and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Original Version" refers to the collection of Font Software components
+as received under this licence.
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to
+a new environment.
+
+"Copyright Holder(s)" refers to all individuals and companies who have a
+copyright ownership of the Font Software.
+
+"Substantially Changed" refers to Modified Versions which can be easily
+identified as dissimilar to the Font Software by users of the Font
+Software comparing the Original Version with the Modified Version.
+
+To "Propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification and with or without charging
+a redistribution fee), making available to the public, and in some
+countries other activities as well.
+
+PERMISSION & CONDITIONS
+This licence does not grant any rights under trademark law and all such
+rights are reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of the Font Software, to propagate the Font Software, subject to
+the below conditions:
+
+1) Each copy of the Font Software must contain the above copyright
+notice and this licence. These can be included either as stand-alone
+text files, human-readable headers or in the appropriate machine-
+readable metadata fields within text or binary files as long as those
+fields can be easily viewed by the user.
+
+2) The font name complies with the following:
+(a) The Original Version must retain its name, unmodified.
+(b) Modified Versions which are Substantially Changed must be renamed to
+avoid use of the name of the Original Version or similar names entirely.
+(c) Modified Versions which are not Substantially Changed must be
+renamed to both (i) retain the name of the Original Version and (ii) add
+additional naming elements to distinguish the Modified Version from the
+Original Version. The name of such Modified Versions must be the name of
+the Original Version, with "derivative X" where X represents the name of
+the new work, appended to that name.
+
+3) The name(s) of the Copyright Holder(s) and any contributor to the
+Font Software shall not be used to promote, endorse or advertise any
+Modified Version, except (i) as required by this licence, (ii) to
+acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with
+their explicit written permission.
+
+4) The Font Software, modified or unmodified, in part or in whole, must
+be distributed entirely under this licence, and must not be distributed
+under any other licence. The requirement for fonts to remain under this
+licence does not affect any document created using the Font Software,
+except any version of the Font Software extracted from a document
+created using the Font Software may only be distributed under this
+licence.
+
+TERMINATION
+This licence becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
+COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER
+DEALINGS IN THE FONT SOFTWARE.
diff --git a/fonts/ubuntu-font-family-0.80/README.txt b/fonts/ubuntu-font-family-0.80/README.txt
new file mode 100644
index 0000000..292d4ad
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/README.txt
@@ -0,0 +1,15 @@
+ ----------------------
+ Ubuntu Font Family
+ ======================
+
+The Ubuntu Font Family are a set of matching new libre/open fonts in
+development during 2010--2011. The development is being funded by
+Canonical Ltd on behalf the wider Free Software community and the
+Ubuntu project. The technical font design work and implementation is
+being undertaken by Dalton Maag.
+
+Both the final font Truetype/OpenType files and the design files used
+to produce the font family are distributed under an open licence and
+you are expressly encouraged to experiment, modify, share and improve.
+
+ http://font.ubuntu.com/
diff --git a/fonts/ubuntu-font-family-0.80/TRADEMARKS.txt b/fonts/ubuntu-font-family-0.80/TRADEMARKS.txt
new file mode 100644
index 0000000..d34265b
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/TRADEMARKS.txt
@@ -0,0 +1,4 @@
+Ubuntu and Canonical are registered trademarks of Canonical Ltd.
+
+The licence accompanying these works does not grant any rights
+under trademark law and all such rights are reserved.
diff --git a/fonts/ubuntu-font-family-0.80/Ubuntu-B.ttf b/fonts/ubuntu-font-family-0.80/Ubuntu-B.ttf
new file mode 100644
index 0000000..c0142fe
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/Ubuntu-B.ttf
Binary files differ
diff --git a/fonts/ubuntu-font-family-0.80/Ubuntu-BI.ttf b/fonts/ubuntu-font-family-0.80/Ubuntu-BI.ttf
new file mode 100644
index 0000000..12e4c7d
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/Ubuntu-BI.ttf
Binary files differ
diff --git a/fonts/ubuntu-font-family-0.80/Ubuntu-C.ttf b/fonts/ubuntu-font-family-0.80/Ubuntu-C.ttf
new file mode 100644
index 0000000..8d3e867
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/Ubuntu-C.ttf
Binary files differ
diff --git a/fonts/ubuntu-font-family-0.80/Ubuntu-L.ttf b/fonts/ubuntu-font-family-0.80/Ubuntu-L.ttf
new file mode 100644
index 0000000..7b7ac7d
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/Ubuntu-L.ttf
Binary files differ
diff --git a/fonts/ubuntu-font-family-0.80/Ubuntu-LI.ttf b/fonts/ubuntu-font-family-0.80/Ubuntu-LI.ttf
new file mode 100644
index 0000000..e36de45
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/Ubuntu-LI.ttf
Binary files differ
diff --git a/fonts/ubuntu-font-family-0.80/Ubuntu-M.ttf b/fonts/ubuntu-font-family-0.80/Ubuntu-M.ttf
new file mode 100644
index 0000000..443ec8b
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/Ubuntu-M.ttf
Binary files differ
diff --git a/fonts/ubuntu-font-family-0.80/Ubuntu-MI.ttf b/fonts/ubuntu-font-family-0.80/Ubuntu-MI.ttf
new file mode 100644
index 0000000..321eccf
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/Ubuntu-MI.ttf
Binary files differ
diff --git a/fonts/ubuntu-font-family-0.80/Ubuntu-R.ttf b/fonts/ubuntu-font-family-0.80/Ubuntu-R.ttf
new file mode 100644
index 0000000..45a038b
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/Ubuntu-R.ttf
Binary files differ
diff --git a/fonts/ubuntu-font-family-0.80/Ubuntu-RI.ttf b/fonts/ubuntu-font-family-0.80/Ubuntu-RI.ttf
new file mode 100644
index 0000000..6f819f6
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/Ubuntu-RI.ttf
Binary files differ
diff --git a/fonts/ubuntu-font-family-0.80/UbuntuMono-B.ttf b/fonts/ubuntu-font-family-0.80/UbuntuMono-B.ttf
new file mode 100644
index 0000000..7bd6665
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/UbuntuMono-B.ttf
Binary files differ
diff --git a/fonts/ubuntu-font-family-0.80/UbuntuMono-BI.ttf b/fonts/ubuntu-font-family-0.80/UbuntuMono-BI.ttf
new file mode 100644
index 0000000..6c5b8ba
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/UbuntuMono-BI.ttf
Binary files differ
diff --git a/fonts/ubuntu-font-family-0.80/UbuntuMono-R.ttf b/fonts/ubuntu-font-family-0.80/UbuntuMono-R.ttf
new file mode 100644
index 0000000..fdd309d
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/UbuntuMono-R.ttf
Binary files differ
diff --git a/fonts/ubuntu-font-family-0.80/UbuntuMono-RI.ttf b/fonts/ubuntu-font-family-0.80/UbuntuMono-RI.ttf
new file mode 100644
index 0000000..18f81a2
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/UbuntuMono-RI.ttf
Binary files differ
diff --git a/fonts/ubuntu-font-family-0.80/copyright.txt b/fonts/ubuntu-font-family-0.80/copyright.txt
new file mode 100644
index 0000000..7734070
--- /dev/null
+++ b/fonts/ubuntu-font-family-0.80/copyright.txt
@@ -0,0 +1,5 @@
+Copyright 2010,2011 Canonical Ltd.
+
+This Font Software is licensed under the Ubuntu Font Licence, Version
+1.0. https://launchpad.net/ubuntu-font-licence
+
diff --git a/packages-debian b/packages-debian
new file mode 100644
index 0000000..8419adf
--- /dev/null
+++ b/packages-debian
@@ -0,0 +1,227 @@
+aldo
+angband
+anki
+antiword
+aoeui
+arandr
+asciidoctor
+aspell-en
+aspell-fr
+aspell-ru
+at
+audacity
+aufs-tools
+baresip-x11
+barrier
+beets
+biber
+bibtool
+bind9-dnsutils
+borgbackup
+bsd-mailx
+bsdgames
+bsdmainutils
+btop
+build-essential
+catgirl
+colordiff
+console-setup
+cups
+cups-bsd
+curl
+cwm
+dc
+debian-security-support
+devscripts
+dh-golang
+dh-make
+dh-make-golang
+dict
+dict-gcide
+dict-vera
+dict-wn
+dictd
+digikam
+dlocate
+doas
+docx2txt
+dosbox
+dovecot-core
+dovecot-imapd
+dovecot-sieve
+drawterm-9front
+dspdfviewer
+dwdiff
+dzen2
+ed
+eject
+elpa-pdf-tools
+emacs
+emacs-el
+emacs-lucid
+equivs
+etckeeper
+evince
+ffmpeg
+file
+finger
+firefox
+fontforge
+fonts-powerline
+fonts-spleen
+fonts-symbola
+freedoom
+frescobaldi
+gimp
+git
+git-buildpackage
+gnupg
+golang
+gv
+htop
+hugo
+ibritish-insane
+ifrench
+imagemagick
+info
+inkscape
+iputils-ping
+jmtpfs
+keychain
+krb5-user
+ksh
+latexdiff
+latexmk
+lbdb
+ldnsutils
+less
+libnss-resolve
+lilypond
+links2
+lintex
+lynx
+mailcap
+manpages
+mllex-polyml
+mlyacc-polyml
+mosh
+mpc
+mpd
+mpdscribble
+mplayer
+mpv
+mtr
+mupdf
+mupdf-tools
+muttprint
+myspell-fr
+ncat
+ncmpcpp
+neomutt
+netcat-traditional
+nmap
+ocaml
+opam
+openafs-client
+openafs-krb5
+opendoas
+openiked
+openntpd
+opensmtpd
+opensmtpd-extras
+openssh-client
+pavucontrol
+pdftk
+pinentry-curses
+piuparts
+plocate
+pm-utils
+pmount
+polyml
+popularity-contest
+power-profiles-daemon
+printer-driver-cups-pdf
+pulseaudio
+pulseaudio-module-bluetooth
+quilt
+qutebrowser
+recoll
+recollcmd
+redshift
+reportbug
+rfkill
+rlwrap
+rsync
+rxvt-unicode
+s-nail
+sanoid
+sbuild
+sbuild-debian-developer-setup
+scrot
+sieve-connect
+signal-desktop
+signify-openbsd
+signify-openbsd-keys
+signing-party
+sleepd
+smartmontools
+socat
+sshfs
+subversion
+suckless-tools
+sudo
+task-english
+task-laptop
+task-ssh-server
+telegram-desktop
+tex-gyre
+texlive
+texlive-bibtex-extra
+texlive-extra-utils
+texlive-fonts-extra
+texlive-fonts-extra-doc
+texlive-lang-cyrillic
+texlive-lang-french
+texlive-latex-base-doc
+texlive-latex-extra
+texlive-latex-extra-doc
+texlive-latex-recommended-doc
+texlive-publishers
+texlive-science
+texlive-science-doc
+texlive-xetex
+tikzit
+tmpreaper
+tmux
+tor
+torbrowser-launcher
+traceroute
+trayer
+unzip
+urlscan
+urlview
+usbutils
+vera
+vf1
+vim
+w3m-img
+wamerican
+wbritish-huge
+wdiff
+wfrench
+wget
+whipper
+whois
+xbacklight
+xdm
+xinit
+xinput
+xmonad
+xsel
+xserver-xorg
+xterm
+youtube-dl
+zathura
+zfs-dkms
+zfsutils-linux
+zsh
diff --git a/packages-openbsd b/packages-openbsd
new file mode 100644
index 0000000..61f95d7
--- /dev/null
+++ b/packages-openbsd
@@ -0,0 +1,104 @@
+arandr--
+aspell-fr--
+autoconf--%2.69
+automake--%1.15
+borgbackup--%1.2
+borgmatic--
+cabal-install--
+catgirl--
+chezmoi--
+cmake--
+cmixer--
+colordiff--
+compton--
+curl--
+dictd-client--
+dictd-server--
+dzen2--xft
+emacs--gtk3%emacs
+firefox--
+git--
+gmake--
+gnupg--
+heimdal-libs--
+htop--
+hugo--extended
+inconsolata-font--
+keychain--
+latexmk--
+lbdb--
+libgit2--
+mplayer--
+mtr--
+multitail--
+mupdf--
+muttprint--
+ncmpcpp--
+ncspot--
+neomutt--gpgme
+nmap--
+p5-Class-Accessor--
+p5-Config-AutoConf--
+p5-Data-Compare--
+p5-Data-Dump--
+p5-Data-Uniqid--
+p5-DateTime-Format-Builder--
+p5-Encode-HanExtra--
+p5-Encode-Locale--
+p5-ExtUtils-Config--
+p5-ExtUtils-LibBuilder--
+p5-File-Slurper--
+p5-File-Which--
+p5-IO-String--
+p5-IPC-Run3--
+p5-LWP-Protocol-https--
+p5-List-AllUtils--
+p5-List-MoreUtils--
+p5-List-MoreUtils-XS--
+p5-Log-Log4perl--
+p5-Module-Build--
+p5-PAR--
+p5-Parse-RecDescent--
+p5-PerlIO-utf8_strict--
+p5-Regexp-Common--
+p5-Sort-Key--
+p5-Test-Differences--
+p5-Text-BibTeX--
+p5-Text-CSV--
+p5-Text-CSV_XS--
+p5-URI--
+p5-XML-LibXSLT--
+p5-XML-Writer--
+pdftk--
+pkglocatedb--
+python--%3.9
+quirks--
+recoll--
+redshift--
+rsync--
+rxvt-unicode--
+s-nail--
+scrot--
+sieve-connect--
+spleen--
+sysclean--
+texlive_base--
+texlive_mktexlsr--
+texlive_synctex--
+texlive_texmf-buildset--
+texlive_texmf-full--
+texlive_texmf-minimal--
+urlscan--
+vim--no_x11
+vimb--
+w3m--image
+wdiff--
+wget--
+wpa_supplicant--
+xmonad--
+xsel--
+zathura--
+zathura-djvu--
+zathura-pdf-mupdf--
+zathura-ps--
+zsh--
diff --git a/private_dot_cups/lpoptions b/private_dot_cups/lpoptions
new file mode 100644
index 0000000..c10698e
--- /dev/null
+++ b/private_dot_cups/lpoptions
@@ -0,0 +1 @@
+Default M203 Duplex=DuplexNoTumble
diff --git a/private_dot_gnupg/gpg-agent.conf.tmpl b/private_dot_gnupg/gpg-agent.conf.tmpl
new file mode 100644
index 0000000..b3f2b8e
--- /dev/null
+++ b/private_dot_gnupg/gpg-agent.conf.tmpl
@@ -0,0 +1 @@
+pinentry-program {{ .pinentry }}
diff --git a/private_dot_gnupg/gpg.conf b/private_dot_gnupg/gpg.conf
new file mode 100644
index 0000000..04498ed
--- /dev/null
+++ b/private_dot_gnupg/gpg.conf
@@ -0,0 +1,7 @@
+keyserver hkp://keys.gnupg.net
+use-agent
+default-key 8F7BF8FC4A11C97A
+personal-digest-preferences SHA512
+cert-digest-algo SHA512
+default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB ZIP Uncompressed
+hidden-encrypt-to 8F7BF8FC4A11C97A
diff --git a/private_dot_netrc.tmpl b/private_dot_netrc.tmpl
new file mode 100644
index 0000000..4bb02f9
--- /dev/null
+++ b/private_dot_netrc.tmpl
@@ -0,0 +1,12 @@
+{{- if .password.cmu }}
+machine imap.gmail.com login rkavanag@alumni.cmu.edu password {{ .password.cmu }}
+{{- end }}
+{{- if .password.gmail }}
+machine imap.gmail.com login ryanakca@gmail.com password {{ .password.gmail }}
+{{- end }}
+{{- if .password.rakac }}
+machine imap.rak.ac login rak password {{ .password.rakac }}
+{{- end }}
+{{- if .password.socs }}
+machine mail.cs.mcgill.ca login ryank password {{ .password.socs }}
+{{- end }}
diff --git a/private_dot_recoll/recoll.conf b/private_dot_recoll/recoll.conf
new file mode 100644
index 0000000..e2f2712
--- /dev/null
+++ b/private_dot_recoll/recoll.conf
@@ -0,0 +1,10 @@
+# The system-wide configuration files for recoll are located in:
+# /usr/share/recoll/examples
+# The default configuration files are commented, you should take a look
+# at them for an explanation of what can be set (you could also take a look
+# at the manual instead).
+# Values set in this file will override the system-wide values for the file
+# with the same name in the central directory. The syntax for setting
+# values is identical.
+
+topdirs = /home/rak/Documents
diff --git a/private_dot_ssh/authorized_keys.tmpl b/private_dot_ssh/authorized_keys.tmpl
new file mode 100644
index 0000000..7cd959c
--- /dev/null
+++ b/private_dot_ssh/authorized_keys.tmpl
@@ -0,0 +1,4 @@
+cert-authority ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOgOV5atVQfbpFQ2R1wkUPy2yoCxzloVMTwUU6j7R4v3 rak
+{{ if eq .chezmoi.fqdnHostname "beastie.sdf.org" -}}
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII9QEmJagqiGPOFkQTXPcgaOcaCU5OpLMFy2q/YlZ2WJ JuiceSSH
+{{- end }}
diff --git a/private_dot_ssh/cm_socket/.keep b/private_dot_ssh/cm_socket/.keep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/private_dot_ssh/cm_socket/.keep
diff --git a/private_dot_ssh/config.tmpl b/private_dot_ssh/config.tmpl
new file mode 100644
index 0000000..0f5890d
--- /dev/null
+++ b/private_dot_ssh/config.tmpl
@@ -0,0 +1,123 @@
+HashKnownHosts no
+VisualHostKey yes
+CheckHostIP yes
+NoHostAuthenticationForLocalhost yes
+
+## Debian hosts
+Host master
+ Hostname %h.debian.org
+Host *.debian.org master !*.ssh.debian.org !ssh.debian.org
+ ProxyJump ssh.debian.org
+Match final host="*.debian.org"
+ UserKnownHostsFile ~/.ssh/known_hosts.d/debian
+
+## QueensU hosts
+Host pinky brain
+ HostName %h.cs.queensu.ca
+Host linux1 hera zeus
+ HostName %h.caslab.queensu.ca
+Host *.caslab.queensu.ca w310 ubuntu athena linux1 hera zeus
+ User ryankca
+Host *.cs.queensu.ca ciscwww pinky brain
+ User ryan
+Host *.queensu.ca w310 ubuntu athena linux1 hera zeus ciscwww pinky brain
+ StrictHostKeyChecking yes
+ UserKnownHostsFile ~/.ssh/known_hosts.d/queensu.ca
+
+## McGill hosts
+Host *.cs.mcgill.ca
+ User ryank
+ StrictHostKeyChecking yes
+ UserKnownHostsFile ~/.ssh/known_hosts.d/cs.mcgill.ca
+
+## Ubuntu hosts
+Host puc people.ubuntu.com
+ Hostname people.ubuntu.com
+ User ryanakca
+
+## rak.ac hosts
+Host hades eos
+ HostName %h.rak.ac
+Host zeta demeter asteria
+ Hostname %h.home.arpa
+Host hades hades.rak.ac hades.home.arpa
+ CertificateFile ~/.ssh/keys/%L/certs/hades.rak.ac.pub
+Host eos eos.rak.ac eos.home.arpa
+ CertificateFile ~/.ssh/keys/%L/certs/eos.rak.ac.pub
+Match final host="zeta.home.arpa,demeter.home.arpa,asteria.home.arpa"
+ CertificateFile ~/.ssh/keys/%L/certs/rak.pub
+Match final host="*.rak.ac,*.ryanak.ca,*.home.arpa"
+ UpdateHostKeys no
+ UserKnownHostsFile ~/.ssh/known_hosts.d/rak.ac
+ StrictHostKeyChecking yes
+
+## CMU hosts
+Host news-cclub
+ Hostname whelk.club.cc.cmu.edu
+ Compression yes
+ ControlMaster auto
+ ControlPath ~/.ssh/cm_socket/%r@%h:%p
+ ControlPersist 3600
+ PreferredAuthentications publickey
+Host cclub
+ Hostname unix.club.cc.cmu.edu
+Host whelk oyster clam
+ Hostname %h.club.cc.cmu.edu
+Match final host="*.club.cc.cmu.edu"
+ {{- if (ne .chezmoi.os "openbsd") }}
+ GSSAPIAuthentication yes
+ GSSAPIDelegateCredentials yes
+ GSSAPITrustDNS yes
+ {{- end }}
+ UserKnownHostsFile ~/.ssh/known_hosts.d/club.cc.cmu.edu
+Match final host="*.andrew.cmu.edu,*.cs.cmu.edu"
+ {{- if (ne .chezmoi.os "openbsd") }}
+ GSSAPIAuthentication yes
+ GSSAPIDelegateCredentials yes
+ {{- end }}
+ User rkavanag
+
+## SDF hosts
+Host faeroes.sdf.org
+ ControlMaster auto
+ ControlPath ~/.ssh/cm_socket/%r@%h:%p
+Host sdf
+ Hostname tty.sdf.org
+Match final host="*.sdf.org"
+ UserKnownHostsFile ~/.ssh/known_hosts.d/sdf.org
+ CertificateFile ~/.ssh/keys/%L/%L-cert.pub
+
+## Misc hosts
+Host republic republic.circumlunar.space
+ Hostname republic.circumlunar.space
+Host telehack
+ Hostname telehack.com
+ User ryanakca
+ Port 6668
+Host tt tilde.team
+ Hostname tilde.team
+Host grex grex.org
+ Hostname grex.org
+ Ciphers aes256-gcm@openssh.com
+Host rtc rawtext.club
+ Hostname rawtext.club
+Host *.github.com
+ HostKeyAlias github-server-pool.github.com
+Host rsync.net
+ Hostname de1270.rsync.net
+ UserKnownHostsFile ~/.ssh/known_hosts.d/rsync.net
+ User de1270
+ VisualHostKey no
+Host github.com *.github.com
+ # Don't spam known_hosts with github's many IPs
+ # Especially given that they just use the same key
+ # everywhere (contrary to best practices)
+ CheckHostIp no
+ StrictHostKeyChecking yes
+
+## Global defaults
+Host *
+ ForwardX11 no
+ CertificateFile ~/.ssh/keys/%L/certs/rak.pub
+
+# vim: set ft=sshconfig:
diff --git a/private_dot_ssh/known_hosts.d/club.cc.cmu.edu b/private_dot_ssh/known_hosts.d/club.cc.cmu.edu
new file mode 100644
index 0000000..abd8e67
--- /dev/null
+++ b/private_dot_ssh/known_hosts.d/club.cc.cmu.edu
@@ -0,0 +1,4 @@
+unix.club.cc.cmu.edu,128.237.157.102,128.237.157.95 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC3ctF8tY3Izv0y5SIrGy/dS4VrFgqnqcJbCVe/rW5r2NnQla6JOqAcsxifbkgySTO5qY63zmdN0o4pmpvFB8ZU=
+whelk.club.cc.cmu.edu,128.237.157.102 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC3ctF8tY3Izv0y5SIrGy/dS4VrFgqnqcJbCVe/rW5r2NnQla6JOqAcsxifbkgySTO5qY63zmdN0o4pmpvFB8ZU=
+oyster.club.cc.cmu.edu,128.237.157.95 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC3ctF8tY3Izv0y5SIrGy/dS4VrFgqnqcJbCVe/rW5r2NnQla6JOqAcsxifbkgySTO5qY63zmdN0o4pmpvFB8ZU=
+clam.club.cc.cmu.edu ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINUV6XYJdi5YB54skWPXfc9G6Ef0yl1LmHiN1ZqDOryX
diff --git a/private_dot_ssh/known_hosts.d/cs.mcgill.ca b/private_dot_ssh/known_hosts.d/cs.mcgill.ca
new file mode 100644
index 0000000..e132393
--- /dev/null
+++ b/private_dot_ssh/known_hosts.d/cs.mcgill.ca
@@ -0,0 +1,3 @@
+@cert-authority *.cs.mcgill.ca ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDXZ/PXIxqL+lE6JAxDcUrOdUU2hYxwkhBgu1E+I0V+hHhDPAxKzahXSXNQGXtQpWqeghrDok4pznLDl5/OwB6ryRaYgYc7JJtlySHkivNlmArhfozBoTNMRKqfMmmyqm1qFSHjPs0Cnp7OrxXOqQ/LVNRd26AKPS32j3NsR2bwJwOo7wDHWWfQT7NQhI6ROosb/Bjj6DUHHmSKATQAvJelXpSIAoMTNUZHzbvmUtV7Y0VlOk2N5zZQY8MtjtgVEVFboU0nQZBRw6nZrwSokR4qam71GuDWPy/PqWr/nOlF6pWKumT+9FJSkMopmdRjbVv2dYYZXuyGCzxF+ief328kVn8ebzMqDxCdwrYKVhppM8dOctgvB2iCHUFOrjk2wZhUe6pkEFMMSDZljVxuGi5MH+WXBVkYz8A10wdxm8X0oPNOUsnuPzyGerBkPdogWCRJFCyw0HQws7fD4q0ICjatN0hGjxZ1ZkBpOcFYSJQkM+Y4nk3a8/IsUiX+6c6WL9M= CS_DOMAIN_2021
+git.cs.mcgill.ca,132.206.51.32 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFL6Hij9Qzv5Rcs/IesCPRHQX0Od+Yti9necnqhHXbdbgvD5oG+tBkt3upYBiopcHRotPrGxLq/Euej0El6s5Bk=
+gitlab.cs.mcgill.ca,132.206.51.14 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLikTqH68xc+FE9qt04HqpWUcHh1FcdoBkWBUBz3qyfKNzlMpa5PVMRU8sIQH8A4n9tWYIqPqV/Zza2OUV8uOw4=
diff --git a/private_dot_ssh/known_hosts.d/debian b/private_dot_ssh/known_hosts.d/debian
new file mode 100644
index 0000000..10730b3
--- /dev/null
+++ b/private_dot_ssh/known_hosts.d/debian
@@ -0,0 +1,406 @@
+abel.debian.org,abel,217.140.106.111 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDTdOahn5LSHotL876kVAxOjMn9UgeaoKCV6t/e/yDZF root@abel
+abel.debian.org,abel,217.140.106.111 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtPdzYGsLhxgauWssel310+pHUvmbFAuiPeuxyrRdXxWbb/TmT7dlZ+sv73k3zGQSpKMIttj+ppw37A+RG2oL6oo/PCxChRAWny8vKKCjXnxcXcBXrvlb4UleUXmtis1Oqol5JS54vmedbypnelYcahC1wORonEe/56QLsNIA6MX6kNX1/ObrACMbeX0kW5RWXFpSyWMziP1qIEoLH3ccUpvMUjCYd3WhHBAZSQYbbg+mM/ZAkIXv97xPYmZ8iaTyidyS3U7PzqdAjCh4CzFtxqTU0JM0eS7YXJNA2TepHy2GpQakEgBzJc6xN2pxnkKxuX55WSiQ8FzGSoy5UB/49 root@abel
+adayevskaya.debian.org,adayevskaya,git2.debian.org,git2,2001:41b8:202:deb:1b1b::75,82.195.75.75 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcqSlwncfluqPzUK98RJzbEUbjliq4RaKi1VKsPy3KE6jFt1D+xYdPcFHBQShxx66i+sb9A1zLqHBlfXMRVa1g226EWrDBMAA/IoiJGOMoUYYZ5wBSGhQmCJN4YO+d+ochIaCw+KYascdAjt72zdsdLZqJ8tZNP3hU+i/i7L9g6GCLyvQ2MeP6HaxlDbVkMV4y6OWDNMWVe2xqfDb6vRVDlzvQ5GlXOnIRSwb44muq/uK+px007O1yYR99Gp9A29nrg3/6SIE8+Zz77umVnvkp9NRZSqyzUpBuK4TyuICdVRTEg8wsVGiP/XvKjrICVrRp7TTY3tndVXL/8ZxInCWt root@adayevskaya
+adayevskaya.debian.org,adayevskaya,git2.debian.org,git2,2001:41b8:202:deb:1b1b::75,82.195.75.75 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8XUyzRSNk11CPMn9h9MwmUuFbQ2SsDYpvXhNQmH8cB root@adayevskaya
+amdahl.debian.org,amdahl,217.196.149.236,2a02:16a8:dc41:100::236 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJT+xfxD2NxD0gIBb16YummLOS+Q9+djcBAm3udCYo+K root@amdahl
+amdahl.debian.org,amdahl,217.196.149.236,2a02:16a8:dc41:100::236 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxO9ME/F7z5UVKDd+9lbSpB5h5GPr17uusPC4hM3YB7hR7xT8ZRoCCzjj9fZAHgs83SreTSZHR83h5LnRgJBxu6L7Pa/Fj8iPGiqUBgY2DpsXWGEU/SZUE/4irC1JZ1BcnRoM4MSPdGku4jLpAtCCGG4QT3NugVsjRefauDqz33i2p6k6fVlgCJrDWkq2jicW0ca24IhBcwhbJ6+IKzHfLgmLNIZ0XYA/7AHqG2WHm22P0Q2jK4nWc2HkwKkeNDFMt0bAH74Vko3hD6A0YH9Q0iui4J3CSMvzCE3PiDcaMCKxSwpMS1IpcxKBIp7N1CPoOdrJCL8xD17k7IIHd3yBh root@amdahl
+antheil.debian.org,antheil,144.32.168.76 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPi7blJBG63ogS58jsV3USAwy7mI7Ki6FQ9RQQtCayyg root@antheil
+antheil.debian.org,antheil,144.32.168.76 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3BE9zdGFIFe3ULX5UMQmV9f0ST1SeWj4QRvtk7qs/KGzo6H5czGSt1Qkcsi6ehZPQVZtQmaztGkEMp8rDSReMtAgdAvOHxisWoG/7pCBVNe0jIUlq97ovQThZr1qEcI5VdfFpUSIKYqPOa9weW2ELFaA+FsL/heQ/NbohSQ/43Pd52hiDVV7bvcYOn+98fhBwUZiG04Ob+992f99VXfwojp386CP0TF4qODSJ/VPqqLF1a7F4M85+4oZAulrRerb5P5zmyI+NPdAEevK5WqTqiGETwf6hxfj6yiC6UWcovZndHij6jZh6ndQQjLev98jqrHe9jRwUP00LgXNIVZOt root@antheil
+arm-arm-01.debian.org,arm-arm-01,217.140.106.112 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILRVf/JFDRmSN1y/JOUMVXC/4ujZyGfEToOlw5T4kdm5 root@arm-arm-01
+arm-arm-01.debian.org,arm-arm-01,217.140.106.112 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDG0hwixemVk9JzhYVR0tP0F/DQc1lGA0vSx0oz8goWdHSM/2pkubIiB/U0ntR76b99i2cwLEKvdidQxIvGTNvloxL3XmBrwR2WG8SOf50k8Cdz588uqxlOGY9yg3jKo4M0ElYWfmzceuTPPSQqphliL/H97v/ogu4NvDynt3MzZpnVfkRtNlumSW73Myo2KzAWr6vTSHM5UsHqAyE8hAYfnYaiGRTTIxP7lB3PHizjVmii0hsdSpNwOhKkN/DcpTlw9djh7K6bpanfa+NfnJxeVDFZTIdnPJCpecFplfy1qkY5tIHYHH22hbOSiYx743G9oKqpnWQqxugynehyA/KB root@arm-arm-01
+arm-arm-03.debian.org,arm-arm-03,217.140.106.114 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICauCUVrMOCmvRJEp+Ri6JFTMQlw2LnPs9ppYs2CChtO root@arm-arm-03
+arm-arm-03.debian.org,arm-arm-03,217.140.106.114 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5ytPYFjrooh3LBMbPsaOngja9qe7dBYjLFgKz+hYq/jfOgRnuPH/52sXrgYFAANqy2FMpmdlnG9IuzTsfMIVbqvuyiPGiqHTh17cAiJgxbZ9WI/Kxhrp8NP4ANsulKL/kdEwN0n7jrBcL1ef4+kvAn5zHTkUgSbndiiN48leXnO70b7+iop3SgYyd7xRr7XRV4jfWgE+aByqAX86XXK5JUkiWqbTPQPLEkjhM4yMAQlus1PMnG8l/focdvcJJWwfFHrdx4GloS1NxdgIhNLmcwyVf4tLIg4IWLtVHZwOcFma4DNxPqgsywT/HlBNkQzfY+sjfv4I6Rgkvsi1QH8of root@arm-arm-03
+arm-arm-04.debian.org,arm-arm-04,217.140.106.115 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTXfomPAAzKup0xPF+Bp0mAi9fKukrY3i3hHW1Bqhst+thuxGuSibAFiG5uGicbIPSirJXrTMBuyZyiDitMHxFK+ipxHknDK5k5Qft1vtsXHEO3OL8JjFRjWTa6Zk1LW9MMAHeUAIkuI438bjMpxkPm2qbwMPljHN1mnZlUZJlaOgFdt0u9+y1fyqL9GUyeGGvpDm2ZeaXLdvtjnLwPcvcTMMHSBYqp9sIzVbBT0xzBlf5gGjV3OyQm0H/J7Wyen2Dn7q/eFzZoXM9sXBW5xQzMgJ0WTrkZVacoDv+prVdtj+cwxHRiBvM6z0KjrzgrOB9GKXtxDj5AecH54I+ahJJ root@arm-arm-04
+arm-arm-04.debian.org,arm-arm-04,217.140.106.115 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFXd7IbG6bVAWCWKt7Iyj+AQ2bpuU4J+CO5zSgEn+B4D root@arm-arm-04
+arm-conova-01.debian.org,arm-conova-01,217.196.149.230,2a02:16a8:dc41:100::230 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFijd686C29gves/BA2PsFPJS3zvKy7Ft3f5sKrEXW0Z root@arm-conova-01
+arm-conova-01.debian.org,arm-conova-01,217.196.149.230,2a02:16a8:dc41:100::230 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDjZaZ/q8o8jwSXYC8JlDzyB7p3ehZiBld/FJ+gtQLkLmpgCzqYY7cDPDf7q00zcrMk4L6w/veELCm49LYz8hMCHSdxnmY3Qm3yC8wYvqIppcxAYx8O9ent5nE4Fxmv3cH/qsAsSUO0K2QZI99FBp6QeK5acRSR6ZJSgWUTJxJcE3uBrEDqzPa75EdmIuEXxvavpdgUl6P/TWTXoh/1tWRgJr1lEgjKyuicjglGtIi0xcgf0AC2mGOPD2k4lSYY0cgewJXVucUBoQo56y1dFjBfG2u/e5tHhPL48dl54fbwkI0z9Q1l7NoIuQvj9kc8jF+7BGmlKQqa5mluwa2aO5Nr root@arm-conova-01
+arm-conova-02.debian.org,arm-conova-02,217.196.149.231,2a02:16a8:dc41:100::231 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOQSBrU+4KGDkhYlVto962FUINzA1F+UooUiM1ngHETv root@arm-conova-02
+arm-conova-02.debian.org,arm-conova-02,217.196.149.231,2a02:16a8:dc41:100::231 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDhjdpBiqSE1OiS70U3j+zMDVRMlGTFJh/K/IqfWqYNYOwJGB/dM0SncxgBmNn1ARetZF3UQUIGRwGg4vS2h3it3ThYn3eMnWs/cPKrDQeL/mY6zYlkfabMtZMi59oRDXzGRVW8fJCX/EZGk7hPH1UyYas0WvHSz9sHBq6vowtgE1QJjZ0NQYbGezOdj9aze0mx3+zNy8rORxegXGxK0WxOLbfNv+80yzNpZo1VdnpTxzbxYiO8P/OWxBC7L84gBvT528uafySMSZl4nTaw9OVuwoBdoEZqLpe+VGgxciufAHGlT5RHDXvSAgncqhhtEfs+EYHYpLrFIs0gJDa7khgf root@arm-conova-02
+arm-conova-04.debian.org,arm-conova-04,2a02:16a8:dc41:100::241 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDTilokjceOAWvlWzXoEv/gHIddxiKah87R7aEg5qpDbDNFQsFmseEZBtLDJrCm6mVZCTD63PHMnurIrxwDAwpqOWL4j9qbTIF5M5bjvsi+thxVZ78r4YwE6wu8qybk23Gpx91A/X2CKrcgq5niJPEj5CGkbG3AO81tbPVjShhmnRAlvyFyhREvqCFnZ9fkVFznxrsUfffqyr1SJC+/r4cdiUP/pBp8T/9ml+Ehp7tjyxI4n+j4LRnfoYtgK5fGHw1EBeXxRKNKVg+p7eg8YCv64IH6NSGvxKhCEf7cuuEd9W1zrKN4mEWbDnDvOe3GAaYBktzsi0wA+TUQe/W8X+pgq7Qk9u3utDjW9416o9EjcooJtxZKfFODzEuxyBcTO/4NI2tbsCzhKhdcBmLewpoO3Aem9Io4uwLZtFEwbB8ZJ1ilgIeXicaVXCwxm7dnWU8sF4EQbSWWmS226D/57wkBuP/OPWnsxv8CCXsorBHNTWmJDibsStpMT/CHxnXJogE= root@arm-conova-04
+arm-conova-04.debian.org,arm-conova-04,2a02:16a8:dc41:100::241 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPbBUCn/9NoLxw6ZlvOOcjLXYbBzmuQ1UiuNvToGnVFh root@arm-conova-04
+arm-ubc-01.debian.org,arm-ubc-01,209.87.16.54,2607:f8f0:614:1::1274:54 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/MFr8qEmJYKruCGPy5sIhN6cInvKzu+4Y5QIaWYt2T root@arm-ubc-01
+arm-ubc-01.debian.org,arm-ubc-01,209.87.16.54,2607:f8f0:614:1::1274:54 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDnO6TStvIMHDGnNCZ+Z8zbsKBE3+ek04FZsCCi1Ggw3llfD1Ved+i9BdQjEeHW5NP0JyUMVufm8u5apUa9c0fUFrXVDec8HvNK3WzwLYtBaXbrqosBJUQqX3zTk4Ims8HPDg6oC2ZyMww78sp5QRagkReRGjAgp+RoqVHSY9saAmnZMPjJ1qwXKA5kSfcPPfedJt4x56K+rnWRti7kDo1man8uHfJx1Um92FM6WfMCyNKrzLZNm7PJApqkBbCkbPk4jn0bJgTTfO7hWVGj/5jfiIZLQ85oDMO4qbN83ivmC2VPfUdlg0O3imB6ybF6iTD2PN1Zxd80jL+NAY8g+eUR root@arm-ubc-01
+arm-ubc-02.debian.org,arm-ubc-02,209.87.16.55,2607:f8f0:614:1::1274:55 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAh8y61fNl0R1KaHpOQgZI7qO26mbf+nmyIjYjO/H+Fh root@arm-ubc-02
+arm-ubc-02.debian.org,arm-ubc-02,209.87.16.55,2607:f8f0:614:1::1274:55 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC721RW9/oC4DAh2KlAIGOPb+4OV4u70vBNzEMZVdk63KJHvEMzOSJMPsmcC1T/6NuW9yQ8M/sp26LSMDJcgleeg//iHibOXD/YVMASqpVNjBMb1vQWVE0tVlNBml2BL+wpdNwtf95ZU1Yancnrgsit+al0dKQRxvWki+5yWnGGMDpDjOwix2XFZIPkYquu83wWgDcRpzZ6ENCxmb2bMktPFzqOgApkUmFxLCRwZWE650qfMJMpU6/jfznhNdpyN507kxV0Wqdf7OQSwErN8oexEDTAUPJJWW3Fs3NRXzO2TcfEUZAZdQbkoxdR923YTgbNdeNjd86s4RkcJIiGDRer root@arm-ubc-02
+arm-ubc-03.debian.org,arm-ubc-03,209.87.16.56,2607:f8f0:614:1::1274:56 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICJc5A5ItbiVfVgx3O6s+CZ5u83DphTaPHROVLKDjafm root@arm-ubc-03
+arm-ubc-03.debian.org,arm-ubc-03,209.87.16.56,2607:f8f0:614:1::1274:56 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCssMP3t9nJsjn2cg3/j8zJQZzSacKMIpgJo0GHJZuU0QBCWsVKUxosRpo2K9B0IVFFYd4GosqrbNWEDM5ZOpk1TqQ3y7Bq2UkoCm2NV2W1k2DFBd/fKZQHlNVOphUV7tLshvvEZA7sPl5brRPs/cppwnFTPHCX30g/UbDRSXoiAudcRzqtk2IC6MOg6aJrVY2QgvJDG3wA9ILD5CB0j7JT7rdYhIMSFctkb7ZO7dcObwAXOaZADzyTLUf+DnjV265szx31b5a8DutwdMQX3xnfrx7zdQuNj4m0p5AmPyzwHp04gC2ybq/bKjcLZ5NG19sd+CcENdA7z76bGfQSjt13 root@arm-ubc-03
+arm-ubc-04.debian.org,arm-ubc-04,209.87.16.57,2607:f8f0:614:1::1274:57 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGtgXoiBNE/UITm6fYG5lPVlQddrVLgCwJ9T1/x0anE0 root@arm-ubc-04
+arm-ubc-04.debian.org,arm-ubc-04,209.87.16.57,2607:f8f0:614:1::1274:57 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTXohhnk/epQiDp1/sVKe87dTRaFwkNwqPnes4fyUU/X5q5JsvQKYe5MCC0Y740uY9RCtpfvcC4OKTeuhIpQQE11jU7vEcuPv/UDg8VWMbn5BRI65VxI6bxFMAlagTGvJZcVhTiiOwtOL7U4xPzgPW8O3/bDOLVQGApYmEZGGn9ovwrvY4dcgPQm/vGaEYskMRQrC2zHJDy4Wph6a48wkXuc+SxE7vZ8Jn/kAIbVMQbWQxOURwkeiZCBvdcSj5fI2yZuBnp2v38wMJBtJrmU11vdiCmI7OGNBphtZ2pAvMHZDqxru6lowsGxSrJQ5NuRahgn7YQEF1H20HVzr+Bn4N root@arm-ubc-04
+arm-ubc-05.debian.org,arm-ubc-05,209.87.16.58,2607:f8f0:614:1::1274:58 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExmVsIJ18pNf2eFBun9mtgnvgt/W9UK91ivlh5rlam2 root@arm-ubc-05
+arm-ubc-05.debian.org,arm-ubc-05,209.87.16.58,2607:f8f0:614:1::1274:58 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBXZZOdb/YKCcVMwqyp1atTSeir5nC7gcN+QnYQlBfKXK4QotdHvPp58L55b0m89QOdYpxbGP+99MAJk9G54e7kmE4uN0WKImNx3qxSvcwwaIFmeCh8SNjL7xszl24QpE5ZjWAmy1oqKhjcS+B5V1NSB8pH9craaEf3q2i+dfUObQIyCKMnY3+ueZ1EtYRCTflHTeuYhxgb/NSoRHW53BPLrizcz1+iq86qArKqTDragJJ69vZrAZZ36wGG1Pmo2uaRVA4xP8wCkxRqkTl24SqCQyF31RuFpse51jqShYMmVKqBw4n/ZRca+YwtbzCCnL5owMdWiCpN5ejm9SDXRpn root@arm-ubc-05
+arm-ubc-06.debian.org,arm-ubc-06,209.87.16.59,2607:f8f0:614:1::1274:59 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDS+ymJA+5htaqtlm/IJ4fqfWBtLZzylQ6oADimJziA6Zy5vUAIR5fHQZxU519TM/RT2JqVqa1BtvzP0huuM3VlvgXZ20uvSwoFLq24DXzim1h9MiKU/p3QElebPLP4AZCttIz3IWGnScGqiRRuvTP45t5DgEfuIVbMKPa3HJK0jZgnFHYi/QGlllKVgUunWTvOFnW0QgkoqJCFqj+rOXcJjFd3Eh8SBADDgaYRi3tKFZX/gCd4EreF25u7oQ30eiwrwbSC0HuOp8PP5t4WE8qvboYLP5YMsl4BkxYULLWrLqcb9QUZj+N4Te4Njv1ZbYSAYZCNFKXkeQfFEL6htuJr root@arm-ubc-06
+arm-ubc-06.debian.org,arm-ubc-06,209.87.16.59,2607:f8f0:614:1::1274:59 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOsvehcQA9ePBVSXvFoCVW+w+D+sOsW1dzK2aGMwbtJS root@arm-ubc-06
+arm-ubc-07-test.debian.org,arm-ubc-07-test,209.87.16.76,2607:f8f0:614:1::1274:76 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbuGJGnRVmOkdA55Oyt/Cm8eNeE/txVt8XteuBxAHZxMYfVG6NCvvIGXk/zzah+rXJ37cBJguJBn64RPUTlVNbMUkgu+jD/sed+UnP/lCRmGFk0m/PCQvOaAHQAVf7/ky7mwuCSRusjrty0H7gJMkO8ZjPEX06fl3fnJxhHLe52LfUsjZPzvTnVIJNV1LRjIbHwItBBG+eGs/pe8jnIeRJuYkOHqILUefoei+riucTl6er9izzGRofY7AhrsQ0aCo85v0f13b+uHhbrxO1fFdvzg25QrlrMDRHtzBvJpqvi1F2joG9LWeISv4vU/NecpMvmditDOXgsvb7U2QHzZdX root@arm-ubc-07-test
+arm-ubc-07-test.debian.org,arm-ubc-07-test,209.87.16.76,2607:f8f0:614:1::1274:76 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMPrueifSp2yEGoIYfXk/Y3uL396RTUBvkdqxj0VNB79 root@arm-ubc-07-test
+backup-storage-hetzner-01.debian.org,backup-storage-hetzner-01,116.202.171.70,2a01:4f8:241:a70::2 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/Mp7LKYS2yt9Fw0ZASsXvWWhwOEGloknMtlMNEAxXhPv0uwWePqJVN2q/YYvMXRHpefRzykxKLecE3Dxcr4Le/n3lSYkKgLuNmscbHo7+Kw0z6JW0g+FzLUBBgQk2/x91KzEjLoOgoxPVsAu8e82uI8AOzsUbuoTl2p9vE/WOssoKJwpCh4aO4HxwtykNYFuAAKIkOQ/PVoVJMxa7Cg/Di4AoU4bKW8osSmbeS1txaHk8hk2ZibgkZK0we5Z3xghFLbAYZK9ntpT/iNJf5iKwAzHPTR30vCOw9VqCdSb8Dwm2g+QgEY1E7j04PW2/T9hRf1i0H9Y0K77rrqLoNlF1 root@backup-storage-hetzner-01
+backup-storage-hetzner-01.debian.org,backup-storage-hetzner-01,116.202.171.70,2a01:4f8:241:a70::2 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID97qlnr5nDbEleAPaK5tFLXyesGtzkIfTtyeOHVp7e3 root@backup-storage-hetzner-01
+backup-storage-hetzner-01.debian.org,backup-storage-hetzner-01,116.202.171.70,2a01:4f8:241:a70::2 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCkeRfPCTsP5R1/J56FG8M0UYXMNNzlCwxQdK3ugfq7of0fKILMR+42xy4Y/EhCFyYwA1/HEv2wSILkTf1HD9Wb2Jg5ECjxnx56qzb3iPozNjW2Ubv/PvX0/oQY5N3sikWNOMsNtcN0FCRJ5d5SmcnP8Li8QKQIAsI9VTtY/J7ccMIKeF6VPyALTThB8s5g72fSFmz354FFoszze9Da8CFoP/eFFSVhYODLLiqfXlSWXcXyzFKRFmWdyjZUBRGg8KYP9GQPUnQXQ6t7rO6gqy8zFYwyWkMyacGSCcLoDRZSjrOWYskTprUytIf7r/UuS9VBB3SsDWdOWTq/lFFnn0mn root@backup-storage-hetzner-01 (initramfs)
+backuphost2.debian.org,backuphost2,140.211.166.213,2605:bc80:3010:b00:0:deb:166:213 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDTKOA0r2oI6Igi2I2nR1vs6Uw5/GrYzzSphqjXd78iE root@backuphost2
+backuphost2.debian.org,backuphost2,140.211.166.213,2605:bc80:3010:b00:0:deb:166:213 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCforr6I3PEqu5DYM5IIYKkHUbg076GKJw4Va1/YtBOuPWxc9y4h8pXPfcmvYo2U7T9fWeL8PxFKe6dZtMOueSjjKAgbMH5HuF4gc7uNleW7hn1r3MUDlDGrtbVZ6PzWcnBMrWlQFrj8j355VLS45v4BSzD52oTgIiXbi9eQiai+hq9ac2e97AAXdgE9eCtmYbH678rTAEdKZ7KV568UYoyAQw7SIzL4d7lK1eX5opM02ieJ1zXWaCjqUDsyJQY/xoF/8SrrsyNw5CpnHkqw7Mrw3HxPx7B0nxbcNzCNBf3ibM22Xvjq99IzxFCiMOKfRU9tCnMOQ3KLPR7UkT2UuJJ root@backuphost2
+barriere.debian.org,barriere,128.31.0.66,2603:400a:ffff:bb8::801f:42 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDIImQhmx/AvR08vsAP4yxDsO3tJ2FqJvcEvIgaMG9Yrq5BavER3jJzF7ytPzppsQDFimHToMraYiR9ekXVU0bUb4e6i56Nrjy302jZ7W3DDzTlPudgU1tkfBhC4om407JeqM800pdHKEjfBhYjIDLhC8B7GQRPvNhBoZ1IzA/etIPdcOh1I9vTIepoKfLmDTLbFQUZy1YZNq1jspTJa/mzuxrNgj/xPNYs5K8HAgCPDrWQHPqx5NQqdPQtZrvubwRc4Z78rSo91BxWQHLivnCvEeGq6/dh7X+Xfx252zQpu5VrYhubJkSVA3uePMuKxSn719WlMbdykeqIUco1ZVTf root@barriere
+barriere.debian.org,barriere,128.31.0.66,2603:400a:ffff:bb8::801f:42 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE6enY0BN/kfX73k5iUX1hGy9bRq3ik+RJpBe4XQmkCh root@barriere
+bembo.debian.org,bembo,140.211.166.212,2605:bc80:3010:b00:0:deb:166:212 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDkw++Nr0mmW3/JpeGZ3WnwnB61jOuRRc3/PIEfRK+p0 root@bembo
+bembo.debian.org,bembo,140.211.166.212,2605:bc80:3010:b00:0:deb:166:212 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwMnhURrIKM+9FS3+ccujW9rw+b0UGekSKYqEP0wIqbDdScm38kiuDrM7iQNJF7t8mydhrvbVzk+tk+5rbYSCLwDMzByjhuKhKL7hj53Qs7auY47l4i6bWUPoIFuVsfDWLV/W9FrQGhL2ybPixg1FdCKOVQNAGHFiGbN1RMveq6qmpQkF0npfbZnozOAnHhwLBz/cYnoz2DmBLRLiKepQ3/8h2L5Lv6tY7ub/sdElKruKCDOL0Negu9RApW3Atm4ICNcuCoZ4QKINeYcVBMOrFaTMgE1H6X1FfG9FTsAPb3g1pmJXvEboP9r1Kd+EVpOaLudcr6zPz0LonZKKzofWZ root@bembo
+bendel.debian.org,bendel,lists.debian.org,lists,2001:41b8:202:deb:216:36ff:fe40:4002,82.195.75.100 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC03N4Hc/E3KpC6dyL/9yXTNv+mtCNkle2rH+VSafyz/VY3z2te8318F7Fryj20yZHgvMJVAF5mC9W96DMb1P+OO/kz95shhzM1WS4wX42tSvKBrrcv1Lb4eBsyNL2zCr0MiCw3kJriCgyJYN/L3IAWkEb5CZma5Qt+CIqTaYxp9FnaqYURu9DzFm4StfKyP7ZIHBi4BAXy2ZqK4A72UJ68Ax6lpFqkSTwSKYd6Yk5il5yYlJPB3t/LXwfO2tTitoVSuElgB5o/x03ZalhWwNkMEk+CplwbN3VVLMZfl9j8IIGvgZT78K3/MwLsXHM7knTsrJ3Ik8epNwjvz7pInpHT root@bendel
+bendel.debian.org,bendel,lists.debian.org,lists,2001:41b8:202:deb:216:36ff:fe40:4002,82.195.75.100 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG/uOFs80WbcyVtNu/1fkhnsTAlYQUyPmuQrBEzSV6a+ root@bendel
+boott.debian.org,boott,194.177.211.206,2001:648:2ffc:deb::211:206 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6LGmfZZ/UqWWyx2iwQtkerfdYrxKL7fd7oOYiVrTb8Sn3KF6y/jgVPZjPcAhKN9b7IuNHcI5WOAtstZ7hu3wojA8KnyDJc4rx+uSS6oJx7AgbjnmR5VZbqiXNScKOXL16DsXUTwsgQ6Ua+TUhaYfGVU9+S4cXGvHjhVM7pW9CSMgcpdsAHCcSTt65Ng5b9TrEjyNa19QPUikJRfIkOouJJVLx1Q//o2SRyndaPU4olUw/b/10+f5xDT0aJ5JHfIXp2bH8oMZj7/ODiEKcde9sq6gG6gK6IbO76TP0qS54ra1h0sKJrNH2O4/eC4VPMZLKFRhPgOXq6vPHtr+BpQMN root@boott
+boott.debian.org,boott,194.177.211.206,2001:648:2ffc:deb::211:206 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDEESsl5ugI6p/BkU0HetkzGJVbaY56bVZgUsfnNJ9ps root@boott
+buxtehude.debian.org,buxtehude,bugs-master.debian.org,bugs-master,209.87.16.39,2607:f8f0:614:1::1274:39 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDY/L8kVXouUxQwQBgOevkfobhPwO1/MLztqVznveA4xQfiJTw5Idzynva+cO0Tg0PRZahNe9R5CHe3pEb9MjgdOMEuhXcTmnbS3R/ASp9n3fPVLmbuhJA7Wc9d4xBB9RgN83VWZLm6PHFiI9+VMDlkAZKjCaYVvIwe9Omd8KKsBGrByQeEuf3fkMMdF45TZ5mDQmRQzlaYjt62oXw3nRrLHXvUsFARey6pGQOxMxF7oW6aUfmFZpByHFjLg5+znFKcAITZPGwgIWAa/6D0jKgIlR57qxT/Pv5mdmU3q1cOuPJtzi2T1070RxYV5RBLfOQeoYRv3LPaIL6KK4PGofTr root@buxtehude
+buxtehude.debian.org,buxtehude,bugs-master.debian.org,bugs-master,209.87.16.39,2607:f8f0:614:1::1274:39 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGb3BiX5jLrspKOXp0+hBTDT5T0RzsMxZFU9aqSWf5Sy root@buxtehude
+casulana.debian.org,casulana,2001:41c9:1:401::100,212.110.172.100 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINUwMJhGUK94O+i0qtswD33IhB/QJAPZK358yTw78RTl root@casulana
+casulana.debian.org,casulana,2001:41c9:1:401::100,212.110.172.100 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDW6xdHXgzIMyqt3wiMgtqHPzO9neBVc0sLs82TSwz87aggsjS/8xbRIc/2qa6gWex55ZFlInirGqZZvjNwQZL24CGIwM0SmGIJ7YVwPQgIJZpTYQwbrV6Nc5ptBt7xtLBGCGR9wEVwS4lwpYDJbTJPm3EQjEMHJEIQeEqj3ZfcI9SfL5ytdfLGockRUnzSNR8KCm0wqiLzRipGK2fQPSEBPvKpRSLBmyAXJafcXYmqru73u9lLcymx3Y0BBjOyjzUrJt90ug5VsoKz65qxly7SgeXQBPnJL6P0f3omYfKTY9v3aA8bvt6DLCEgErfxARl7AVTzBAAV5WQB0nF7DKTR root@casulana
+cgi-grnet-01.debian.org,cgi-grnet-01,dyn.manpages.debian.org,dyn.manpages,git.dgit.debian.org,git.dgit,browse.dgit.debian.org,browse.dgit,cdimage-search.debian.org,cdimage-search,search.debian.org,search,194.177.211.202,2001:648:2ffc:deb::211:202 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCa3svyBWgag04fO0MFf/52m+Hb0JgMdORuul0rcBP+P2Y0ghS8NAahhbZUogSCWNxlUdMEspxw8+vi83wXl8kRTzECY8nUt4SiIsGTWgElwhTqLolv3lH4aj03M7SfAWxSLhWkG8okPPY3091fAkuplNe/Ezy6oKUUMXXS7fh6zfDbrFIqFSxihicfDWGQDomfXEf/3xAG6UosQSj+mwlnaJn0dZZ9wAIW6/dLzmO3QgkWuPEs2J0OMBqYIzbrJzkYrNRugxwJ3ZTj1TSt1kJ3EvD0swdW1sweQgcJqrUI6PKRfSwvkgZgCjnkx2N4UMYuTo/ADBYeSTOsVZzsmyv root@cgi-grnet-01
+cgi-grnet-01.debian.org,cgi-grnet-01,dyn.manpages.debian.org,dyn.manpages,git.dgit.debian.org,git.dgit,browse.dgit.debian.org,browse.dgit,cdimage-search.debian.org,cdimage-search,search.debian.org,search,194.177.211.202,2001:648:2ffc:deb::211:202 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKuPj5a+GlzBMWbPeb4DIikcDVSwpCGCSsWPxCfeBVmv root@cgi-grnet-01
+clementi.debian.org,clementi,2001:41b8:202:deb:6564:a62:52c3:4b67,82.195.75.103 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDkWYxPoqCw6xSdTLPtte+FUytUsku6yuFRd9cdD/fHnMjLtFJbJqpNZJAbhi6L9gL+/TEBq0z2+qSN1fook+c9xMGgrxSkt5Q08w+B7jOzYFdtqT+66uOKAiZavqudev0NON3RZhFjSCXiUjgs9OGBKKF4+IwPstZy9qraXZWfjo9wFbobY/5IK7ekGXkVgU/7bT/92/+uAzG+SqCe+BZZPkTPMHFEAg1c/EmAU3AhLiHGQSphcOrw1xKLJXj5BEg7L3L1sCRKhWPBjO026f3EF3RFH13nvQ9prTBQcCZ7cFvTmjyRDeFqLyymiMEpWoDAazlgwrbtbyLpLGUvFgnR root@clementi
+clementi.debian.org,clementi,2001:41b8:202:deb:6564:a62:52c3:4b67,82.195.75.103 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK689cbvjWFQQlc7h3cvMbt7B/KdomgEOjsDCGywdqjF root@clementi
+coccia.debian.org,coccia,mirror.ftp-master.debian.org,mirror.ftp-master,209.87.16.72,2607:f8f0:614:1::1274:72 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKg11bOYs0XgVn8eNSl2ee7SoyZ/PkWW91lsOe+71km root@coccia
+coccia.debian.org,coccia,mirror.ftp-master.debian.org,mirror.ftp-master,209.87.16.72,2607:f8f0:614:1::1274:72 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWF0Aizr6R3wk7h4+TOruwnOsErb86+v47lFGA7OLdRb+Jc1GqgKwHSmYIEmVPXDknQ0OZgykvjaPD+NO9ENidh7JKndU9xhXA27o61npv7rgTBFPPnIQXF6I6c1kz8TxBI3EwIhXa9Okh8h2lnWyYPvbmYU3+JuZ2KesyCt+BMD4xjxe8P5pFi3YEMixePV450evjNMNBkayz1ZhK5Csl9qtMvAdWkDAul+jB+Q57q5isjhOBwQqWeYJXnN6l+mpBE3lJ8h+o8tFF6utXycVmY2j81pieL0CAUkW9O4G6QQKPzO2UYSgTkTVaDK3LnvAMqlWSbtnMjBoUFXUrxDkP root@coccia
+conova-node01.debian.org,conova-node01,217.196.149.227,2a02:16a8:dc41:100::227 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICU/qiQZ7f7HVCCu/xrC/aKNXOgpVPo1xeBgEeKF/BJF root@conova-node01
+conova-node01.debian.org,conova-node01,217.196.149.227,2a02:16a8:dc41:100::227 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDC1Sys/Kz/FkGB6Cb+CgnefSNbzkY4drDvu+p35577YwMYnlnEjgiwPQJ57DPbmuBUUM2r/OCY7nZpjesgYdGL8FWLfsGY/C5l33JUaQqhm+OSUaLJS/we7enmRuExbCOiNUwQyePvwQLdH3Aj51082aTqcgUUmooYqSoT2r/JPDd5uHNWusQehwhBiOfjXuy/HrngIjMVLasBJ6T62MQXnyCUFaZWhYPZookkDUojl43PeXYQIB1LeIJz8Oi+toyM66ZTJSQ46MekXKu4kkc2ERGQtHF+y6BD+nQkY89Qwz9Ajn0cf67+fWSrsp0caOpUAucgEmLUV0ACB9dEREjz root@conova-node01
+conova-node02.debian.org,conova-node02,217.196.149.228,2a02:16a8:dc41:100::228 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIRWg/JI7yjsa+viP7aqHHEAtVZKSMHcHQAqfpTbjWIH root@conova-node02
+conova-node02.debian.org,conova-node02,217.196.149.228,2a02:16a8:dc41:100::228 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUs4SGwANq6YaEY7fniLZv4f1wY5rhPSl4TTInpqnzuvfUC7SmARVJgdFYGlN/BrRa+uEi7yaZMYdrPDVOnSUCnpcUvRPliTkKUJvzsd9+1LIL/t6r9E5CL7izk6dj23a+eLJICCEx9fyU+qwsfoHdNHuqeIzBFwWoDLCJ3DGezrKhAtNM8oyAHKLd76Hsb3ZpSHG1hzXtoH4JCHddP2gu09LJgxNy7tsGn/VdFeLWGjiKlCiWMeWhb45y+0UuBJhZLb86tk6ZVXsH91N7wF1fXtkNYixppTl4e29/LLRj9XDz0yGjKKTqKOkpOPaBRL9Q7gnejNo2GztYKs95S1nN root@conova-node02
+conova-node03.debian.org,conova-node03,185.69.161.162,2a02:16a8:dc41:100::162 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDKqOUBREdy+H3v8/8bxc9hyxTpsuZz4XFNb+uHbTHyi root@conova-node03
+conova-node03.debian.org,conova-node03,185.69.161.162,2a02:16a8:dc41:100::162 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEJquw4cKoxjIBkRNF303lpuAGg5gwYm5PRcIdPRIYahq4Fy466qjBpPeAf42LU8juG8dTIYI8nFNL33Ogd6If676sEfsQ6wn8NHNqbteXgmFizw3Fkn79pwcGvrCw1NAq8CYitUsGMS6kUqtIyuWiNd/SVaP4YXhywM8DuGasgG+Y7H07E7g496s9FaD3b4IRq4EGj4O+MyawHl8UtOztdmXNeMb83LYFuEjfHAxsdJUbwnDcxYOUIjBQ5IHs71ManQkA0cBAhFnk3vgaPkT743SjNOmJKl9RWLofztB7ktsCD8hIe716u+hNNl/VozwTPOO52uyNfQn+WNz2yZdb root@conova-node03
+conova-node04.debian.org,conova-node04,185.69.161.163,2a02:16a8:dc41:100::163 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC7qrxxUQj9oAzt+M5Vada+haZLyYk1NE6oHcFRcor/C root@conova-node04
+conova-node04.debian.org,conova-node04,185.69.161.163,2a02:16a8:dc41:100::163 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNtOY0ICBTegwvu3cxhmIYCrHqzkbSPNQwfsQ/6MVrc7rgXq4TRAipdmXacMPl7vu/VgQCw6BsJMMw1v/gCnxwfa5Mb5sFAbBdVReiYlxNhJxnllSTeeGAaLqmk9zudgHBsUJs13/OcyS62ipCgz4UirLhJn3bhrP86VuF0wpmwCwZnan9rKsNZr6MH1+7tJNo4hpspkekot4/5UuXA3/nAJEtgvtBgE+VWExDC6bDofwI43eQGzI2Dfm8m+izFJ7o834oS2G5uko3y6XQmxnq4YX3EqS9HyNeawlz5VKvGVuQssaiEayz2BgkXMSKXhn+0Z/hvjSmbgL2xTi7yafL root@conova-node04
+container-builder-01.debian.org,container-builder-01,195.192.210.133,2a02:16a8:dc41:100::133 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqg+aOFWVcj3crRPouP8W32RehErB4AgGZ/Wqn1jZNsEObSChQQV/Vnt4q4nwpuHdbXJFnFMjKU9jyKgWh/UIIgPUqHyUy0urrJLOVnl+Ezyus5KTaMTkHcOT/+eQaa08gfkGOmK51TCVAl7vW0q+nbULLHYoMkV3heouKWjPbsSRU0QS3gdpncgp1UyesZqrujgVoXlG4iEjkrL74XFiUQGMc0XaWie4F6Mw1QzHSRiC1JdaGlC0+lOHUb5TEPUVD8vHD3N+elcCRqxL50cdYmo9K4gWeXJDJvn4OkteCblbmleoO7yQ0rx8f36vhHcacnMW9V2b+wN5XqjN8g/aF root@container-builder-01
+container-builder-01.debian.org,container-builder-01,195.192.210.133,2a02:16a8:dc41:100::133 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDYwWNYnjRGSeK6hbFcWi/dpu4T1tfSdJT42A5Qfwr9N root@container-builder-01
+container-runner-01.debian.org,container-runner-01,195.192.210.135,2a02:16a8:dc41:100::135 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCfuR98+yX3VVFuK2bJiQ92tdX2UxXZE8RWCtz1b0Rq1KyAiNYdej3GESaj6LBIG2X0+AxOu5V90xC4ANrzdjy5OnqccCBrBGJt/0F/UyIww6S1xOV7mRM2gRFtFAQgIhtZcRbDG0wEvhXHy9MDATfsxLs52+p8LR5hNjH/ZafD50aaPDvAKQ/ZcCdxYWglWeOO2Rc7pXnEfqHQLbpWwgnbGQotkNWA2cdU6yeUIoYgbeB4ltcl/8CWjFI93iR4eijR05oBTCZlFTD8ZE7yQmZ5Kb2VBcymRbIzsf2Y8NZWNt83zzsYmN6smmtHzobMojmIB7tqr0Rd41xMo/wqVcJf root@container-runner-01
+container-runner-01.debian.org,container-runner-01,195.192.210.135,2a02:16a8:dc41:100::135 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPpcQpQs1BX29C2xylwRCjZ95jU4Kd2wy4J9qW4zw2DX root@container-runner-01
+csail-node03.debian.org,csail-node03,ganeti.csail.debian.org,ganeti.csail,128.31.0.19,2603:400a:ffff:bb8::801f:13 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDAz5f0S13SOQEiON75iDLO4UUptpyX2Z2Z62Ae+AZrNmef0oAFZH4SWKL7EiMQGBiYy9kDbqdwc1xRoLeqf5H+mR71VtFoDlwDka70IS++726v3pDE0cVUrUF4rQI9AGMRSFM/1/48sYBPqPssKWeaVI6hNaowLowWIMQhbT8PIAPnWafUzACotNm3iB7/gg9Y+bJhqvui9LDNMFJpLyRF3aJWtIlDxL3Fe0LSJizWztG/hxqWksUp1ZpOWars3z+VoZePMVZh4Qu68iccOOoyWP/c88T5Ds/YLdocJkYSO5pzItG8NorTLkMa+hJGR2n/IlJu1QUavP+WPRX3q37FxND7Q0LeSyAtpRbdVPKMOAiVwxyn9A7yME2bmDCOylgcei6QwdH5+I2Luaixy0ypZwblUCktan10eAsGtf/Ggpxu1d7yefXoKHIqH2kGOX843p0AEQhigEm7XqFHz8ECUiCfxQTYbGIhEj18UIZTBuewnW+9m7+othcfV/hIK5s= root@csail-node03
+csail-node03.debian.org,csail-node03,ganeti.csail.debian.org,ganeti.csail,128.31.0.19,2603:400a:ffff:bb8::801f:13 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGyyUBIcLW6DEdv+zeX/7cjBt7LwPUQDb8P4EfgzXQwJ root@csail-node03
+csail-node04.debian.org,csail-node04,ganeti.csail.debian.org,ganeti.csail,128.31.0.20,2603:400a:ffff:bb8::801f:14 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCd3NME3/bX+REtL7hHU/8n00sbDrIVuwZ6Rx9/A4LDxEda0tQQYBWZuSljZJa+TNKvBGCXp2mqwt6KRCgkhuVQMUwpfbrg/w4EPndzwL83pazQD6ZSfmeZfPR+BTgD8vnCiLTYR959jBjORqg8f6qlwThJoJu+NmjsezDnhagN5TLCMS+zkhqMDeO7J3jw27o8Q5H+N33nN54BjEscMZpiOfcDBKAAhxEvnSGZrPsBol5gQxq81L3wNvTZThFN1poTul5re5mTj+EWLW+VqsX4hNWbpaPOJLBnpQJU96+UFinnS2GDk1cVkHRBdGvc0EUWUf8wQ2GruNywVs2C+NodwxWtxAmgvy4Fmk4E81FugePm4GpIruxqDQ/solCVYKBDLF07RK1TwVblCIw0iyE+kc/BEUXwgOpYcPS0Rd3YwCi8V2xB6u2JryGI/9MwC0ZcWCr2ocKAos5IQgjwfeAXv9xp6DPxAoekewZ3SuSbcvN4mn172joqhXhXrHJGZXc= root@csail-node04
+csail-node04.debian.org,csail-node04,ganeti.csail.debian.org,ganeti.csail,128.31.0.20,2603:400a:ffff:bb8::801f:14 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFTY/xK8vpFCVEeNHl6+/8gNkcOBVBNWy7aRumDFvfEa root@csail-node04
+czerny.debian.org,czerny,2001:41b8:202:deb:6564:a62:52c3:4b6d,82.195.75.109 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDnlwSIDXoqBbsmAruOLcHQg2v0aOnQCqLp845Ii/6kmRroU5ZKwVRw378lZNU2oM/nM7TFwhk9pgEYhMURc9A4dhRLwp3p2ZvBfQrm8a/4D0taAkx4p5JEleksw58RRw44P042K5iRMBBGacubYLgvCsEKJsK1GB82i5wUBGniGGtMVyQbRiu8TRyOkdMKSaSOiXjTff7pc2OdNJH5sST0ALCrvny6p+b78PkHxa5o8giqu+gtyfeAiHwQJ3oe8Fuo2GdV8ksC4h+QLX3qgDERHq09o61wTIEsFI1TWomS8KaWtLzxyGWkcbfkLCk+ZiUiw3xehhvmqWrvf/NACyIB root@czerny
+czerny.debian.org,czerny,2001:41b8:202:deb:6564:a62:52c3:4b6d,82.195.75.109 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAJIdIMOGvtxWeQfI0vyd/2ztni+S8DjsXdRapNcbqOD root@czerny
+danzi.debian.org,danzi,209.87.16.30,2607:f8f0:614:1::1274:30 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDC6SRNLQrqx3hiJ8W4zFil6COZ3raof6ImOSzhIA58upY2gZRwyE5pPjTNzo0p1okJZIoJ5iVO6sPY2WO7RtNQb+tzpZVS0R5oAqOcaZglgT3bOoB4MdRuTlImXb2MUeyeJIAH6IRs2931DztnwBwlq7yLkVS1efLu5SLEbcMa9Nr6s1bbmMPQzzYTu8yBFAbHxv57VJ0PxuGLAfby4NWgYcf3ZkYVcpFJGGNshleulSsackc/t3F630jkKv+LL9ex3KICWYgDqD9grV5UWo12ngx3TzTj+V827bHxv7qZnoewyyU8t58zMJgDpFSFClZOXusuhC3ZX5+vvLWbBJlF root@danzi
+danzi.debian.org,danzi,209.87.16.30,2607:f8f0:614:1::1274:30 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMBtWc9kc9eURQqrEJSbJ+vPahTpLPx1HhImVya397e5 root@danzi
+debian-riscv64-porterbox-01.debian.net,140.211.9.208,2605:bc80:3010:104::8cd3:9d0 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEl2fTGtC6LByZPV4zDA6MLTBMyGeSFoMD0H/v5/7QFDXElKbXAHpgEzYQYYFoC6iO/NrkpAsj48AmOkDeF1uyE= root@debian-riscv64-porterbox-01
+debian-riscv64-porterbox-01.debian.net,140.211.9.208,2605:bc80:3010:104::8cd3:9d0 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB5pGkbG3hTxlZiwUO3EG4ZTiw8ddAI6653aEQmj8za7 root@debian-riscv64-porterbox-01
+debian-riscv64-porterbox-01.debian.net,140.211.9.208,2605:bc80:3010:104::8cd3:9d0 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDCKjZUHmWsS+RfnR4CoSzg+wuDJ68lmw7qSnKw7NvMKY6brMkOjnhEczbsObJWEdaT36A2vDBZuFrMV+9PsEeNpznEIprEe/Id5zfUGw70O6Psuc/moa5QKJzb4Y+fP3AXUxQZP7ss9BiF+80f+wyksZwiHfeXo50F6EeeGxqiQpf8QZBklVLBR3s8wa/rhqrAThBt0m7UISGuH+qVvGGPj/jTzBoxxe6gXLRJ5SKL3UhSC7Nb92gQ4b4ragBx11BqAAxtRx5LkdIJC3Ub9GZP5ZBl0mwGi+oQ82vwiqOgji+wMoEV5TpCTWnNRvOUtrWU4rqfOUwzDyHbzmuUYEy1oMlG19mhxBcSOSUktkrLj+sI4jOWc78FR9tpSNiYTYQcXUNXelif7UM6iCyhCyQPlEDw4QrfTZDcmT33uxaX5uPWwEapsC3BNe7z5yL+0qnq593ClQx6cYtG9kUlTUqxA3zprr6CoGIKJkw8uzQs/DABatSCf6o+D/ePZrwgiSM= root@debian-riscv64-porterbox-01
+debmon-01.debian.org,debmon-01,194.177.211.211,2001:648:2ffc:deb:216:61ff:fe3b:32c7 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO6h932njH4DLts1HsMiqoCmXNoLQajBvw51fXqoA2r4 root@debmon-01.debian.org
+debmon-01.debian.org,debmon-01,194.177.211.211,2001:648:2ffc:deb:216:61ff:fe3b:32c7 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDbEHZ67Sa2IklVtlcBCBQ8riuoYMSt3u033sdpyfbJDCEUQgzkOY4lsQYJw0kCYuD3N40uC3xOY4ZUcCIIblTO0ICySWgw+FYUazr4SpeokxDyOV9/+z5M55jkZO4LK9X816xWFpgSPBv1qz2j4xzSNNUMQ68/47jrxQemqtVxqVMHyi7bzqGFddmH/qBDlDlrRKM8lKcnOG8mmvL7BOuV3MxA/99M/eQvrva28SoJqi4LS9pz8P7Tk8J2AdXRgHWuKEwjgNIbzIubwq9niIvcb8oRWWl8dLtXiCZltmtnDkmfEfljmFt6SjN8GsbjwYM5ARhCLOP4+4IeSIRr+8z4ArA6acDLzfitc3uM+0dETXxqUxL7Szt1xonTI73mpo/HAZ1j6hfTXxaMILcN7ykgcHDz5f8xTrrXrUOGhCLpy6C4VCNgJ9uaQs0O2MDHE03+J+czvXX5bPfsK7rHT4TPRJHYzKmD9ljhsxE42mXMf8bKuNvlUedR1RiR5hAQ7U8= root@debmon-01.debian.org
+debussy.debian.org,debussy,debconf22.debconf.org,debconf23.debconf.org,209.87.16.46,2607:f8f0:614:1::1274:46 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDB4UhlFHznDWUP8uLEcVLf7aPYHXlcYzwFS4cDW7ao8g+GoOSF28haMBhm79tlkjWrwUTDTcXC8zsnKaBBciSPItcHMxd91xvo5KLTNKYbqHXIaLPjAxDqoW+BYWbLl7gP4cTBxKZc5OPgTGeoBuKeUy19NHnqkpPZPIUHJbchC2KO7MGhs47pO0s9JH34HFD4iYz0d6Ez7I9PBOn144wLNW1jSAOB/IHrwsBnWHmsasRoJv3wVa42enovwUIxyg1a/e+Ug07PX8+REgap7XY1WYJEn3LNIyWJcv1dqgz8WdTT4JAS07qiojCZBWZcNrtx+rqp1rojaJL+mxMQ/plJ root@debussy
+debussy.debian.org,debussy,debconf22.debconf.org,debconf23.debconf.org,209.87.16.46,2607:f8f0:614:1::1274:46 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIByOcZ9Y3iaZ2VfU565BDi7qvOQgI52vZ77rHMaTlMh9 root@debussy
+delfin.debian.org,delfin,209.87.16.71,2607:f8f0:614:1::1274:71 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfa0uD9MHoKYDvOTr5At0tvrrAOYL915GLyMDrQ1N0NaBQC+iV21q5y5X0soeU7Ffvhq1jJwz+RHxAwQkx/UHEhxYcAts1loPdDvXXAPjYiBY/AxXIX1vrDQjd3aS6PNM48gzvUgV3U8qUFw4uWuan12wNWNrbHs2l8N9fvyNLsSAO6GVZ/TME7c4LakedbNWvnS1YZNIa3Mc8HdIhuIfV9zxVFIl3hR2Wrex+psT2WGzpKrevah9y/EVgcjUtNMcR5S+7/8av4GablyNNUwRMzWf0+17n3+fzZTy94AQcktjo+pTesvTqTiC1vlTEGsR+wgSZwwB+XO25/SdTl8RD root@delfin
+delfin.debian.org,delfin,209.87.16.71,2607:f8f0:614:1::1274:71 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8hkP3aRXW64DuLhnY84Mi03Jak1NRXWF8p/MZzcaxL root@delfin
+denis.debian.org,denis,dns.debian.org,dns,82.195.75.91,2001:41b8:202:deb:1b1b::91 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCk73y+bb3gUuo5Bc/T2vHhQwfWdcfyHqCVdNKagwfMIHOh6teg6UIVBPtarYtQNGal5aFiw6SPqpe+xS0h59K2D9IYCtQWO5jgaG6Rez7ZZOzvu8jEAEeDZSQo44khO+rHJufinQrp58xGsMI7KC5i/SQxOZTTMILaU98NZ3vTBoMnYj9gFaKdDkfuyF90k+qx5sfDkSyM+qUzSbg8SA6v44lEeP46lbzbN0wc9GaXWR8uaOdDeekxpJgKMQac2wlvRUfgtvmwCN/aGRQHC04IyCQUYI9ScfpdNxQDsiDnM6cQ8W/wZhXvT69FzsTAbNa+HztbYe532Jt+xU2T32QZ root@denis
+denis.debian.org,denis,dns.debian.org,dns,82.195.75.91,2001:41b8:202:deb:1b1b::91 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIh/njiXtUzVS4Gqv+KYbO5oyJ60kQToSjYAH9Czvpyj root@denis
+diabelli.debian.org,diabelli,209.87.16.28,2607:f8f0:614:1::1274:28 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCfbQsG2RHLpnJ55O5Rz6nIYk0HtjlzhCrYdM/4x29GDUTrptD65s61YWpVZYBKFB0PskadEeeK6WXRAvlyg8MkXKyjd1BQdYONwwIYLmZZ799YQHCJ14yFK7bCK5qUFWAHjfEPcRftE5WfCRSGI9UKCkVGvE34c94IaxuB1PzVMWY5Ia721aou0KmaymBs65N4aLlkHxv4n1jLiE0kbElL0ki6CVig6QwWBZwXqIjZN86emxAg1fp6PJN/XOkW5jOinaoLMLuRiFK6ALcpKLyf3+rdeYVPuoHJk5iyikaxu32icOCYmL4PDM4WihwUW7ZvCC2W1Y8VxB1uFVH5EZzR root@diabelli
+diabelli.debian.org,diabelli,209.87.16.28,2607:f8f0:614:1::1274:28 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDW96YhQBJ5XJCGLLaajCE3pUyR6fV39/bVmO21gsjvC root@diabelli
+dillon.debian.org,dillon,2001:41b8:202:deb::311:99,82.195.75.99 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCpi33kipMGkruyOJFBFVREocVv6aiWMDNEcVlfHC+TYl3r5ROlonIsawZRjW1fKCx4wg0XuEJSom/99RYASmDIrGmqjQSrI3jN6INdZK+VVBpzo8zFdk5lPWGSlA/9gL2Xh3uIFUQH4yHWdV6C7dLZMOAIHgPkrXx8tE8WiBM9v2wQkZweACFsJPh0DSeqwg4QOeDO18soyp/WGxKAgyNH0TMwNKpmrZZgKmNNRB6oT8YM9hefgKE+BnC0Vy+m/N0RA/aCV9oT6gNJxiHNMrY8xoh7uo79W94OMH8AndVQfoADep7MOBk06gqD/EZ67eK7cDvB7yS/s87nhd4wcyqZ root@dillon
+dillon.debian.org,dillon,2001:41b8:202:deb::311:99,82.195.75.99 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDQv8bEi7EA0gJH+sEcr+9qX1Mx+ni0SkPzSfy/DPxUG root@dillon
+dinis.debian.org,dinis,2001:41b8:202:deb::311:77,82.195.75.77 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNuP8QxC8GV7S1jLsYrO1VRKLfz4G3HYxy9IxP5oRvz6wOCVODHIueXHV7P+oV6LRlMDkAZbA2BtB4xCcL+YbFPKMb+huBK/tcmk8bVo0HPV1O5zrlKjXfqjcoAiKJRUkhQlI785tMV3i6giQcdW3vBBsdCmbP34vKQUtMgpBITkBZlgdvKhTkrYJXkwlk8dYULLVNnL4wTFNXcIAzGfvq2dxenu6ruZWdNyh52P9UWE/DBWTS9MSBe1bfgRKp/UQIRAw73ytyncuBtoRz6kCabrap4Krn31dxzs1UTXAKkDw1QuxkJWACjs2hzwoi2RcaQdmSsXeejJslAdkRYoXt root@tristano
+dinis.debian.org,dinis,2001:41b8:202:deb::311:77,82.195.75.77 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICVdIywC/J6hmK3sprr6+4lPrP0JgSD5u+EFewM5JTN3 root@dinis.debian.org
+donizetti.debian.org,donizetti,debdelta.debian.net,209.87.16.65,2607:f8f0:614:1::1274:65 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDT9RHdjdT4YrEAWEywjBJvz5aGxnJ7edDcONitGTHnfr/Z4REG1Xohl60wxu0Co9DTm+OR/gr0I0K1rELf2fY3QGUrWk+O21gLKvwTvS8YRsyPovWT87HMqHHVJbYYGc7bM1eYZKevSZqt3ePfiexPemBFtP9xh6/xYhuu39KD7Vkyi2mN6lojmgJ8AX8zg+2ws9ovuoQk2yf5JtOfychRjEWh3E2P0D2jtVesnyDoJsCu4BMtEK8oZJBaiR6GCUWoFFZ3Glo/0nQhMLKPj6ECiImW2Q0wouUsrIhf0Z9eDaki+GfszbO1R+ZQlrg+0jHVzW0cHgoW4wFPPRaqhBHH root@donizetti
+donizetti.debian.org,donizetti,debdelta.debian.net,209.87.16.65,2607:f8f0:614:1::1274:65 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID5HMMIV8/fcO3RpaU7B0QxVpKnEACWeImrLHOv+DrXu root@donizetti
+draghi.debian.org,draghi,db.debian.org,db,2001:41b8:202:deb:1a1a:0:52c3:4b6a,82.195.75.106 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAy1mAS0xIOZH9OrJZf1Wv9qYORv5Z5fmpF0o8Y4IMdS+ZzTjN1Sl8M77jaFTJbumJNs+n2CMcX8CoMemQEPBoRe20a5t3dExPQ3c7FNU0z+WIVFbu/oTTkAWGp5gCDwF3pg2QxUjqYc0X4jpv6pkisyvisij6V/VJ5G1hsIMuKqrCKYyyyiJJytfzSfRrBx2QvB5ZWQxhYeSYDoLDvuF31qUy4TLZ/HR3qZQ1cBrP9dCh5d+GQxdY9LuO6zjlnSyU64GHkyjYt3p03AKG4plD7WHX01bD0DQQ/NOFVwFhOZ63mePyridPuqBMFW39jBf4jSsewV95RE5VbY04+MY4XQ== root@draghi
+draghi.debian.org,draghi,db.debian.org,db,2001:41b8:202:deb:1a1a:0:52c3:4b6a,82.195.75.106 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINNoIGa6KAHjeHt9TVfLcI10XekeMEF1M2vKtLXx61ay root@draghi
+eberlin.debian.org,eberlin,2001:858:2:2:1a1a:0:ba3b:769b,86.59.118.155 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCmCxcBakkqfFCPCZtjllHYauO3xRR0qRZiZcumbCeEOGjDXcAjGgdvE4gpSuQ6qUVrUhyYVxYfKuFMmp5e1U369mngQsDUg2zFYeGb2Q7Q9GA68ADWjGgJW1amxMPVSwN/PlDKU/d55UJQdeoB9iF9+J6iVIwTUSQATnHsvURqCiUGgqi0Iak5fLVLvJAj5C3fMxMaESjKG5d9n+tvYir5+x5O3kT8LWKzoB0EGGzcRL+gCZDmqpIpqTEJKkqDwTH0BO5wbDPQOoEvy4q3y1M5gkEZI7kF2qZx8MA7ZGJQrLJgqqFX8iBT26e8zvybd04VbM+8gD7C7Gjdtgj55ryv root@eberlin
+eberlin.debian.org,eberlin,2001:858:2:2:1a1a:0:ba3b:769b,86.59.118.155 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFWOs9LUp7japU0hjg5sL5Xf5GMAZKWEkAuj6Slepl+d root@eberlin
+elgar.debian.org,elgar,209.87.16.24,2607:f8f0:614:1::1274:24 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEfZuoVBYjNgcTKJGClM3gd3VTvraxYLIfarviyAi84kAQb6++wE4QP39glgAy52UQ+3C7SOQRTBzVgArPqEMvtyAAKrSwTNfzo4geRGQ2Soqy08r3P6/BQOMZYk4TrFyYXog4DbewIYhD1eqCzWfrATAvW6dI/9ArLGdpYDZfL6FlX/nZ4Yokmr4onHhq9B97CchanmrQPt0l/QrSTn2UIZOaBVVMBuiF06vjvNA0Tyws8owa6Heo9HIcvXuPq8tC/ua4ribEr+q1+BP8HV7cj1h+g9Gou27CqOqHFbZPDefewA/g1xX/qZvFKw/Lpc5CH5AY9s+QO3P9X4g9na09 root@elgar
+elgar.debian.org,elgar,209.87.16.24,2607:f8f0:614:1::1274:24 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHJ1ZqCuPwixb7+19XlzIle4jUH5GPQOcKqkXr2i4z4f root@elgar
+eller.debian.org,eller,141.170.6.156,2a00:1a80:1:d::156 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAVYkijbFsY4wBn4FX68TJy1kHFq0dALH1QKxao6lbgk root@eller
+eller.debian.org,eller,141.170.6.156,2a00:1a80:1:d::156 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCmV3X57Tqm7YeL7Ldlu4hhnRgU+IFzqvS+wLcQEdSDr9G+89xJE/K/nvNKkrRrkPlyixckPUwEjpzqMrjrLhmypJBtrziZsyQCGRBvv40677VRxFry6U9K1kTMoRtdkbSFDg9Npu5g7OS85VIe5tMJOsM2EKR96SP71wDbccjNMoVvw5ajeDR0z1uMz5ZbNR4PfeCCIrKonyekGFZI0R/b9oXOXAiuKEaVtQv9u+SyLudz/gyEv3/S+ZD7MLSivrkhFj3L8CpSGEJ80Xsck9Y+3NgGAToDKDXqO/EO99bvWRYHOZ1kKcCqyyDUIs/IpWbQj8BuGM1JZNWhaWi2q91b root@eller
+exodar.debian.net,46.105.42.112 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZNpA3KsUu+vjyRR3Oz7LIpG9FRqmL2rFKQJA98Wh5NPtlYmqbZzWQei6IgFHnSZ88NHZK2CpB/YqHMyjGxA2AcjCHM2MxCmBStt+LjtygxWkMelpvT8pLFOWlGys/HdjjmieQ4KMdlLn0qbU6weC2sMJiApgCs8K4dx9BuHDjX4kQTjbpPDrZ5ZiTJbARPJpuiTZnodzQqnnp2bIz1kJET12Wo2IYnDJlWFRm/ghLn7i4kODPbDsJpA1UunFuggVTLZiJKGyKU8SM5CyNOpINQino/O0DvrnOkOxrs8cdBHaQ5suZ6f9sh/GTNoJOAHDVGIfNe/91Pwk2HHX91eyR root@exodar
+fasolo.debian.org,fasolo,ftp-master.debian.org,ftp-master,192.91.235.231 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAL578DVXXfB36x90h4MdPFCg7TDplp/vR4T0Yi4qspm root@fasolo
+fasolo.debian.org,fasolo,ftp-master.debian.org,ftp-master,192.91.235.231 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC20Ipx4hP5FxLsie36ZkYYmp7EwHUqLkqoxKrEAeTFUjeXnaui3yURjnB5d4r59Wa2cJrAwS/fIJ58Fmw4g2S05J1RuPhMkJVgwuC2lLm/mBkfTmsfTEmMczL7+IWwz1q8xOe8qqUHeB5IXB5O7ozT7F7oqlEuTDBEWeaphAJWVnsHzoE1Wsww3CxA5lR+qBho3EzLRAqyQg1LWHiTqmlrjh/qK7+Gi9281B7dwuu9LEqbz7BfVLqDRmjYV5h1erMAM4f/Xb06LzpC67U1nZm/zy8pDjbNKB4QMfGiOwV9/PxaEWtjcdDhVeZHARd7muuBGAUzBodAE1Y4aMwCaAX/ root@fasolo
+geo1.debian.org,geo1,2001:41b8:202:deb:1a1a:0:52c3:4b69,82.195.75.105 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA3Utnz2UmPceFOjztzHvxOADP8DvVJyfdZ0ihuiNspOv+WaxB2TuNhMkgTVPcE4Y4l+5iF5/RVkROTRfLKn6Y0EC8VuFRrzC+2I+KhBAp2aZTQI2wsDOPYeQ3qEUkgGXj6QYG1g2ovjx900I6F8OGNbk6ux0bG9wdvHhAPNfyeSuAqPjqstq5aG28W/PQohfYCdUccEWZ/gDu2cItakqNhwhtHtBlJ2WPKW6Y5vNSKU2e5K8yE830Ltjn14shBZ0L2074/54rVa4AVpe210Dt5YhwKVBmDNoSKlNoeihL6rtJ/0nlRS0xXauseZ8UkbJKY5TK2gu2cax6ZxqRO47xIw== root@geo1
+geo1.debian.org,geo1,2001:41b8:202:deb:1a1a:0:52c3:4b69,82.195.75.105 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID7alBKr8StzLbBLE9LpiIx+3PdAHeRrAflhOXGEHETi root@geo1
+geo2.debian.org,geo2,209.87.16.31,2607:f8f0:614:1::1274:31 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxelpwd9wVqOcGs7Bfca11gfs2lV1NCCMcb1C43ccePCywqZ7Z1cZY0EHaDTX+HOH4xudyJq8JAmgWKZFr7/RhJdekoPDKzSYJWv/Uda6VHMfPgXkozMzLOrjvX2i6dvUrNA0iNEHyzwG5k+4Yk4hTUrs46liDM3mfqHsL3cjUcvpRCsTLV84WWSJjhinGX9uFojjntWYN2ClS2IR4Shhf+Fj0SN7vXojjzBRUgPuwauAKyH/EkcQTvlDZW4/VAzrfVobuxHBat6dEHu5NH2bIaWyWZf9RFVZNtNEoGOH8y+0pq42hARgYAyAjBgQB1Mo/jOJ+/xLze6ZH49CwC95OQ== root@geo2
+geo2.debian.org,geo2,209.87.16.31,2607:f8f0:614:1::1274:31 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEKR2E9r9jrJUDvUI8VotlVaC0Fh1ee0uob0fyphxNE8 root@geo2
+geo3.debian.org,geo3,194.177.211.201,2001:648:2ffc:deb::211:201 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcLa2P3gS2+pRw1ycRHodQaCxSZjhXcOItoQ85CCvs4arAX3gjWyRcjM2D1aOUGG4mkrHf3DXG9Idk95gS9Hj8hA0TUbrIQNAqKfDm1zCvZpRhJYz3+LJAWRWqwLgb/NeUNb1gHUD4TVTdB6uU9ZIeBEiKV7doHWh3DvaGXkpNPsfChsCsEhet3bvhdiQZqIZjbcX5ISmNgNDSRw/taLO51/B6rxOVvE35Z3FULWv4FAwgegQcFLKhNx7ZGZODTXuMmk5tHouY9Vw4beU2IQGWEb+gI7gmoY03Ae0ORfheA0zqAL/kfbpc9itkthBhvNlBix0XChmi4EUfoH2oWqeb root@geo3
+geo3.debian.org,geo3,194.177.211.201,2001:648:2ffc:deb::211:201 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMW+TIEaLp1cm1hIWZjwqv77O6T5tNAGHfSXcU5XqsgP root@geo3
+gideon.debian.org,gideon,push.dgit.debian.org,push.dgit,2001:41b8:202:deb::311:78,82.195.75.78 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCYqnyj1DmotwOfOh35/YRNkZ/EIye1YcxaaUP21R/6hgfujh7jhBzM/njJ9Eip8/Jr3Yv1krWzGs8vzhhqFjNCCr1kwmYO8Xh/echhPtgs49Wopm8zcpo6BUYXxvnyB5C5NGrm9t5XPBNYKXa5zZEOwRuamFoWyv9oOSCvPcAUvH1eV/E/+BY02y10UvpKks092EjN4m3xt5GPZI6DXDpZeKNkxef+0hib1m1DO9Qjq2OK/pUQV32UF0o7t5kBx2kbnHxBBJjreCYHuxXAAWNlSQs57ogB3OXzbRS0gubcaCqNwm1nrGSQuC5ztjR0GBbBjJ1Q0tYTM1NJfZLXQsB root@gideon
+gideon.debian.org,gideon,push.dgit.debian.org,push.dgit,2001:41b8:202:deb::311:78,82.195.75.78 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILGX4gkOcTOhHBzBOwLGhxwJYVds799OfVZ1mME+Sq5A root@gideon
+godard.debian.org,godard,salsa.debian.org,salsa,209.87.16.44,2607:f8f0:614:1::1274:44 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKXSHb3wNeJC/stGkU/0vCAGpw4A0Zm2bfClmK+zkZWr root@godard
+godard.debian.org,godard,salsa.debian.org,salsa,209.87.16.44,2607:f8f0:614:1::1274:44 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCr4ClEmJjUlngh9cG1T9zuD60DaN1Rw/53hhz4njq86PzAo/qT88RuYEltzYrXD33nVOAhJZZkdKGiosS6bQBJhvClOC0pi6lJbbhQDaV95L/fCjXCDWZXqv3zaccE64RigqTDqtbMbJks1SOBW3wwuC4tBUldELITWusavr5mCoVRNT5INejI7nHDnfV1Fa+VNW1S27CPg0GOD1coTMfRIgXXnoCrHQ5g8h8Q6rWspNoxN5jJV5e10KCAk/DiocA4aq2UVtErH+ASjR6Zk7jQ3BVQk1cIjVER22Q3BA7zXxyKnn8Bc/Gc+HeSon4dWtDyVVlDBrCbxJW48AiWc/z9 root@godard
+gombert.debian.org,gombert,gobby.debian.org,gobby,209.87.16.25,2607:f8f0:614:1::1274:25 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCU2zmY9zdsCVAHN+QfIUO0c+6/m/uYxUZnJNqM40BErzRu/NoCqOkaUSfekYxeXjjgxvO/pv7G/fg1T8oqH/pxP/ENs0TlCCacaOJWc9xpMAusqM5cC0KfRLSSNwZEG2qbPaVdoRLLx/NrKab/GD4K6wLJ6IUQd8yw6HkQA34W34cPcGq7tOUn8XnD/9TMYOZVfcM2QP0MpESif2xrJk1lSyQV4SMTORTzXMmIgtV8P9Pbupleo2apW1uVvdIk9BObayapIFfh8O73JWEyyrbyxST4ESfpfZXEGsrDOgpm59wgjb5bfhMj9AEGYTNRsVStmo6l4ykQVYQNpAfRUAB root@gombert
+gombert.debian.org,gombert,gobby.debian.org,gobby,209.87.16.25,2607:f8f0:614:1::1274:25 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAfUwnxZeM55ltQ7XxpG8bm4oRxWRt+eynCfKYZjx1YH root@gombert
+grabbe.debian.org,grabbe,alioth-archive.debian.org,alioth-archive,209.87.16.48,2607:f8f0:614:1::1274:48 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDED1M/0KgwDIXNJS6euJsJ8xywF/w86pzaBtoNcrXix2kdPHosxi0+FSDg0/AEt7A4EEDUF0fVYfaPFYwQJFFgRXqZB2Ig6IuIGjd7RCVpZH1Ash3m0Z/9MrlJrIryBet9Vpx7UHSores0tdcNT3OxAK5vjJl6zklx7dxqzbNz+x0ttCWXj6iUhRAXYKQimSbJZp7R5hHtLeWYhofRx48nJvTl3cKOeKutk07DmJDx1wkF7vIJ2JRTDM1FmoLIrh3AJoYqxOKGnodohhg1rhoae3vWVlBMROaXyHVQxHj60bl/DWvZRkZ1BCcb8P4gDfu6qlss2urVU0EvYjGOT37/ root@grabbe
+grabbe.debian.org,grabbe,alioth-archive.debian.org,alioth-archive,209.87.16.48,2607:f8f0:614:1::1274:48 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPPWPdwbwfKay7MSCvP2kcaTcgN9XKCjkU9reIhl+YWK root@grabbe
+gretchaninov.debian.org,gretchaninov,syncproxy2.wna.debian.org,syncproxy2.wna,209.87.16.36,2607:f8f0:614:1::1274:36 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5MXd4IcTJW8UxrXWyYldtTPHprh6vIN9r1nAAt8TAQdkvgGm8rZyK5ich5TRor9gYewbMM0PTMQhbQGhswCkNkznsTB/CmNIPIabmcGZG6EfKORikVgPWRAaGARov2wzwfYlmW5CsP0R7XZdcolsDW574bHSZWqfXIBEvr3Deb0baehqK2RYKmz1PMOy4Jfj5Udfvnm4ng1o/RdiN6tZSnPcI9SzwD/yjlgxtTPIbkJqZXRGUoM+Xv3WD/VOG6Dp1Ldo5CE4+YygafXtG4XoCJLuybCKNevN0LombpeZ7dd/QoMOJ2Ea412VRyGwOUDmogm/2uo2vV8dfsGrxNgEF root@gretchaninov
+gretchaninov.debian.org,gretchaninov,syncproxy2.wna.debian.org,syncproxy2.wna,209.87.16.36,2607:f8f0:614:1::1274:36 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBIkKlrP+o3MY24HGjTnVfSHo2cylOB5sF54Hx1+Y2dw root@gretchaninov
+grnet-node03.debian.org,grnet-node03,ganeti.grnet.debian.org,ganeti.grnet,194.177.211.197,2001:648:2ffc:deb::211:197 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGQOuGl32D8AO5RlMZIMRtV5GR/Qg+5gp7iS+lg+uqTO root@grnet-node03
+grnet-node03.debian.org,grnet-node03,ganeti.grnet.debian.org,ganeti.grnet,194.177.211.197,2001:648:2ffc:deb::211:197 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDy9qWoJSW1pBrz2FIj79Y7TkHgShXQpjmxFj9c7a2eJ5TajQ4o2QT3DVvAw9yWMrPFHXZe4jyjsMrTsYvclkZjf0VwMHpeztDTKtr4S4LuF0G8iL0lbayd21MJ8E/BJeqV6oQTdvAUltg0jFZM8YB+4ElY97ZOBmfq4FH5lCTQ/+cYnMj3/9xEqTRGCkgpFYmxPOcAk50dCpK/sv5UHciurixAt9P1HVWDyjtgodus4aD2RxG6IUILb8CwAameHXjEPeMHd1LHYJzxCOM/5gBGfcxsUvM0xgYP80IoibkL3AqlUrFCu6uoZg/DJi961X4hSG+8+A+6dbqMitM/BUR root@grnet-node03
+grnet-node04.debian.org,grnet-node04,ganeti.grnet.debian.org,ganeti.grnet,194.177.211.198,2001:648:2ffc:deb::211:198 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMsvXagiI9+Mu1+oE3yGLd6Vrt+TIT+COitQdAj7bx6O root@grnet-node04
+grnet-node04.debian.org,grnet-node04,ganeti.grnet.debian.org,ganeti.grnet,194.177.211.198,2001:648:2ffc:deb::211:198 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8+kuhkGfebBXqCx1+KHsv+zvuCS7B1T7aTDwBLzBIzeqKKJENMLFOgtiwuPaNRZ0wlcEug9/k+a/SuIG1XGlbvNzTao/DCvYGTBkMw3USjDSRJJ7YUVausXHUQ0UpMiUZ0cpGh/u3DMGmZLk4YKO+1SOSiKYvYXn4a19xcDGePvW80o3savnlm76ELKefdnPUEJqj3grP6ChcM2rcKohVv9hXr2CqPrBVMA2b9nBCMNDO5UlsvHDof0xuXKChCxM2sp7xloSFSt7WvsARmJ9N5NsiDoKgtg2q9Tv96y7haQPs4NmEvWq+graGc2nsBOoi9ZXInRmBiaT/39UR1/nt root@grnet-node04
+handel.debian.org,handel,2001:41b8:202:deb:1a1a:0:52c3:4b68,82.195.75.104 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtgIT/cR2yC78SS4Voue+U76Y3XRPuNvpw00jG+3gN+xlSYsFkDNvSu/b2GY2ubeFfVx3aVTZvq4UjSz3/W27MTgk74lofkUVUIQToVX6jlxXbp+dqhTLrWJEND0T06OnC/PZjVqT8pvVpLK0FZXnsjr8hF0w0HpNCrWEhbEyjV6i7L9LUQ1I9BPqNqB6+rLinXUWpjZb9SYUabyczwebytvyV+YujNw8z8+yGOPZlxAXmgfRnvBvDR9R7bwqNZAcg55pRH27eNm2tzUI/n8aIXa+gbYWgq58I0bTRqkirjilmZMcHbrW9eIpVyUV0jIzk/sN2BslILinUnOXLprrtw== root@handel
+handel.debian.org,handel,2001:41b8:202:deb:1a1a:0:52c3:4b68,82.195.75.104 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJx6Kt7gLgRNJ56f6MEtPTMiTfPt2KRCW/8eFSwE+wep root@handel
+harris.debian.org,harris,217.140.106.117 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINxyKE+FLTuBFBz7P+X9uD/4CQqvWeYdnfoyskmaOguY root@harris
+harris.debian.org,harris,217.140.106.117 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvRoCTLfxvbKRFl4VXP98/Uww6bvO4A8i+WmpIaXOLKYpGXEvoWvSzTgSKDvLV3vhnPq8nz2UVeLIOMNRqiWvHwaVAKxNk9UEE2E8MDFrXW7s4D9jYMLOqkrELQmszNjASssJ0XAIQsVwSP1Cf1cApr2REXf//XQ4REEpM+EcdoogJ/CCpzLzxecZMrWs+aeSvZQ0abH4vZbT5eXgYS9U5hfy/hjnku4zJXRWlvlJKjmk8OLcIkjagMO+gkPz122DFdIm6vkl/xUa0LKDyGPXU8rdKN29I3l+vxgdy0wndHrKy5wZRmqYPe+L/I0r3F4G1hp/6lfgAaDjt9+ZR4EAh root@harris
+hartmann.debian.org,hartmann,217.140.106.118 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGECPeO681HYfcWls3SLALUMfT6PSjQZuPLEQ/xP2MzT root@hartmann
+hartmann.debian.org,hartmann,217.140.106.118 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDaPzKzTRWc/BA65pxZZI7tRsfvfzAKGkENlOeums8kWArXDChykgwuUDkBEPWwnzzoiYiAqJjPknBr7fFyWYii6HT/aO+zkrXOdO509mOk5KzLHqzVgZSRkV0CLgOqHKg1wHGehUmajacDKwEq6IZP4/hXVkN2hHmiAaZMweAibg67wgs0QTZLb7xPXZi9VjuMCacYpwsCeyYDNWIk1yfMv1gHjXEJANRA/smBEzGZdSae0fMjNDPAAS+mU0WxI8EMGBIOaF3FH/wTBbJfkVNWc59C1mOzrfRNhvvpinOMs/hFFNlKgJs/yRl8MXoQR+esl6Os4RR/oKwaiNDYM8xf root@hartmann
+hasse.debian.org,hasse,144.32.168.75 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEvi9BEy405XR/k6w0qKPjFiQi5H2Gwle08SfKK0Om4F root@hasse
+hasse.debian.org,hasse,144.32.168.75 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgBJRMrHF/jNDiFbLXx3aY4chF5BOdKlD0LvttQpUCzsuVCkPGNur5OPT0Lnf5+zKRx5KvXzvVCpIOoDcAIDGdlKsJ+EP940lwSCS9+o97bHhORxhra/fKJ9xGZPiUUOxNULxIpaVbSepaX4th1BPghixVwwXb1M16sQ8xIrj2JyUicXeTO6RK9G1HMM7V/Q3EdHvm61P1vOA3TdMFrmh8PfywygQP+TS8tFyp65/HQLc3SJi3snTE+jquy1GLrv/hEq1GKw+El8Ss/CxMgKYVuKH/SvIBEG3J3EMkNOyciuIFIceMkazg6jNRDHYkfrX6vkBxe7QnT0FLiNS9vG2B root@hasse
+henze.debian.org,henze,144.32.168.74 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMy3V60L2mZIb1Y14TS7fEJ6kGn7Dln2yGUv11GQLjtz root@henze
+henze.debian.org,henze,144.32.168.74 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/mwOLIP0L7CAC/DfWPE1Hhl4qpfT9CIh16fvCKTMis0Lcyq2fVQNmOa+WxIBw8m+2Joz21aK9W8mI1Y+ZSCcJwLpoTUK8YhesE5W7XmQY86PXbGww1zBV4xJ4rnqagcx3/yWcHyfNstfxkny5k4bYcZAlfI5nIpMWfSmtM43LrWl6ex9NXtMrr8jgYEI+TDdCgCVk8t4WUyKXuRepVcxQ8+6hsB4EC/ts9zp+3tAi+3thp40nd2nSIhjL0HCDdh9WdB3SbkUqKtAHw53p+/OpPCa9ajHJrH5cQ0DxzVnbS7OxrhhQ5yAJY5tv9FhD7yX1cwcA6sddxoyijmPLvapz root@henze
+hier.debian.org,hier,209.87.16.43,2607:f8f0:614:1::1274:43 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCh+tOYw7k9foOhL8tLmNLBqA2ufiEd7aKQR3jFqbxGPSpLPcpRQloSYNkRa2cXPR7O3LE2xQo/7zrLVp2vtmNNYxvyd3NLNTiKbrVOC4CFxO61dkIWh27HzmZr350yY8+SLuUpQPAjYB5p1VebMDY7VMGqcDr7YMbmmyatHSvlTu+qVuyQfyiWygM3+YRBBWAneG3NdYBbVSJ8fKeDNI7hcNcVF+90WpolSkqW7Ag6meAMwzCE/1L49cfJmDxHGr3UJEVFMl+6qvmqK9P57AnSi9Yb+OA9Btixsd3TYaiK843A6VyAa1TvXpatllrRH37iZqH/9JT/vT7mDAmDPglt root@hier
+hier.debian.org,hier,209.87.16.43,2607:f8f0:614:1::1274:43 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJkhdzuoggpJgZUe8xSF8yAq5w4QitjxqHd7qBdveKIU root@hier
+hoiby.debian.org,hoiby,217.140.106.122 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGHc50BG2sc+35TQYI5NljcL6mhxTl0vIyTANGgBw5kr root@hoiby
+hoiby.debian.org,hoiby,217.140.106.122 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8GENcahCYExyr2H6geaUqIPpNtCcWuSQTIb+deHV/QD9pKuYtvzcWJ4gVQWDOXGLmKO1iowEEcwBi8vRDWrfLAaULhRXCGmyUXgBvTRUODEV3SEGzRb406oxhtplY/4fy5/v9xMo471epGJojKY0/vS9YxZLivmsnfQy662DchSo/WbEXjfxcquMqvb5YSutOQtrM6fr+QVa3dQfOwdJslvbJ6yS/Vbe6oodMk9t47isCtDZFweH+39hcFwii4YG+VFFCNF3/oSGSf5yTfxUee6evQE6VbjwB0QpLM+IpZ8TE+J0pl5yMyoN+AceDOQExTyv2B2/WswQsW5os/hc/ root@hoiby
+image-registry-01.debian.org,image-registry-01,195.192.210.134,2a02:16a8:dc41:100::134 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDsm5oPOGdzMohfSpRjRQhlFhOQ0Wju7IBwfVT3lR0Lt/AKV+4dLR6vyLsPqmgj9onZIYXGvjZeQ3W/jsxhZucbvw/LKo/lwmHIfEm6e18ZOc4tro7HQFA4yvvRB6k8g2NL3xPhwqJL3RjhDxtcVAS7eJ1Fy66MVN5MX0Rkv7uXOHwwIQB5ax61ZSWQ1QFT/u8+gC3WPUSJzAyXPJXljg1GUiLmDdjPPI8HcFnp1ZyQx48ibnjAjbJ3eQIgQB2C/5Urkmxn3259Xm9YHHOqTnfiNyptMuaNXuZ/AsITpmX0Uf++mKVqiKs2A7PuEGP9I1WnDMWozVLo43gOjdVJCRw7 root@image-registry-01
+image-registry-01.debian.org,image-registry-01,195.192.210.134,2a02:16a8:dc41:100::134 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINEtfV9J6WQZef/qEHakCKZR3n0uxoirKnifUpMocVSW root@image-registry-01
+jerea.debian.org,jerea,209.87.16.66,2607:f8f0:614:1::1274:66 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILiOw4O4qg4ietP8n88vcr7N7G0Cv/Ta8mq7NcYFuYQA root@jerea
+jerea.debian.org,jerea,209.87.16.66,2607:f8f0:614:1::1274:66 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHKDkTVF8gRh82Jp3KDPRoCrqgp9b9ROYqANyX6yl/VwPE0bIbagOdgAnXlZYh4+D+G1EPqHUE8pre/D5AldiFBA6JC+hAw0/j5X/xhmPqVcJiJ953cIFVeBma2VDR1oWDNFYxtD0dhrSlCqBbF3sTKWCeRMJXjMC+SLUTzbEWvXIXNE6mTZ7iRS06utspyF2VQiIYivcsltOqR0MfRJEo/vUb67OOtPzwMRFTIbdkbyHru7HRRHjKmMGI+iszz0mjbMTJAkoaRr+1hHBIG3cZkDaGrTxCTaGZUzWEZ4Mp9e+KD3hjoDHNKOFsRaYw24mDaQiz5CAscIwr/TXSlInD root@jerea
+kaufmann.debian.org,kaufmann,keyring.debian.org,keyring,2001:41b8:202:deb:1a1a:0:52c3:4b6b,82.195.75.107 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA3Whk0wueawY4kJN0sOFitsnBb+dI2AbQqQVO57hEK0VlPcThginpxdEqmtxfLRG/alh//EtH1TpBj2ukDZyQV7Xl2N3oEI8NDuZjIIpyfJZNxNf4AoDa1yZONjap0pVal5qQ62zH+hAj5oLo2QhLtaHG6TsoatEBIv7yReJgvWuqQGeb4eb/ZBjY0u+gkPfiqUB8NycU/Qlg2RSuUugnzvZYZ8PO2jGN72SOKEDbwwggR39nkrOns3f3x1eb14wWQjIHeln5a+Dx9a2CTfy+ZB42vbytN1XuGEPy35RFCZt0nAtopiz+e2FpZwkyanPyxvXNUHqRICamR+q/o7RFQQ== root@kaufmann
+kaufmann.debian.org,kaufmann,keyring.debian.org,keyring,2001:41b8:202:deb:1a1a:0:52c3:4b6b,82.195.75.107 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILLYWvsVdpE2VIwpK7d+YYeu8DlZm7UFdgddEpTGhphZ root@kaufmann
+klecker.debian.org,klecker,130.89.148.77,2001:67c:2564:a119::77 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILGsExZp1YoYEuoi+8NicIwoIzEYazSwohadRu7Isr69 root@klecker
+klecker.debian.org,klecker,130.89.148.77,2001:67c:2564:a119::77 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoKGHjwLnDoteieHU2RliyQadpsdHV/nsjaUzcNvaIDkKF+ePAfsRzNaw8aCl/t5Rzj75PGMramYE7M5l+3CJWEGmoKV5PweZksT0Bb2a0MGxfaCHPI6Mo/YJSliekGfNqaL0HINIQTLyMB27Ohi7W2Y4o7rVQm1FAMPrwCXlSPa8mvw872JLc54UWzhP9ACLJh7yWMLNCS6JjeJADEEJzRo7RW/kmNhxXncEGGkCpTDg2mA0ABD3XOuMXSusof/8hGYxjBhmZOFb05oCfUt5Cad1HV8d8tsiyOf5GQ9RhyiTHZmDesgSoajyAXwtMmxn8p9AptYMDRCw5ftMd18FZ root@klecker
+kyoto.debian.net,160.45.32.162 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIrrks6ft96aOSFN4tlnVbFB4kG8ohXLDEi5QQOsFR1G4rY0G1kTsyN9HK6Oh19Vmw80QeYe4/w4Sz/iV0tWRJ8= root@kyoto
+kyoto.debian.net,160.45.32.162 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBVQzwUgmgODlaOrNFWWKBKkNCggsISStLsDlDeVB0JA root@kyoto
+kyoto.debian.net,160.45.32.162 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZ5fuzW++J8hEHD1+2sSTM2A5621q3ikwhJwpCa73ZS8ZA2mTsB+6WbWLAxRCUn2cpwVnqX7HdG/08bnUGZREQ5mwcGpEH7UaErkUjxrwU/ZK8n/n+4BYGJA89FDjB2hk9h9eLPKktVKXou9WbeAfwe0Q55/BDqFC342FZF74YaKtoi/XaPMR/4V42EFWsaAkq1cM3GMjXOK+j+IrN57UxzZugMJjfy+TMwUyRFJuKAkzI+McgNwKVoNLwO2R5p0tdIBaARsUORslomr109mOsWv9Q/70CPj4C9AqbGer6OVJUNQHdaRpwXR71x7VrtRBIzc2fGKDgZFL1zQTW5oet root@kyoto
+lemon.debian.net,192.33.97.1 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNAhYM0sabGzlzGcxXC3WIVcvDVxeMHQUewOwnksz8A+K3tWEMdRriubGiz61BStxs6MVzcD68DaecM0dgbGrdo= root@lemon
+lemon.debian.net,192.33.97.1 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOXXtVi0jPTSu3z33dPJA6o7TmRCDx6ACRVXMrVBjdqV root@lemon
+lemon.debian.net,192.33.97.1 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDf3W22rlqyQ6Zsm8ubVD+v0EAN7VzI/OwSDx+VQz5zhKPPqwg53kP7EpajU/Ehv+R/0c6cJYbfEYNaNcu/8VtwjDEDq+hJdko31hR/W/cXtQnCpeoHrA5y4IKhJYmi+TlM2lQZEKkFWS4KMHE45gzfrAQ1bIuwL4/xte64T8O4UwxWnHOu7fE8goalO3FD4YstFm2TzVYjiMRd0eFza5PJNltloiLofei6MLJtdLoW7F9vqG7lQfhBRfG46ZyXBVZH1yrYTjk4zxRnBEvk+LKhMYFZ9Nxzp8uKmHTAWXXv66tVuTGbOheFVwGYVZJJccMRKbn0ZD3JDAji77whrgDMcEMlN4XyzC4v7WSi0dZjEfhvrYKRUoR+Q6k31Irc/hwN+UyNfv4TAbwzCbiWZBSPdwI0J4myhOdC3pel3WNX0wCrS6D8FouDVh20rP705QrnFDp7P2W7YB6Rd/d1ZbGSMtDeNLX7frg3KMz4JXcq/ue9RsUvoxvS6JyiKFB1NbM= root@lemon
+lintian-01.debian.org,lintian-01,195.192.210.136,2a02:16a8:dc41:100::136 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3K19jpwUINShy2Lu/WmaXSJyIw8i4C4hOkwFF19pgP2vQ6qsUVTl39ut0GdF+XhANcFfWjnxEdz9TBdvkmNze8LQLVVOngY6HD39VI8p1/C0esfmj+31RPWz3NGbjE02gIdaUkkYJtQGokn3yiTS+dmvaau/nO6MW6VmGh6jzxyTQL/wGw5ahSPDSHWWTbcx6FvZmVNsk2mBr9iwBQ+1pgX0Slfkmv/zrPafXOMGSs6M90ZwqBAQe5OzJNHLkchesWxPQxp9ZsgylqDr9+i3XKalVwduSCutNczWlkwjqUuHbxJsJNSgwkysQAkWHz5JlQxIKH8qB9wzQc59kZQbt root@lintian-01
+lintian-01.debian.org,lintian-01,195.192.210.136,2a02:16a8:dc41:100::136 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAY/5mbV8sjHTM7xbf5TsKSx5i3NRqFG9DNIFafSfFIa root@lintian-01
+lobos.debian.org,lobos,2001:a78:5:1:216:35ff:fe7f:6ceb,212.211.132.250 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIh4hZtIvW2qXYD3xal3wnOaqkSEXruOpHVVg/Uf7VSm root@lobos
+lobos.debian.org,lobos,2001:a78:5:1:216:35ff:fe7f:6ceb,212.211.132.250 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4GYUwG3ikQamZHgJylndjiPoB4y9aZZPLBiQeZJ2oac5pq6y2k3M1impGUl/5SfoZ0uEWQAaqutOaquSV6SKC4xDzUbi/YarZVs02HvBTrv4wIKQMkh3+Abv8Ljq407+jk6fktyM5K+C5DaTiZjdA37LIk86ZqoG6o3LuLAH8YZ7IIn3vdD2p73hzS+sTHdB33/oPIkRATUH1GUsZeZXVZhGkVxvuu7qRXeFBCZQJgODeZoCfyXYFR3RdqePB1yRngeihD+UoCgCtY2DM0lb1WzYagsJTCGwP+hK5TG3K8e46quNFQn3xXqSeIl/sgyvS6u60I+ZhKQF8wJttoYdL root@lobos
+loghost-grnet-01.debian.org,loghost-grnet-01,194.177.211.200,2001:648:2ffc:deb::211:200 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIOxod1Fy4aIdH53Thean6aSBg1N74tuzQ2JXcWofVmE root@loghost-grnet-01
+loghost-grnet-01.debian.org,loghost-grnet-01,194.177.211.200,2001:648:2ffc:deb::211:200 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCSUGmDObVxk080g9MiCO0HeUPVOuDUwFd9AvyI0tPav3Xkgz3VWikzFgx5irL4tip2w5L993r67GSM22iwuinkvOWY2cMuskB9tXBrRxQsHWh4RSRp27dNN0PUtzKMEffDm0zUQt5JPb7kCZzXrMcvHGKAxw2GgrEZhzjDG2B2VbGV9rNjhrx1DSQcISbUJiKff0S4T6DQK8IoqLkuN04LpuC4nImkQUqpebwlUwmRrNN2z1ACRZGmv3MSvgbl6kGlE3zd65rUjgnckhftvFSdFQ0qDwd3i9tVq02AKEC34sjYRbDZppnlpooVR1DkbrAlW76B4YIVmd99HXZCLzRd root@loghost-grnet-01
+loghost-osuosl-01.debian.org,loghost-osuosl-01,140.211.166.202,2605:bc80:3010:b00:0:deb:166:202 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEeVpEQsYayC2P1XcFsJ7B6JTHhH4YgWAXdEWRtk8y3J root@loghost-osuosl-01
+loghost-osuosl-01.debian.org,loghost-osuosl-01,140.211.166.202,2605:bc80:3010:b00:0:deb:166:202 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUIG1X97Yrq93APCLi8m//C/tJB6mFAeCoV+DDHVOlNrFdW+gcLjSaBUts2P+wQPTSqTXcvv3s57lIbHB5z5SxCKI74WbL9qNXtPmOsEj+RA+3/sY+AJCLhlI4jL+I8yQvgK7nnv2dPslg4axLHmkFppe/PpEScBLDo100MVZybyJnLKobnFPPlGoKRHTwETelHiOKtv14DxinANqkXY000j+8VzkQEZE4xnQwpysZEmugCz/3djggm0Ly8L6g753g+uUsbBBLTaaWgq67cJjqgKp7KEjc8uwMsANh8Nmn+GhlcqxhMCSiT/YPLJMzeWbQqKJuoqq6J7vAOmSrASMR root@loghost-osuosl-01
+lotti.debian.org,lotti,209.87.16.32,2607:f8f0:614:1::1274:32 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1+PgHDRqjK9eCrzCOT2IbFaEyXnC524HPjJy7HVqN+8BYrMDGLADhjufyujz4eLnRffjl5COFnZEt0IGn1cvdE3WhwfReoEMT5nLAcT+/W4RGcbFtX6nXmb9BDn/6Yg+z619yAdLQNHe4pHI2n61MONhOnFC/+OxVWFz3ZANr/z3a/J+wMEZR1nAG+zTwlcEi8E7+fXz7oFlRljerleZRLFhQuHeKARaY5U5CthUMniUFkc2GlI/W2ZmMKy42iIQscu7+mit0ytqShZJSPLBdL6NSKKYrzI8mVeUXi7aCOTtywaoG+JrZ+a0szIt5TE0rHM7w22qR8NMPrt4gDkT1Q== root@lotti
+lotti.debian.org,lotti,209.87.16.32,2607:f8f0:614:1::1274:32 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFkTbWYi3K/Eg/bUS8HKZllAJtFCOaMdnOA6qZPueqYC root@lotti
+lw01.debian.org,lw01,185.17.185.177,2001:1af8:4020:b030:deb::177 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP+D6/VkJDLy92S7EXKV5tnoU5U7ZFHvImntaVYa31jr root@lw01
+lw01.debian.org,lw01,185.17.185.177,2001:1af8:4020:b030:deb::177 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDvvZzS0XWHgzfvG48lpn2VkbxY/xaKN40wwjnnQJRNL74XEbXjEIB6jcryPCEXtVGkus0mD27iehgM1CN+GtQDx/dTFOsukRuk7J2+l3bXoeJMmojBwPl9V/SUAgteDY5DM7y1TiSqMTIwA8aWCHEla/Xh1d8RMXbSJopf0BQypt4TLBAre6PpD4NWHrwef6SpjjHd1OvdlqjepBmMYi4K4HFBTA+i6R2NIv2VuqgfAGUH/q+RNibXNgtcNXlXFbGXftFn3DqmQUZJrtXpDUB2488IL90QUI8TZvZuzwYbzmoP1uIj1SFdfqRTmLjZmZASmcaknbEsgEOUgN4n4SRB root@lw01
+lw02.debian.org,lw02,185.17.185.178,2001:1af8:4020:b030:deb::178 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJHaXJsXey+4VcRLubSb2cQf4ckXiHU9+XeK6VXKDYDi root@lw02
+lw02.debian.org,lw02,185.17.185.178,2001:1af8:4020:b030:deb::178 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDL2VyPX0gl/L6AWkst+S5pR09enPaCOXV0fjm4MV6+pSLML64VsjMkEA2Px+C32TbmLs7clULDmK1NFQgjg0KXZq1n9rSFdj7ghj1vzc/ipPIy9r4qek+UmqK5cYo5el1fWWPX7v9B4cxDbv5BdRd7KpEYUqlR6TKYmOHwnh92xnlqK51YUi8qr5KrLhgFdSlTBPv01tT2AKn1uhHX+qH3P2QMc0H09JYq+5BQeuMnZKIp9+FjWmeuuU3ex4d4z8eSbQxRDTPJ0u4yu23Q/S/xgEqmz4vVGoJXMCUwqRYE1eL+eriJOBFSHuzpjbNvTqkNwHyW0DAkzgvDPB0MSk5Z root@lw02
+lw03.debian.org,lw03,185.17.185.179,2001:1af8:4020:b030:deb::179 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM3+nHiGjMPz7FjWCtz86YSRon/Ty5aNTkNF5uAY8xGY root@lw03
+lw03.debian.org,lw03,185.17.185.179,2001:1af8:4020:b030:deb::179 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLHvpEtcVhQ7NWJGEQTFEV+hyY7ExZEDrUE5NRsHJacQEBFcV7LVh2vyqdaK0OL9rhqwb4w5ujTMnl+UTDvtz6vrE53Df3MtIXKM75QUJt6/24y+mT6ccQIttHLlEaE6vSMwJb7MTuEcNmVzybHVj6B7wxgaVKfcF912D8rkW1BjC8W0Bmx33x5uOHDc7QGtrc5uvgvkhw9xeBNQ34E99Wj0E8Q9q4drIkhTlSO01VMX6ZuFFyAXZ7xPU/fEuWCSc372b/KrIKCrLxrNKV7xqn9ZDkpdxsOKxC9oTDlMjIxaMPT0ZUwoxaNR9BQEfB6IxmsvRe4WDy7GdjayQtyrhX root@lw03
+lw04.debian.org,lw04,185.17.185.180,2001:1af8:4020:b030:deb::180 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBcTcI8PMP/7fD6rxtrGH/PNX0ZpCL3Zy+YMdr+1fYAY root@lw04
+lw04.debian.org,lw04,185.17.185.180,2001:1af8:4020:b030:deb::180 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyiYaU6C+CSPKB9MXLpf3lsTq/ccUd1Ahc1HisrrYhTvUBw2t7cGlsL6+sTjGRhMj1oytOc3aAV1RqG2YKbcmCGxBgyD98gt2sy3Fz+5cVePhVDEv77/I44Gq5M8gs7JbJEzHPpM+ZGglH2IQN948FGdnn+Hr4G9vdBvuw8joji0pB75jlWIvDZaFeyjKG+XQSQMlMmwsNmt6jAF8b47dM0X4ls7P3nlUdlKCBS2+HXrNh1nH0Y7IzanaHrYtjSSmtf/Ylkv6riDqhJlXjlQm3EKZd/q7mUjIKgsDDXeUJ7FMrgEGYJV9kytFI5BSG6kLbEsLsnDQO5EcW5nwD2H3P root@lw04
+lw07.debian.org,lw07,185.17.185.187,2001:1af8:4020:b030:deb::187 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8FSYoADIwpSik2ok9EQOVMV8c3bEwPFY1wv+ngkirnP7q91hHssR+jll72hJd9QxDHMTP6nP8oMPjSnoSKQjxCVdOEhnXDTFMLCYEWP31Ve0/DSyWk7Fdw85m9okwho7TcZH3mRXllUOjbUqaCJG7c9XprYOjXe8Cie0Ov2YdKNMg4y9EfjwpNELBNCBBZ9GH7HGzSfWsj+kBjyj3t9vSjk6oQdW6Cv1WgcQVd44eemDVo5zKHRrh62gcz/51sMZtYM7IE/XotVrjIZjIgpfxiID9mZKIiOSM3ULqCe37qBM3e4JqmpI1OdQ86u4ZkiNh6hG4+evHC+YRxXkh3CJP root@lw07
+lw07.debian.org,lw07,185.17.185.187,2001:1af8:4020:b030:deb::187 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK/n7UQzbZiRSJQvZPQUE/+mQN6YN62lOOycg8srWgD5 root@lw07
+lw08.debian.org,lw08,185.17.185.189,2001:1af8:4020:b030:deb::189 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCq1vIDf27PDFFLhLCHrryPNMt4R76C0dJW9/mAJH/pgw1/WWoL2c8iFYXuk4QAys+EzpqbsBDYdvQeHNTjQco8NjUT99/WtDVtqa2qH+crRpfljSdvC9rRWgGGtznCRr6c3DN2KFy7qUx0eUX6nM/vsWZeJoiFs509X2PCjR+XC32Fltkbu/hHPA8Lh3NCaV6yU0PkdZhHTKHhzkJrFgidD/zGqvP98htHk2Yl/0JTHi79wNreLUCl02w05UByhe6DDd/iychrrZUOh1MBXLyvMW5AhAnmHLt7HCNHAjHJPx/tIRH5Y4ElRl+RyeIHWaEOKWi+Loo4cKv+pneyLVbd root@lw08
+lw08.debian.org,lw08,185.17.185.189,2001:1af8:4020:b030:deb::189 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAION5BytO0ez1CHSL+xCB8vFATuLHEj3+N3y5DlvzSR3g root@lw08
+lw09.debian.org,lw09,185.17.185.181,2001:1af8:4020:b030:deb::181 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOfJDsRgF8sos4jYXiXJzlE06xnBJtsK6ucUkGzBhc7R root@lw09
+lw09.debian.org,lw09,185.17.185.181,2001:1af8:4020:b030:deb::181 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCpO3BRoOK4hnwDBntY3luVk4UzhaLulMrCm+BNz0oiPbPL3M5gTFDGP5juyhHd67cnE4BqcG/Pcyu+h8Zo1G2BuCZTUod07MDh0pxePcQDKQEn9uDh/3oUyGX30VABkWUE8CWs3wwdhc2l4+L1wvSiKC+XH3li+g9Ymdvy2PWfKD6KUnVmcoxB4v9m8PZsqYK2d9Xj6XqjALdwkwXsromkP4VnTmcTaEQ1zB8FxW/vIT3RATSJxyzyi0tNiiknX7gNFJB1vOwpltLTwmaeiFemYOuaw64NcMCDSgdmJpgmlVKTD3J7b+nxcqiLIoIqZXq8BMfZHLw27CI92OYdu72b root@lw09
+lw10.debian.org,lw10,185.17.185.182,2001:1af8:4020:b030:deb::182 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKqWSpWhkNTjnBwupsyCGF/cBeEjiJNGI4lHSr1vEX8k root@lw10
+lw10.debian.org,lw10,185.17.185.182,2001:1af8:4020:b030:deb::182 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSpAUS0NGjvKfX832kfl2Bz3gikuNW3PVzhzH++EswVSksR8iaCzgI2hxzN8WgPUJ4XAwQIVShoJJe/XwUK9I3eyuJH1U4vvitBDwIFNd1I2T9tWhI217Eaoe1qVXvm5P+2C7E7CVlFflSHM7bvKZT4Efp+42tOWqu6BTGNsFczPaBTabpjXlbSq3xxxIDbrXj4j1lPEgINVLqfJy6xb+uDQuYfmxjpY02jxkW4ek4J/ff6wHz2zQLXPtJsbL3Eq0bOuXsQ6kUE12QVyHCHZVilj7cpquYkb9l+svYKoNwMSE94FCeH/7ZaHGYGGaEKswXkmHPyUzATyrdtB8uGJZ9 root@lw10
+mailly.debian.org,mailly,2001:41b8:202:deb:6564:a62:52c3:4b72,82.195.75.114 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDt7TgvbBBJp465niaRzCLTrsvrUOrNDcb8Akv+z5Ba0 root@mailly
+mailly.debian.org,mailly,2001:41b8:202:deb:6564:a62:52c3:4b72,82.195.75.114 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFjtsCCN/6XWmFQx0VENk0avrnTJfaPOjrIpNonvsj/GwTtP4ez6waw2KzHnjeEmrHjchKpWlI+xaXBb926OBxqk3u10/Nh2Uis+vtr//UsOEsHesrXTUF0UglqB91ut4OIpfXdSPmCiZWGstz4hAKxsq9xu1s0socuvRDNKsB1m/w/Ulgf1Fh2KEwIWyWHpGglCTEvSlXvhiEAnQhJnufRkDGtHLldtvqixNL9C3KQADFgqm2AHrdgCP1ELCr8T7Qz/e8PcaXkyfMXceXpC8zLnzfutMaqDjyScIOqCstzKuUwNUHSNt/oGQnLArM5wrnQfy05V1dgJ/d+yvMj9RF root@mailly
+manda-node03.debian.org,manda-node03,ganeti.manda.debian.org,ganeti.manda,82.195.75.69,2001:41b8:202:deb::311:69 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH99Z5Ag+UFys66aFx3ImjeE4J2yCLcUCBbFvPSvaXC9 root@manda-node03
+manda-node03.debian.org,manda-node03,ganeti.manda.debian.org,ganeti.manda,82.195.75.69,2001:41b8:202:deb::311:69 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCstW+BNLOm5YVziU/JBmm2kMlki6mKRJnQQ5X0Mmbf/gjg0NY53GaK2S41WZtsJYQbY0IsS4JYo646MwoeqkkGilhZSYGFUNhec+F3apoh65yg3L1Kg735lN7tfFcT24sNDJYmHsvVmw+uvRSo/4hAhBg1YdXdmW5JiOpE4Fh02G1iKsDaR4a58FvmyqRm5GEQQ6x1Cwo6z0j9QebVW917W+n3ehLnap5Nlpwn1BfgTwnkw+A40l36RDsDNh26+Kerr6zVIuImB6kyfjGAtpbLTfCrLiHCJ2Ju5L9j+K6BO8drIWaHrt+T1rDc+ACDrpOmW2frnjxk/SRC0qiPBXvB root@manda-node03
+manda-node04.debian.org,manda-node04,ganeti.manda.debian.org,ganeti.manda,82.195.75.70,2001:41b8:202:deb::311:70 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGr4MFlujFr9G9nQOIhZcn6q2B29k6nBcSfqG+fgpo0f root@manda-node04
+manda-node04.debian.org,manda-node04,ganeti.manda.debian.org,ganeti.manda,82.195.75.70,2001:41b8:202:deb::311:70 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDuSPtfasU9QB71JLfMF9a7+c57nhcnsYEFXK2anypyB/h/JEjkuMsdfGRHEZIkxxmB3hz7HHHlnUhjl4mb8mfPp4N/pdRgjUg7qgbOQlh9Gp8MjgitU1/Ez3Ogh/mtQxn448Zuw5FzaD31PM4sok8wpB4EVuvhRjx7/c42o2Q2KChidrMqUz8B1RX1NPQa1HYAsnUgtjgoFc0Q9mxCrCFpjAem8EMu/+UwzUaG4NneCwQQTD21a5OmItmVbZlF8fVKSyVkMzqWFcTI+dSQ/K6unCKTRV6wEjIuVvAJR7acEoFxeksER03/0gEVJfaKQ0807dZZ3vZA0i6EtfjNUbYz root@manda-node04
+manziarly.debian.org,manziarly,209.87.16.23,2607:f8f0:614:1::1274:23 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDsUUUIQv7I2RCh3GsczQiesA+oVl57y7bVXN33sGSEoJ0cT9IQtM/Ni7KNJh08o6GirO23fwbKcgdhQV6JzmrbPIavMrSYj/CoZwbQRW9t029fjpbgqnxTiITolCxDUQuORODIW+H78+eJdiZz3R2VaUZO2V5x7YtlrsQoIWtd7aZYS9ScUOQC542/EkQ9WhMYaOIQvDAmpeRzqok0pT4RgXVAMQLSOhKnb8EqsfSiTB4tAthwPVtiGsKRHpXp0MsP0rEHWjnWVIiFR+b4SAyo6YH/OU3oxbs4SqFS83hw5teG2Yprzag2jOKiYdI9Cq8nHWUL3/eNoK6zDNIhUTbZ root@manziarly
+manziarly.debian.org,manziarly,209.87.16.23,2607:f8f0:614:1::1274:23 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHEGcc86ceBVADlTIgOGUiDm29II285thAoABPezoJ0Q root@manziarly
+master.debian.org,master,eu.ssh.debian.org,eu.ssh,2001:41b8:202:deb:216:36ff:fe40:4001,82.195.75.110 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBeUZzhCtK6Eppha8+SvpPXPNYcguBRG4kaO+rEV6+mfZTVZ3n6Py+yLwuMwrmcvXYDC58NAQaZlPlCJ3+YEdDeUdokNKLDkanMnvNS91g5YBXmfm2VpQJWXwLNgWJ2moUF0COE+fu8Wt7JStMnrmC7dBRIhooLJK3nsrVrw/VFF43bQEKiOwLEdUfkGfdsK27EBhVLUsGJmhPigg/EQ/BgHDVvNeMhMNXkc4+cl8vHn5CNvYpLDmQ1jua9gXzheylfmyndd+ffN7FVDbrfLvmDk2Br/hWLee2Kezy5D2/fYYpKt3uqwe+QM2loPzXAYdL6jONAlUPQaAkMwvzIb/X root@master
+master.debian.org,master,eu.ssh.debian.org,eu.ssh,2001:41b8:202:deb:216:36ff:fe40:4001,82.195.75.110 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ+U3USyOQhGO2JjmXGpCjBBotpEPBMosmgD4GXCG4qB root@master
+mekeel.debian.org,mekeel,209.87.16.69,2607:f8f0:614:1::1274:69 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCjIedHyfWbbNxlyNA5Xy5JY5CKio13zpPStjB68Xt3vYy7KqjEFj5ROjuwfFeET0PojGbzw7ThgtaneqvGY0nlXOMmPbZ/CbgpeVWl5PdUIRg3rhuhyEdKSufNMFJQ4S0IdK4x+KvwlPPqI8w54SVN7titQR4B0mJ5vy2pBy0kO/BWtxEXM0TASk0gQ1j3xcyOXskddiAJI15Aq4T9zJw0ISQlRZCKEnSS1fXAFK46pl9kq0ZRsQbhQQQG1kCG09h92yTFtwWNJEuoeSNAhxoe2coCVzlY4nCn0lH7w2F5ZkEMFZsR+qqx6hTPmtsfWj4vfUb3p1KG++ZjxrkrD/VD root@mekeel
+mekeel.debian.org,mekeel,209.87.16.69,2607:f8f0:614:1::1274:69 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHLDj4a6j9RBFhox7NB1e86TcZz5FRZGU86T6JtiEIeD root@mekeel
+melartin.debian.org,melartin,194.177.211.208,2001:648:2ffc:deb::211:208 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDXSlBQAAMQFtYoKjd6CWTPrjMHY91THMDGlGusbuhgi/zILRp1Jhcyh3E+XnlgXeuPIjCX11EIxwlvgOMwhNJ4Y6TFNiG8fxPjlN1erewmoEmJqtVynH21oIYUHNqs2Nc/6oLi7fm5QN6wD9Rd26J9cwTz/9ABe7a/ZysjxW+zg5wxoE7Jh76FoAJdyfZGFZuIKx3j6AxTH4Bv6NNWZApF+XeMSVVp1WlEOhKfI1gFoumULSi/JKvl4I6e4GREwQuvJ8RKldtNrUdcsV9myrSdeIObJ4/k81ubtIYcOHZx4rEHRUICfFOkMUIWH6K4Xob0RyEMqhyXH9NXU4CS1HTN root@melartin
+melartin.debian.org,melartin,194.177.211.208,2001:648:2ffc:deb::211:208 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINZ/bi8FHcBHXpLspxjg7jUiqGn1n3qmsxlPSJrpJDXD root@melartin
+menotti.debian.org,menotti,209.87.16.29,2607:f8f0:614:1::1274:29 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKESJMsbutQoGvidHzD2PqfhNdy9hhIcNfq3cSVM8P+QLBv5EmhvVqzUyp4lvEcJolRR4Oazh2QHuvijCCUylrsg51SRoFNIe07NQm2HgA9D3KzG9gkTwDP7DK9zurcsKTLs9ODnnI8EPe0BiE+dtynxzwT16pmCp/2RdDMz2ouxXMM13hUSLPX4EL03iczZwLIN5wE77I8JHHhAuA9Shqjg/drNO6QOvq8IJDrPniuWtzys4xwzBqRWADosA3JhtIREmUrWw2IWKJcj3cv1HP0zH355+CLJMWqTFePYGBwje/WgKlnZ54lAjD4YQPo/QOMz9kMafDFE8DkU5GnAF9 root@menotti
+menotti.debian.org,menotti,209.87.16.29,2607:f8f0:614:1::1274:29 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFDnJ5PM5Lp3X0USBZ0Wta6EJr0sjfT7JmBqx6omz+we root@menotti
+mips-manda-01.debian.org,mips-manda-01,2001:41b8:202:deb:1b1b::66,82.195.75.66 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDEoSXZTkpcB15eHemjIdQELGQJDN4FDkivAMO8Q52eK root@mips-manda-01
+mips-manda-01.debian.org,mips-manda-01,2001:41b8:202:deb:1b1b::66,82.195.75.66 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD1/D5WeThUtKPnMtzHmoo7c6E9SunqW9toYsH2Q24DcTh4h/d+gJXIp4lO6at+WZlNpDnlP6v1pcJkEQ3hqpoYvQ5h2SH1kFo4GugeYFOXcxcjkSS5R6PAqmHlSoDhNAluRwZDGlOmTRs2ciEEJKY+U2b7K1RspW78Zf5PYztXQMmdJZ1AgBwWrq8txsOgCliQauR1usNxP6u9CnDOQVK+PRa9XETur9tIrR6nZgCWIbYfg4+GTqVwpnNfvZDneoQG/aemiDPcuhE2Zu32h4ufe2IFJ12V1Isnj27AjylcoZIx6Limb79AoXU0fAAHYD3tOXW7sDaAtDUhxCwcjjnL root@mips-manda-01
+mips-sil-01.debian.org,mips-sil-01,2001:858:2:2:1a1a:0:ba3b:7692,86.59.118.146 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwusO6Hgh/MAVagVPmTpLYjAduX2ldv+lheYmVyZ+vibakNZFHv7xLH4EwwvTnWb2FN8bEUTyK8y6/2qPCkzuIQGJoM0VxQqaFfaEPJmQNYrWAb+mUrI2cPUnQlXaca97HPpokb2/FQ1gMdcHFkvqWN4LVBha1aYBMqQ5w2KzkiPgBUKOt5J7g/xy7Tq/NKoODONFSbFAB65tYslUU5CaGdqCGgVOkytvlV/CnAlCFzDhUq9uGOMhIOAW8fExF+c9+bIOQA0kcXgt0h4+bhGj7F1eOlXvT1m0gTyBmn3mTa49CD8dHftQxSpVp9ANn0crD9cUeKNbvwp7al6wY7HD7 root@mips-sil-01
+mips-sil-01.debian.org,mips-sil-01,2001:858:2:2:1a1a:0:ba3b:7692,86.59.118.146 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID0a6AQePUYNXkcPPICPa8tIlYDRkqmZVGdh+s1G2jBz root@mips-sil-01
+mipsel-aql-01.debian.org,mipsel-aql-01,141.170.6.152,2a00:1a80:1:d::152 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFSuKxm8RiAs1nqE3GxlV9B5qWEeBMXzz29jZA0cyUSc root@mipsel-aql-01
+mipsel-aql-01.debian.org,mipsel-aql-01,141.170.6.152,2a00:1a80:1:d::152 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCjhlT9S7pl9TICvZAnWf/hrWkZBUWjaaw/SrTjngh0n0vxuXpFx3yHVrZdkL8jG6Irg64Kwq3cdMHJlxnbxelB6HBjFFKrk4xPCBqyZlg7wlGxXOlWstY/jZ4Ac3jJ9MIzDWdszdyhMOapRxSNezC5+XW8JF+Q31XlqAoBz9qJHo+gWGcjOGJky/CvjTHy5jxMg4EEj7203ALzMgxUZIzAUANJLHbOGny2K7CG2OpiFqfGFJRHdLjwFlTuMF0pnRj8evTix5OAMxl6AyrV3+ul0htSNcsXXKBkwV6APFJmjvQ14uZ6WcLzOqg0F5vFbk92d/b8XQblxKhMuAWDSqup root@mipsel-aql-01
+mipsel-aql-02.debian.org,mipsel-aql-02,141.170.6.153,2a00:1a80:1:d::153 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFMOx4ZXmLC1M0mkd5Pk1CsVWiMeJEjFRFJDF17wV7Rg root@mipsel-aql-02
+mipsel-aql-02.debian.org,mipsel-aql-02,141.170.6.153,2a00:1a80:1:d::153 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCX/QyYcZ/Ogh+ZbIKgxfH/R7utRI1ZSyCngVplNSeafXCQqh28PqN/pO8++zO7152JIHkoFzdCW3+is6NNmQ6hiOR4SAyGe36BvjU6ULPF7MPwZHO5bt1E8hAprJICCCaa/JMXUsPDV/w/aPSfesf4JNLTrebpboTfbbAH4L97fJ1ExUwCl+tRMefbC/9y043+Z3vCaUB+45kx/8UAuijCt1SuapYr15MzRNBaecJm6LfM7ya0Wng2/gpjfYfmHAScE4UeWc/jmxcogcFxgoEa/ZKREV4pRIRojD1ANIY8KqY+cUcG1kSY+ISnyxnRGGx+/6LDp/Dbs2CASru9kHV/ root@mipsel-aql-02
+mipsel-aql-03.debian.org,mipsel-aql-03,141.170.6.158,2a00:1a80:1:d::158 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKr+G6KwS20ErdcCXtDRAPup0mN5Uuo2itSZVNw+gCkL root@mipsel-aql-03
+mipsel-aql-03.debian.org,mipsel-aql-03,141.170.6.158,2a00:1a80:1:d::158 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDqyY6OTK6666yDYYlW0M+e08xbqdo9rP8uPIk8yo5HWpNQ4YGplOb+O5xlNqM4ijjEepSBct5cdMsigQdeGqEk0KQ1n1n/806kf7ru55WLT6kmQPjKaIr42ae7tjIm2OJMfvtQmMqGU9CCPgxgMfbTZ0lwLPhkiojecFh+x3EXQiBqrtHby/1qyKa5ZUa6b/wkiCPmM7e6DGR9Y2+SFEq38CegguNiP+FdCFwbU9CMgy8ZT7BBcwfGmUoikZmWTPnTFel7Qe/0IVYG+IqEFIXONWwxRvQnd6yIRH38bJT9xkj9Tj1IWVY1LE03uvAlrBcmSDH9WMMfubNraf8GRdg3 root@mipsel-aql-03
+mipsel-manda-03.debian.org,mipsel-manda-03,2001:41b8:202:deb:1b1b::67,82.195.75.67 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKHbbFIR+/rf6V7mTIdclE60DAlRa5qKGSdoQFPEOPWg root@mipsel-manda-03
+mipsel-manda-03.debian.org,mipsel-manda-03,2001:41b8:202:deb:1b1b::67,82.195.75.67 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDyaUGk3qiiPmXfLmJalPlPZ9ylpxFO0P2ciEQyGq0lEQu41CwC4ZzkIVneGXgZcZyPwKAF1SXtkMdlpFuvKlXHG/ni2jWNJ2avIZeH9386eOZDIEru2LNVwty1wi6rum9RlfOCU5PstJ8vutWWaf8lPIn2ayTDVJ+hyNyvBHp7uP8CwDnwbcLarvYqVir0lTKBz3DEBbIiaFrQzHx5QBUCkx2FaWIsBxFGTTYBgw7EvAEb8X1sNaBgwvJBHltc7E/+TFbo07qM/1TD+jCpoFkkb83xNYFFvzg7x4kc2+Zt0TPmXUN8PL8g8xbNI6S4eFFp0nxjquODYGHLW5vWM9Ax root@mipsel-manda-03
+mipsel-manda-04.debian.org,mipsel-manda-04,2001:41b8:202:deb::311:86,82.195.75.86 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPbrzIrj5qd/I9mbWXN4gFn8xIBue3HkeMCUCxrNWGqL root@mipsel-manda-04
+mipsel-manda-04.debian.org,mipsel-manda-04,2001:41b8:202:deb::311:86,82.195.75.86 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLiJEs92NyAvBnX/H8FQ6RdiT2ALc/VA2nUPzPupYxEG9eIJ3+Kw1BvWvta24mULz17sPx/2R/J/9sGYAt1X9gvt+L3P231zy9qi6X0gT5BRyG7Mj9qCj3PswDND5w3/bFZy6xSXkX+J8NQW+8h5FFDQVEb4Y2csfCw1cXHGAO+e2UmdCCwoYJcDzBe07lTke95au+rv7Guf+RpnATxG0zrBr9h+1HwWzmJBBRlMaqMnvseGHldIvfXmdyPuHhxQpzs9AOTWvWFEmU5mUJy8jLJ9op1JozAK6Nnagy/noexqM95ebgZ4Sz9yX+mNAhUGcw6KTAxiKDhnfyO20hXPyh root@mipsel-manda-04
+mipsel-manda-05.debian.org,mipsel-manda-05,2001:41b8:202:deb::311:87,82.195.75.87 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAzI4dz/lt/r/n9VHxliDo9vlO/Zg9LDE4/KNU340qm5 root@mipsel-manda-05
+mipsel-manda-05.debian.org,mipsel-manda-05,2001:41b8:202:deb::311:87,82.195.75.87 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC52L+YE2xMqwJEBMl3+zQdsZAq71v/fIzOEyv3+mN+JncBdMpxNd9BeTQpLIR3L+YM2S0lyjSgu3/vgD8ZnaFKXLlRpw2QZjZm62n+bsu1QbvKyjYf3ceWoV+4bC1PRe1bFy+8xOnMoruN6ZTGzRvma5jEb6sq8v7odFNFUEY3IvelvhW9ax8nSIXDs+Jz6w8HJaXNvvSkwQ4M/nEwiOSXifKaepI/MR9VeK8eUcYZPYMwaLH0JT+CUzo4EfGRKlbNDz+yKgSaN9lWFhhHGKOus3S9CQ8y075qXqZZAQcINJ9E+QBUI30wnoZGN9kNzDaEXKZii4xtx6nGzehOcbst root@mipsel-manda-05
+mipsel-osuosl-01.debian.org,mipsel-osuosl-01,140.211.166.210,2605:bc80:3010:b00:0:deb:166:210 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD0aJKZxxq5C61bdkGo5MsO2vuQllHS8Tnl/PI4LvRfJIkE0xRJQhwN9t0rZORmwQTcgxYV79H9f/sUllW4glZRclG4aq8tbB0W1br6LNeREmi7J8ZONC7DdqpUeS2ZCj9Vpz/+6v2X4ecOfyGriVFZeLlzNIrYmcp5ImaUFvgaUR5TXbDs7pL1QoUbuNwMiPOF0JBR+UjGKiJMCLDGdcjgXCRo606NiR/G9GLftweSbtFHQFBFvWfYR3xhKf7/N2orUiIPYISSEkSKaL/48pMeaa8ZPYfRmVvFzG8LywHxNhpregQ6r+sezeAtA991ezFK0dTUYaCn+HHDnuSJEazF root@mipsel-osuosl-01
+mipsel-osuosl-01.debian.org,mipsel-osuosl-01,140.211.166.210,2605:bc80:3010:b00:0:deb:166:210 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOWo7DUfS91tZsbelaBicgK6+KBtEOKnWbEw22o2luSv root@mipsel-osuosl-01
+mipsel-osuosl-02.debian.org,mipsel-osuosl-02,140.211.166.211,2605:bc80:3010:b00:0:deb:166:211 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDjqARBPra9x6ZFymuFJ5/u2AXmLdF615fR2VHBt4DVjg+RB6rAFIEDOghAIFt+uqjLPX44MXixGsC3Ce2ArnHx+7Cl3bthbp1lX+JkPO6fIfaBvLh0TZ1tuEAPv4TpdcpAxVDRPGBaBSwjvp6h2+7WNXqkIKz3kBGcOAZsriyZNM7T2IHrb4FyyPK4IwBWOEJhKJ2X5xRsNExTmNIqr/kbX5F5HjPBoIuUuM/Q5SzBa4eOrGKf05SWsxnU0B4fD8Du7OFaixb6KRDVBnk/yi3fCm+Kqz2qSN1VA6ocwXAf2XN+2sKdiVDEU4QZaxJCVAzcd9zwzp9jrEi00jRTXyJD root@mipsel-osuosl-02
+mipsel-osuosl-02.debian.org,mipsel-osuosl-02,140.211.166.211,2605:bc80:3010:b00:0:deb:166:211 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDvaKbqGHqQGSlM0gEV9gMLRm13DvHZKv2GgkeZHHT4N root@mipsel-osuosl-02
+mipsel-osuosl-03.debian.org,mipsel-osuosl-03,140.211.166.214,2605:bc80:3010:b00:0:deb:166:214 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPyQqSoNdTtxTgUjpX0iiqlkEPKXNtfIVhG0+oiZXSFG root@mipsel-osuosl-03
+mipsel-osuosl-03.debian.org,mipsel-osuosl-03,140.211.166.214,2605:bc80:3010:b00:0:deb:166:214 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCypOEAUnKiVpmXzJCj7xLUyZDHT8IQeasVaHscljq5Cr0lt1+x+2o9EDNYu5zK1LMmU7FCe2XgBvf66s4SeGGN2soFe5ntR9UcpO3wqwJSY/dsiKfk5kvmsFGt/Zvlpg2oeELCi8Ldk50rd2nmFBR4HIMQ+F0IG/D1YJBbqsIa7w52yXCyhxM/xetRRFngSn2/2v3rtNUaa+csq90OkV8XYiXfkzHrO/sm4ny0xPOiRLh5JGfJIIERYlKPPyclEyRd0Qsne8JCjthT6xH8RZWIhCfWB2LMxs6leocagYYj+hUF64dNIh0WQoczjrBWz6Baycef4KkMB2nr3F/mu4Wd root@mipsel-osuosl-03
+mipsel-osuosl-04.debian.org,mipsel-osuosl-04,140.211.166.215,2605:bc80:3010:b00:0:deb:166:215 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAnnz2mIqf2N/ZW7qucmnv+cKGx2hma+mBpKz10BF2tY root@mipsel-osuosl-04
+mipsel-osuosl-04.debian.org,mipsel-osuosl-04,140.211.166.215,2605:bc80:3010:b00:0:deb:166:215 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCdyqzZ9Q1OG3wAupfkgGtoO6sQQeXcbKhxHG2JK8nyrfswofICLarM/44O0Kir92Gm+12L13/nj5A50FUmIVTv4b3VVZKKp40lq8deDIuq+BcDD8DuWD3jZ7lnWse0nmohrAaypgLZePYwrhmj3jqRCM/PQG267/z7W4GPCHiRIf2vXfhZQ2aUV9fXN+raH2AYSg4J9VZWkZkGR/6uEGXo8eEIRvUHpH2qIzBV3VrDO5EsmnrgDWd1qC8Fe0PKtErlIydZXhEGsimfzxwnl5d7OtmkeYCdYA2XRAk/hHwE2qzyfa7whIyJ0CasIdDHHDehZaIPKaBznqc1fusVHN9 root@mipsel-osuosl-04
+mipsel-osuosl-05.debian.org,mipsel-osuosl-05,140.211.166.216,2605:bc80:3010:b00:0:deb:166:216 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDETCxb/Naekd3tmbiXI7tZHNzJRcyEJ9mWwXT3d2BT1oztxOoE2WuUjvCtObCuQyuCNn5g5JKVf+kmct63IsTj5MGrQUFzPFnS3HVw8sz6Wuv6XOJ/DrKU0Ty2W9L2uwUgiRrPZJIKSOh6gpnOFT2XcfdWClJb5SDMrTwUmaDMnjJ3Jv6nn9tvMfabE65p3wGlLYOyzvOCxfKa6riohDzSG9DHGwpFpY+n2ALDKt+nRa6sRfuGpuJZot/L2HU/Z2h1tsHr7TbNz2OiLnRVtNPjpXMHmJn9olIfCn5nmWnuO8qo7aClKgN16d9u6dAQxdOJGBhscvjjpHgwt1jp/G4f root@mipsel-osuosl-05
+mipsel-osuosl-05.debian.org,mipsel-osuosl-05,140.211.166.216,2605:bc80:3010:b00:0:deb:166:216 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOhimrBYPbuPAGVu9eqWUh5VMRRIZKlRC/5UIANvDKAm root@mipsel-osuosl-05
+mipsel-sil-01.debian.org,mipsel-sil-01,2001:858:2:2:1a1a:0:ba3b:7693,86.59.118.147 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFZ3KDBw7rTYf2ZWnI1Egz9qeu9HafUUptq2cYjKONa1gC753wEUvSTu4OhJsiRRQjbXQBRSc0CRADWDGF9sFb2q4ziYtmKRZlnzzKKOfbcosgeYLdoq08cOnu7lHJbbCRNny5MaJxywOlBqREjPX35Dbf2ulDwkh/F78l/+A6V0ugA8kbXJ/14b0ECbBIL5xMND4Fe2v5cMCHk667o1V83FWvJ2uoIoiSmB4EhegB+IgkpfW8nA5IGGNpBOpTm4kNInUQc6T4YQ5/uxs90DgP74UF0R4U8ydJ0js+TQkIEwrDEUZDxkpkYleKaOweHCewjsgd/P36v5YYryAS5n2d root@mipsel-sil-01
+mipsel-sil-01.debian.org,mipsel-sil-01,2001:858:2:2:1a1a:0:ba3b:7693,86.59.118.147 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHgOat8kkq/0JqII7BVpGvRvUERT6NFm1X7qNxOYBjGU root@mipsel-sil-01
+mirror-accumu.debian.org,mirror-accumu,130.242.6.199,2001:6b0:1e:2::1c7 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINnoUPiW8Wj8Ur7u43ljrnASXlXeerWy+MhaIn+r10Ot root@mirror-accumu
+mirror-accumu.debian.org,mirror-accumu,130.242.6.199,2001:6b0:1e:2::1c7 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQdCRLgOMwOzl4on6dnzVzJY1K+T54ntPiiVuOo92V5fQIb7hHmmNKjY8l4JV9e+iPbj6cJu5MpYMQEqVBEk965GpCGOlpd8Cgx8+V5yRg7bXlquLXwxZlnEgNZGOkXzDrpd3OzeVRwF0fcLTT9+vkJ4LPQUEfRXbELfWt06+78Tu/ZAdMa6YS4cMlRUiSRBklEAuG2ZG/i8i4xRlks5mhpgypGDwDmGk93X7cfYqrAE2o9JnFUB5v0bn6m8wq7itXLPEt2i2Nz9eFT2gtS5of45NYgFHwoSN9GOWBJ/o+eGK1WI81i7ZWBw5M/+MNQOIEC9EVUlmhWnZX4WcIVxe1 root@mirror-accumu
+mirror-anu.debian.org,mirror-anu,syncproxy.au.debian.org,syncproxy.au,103.84.224.38,2400:a4c0::26 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyP+FJUXyppK3YDH82UpKQOlUIYKq7j1RPLfB2KXlrxzXGO1DcsMr3rdm2bvJtZhxmeY+No/bKLOzJBJE56tJFAar4MkjmiqoCh3GFkWyRG9twAKEiVdrGZx9O0SqqqDb8pP/fxkf069ooi1HTzaGRUosKi1n6/0jUubApno3OAfrBNsW16ReBbf6kWbYUvH6oH+PdORInrMBk1zskcvu66d3C0RgZmlTsD1NYivqK9sbizODxCzuOhd4gOJ0Awcsg21Eh2kFWWhka57d+Fjj3TbAr0XdVyzcilLNj5xWoKuyAZFSLTAGYOZ2mPU+CVQHJmba2m4uj+Bp12YBwVR3R root@mirror-anu
+mirror-anu.debian.org,mirror-anu,syncproxy.au.debian.org,syncproxy.au,103.84.224.38,2400:a4c0::26 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMcJUDcOPY1UQxmfskqlzJsD21dUoyblvoNdBmjbl5nN root@mirror-anu
+mirror-csail.debian.org,mirror-csail,128.31.0.62,2603:400a:ffff:bb8::801f:3e ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEisl3AXeKUTLNqStsdFUanbNCgEmyjRCVnAhAVW4nug7XcdUX+XslucwycDig3a8f4JuX2cdD3kJuLYukdoAnbyRUxOj/BCXwg/A/QSGfHhrJM5F5Acd3BYMUowW5Y0hl9mrFXLwhlM22KoFBdNheMstD3bUR56Ldfj4W5z9L2aVkETOlKq/YeAkTKh1v7ueima83YGnob8q5CR5b0KIluopN0zOeElgcBVcoGo4BMjEJ4Mz+aJWRnUQQmF7IjbGD+u4cVU8WYXNooWh4qdur1fiJ0F26+6UcOo9SzdrZhQsl+LcNJnEuIS8ixNEFi4K/j7BBbjT12Ey5zgUTvh0N root@mirror-csail
+mirror-csail.debian.org,mirror-csail,128.31.0.62,2603:400a:ffff:bb8::801f:3e ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMTcT5hP3DlFbPr0gC1UX9NlrbOrFqZ9qhHHhxtsLK2f root@mirror-csail
+mirror-isc.debian.org,mirror-isc,syncproxy2.wna.debian.org,syncproxy2.wna,149.20.4.13,2001:4f8:1:c::13 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDb8eHQCKSW7Y8+Q/zoCa8RfZOkkwOlZYs+HTs69Uz9ihKtc4llOxqWJ7zbZfqs1dXVmYAxMvZ+Jvp9z7CEcgg3BWzcyRS73/ejXxuRktPnDocE1Y4sWO9hlyjdC+GiDYV/gl6d1d1WRPNQte15EMbTt+lCu52w2brfCC1lnsSsNxN5FTiFWdxsKq37vf0b7VFUsP6b/ugX/d4A3/Pg5xozge6poi5BHdnrnpidCj2pbH8+C3hSOvIZbRQdXELIp693j9NAVhDqwInrP3AHwCyb6RDg8GLpHa/AfbhUbNIRLPeZsCsCQC2YkN/zNDc2itZFsMHr2dY3FZoK219LAN1H root@mirror-isc
+mirror-isc.debian.org,mirror-isc,syncproxy2.wna.debian.org,syncproxy2.wna,149.20.4.13,2001:4f8:1:c::13 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJYds8D5DB/iZPNHLrPPVy+lstuwRlPScvBP4T5ahr3z root@mirror-isc
+mirror-skroutz.debian.org,mirror-skroutz,154.57.0.251,2a03:e40:42:200::151:3 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMDCMMTpWJwdS4zb5OeLPlG0ipyfVon099nq33r03mc root@mirror-skroutz
+mirror-skroutz.debian.org,mirror-skroutz,154.57.0.251,2a03:e40:42:200::151:3 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCiopVsG2gX9fyLshcVNzjMdRXe8u+oP2/EdMoxM0FbiArLcbrX95EKMfHuFlNsVobhyYzfMSQrgCMk3sbSvXE08UhwQZV8qsE7w8j0t2LfEcwlhxsrEXW1Ub0wVIRxoOhnAYOZNpwkfskg6AORlHpYvIjVLAKtUuG4PaJD1hq7ffPR8eJdBrOoMKvKPrxf6pnUgFdgP5JVwDdSoUdymdM9Vq0cjpVjK536MyKRqzZVVwoYsAFnzcMoDCcrh+QgqcGkS8E0fD3Y7JbYiCk4yPacDfgi8HLqsV/d4fqmdWaDZ/wJei7IliOdbsp3GhD1cf+hFdqJiHKq0a82C3zj6yC5 root@mirror-skroutz
+mirror-umn.debian.org,mirror-umn,syncproxy.cna.debian.org,syncproxy.cna,128.101.240.212,2607:ea00:101:3c0b::1deb:212 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC502aNPHFedWJTl/cLRkmkxdkrWQsWeD4yGN+gM9hFPxfc/X1JZMDBH9oViEYWJ0zYkWvu4StJOeLD2JjBbEHYOsixxPnl6LcaihWGGhZUV6ClA40yq9aNeIXGR0R0zCs+scqO3tm2+OWhFH6T64UgPm/ZCCkMF0eCFq/vxx3T1R+f9e8xHo+gBT3DHinwioHUdQR2jee1tks30K5NzF0VCGke5hYJchoyrr/iM1h4s7EfEZsU+RkYPgvp3vE7d/T7D1C1xUPnnmxTYmoLrnHrk3SsqnTr7leTP2JbG3lJId/gMBWp8iebF5gON5aD6fmk7ps42Ep+PjfgfDAxrE59 root@mirror-umn
+mirror-umn.debian.org,mirror-umn,syncproxy.cna.debian.org,syncproxy.cna,128.101.240.212,2607:ea00:101:3c0b::1deb:212 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAmyDx85z+dHElEw8R6ufUixYWyJWrkiXGxiwBo2mGnj root@mirror-umn
+mitchy.debian.net,92.243.17.82 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC38GpyS0WuNc4i74gvymbQ5izJFxRb/Y7Da9mHs6SJFvvMHOQZ5atULgmw0gX+EjAqDiXXXqFX75tuM4QCyaKBBUdb46QZM7PJMAlAgzMYinfxqgZY9PisrpjkGf5QhR1LbEgutlIa8QndiIcQZ8GeMfT6X847rtfQ3PWo9mqr3MtSSCDCK/oUoUgycPavaJ2PeMx0Q71BXTmKjR9OAtaOI54Yf6Se5e7YUTw8csKKbzEg1C1U0TCLqtnWMsW8fDQJvPgfwlj1nObub+oLwHHFIdQ8GEBEOdjUm33sgSiBTtx5tAPD+Dot7WHkYbryPB7QP4bOZA9AV07JL9o9WWy9oNgh0RODyCgnWhMfSdBg2k7xYwjMuBfx+BqzMSX2eepzElqWlPzCqd3CSLGX+aGAlb9r5cKGfXPxdSUmGUVgI0LM4JZ5VNIPq6UL16gFYa1y+lHj391QvnBgV8GThvcPAVz2dGo89FjKeHktZlA/ZPTz2vorpMvyUH4CBieTctM= root@mitchy
+mitchy.debian.net,92.243.17.82 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDnZMERGcoPveZHVQNlRI/bPkIl9MgJuAGeh+ZIaLUfU root@mitchy
+mitropoulos.debian.org,mitropoulos,2001:648:2ffc:deb:216:61ff:fe9d:958d,194.177.211.212 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN8iAYQQ+CftJ7R3KaWtj/zUsvYQZlIXqusqc8h74aDp root@mitropoulos.debian.org
+mitropoulos.debian.org,mitropoulos,2001:648:2ffc:deb:216:61ff:fe9d:958d,194.177.211.212 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCl7NhHHqHhoBn6OB1ektbyrCHj4U+DPB5G8SsVd3fH/SxfFJ3k+eERt8sGLtT9wlQn6542ziaVXxjaXCGxLDj7yZ2T+jyrIuA+FnH436lDsMETxc88zCfhKSkcn1EepiXKVBVhOcKI0rx6wvzcsQrqqDU/1ZV8hPrDABm30y+8VGPFhwooQxBd7Il9yCoXzY1yVRMcSrjZn5LkgFlEcTqZlgfhpDYXY3cP3/6NZM6WRZSEcflPR4wYz1Wzbc0ooqEoM6S8f6gEtNFYh8NuZwKb2DKR5MIFwRsrSIfgiN4oKnrEeAXNFybo67msWGnfvgdtESELUO4rLdcPyjUBmN38GBmpj2WuabS8USo6iS94DszaVOKA1A7Rnid7x9pFZAPh3Kx/HQZi+u3G3I9+UlUFifl0/f/jouygCb6BGuTNmwFnAsKXkiBg7pV+wQQigIxHAoTgwyJdJcKlUOVyLJsDvOyl+Y4P/ve5PVug5MVdjUMuzDKlzxfua302KH5aZlc= root@mitropoulos.debian.org
+montestclient-01.debian.org,montestclient-01,194.177.211.213,2001:648:2ffc:deb:216:61ff:feda:293a ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILc+R4NhkL8KBlgRxx0XwqQvPFDdS810nkF1njFMUO5t root@montestclient-01.debian.org
+montestclient-01.debian.org,montestclient-01,194.177.211.213,2001:648:2ffc:deb:216:61ff:feda:293a ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCwkpUIQYqjtuiszyWNlaZhRqbl9NH6XtmsLCnXKz8wJ97SHmyhIBf/ZLRk570+v3fZomAHjav5di292qnDZpom12BUenh/t+evbpntddD5q+tQ0NH3BKHgdl71Vx/ZSJQkn/uhi7nBIy3b8UCkhdZA5kCTvXuXD+BxBtkJFXZe5SCtqJLJ25LBoSqdOXkRbuVixJY2WmRpxPP5mppcjNibEPZBeg8SbZTaJ7mnkTCS7RP7a5u88/qQT70pfDylukdt426T69CbRgaZG1JRh41BGBy+/ypFANM3lquZxgKLuRSIMQ634iBa+aurSul+9g4lmDDtCzsUJk2nNW05ej7BOL/34QyzqELsm/kLtmG3LVQGwfgWfhtlTXCa+34cAdC3IUFfCRVbfw/ELxmAoIT8WHzl3DHIonvhlax9saR33t8a1KRT730CSNSkIBfi4KAFPyVG+tR/eCy5nUFzMDbpm2r4lJ81kS3LDvvGc5A3YbAOSo0sUHDEHUmQfqBy59U= root@montestclient-01.debian.org
+muffat.debian.org,muffat,209.87.16.33,2607:f8f0:614:1::1274:33 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFE/i/o3rahiKi0iG2B2Q1OrfroYutScRt7I3ooKqQId root@muffat
+muffat.debian.org,muffat,209.87.16.33,2607:f8f0:614:1::1274:33 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCmCjmWYdwUeqMRXfCLOBIyeDQ5zjsAXqVwrdmmK5DYsRIiQGx6X09BDSaK8woRfoC/5iIB05n4JCSOMxqESmW3EQgCo1Q+cAPEBorOovilMVXnAop3emjDGWz20PZThlWuYmH6bYMtPQAKIMzfQkA/oP1TN0P0x2Q9REG7qxI7/J0W8sVsCXm4CCtDMSGetdmrbr3WXyLWArKZ6qxNzsfww3yr+lZNopgdCfX88ESpOlFD+6TlH1bAndI5z7Hx/GQY2J+zHdUvoMbn0wylYvoSovaLXMjrcjU5gPLOY06/eF7EEqRQCOe7w06cj3AreCyruVn/1ur/HFtfxVngs6Jt root@muffat
+nono.debian.org,nono,nm.debian.org,nm,209.87.16.26,2607:f8f0:614:1::1274:26 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMsO5hRL28IjJhppFFZpLSB4ZhPb9o3fiBW6NGl8/m01ZrXCf7Ru1ZQG3UX3QxzkzmWqyyj0ZPE6B7ZIRPmmwJJ9wjStXThcof0x35UWQ18SNd9+0shi8CUTPMgrh8XVyUuoIKA7ZBd/5SanDdRev1Bho7aYzE9xOqjyDlnFUf84KWzyjuRbU25+/JSpb/Wk0Cywx2W6dacFo1i/9v3w1Qx6rSzrYUIl2rDbUU2eGIsq5Sd7sXXoavpEVUQUuuSY2eXb8s21OVaIoIfMS+PEOwWV2/9vHHxe4EhOLekOfL+cQQFgUnI89tu+fgSnBap3eKx8bgyi9GqpAZvm57QD0V root@nono
+nono.debian.org,nono,nm.debian.org,nm,209.87.16.26,2607:f8f0:614:1::1274:26 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPLnCrz4vdZnfG9Ef93femPCPMxw/F/o5sXmtx0Rr3SY root@nono
+olin.debian.org,olin,128.31.0.65,2603:400a:ffff:bb8::801f:41 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwkNXxGUZmbnFBz57U9liB8EYQMXP3OY3ANvFWAAKMw/FBnM49obuf4c7du1HAv51AxB2HN2OaKCu2xLpGzNBAfgBE4RE2li0xFcXV22yKReEjbnZgtB0Z1zC4Z30grDjDwPNZ1aO6yZcUwqfgNhqbqWfLmZHzJiDnTnPX9fsrBrQnv1BuQcFwUhlQKDbvleFPNU+tkLgtpkxKjSc1tsXAftaVqYKZ8Xoly6QszMupAr7bUkg1mr3YjljJva0rrZPCbPwh7XKnFn1DxDbYa1kipqxMqKERNGBwMDVMNhLLLqpF4otcBgfwRTl/nFo+fsRZZMhEy5eTBpqAHnigFmHv root@olin
+olin.debian.org,olin,128.31.0.65,2603:400a:ffff:bb8::801f:41 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBWgDlu4imSr8gIIFhAfFzGUVod2u5qoCxBfv5AS9asJ root@olin
+onionbalance-02.debian.org,onionbalance-02,194.177.211.210,2001:648:2ffc:deb:216:61ff:fe0e:d085 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM2FpiOwLXD9wNGp1RTKTl2OMdLMrbI4IaOJ0KcRFFMn root@onionbalance-02.debian.org
+onionbalance-02.debian.org,onionbalance-02,194.177.211.210,2001:648:2ffc:deb:216:61ff:fe0e:d085 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtQCdC0IKZsPGNPMvaRypmNfXnrG7zZbvdRwzsxJ5CpY7+fNEVifQ6qo/eUf3d5+9Tg+cbLY6iu3FtlknxW/OxU5vB25F2TOfHFdGjGcSYqu2JOrbHqhWmHKZkcDEkxeRoYGx3HYGPlyUomlq5n67YQd3laPo6nEOlkny2SE0VDeXgHSbsTZrTAwJeroKsa2mqMzvxkAgLLhHQgXrdzBIb2SRqjJbkaqbGVghZgmd96nultTzrjA4w6EFHfr2VVrUbtjYZY+fGatxh7GVG4ipj9AdYHBZH49HRX9mW36fkAqqqVr4WtheJ7UnzLqcPfynwUEUILnmdkmkAvTZioZCV root@onionbalance-02.debian.org
+panama.debian.net,140.211.9.7,2605:bc80:3010:104:8cd3:907:: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPn/WeQ+mYfo0IzUtS2Wt5M5I9TwaVhgQLKHNE8tR2zO root@panama.osuosl.org
+panama.debian.net,140.211.9.7,2605:bc80:3010:104:8cd3:907:: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzV4bbyPNM2qwx5In2zsWo7xVDSGPwZrQ3yd0aPRy5hTkY+predD0XOtaFjBEPE5CoceeJBMJ56MEWVhdLQuJM0xaT81/7+3H1VZB0qFTxtcESrd7PHhiO0d/y5ZbJRiCGvCimE7j6YW8pgdUx5zpUNSj0VoP1FznACwrDjniOe7j9bih8D5AMbGBrD4KTZD/7vr/z7LAbQ9UA/E8KSev/zBoHObesg2uTQ0m5sMQnKwcPITICqFufgQIaP1Lf8j39YkkfUoQ9IJtaT9BR8VJL9bTuiG/vlfI2UAJ5ZtdE+Vks9htLLVC6nqQ2B/uSFFPFDcK7v4lo6qRro1HI1tu5 root@panama.osuosl.org
+paradis.debian.org,paradis,na.ssh.debian.org,na.ssh,ssh.debian.org,ssh,people.debian.org,people,209.87.16.67,2607:f8f0:614:1::1274:67 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC2nP2WzQ8hkZDiEq5+QSGFhTB7SYfRa7/IG0gMOIoCDXH8b3sfsBUUEL8ZSFaWgNKskUnpgg/fqAhvnDLOPskr3OGXRfrCR68fCqn5H1zBrHB1kpdjPW9ezUe1xoY3hGp6LITANHWpZie1wBjYAzaBO70hNAo4JMCQvZXDsQdyws2DRSuYtiAoG/ZY0+t2VZh3MJLcofv1wNo43M+aHJR2xWmQSE7cWjMlcw/QOmsWJBv1+Kb/nK2Q7buX/byvY8ySu5ydATnyEinzbutZXc/t/FioOtWMeqh6NlD3aPGIpUTmf8ow+c1QwZWOC3T2GWyTD5KVmAZSm77lWkpYFcd1 root@paradis
+paradis.debian.org,paradis,na.ssh.debian.org,na.ssh,ssh.debian.org,ssh,people.debian.org,people,209.87.16.67,2607:f8f0:614:1::1274:67 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBsUneE642qr/kzKwJcKl9Cgog/kgCqRLZwZs4J7RRt8 root@paradis
+pejacevic.debian.org,pejacevic,piuparts.debian.org,piuparts,209.87.16.70,2607:f8f0:614:1::1274:70 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCv7fL5ae4ipDADG28vu15mb+LXOnRrFA2zt6flE910BmRLPX9p6qr6P6zisZ/5Y1U/1ewtAT5KAjK0rVBdNwJkOwoHSkQoN30zgH/lz6Iyos14Kd2wyJnqeKhMofFWbEuR+ZkWshO1AKLpqDRkqWL8qEd63B5li7QZcSii5z6faZ2LhFioQe2JjJ79JhL3eFHqWUhbBlGzZeTVLgRQ4mowLMHr2Dkxu0Lhdx4PwJXeaY2Kpj9RPuAX3FQURRJJBSa/lCQam0hScYzPvEJYEL0STM9qCOo7RZqTb+N5cnAGuwC7WmumDJynUTWV7ye2eotc7lGvSagMDya9kbWJbZ4f root@pejacevic
+pejacevic.debian.org,pejacevic,piuparts.debian.org,piuparts,209.87.16.70,2607:f8f0:614:1::1274:70 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDZBjWiZlhtgJKZL9Pghd+Ro1eFmdIJCghmY4f9Ks8yL root@pejacevic
+perotto.debian.net,140.211.15.2 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCzqeAnplnZm8QvQx33vrsQlUJCr5FnNqxkzxDrVmhQKOGnR538C11fEs2Ro6kF4VcUhgpEvgZbVThhdvOBKVw0= root@perotto
+perotto.debian.net,140.211.15.2 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEy0dpCDE0SsH3EO4pCXQBY+7m01KEuXyDB20zCyU2wG root@perotto
+perotto.debian.net,140.211.15.2 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC+BFL/+3JbQox7SQTiwocfjlEFxIk4KwKPrKeIILDCIrmvaqKkuMgdnF/d1ENEcAcZabxqhOikfU5SoiTe5oKIbI+gGymq2NL87cRExjcIju6G2HGRmpOd6OlencDfFqIe7VPlFukA7QiNNk418v6SpIqIPGZkLmHHNh9dRPpOLP68OmjIDKgpqWIePxzs0uLq6Mjo8J/FoatUJ4aydlDpAvUEJlvjIaTm74yZek0pm5YuLcYCAe4oz8/jZO2eVwFFBBEU9YSLIXBly8vlpB5g4ROZd0bijH7On2icRf0bKuliBy5xkDd5iIFVkRblRG0lSFFWoN00h8vrC88lyBkDX8v5trJKnBczyjpDKuxhBj/SnHZosGRkp1sjVC2o3ZRwyTdHNFObFbVFMgqwqLk1mLTHOclh3TMT1OBpM70QyD2eR0mCNP/HDFlTTYfj2Uj/NJ/bfdUqaWvv5E/4XqkFLNgzG6m4ve6GjcoH3qMDTmZBgtvXMUzD/V2l7xmmJPE= root@perotto
+pettersson-ng.debian.org,pettersson-ng,194.71.11.123,2001:6b0:19:2::123 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEaBKYPica8/6IRl18RdYv41rnhe34xYb97uk5ltlcZZ root@pettersson-ng
+pettersson-ng.debian.org,pettersson-ng,194.71.11.123,2001:6b0:19:2::123 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCWUXgAk2VwtSNdVdc9oRuVU+edif8MSnf1YGn8nhHIWp11TBs9FKFxh2IKzbux9vE4JShOOUiFPkL0cBcBr8nu9heINWftm9CDHlnOynfL4BNBZDvc5oJkzOXTZo1uyg14do72mLj7TyxvdQwG7/LNhB9o827nyTTnF1P4THd3i2i2ag95gI+ghzEVGmHEJ5/icsvhJJmBg5HkfuOAHW1iTnwzuN49QD5CdsQvu2cMj/Nvn/HTKnu3krk1kf2hcZRB17+/V7i3yhllFZd2JWEBmEEyBpx6iwtA1Ao71FjM1cwBNmqUVkvJI31XpQVY412gEWhe2+wo3hFM3ktXPaWVyGmTFBS75e9/rJO7GUfmETOmASTCqih9WSIodc8FhuQD2RugUOsBITgn+Po0iRMgckBZpy1eeiQZjk1dq74DSq1/LjALc4AVNGS//IYlzc3m/ceiaA9donYB5inYRsTe8nAdyptpWockfa1jEFAFniqR2doWSKkOXbbTzwslCS8= root@pettersson-ng
+pettersson.debian.org,pettersson,130.239.18.123,2001:6b0:e:2a18:230:48ff:fec9:d0be ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAs1w8vphRUBUTtHr0YK1h9u2At/o+7Moo8fGmdsHjeJnHGj/0nyNz+hdzjajKtkoS/fuhjWJ4+/Y1ASrtGme17/Tew+pJdIJRDZqwrMUzcgp7Lb0QTAcZf1ppsLjlcdeFZltUcbCMDTbAf8ZZB3CqPpYWFldYoetKDStc6MJRLHZUcY3M3mz+ye5/TzuWwsr2Nx0qdsvxW3Wy+4b8Fzxx+bEgOGTT1FsbGBDzk1MdnX/bg97zzZeGizUSSDmnPfDxLVm3OoMfffBR2ZO+VXso6ToZFWWxkBUjNrrUfkggTwIennQQ+k9yo3ZmCHsNhTmcWfnr4Px3OPZLfW5bYNqvQw== root@pettersson
+pettersson.debian.org,pettersson,130.239.18.123,2001:6b0:e:2a18:230:48ff:fec9:d0be ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICjZAtaZeb2jxFmX53I2Q2m+wsq6VG2kXAzPnVFM9X75 root@pettersson
+philp.debian.org,philp,209.87.16.61,2607:f8f0:614:1::1274:61 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHvPU+IGYqzgmbxqIR/Qm+xEvoONDH36t6PCJdchwCj3 root@philp
+philp.debian.org,philp,209.87.16.61,2607:f8f0:614:1::1274:61 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCmRM0z8Cv28WXWgbBxoob3ePrh8yYbZxmnatTHO9+Eu5TLy++BgJpayU6tU3b7ETAb5Z5Z6tpq4ibVjTgZKpsAdoI++gS62huR+5pGaaBsbMKwqItfKjRmCm/f8I1pQCUF4tPEWMJq0IorIa6UaLVtY1bMyypTIDR0s1GhsgcII3re3X3IG5oL7wgLi8cEyrfY99Rtzo1+vyex9uPBBXOZ/fpyeGAD9Ame0tbMjNTFxzQeeO297DvQYabwYfyOK4xMrescFl2NRXtZFDUTF4jsXk48vJFlYA4uIuAzX674edzlBOeP25ahBsjlFnNYTYqSHnaFkgeEwkLX4uETlcm7 root@philp
+picconi.debian.org,picconi,195.192.210.132,2a02:16a8:dc41:100::132 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILNDNqoaczpzsVmicB3g+0to8qgrRgdW83Ner8Xc7Fb8 root@picconi
+picconi.debian.org,picconi,195.192.210.132,2a02:16a8:dc41:100::132 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHhRquh0t9Gy1sqx9sexfYNxwz38MTntUv/d6uBNoco0oFmUUG5B3FswmmZAh/nb1YSQher7BwHErs7uA3A4NbBV5mvDcMyKKlnOpobSwfVWd7waeL22tsqfP4BpbHhp6VxuqKQKPCk40+rVn89vT2UYMmKQWqWYOvNWur73lnEux4OMGnuNhDF79UcIHKo0Vr+8Q4DQrSgctlrJz2OjKyfdyWUAeE7C2LagraxkSgHi5byO2W9cKWV8QP+SAXkgtyOgZRT1u52RB9bwlrPem6yIuqoTiOP025XkdR3PFKRFMB2Lg3hARtfLlIV4FW9hhFJMc3TVKVn4gu6W8wuZ83 root@picconi
+pijper.debian.org,pijper,140.211.166.194,2605:bc80:3010:b00:0:deb:166:194 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyGpU15xF+85bC6HxHa9zBDAbysyS1L8Tp7XulWt12q1+BIXgi09hFgdFT+5UNhh53GPipBgebNVF6tIvxc0KNS9EG4pVUuhZlmC6/w4EVbfDdv2yFwkN6uTG2X70MaGBKtYTKljgRt6kUKd8bRoqYRZlJ29g2CUQJC1eTDUFuyS4/hM1hyo8NWGmwe8W8puUg0G6AW3zQ8hB46n0eZq/kwj+Cua3gl75pAMKYVD9UtlallHrLjE2qFxMYqKQ5T63e6g09wN33/L5qQ51jnkU6p9A8ufDIsL5CwEqcepA7CICi6V6u7CKxUHWR4iTcCaKVeERkJSz/oQokZ83vcAVF root@pijper
+pijper.debian.org,pijper,140.211.166.194,2605:bc80:3010:b00:0:deb:166:194 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKwW0RFcMYNE58TiO8hM9UvwPwGGe1JH5uBJNCtgzL+L root@pijper
+pinel.debian.org,pinel,popcon.debian.org,popcon,209.87.16.63,2607:f8f0:614:1::1274:63 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDqnArFCRg49aTF23r+gblmCObSxPY60q1RPI1JD1L7bSUk/Ox3l8vflz8QmP5rb1J6WvP3jKao+VGPsjnIE6swK85vf9fkieWGkxFc6KQ5FXeai/en/J0mwU32eX4LHIJ6//BMst14qimw5pmef5uxwYbKnefTeOlgz2pQF86lY/BcWGprto9a7zfXLi96h8MhmMIIlBctCbZnsp6r/5rSjv5SMmape8/IAbEnDKigF3pG3slPHm5dRCTPOgpyrpv0OmuSyZs3FNPMjYQ3W0/DOq+kUby6XfnYAwz+5Uqvsv6oNt18cjkTCI5ZbtexNJUrg8J55tRHyqrDx/NrbE+r root@pinel
+pinel.debian.org,pinel,popcon.debian.org,popcon,209.87.16.63,2607:f8f0:614:1::1274:63 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGfkbdSBkNQ1jpmOqya+/6ZdIrCa0VgQ1qm6y5IJxtY1 root@pinel
+piu-slave-conova-01.debian.org,piu-slave-conova-01,2a02:16a8:dc41:100::239 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1jiKG1zWmmFQVHZCH/gCBXWxp+Ly5cKKTd1j2tT2QJFVJB0VLkWKOR+hG/rU6tcgEmoVPEYFv7Bv2vnW4M3Z1Xbj2opMliqRl4HiLTQViWEbP4lQKwo5aFKS+SuhH1VsyrecStbKraW4l5nVsgBPGjIxB6zTNjGlC2CF32wUocveEBx12gPzxlIUfsJwZ9D0ZlTohSZg9bj+sv+WkHCaptsXfTd/+4XNuejyiNg6koEgiJ1lJhHTdAwdrtJUuTH6IeVL61uOpbZnBUOfI70LVFYJQFI68KXgYxWnlX09DtXPTbYuvhla51fT88mLYigTWYzhpzZUcHjMvdfpyxJ3L root@piu-slave-conova-01
+piu-slave-conova-01.debian.org,piu-slave-conova-01,2a02:16a8:dc41:100::239 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+icmqjnrzp1jm0TmGKxTxxZ5p3pdUpO+29MU273lq8 root@piu-slave-conova-01
+piu-slave-ubc-01.debian.org,piu-slave-ubc-01,209.87.16.42,2607:f8f0:614:1::1274:42 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWDJBbiPZYV2d/4Gb8oZAywQtphLEGFNW4fL+6ZiweWzW4WzAM0lYnNmfqvattb2g3pTZzKElhqwiYW4mnPxI0wlShBY02tiMx/V6ZKBAjEdjMGvRJ9X9974AASt84n1SQqkzy/7IFrVnepL8aIzS1b6lneSJV8QD+PIrfMg8SaxhLE7sFv+nRs+f4iQfvcKPNl+f7gqgak2UGdg1vdmyhIHj+w0PB4UZ1wbgR89/bD/ZFZo9gIdl/C6Sv3OmIqhCUJ9kS63TD4gwRoKI9SJikRXLRVO196ssNddO8RsZcgUkCwKTRVlifsiDCm4GZpWcrnhckGnktvDFBcTv3wjDH root@piu-slave-ubc-01
+piu-slave-ubc-01.debian.org,piu-slave-ubc-01,209.87.16.42,2607:f8f0:614:1::1274:42 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMQFbgvKJ05ujUAbyatnHhDlyiUOoi3ImQqyxqylGzhK root@piu-slave-ubc-01
+pkgmirror-csail.debian.org,pkgmirror-csail,128.31.0.51,2603:400a:ffff:bb8::801f:33 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDiDammuAStlXMWqLi0/Z9hQZGsO50CYQji7ZEhJTMjJ1KuwwD+MEZuYMviy0Dkt/27AmzqXBrhH0Z+y0ssVUOIctre75Ic913pFHF/9gPfye5Zu1DbMFllqYtkMr0S6nfWt0fBT/5N8OduBRvMWtv4lJbk/BQgLS7akiBI8NUZuE6cWdYWotkvZ3r+CI6zz0vFXaA/yMaTMFczkDhLF5WGa56m2YW6YqviflPgCsMKu3LPV5lWXATnUTRZuNPvYMUC4FhSWFolqutViFV7BL/XiOlOFyG+U0qmdmoc4+MGKN+VNkaOeuQdmlji7aUZiGgWmriwtbgj4PpT2raSiUi/ root@pkgmirror-csail
+pkgmirror-csail.debian.org,pkgmirror-csail,128.31.0.51,2603:400a:ffff:bb8::801f:33 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH0LfMnT+/j/z5Wxs2sZOunzPBzTI5WIjbCzO2y3F7pa root@pkgmirror-csail
+platti.debian.org,platti,140.211.166.201,2605:bc80:3010:b00:0:deb:166:201 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILKhipM4O01KH9QRLXHNO0H/i62A8qjNYWOuyS7n2Yz6 root@platti
+platti.debian.org,platti,140.211.166.201,2605:bc80:3010:b00:0:deb:166:201 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC3PgQvJSh1W6/oYyhALVxgxQybx5WHX6u+5se+EubcwT9WMV6CUK/DSxo0+K3mxgUe2kJk/gXMyUEXO+jMjISR63zbsaack70fF6cpgIVD+hvsn6OX3L7HCY2BaJvvVi8LMa4+lPpyMDxQ3XDJrCFNFT37JeJEc2oe4mGBVMZmBfPHyvS5YT0oApxWDeRy82QVwl4Jhi3NBWVNVSORe3ujE4LeCOjP4ixJpv0ACFzCC3Lf0AP2S37EUy3GSZ2TyG+m1+pZThzgil+rtQLHX2naOFY2V6hZWonQzW7Kj0KV6cylF6ojk0JXnW6dBnJmHW67MlpRxzOCoP6jUi3CjM3ziHc4NG24dQfmyEYK87rwNribJFwixgKgLWOwFw/i9AQ/AgChC5hZd+278+Z9yseh7wuHjp+VzFJ7LZgpsDxCgrpBCS65RvSI4zdQcHJA2EbgX19T7vsKuzjwIiIyHSHJdVemGViLuSAX3wG5SOKndXdu123z6RRWKf5T2i6hB3M= root@platti
+porta.debian.org,porta,194.177.211.207,2001:648:2ffc:deb::211:207 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTPoq0WOfY0MKqys6tEswv9P5oPQzFhtKLpb4bSCl8tlGKE0j6NiwOcl40xlHWojbsNP4VCMbJ0Z4mCHCNTa207yqfd4v8YKSfmyt8cOC3oxD49jReH5tpbokHYcx1OIScnY3ah7+pzQjwImG861+6Sh50LrWMz/KaZMQcGnjb1/9B4V2Xv0xV8248RvhBE65XASUx6J9GtQWUCanPBJmFzqxbFK3i6ExYzplwEYfkt4B3EUnlFF5ouN1cP80jneullkgXcvNv8R+o1OAkGduMTzlNMXl5VBwZVUu9hwSpUWThS5kmEK3avu3rqRcfzDPJGMYNRrwaEkQlYCwaB5UT root@porta
+porta.debian.org,porta,194.177.211.207,2001:648:2ffc:deb::211:207 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICBifiWT/VNx5TLWUzHUeYJDsUBBlrQiuJTyJZccq8yw root@porta
+postgresql-conova-01.debian.org,postgresql-conova-01,195.192.210.129,2a02:16a8:dc41:100::129 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/fnUaGrmh+8vKhmvhpLzMFQawSTSNppPlHbXeQHTH033pQe80tBXrHks7cOUpNunxiTvbpb5krfjuh4s4C0EpzPhxVCQoR49fOptB8HzBtEMAIlAZQrxaktd9QcAaNzUx4Y5Czz/26KjI333ZtK+xUFwL/9DDwsAOqWCREeu2g54+cQv5Ipqn5upafFspUuY/BkKqlhfj1M4j+Vs9TurrII4j0TQV28hEn2fyHPS9uQN4cT5eGn208nRPTy56huIMtWzzOH5xBamRVolkCSy7OA0qRPDukY6fuzvvyh3X4vUvwsq4PJaxg//bNvu23Wz2zscAxUzgC9TN6juw+/jX root@postgresql-conova-01
+postgresql-conova-01.debian.org,postgresql-conova-01,195.192.210.129,2a02:16a8:dc41:100::129 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK0m1lDNg8vXMU/TVhVxOWteIKd+FCswn2A2DzvNXh/h root@postgresql-conova-01
+postgresql-manda-01.debian.org,postgresql-manda-01,82.195.75.76,2001:41b8:202:deb::311:76 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3/J/VbrhV1J025fBXBmgg2aC8RROp1XxivuDRn0B3V6zlgKsiTUp2gWIOtr8cbWzoK5poTvTAWSDxbE3suCaHXEx2GYBgc5WwQo9qazO5K6MaPK85CqnioLgLGIDuhvclkn/1hqTx2z7CxknebSkE61xmQKY5lgodx+3aWAyw/2b9sFW1bnzfmZOLB9PThCYEBrGAjrRXUBRJqLVI1az9cRGFTuzHk31w4VnoEeZdkJD+R5xpWFw01PV7nrl+upSMTtHrXvLplIF7R17UE3fLJY53gad2iY9qavqrbLq4LwKmod3LkroitSzZxuQeGIqtuQBcGjePrsY71vAEIPdr root@postgresql-manda-01
+postgresql-manda-01.debian.org,postgresql-manda-01,82.195.75.76,2001:41b8:202:deb::311:76 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMKXe+SWbk6Qk7Ul+R1uByx24kQxHDQuAu55biLO3ja1 root@postgresql-manda-01
+ppc64el-osuosl-01.debian.org,ppc64el-osuosl-01,140.211.166.196,2605:bc80:3010:b00:0:deb:166:196 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDx1BgTg5dgQhyWZ1J20esQtMcgwtkIKtpleSdQu77pVzrkf0i5usQPUwFEUAkbuQYkzndyd1imhXlgvCqnprFeCixoy4B1rzc68bLz6TXkV29FoNqVQ8HLxauZbuioctqsP2ncA+rSOQCf9XzX6G9XIBtRkttM0UP2VuNywXPkyt940YaPC84WDaK+1Sr6U27YBkYflZxPbRNW73T/FFTp7fFZhUdBeO+Mm5Ua1atnkmLYa+75byJVmG8kmMtTUczEl11Q2PYB1Afl9KpeYS5UWmrojRbxhPwswbRYqbqA3bvvLYidggsRN/z3b3TzZa+VhEiZ44bU2KuYz2OJjStB root@ppc64el-osuosl-01
+ppc64el-osuosl-01.debian.org,ppc64el-osuosl-01,140.211.166.196,2605:bc80:3010:b00:0:deb:166:196 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGVpJPvFgspSr7p6aaTCF/FXtBB/Rgb4v+fjc/o1pMAu root@ppc64el-osuosl-01
+quantz.debian.org,quantz,packages.qa.debian.org,packages.qa,qa.debian.org,qa,209.87.16.73,2607:f8f0:614:1::1274:73 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCpbm6WtKY5ILJcN5sQwfNKuZ/e7AxumsPp3cthEd/MFygOy/YRZF71Y+ikzaSwIMK55rY3/qI5D1jKDnhBTuIUsVt8pSGthla1SBzejl1Ud5mXft4aSwMnsP+xd8+SlcJ6J4vIFn9er3of4UEnsotrsXjjHQ/ls/Q8XQOPlDD3ryadlmc7ITOU+AX681Oryum2czypMoZhtvIejN8SeZbqqMIZyBhO07lmNHAU7WiDcv4HFXdmUuemXfNVmlRsiVGLAnvO9BDg+hRuKzRvkPkgQv+m9ZcaWLzdQlBgDBe5VkawQ72NzSHC2tLkmY2Kp/7el08fcLN6qTzWLFQXq/pz root@quantz
+quantz.debian.org,quantz,packages.qa.debian.org,packages.qa,qa.debian.org,qa,209.87.16.73,2607:f8f0:614:1::1274:73 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINwreo6wBHonk/6L+kzSKxw94ZRXLw6FjVzoibQu3OUJ root@quantz
+rainier.debian.org,rainier,2001:41b8:202:deb::311:94,82.195.75.94 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAh0Rk9hEWX9unD3OXSwbK9CiAnTRbllNk7Oe1L23Sazy6dATPrbbPT5FLTRv9VkPpKseaiwpfmqI07+sUbFXRAs29RcL0UP32mgknZohnB0+wG1Bps1OOT36sfMgTbqTWJdX1KvJ36+CNwVC4eIr8lxF5CvlpILS6syt2O7RJpqpRnaYmrDdp2Kk0UnOmW2UrfTy9OkoYHhpbr7dMP7IH32FfRrmDflgJjhIrU956ezYOrImQ7r6b4daFm4sJzAbu5N6LjzhtxrpkIBehChM/4lhVmiHJOJtuxVsvyB/IRQU3L1T+2qFlLtiyE+tcmB5o5W7QIE3Y2+xhqXxxJRNp root@rainier
+rainier.debian.org,rainier,2001:41b8:202:deb::311:94,82.195.75.94 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGDS/OSJp7gusXIIsAYAlp4KyhommpGGGy6IkONi1yMy root@rainier
+rapoport.debian.org,rapoport,2001:41b8:202:deb::311:95,82.195.75.95 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCjSVrPd09U5StV/5OPeleuKG5GufGHIh7IrEQr2kHcCnX1bbz1+7SFnM6k5DuGKf6NqYQGZYxk31wKGUj2MIslmIduPpZUTEuvtHPoMcLWd+datVqJ0w0+iofSPEk79YmidhmEBjkDdlsbH8tfIFdYh6rudmJ3TidjDFa7/XCvYpPD7r6CQ8jGH/ALLsYDAYXzlYRTkCcVps4WqAxbZiCa+HHsjQW9FmuBQav1I9inSaIQ5/yFQwT8u0CAt+JQcJaFDBa5Pjk2mZlZk3cN86Uwl41nildCDcq2YuzyKg3fIsejLXPWDO9ray36mBWGFQ9Zdh/vwDU1cMbnmdghdrlZ root@rapoport
+rapoport.debian.org,rapoport,2001:41b8:202:deb::311:95,82.195.75.95 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB7TpF+NdQh+SmTzLubc0nAwRImn+9QPRju59pHAApeg root@rapoport
+reger.debian.org,reger,209.87.16.27,2607:f8f0:614:1::1274:27 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCgiM2q6mgHl/2d9W8XvSp3jv8qLX8t+MbOLfdIBX0CaOt+alNbN7toDzZ/N1aHYCJaeFdRRF/zIhmFpToQhOMa8kqK4aW0rKZuUP3za9Ei5K22O/AepN/XwDBgCg0gKfWLsfp7z2yWMwN7dKMJSuOiFo7W8wY5tS908xPzigHJKgcibhUT6fOKcUWzs6Yy8o0nySyOoO18Y/7QkOQv/ZA5ktxouaENJgTE2Ali5AJKc+BfshxPDbertr3qBc+NB69LeYpMf6BvYoYtVLw8Hu2YoEZ2aFOnDvF2OPdc21XhizAzVbPTTc8fAhNl0l30cVoWICfYuLwkbMR/Yy79ysCH root@reger
+reger.debian.org,reger,209.87.16.27,2607:f8f0:614:1::1274:27 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICntpf4tnxfD4f1bV+prgGgxc0DvHuYkps0N6YgffK2q root@reger
+respighi.debian.org,respighi,195.192.210.131,2a02:16a8:dc41:100::131 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEFTD0HInwtgP9EoPYZle3YNjU4bwzM2BKNo3m+yTNGUjLMGoaWpi6imDv5FOqCOFwykhgjPAS+fifQQyhydbKHhAKI0gRH5CholmZuCpnztjXVRp8Ix5Q/gIl+isY/YVyGArxethFrAizX1plDp0byGMN3/MPGRCd75X6/yUAN2q/AZOz5RQLW7imakNHqIrY4v5OAmuBhuOlKaMUy7ePY5TN2+yrGlXustwynPXdj6XikKIX548rzWjN22gHbAKNDkAVSq321KuBpsKIp+KuKer8fPnHhnXniHnR2nozEtQjEkC+V61QXlGAHdKGijvRyVR2ZZDVPmzeR5HZIpM7 root@respighi
+respighi.debian.org,respighi,195.192.210.131,2a02:16a8:dc41:100::131 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILFCgYpvuJz4OKUcs/N3duFqDumd24C3wNDlljc7E9Q+ root@respighi
+sallinen.debian.org,sallinen,snapshot.debian.org,snapshot,snapshot-master.debian.org,snapshot-master,193.62.202.26,2001:630:206:4000:1a1a:0:c13e:ca1a ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBOoq7Z3SP095A5G0pCcc786vSN3aXvAcUv7G7rhohxNpdPF5g7Xk6xspSOYIUP3yl72+bfsnWI5qO3rod2jC+f7gBHYMYgezd9LXJMqmm9p6klUYWwZLPpLR5tsBY1mgAO9tYYAYTQsnCN5MsZ/9VB1U3Lu3ZMqlQYJvnXa8TL98tqziTlpgOj/MnevUypTMLWAYmmb0E2mp+AHOfGFmLBHfXxFzWhlazFfnJPCqSPXFwrhUxnMpkjKHI/xztuxPsxwUIjXaDCuaoYQMY2n33YHNGYRIXSv0+/JMq/8fTKTYOhoWEvbL4pxO7ZMGAJigBLSI6TiFomeZwkI8vZ/0N root@sallinen
+sallinen.debian.org,sallinen,snapshot.debian.org,snapshot,snapshot-master.debian.org,snapshot-master,193.62.202.26,2001:630:206:4000:1a1a:0:c13e:ca1a ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINIklNm4DoNbd/dAcgw6wl6kAZNDMl009ifSEouaUod5 root@sallinen
+santoro.debian.org,santoro,200.17.202.197,2801:82:80ff:8009:e61f:13ff:fe63:8e88 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINjsrVeO5z3ySR/pXi6OqKgtIPja9f2iYeuCyENtMqVO root@santoro
+santoro.debian.org,santoro,200.17.202.197,2801:82:80ff:8009:e61f:13ff:fe63:8e88 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWbVhzuwKFiMPRBRzWTn5B6+QfapjbkNRZa6NL1l4bluv64HopyGkGnxHEYuQoYw27xrp8aMttvLjxQ28a9NRb8sJv1xBnlZ+tWBCsBp9kUE62Rj2zfypo1WexVYPB4mjg5N6sRHkZRDko1zvrTHNyRcoUOFdjRYUhmAsCBeJ+ZvOixgLaS7pBBrfaIkc4sMQTxcBMu7PgLYCEiWHrE1bramKawI3vRhKx1ykopBTPTGOI/BBmCwOLDNGpSNQ8u1xGulcBl21lOiCcZBhm/2+y2/BpIiKGoqt8zDYex3k+DC0AX5Gf27jvauxKeR1FEy+RxHKViyA/osQOCNhMD83x root@santoro
+schmelzer.debian.org,schmelzer,185.69.161.161,2a02:16a8:dc41:100::161 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPZHfnCPZ+gShcnsgK08fG0+cO89PI7wtbFYNbBTfM8C root@schmelzer
+schmelzer.debian.org,schmelzer,185.69.161.161,2a02:16a8:dc41:100::161 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDths66Lo9Bmb4cRpvrzIZfKr80BJQyQhX4CVzp+JrACc5fHLg8nXXWIdupFyhtQkS+NIH8MhonYdfcr36snC2vGrhkiQKxn7e341HpF3c4ECDH7hTYfpgiAo1ZcGgVOnwfhD9/kke714ajomFbllZQ9AY681HqaptybB7Z+pamBYNWboIGudP9tkbzUT1yZzGaeZ4dio2+7CDOf6vca4rwxtCGuvCjQQTHr+SZgCr8OiVzilQg17XTRsr36e7ELbJd9xWU/AEIjKCnTblfvPbp7ZQeIB2I5kmxeolAIZlvlLr7nS20jUnZUO8ZtpGVpYQu6PlaE+Hqn/DnNzrlFk4/ root@schmelzer
+schumann.debian.org,schumann,2001:8d8:580:400:6564:a62::43,212.227.126.43 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINSJThRYsQRSfzCsAWhUaRgxVgNrC7JNBD56ZFCnbja6 root@schumann
+schumann.debian.org,schumann,2001:8d8:580:400:6564:a62::43,212.227.126.43 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFoHwiIZGdRMZZ2aIopjoJN7KeXrqEafs21PXcRG29qPKdzwkMRqrQYTIYjJaPTxgphLC4DST6oFaFWrye0d4lZqaQsXabjrz3hL+aR5oij+K5BMmoPP+SoJMYWVq321L9orgGOo1jGkZs2kKnItZJ1u4C7oHfJ+v6CGUQohGOjCUc4XS5J2p5bY/hlDDVgBf8EbIjI7yxIpLB7jEpOkAk6D/IhEePmyF6U9ih0W0+IgbYRK1FqgKG3RLTfnsh0gaGyRKXMFXvVzuKzGPsUWqqYqOlr635cNy3AuB3tR/wRSHYUpaHpST08a4DtdO8LgZZ3PDFfu8rHANRRbWG1Ltx root@schumann
+sechter.debian.org,sechter,2610:148:1f10:3::73,128.61.240.73 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEcUbdNV1OJcdJqGrcz6tjHLaKrmrX8YAy1482U42klE root@sechter
+sechter.debian.org,sechter,2610:148:1f10:3::73,128.61.240.73 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLGmVQvSkpP5VVEQJL+BxJxRBrz9dR6O12bL6HKcR2s3C5O0ytIB0nKF4DZkttBBq6i3qjIhJN6AqDlsSegosRD8JDex7AjZFsqY3hjhx7ptHjn+0kn2dl7MI6JAfrIykmDwL4YiDQC6cTlNE4WIX1GfU8Duds0/YXUuPGS4KsxJrHAZzqhYjzaNTjyo7sQ6ISTBxwD5aMo5yoIXgXljXeMfAJ3Dql7OoM3LiChckv5MBVuJGlIkvyBZFoym9zwHSK6Cf0YbMYo2fKLMHpGaAWIaV8p2/Eh3LUTkEc79A7iELZrRap/S8NDxCxLxJXSN5/tdSpKCWhFgxSKLyXxnlB root@sechter
+seger.debian.org,seger,82.195.75.93,2001:41b8:202:deb::311:93 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDcLb9G3HW3lFSlT+BrkgHm0GqSooPB0ZU8xg0wriJiqdb5Qs4y1WzwURkUAw2am1ASqrJaI5+e4hTf8Y2US2o4Jqy6EudnE3TiNQpvi7v+9EqfU311Z8oBUvCMSFG/VhVbomNuoxM6HPSEsvwTVhv2V7+Xlsrp+lEPPH8m92NLXJZYbtsfebPEyF7NFnir4FIIhx89WeKOwGkAfFVYHbjK7bKtDxnLju6C1D8HjKcQSUjik17yPDL+OLYMAJZPbjkXcHu2G4ioj7450yzGjYVhdG0Zc1p1JQjVHZBxoEMkZNM6akNeuhngTPG/vO6hODkKKrWeVJYIcWs+S6C8iijh root@seger
+seger.debian.org,seger,82.195.75.93,2001:41b8:202:deb::311:93 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDvPr8I6fLTZB8k5f3epjqyRFJwNIXjB1Mn622JaTvZM root@seger
+setoguchi.debian.org,setoguchi,133.242.99.74,2401:2500:103:11a::74 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBdVj3FELGsuJR2g7W60ryWAX5+3np7pE5lRZYwSiSSR root@setoguchi
+setoguchi.debian.org,setoguchi,133.242.99.74,2401:2500:103:11a::74 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBBkl53xHB44PGQtYs1zW1bougShYuAeXmEbkEgAYAtmxAvm+7AbiOJuj9meMuHDGSMQy0RZjY4hYsK5MMP3JeFy9HzN+N4sel/R+o3+Hb9ULT/aywo3MOM2Pa+tcrubC1PAgYYRd9iSp+DwpGGIqAHRsTPOWicfhsM0q3UWxj6GxBigvkf+ZjqssS0j7eEs8Ev4qDo6jmtELlerAuKRWk+xeK5ObBek9Z3uF+UlK++jR+iiY0S3DTi9VYzW9m8Z5O6md1EXHoyjdRK2zv2vXrcn8nZ9MfKJN+y1VaGrOtskD4IZA0B5DTYA8SNOukMfvQHHWgAbKLoqRKFZY/dMj/ root@setoguchi
+sibelius.debian.org,sibelius,morgue.debian.org,morgue,snapshot.debian.org,snapshot,193.62.202.28,2001:630:206:4000:1a1a:0:c13e:ca1c ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDD4Om7GYw2y+aM/YpN3IHl8j1JVJa0Ec0dp7+C5BcS4OVkyJ0tA9p9bKNkCwMvJR+LyBo4DzYxTTEpqDJUVHWpzjhwEokjUkiZzXfnoH1zK/e5vhWfhTpCSRT6aJN1m8MJKT9l20ZKCnW+UBy8SPa0sh4knVhjPi0STTn09kesUbpf/DGzKI3/eJ8Ft2ASL6tIJ9W6pRv1fzXuAjC9kcTdBYf6tN50BNU5Dxb4WmHHTEammj1nCHIuv14jNAmUUFAIPHeZxwObpm+/8ntlEkeNX6jncnieVesiBCKP+rIgsyuQ6gs159UAXTTUETnsI/F9TCWI4M+bsRWYNAaI/8R3 root@sibelius
+sibelius.debian.org,sibelius,morgue.debian.org,morgue,snapshot.debian.org,snapshot,193.62.202.28,2001:630:206:4000:1a1a:0:c13e:ca1c ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL4TB13pV1hhz1FUKXDbSz4ePg9YtSh12aSCb3B0MlhA root@sibelius
+smit.debian.org,smit,130.89.148.78,2001:67c:2564:a119::78 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKu5zdpMx7OuRFWQQ2DhPEeyqtyL7qoel0uBErhbnSgo root@smit
+smit.debian.org,smit,130.89.148.78,2001:67c:2564:a119::78 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDaqytvSSjEKVkZQ8zh+H+6UVVrF/8BlBEoh/hWpjFmbHBivl0Is3+2sddTRZsXrFxoXpiC3i97SufhrpNTEFLimGP4jmHv3+R277lgshFD5157+WrvAJtJt9vvG8Mf1V/YTathIESwGj9TKAOsj+VDt7b//CPXiLCZoIkQ+1/Cm7lntZCE/NLqskGjRiAwIC26nWxFXOdcjMRbnwSZ9fn5ha44z2jK8e++5iGMre4FYIOj1GbSvmxdbwakmMAIB4d/SwED8x+OfU009KQxNqIhSMx4bU0qulRzCOnBb+r0ctxtFeTRZRRoxn93T6kgn1Wq99ODaUGTvlJ7MHjZmD35 root@smit
+snapshotdb-manda-01.debian.org,snapshotdb-manda-01,82.195.75.73,2001:41b8:202:deb::311:73 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZFefqoikkFRbv7Fo/5rZaQcbxLtanl/vfsHlmZPqZbDwx7f+pBqbpfSVtxdUXGFwDqTCa9tR+CsXgH3Wdta9gJ2yEw779eVJOpegyhghjch/wDu9sGf5qwzxj2iLOc97m5KSfhEg1mX4afQsee+9wUgaW+GY1/fIF6hDtqDAlgnLJypTSZx6YHNkmqM5WUn71cpduWEbl1+BV+9aMxQfOeSJMLIJsIrcX5F7sA+jyIuBToqqf/9VPaJpuBL5tAkUBdsjyUOWFhL+oLnBgKY2fZItK5WSJEhxL5kVhZRaEdY4Hlk5vZ4rIs0MiBoWX122IY1W/0UAcomzWPIhcTCKn root@snapshotdb-manda-01
+snapshotdb-manda-01.debian.org,snapshotdb-manda-01,82.195.75.73,2001:41b8:202:deb::311:73 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEw8Z/TBwwv49BGisMq9MgIyTypQeBbSv8R+RbVfFGp4 root@snapshotdb-manda-01
+snapshotweb-manda-01.debian.org,snapshotweb-manda-01,82.195.75.89,2001:41b8:202:deb::311:89 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7UQocUJ7vLJV4Ad63zGQwSPA+0R5u0QU19an5pKaFd2fT0qfdNCqhwW05NBMfp/jWwYQCxg7Ywu9G/fzRok4caj1wsAUqe7yOVRTYuLZM93CATQHOWEE8+uVQhH+wJm5+eXAyll+0g+LXdL3NgOYu7ScqW4v++OiYa7b1ZroeTB5T/7Fm309HWEplqqv48fU4ajEVRxToFdKgI1Kaf/Xlbyj/TL7GchxMDWYmcbOI2PqEY0Og13SPeRXTR13rCKjGvSwOLMt9WJpwrlNYuGGAIQ65ezB9FIjn5VAQJIljmIeGrWP6crHwhNOONnC0jXXILCUI+jFhIwB+3wdiMUY5 root@snapshotweb-manda-01
+snapshotweb-manda-01.debian.org,snapshotweb-manda-01,82.195.75.89,2001:41b8:202:deb::311:89 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFIQqZDA9M8nIqaax3MGSBy5IIvokTKLuWwvau1nXFmH root@snapshotweb-manda-01
+sonntag.debian.org,sonntag,209.87.16.34,2607:f8f0:614:1::1274:34 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDcD0+TSkpFLV9nt2RsDyWeJz74YwdKc0ZwMUOgDw02NAIUlwsPpBxByDMQCt+R6e4byHymEnQhIOPtxBn0ceJh+Y6xGDqL4PhO+MHOcdESAkDaJsQ1PiJZoRYV6p/P0Cr4WIqHgUlfSFizETZ0IUgemmd5tb1D+cYm3p7M7gmC0690vL/W0M0HHoZo5Tzc+cvOPhDQfGf4TM3SzreoUEsDdCsQHoOyKGC9lNwt3Cm7j/jwIho0mUiTAU8tzjZoM5BX/wI+3T8XKanJQTU9aSOwLEU6xt2QlvdoNIS/KSrOcGNdtugDBZTDAsvkrVd3sBpR4YM4C4Rpj9loJ0iAv4R/ root@sonntag
+sonntag.debian.org,sonntag,209.87.16.34,2607:f8f0:614:1::1274:34 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINcyH7UXZaAu7GQfvWtEJo175qocbdTrqpp5cRXd/vIf root@sonntag
+sor.debian.org,sor,209.87.16.74,2607:f8f0:614:1::1274:74 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPaAgif29/2cUpSUC1/7HGTDalwT5M0SVNex5ccSJyhR root@sor
+sor.debian.org,sor,209.87.16.74,2607:f8f0:614:1::1274:74 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDhaJ1fTav10pILY61r+b8tgrAA2627QonaSD8m5B1lAoGrgg626qLRE9P3kitT+RIKBD/HRnNWEZQWkJ8GuqfPj7FBOiNg+vanPyHZruU+k8eP0BNRNM4c1DitzGVnhs/6xGqLFpayITMYbGmBW6vafvGqhz7Q7TAm67qJKP3xVxUOhZlk6N3VXinEd93OFcxpU5u/FVvnK2zswbS5IC9JSBrMJHLDLytowRC6sL9CGdpiMB8dZ2NtYB8IztkMVVm/KxwMlLyRQFsyyQWPhKIueNaeLPKiLOpLwk6e43cQHRA6qMR+UNOsYxVHLQxLhXb5eB/WFCkInZvHG/AayEk7 root@sor
+soriano.debian.org,soriano,security-tracker.debian.org,security-tracker,128.31.0.67,2603:400a:ffff:bb8::801f:43 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDb1X9ct9+fmdMGx7uiuQQ/S3898HByTxUFsjXXoe4Lc8Ues8qdkqVlTsbJI2Imv70gklrZJViFD/zQHUWzKxfOn0q8B80D3IX1NDMPEXgg6y6QSWar13sgaM+QMt+3rRWeGPisJVCjXp48+TjxDbjgWW6hOXHEeRB8MUiW7MoHZ0I6lxbpKZlntYp8PqBh2jD3ue0D0O8FApR3j07FToxrSJ5WyjtqktPVLkvAslgC5UsQMBADUgbc3bzuIyi6dO6mChR00/I+0/sK9+zqwZ6Zm4EoSuNMocuFdkIcvCkWCR/jTsFVCr5Lg7M6PX+D+AVZ7+OWoBnqPXbIlO+tL+7x root@soriano
+soriano.debian.org,soriano,security-tracker.debian.org,security-tracker,128.31.0.67,2603:400a:ffff:bb8::801f:43 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB86j09i757G6ybS9jVYNpkJgnXCtjo4eBVK90IIgxmU root@soriano
+static-master-grnet-01.debian.org,static-master-grnet-01,194.177.211.209,2001:648:2ffc:deb::211:209 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHZIOn6waEeJYQKy7qelEpFeT1iyIVYOQFuibGj6z6Ou root@grnet-node01
+static-master-grnet-01.debian.org,static-master-grnet-01,194.177.211.209,2001:648:2ffc:deb::211:209 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyAg1sgEBqIFDX4XicuXISx22cHrSNuHuR3kNYo263nlJWQYFJVKzWKDDCTUiy/HccVSySCfbc7X5jpJBLdJVHaIBVeBwXVD2c8XCnW4g1bGgbTX0ZR0TjKg3W4wptK7rMpR7txBtz8Y/k3aOVhOy8UjAldoOZiwEDMxPocsGb4wLiBchRTj9WfOong1US8RdQ9ZZiHU8/Y01WIK3TbjrM/llITEQ/Y0yizwr4O20Vl/hLipyb54WRoj1Z4SOu/QPL0CM68AdOmOevcIyHrboLAW6f7eQHCTy1ciWO1oHF/K0ukLkHRHAtIqFQbxdWVJsj2C9/DOg/TL/kQawt77yN root@grnet-node01
+static-master-manda-01.debian.org,static-master-manda-01,82.195.75.97,2001:41b8:202:deb::311:97 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCw8AZGSo35dqdCATeIpN5vo0uJRJKuyeHCMoiCSYCzjOyZSRZemyK2kxS7fRZKboQBGpgieG7SD+DnkeGbrkubl+ojUwxZ9Av5t2510Ycye8c3fIHLfIQNeH2eZYEOzVwVf/4Zoxzyp3+L3E82zXU0uYzFRGg1jkBbbHv0cAuiQiI4MZCXrFmS+DdAu3NUTVtnN8wgknmADzkXJ1TFa7sY8t1fciE98nITOF5hJFCRa61FQWSCEbgMVxO013LmK87uy9cBwd7VhUsiQKnMI1WK0hBcb8v7BQXtnn+BNPSTmCO11EodJTxa4knKHzAqJuNpexVNCGxM3eNex7t37gxD root@static-master-manda-01
+static-master-manda-01.debian.org,static-master-manda-01,82.195.75.97,2001:41b8:202:deb::311:97 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHmK6g5dIPOx70lNfKwBvPzytWhCuUoUgCxTxYrFyd5h root@static-master-manda-01
+static-master-ubc-01.debian.org,static-master-ubc-01,209.87.16.47,2607:f8f0:614:1::1274:47 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDIf6PXO5py3YSytBE+roxm8DdEjtr7FuAQZS6lLp22098MIdAxpfelp5GoC5ZTf/v/O0FgZRpmr2kg2cTQuNCL6K5vScsQ79jC7AvOznu9hPB2Nye9ArmpsLL52H5JuZMARvE4DuJcwnB5/RA43t9UgPoOM1R0XiqtpVcF5fee8HsmxfVzLy29ylTDToJ3IYfGVStkwf8YOD8OZGm1+yA3ef4n2L5LNv7c1DkgK4FFH5gPzQi9Faz36qcG0iLPkb83qZ58l6M8M5qH5GSsfJg2xxCIdLnViyWAn8AQRZa31YecoNgkRo7gjGVHhU5SunyZVxTa+VanD80n8ytYucgP root@static-master-ubc-01
+static-master-ubc-01.debian.org,static-master-ubc-01,209.87.16.47,2607:f8f0:614:1::1274:47 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB/rML+KqzMxgJIHKpbm97PY8w1VNwjlX0E8o8R1e9V/ root@static-master-ubc-01
+storace.debian.org,storace,2a02:158:380:280::161,93.94.130.161 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/JYs65t3FDbKorDTE71ntdEKqwLoOMS39PYJTy/iyPAeJUsDt66vq0Vb9qKHhhCBr3TXffr3zFVoEcsjmii0zbNw+D0wo6sCs4llBF0eOFAa0u8hyALbcrwuQjqU9XCB5Y+FF+RD38uq6qrffe7jjmt9Uyvyp9YsSk3VgboYWxmcy5HusuRK3fa3I5wbLial4Dzu/zGsp0KImyujdOfrOv19gj0K/ct5uqM2L/onWkFJSwQqT2u4CtJsPMgD4fn35w0myyyEa/HRJUCWdqj0Tg00qEMrP72g+J6nbQShY0hooqrxFOj7bDtJyIJ4wN9w6W2/rBeuEu2FvfRYw2B2N root@storace
+storace.debian.org,storace,2a02:158:380:280::161,93.94.130.161 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKRP/H0U3CANbgqYp0Vdz7G+O7ULKUHh9iii82dzucz9 root@storace
+stravinsky.debian.org,stravinsky,submission.debian.org,submission,2001:41b8:202:deb::311:108,82.195.75.108 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFJoHb+TrA9BLJGt+xzdoG6Det35XmlVuM/6VTs934rc root@stravinsky
+stravinsky.debian.org,stravinsky,submission.debian.org,submission,2001:41b8:202:deb::311:108,82.195.75.108 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCq5i5a+Pd0iRsuHAhI6gZHRNF5Rc5lcrR0AQIWsk0ZkID+8PEMSSOB4FoKHvmy5rroTwXsxMieqz6Xyz8+0RcRPQMeeMvINL43mZkgBqPk6w1CHUjDUhhq/O0UmEWkm3+YSDIXVMLVcXiTsnBJ5IKtvDH8Wf17i2eb+6oTxTzNmgWHCd3ntgw477zSGJTCi0G3Ss9JQ7PDtfis9d8A6Sx4F7eOmHZeqRglKYWgo+/j5wj+2V8K3Ob2AhAeYT7ZPQMABiJRW6rawxqSBNjWdbx4Ix/OOInRsACGryQYy7/uTtldJQY/jSmrHmrBhiidFl9DTXjEY5bSqloUU00AcSDX root@stravinsky
+suchon.debian.org,suchon,ftp.security.upload.debian.org,ftp.security.upload,ssh.security.upload.debian.org,ssh.security.upload,2001:41b8:202:deb::311:68,82.195.75.68 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOEmZWFhNrJnmapG2jS7F5SS3GkBsuMqV8JeJVc2lL6P root@suchon
+suchon.debian.org,suchon,ftp.security.upload.debian.org,ftp.security.upload,ssh.security.upload.debian.org,ssh.security.upload,2001:41b8:202:deb::311:68,82.195.75.68 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJRzEyE3s5X1kpImxFm1zW71LDeZ1jdKmIGRvHlPv57VU1kTLBxKEWTh99WSMMjCHDVFFzghKXCp+YN+OQw2L/8uwPDNl8BkRU/QxFm3TkMNoPulHLmTWsmAlrNRIeYtfBqKoKTR/Y30DWzTts/8MIAs93CaxkraGlFATTwv2mBNCk0YwgyVTaSrJY9CnyTYgsolqc0oYTiZBQX9Nzf60gcyJUn0HjfKZuxTSj7JfyZepF4gSbN2HkBPdRGkalORU4fKA4TU5vsv773eGkyYpk3j8ITYGtDjCbJ8dS3/GPCnCODrg7M0y7+hWqpivd8uID/RfsV8sjzNob9Pbtj7bl root@suchon
+tate.debian.org,tate,debtags.debian.org,debtags,195.192.210.130,2a02:16a8:dc41:100::130 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQI6u9+G9vH2IDMoyC3uEQQr4m7I2nXbdBZHxQ+IzXv9ATosXwR8bgQDNYIViWv2IpQQ35nplWlJq8WF/QIdsQbS6CSCYfvCBjvfVbf2Fl3uVYcTnxYs8NeBF/paFCZ54ydDduW3ea6jCNPnP03COeT8LgSLMM5omPc2cx2Nx67ie11wcNZ0jZsOUcQanSCqGkInApIgjCNtmhDNeVVtO27HykIRW/+TiZfi/signlggXLcb4zoumEfDgRlLKdreczcouJyNw83dj9hsoxUejq8x/hVkFTzL34x1HMpBSf0TriI1HFl/X7krQjXrpUS2cEnMpknl+oqywhiMpwS3fx root@tate
+tate.debian.org,tate,debtags.debian.org,debtags,195.192.210.130,2a02:16a8:dc41:100::130 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL26oUg0UeECSZz0or6S/VH9w0IsbKmm0nj+W+AnJI9J root@tate
+tchaikovsky.debian.org,tchaikovsky,209.87.16.35,2607:f8f0:614:1::1274:35 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA8ZI2wkpeBadC42zGBn/zojUBRb/rOoTWS+r2x+ZDOJ6CIfdVTdaD7VBB/p50z746Q+4YzxLAPbJRJwZnTECvJdHTUiHJdZBMzPxIY1iw8SypMJ8Yp0y+ZwzR+hfaATGRKNmwj8IaWc4PWSfrU6Armv157Wxxe8hQFWpL8ss2SJNSNAl5XVsYsxS7saqunkQwyS+tdnBWLXpV8Yb+oLiDqZaY4YU1E9DwVxflK1rH1LIDHPPXMvbFGGluHHX+YOClXdLVX2epeh/DABdogckxnsL9I0l10LIUdvdqbqKCGjTd/38i/S9F1go9EYmZTw2Whyrvc0jgL9fqiJSO4cqTiw== root@tchaikovsky
+tchaikovsky.debian.org,tchaikovsky,209.87.16.35,2607:f8f0:614:1::1274:35 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFwtalEOGjmYlOr3EBVoJl0GwcorilW7wqaOvrEETPgr root@tchaikovsky
+ticharich.debian.org,ticharich,tracker.debian.org,tracker,209.87.16.64,2607:f8f0:614:1::1274:64 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDODclF9/+X/35ZZ4vgi0fgbJR58/M5YtX4ZQFcO2iWO2K35Qv2HhyU5h9fPsrYU3zXJIxdQN4P+vG0+xshkPrHv3pkkd5VVkjsa3vcuxS4W7Do3GcLnqpGVNqAolS6IKNy2C3WGrUIvqd6Du5r0pL1lUTEIx37wBNH3KZORhRF0wAxIUD/mdsjRT1iQDG0aMNMt/EJ91UqBwlu7SBBjqe2tDxmPJPS51TkRKk+Kozj9cpe0mdJOxPmn0D6QBWNmR7KnBd0zuaFyOc6xAnDMeo0doCXVB7Bqlb3bWjfeS9j9Q5+dSHjeTVIvkR3vh5B2FH7WpJac6h8OK5C8FraSEwX root@ticharich
+ticharich.debian.org,ticharich,tracker.debian.org,tracker,209.87.16.64,2607:f8f0:614:1::1274:64 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICohKjjEFJ3BRcwbX+zCQ3UDJEDCBavY2ZOv0tOUKfSs root@ticharich
+trabaci.debian.org,trabaci,209.87.16.49,2607:f8f0:614:1::1274:49 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDErjMpUn99sFdZF5gJaAQSky2ETv5D+4OVxcf2G+AjwOUkJYLPiwgm7Ob6VfhtW7KU7SBdNIXOe6bBM639coIgfz7Euhrl+Cc/WfH5D9tbalE1sto229lGzwRsMTqRMvizJsBdkhxObZ7Lzz1/pqsyBUDf0lLkAtui92Roi/C91Iks1cNXr/I8B8XlbyqmzoZtvODdsG/opU8TN4KfWU1MgMMNBzBUOliq9AExgQBvW7ROemNDiXSkOJlYx58C4kYc1eko/s9aTZiNXJ2zClElbFBP65R8yooV4dqB4cM7Z/FRGEv/Bj8TdDCltWb1rJlbSoQrg8WNs90lhJhNGtkH root@trabaci
+trabaci.debian.org,trabaci,209.87.16.49,2607:f8f0:614:1::1274:49 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFShOH7RfH0gjdIDTC42eo96pBPmlXcq1vssgj9Ab0ay root@trabaci
+tye.debian.org,tye,i18n.debian.org,i18n,209.87.16.37,2607:f8f0:614:1::1274:37 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgEkJYvdSgHE2Bn1g75+l9JyO1YVAJo8lVRm2HoFMi/zdjlPonPwpzkgl3QjUE2lVXiM0k68L2gIC7gN9ZgX5shw8VI1Ww/WIAyIU9EVwr+BjQVWgNJy1pe46wZsmdNzU6edP2yHtZMBa9DEvmx4kecedI7OJxkuIrV3uCbPp0tts/u/oESnNMlzG1Ujrf0sVZcqNQp4C5WJdfQ4pcCvhvhYKy34FibASNpSDRUowvDJRdyrJEIFIxqUAtlN7J3DIUGgZ0kypM4eYT0AXcF0x7eG+eIKzG7cqhAPN07nFxWpHTyc5XvjU/17Fdr8u1Domcz2Si5WSsVsc0WAD72duR root@tye
+tye.debian.org,tye,i18n.debian.org,i18n,209.87.16.37,2607:f8f0:614:1::1274:37 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHVdGITDe1USj7SULfEeQYX3RBiyyKnyPxtI56zMslfY root@tye
+ubc-enc2bl01.debian.org,ubc-enc2bl01,ganeti2.ubc.debian.org,ganeti2.ubc,209.87.16.1,2607:f8f0:614:1::1274:1 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBkN8eBuhPm5qUO/VkzCvkq2iPFtpnQld2s1rBcCbc8H root@ubc-enc2bl01
+ubc-enc2bl01.debian.org,ubc-enc2bl01,ganeti2.ubc.debian.org,ganeti2.ubc,209.87.16.1,2607:f8f0:614:1::1274:1 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNYL5AaIBJIL6vYLl/aQjIpKXZkdxAeU7ZB2qx6DN/bZA88tGcSp5r2kMoKFPT/EFggQKsDg9i7u3s9zsH+uNoPulnrvPxPB81VUV8kgMhq6E5QVyADbwhK+0DSUAJXrA3rxZY5B2ask3dkywYvHo+afL2CDywMkYPWIrjibEl9B9fPPEJ5zJJkg8+S88lhMC7dvH3/DpHFMiLduJiMS4n/0BSRYX/D0aINPvD1zRxc2XY51A5VdvoxC5sHqJMYbTBLWaZeSBN4w/Gp9su64hat62GeBd2PrM3jGTriJ8bnSPkcYiBYdz+NPhQtfUHQNd1wm+DJbdKNZGE1xAIn4XD root@ubc-enc2bl01
+ubc-enc2bl02.debian.org,ubc-enc2bl02,ganeti2.ubc.debian.org,ganeti2.ubc,209.87.16.2,2607:f8f0:614:1::1274:2 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID20VSLm/LmtScItgODsuLxhwQsDQT/8AGpWu0vjOzE7 root@ubc-enc2bl02
+ubc-enc2bl02.debian.org,ubc-enc2bl02,ganeti2.ubc.debian.org,ganeti2.ubc,209.87.16.2,2607:f8f0:614:1::1274:2 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCt5IoETMrmRCcYAn4Gd8eLWVSbMWkj9rQ3jJ4x/AqYgCVpltjI0b/MBxCo1dwJ/ULCZu4HrFsySKwZbnpbaJiNfqFpvOzjctx5HF9I+42jMKE5rAk/y6UENoRaa6YV9rNYmbCqZYQ/2vTji5tFtLvscXq3vD8OqHcO3O9isdjQ0pHArgyoGs32m4uFeL4glEisx9f/HZDs/OU9R6mRoGcTwveQ2EVjKbBURK+4CGH/q28z8b1eIWSrTH9QQgycCkTlR08GDYPe5U9sZ8DqEphQcFBP8u4caVh2xnU85i+2sosSeEGL55UKslhAuL8DkNfguQ97Kd5PqHogmyh52daV root@ubc-enc2bl02
+ubc-enc2bl09.debian.org,ubc-enc2bl09,ganeti2.ubc.debian.org,ganeti2.ubc,209.87.16.9,2607:f8f0:614:1::1274:9 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKbXRWTgfYgjt3QohkCur7HL1Mx8bfew/CRk/W5cqCmb root@ubc-enc2bl09
+ubc-enc2bl09.debian.org,ubc-enc2bl09,ganeti2.ubc.debian.org,ganeti2.ubc,209.87.16.9,2607:f8f0:614:1::1274:9 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwAP8iX2VrJerYuyW5eWPhc6IACSIZ0xPoBDxFRA7KtwATu9CzSfNugzyGZpgu2017JfhtWUgitNvPGSwCG35oDyS/DQJoResLLGCn0Hko4w5+a8TSefJGPkTfVt7Z5wQIrrGWvocIfKypLFeLc8ra4mDrQZtzrAtR+wnXx64uMiKY7Gc7LgPp7SSr2TcwfzJJqZ2C+meGPCKEUaDQEpBsjZV73ZEwPoGf7IjtXQ3f1C5smzon89luzzssAzpy7OeqvdPl4BQ2clpJwgxSckiwBF7yy3qVpS8JbkpE6+pHjABw+g3KMtIbf4EQxj0AsA4o6QvwJHYThGMqzK+wxhxp root@ubc-enc2bl09
+ubc-enc2bl10.debian.org,ubc-enc2bl10,ganeti2.ubc.debian.org,ganeti2.ubc,209.87.16.10,2607:f8f0:614:1::1274:10 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHhSJYraSkZ0PaSg772AMvihPAttHyYQ9QS34VyQEs8g root@ubc-enc2bl10
+ubc-enc2bl10.debian.org,ubc-enc2bl10,ganeti2.ubc.debian.org,ganeti2.ubc,209.87.16.10,2607:f8f0:614:1::1274:10 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCe0bo76t46YVe6blFzZLUc1gVFvK5kIzxyBsshPnWhDIWlcT0nzsilpW8yY5FzdVwoKFAxLsJTtSY8Tyqbz3AQ/gFBVud56IGV+rruD632gRQCd5wkt/gaZrpU1fLch/pFw5PsV3iE6EsMXbN7BxV7gDoYrvCBwewlFVqnPob1iMJuf10TQDlg5WdOCOUYN7L5e+0Y2HIvlEXWYIYjZPBTqvR+0Cps3gnIyB+r6CLN6VnWKMOsxI1BkcTFiFFsAuNRhCoqMgjqP8mTdRKYkeWz/bzZ6obDlwrePTPLCiWtyyzPeFo/pPg3UOXUdRtLTLBT0MXMEc/1vBJ6V/6TYgZF root@ubc-enc2bl10
+ubc-node-arm04.debian.org,ubc-node-arm04,ganeti3.ubc.debian.org,ganeti3.ubc,209.87.16.102,2607:f8f0:614:1::1274:102 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxM29IdSQxiuhC/FWX7q9l7yuGpajgRhdB7KJ0FF9O62tLFzaLanc1MRcfvFzzMkyYGNwXM8hUsY6TqK9Xa04Z5t059a03LsWo639PbmFuyWRzBlj3pq5Q7YDdNxEut3XHVHGAjIqJcx7A9hA9k8Mx2ks9th88z2fV2jtt3KXG5RHlZsD9qeU7FaLZLAod7YCSWsBuKxvl5fWAIbvxj7gTCpnwV4LuXiVnCk/P5HGnptjdbMzj9fLJQ4R/Wbc+E/2n42C0DyPLOOn4wxtq9en7GUPTHaAFHJhiaGtP2uj2PVEr360IIEpjxHOE1WVCkKpLI1ZE9VnD6HLdh7zNJdG1 root@ubc-node-arm04
+ubc-node-arm04.debian.org,ubc-node-arm04,ganeti3.ubc.debian.org,ganeti3.ubc,209.87.16.102,2607:f8f0:614:1::1274:102 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMX/wGizDE3R/KG3Q90GsHVVLSvNgxBE6Qb2NKtyqOaA root@ubc-node-arm04
+ubc-node-arm05.debian.org,ubc-node-arm05,ganeti3.ubc.debian.org,ganeti3.ubc,209.87.16.112,2607:f8f0:614:1::1274:112 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCWgKJBPlt5vPRQKaAlo4igMPZc/qCswNB6thRuO2zuYo9ZWdB63TIOA46NThavk8EpN0Qo7oTdRlZ6wtTqLpsAGjfsVIj63rUx37pac8XpqvDK4YPuEvkQ4FxiHflLPEobPJQszIBQki4cJ+2gthCQUhZXn/Gn2zge63Q0KbSbKfKIASd3Th1TnzOwtJjjZe4p9L8Z8sASrNiID32NOoajTD4udS8V25nQ9Jh9QsbIWxQgknNLt5r2h4fPNf5O/LIePQxIXuODGoHS3UJwQGF5RbrMnh3dMbbctxkMNTv+0hUXtEZKDieiOm15hP4oYBojs5WfuXV1AyJzCRYLFbI9 root@ubc-node-arm05
+ubc-node-arm05.debian.org,ubc-node-arm05,ganeti3.ubc.debian.org,ganeti3.ubc,209.87.16.112,2607:f8f0:614:1::1274:112 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGyVzd2SpqShI/XNXSL1avJRXZ/PoNLtS9GN7E6Uu1Tw root@ubc-node-arm05
+ubc-node-arm06.debian.org,ubc-node-arm06,ganeti3.ubc.debian.org,ganeti3.ubc,209.87.16.122,2607:f8f0:614:1::1274:122 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8GLNmf8PIh59ELLMuL9oTmx3m+o7uX58juyR7LRK0JDDAf6TjX0nJdh1+c04wy8zavgRtqm71yYb6CjnctwPGArufO634sxQRST+Dn9Bgr7GYd9ibLS/0oIOzdoIKYEvrBjKuj81R+tM5k1IIuzGN6YYJhxdBuV+YNx4770rKjhnEdENnqL6jLJyk+9JqhC0e006y++7zdbNwlYzLerEYsvFR3Xm+RmEakoq2eO+N3Woll9xzR1fOI81H/U8tKnXTI4zONbnquJQRlSK7yZDimo/K8EGd3qZ1zuon3ert/HISQAKYOdCA0ADNYXj9gBm3rNtamf30gHSxj8qfSvXV root@ubc-node-arm06
+ubc-node-arm06.debian.org,ubc-node-arm06,ganeti3.ubc.debian.org,ganeti3.ubc,209.87.16.122,2607:f8f0:614:1::1274:122 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP4MswDtiSuRAF64X4gkUenLq4rDVFQ71cBx5BGsF98y root@ubc-node-arm06
+ullmann.debian.org,ullmann,udd.debian.org,udd,209.87.16.38,2607:f8f0:614:1::1274:38 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGDszrIZGuFXX8+z+rt/p7U7JfwUT2WaLZ1mhUTYWXndooNWKC0H4OH1rHBkETRe8J/7zbBUW373PwHGnbg5rQ0GSPqnOe+ksSgdY724DkJgubW57DSLMGdhr/qxqVzsC9yUIKwfYi5BDOvA5PQ/tgqiG9+hw1myNX9VOdW+zNfyjuuGn3XFm8zkv9uDnXunTs9Wt+tp7MdhmbeWDGNKZm3CspTiCXoxaF+jno7eRacoZKFpjswh5ig82N6KZjTq5H8E9T4FRfXLLeS5BQVas4JUlwaf5i5nJJC3KYJ7+pfKzvXZpweMSQIRCEMMO3RU98gXWj+itiX6odJZz6AXXv root@ullmann
+ullmann.debian.org,ullmann,udd.debian.org,udd,209.87.16.38,2607:f8f0:614:1::1274:38 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEeu0or5+kSoVfHuHUMp/EHUlZ02hU0yiAT1DhTFI05j root@ullmann
+usper.debian.org,usper,ftp.upload.debian.org,ftp.upload,ssh.upload.debian.org,ssh.upload,128.31.0.69,2603:400a:ffff:bb8::801f:45 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFEbWreNcybGXMObOGPp4tlh42nUM8J/u/kr5qOFBksXrmNefC5dSVdTSvxrE6fq2w+WF8a2rhvHAkdJVO2dw/ebps//4AS822RUkIilSsmpWby5tplvHJUTSdYM/lTGkx19DbHGXwmaFbn6Mj7xX3M1tLv50g+RS2F17jc/khI0Ceq9+CQ2wcER1Gyk3tygI1xcEKZqwdF8MKm/RreSPCyIz8T3/04RyM7cOgFpH3pHk5oT1fL1BZfcmqxhcCcaSV1DD/KtMdeVI1m51GMcUK4SVA2nNfz49eav2tTHyGssDUX/X2X6+M+qIGku/BZ1+BHEcIIj+wm112f+5uzs7V root@usper
+usper.debian.org,usper,ftp.upload.debian.org,ftp.upload,ssh.upload.debian.org,ssh.upload,128.31.0.69,2603:400a:ffff:bb8::801f:45 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA0bFhL96yrZySCTW9KtUvPnZFVzwFKiAz++XYFnzdEu root@usper
+vento.debian.org,vento,vote.debian.org,vote,82.195.75.98,2001:41b8:202:deb:216:36ff:fe40:4005 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDtPZy4GdCh5mi1JQl6FpxvfstwgkvW1MbqPIjakgGiEcQaCJUh/z65nF0AYr+n5NAWkL/x5mmKSt9a8BSqxUIXMsGz9uFrI6ohEFoKVl1RkAK8nzCvgLLKMfQFudbGPZSdTZWD9HLCcu32Z4oHbZUjAeSPTdLdeZliVR6uxx4DilUUUVGo17fRy5XOHD2N2lW8bA4R0WJCqUl7Q+2vuCUyJxaTCD4ij745JxwY/wQH0CBbIOXTnjmE+5BwQuzn0H9vGN2BNupZ7YHRhejMvped+zEpjCZV/yIlnoqIi8YEl0QnHqcNl0/cdFJRnFIkp81rznZP4gsiGp3jpuENCQPV root@vento
+vento.debian.org,vento,vote.debian.org,vote,82.195.75.98,2001:41b8:202:deb:216:36ff:fe40:4005 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMqwZi6VkwPqkKFBZEbIqngYvm4PBjHaw09jOax1CC1O root@vento
+viardot.debian.org,viardot,meetings-archive.debian.net,209.87.16.75,2607:f8f0:614:1::1274:75 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5Q/0haIqa1pd0VAdibnOOpMnNSBqxVk9AUR5Td9H88mKOGDK0LkCEUMRdnntZDf1psRpTw6tAwNhmFVJwQschNmgkNcldSchFw6eNivL3A/K2li85SxibxQ+L2I6c5Yj8bD9AyVRSTiAcjqyQ4JvQTBQh1jnl5RJo25TuUQ2w59MTwEM5zheym3NHvcwDIYt0frYgV+PeXN1dF7kNsJ6L5zrneyAZe/G5wyPg1eQQBRVvqWiAX+vVdAWyecGce6abbS9Rp2Co8pePW4aQmXNkcdV7kW1ZLRps9QoGf8qH1Sa/60EpBMsSYrm2KOd8jT3Wr1+mreMeAKJtoicRs+Df root@viardot
+viardot.debian.org,viardot,meetings-archive.debian.net,209.87.16.75,2607:f8f0:614:1::1274:75 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPfB1ra6sdSzgGUDrGTweyuEZjpcN+D0A6FO05gs8Ein root@viardot
+villa.debian.org,villa,2001:a78:5:0:216:35ff:fe7f:be4f,212.211.132.32 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICU+HgxYzAWGFK9D997SifOK/CxaZ+s4G+pPETE5nrOn root@villa
+villa.debian.org,villa,2001:a78:5:0:216:35ff:fe7f:be4f,212.211.132.32 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPtZ76Wr0RTiDlY6xblfv+BSEgLa3n85GcNptKnypp5RbqHzUH94IAWsgx3AiP3SmevKRUWnQ2HcoQ51be1O4OA2BSGxT0d7Zsxq/WI4GvD+yJ8Kb2kRkjPFCUrp2zp3OBDBeEsfgDH6E8kOCQNiM2jSh276/bRAgz+wE6rGVtTLFYEdsqrTtb7moS7zbDjFCeBxfFmYyLH5EvBiY75D1sOuXBm9kalLpei5fe5MHCYekQtqPJPk8AJqv+uv0yBJTY5ifoAquKk5qNRVmVyVZyO414x/q02yATzUagL7clF+LqAfNV5TZCxdR0IcRt45d3f/Ac4L0qjJWRuI1XTR/h root@villa
+vittoria.debian.org,vittoria,194.177.211.205,2001:648:2ffc:deb::211:205 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDiBjr99OrOT9E76xwmladnq3wcymrPJoKxRhe+pH3xbxi6IGIYv8prbXISDXbGVMZaUA1T9EH41eQEc4gjY4xOxg5b5qNppNPYdVEuhTGiuDOHEcOeMHHfg8GrtGx270vbmmrnZA/tYZ4CZ0Kp+3KMRiBmRJJKF+mwldLTzyAfD4RvLntRiHUKUog1zDJNr8Ju8dj07Mjs5y4/krolwAHlOm2WF/E3wFA4iPgYSvkpYSfA41RH7L71kirgEeWZpE4NnyLlgs6j2HWYEdfH2dVRLNtrCQ/wpogGHbUPS4eLq+FEp2EOzmIK124nGgn55rc3mCRbyAlyvTfKf5A1u/mv root@vittoria
+vittoria.debian.org,vittoria,194.177.211.205,2001:648:2ffc:deb::211:205 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMs8TVbDWy0J2RA+6yJM31M8KAVYaoq0iNfpdgEkCaGI root@vittoria
+vogler.debian.org,vogler,82.195.75.92,2001:41b8:202:deb:1b1b::92 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+1gafF2pmPO0Eq/d3A1g7JH0p6hNydJBPez7zRx50GugHC7G34CC2PaeFGj1j3aaZuYH51S87puMvoDH1V9bnfz15f59VMnrcnESOCxHNJO6bK+nM3CJgJxdTB8GblW2JshQr4EcpKJYUAoLyuQD89tNh3k2c1ZPhGcHxAnBdeTeCAJ8gtg6bH6CTLkgXlLJzStl+L2+puRYohhQVikC4Tc1NRx1Bim2xl+m164IJCLJspMzsPlaI2igVC49avrK8l8DYcKRiduJqPhKruPxUaRj83XG3zalJMgIFHTh7ntkN87w1Oo+1DpWSvFublQfadrYXJpTAiRc3Y9ZMioCf root@vogler
+vogler.debian.org,vogler,82.195.75.92,2001:41b8:202:deb:1b1b::92 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFXJ7FfgZO+jMbEQnhIz5ZiJF3x1BzDw53Q7A5Qpw2le root@vogler
+wieck.debian.org,wieck,2001:8d8:580:400:6564:a62::40,212.227.126.40 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINRTe7jmIO6ix0ovPM8K226qfO31TvhnUTppkVUs3FPn root@wieck
+wieck.debian.org,wieck,2001:8d8:580:400:6564:a62::40,212.227.126.40 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7i/1mv+Gu7Lx2vMHEN+aeyVDoWwRR4GOXDQpx58PZQ4q8yK0wjgsla1QNjQst2j+u8mva0y6kRwUGARjjlGFt5X64Ee2ZWHRn/EbHoK05IeJ6zLz659jUldZXyTsl73i/lndWVDHpeFUf3qQslV2HoyB9STR1O8OGNCU/kb1WOsJYIwqna7dAsQrQZJp88+GrzHYnfDhlLVZEJnGqXnFfRw4H0FbcZtLLjTYGt1nsXRECi5bjzR8chTyObcXm+yJNjFbHlhbWzVsfTd3Dqep3tx6IFVVMhTPF6AJyVJBAxntcY0edpwWKxBMWe/zXfsbcrWWOvIKj/oF3+c06pnkL root@wieck
+wilder.debian.org,wilder,wiki.debian.org,wiki,82.195.75.112,2001:41b8:202:deb:6564:a62:52c3:4b70 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDhmBF90DW/2Sq8fFDqGLxmWLpkW71nbIx5H7I1SSXoTiugtxkCwvS3ne+5b6mdu4ZYGj2h2F0XU709L3dUCrF4OPQL7hjhOCQrvRR7vUCFEeW0Vx/p28uXokFYnIfZWwf4O4IUWZAkgZID4KcwyyZrMBsAq2rXLw27o8TK6KUgPi2LjZ7dkVEMSi8VMRgaYK9+kZTzHJSEW5Q+7ma5dnJL5yKYkuc74M5fAlKKemL1ni8Mqlk4YEFVrPK2qeVoFhG6I/K5bgIyUPmmNlTKrBJOqzbM5/FoXpGlckc59IKhE2fmMWAOMaMVJydRoDhBp14uKTJKThvQNX6Q075K/MTH root@wilder
+wilder.debian.org,wilder,wiki.debian.org,wiki,82.195.75.112,2001:41b8:202:deb:6564:a62:52c3:4b70 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF9E4is2dfax0BzEDEveNoJ/9rHH+OWGVMG5Wx++h0yQ root@wilder
+wolkenstein.debian.org,wolkenstein,2001:41b8:202:deb:6564:a62:52c3:4b41,82.195.75.65 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA3MKM/MyTPLmtZmycj8tHx65v/U/se+EcfxJ0fJd/yk0gDFHn7Ssfdpwk6JAq/zCZpeXefixIUFzkAB5g8CZupdRsUcCHHayI8eUIs9ERZ6OIcrogF2fMoimyDrnoQ/DegsNuFbfVo/DY1VW335di8bunOI+l1SiNYg9YURYYdIBfFxm7pB8ephH6EbvGH2IF6OrlGQqtelcQUqy0TEMUnJghV38wjGxqdObEPxlbz9x88mmFxgQMWaCoPG13WMRrJqqNfZ4g7/7/xJIeP00Wp33x8UQeCbajlG20I8372JeqFFThbMpnhNU9Eh0RsMZZ/d6luQ/SaSED7KpV/rRGUw== root@dijkstra
+wolkenstein.debian.org,wolkenstein,2001:41b8:202:deb:6564:a62:52c3:4b41,82.195.75.65 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIXhdUGAF5MxBCm4OIHDcrj6HImB47dLzxTyIjgG7hMU root@wolkenstein
+wuiet.debian.org,wuiet,buildd.debian.org,buildd,209.87.16.60,2607:f8f0:614:1::1274:60 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCjlCdt1AJhHYzaxWhb+ZcHIs1VxAW4uEkGMORjvmJBr4tuEMQ/giGoMrJ5jjya4oMJJuDEJHIXmuWX1O1I1/T6ynHXTgRTri4xY68PzBA6OrdPZqMrX3WhZWsF1xNE1/ca0uYkluPrNOf8yhsGVlSTWiW/jsqSpNp/fflTWYpVHQu+kSUKwtkSngsBcR9FIFFzEHXFx4VgfQLUUDqRrS9weTIRii86tUZF8D0wNFIgh8cPhwQZqKk4IdtdDpTv30iG49UCdNbVxP2lH0SlrOGxE56DA2uLXeZ5Hof98a0bIwkQzoxYlOVDGIPZ8TT3TNf3zktnxQhuO2pzRGwrVUN root@wuiet
+wuiet.debian.org,wuiet,buildd.debian.org,buildd,209.87.16.60,2607:f8f0:614:1::1274:60 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEaKQAR0KtcozepfcJYcqEBmHb90+yLPm3/uPAU65KwV root@wuiet
+x86-conova-01.debian.org,x86-conova-01,2a02:16a8:dc41:100::238 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDmLirCYfg/9K5vHKdBxCcMaHL7LB48FfQI9mNrtjanWbc4sA2HnX8r8hJy2d31PjVIkQ4R+Um6g2sMXmDyTWUMl8w+PD+xHHPUeSQEbQQ8kTjxHgialwAp4C0/w2ZxOaVxsmKxywmNZ+Cl2osk0kQ9oJLAPfI9KAA0ioeoKVYjpVTK4/3zG6XV/QsOBpRv4HOJnNQAaRYhkF0Alrymp8dT8BsDRXGKuUiBpKW2l/Z0Ui6mkJ2LTd13H5V5SKZdD1wiacOFzFpo6Xmg5z3E7NivKPcMvm1uH5rvGzCyLrZJ1Ce+1drwjBqZQs+qx0e3McIzdRi0Y705qd01SpnmtXfp root@x86-conova-01
+x86-conova-01.debian.org,x86-conova-01,2a02:16a8:dc41:100::238 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMWxxLHzzkba4Mn4L9OOQdD3xkvyaWZzkhaJWxDxzooT root@x86-conova-01
+x86-csail-01.debian.org,x86-csail-01,128.31.0.50,2603:400a:ffff:bb8::801f:32 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBsblIVjr1bUZsukSbWXC/oOgZ3ynQR7TQdVi0eZgXv5 root@x86-csail-01
+x86-csail-01.debian.org,x86-csail-01,128.31.0.50,2603:400a:ffff:bb8::801f:32 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0VKzB3jSKTETKE+xXxdNR2PkjgBA/bs0MRgpctTc6cvQBm2OZ08dF2B/EjxVf6R6ypT6a6Kqz1EPXwbVNXC7ZAyu0F5++koo4TEEGqvfLaLw65DCur4icJ0rmNga+L0Ls3is1o7i4pQYSlbjf2IDZ9C9qeB1IWaplifvvFWzi4YB9l1A3UPfT+QIbeoYlac5SGulFtREwsHeE33eMGO/vPbWrrr+ZkUmrmxyUPdzhxBlAKqcsqnlE+l+cqQhVeYWsbavQDdFSIP34KA7H9AF75mjQKftljSc2DbV6bR2pXtrFVFWBHXO/wG/Bz5cqPi89Dws1G2FB+XWTfL+UoDgL root@x86-csail-01
+x86-csail-02.debian.org,x86-csail-02,128.31.0.68,2603:400a:ffff:bb8::801f:44 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMzDRz5IXyS+iZGYk1T3rptUGWxfjP6LhvRCihgTWAuV root@x86-csail-02
+x86-csail-02.debian.org,x86-csail-02,128.31.0.68,2603:400a:ffff:bb8::801f:44 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDb+DPK7SZmNRAD19LjGgWEixYjYzO0AolFmHvF+4WPGKqM2Mn4YEbJVbfzut+xkSB7//XJQikF8deRSuBqTMs4epPoz/DaQzPEQMlcpllqoL5Kb04rEfv24IMHlQTL8BkBT+J5wWE+8la5d9iHNxm1fxHaUlz60YAqDL1CgiviB/KFWDPcOwqc6umXqhi9k/ih0160D+ISXIoTBZ4VpyGFayVtI24PCSoqSAZyMrz2zWL669rDqkjqKvRFic/M1qKZ4ceKD3tydeFn9jifDH2vPW8QMvQ29CRxxxPIbHLhVnxY8S3T8l8+HO2txlZteNgoo95ENOh7JUvvl6tlyeJ root@x86-csail-02
+x86-grnet-01.debian.org,x86-grnet-01,194.177.211.203,2001:648:2ffc:deb::211:203 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSGPOsWbZxx23CspnZZF1YQWa5s+2wxv8rS6fnmLc8Knq0+tcu8v37jd9/NVcjBRgFBVwsZ+sDoU747fdRTaN7ZyH8aQ0u9scyn5t0r8mZtiOhp2Rf7n0/NCR8gS/O+OkKAigIfMmgEq+EVaMLA7fohnwX74tktnZiH5jUzSaJIB8Ak9nm5Ijy0euuo5AU51Cf2ZfCXuH35KVX69nEWLfot8MUfzYYa0+Yxrm5EJoLS0JSkUsZnDPwT5/QSwC0yUHyTHUq8sCPUKEd+MpXt/jdGZyKOVzrh+361Y37G4Wg67yUZevrVSjg/dnMl21fXPTmfdzF6aZR5wavvDBi96xv root@x86-grnet-01.debian.org
+x86-grnet-01.debian.org,x86-grnet-01,194.177.211.203,2001:648:2ffc:deb::211:203 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMiErijDNyGNZ62IZujTUCJXwX6PKVswxrcEWFKjNSja root@x86-grnet-01.debian.org
+x86-grnet-02.debian.org,x86-grnet-02,194.177.211.204,2001:648:2ffc:deb::211:204 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWptrC8dm6RlKXdKNnXxHyb97V7SswqKx5Lwbm16o9BVPAgN7RP59GVGdfFnRfisdbQkeg1/MVXycDYq96qimUe7tIQy3O9FtzaXu7ioe9g1EvOvcNNQUay81McqO6qaMly6itavlTAa8wSK5G+igZB0imzUmvgqlvt52Oc+lEW/1Ci3B9qkf2jDB9x6oTvpeF34fCPaXGwGv/bOjVii8oqP2aq9LncP6/7BWhu38wmPajqiSlcwTWkUAJ9Cli7Xj9OcHpcew5pHEGEf3hrZ7NlSEbqrVkj9Zr/zT3p4eksoPqjlGZtCIJn7iLphWTKGOVPOtwDtwnFOANMOJk/b3L root@x86-grnet-02
+x86-grnet-02.debian.org,x86-grnet-02,194.177.211.204,2001:648:2ffc:deb::211:204 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICOd477t+sX+79pjW3YH6asAKjyvO9ZEG36gLCx9ltDQ root@x86-grnet-02
+x86-ubc-01.debian.org,x86-ubc-01,209.87.16.21,2607:f8f0:614:1::1274:21 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMBCOa/FEobZJX9E7+i9mQJGHXlqjgEPgMLpQ+aYLO2oZqXNrGdqfymFN79DHYW5cL5KQxDDmJofl9IDwA1P2LMLc9bblg9p05G4YWXd7qQPWKi8yQpxn7THWRyAxrhtXcj7IblpvrmNHX1F/tC4uW+slZc6gVbn8Y22hvLbp791rgsm9sKEIz9aSG5cydTvQ+lsJPDGFMrGL2S29d8ZueHi9RG26Hb+sgalt7COL/fwSofMfNXOs1UNpol6AIU5Qp3KZvJ/ZhUaHXS9LoDebnkmeOUZsX4VgLU6XhD/WrzE0toJwFJEULZbH1RBq1pqCSOYaCV7BW4sSC55NzFHcF root@x86-ubc-01
+x86-ubc-01.debian.org,x86-ubc-01,209.87.16.21,2607:f8f0:614:1::1274:21 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDYlfWUPw9UDYbAXdVMbPw0ltbpkRIF6kj7q89/ErNZL root@x86-ubc-01
+x86-ubc-02.debian.org,x86-ubc-02,209.87.16.22,2607:f8f0:614:1::1274:22 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1TGrM2skO2VvkFPMnIqeuKraBRjKJGO4a/x0UQXHC71QEsC1dQhv/K7P9RTQr1bmF0FrnSiFQLnLZhkT5aslbUZ1gXvTug0TZjAlAzLEg79JnKkCpYGx/Ztlk/LiRQGiQ6UCng49gY8K678L4cv+yCn9svVKMoTjROICDbtBaBj5W33++lL+n+4Q4wcxzP0nu5pRU8bH+DZENy0KpCDHR9G3lVmtDwv4RAIuf5ZJMjxWKWugfUcE64gIdVt/2f8F8cwNk5b3TXeFHoVB7WiuWuebTnXotvknrzWO+Md+HujzDMkXUQzZgQyb4XsthEo6dOTzSq83HU/+KYOImR3Dv root@x86-ubc-02
+x86-ubc-02.debian.org,x86-ubc-02,209.87.16.22,2607:f8f0:614:1::1274:22 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDlr/Zb0ot8iaU7vDZsvqxv11eQ95Uyj1P56REtrFT5z root@x86-ubc-02
+yttrium.debian.net,62.2.84.148 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQIFDeZ1M+PuyUkwsxvT2DyaXrcwrSbUvQrM5u9aJKxCZH0xGzmE4vvAVhvVXhBMEuWsAN9LdZ+ee35yw4fmtbe23Fp7FoyCEkJv/70vNoQKKe3Ej61kBIe538/QInGcP3XGqpPYRzRqqFh7uslvOB7w720AQRu/AT9D5GPdYtLHhTvHtstdx8iauSiT5PcVYbHazkV7DlhTWYkCI1C3J4HYvahML065Ghs1P6VfCsuImK9L3fRiM6RVzl4iIw7yJB6BQ734QU7NX1CZrknLL5iNwzcZY1X/lE8g1oDsXL5u+ngBy8k6fDG0VXyUSoJVZmv4vnOFkjFvJTKgD6PnDVPx7lgS3RzZKFMgCsVaJ2pOCj2s1vHxF9uFJ6jO1CQTd1oGQe2C0jv2+mQi2kJEyXya4ia8jv8ZhJsEPOqZR89vLyUitRcta64EtpD94xeYmBFI8TeV1gvNlfKH/V0nmQKaMC5if0SBGXOTpzvBiRddNnLX5iKqV93z7h4+uxDjc= root@yttrium
+yttrium.debian.net,62.2.84.148 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJpU7iyQmdUfWzMIYJE8HGmHc5v7+IgnlWxSzm8AbOkW root@yttrium
+zandonai.debian.org,zandonai,80.245.147.46 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICk6vysqlXHdMVo0X6YpbhZC0w5j/wrRMQmrf+B58biX root@zandonai
+zandonai.debian.org,zandonai,80.245.147.46 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp8Q71kwFrbCtINvYemshCwJTWgwHQQ+q8oWNU4eTZHywlE2tj2j1Uv1MKf1jFYjBuR9KC74zCo7obWDTXkE/PdMcCcBCVcINKFhqgt0+YK8mfsXwYanSyWPJVEttndC1nBaFYrUcfFwjW8BQBnvl1MALKIMnqs3Af1JFbkNSvXGXWPH+0UQXZcMlRpb0GEtOJW6uU1/3KIwnie/sz0LjJvd+qvLGEvysuJj5yLWfvM01by+odChzz9mowym4iUzzHmeHkMUzVeW6EXZwM+ppZ95HQGum2HkBn6RkKwwxYz0BUiBl6fK9lhhDlidCgRChUPrVTWzFVfjNArYkNTOzT root@zandonai
+zani.debian.org,zani,148.100.88.22,2620:91:0:688:1::22 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDB4E7XkOJp3X//IC/5O5SX0kxmAHJ9hrysJw6l6gzIn root@zani
+zani.debian.org,zani,148.100.88.22,2620:91:0:688:1::22 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUd+0Bq0l4qyt5NfZliZ+z4ugPw0cvEq3tmonvj230kni52pjTjRc52ET4MpW3U4+jVpBUY9OAYf2C9uakCZO4QrYzekr/6aLCTOwcgwMHlWPWuAOoCc/Eo+/ITo2UiQ23ZlzgdEwd4jJPDv0iTLEW70o3eoIulX/O+GeYaelY9zfls3153ndEiv6SVtLo6xYCF6KIKxRiO5Rg6GIW9eGdWgXywCshTUPVOtJqoHPgGMk6WNP+8BUnKp4zzSCTstaMohoD9e0BzOHrXxX/ED5jZYJf8X94XD3+3b5UfAst66N2nOrskOyoqsc2E9UOikgsxHtpOrHIEdwjchkO4E6b root@zani
+zelenka.debian.org,zelenka,80.245.147.40 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAfApK4IxmcPS1qGgE7zfWAugKPR05e++K1su8gDgvHU root@zelenka
+zelenka.debian.org,zelenka,80.245.147.40 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqnM037EiEA4cXzRlHZGe5Te9Qs3qjL1135JiHs6dHCAEFlZsF6MTnxWG97861DjUF9Y4Cag0/9n5FxvbrFRGp3PWESuZ1OJ/lccfhqxIdAGkrHtsQAnaQu/ctfSfj4j2PBsIrZ5TZDiaPJiSD53uFAGxwkLY5oMlpUoKLAiAuRFBNcR3ox7+UXzsJ9dZ8IrsRCHFOQSC8bbf2Iva9pax+ocfQCXYVj/lasCkS7QOh5u5BTF6/NeiJKKJPYfA/VJywr0SmGR/DdDbxB0bzMuyGpMF+ftHCyD4W4/MKRbCuM8ik1Ibyrj2rubpyhsdEGJmE/fkzswrOZRF31yrvSLBf root@zelenka
diff --git a/private_dot_ssh/known_hosts.d/mit.edu b/private_dot_ssh/known_hosts.d/mit.edu
new file mode 100644
index 0000000..f4fedb6
--- /dev/null
+++ b/private_dot_ssh/known_hosts.d/mit.edu
@@ -0,0 +1,12 @@
+athena.dialup.mit.edu,18.9.64.12,18.9.64.16,18.9.64.20 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAyIC4b705cYi5ppJuGvojY1Ux7zbWDUjAXBEPjpXY9uK2FqYLDNGL0wnSOD2l55M8GX+3Ks3/eJVvQFegOt3tzZRkfi52TPAE0FRF/zbi7nnODNSf/kHhuwQwHJCTAhDIujhgXAgscIIY/tvllVyCrKEuWRAk58c5zAM4juS+MlM= root@contents-vnder-pressvre.mit.edu
+athena.dialup.mit.edu,18.9.64.12,18.9.64.16,18.9.64.20 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDz2XfcQvjx2Pd2pIWTPJYuNskw9D9QdtCVnCTsV+FIBno00PAWaeZztcwhplPa4A5u9IjVRJZzep6rX+0bqqGY= root@RINGWORLD
+linerva.mit.edu,18.181.0.232 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAvDFePIDfVFdzmc4kILheWZEwowXoxlYIfJUfWfzjCGt6j2ycBeGzkC1UoP5E/ne7zGKH5ARaMkhPMhKhSYqgtf3CKrrRzyWoyXp0dbMyLU7X8vti5EllQwn0TT7JLRHW2Y2q479SBG1s2jYHtELVi8dKySjlRm4WKxglaUCMrCk= root@vinegar-pot
+login.csail.mit.edu,128.30.2.141 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxRHKJ8bOcw2bLaWv/YSUdGzIt0xpji2WwuQTgpNmU5ZO21BQKk5BKNR1EWG6zMvnGHUSRVBgrf49SHK82x+b59HlETKO5md6HM4Ih//xE/PHcqOhSdp3ORfT6Fd7edxKaBfZkyWXkHSdoIsJX1tHMXJKsqrcy9d8j/Ao3LpFuAUHEEg/NjUU2/mTlGwDzwGXgpMmbgzKGy9/vsM3SqeLB+McMWlABf7bGKXBOCKEdRo5NiMb8KENYXIqGE9ZaPQwu8FFoLjf8Tp2zwz0GYxIqBKd2o1sV0pDSDNzPKfwWeBYy87OjiatXKMibodB2WIvedt1Z9NBx/9DKgPe34+XNQ==
+all-night-tool.mit.edu,18.9.64.12 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAyIC4b705cYi5ppJuGvojY1Ux7zbWDUjAXBEPjpXY9uK2FqYLDNGL0wnSOD2l55M8GX+3Ks3/eJVvQFegOt3tzZRkfi52TPAE0FRF/zbi7nnODNSf/kHhuwQwHJCTAhDIujhgXAgscIIY/tvllVyCrKEuWRAk58c5zAM4juS+MlM= root@contents-vnder-pressvre.mit.edu
+all-night-tool.mit.edu,18.9.64.12 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDz2XfcQvjx2Pd2pIWTPJYuNskw9D9QdtCVnCTsV+FIBno00PAWaeZztcwhplPa4A5u9IjVRJZzep6rX+0bqqGY= root@RINGWORLD
+home-on-the-dome.mit.edu,18.9.64.16 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAyIC4b705cYi5ppJuGvojY1Ux7zbWDUjAXBEPjpXY9uK2FqYLDNGL0wnSOD2l55M8GX+3Ks3/eJVvQFegOt3tzZRkfi52TPAE0FRF/zbi7nnODNSf/kHhuwQwHJCTAhDIujhgXAgscIIY/tvllVyCrKEuWRAk58c5zAM4juS+MlM= root@contents-vnder-pressvre.mit.edu
+home-on-the-dome.mit.edu,18.9.64.16 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDz2XfcQvjx2Pd2pIWTPJYuNskw9D9QdtCVnCTsV+FIBno00PAWaeZztcwhplPa4A5u9IjVRJZzep6rX+0bqqGY= root@RINGWORLD
+department-of-alchemy.mit.edu,18.9.64.20 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAyIC4b705cYi5ppJuGvojY1Ux7zbWDUjAXBEPjpXY9uK2FqYLDNGL0wnSOD2l55M8GX+3Ks3/eJVvQFegOt3tzZRkfi52TPAE0FRF/zbi7nnODNSf/kHhuwQwHJCTAhDIujhgXAgscIIY/tvllVyCrKEuWRAk58c5zAM4juS+MlM= root@contents-vnder-pressvre.mit.edu
+department-of-alchemy.mit.edu,18.9.64.20 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDz2XfcQvjx2Pd2pIWTPJYuNskw9D9QdtCVnCTsV+FIBno00PAWaeZztcwhplPa4A5u9IjVRJZzep6rX+0bqqGY= root@RINGWORLD
+ten-thousand-dollar-bill.mit.edu,18.9.64.25 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAyIC4b705cYi5ppJuGvojY1Ux7zbWDUjAXBEPjpXY9uK2FqYLDNGL0wnSOD2l55M8GX+3Ks3/eJVvQFegOt3tzZRkfi52TPAE0FRF/zbi7nnODNSf/kHhuwQwHJCTAhDIujhgXAgscIIY/tvllVyCrKEuWRAk58c5zAM4juS+MlM= root@contents-vnder-pressvre.mit.edu
+ten-thousand-dollar-bill.mit.edu,18.9.64.25 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDz2XfcQvjx2Pd2pIWTPJYuNskw9D9QdtCVnCTsV+FIBno00PAWaeZztcwhplPa4A5u9IjVRJZzep6rX+0bqqGY= root@RINGWORLD
diff --git a/private_dot_ssh/known_hosts.d/queensu.ca b/private_dot_ssh/known_hosts.d/queensu.ca
new file mode 100644
index 0000000..7759a13
--- /dev/null
+++ b/private_dot_ssh/known_hosts.d/queensu.ca
@@ -0,0 +1,16 @@
+athena.caslab.queensu.ca,130.15.15.234,2001:470:1d:9ae::1 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAskn9BaUOnbtp/MP1n4LTM14W1NnXFjPkeHq3nbrJ9/kZpYlOWsWM9ZAgpNR7dRvYi+zeQ//Mg69lH2RMh0A7E= root@athena.caslab.queensu.ca
+athena.caslab.queensu.ca,130.15.15.234,2001:470:1d:9ae::1 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDftekNvbUg2K0TgOL50ne/UyTsiqVBZb9tH+nVqGr0H+3np6KHnaY+iO/imGsktI0zpXVFEeX/5HQ4PFhs2KaJ2D7fXPbPdNiqh+UJzlEyrk1L0XhiuaEurQYeURACJML+Jc3Rvcwhw1FVB2nHfrfqu+GBhS+gjd3dNS1D6a9RsOYiJj1XGVpNynmtv93exwpDelPCFlriDso8V96j8aMdT0pwyGZFihWh9hoIp9Qi/QE3CbPNi6jcVw3mCi29+plbW4QWuS7YpWCXY/QfAnh97rd60X7Uopyu0jAPZyPDRshzcviFSs47RTmc5vFUKIWmhV+DcQXEnasQERZLdRZB root@athena.caslab.queensu.ca
+brain.cs.queensu.ca,130.15.4.210 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1ovnUKduRkY20YnidPrbJtPJO2pAb38JtNffGEGu8nCTQIPhCR4jKTktWW/4Mlfg9zdZnU8BTDD3OLhYq1PoN6oseQvjTEZg3uxeokdEuowJ0ux7e3zj6gXfr0DbNBk1c6bmLnSnkWB9tEUseWea4pr9IAXfJlCAq0zFTWUuStiVc6ZSo8ZTgaJ2Vjd18kSzr69We/aF4KFZJn2lUo1edoBS96YhF6EBSOgAaVR/ZB7zOwywQyJxuD7im5h/ZgCmG3S6Ghc0hxaFFV199P9Y/s50+svHcLxvAwlSYX2FJlHamPmewszXdHqwm0DipZkmYLk3yzakuZBiwJlMptxX1Q== root@bigfoot
+ciscwww.cs.queensu.ca,130.15.1.16 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxjyjUCyzONEUPKYl3Obs+hQ69rU9HF5ZpwVUAxNbezqVj5rOj/t8JVSX7GiFy5PphL5UbffHusC8in3hXmWLLF6mXdTGeWepoyYFMdujkhy3ag+zgc6TIHtdNmcYwAM06E0zIR8oPf1t5NQsX61cv2OpPaMq/1gtlFuhKGOlRQJx/tvADhEsZQaiXy3Wz5QEvavAawMKU4XwXNF7UTg6B2WAVN4Il3jvzGUC7QtVZs6r/J/rNmDd2H5QnZHn3LXH5731QLinpYL8ySBV+eQCPrQAnfbowT072WQCZw7ODAg6lK54ndjsP7gROnWiCfaEjltUdhFf7oXNKpQKiAw+sw== root@cisc804
+hera.caslab.queensu.ca,130.15.15.99 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAybkkik4/aTYxZCKE4pKzFRZ64/QA+8odxwGF8tHH2fHoOjtPlFpmMqw1p1ycxRDS7mfGn7MsJSWBcHWyEZzaT5vNkaL+iaYtqbOknQH9BOd6YkNkzXSGRfqo2u6JUAt3IyuPzHeqzfWF5lrh/IxOVdAgqj2fD87VQ7QtGmkx9WEmQcL+2FIWXv+6yEfhPxs2rcxQSNbLkFaM1e2zKBt6UA+bx65OhTV8ARcfawNN/CQNmfQ0TL4PjjgRFfEqkXUqbYaMKLHE1KNbpiUSZU2ym8OpROsCaLq9a8YOPL6Emumo4DK9io6/itneBtfgcrDPHebIuKQBYH5LEKqSl4qizQ==
+linux1.caslab.queensu.ca,130.15.15.121 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHwUMUFut/nnE+1rf9L/k4ms/OK/NWxT5l6/5STX1a0PJyhSQgGZKrLqmW8PQPZSx8aqivfLIYyzyObSVCeiE9g= root@linux1
+linux1.caslab.queensu.ca,130.15.15.121 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAod40vcfw/DRrUmttmV++JQ5CEY4T9yzY/kXPzCPy6SmDm7K8Ly1TArv5N8MntWoePgu4WLRocbrH6YWgrpO7XdJMiiXl4Ub+6JH0j4alehuXCxejxXbG32QiaNfJZrcjj+0gXx77brDRdXgxtAKem3/Is+HjC58rKFDz74BLreCwv3Ro97MdaeXoGYR6dn/XOxzp9O0dSVDCRy7nuSd/vTchSpyS05xHPUCyA4bVJorxIKvKPcaYU/tg5BqDQw8kdU0FcAIPxlngQ6qKbJb9WkLBNQ2qL58w/aHuJtPlirodaqWlucxm+nDjbfv/4RVugE6QFrfaxNOdiCJ2XLv41w== root@caslab-w310
+linux2.caslab.queensu.ca,130.15.15.122 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHwUMUFut/nnE+1rf9L/k4ms/OK/NWxT5l6/5STX1a0PJyhSQgGZKrLqmW8PQPZSx8aqivfLIYyzyObSVCeiE9g= root@linux1
+linux2.caslab.queensu.ca,130.15.15.122 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAod40vcfw/DRrUmttmV++JQ5CEY4T9yzY/kXPzCPy6SmDm7K8Ly1TArv5N8MntWoePgu4WLRocbrH6YWgrpO7XdJMiiXl4Ub+6JH0j4alehuXCxejxXbG32QiaNfJZrcjj+0gXx77brDRdXgxtAKem3/Is+HjC58rKFDz74BLreCwv3Ro97MdaeXoGYR6dn/XOxzp9O0dSVDCRy7nuSd/vTchSpyS05xHPUCyA4bVJorxIKvKPcaYU/tg5BqDQw8kdU0FcAIPxlngQ6qKbJb9WkLBNQ2qL58w/aHuJtPlirodaqWlucxm+nDjbfv/4RVugE6QFrfaxNOdiCJ2XLv41w== root@caslab-w310
+linux3.caslab.queensu.ca,130.15.15.123 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHwUMUFut/nnE+1rf9L/k4ms/OK/NWxT5l6/5STX1a0PJyhSQgGZKrLqmW8PQPZSx8aqivfLIYyzyObSVCeiE9g= root@linux1
+linux3.caslab.queensu.ca,130.15.15.123 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAod40vcfw/DRrUmttmV++JQ5CEY4T9yzY/kXPzCPy6SmDm7K8Ly1TArv5N8MntWoePgu4WLRocbrH6YWgrpO7XdJMiiXl4Ub+6JH0j4alehuXCxejxXbG32QiaNfJZrcjj+0gXx77brDRdXgxtAKem3/Is+HjC58rKFDz74BLreCwv3Ro97MdaeXoGYR6dn/XOxzp9O0dSVDCRy7nuSd/vTchSpyS05xHPUCyA4bVJorxIKvKPcaYU/tg5BqDQw8kdU0FcAIPxlngQ6qKbJb9WkLBNQ2qL58w/aHuJtPlirodaqWlucxm+nDjbfv/4RVugE6QFrfaxNOdiCJ2XLv41w== root@caslab-w310
+linux4.caslab.queensu.ca,130.15.15.124 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHwUMUFut/nnE+1rf9L/k4ms/OK/NWxT5l6/5STX1a0PJyhSQgGZKrLqmW8PQPZSx8aqivfLIYyzyObSVCeiE9g= root@linux1
+linux4.caslab.queensu.ca,130.15.15.124 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAod40vcfw/DRrUmttmV++JQ5CEY4T9yzY/kXPzCPy6SmDm7K8Ly1TArv5N8MntWoePgu4WLRocbrH6YWgrpO7XdJMiiXl4Ub+6JH0j4alehuXCxejxXbG32QiaNfJZrcjj+0gXx77brDRdXgxtAKem3/Is+HjC58rKFDz74BLreCwv3Ro97MdaeXoGYR6dn/XOxzp9O0dSVDCRy7nuSd/vTchSpyS05xHPUCyA4bVJorxIKvKPcaYU/tg5BqDQw8kdU0FcAIPxlngQ6qKbJb9WkLBNQ2qL58w/aHuJtPlirodaqWlucxm+nDjbfv/4RVugE6QFrfaxNOdiCJ2XLv41w== root@caslab-w310
+pinky.cs.queensu.ca,130.15.4.211 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA09MnDU0oUOdvyfsh8sbjTAtPnyfUm451NT2o6JYbZKoiBfb8mcUE08y+5JcF+xO1KhXD6+vkz0efD74gIgRxlWGeJe458xzK5i7zyISqhmGZZ7/p26gg01gXyueGkDimPGhOxY4KNcsaLbmOtqtoyCj+tTu3WM3n+4sy564SDCeprjBUyzgGuWEiAQ0/p8GeKIJbm/a/4n0LuEonJcOwWx5XfyVxE69BQ6jn6+wk9/PGZXXKIZJZiM6fhgOJfXGiNoAd9LerLAA6nTDcABbjqiKWSLsiH7z6s8QuNFEJtO0QwoLvX5nv92ktaltiaUZgkm3BucLOKPjj2ErVvbTJ9w== root@ubuntu
+ubuntu.caslab.queensu.ca,130.15.15.104 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAokclCIM9FVfe4ZW4vIkZ5xbnaNwVZfd4qZqfC3wI6VhTnUkYvBTd/NWeIdSMRDhRBMih2vwwTaVtCxEwzIRhZAYFkgWZdXz/Iq+Nqzo5uk8PRMN8/E19jdjTJi3HODW5zCEzwx7xyIVYz/wciMC1DGGReD5Hh9mskSocSZ9LLDEw+qx76xNjS52q1S66C88/0g21ktfvMOKhuQybPoBs33pj3EpbDzNkYhHsMf3rBtQy+Vd6Jtd0PQ3W/UForbLB2S7B9RFMneclV6Y3tYRFmXGueQdP1RpYZVXPkbI2rzmikZmxuH/DdFhAklDgzmnthdpKlyF4MlzCpVXAL7K58Q== root@casbkp
+zeus.caslab.queensu.ca,130.15.15.100 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAybkkik4/aTYxZCKE4pKzFRZ64/QA+8odxwGF8tHH2fHoOjtPlFpmMqw1p1ycxRDS7mfGn7MsJSWBcHWyEZzaT5vNkaL+iaYtqbOknQH9BOd6YkNkzXSGRfqo2u6JUAt3IyuPzHeqzfWF5lrh/IxOVdAgqj2fD87VQ7QtGmkx9WEmQcL+2FIWXv+6yEfhPxs2rcxQSNbLkFaM1e2zKBt6UA+bx65OhTV8ARcfawNN/CQNmfQ0TL4PjjgRFfEqkXUqbYaMKLHE1KNbpiUSZU2ym8OpROsCaLq9a8YOPL6Emumo4DK9io6/itneBtfgcrDPHebIuKQBYH5LEKqSl4qizQ==
diff --git a/private_dot_ssh/known_hosts.d/rak.ac b/private_dot_ssh/known_hosts.d/rak.ac
new file mode 100644
index 0000000..f329798
--- /dev/null
+++ b/private_dot_ssh/known_hosts.d/rak.ac
@@ -0,0 +1 @@
+@cert-authority *.rak.ac,*.home.arpa ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBACCdd/M+WdU0nbGXlHAIo4ZLXtnGo8Xj6WHnDDf7GHuyXfDRt3K3LLSjkDdU0lsllZkOC9ecUp+JtpufSQynWgdpwHIidgBs6kG/4nT3IS47BIeJAjTSI7v9RV4aRIAGf9YaKjlz0ujKT/4bc4Iue2P8flREBJ6ATNpDRSNhI8YGzLG6g== rak@ryanak.ca
diff --git a/private_dot_ssh/known_hosts.d/rsync.net b/private_dot_ssh/known_hosts.d/rsync.net
new file mode 100644
index 0000000..b07ff54
--- /dev/null
+++ b/private_dot_ssh/known_hosts.d/rsync.net
@@ -0,0 +1 @@
+de1270.rsync.net,2001:470:1:eb::116,64.62.236.71 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC2wi3kWdaW4W+tRu0uq8hhY1ffFbzZ4KCh0FUhFw0GIb8lWWvVnGInc9Tr538k0ZICFSSbs5faMgpMuHSX8QvU=
diff --git a/private_dot_ssh/known_hosts.d/sdf.org b/private_dot_ssh/known_hosts.d/sdf.org
new file mode 100644
index 0000000..a7ffd35
--- /dev/null
+++ b/private_dot_ssh/known_hosts.d/sdf.org
@@ -0,0 +1,3 @@
+tty.sdf.org,faeroes.sdf.org,otaku.sdf.org,ukato.sdf.org,norge.sdf.org,rie.sdf.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1BBSaTBrKjpyDmIPt1t9oPvZpIxzm8D2kB/eLUoqXP9Eoicb3niMP8kWv1vhZQPGiQQ/q6sg+c92Bkk0ZiJTW9JdMJuaIfk+VDjGUV1US432mzq4581CFk/Q0HeHehrrAoqCKTcnp65/9UlnP3ljnyS1J0JE40YtjLIXfAeoJJKfKvrMhc1nOqn7NEMcmN8gY5ELr5R5ZUml0CsmurMDeIoeP9Ukf0PAc6uznv7JpL5GY+Eee8xXd8ehClZUY9kkvm6a6LIzPXtG5KXIYbGQkMrcDqWAdYOb2whfOICRbRLu16T8r30NjdHRjDq2kAH7upip4FqWGj96k+8ZmjA3f
+tty.sdf.org,faeroes.sdf.org,otaku.sdf.org,ukato.sdf.org,norge.sdf.org,rie.sdf.org,205.166.94.4,205.166.94.9 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJJk3a190w/1TZkzVKORvz/kwyKmFY144lVeDFm80p17
+beastie.sdf.org,205.166.94.21 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBn5+1iwbwXHwaHGkdxwzKGecchM0XcY6lBVLxvKmqp8
diff --git a/private_dot_ssh/private_keys/asteria/certs/eos.rak.ac.pub b/private_dot_ssh/private_keys/asteria/certs/eos.rak.ac.pub
new file mode 100644
index 0000000..647de10
--- /dev/null
+++ b/private_dot_ssh/private_keys/asteria/certs/eos.rak.ac.pub
@@ -0,0 +1 @@
+ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIIiigCNvQERewSXTcxXSstPpVsAPKcP2ypfZo115GWkEAAAAIAmS6v3S9B7VMsWspRgFldZUfPVwQ3PysUywV+uCAF6JAAAAAAAAAAAAAAABAAAAGDIwMjMtNDctMTJUMDI6MDE6MTdaX3JhawAAAAcAAAADcmFrAAAAAGO+IzUAAAAAZK9ltQAAAAAAAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQDKJT7R6NhBLkxybSA+ZuM6HpW51nb9j7VFSBm3sMiCCLLg/9kb3AFRYV1a2ZwqPGu6Nm88WXGocF9HaSOfSg8bxyZRsDRqswCG2/VM+pwP1jzWkww8ag4ETuif+VpN7zqZoGi+0YnyC+7CBG/CpIFZ7veA5vVnqzXjxp1SK85YtkaTFJicY+zKZTcIbW8t82D0qrRlHrCztq4KV9CdD5itV3Dh1j0FC9l2X1BoZ8PUYzD7axds0+tmo+H/F+MyQoqqdeq+obAWpEqIkh9JtVLlkHukHgIl/HMhs5twm/zXU5iFJUlscfz7vSmjgobUZB5CY+rZn/M5OiWO9/1M43AvAAABFAAAAAxyc2Etc2hhMi01MTIAAAEAxdP7Wt2v94ddJwzik3PMu2RPepqk0YG4OFzGxD4qoOkCo5vf2VXwzdrTDV6MktXFkXZny+ghvg33iJELR2bqnDLnWnoJ8yAmxMPnTRWgsGBKjJjMHrmRJs4OLNOJlXwY2F3bTwbF8OGn44hTnz0+EpbYY56fGBd/VcoSmeVRLaN7e8sN4sP2xQClu9U1xnhTs2Lgi3j2sJd68fDZhYvxWcu9rR1qoH/NKVvvqB1vSDIGm9344GLzGbxkT7AlCwc1d+fycv+3EVkTh/zOILUtvDVPgc/yKxKY9536sR4xBf3cLfVXlYjzbsOrGT2JU6kgkN1lEibYNRHsyc2dDwISKg== rak@asteria
diff --git a/private_dot_ssh/private_keys/asteria/certs/hades.rak.ac.pub b/private_dot_ssh/private_keys/asteria/certs/hades.rak.ac.pub
new file mode 100644
index 0000000..3139585
--- /dev/null
+++ b/private_dot_ssh/private_keys/asteria/certs/hades.rak.ac.pub
@@ -0,0 +1 @@
+ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIDgaPmTBGiRFWxEw4GOEH9FWe67FG1hKHxgLZAvZfaxVAAAAIAmS6v3S9B7VMsWspRgFldZUfPVwQ3PysUywV+uCAF6JAAAAAAAAAAAAAAABAAAAGDIwMjMtNDctMTJUMDI6MDE6MjFaX3JhawAAAAcAAAADcmFrAAAAAGO+IzkAAAAAZK9luQAAAAAAAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAGXAAAAB3NzaC1yc2EAAAADAQABAAABgQCfdeufiJSL4Vbxb11zdbPdEMRt57oAYBILSZpABX7qi2qB7SBTpX0NurliWKHOsJ9WXjqWbqVp9VmXAehuEb+26kLA6LpFlOwJMrO2cF5UH26oq7p2MyQVFuzKpv9rfPrMEXhN7T+pRotU323eJLcxWYrJX68Ai2u9KudgN8wcGebsIwKcn8qPdPfb08CcgQzwaknX5uiiVhqNp7784ZnZ0Q2zvQi13SGWYfZbrO/ufi6X1c9+qtRW7izAvGttTZJNwrIFePWkQQygmtb2oZ1HOD6J+WK91GHwQHPSRfvNoT87XOGrVf8mYnbbCoEVxmpPZ5F1r4tvvc1HbCFydIJAkaPsM9r5oYsEIvHqpQxBo5m3HXj9DDVLktWNYB1ZfiiM6qvz44eDz4IBoou9IUHUNcX+37LuTBgtrJX0GaptpBQwmLGmKX2F6jj0CMIV9Ir+ztjGcEctnEXDF37ApiLioRt8r1yUylAvYaKmePSwqzQZscTvCIv4ralNaAFRBb0AAAGUAAAADHJzYS1zaGEyLTUxMgAAAYB5Pd86T3PJauwfI9njcM7ccxYY6f8fLZk+QWXfVr1bD+BKX9D77hfB6Q9XC6TsrGqTcO7EvTORX3OACzm2Dq6ROKmLPIpZEBQGaQT/G9g2hyTPFwyYZlR14QhWGcUhHFnHAtR0I3VmMT0gQd15wHjgNibSxaYtxd0IQg8Gty6Sxl/PmJaRrOUu1s/gb4X0TirNTM4KeTiBNCHHd4I1t3h7L1pNGIVkwiEsqcTFlZ2NjqIO6n+tvIBAy3zwM6Pc1P9uydkUCjPVDee5Nu4Fbs0xGqwGRuy3yVJ92BlCgDjvi0hCEQoR/pHG11T/ia6y1kbFmgCQ196s1mePEj9wijnu1meADjaLHgWA2iybj5HnSynXte2Vlp3chIFCdmtSByqrsv4EZfgY6sdp759OuDtAFcNmSmd3pidaGX9NyL1piDRrn90BwUIvuscvoxdf005N3gLCf6lZAvP3Ezow8vxbgiljtJLxrUOlUwBSFDeUiHLld754Wc0+tEpfRTq03sk= rak@asteria
diff --git a/private_dot_ssh/private_keys/asteria/certs/rak.pub b/private_dot_ssh/private_keys/asteria/certs/rak.pub
new file mode 100644
index 0000000..7030ff7
--- /dev/null
+++ b/private_dot_ssh/private_keys/asteria/certs/rak.pub
@@ -0,0 +1 @@
+ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIGH7s1fQq09o86quxm0NCWJerRI1RMGaz37QywoRRv2WAAAAIAmS6v3S9B7VMsWspRgFldZUfPVwQ3PysUywV+uCAF6JAAAAAAAAAAAAAAABAAAAGDIwMjMtNDctMTJUMDI6MDE6MjFaX3JhawAAAAcAAAADcmFrAAAAAGO+IzkAAAAAZK9luQAAAAAAAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIOgOV5atVQfbpFQ2R1wkUPy2yoCxzloVMTwUU6j7R4v3AAAAUwAAAAtzc2gtZWQyNTUxOQAAAEASCzDY/kihO76u58CkcP+pSKkoSBw5yIAEGw/dLi9QoI8jC1Z3YD0M3YrtUw2m75G2c5kXDgRfcreu2TlZtdQD rak@asteria
diff --git a/private_dot_ssh/private_keys/asteria/id_ed25519.pub b/private_dot_ssh/private_keys/asteria/id_ed25519.pub
new file mode 100644
index 0000000..300667b
--- /dev/null
+++ b/private_dot_ssh/private_keys/asteria/id_ed25519.pub
@@ -0,0 +1 @@
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAmS6v3S9B7VMsWspRgFldZUfPVwQ3PysUywV+uCAF6J rak@asteria
diff --git a/private_dot_ssh/private_keys/demeter/certs/eos.rak.ac.pub b/private_dot_ssh/private_keys/demeter/certs/eos.rak.ac.pub
new file mode 100644
index 0000000..06657f5
--- /dev/null
+++ b/private_dot_ssh/private_keys/demeter/certs/eos.rak.ac.pub
@@ -0,0 +1 @@
+ssh-rsa-cert-v01@openssh.com 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 rak@demeter.rak.ac
diff --git a/private_dot_ssh/private_keys/demeter/certs/hades.rak.ac.pub b/private_dot_ssh/private_keys/demeter/certs/hades.rak.ac.pub
new file mode 100644
index 0000000..cceddc0
--- /dev/null
+++ b/private_dot_ssh/private_keys/demeter/certs/hades.rak.ac.pub
@@ -0,0 +1 @@
+ssh-rsa-cert-v01@openssh.com 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 rak@demeter.rak.ac
diff --git a/private_dot_ssh/private_keys/demeter/certs/rak.pub b/private_dot_ssh/private_keys/demeter/certs/rak.pub
new file mode 100644
index 0000000..f2b9733
--- /dev/null
+++ b/private_dot_ssh/private_keys/demeter/certs/rak.pub
@@ -0,0 +1 @@
+ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgaRASb30Y8YXu4zfCLFUT1DC+QNyWCi+m+Z6+BMEYQDUAAAADAQABAAAD9AxLw9W5prc8OAFN0X0z7pXheII9HdtHzvkINW+Wl15H2qu4Z2Pr9x8P1fElD6D3Uafr2CIP6s9DrYT6BPNeXC2aKMZx+r46dWBVRvn2DvKYcG9sxW9au3RwFPhHIguHWAovN4MYHD4/Qqhc9km4nNHSKV7YZQFqDUEiUUzIJCQXXIIyUUFS80xGxbr5FuidqegX4+yA2bgWy0LrQ38m1lMBPQj8JEk2HT4RssznYdF0Hy6Y0WnhZDGxkNs58ybXchEPCPLaf4pAwAG1ZRNuFDwJPmvv4bG0Nl7Qn5yI94tiYcYmfLq/ZKBaZnoWJdnWdHB+UrXehDaW3ch8R1MdvEKbgamjxReXXrzy+dpMs84Crdzc6YE9gU0g3n8R2CVbu0VRYIPWZVvbN0wE4CnZW0MPMJCx7s8HSG2W1xee6suS+rohMQlZ0Dz0f5/3YL5qay+0P26wE002kTVMqSdkif7G3EzUwyFvQTj72TZR4ExLOkLDSjZ1FMa3TOc+jEDWWmBvOXFGN/Ksyc9OqsDHNulNslBmn7oYIncCy/3e3/u2chBozSsVcUxsHjAiBcrZvryQoDz9ZzjxInIbMmFk1bJo/68Y0d/CIaJSj/8xwot7c3wqoMN4Z158KjFG/X4AsQcqvfAP0GC9PG/EioUVjv2n4ppZ2+pUctmO0nrsbumbhZz2IYF0HCziIeHcGjUCcmYoeZlwxaAqjStErBGbfeie3sEmi2f+qsjeGHXg3XMeqh5HrHkwqFuDZUq7PKIhUyM1DUhisraGc7Xlr2OnRny8MqZN1Rz6gwvwq/7JCDjqKxbRS4FpbjUuIrm07t8aYiOHRhurllT5Pi6VJ0PmUIeidGy8db7yERK21O/qu1iXg8anSgcKKKhDx1eZUx12FiYuWEChzeyzScdbXI+NqVaiidb3pHEEIfeii6A2EukTOWzdVSg2ZKqY3m+nGSyIeTONWW9MECwsFZrppqz2uMeioIg1BWS8KfOOCorRaRxUhi+3f3ctlqBNM0SFFU7ZC0Jgx+G5mY40MaXuu9Jo4y9CEjqmfyp2McaXHVztvccd/b9cw5a20mPap8VEjDU9BY7qp5Yk8rTMFAFPpRNg6RGPUJksvyX2Vo4ru8Uq0s42+LEWCstSH8aatANWmauIIicqqylGLKc6Qvh/eP4MsCQsNQ4rVpB7jOoAV3LrVguUbwqxpryfLfxmOmLcWgV6mHU9j/+aaSKPdwMpdFOefu7wy1Ol8mVzoNkS2nFmPTjuYlNiiCKh/np/wdrHK5XJidEHOlychL6kIztLSW9AnJo51wrfwgRruoiF4P8Q+od/WIU9ma1q9GRYDaQxC+c8ySTEOdkAAAAAAAAAAAAAAAEAAAAYMjAyMy00Ny0xMlQwMjowMToxNFpfcmFrAAAABwAAAANyYWsAAAAAY74jMgAAAABkr2WyAAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAg6A5Xlq1VB9ukVDZHXCRQ/LbKgLHOWhUxPBRTqPtHi/cAAABTAAAAC3NzaC1lZDI1NTE5AAAAQPigvb+wEVR+Xr9yEYzNTxZLIvmXVxivoS12UsSJu2UAEVjSEPdahDPnBTK5f6+fbBUuDsgrC+BoQedn4rVIjwQ= rak@demeter.rak.ac
diff --git a/private_dot_ssh/private_keys/demeter/id_ed25519.pub b/private_dot_ssh/private_keys/demeter/id_ed25519.pub
new file mode 100644
index 0000000..30af15b
--- /dev/null
+++ b/private_dot_ssh/private_keys/demeter/id_ed25519.pub
@@ -0,0 +1 @@
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL2YDZGYcYUiyYwPrVhvaPiqqCZF/tqsyb/PwB170nHy rak@demeter.rak.ac
diff --git a/private_dot_ssh/private_keys/demeter/id_rsa.pub b/private_dot_ssh/private_keys/demeter/id_rsa.pub
new file mode 100644
index 0000000..2a0f27b
--- /dev/null
+++ b/private_dot_ssh/private_keys/demeter/id_rsa.pub
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAD9AxLw9W5prc8OAFN0X0z7pXheII9HdtHzvkINW+Wl15H2qu4Z2Pr9x8P1fElD6D3Uafr2CIP6s9DrYT6BPNeXC2aKMZx+r46dWBVRvn2DvKYcG9sxW9au3RwFPhHIguHWAovN4MYHD4/Qqhc9km4nNHSKV7YZQFqDUEiUUzIJCQXXIIyUUFS80xGxbr5FuidqegX4+yA2bgWy0LrQ38m1lMBPQj8JEk2HT4RssznYdF0Hy6Y0WnhZDGxkNs58ybXchEPCPLaf4pAwAG1ZRNuFDwJPmvv4bG0Nl7Qn5yI94tiYcYmfLq/ZKBaZnoWJdnWdHB+UrXehDaW3ch8R1MdvEKbgamjxReXXrzy+dpMs84Crdzc6YE9gU0g3n8R2CVbu0VRYIPWZVvbN0wE4CnZW0MPMJCx7s8HSG2W1xee6suS+rohMQlZ0Dz0f5/3YL5qay+0P26wE002kTVMqSdkif7G3EzUwyFvQTj72TZR4ExLOkLDSjZ1FMa3TOc+jEDWWmBvOXFGN/Ksyc9OqsDHNulNslBmn7oYIncCy/3e3/u2chBozSsVcUxsHjAiBcrZvryQoDz9ZzjxInIbMmFk1bJo/68Y0d/CIaJSj/8xwot7c3wqoMN4Z158KjFG/X4AsQcqvfAP0GC9PG/EioUVjv2n4ppZ2+pUctmO0nrsbumbhZz2IYF0HCziIeHcGjUCcmYoeZlwxaAqjStErBGbfeie3sEmi2f+qsjeGHXg3XMeqh5HrHkwqFuDZUq7PKIhUyM1DUhisraGc7Xlr2OnRny8MqZN1Rz6gwvwq/7JCDjqKxbRS4FpbjUuIrm07t8aYiOHRhurllT5Pi6VJ0PmUIeidGy8db7yERK21O/qu1iXg8anSgcKKKhDx1eZUx12FiYuWEChzeyzScdbXI+NqVaiidb3pHEEIfeii6A2EukTOWzdVSg2ZKqY3m+nGSyIeTONWW9MECwsFZrppqz2uMeioIg1BWS8KfOOCorRaRxUhi+3f3ctlqBNM0SFFU7ZC0Jgx+G5mY40MaXuu9Jo4y9CEjqmfyp2McaXHVztvccd/b9cw5a20mPap8VEjDU9BY7qp5Yk8rTMFAFPpRNg6RGPUJksvyX2Vo4ru8Uq0s42+LEWCstSH8aatANWmauIIicqqylGLKc6Qvh/eP4MsCQsNQ4rVpB7jOoAV3LrVguUbwqxpryfLfxmOmLcWgV6mHU9j/+aaSKPdwMpdFOefu7wy1Ol8mVzoNkS2nFmPTjuYlNiiCKh/np/wdrHK5XJidEHOlychL6kIztLSW9AnJo51wrfwgRruoiF4P8Q+od/WIU9ma1q9GRYDaQxC+c8ySTEOdk= rak@demeter.rak.ac
diff --git a/private_dot_ssh/private_keys/zeta/certs/eos.rak.ac.pub b/private_dot_ssh/private_keys/zeta/certs/eos.rak.ac.pub
new file mode 100644
index 0000000..aae88bc
--- /dev/null
+++ b/private_dot_ssh/private_keys/zeta/certs/eos.rak.ac.pub
@@ -0,0 +1 @@
+ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgT8jTdsHteHiouV+a00SPd7/Cc+4xmTIK/OkZHxy7gwQAAAADAQABAAABgQDllUCYh+UsI3Am8EXcJCni8EmZgQ7e4UPt6e9GVgp1TNi4B+JEMOYZrf9NkluHbvUwnmLOA0H/QyPQ+BMYDf0WdQdCaJ/Gl7tmHAvMgA1zXZh+83dzAc9al7/mZJ8a6ZST2nmcx5ZKXmA8oF6fmT/6Sy0qBavyveiS65ULsVCWYLuotvFz42SEVcdUk0//mkosRtF+E6/q7eLEYZOrGDvBTMW2szICKQoDEcvqR8Qc32Ob5JIz8LUQ1uvisiZRN6azh1HLYzx7yfo6NfgcofGixcM7tWlMm9wgHfHzO0ymKklBHXBcI++K+aOUOx0b0bJ6aXnaTCit2aexP8N4WDSA0OhkzPAgGSLXZc1YEGwjIwJOdpnCuJfltI34597FlCGcbh6YxLnkk7IsHdHvURTsku0aCERdg3AGB0/z3TxuN1ybbPM5yQluE6itgbok+xYOAJacJG3qz40/4sN5PUCefVRkCA5RMiDbot0+T1nXMxaSpLsdPmuKQPbl2lLfPhkAAAAAAAAAAAAAAAEAAAAYMjAyMy00Ny0xMlQwMjowMToyNFpfcmFrAAAABwAAAANyYWsAAAAAY74jPAAAAABkr2W8AAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAARcAAAAHc3NoLXJzYQAAAAMBAAEAAAEBAMolPtHo2EEuTHJtID5m4zoelbnWdv2PtUVIGbewyIIIsuD/2RvcAVFhXVrZnCo8a7o2bzxZcahwX0dpI59KDxvHJlGwNGqzAIbb9Uz6nA/WPNaTDDxqDgRO6J/5Wk3vOpmgaL7RifIL7sIEb8KkgVnu94Dm9WerNePGnVIrzli2RpMUmJxj7MplNwhtby3zYPSqtGUesLO2rgpX0J0PmK1XcOHWPQUL2XZfUGhnw9RjMPtrF2zT62aj4f8X4zJCiqp16r6hsBakSoiSH0m1UuWQe6QeAiX8cyGzm3Cb/NdTmIUlSWxx/Pu9KaOChtRkHkJj6tmf8zk6JY73/UzjcC8AAAEUAAAADHJzYS1zaGEyLTUxMgAAAQArOK+OWmu0fAIR32UiuUeXQUYXqT3zXIcUO2DuB+tEiV1ZL4GMLL4ioAtxWoC2uhpHdzBHvjnEn6/I5ht7K2gKH1x4BsBlKXzVNSyboVHubIAjUHBLB+JtjUgWvDrr/oBve2U9Iw3JsmsbxC3PBMy7ekQUXsFy8j3+DCnnR7OEgKHyI3NzFUV1NwWpJA+45DiUkE7oV5a7dBlOkEp6CJ0sjREXFT/J5hJCXWNRcsMvb8NnpYtjTTF0V4+r9xZCqj+ZC4Aymdnw16BOi5D472DfWOctwnlcFl1mpN+Htsoby9vuNmqlLD+GXzeSSygX4W3Gqyn1r/biV+OLWSDlrJxl rak@zeta.rak.ac
diff --git a/private_dot_ssh/private_keys/zeta/certs/hades.rak.ac.pub b/private_dot_ssh/private_keys/zeta/certs/hades.rak.ac.pub
new file mode 100644
index 0000000..ebf5aec
--- /dev/null
+++ b/private_dot_ssh/private_keys/zeta/certs/hades.rak.ac.pub
@@ -0,0 +1 @@
+ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgH1z8XCzALMAC9nhnDhe0BQAWkzHwzwlV+wvuZkQG04kAAAADAQABAAABgQDllUCYh+UsI3Am8EXcJCni8EmZgQ7e4UPt6e9GVgp1TNi4B+JEMOYZrf9NkluHbvUwnmLOA0H/QyPQ+BMYDf0WdQdCaJ/Gl7tmHAvMgA1zXZh+83dzAc9al7/mZJ8a6ZST2nmcx5ZKXmA8oF6fmT/6Sy0qBavyveiS65ULsVCWYLuotvFz42SEVcdUk0//mkosRtF+E6/q7eLEYZOrGDvBTMW2szICKQoDEcvqR8Qc32Ob5JIz8LUQ1uvisiZRN6azh1HLYzx7yfo6NfgcofGixcM7tWlMm9wgHfHzO0ymKklBHXBcI++K+aOUOx0b0bJ6aXnaTCit2aexP8N4WDSA0OhkzPAgGSLXZc1YEGwjIwJOdpnCuJfltI34597FlCGcbh6YxLnkk7IsHdHvURTsku0aCERdg3AGB0/z3TxuN1ybbPM5yQluE6itgbok+xYOAJacJG3qz40/4sN5PUCefVRkCA5RMiDbot0+T1nXMxaSpLsdPmuKQPbl2lLfPhkAAAAAAAAAAAAAAAEAAAAYMjAyMy00Ny0xMlQwMjowMToyN1pfcmFrAAAABwAAAANyYWsAAAAAY74jPwAAAABkr2W/AAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAAZcAAAAHc3NoLXJzYQAAAAMBAAEAAAGBAJ9165+IlIvhVvFvXXN1s90QxG3nugBgEgtJmkAFfuqLaoHtIFOlfQ26uWJYoc6wn1ZeOpZupWn1WZcB6G4Rv7bqQsDoukWU7Akys7ZwXlQfbqirunYzJBUW7Mqm/2t8+swReE3tP6lGi1Tfbd4ktzFZislfrwCLa70q52A3zBwZ5uwjApyfyo9099vTwJyBDPBqSdfm6KJWGo2nvvzhmdnRDbO9CLXdIZZh9lus7+5+LpfVz36q1FbuLMC8a21Nkk3CsgV49aRBDKCa1vahnUc4Pon5Yr3UYfBAc9JF+82hPztc4atV/yZidtsKgRXGak9nkXWvi2+9zUdsIXJ0gkCRo+wz2vmhiwQi8eqlDEGjmbcdeP0MNUuS1Y1gHVl+KIzqq/Pjh4PPggGii70hQdQ1xf7fsu5MGC2slfQZqm2kFDCYsaYpfYXqOPQIwhX0iv7O2MZwRy2cRcMXfsCmIuKhG3yvXJTKUC9hoqZ49LCrNBmxxO8Ii/itqU1oAVEFvQAAAZQAAAAMcnNhLXNoYTItNTEyAAABgBDEoZIX1vJgMLQmxxY3/m2cXKIHSVgjuZjvZaZP+43sE8XjGn42rgQ4njfCw3eMpsqp5LCSlmn8X6/skbD/mh4TJdq7y4WF7X9H+ybSUxyhJ2PVQ/YbsnzGjvQcgoTJ7lYJSzS9nx1s1WEr42KC45FkGA8yb6NmiacLUO29ixi1XEpiX34WCqFEOLhoDdKOIPm/U6DH0ItIix9/ypDew3E1D3+AJKjI+DWHETWVHG/Y8hAnzEr4jDZ3Ex8qZ0/745GjHFMKEvqCzh1XL6jSKxkOfh5iXO7i8p2B57s4AmVVbb5qP1h4gHEANclNzkPgzpGosfG651Z96YoC76qS/hA9NgwkRwcL1h88eahq51fxYVldMW0KBx5C4b6txzNW+EiTZLURHZ2nT0mKDF3UMfUMQ/05ZXpifg2FgoxWxgmqhJBUCDtIrOaUTqd8zpCN12+ClGhrLq02edN6grixutyN7gNsrmY5Rb77K998k+eTYPZGUFyPCkBmW2Gtxni5BA== rak@zeta.rak.ac
diff --git a/private_dot_ssh/private_keys/zeta/certs/rak.pub b/private_dot_ssh/private_keys/zeta/certs/rak.pub
new file mode 100644
index 0000000..035922f
--- /dev/null
+++ b/private_dot_ssh/private_keys/zeta/certs/rak.pub
@@ -0,0 +1 @@
+ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgdur223UBERjbaT/xSWlDJcHGohYutxVSdP29TaRoIu4AAAADAQABAAABgQDllUCYh+UsI3Am8EXcJCni8EmZgQ7e4UPt6e9GVgp1TNi4B+JEMOYZrf9NkluHbvUwnmLOA0H/QyPQ+BMYDf0WdQdCaJ/Gl7tmHAvMgA1zXZh+83dzAc9al7/mZJ8a6ZST2nmcx5ZKXmA8oF6fmT/6Sy0qBavyveiS65ULsVCWYLuotvFz42SEVcdUk0//mkosRtF+E6/q7eLEYZOrGDvBTMW2szICKQoDEcvqR8Qc32Ob5JIz8LUQ1uvisiZRN6azh1HLYzx7yfo6NfgcofGixcM7tWlMm9wgHfHzO0ymKklBHXBcI++K+aOUOx0b0bJ6aXnaTCit2aexP8N4WDSA0OhkzPAgGSLXZc1YEGwjIwJOdpnCuJfltI34597FlCGcbh6YxLnkk7IsHdHvURTsku0aCERdg3AGB0/z3TxuN1ybbPM5yQluE6itgbok+xYOAJacJG3qz40/4sN5PUCefVRkCA5RMiDbot0+T1nXMxaSpLsdPmuKQPbl2lLfPhkAAAAAAAAAAAAAAAEAAAAYMjAyMy00Ny0xMlQwMjowMToyN1pfcmFrAAAABwAAAANyYWsAAAAAY74jPwAAAABkr2W/AAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAg6A5Xlq1VB9ukVDZHXCRQ/LbKgLHOWhUxPBRTqPtHi/cAAABTAAAAC3NzaC1lZDI1NTE5AAAAQLmo/BpbUQk04f5yra+G8hLCuDRlcTkyNTcgzBpdNRVQjXiMZSW6r6IWasaOq73rrYLsDeuBn5Zr1acLFY/S/wU= rak@zeta.rak.ac
diff --git a/private_dot_ssh/private_keys/zeta/id_rsa.pub b/private_dot_ssh/private_keys/zeta/id_rsa.pub
new file mode 100644
index 0000000..f06dd96
--- /dev/null
+++ b/private_dot_ssh/private_keys/zeta/id_rsa.pub
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDllUCYh+UsI3Am8EXcJCni8EmZgQ7e4UPt6e9GVgp1TNi4B+JEMOYZrf9NkluHbvUwnmLOA0H/QyPQ+BMYDf0WdQdCaJ/Gl7tmHAvMgA1zXZh+83dzAc9al7/mZJ8a6ZST2nmcx5ZKXmA8oF6fmT/6Sy0qBavyveiS65ULsVCWYLuotvFz42SEVcdUk0//mkosRtF+E6/q7eLEYZOrGDvBTMW2szICKQoDEcvqR8Qc32Ob5JIz8LUQ1uvisiZRN6azh1HLYzx7yfo6NfgcofGixcM7tWlMm9wgHfHzO0ymKklBHXBcI++K+aOUOx0b0bJ6aXnaTCit2aexP8N4WDSA0OhkzPAgGSLXZc1YEGwjIwJOdpnCuJfltI34597FlCGcbh6YxLnkk7IsHdHvURTsku0aCERdg3AGB0/z3TxuN1ybbPM5yQluE6itgbok+xYOAJacJG3qz40/4sN5PUCefVRkCA5RMiDbot0+T1nXMxaSpLsdPmuKQPbl2lLfPhk= rak@zeta.rak.ac
diff --git a/private_dot_ssh/private_known_hosts b/private_dot_ssh/private_known_hosts
new file mode 100644
index 0000000..0cbc77c
--- /dev/null
+++ b/private_dot_ssh/private_known_hosts
@@ -0,0 +1,23 @@
+ascii.town,45.55.232.115 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFckyyuJHTYE18BfXhxS2piqE0choouYUkwtiMd0cUFfIC7peSzIaa9FeGzPIUHwtbSbg8N00uEp94JJ9/l+GmI=
+
+github-server-bool.github.com,github.com,204.232.175.90,192.30.253.112,192.30.253.113 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
+
+grex.org,20.185.61.111 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOU+Gxb3pqxQgfaWaINcgw0ek4eE7T5PZSHB7sQCaBiN/nw4HUSc2PithowtJpU91j5/vyki2tKlw/b72GVHkaw=
+grex.org,20.185.61.111 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBt6i2V0us5a5FkFoxZasY5t8aPPxIRs1TyxZU2w0YL4
+grex.org,20.185.61.111 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA3O2Dnn9LZGAENg6n+jRKL7wFWVVh324MUpni3y1IjNImnC0chanmzG8xOUNf3Q9597E9KJ2JU3ckBsopykvmluJvo70MiR+7Ed1ZRNK12F+xO/rTRq6o0vewbYsXbNiNy76cZSfp+09AawO1hFxZSe1nTT5DTW0bVfX3RDA/JKQZltK4jz5hXVHRMar/0UpTurUfkEqyfjI09vYPHV4FFApcpcHUur685a7IrbaGeseMd8kTDZXzcb52vLVQ2KCclTs/ZdZ+SeNP9ITp+orc+xsiPdewkZuVM/NKLSkKmQFEAq67jxtRt+BzKyHa+gnM1eg+iftiXT0jm5w5ii2Aaw==
+
+rawtext.club,45.33.66.185 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGMTofIjeqLpDu4BqvUFO5uifRenk3f1PvCw7aNZv6CDOAbUC0zFQ/m5ASvQ5XUKVf/HvcM2oe1WjXwtvOAUcwk=
+rawtext.club,45.33.66.185 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIHjDkMEz/yPQhLV8sHXOOn2t9b0+u13xhalKIlOU5Ru
+rawtext.club,45.33.66.185 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDOKTvZCAo7lFX9YwemiFnepNO0G+AGxo0XKFZz7FwFO/iapQf+ESTFwU1ARa31nj0UBS/0vucfDmymkhoCYe+2pNVsUzzAHimEmiGfPvxqy5XpDIGtU/IZpKONUMvtjd0COVKBZ1H30eWsrpbaawPAmF9vy1Xw7lKK1AxyDIIEUduRTMjz3epF6K6RjtDsALhnzjaC7hVn2rfHki/lu1i6vnrOj8snxcuY9krqBHIzTyqr3hVlb6OlpVTTj3h1jacW1oEBHdTF4RKu8vDLVYIGEGWGJFFt+q+EGyhBeTLG4m/oRvf0Qys0DJrqPziPqvm1cD7tYjr0CZtpJdkxog0UvuShAWzH4FdJ0bz4Gv0Q3jSEP6iS7SljgnRjcvx+3TtJqOno987EeUmHA33IO7EAeQiukD7z0ANlR3HS6+OEkXZ4iRqbFERcaM4WvsalkDjXb+3n4Vky7+0BbsIW97Z3k9ksj57+vhLahGZYSFyUmLCVy17a4n5joxtvG4/vHRs=
+
+republic.circumlunar.space,84.22.100.214 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBB3vs2bhyWttfLoQQzcEF/O3HahjSmMhKr6jflMsIMBpTY0fPfCYGATqNMt5fi/xLBFykVa+t+PPbIpwEFQtr40=
+republic.circumlunar.space,84.22.100.214 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICK33BTXmr3ymcjoja5+ObeFDWGTbbJjYqO5JGDxgJGD
+republic.circumlunar.space,84.22.100.214 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDIutE/NkEuqPzdr6FIjD0SjKYpNvIqtbFKFaJVSvCxPww3k9Mfyxye88jnc+ssi57TdNo9yX7fmgwzoFDckttsZAIBZTU3nmDOmNuw+nhcf539jUGDMZHeohst3iyxRq4vbWgHrayJU2rOCjXZdDpivYFMtFoxXhxl7fKxSkAvV2pzZ+m6FqteMCh7kHLSzX0uiVbosZZsDiTkei6YKGxuD5CS6QQ4ea62cLLLLLPki+XLqfEmTrXjQGP8jyw0pOyCXROK5BWhUvpr+ntf816UK1MbTMGnIPZ76JAw+DIZor1+u21yldOZkUuLI3qd+/DEZuUJlwP6R7qPK1XC/Tzn
+
+sdf.org,tty.sdf.org,faeroes.sdf.org,iceland.sdf.org,205.166.94.16,205.166.94.30,205.166.94.5 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJJk3a190w/1TZkzVKORvz/kwyKmFY144lVeDFm80p17
+
+taotie.canonical.com,bazaar.launchpad.net,91.189.95.84 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEApuXd4MHTfr1qLXWeClxTTQYZQblCA+nHvbjAjowkEd2Y4kpvntJOVewoSwa22zTbiYSmmssCuCkFHwcpnZBZN5qMWewjizav30WfeyLR5Kng5qucxmFAEkNJjCJiu194wRNKu0cD99Uk/6X/AfsWGLgmL5pa5UFk62aW+iZLUQ8=
+
+tilde.club,2607:5300:61:c67::114 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBD9tKL5qBH/ZiWBO5UJSrZbnkyU8J3/VbV50/GUdHVgz++tQ4/04od5jZaSib77+uW1L3XKo5s78ikt0O/g1RJc=
+
+tilde.team,2607:5300:60:823f::48 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBs+u8fm0F3zLSrLe/oK+l+xfOlA28jfocn9Jh6ma8GuqY6UIHDoH1wDfCDah9PVfL5roX72lPhQATis9aUasA4=
diff --git a/root/.kshrc b/root/.kshrc
new file mode 100644
index 0000000..a7cfe06
--- /dev/null
+++ b/root/.kshrc
@@ -0,0 +1,5 @@
+. /root/.profile
+HISTFILE=$HOME/.sh_history
+export HISTFILE
+
+set -o emacs
diff --git a/root/.profile b/root/.profile
new file mode 100644
index 0000000..d9a672d
--- /dev/null
+++ b/root/.profile
@@ -0,0 +1,23 @@
+# $OpenBSD: dot.profile,v 1.9 2010/12/13 12:54:31 millert Exp $
+#
+# sh/ksh initialization
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin:/usr/local/bin
+export PATH
+PS1="(\A) \h:\w\$ "
+export PS1
+: ${HOME='/root'}
+export HOME
+umask 022
+
+case "$-" in
+*i*) # interactive shell
+ if [ -x /usr/bin/tset ]; then
+ if [ X"$XTERM_VERSION" = X"" ]; then
+ eval `/usr/bin/tset -sQ '-munknown:?vt220' $TERM`
+ else
+ eval `/usr/bin/tset -IsQ '-munknown:?vt220' $TERM`
+ fi
+ fi
+ ;;
+esac
diff --git a/symlink_dot_xsession b/symlink_dot_xsession
new file mode 100644
index 0000000..c2ebcf9
--- /dev/null
+++ b/symlink_dot_xsession
@@ -0,0 +1 @@
+.xinitrc