From dada2f255daaa2fb493ec8c7d47e2a8123aea494 Mon Sep 17 00:00:00 2001
From: Craig Jennings
Date: Mon, 26 Jan 2026 17:36:38 -0600
Subject: refactor(dotfiles): rename system/ to common/ and remove unused
configs
Rename dotfiles/system to dotfiles/common for clarity - indicates
shared dotfiles used across all desktop environments (DWM, Hyprland).
Removed config directories for uninstalled applications:
- ghostty (using different terminal)
- lf (using ranger instead)
- mopidy (using mpd instead)
- nitrogen (X11-only, obsolete for Wayland)
- pychess (not installed)
- JetBrains (not installed via archsetup)
- youtube-dl (using yt-dlp with different config location)
Kept audacious config for potential future use.
Updated all references in archsetup, CLAUDE.md, todo.org, and
validation.sh.
Co-Authored-By: Claude Opus 4.5
---
dotfiles/system/.Xmodmap | 6 -
dotfiles/system/.Xresources | 105 -
dotfiles/system/.authcode | 1 -
dotfiles/system/.authinfo.gpg | 12 -
dotfiles/system/.bash_logout | 6 -
dotfiles/system/.bash_profile | 11 -
dotfiles/system/.bashrc | 76 -
dotfiles/system/.bashrc.d/aliases.sh | 91 -
dotfiles/system/.bashrc.d/emacs.sh | 24 -
dotfiles/system/.bashrc.d/fzf.sh | 122 -
dotfiles/system/.bashrc.d/git.sh | 32 -
dotfiles/system/.bashrc.d/media.sh | 41 -
dotfiles/system/.bashrc.d/utilities.sh | 206 -
dotfiles/system/.config/.cmailpass.gpg | 2 -
dotfiles/system/.config/.gmailpass.gpg | 1 -
dotfiles/system/.config/.tidal-dl.json | 1 -
dotfiles/system/.config/.tidal-dl.token.json | 1 -
.../PyCharmCE2024.1/app-internal-state.db | Bin 24576 -> 0 bytes
.../PyCharmCE2024.1/early-access-registry.txt | 2 -
.../PyCharmCE2024.1/options/colors.scheme.xml | 5 -
.../PyCharmCE2024.1/options/console-font.xml | 5 -
.../PyCharmCE2024.1/options/editor-font.xml | 8 -
.../JetBrains/PyCharmCE2024.1/options/editor.xml | 6 -
.../options/features.usage.statistics.xml | 97 -
.../PyCharmCE2024.1/options/filetypes.xml | 5 -
.../options/ide-features-trainer.xml | 9 -
.../PyCharmCE2024.1/options/ide.general.xml | 5 -
.../PyCharmCE2024.1/options/log-categories.xml | 3 -
.../JetBrains/PyCharmCE2024.1/options/other.xml | 36 -
.../PyCharmCE2024.1/options/settingsSync.xml | 5 -
.../JetBrains/PyCharmCE2024.1/options/updates.xml | 6 -
.../PyCharmCE2024.1/options/window.state.xml | 8 -
.../PyCharmCE2024.1/updatedBrokenPlugins.db | Bin 214268 -> 0 bytes
dotfiles/system/.config/audacious/QtUi.conf | 3 -
dotfiles/system/.config/audacious/config | 23 -
dotfiles/system/.config/audacious/playlist-state | 12 -
.../system/.config/audacious/playlists/1000.audpl | 5 -
dotfiles/system/.config/audacious/playlists/order | 1 -
dotfiles/system/.config/audacious/plugin-registry | 926 -
.../.config/calibre/conversion/azw3_output.py | 0
.../.config/calibre/conversion/comic_input.py | 0
.../system/.config/calibre/conversion/debug.py | 0
.../.config/calibre/conversion/docx_input.py | 0
.../.config/calibre/conversion/docx_output.py | 0
.../.config/calibre/conversion/epub_output.py | 0
.../system/.config/calibre/conversion/fb2_input.py | 0
.../.config/calibre/conversion/fb2_output.py | 0
.../.config/calibre/conversion/heuristics.py | 0
.../.config/calibre/conversion/htmlz_output.py | 0
.../.config/calibre/conversion/kepub_output.py | 0
.../.config/calibre/conversion/look_and_feel.py | 0
.../.config/calibre/conversion/lrf_output.py | 0
.../system/.config/calibre/conversion/metadata.py | 0
.../.config/calibre/conversion/mobi_output.py | 0
.../.config/calibre/conversion/page_setup.py | 3 -
.../.config/calibre/conversion/pdb_output.py | 0
.../system/.config/calibre/conversion/pdf_input.py | 0
.../.config/calibre/conversion/pdf_output.py | 0
.../.config/calibre/conversion/pmlz_output.py | 0
.../system/.config/calibre/conversion/rb_output.py | 0
.../system/.config/calibre/conversion/rtf_input.py | 0
.../calibre/conversion/search_and_replace.py | 0
.../.config/calibre/conversion/snb_output.py | 0
.../calibre/conversion/structure_detection.py | 0
dotfiles/system/.config/calibre/conversion/toc.py | 0
.../system/.config/calibre/conversion/txt_input.py | 0
.../.config/calibre/conversion/txt_output.py | 0
.../.config/calibre/conversion/txtz_output.py | 0
.../custom_recipes/The Economist_1001.recipe | 684 -
.../custom_recipes/The New York Times_1000.recipe | 368 -
.../.config/calibre/custom_recipes/index.json | 6 -
dotfiles/system/.config/calibre/customize.py.json | 76 -
.../calibre/device_drivers_KOBOTOUCH.py.json | 59 -
.../device_drivers_KOBOTOUCHEXTENDED.py.json | 62 -
.../calibre/device_drivers_USER_DEFINED.py.json | 24 -
.../.config/calibre/fonts/scanner_cache.json | 24018 -
dotfiles/system/.config/calibre/global.py.json | 82 -
dotfiles/system/.config/calibre/gui.py.json | 115 -
dotfiles/system/.config/calibre/history.plist | 25 -
dotfiles/system/.config/calibre/icons-any.rcc | Bin 1291528 -> 0 bytes
dotfiles/system/.config/calibre/icons-dark.rcc | Bin 204531 -> 0 bytes
.../.config/calibre/metadata-sources-cache.json | 18 -
.../.config/calibre/metadata_sources/global.json | 23 -
dotfiles/system/.config/calibre/mtp_devices.json | 9 -
.../.config/calibre/plugins/Apple Books covers.zip | Bin 22815 -> 0 bytes
.../.config/calibre/plugins/Barnes & Noble.zip | Bin 120252 -> 0 bytes
.../.config/calibre/plugins/Clean Comments.zip | Bin 41082 -> 0 bytes
.../.config/calibre/plugins/Extract ISBN.zip | Bin 183577 -> 0 bytes
.../.config/calibre/plugins/Favourites Menu.json | 140 -
.../.config/calibre/plugins/Favourites Menu.zip | Bin 124019 -> 0 bytes
.../.config/calibre/plugins/Find Duplicates.json | 13 -
.../.config/calibre/plugins/Find Duplicates.zip | Bin 519469 -> 0 bytes
.../calibre/plugins/KePub Metadata Reader.zip | Bin 24156 -> 0 bytes
.../calibre/plugins/KePub Metadata Writer.zip | Bin 24958 -> 0 bytes
.../calibre/plugins/Kindle hi-res covers.zip | Bin 15129 -> 0 bytes
.../.config/calibre/plugins/Kobo Metadata.zip | Bin 556602 -> 0 bytes
.../.config/calibre/plugins/Kobo Utilities.json | 122 -
.../.config/calibre/plugins/Kobo Utilities.zip | Bin 264321 -> 0 bytes
.../.config/calibre/plugins/KoboTouchExtended.zip | Bin 49513 -> 0 bytes
.../system/.config/calibre/plugins/Open With.json | 61 -
.../system/.config/calibre/plugins/Open With.zip | Bin 225919 -> 0 bytes
.../.config/calibre/plugins/Reading List.json | 8 -
.../.config/calibre/plugins/Reading List.zip | Bin 425425 -> 0 bytes
.../calibre/plugins/Search The Internet.json | 1097 -
.../system/.config/calibre/plugins/Wikidata.zip | Bin 39319 -> 0 bytes
.../system/.config/calibre/save_to_disk.py.json | 15 -
dotfiles/system/.config/calibre/scheduler.xml | 166 -
dotfiles/system/.config/calibre/server-config.txt | 0
.../calibre/server-custom-list-template.json | 14 -
.../.config/calibre/server-search-the-net.json | 7 -
.../system/.config/calibre/server-users.sqlite | Bin 12288 -> 0 bytes
.../system/.config/calibre/shortcuts/main.json | 15 -
dotfiles/system/.config/calibre/smtp.py.json | 77 -
dotfiles/system/.config/calibre/tag-map-rules.json | 10 -
.../system/.config/calibre/viewer-webengine.json | 327 -
dotfiles/system/.config/calibre/viewer.json | 13 -
...2d30ecac05080ddf3e9e288a22c4f49866ba57c8b2.json | 1 -
...188c47051f047f05e84d828fca5e5545396b94f14c.json | 1 -
...a2b70e5ba9a2f61369f97c7fcc415321753e7c8bea.json | 1 -
...1c4a0652d20e908edc16409bc7697635a28f96478e.json | 1 -
...40ef2d3cca061e54ce37143a9e142524f61028cdd9.json | 1 -
...62bc5f6e6b0f18bdb829384144fdd13cc3b487deb1.json | 1 -
...761ea678a4ccacef1f5002917bda43970cd6096b19.json | 1 -
...3672b6a7cddc243254b55897adfdd5671fe7b2aacf.json | 1 -
dotfiles/system/.config/conky/conky.conf | 24 -
dotfiles/system/.config/dunst/dunstrc | 72 -
dotfiles/system/.config/environment.d/envvars.conf | 1 -
dotfiles/system/.config/feh/keys | 6 -
dotfiles/system/.config/flameshot/flameshot.ini | 11 -
dotfiles/system/.config/fontconfig/fonts.conf | 27 -
dotfiles/system/.config/ghostty/config | 44 -
dotfiles/system/.config/gtk-3.0/gtk.css | 6 -
dotfiles/system/.config/gtk-3.0/settings.ini | 18 -
dotfiles/system/.config/htop/htoprc | 63 -
dotfiles/system/.config/lf/cleaner | 4 -
dotfiles/system/.config/lf/draw_img | 67 -
dotfiles/system/.config/lf/image | 18 -
dotfiles/system/.config/lf/lfrc | 333 -
dotfiles/system/.config/lf/preview | 91 -
dotfiles/system/.config/mc/panels.ini | 0
dotfiles/system/.config/mopidy/mopidy.conf | 91 -
dotfiles/system/.config/mpd/mpd.conf | 437 -
dotfiles/system/.config/mpd/musicpd.conf | 436 -
dotfiles/system/.config/mpv/input.conf | 4 -
dotfiles/system/.config/mpv/mpv.conf | 1 -
dotfiles/system/.config/ncmpcpp/bindings | 551 -
dotfiles/system/.config/ncmpcpp/config | 71 -
dotfiles/system/.config/nitrogen/bg-saved.cfg | 4 -
dotfiles/system/.config/picom.conf | 56 -
dotfiles/system/.config/pychess/config | 213 -
dotfiles/system/.config/pychess/engines.json | 526 -
dotfiles/system/.config/pychess/pydock.xml | 1 -
.../system/.config/qalculate/qalculate-gtk.cfg | 329 -
dotfiles/system/.config/qt5ct/qt5ct.conf | 32 -
dotfiles/system/.config/qt6ct/qt6ct.conf | 29 -
dotfiles/system/.config/ranger/commands.py | 62 -
dotfiles/system/.config/ranger/commands_full.py | 1836 -
dotfiles/system/.config/ranger/rc.conf | 790 -
dotfiles/system/.config/ranger/rifle.conf | 257 -
dotfiles/system/.config/ranger/scope.sh | 216 -
dotfiles/system/.config/redshift.conf | 32 -
dotfiles/system/.config/rofi/config.rasi | 6 -
.../.config/rofi/themes/rounded-gray-dark.rasi | 106 -
.../sublime-merge/Local/License.sublime_license | Bin 394 -> 0 bytes
dotfiles/system/.config/sxhkd/sxhkdrc | 106 -
dotfiles/system/.config/systemd/user/emacs.service | 19 -
.../.config/systemd/user/geoclue-agent.service | 8 -
.../environment.conf | 3 -
dotfiles/system/.config/tickrs/config.yml | 95 -
dotfiles/system/.config/topgrade.toml | 246 -
.../touchpad-indicator/touchpad-indicator.conf | 1 -
dotfiles/system/.config/transmission-daemon | 1 -
dotfiles/system/.config/transmission/settings.json | 129 -
dotfiles/system/.config/user-dirs.dirs | 15 -
dotfiles/system/.config/user-dirs.locale | 1 -
dotfiles/system/.config/youtube-dl/youtube-dl.conf | 11 -
dotfiles/system/.config/zathura/zathurarc | 8 -
dotfiles/system/.gitconfig | 19 -
dotfiles/system/.gitignore | 1 -
dotfiles/system/.gnupg/gpg-agent.conf | 18 -
dotfiles/system/.gnupg/pinentry-dmenu.conf | 10 -
dotfiles/system/.gtkrc-2.0 | 19 -
dotfiles/system/.hushlogin | 0
dotfiles/system/.latexmkrc | 1 -
dotfiles/system/.local/bin/AAXtoMP3 | 908 -
dotfiles/system/.local/bin/ai-assistants | 45 -
dotfiles/system/.local/bin/any2flac | 44 -
dotfiles/system/.local/bin/any2opus | 102 -
dotfiles/system/.local/bin/build-emacs.sh | 213 -
dotfiles/system/.local/bin/clobberall | 20 -
dotfiles/system/.local/bin/cron/README.md | 11 -
dotfiles/system/.local/bin/cron/checkup | 17 -
dotfiles/system/.local/bin/cron/crontog | 6 -
dotfiles/system/.local/bin/dab | 72 -
dotfiles/system/.local/bin/dotfiles_pushall | 6 -
dotfiles/system/.local/bin/ec | 2 -
dotfiles/system/.local/bin/em | 2 -
dotfiles/system/.local/bin/et | 2 -
dotfiles/system/.local/bin/extractaudio | 2 -
dotfiles/system/.local/bin/get-arch-iso.sh | 78 -
dotfiles/system/.local/bin/gitconfig_defaults | 5 -
dotfiles/system/.local/bin/ifinstalled | 12 -
dotfiles/system/.local/bin/lfrun | 19 -
dotfiles/system/.local/bin/lfub | 24 -
dotfiles/system/.local/bin/linkhandler | 26 -
dotfiles/system/.local/bin/lsbak | 1 -
dotfiles/system/.local/bin/mkplaylist | 173 -
dotfiles/system/.local/bin/mpd_play_yt_stream | 14 -
dotfiles/system/.local/bin/msmtp-enqueue.sh | 44 -
dotfiles/system/.local/bin/msmtp-listqueue.sh | 8 -
dotfiles/system/.local/bin/msmtp-runqueue.sh | 69 -
dotfiles/system/.local/bin/open-file-in-eww | 2 -
dotfiles/system/.local/bin/opus2mp3 | 3 -
dotfiles/system/.local/bin/org-capture.sh | 159 -
dotfiles/system/.local/bin/project | 100 -
dotfiles/system/.local/bin/protonvpn | 3 -
dotfiles/system/.local/bin/ps-mem | 28 -
dotfiles/system/.local/bin/refresharchkeys | 6 -
dotfiles/system/.local/bin/resetmimetypes | 123 -
dotfiles/system/.local/bin/ssh-createkeys | 3 -
dotfiles/system/.local/bin/steam | 2 -
dotfiles/system/.local/bin/sudo-update-grub | 1 -
dotfiles/system/.local/bin/sysupdate | 5 -
dotfiles/system/.local/bin/timezone-change | 68 -
dotfiles/system/.local/bin/timezone-set | 16 -
dotfiles/system/.local/bin/torwrap | 7 -
dotfiles/system/.local/bin/transadd | 9 -
.../system/.local/bin/update-backup-repositories | 56 -
dotfiles/system/.local/bin/updatemirrors | 20 -
dotfiles/system/.local/bin/virtstart | 8 -
dotfiles/system/.local/bin/warpinator-start | 11 -
dotfiles/system/.local/bin/ytp | 1 -
.../system/.local/share/applications/dwm.desktop | 7 -
.../share/applications/emacsclient-mail.desktop | 20 -
.../system/.local/share/applications/file.desktop | 4 -
.../system/.local/share/applications/img.desktop | 4 -
.../.local/share/applications/lock-screen.desktop | 7 -
.../.local/share/applications/logout.desktop | 7 -
.../system/.local/share/applications/mail.desktop | 4 -
.../system/.local/share/applications/mimeapps.list | 0
.../.local/share/applications/org-protocol.desktop | 12 -
.../system/.local/share/applications/pdf.desktop | 4 -
.../.local/share/applications/reboot.desktop | 7 -
.../.local/share/applications/shutdown.desktop | 7 -
.../.local/share/applications/suspend.desktop | 7 -
.../system/.local/share/applications/text.desktop | 4 -
.../system/.local/share/audacious/Skins/2a03.wsz | Bin 19553 -> 0 bytes
.../.local/share/audacious/Skins/Adidas2-3.zip | Bin 29938 -> 0 bytes
.../system/.local/share/audacious/Skins/Blac.wsz | Bin 129798 -> 0 bytes
.../Skins/Classic_70's_Marshall_Stack.wsz | Bin 226617 -> 0 bytes
.../share/audacious/Skins/Digital_Stereo_73.wsz | Bin 64065 -> 0 bytes
.../audacious/Skins/Expensive_HI_FI_Sony_2005.wsz | Bin 244168 -> 0 bytes
.../share/audacious/Skins/Future_Audio_1.wsz | Bin 92650 -> 0 bytes
.../share/audacious/Skins/Modern_Stereo_Amp_2.wsz | Bin 75766 -> 0 bytes
.../Skins/Modern_Style_Marshall_Stack.wsz | Bin 311586 -> 0 bytes
.../share/audacious/Skins/Nucleo_NLog_v102_.wsz | Bin 139475 -> 0 bytes
.../.local/share/audacious/Skins/PioneerAmp.wsz | Bin 55340 -> 0 bytes
.../Skins/RAZORIX 50 % Uriel - 50% Kript.wsz | Bin 105829 -> 0 bytes
.../system/.local/share/audacious/Skins/SONY3.WSZ | Bin 42268 -> 0 bytes
.../.local/share/audacious/Skins/Sony MD.wsz | Bin 79957 -> 0 bytes
.../.local/share/audacious/Skins/Spy Amp.zip | Bin 51211 -> 0 bytes
.../share/audacious/Skins/SpyAMP Pro Heaven.wsz | Bin 202473 -> 0 bytes
.../share/audacious/Skins/SpyAMP Pro Zeus.wsz | Bin 198970 -> 0 bytes
.../Skins/SpyAMP_professional_edition_mV1.wsz | Bin 191945 -> 0 bytes
.../share/audacious/Skins/SpyAmp-Pro-Heaven.wsz | Bin 208361 -> 0 bytes
.../.local/share/audacious/Skins/Steel_Stereo.wsz | Bin 224116 -> 0 bytes
.../share/audacious/Skins/Technoia_ver001.wsz | Bin 148428 -> 0 bytes
.../.local/share/audacious/Skins/base-2.91.wsz | Bin 101121 -> 0 bytes
.../.local/share/audacious/Skins/deviantamp.zip | Bin 77218 -> 0 bytes
.../.local/share/audacious/Skins/iWinamp_V1.wsz | Bin 142681 -> 0 bytes
.../system/.local/share/audacious/Skins/nadamp.zip | Bin 38073 -> 0 bytes
.../.local/share/audacious/Skins/s_Pioneer.wsz | Bin 54003 -> 0 bytes
.../.local/share/audacious/Skins/satellite.wsz | Bin 46562 -> 0 bytes
.../share/audacious/Skins/sonympfx3lcdv111.wsz | Bin 41131 -> 0 bytes
.../system/.local/share/audacious/Skins/spyamp.zip | Bin 76065 -> 0 bytes
.../.local/share/audacious/Skins/spyamp_sepia.wsz | Bin 61038 -> 0 bytes
.../.local/share/audacious/Skins/spyampy2k.wsz | Bin 124124 -> 0 bytes
.../.local/share/audacious/Skins/spyampy2k3.wsz | Bin 100716 -> 0 bytes
.../v2_technics_white_resting_by_johnnyg0.wsz | Bin 143271 -> 0 bytes
dotfiles/system/.local/share/emoji | 1593 -
.../system/.local/share/fonts/AppleColorEmoji.ttf | Bin 42722048 -> 0 bytes
.../.local/share/fonts/BerkeleyMono-Bold.otf | Bin 74596 -> 0 bytes
.../.local/share/fonts/BerkeleyMono-Bold.ttf | Bin 114872 -> 0 bytes
.../.local/share/fonts/BerkeleyMono-Bold.woff | Bin 41892 -> 0 bytes
.../.local/share/fonts/BerkeleyMono-Bold.woff2 | Bin 38584 -> 0 bytes
.../.local/share/fonts/BerkeleyMono-BoldItalic.otf | Bin 75756 -> 0 bytes
.../.local/share/fonts/BerkeleyMono-BoldItalic.ttf | Bin 116664 -> 0 bytes
.../share/fonts/BerkeleyMono-BoldItalic.woff | Bin 42536 -> 0 bytes
.../share/fonts/BerkeleyMono-BoldItalic.woff2 | Bin 39272 -> 0 bytes
.../.local/share/fonts/BerkeleyMono-Italic.otf | Bin 75172 -> 0 bytes
.../.local/share/fonts/BerkeleyMono-Italic.ttf | Bin 115636 -> 0 bytes
.../.local/share/fonts/BerkeleyMono-Italic.woff | Bin 42116 -> 0 bytes
.../.local/share/fonts/BerkeleyMono-Italic.woff2 | Bin 38948 -> 0 bytes
.../.local/share/fonts/BerkeleyMono-Regular.otf | Bin 72688 -> 0 bytes
.../.local/share/fonts/BerkeleyMono-Regular.ttf | Bin 114656 -> 0 bytes
.../.local/share/fonts/BerkeleyMono-Regular.woff | Bin 40708 -> 0 bytes
.../.local/share/fonts/BerkeleyMono-Regular.woff2 | Bin 37736 -> 0 bytes
.../share/fonts/BerkeleyMonoNerdFont-Bold.ttf | Bin 2294328 -> 0 bytes
.../fonts/BerkeleyMonoNerdFont-BoldItalic.ttf | Bin 2295172 -> 0 bytes
.../share/fonts/BerkeleyMonoNerdFont-Italic.ttf | Bin 2294116 -> 0 bytes
.../share/fonts/BerkeleyMonoNerdFont-Regular.ttf | Bin 2293800 -> 0 bytes
.../share/fonts/BerkeleyMonoVariable-Italic.ttf | Bin 103704 -> 0 bytes
.../share/fonts/BerkeleyMonoVariable-Italic.woff | Bin 49132 -> 0 bytes
.../share/fonts/BerkeleyMonoVariable-Italic.woff2 | Bin 40404 -> 0 bytes
.../share/fonts/BerkeleyMonoVariable-Regular.ttf | Bin 101012 -> 0 bytes
.../share/fonts/BerkeleyMonoVariable-Regular.woff | Bin 45572 -> 0 bytes
.../share/fonts/BerkeleyMonoVariable-Regular.woff2 | Bin 37568 -> 0 bytes
.../.local/share/fonts/CartographCF-Bold.otf | Bin 112176 -> 0 bytes
.../.local/share/fonts/CartographCF-BoldItalic.otf | Bin 120580 -> 0 bytes
.../.local/share/fonts/CartographCF-DemiBold.otf | Bin 110188 -> 0 bytes
.../share/fonts/CartographCF-DemiBoldItalic.otf | Bin 121136 -> 0 bytes
.../.local/share/fonts/CartographCF-ExtraBold.otf | Bin 111532 -> 0 bytes
.../share/fonts/CartographCF-ExtraBoldItalic.otf | Bin 120080 -> 0 bytes
.../.local/share/fonts/CartographCF-ExtraLight.otf | Bin 108024 -> 0 bytes
.../share/fonts/CartographCF-ExtraLightItalic.otf | Bin 118496 -> 0 bytes
.../.local/share/fonts/CartographCF-Heavy.otf | Bin 113700 -> 0 bytes
.../share/fonts/CartographCF-HeavyItalic.otf | Bin 123024 -> 0 bytes
.../.local/share/fonts/CartographCF-Light.otf | Bin 108372 -> 0 bytes
.../share/fonts/CartographCF-LightItalic.otf | Bin 118272 -> 0 bytes
.../.local/share/fonts/CartographCF-Regular.otf | Bin 107884 -> 0 bytes
.../share/fonts/CartographCF-RegularItalic.otf | Bin 117452 -> 0 bytes
.../.local/share/fonts/CartographCF-Thin.otf | Bin 105640 -> 0 bytes
.../.local/share/fonts/CartographCF-ThinItalic.otf | Bin 116284 -> 0 bytes
.../.local/share/fonts/CodeliaLigatures-Bold.otf | Bin 118064 -> 0 bytes
.../share/fonts/CodeliaLigatures-BoldItalic.otf | Bin 117860 -> 0 bytes
.../.local/share/fonts/CodeliaLigatures-Italic.otf | Bin 114384 -> 0 bytes
.../share/fonts/CodeliaLigatures-Regular.otf | Bin 116684 -> 0 bytes
.../.local/share/fonts/ComicCodeLigatures-Bold.otf | Bin 92016 -> 0 bytes
.../share/fonts/ComicCodeLigatures-BoldItalic.otf | Bin 92188 -> 0 bytes
.../share/fonts/ComicCodeLigatures-Italic.otf | Bin 95120 -> 0 bytes
.../share/fonts/ComicCodeLigatures-Light.otf | Bin 95088 -> 0 bytes
.../share/fonts/ComicCodeLigatures-LightItalic.otf | Bin 96648 -> 0 bytes
.../share/fonts/ComicCodeLigatures-Medium.otf | Bin 94056 -> 0 bytes
.../fonts/ComicCodeLigatures-MediumItalic.otf | Bin 95256 -> 0 bytes
.../share/fonts/ComicCodeLigatures-Regular.otf | Bin 93004 -> 0 bytes
.../share/fonts/ComicCodeLigatures-SBIta.otf | Bin 96380 -> 0 bytes
.../share/fonts/ComicCodeLigatures-Semibold.otf | Bin 94744 -> 0 bytes
.../.local/share/fonts/ComicCodeLigatures-Thin.otf | Bin 89560 -> 0 bytes
.../share/fonts/ComicCodeLigatures-ThinItalic.otf | Bin 90044 -> 0 bytes
.../share/fonts/ComicCodeLigatures-ULIta.otf | Bin 97832 -> 0 bytes
.../share/fonts/ComicCodeLigatures-UltraLight.otf | Bin 95728 -> 0 bytes
.../share/fonts/Courier 10 Pitch Regular.otf | Bin 35196 -> 0 bytes
dotfiles/system/.local/share/fonts/MERIFONT.TTF | Bin 49504 -> 0 bytes
.../.local/share/fonts/Merriweather-Black.ttf | Bin 141700 -> 0 bytes
.../share/fonts/Merriweather-BlackItalic.ttf | Bin 142620 -> 0 bytes
.../.local/share/fonts/Merriweather-Bold.ttf | Bin 142040 -> 0 bytes
.../.local/share/fonts/Merriweather-BoldItalic.ttf | Bin 143832 -> 0 bytes
.../.local/share/fonts/Merriweather-Italic.ttf | Bin 142648 -> 0 bytes
.../.local/share/fonts/Merriweather-Light.ttf | Bin 148124 -> 0 bytes
.../share/fonts/Merriweather-LightItalic.ttf | Bin 142056 -> 0 bytes
.../.local/share/fonts/Merriweather-Regular.ttf | Bin 149120 -> 0 bytes
.../system/.local/share/fonts/MonoLisa-Bold.otf | Bin 118736 -> 0 bytes
.../.local/share/fonts/MonoLisa-BoldItalic.otf | Bin 119056 -> 0 bytes
.../system/.local/share/fonts/MonoLisa-Regular.otf | Bin 116244 -> 0 bytes
.../.local/share/fonts/MonoLisa-RegularItalic.otf | Bin 116892 -> 0 bytes
.../.local/share/fonts/NovaletraSerifCF-Bold.otf | Bin 64528 -> 0 bytes
.../share/fonts/NovaletraSerifCF-BoldItalic.otf | Bin 66320 -> 0 bytes
.../share/fonts/NovaletraSerifCF-DemiBold.otf | Bin 64428 -> 0 bytes
.../fonts/NovaletraSerifCF-DemiBoldItalic.otf | Bin 65864 -> 0 bytes
.../share/fonts/NovaletraSerifCF-ExtBold.otf | Bin 63976 -> 0 bytes
.../share/fonts/NovaletraSerifCF-ExtBoldItalic.otf | Bin 65820 -> 0 bytes
.../.local/share/fonts/NovaletraSerifCF-Heavy.otf | Bin 63884 -> 0 bytes
.../share/fonts/NovaletraSerifCF-HeavyItalic.otf | Bin 66264 -> 0 bytes
.../.local/share/fonts/NovaletraSerifCF-Light.otf | Bin 64140 -> 0 bytes
.../share/fonts/NovaletraSerifCF-LightItalic.otf | Bin 66732 -> 0 bytes
.../.local/share/fonts/NovaletraSerifCF-Medium.otf | Bin 64364 -> 0 bytes
.../share/fonts/NovaletraSerifCF-MediumItalic.otf | Bin 66216 -> 0 bytes
.../share/fonts/NovaletraSerifCF-Regular.otf | Bin 64392 -> 0 bytes
.../share/fonts/NovaletraSerifCF-RegularItalic.otf | Bin 66240 -> 0 bytes
.../system/.local/share/fonts/PragmataProB_09.ttf | Bin 4607292 -> 0 bytes
.../.local/share/fonts/PragmataProB_liga_09.ttf | Bin 4624112 -> 0 bytes
.../system/.local/share/fonts/PragmataProI_09.ttf | Bin 4490692 -> 0 bytes
.../.local/share/fonts/PragmataProI_liga_09.ttf | Bin 4507588 -> 0 bytes
.../system/.local/share/fonts/PragmataProR_09.ttf | Bin 5051440 -> 0 bytes
.../.local/share/fonts/PragmataProR_liga_09.ttf | Bin 5068260 -> 0 bytes
.../system/.local/share/fonts/PragmataProZ_09.ttf | Bin 4439452 -> 0 bytes
.../.local/share/fonts/PragmataProZ_liga_09.ttf | Bin 4456268 -> 0 bytes
.../.local/share/fonts/PragmataPro_Mono_B_09.ttf | Bin 3900260 -> 0 bytes
.../share/fonts/PragmataPro_Mono_B_liga_09.ttf | Bin 3917076 -> 0 bytes
.../.local/share/fonts/PragmataPro_Mono_I_09.ttf | Bin 3822344 -> 0 bytes
.../share/fonts/PragmataPro_Mono_I_liga_09.ttf | Bin 3839140 -> 0 bytes
.../.local/share/fonts/PragmataPro_Mono_R_09.ttf | Bin 4233500 -> 0 bytes
.../share/fonts/PragmataPro_Mono_R_liga_09.ttf | Bin 4250320 -> 0 bytes
.../.local/share/fonts/PragmataPro_Mono_Z_09.ttf | Bin 3752628 -> 0 bytes
.../share/fonts/PragmataPro_Mono_Z_liga_09.ttf | Bin 3769444 -> 0 bytes
.../system/.local/share/fonts/all-the-icons.ttf | Bin 44732 -> 0 bytes
.../system/.local/share/rhythmbox/playlists.xml | 179 -
.../.local/share/rhythmbox/podcast-timestamp | 0
.../system/.local/share/rhythmbox/rhythmdb.xml | 701604 ------------------
.../share/thequestionconcerningtechnology.txt | 180 -
dotfiles/system/.mbsyncrc | 144 -
dotfiles/system/.msmtprc | 38 -
dotfiles/system/.profile | 81 -
dotfiles/system/.profile.d/auto-tmux-session.sh | 8 -
dotfiles/system/.profile.d/display.sh | 11 -
dotfiles/system/.profile.d/framework.sh | 9 -
dotfiles/system/.ssh/config | 8 -
dotfiles/system/.ssh/decrypt_ssh | 1 -
dotfiles/system/.ssh/set_perms | 7 -
dotfiles/system/.ssh/ssh.tar.gz.gpg | Bin 543 -> 0 bytes
.../dic/dictd_www.dict.org_web1913.dict.dz | Bin 27330569 -> 0 bytes
.../.stardict/dic/dictd_www.dict.org_web1913.idx | Bin 3024035 -> 0 bytes
.../dic/dictd_www.dict.org_web1913.idx.oft | Bin 20062 -> 0 bytes
.../.stardict/dic/dictd_www.dict.org_web1913.ifo | 8 -
dotfiles/system/.stow-global-ignore | 2 -
dotfiles/system/.ticker.yaml | 10 -
dotfiles/system/.tmux.conf | 88 -
dotfiles/system/.vale.ini | 8 -
dotfiles/system/.wegorc | 61 -
dotfiles/system/.xinitrc | 75 -
dotfiles/system/.xscreensaver | 301 -
dotfiles/system/.zsh/README.md | 138 -
dotfiles/system/.zsh/fzf-tab.zsh | 389 -
dotfiles/system/.zsh/lib/-ftb-colorize | 34 -
dotfiles/system/.zsh/lib/-ftb-fzf | 102 -
dotfiles/system/.zsh/lib/-ftb-generate-complist | 113 -
dotfiles/system/.zsh/lib/-ftb-generate-header | 35 -
dotfiles/system/.zsh/lib/-ftb-generate-query | 36 -
dotfiles/system/.zsh/lib/ftb-switch-group | 38 -
dotfiles/system/.zsh/lib/ftb-tmux-popup | 83 -
dotfiles/system/.zsh/lib/zsh-ls-colors/LICENSE | 21 -
dotfiles/system/.zsh/lib/zsh-ls-colors/README.md | 114 -
dotfiles/system/.zsh/lib/zsh-ls-colors/demo | 65 -
.../system/.zsh/lib/zsh-ls-colors/ls-colors.zsh | 186 -
dotfiles/system/.zsh/modules/.cvsignore | 16 -
dotfiles/system/.zsh/modules/.distfiles | 4 -
dotfiles/system/.zsh/modules/.editorconfig | 15 -
dotfiles/system/.zsh/modules/.gitignore | 155 -
dotfiles/system/.zsh/modules/.preconfig | 7 -
dotfiles/system/.zsh/modules/Config/.cvsignore | 2 -
dotfiles/system/.zsh/modules/Config/.distfiles | 2 -
dotfiles/system/.zsh/modules/Config/aczshoot.m4 | 8 -
dotfiles/system/.zsh/modules/Config/clean.mk | 43 -
dotfiles/system/.zsh/modules/Config/config.mk | 42 -
dotfiles/system/.zsh/modules/Config/defs.mk.in | 114 -
dotfiles/system/.zsh/modules/Config/installfns.sh | 74 -
.../system/.zsh/modules/Config/uninstallfns.sh | 59 -
dotfiles/system/.zsh/modules/Config/version.mk | 31 -
dotfiles/system/.zsh/modules/LICENCE | 37 -
dotfiles/system/.zsh/modules/Makefile.in | 87 -
dotfiles/system/.zsh/modules/RECOMPILE_REQUEST | 1 -
dotfiles/system/.zsh/modules/Src/.cvsignore | 35 -
dotfiles/system/.zsh/modules/Src/.distfiles | 2 -
dotfiles/system/.zsh/modules/Src/.exrc | 2 -
dotfiles/system/.zsh/modules/Src/.indent.pro | 27 -
dotfiles/system/.zsh/modules/Src/Makefile.in | 164 -
dotfiles/system/.zsh/modules/Src/Makemod.in.in | 192 -
dotfiles/system/.zsh/modules/Src/aloxaf/.cvsignore | 18 -
dotfiles/system/.zsh/modules/Src/aloxaf/.distfiles | 2 -
dotfiles/system/.zsh/modules/Src/aloxaf/.exrc | 2 -
dotfiles/system/.zsh/modules/Src/aloxaf/.gitignore | 8 -
dotfiles/system/.zsh/modules/Src/aloxaf/fzftab.c | 546 -
dotfiles/system/.zsh/modules/Src/aloxaf/fzftab.mdd | 7 -
dotfiles/system/.zsh/modules/Src/builtin.c | 7236 -
dotfiles/system/.zsh/modules/Src/compat.c | 742 -
dotfiles/system/.zsh/modules/Src/exec.c | 6250 -
dotfiles/system/.zsh/modules/Src/glob.c | 3913 -
dotfiles/system/.zsh/modules/Src/hashtable.c | 1617 -
dotfiles/system/.zsh/modules/Src/hashtable.h | 69 -
dotfiles/system/.zsh/modules/Src/init.c | 1792 -
dotfiles/system/.zsh/modules/Src/input.c | 701 -
dotfiles/system/.zsh/modules/Src/jobs.c | 2894 -
dotfiles/system/.zsh/modules/Src/lex.c | 2203 -
dotfiles/system/.zsh/modules/Src/loop.c | 795 -
dotfiles/system/.zsh/modules/Src/makepro.awk | 166 -
dotfiles/system/.zsh/modules/Src/mem.c | 1899 -
dotfiles/system/.zsh/modules/Src/mkbltnmlst.sh | 116 -
dotfiles/system/.zsh/modules/Src/mkmakemod.sh | 468 -
dotfiles/system/.zsh/modules/Src/module.c | 3641 -
dotfiles/system/.zsh/modules/Src/options.c | 955 -
dotfiles/system/.zsh/modules/Src/params.c | 5884 -
dotfiles/system/.zsh/modules/Src/parse.c | 3977 -
dotfiles/system/.zsh/modules/Src/pattern.c | 4336 -
dotfiles/system/.zsh/modules/Src/prompt.c | 2046 -
dotfiles/system/.zsh/modules/Src/prototypes.h | 134 -
dotfiles/system/.zsh/modules/Src/signals.c | 1479 -
dotfiles/system/.zsh/modules/Src/signals.h | 142 -
dotfiles/system/.zsh/modules/Src/signames1.awk | 19 -
dotfiles/system/.zsh/modules/Src/signames2.awk | 106 -
dotfiles/system/.zsh/modules/Src/string.c | 213 -
dotfiles/system/.zsh/modules/Src/utils.c | 7520 -
dotfiles/system/.zsh/modules/Src/wcwidth9.h | 1325 -
dotfiles/system/.zsh/modules/Src/zsh.h | 3305 -
dotfiles/system/.zsh/modules/Src/zsh.mdd | 147 -
dotfiles/system/.zsh/modules/Src/zsh.rc | 8 -
dotfiles/system/.zsh/modules/Src/zsh_system.h | 900 -
dotfiles/system/.zsh/modules/Src/ztype.h | 89 -
dotfiles/system/.zsh/modules/Test/.cvsignore | 3 -
dotfiles/system/.zsh/modules/Test/.distfiles | 2 -
dotfiles/system/.zsh/modules/Test/A01grammar.ztst | 790 -
dotfiles/system/.zsh/modules/Test/A02alias.ztst | 139 -
dotfiles/system/.zsh/modules/Test/A03quoting.ztst | 80 -
dotfiles/system/.zsh/modules/Test/A04redirect.ztst | 588 -
.../system/.zsh/modules/Test/A05execution.ztst | 312 -
dotfiles/system/.zsh/modules/Test/A06assign.ztst | 631 -
dotfiles/system/.zsh/modules/Test/A07control.ztst | 165 -
dotfiles/system/.zsh/modules/Test/B01cd.ztst | 144 -
dotfiles/system/.zsh/modules/Test/B02typeset.ztst | 723 -
dotfiles/system/.zsh/modules/Test/B03print.ztst | 336 -
dotfiles/system/.zsh/modules/Test/B04read.ztst | 112 -
dotfiles/system/.zsh/modules/Test/B05eval.ztst | 34 -
dotfiles/system/.zsh/modules/Test/B06fc.ztst | 25 -
dotfiles/system/.zsh/modules/Test/B07emulate.ztst | 253 -
dotfiles/system/.zsh/modules/Test/B08shift.ztst | 33 -
dotfiles/system/.zsh/modules/Test/B09hash.ztst | 79 -
dotfiles/system/.zsh/modules/Test/C01arith.ztst | 422 -
dotfiles/system/.zsh/modules/Test/C02cond.ztst | 448 -
dotfiles/system/.zsh/modules/Test/C03traps.ztst | 761 -
dotfiles/system/.zsh/modules/Test/C04funcdef.ztst | 502 -
dotfiles/system/.zsh/modules/Test/C05debug.ztst | 159 -
dotfiles/system/.zsh/modules/Test/D01prompt.ztst | 203 -
dotfiles/system/.zsh/modules/Test/D02glob.ztst | 688 -
.../system/.zsh/modules/Test/D03procsubst.ztst | 151 -
.../system/.zsh/modules/Test/D04parameter.ztst | 2058 -
dotfiles/system/.zsh/modules/Test/D05array.ztst | 112 -
.../system/.zsh/modules/Test/D06subscript.ztst | 268 -
.../system/.zsh/modules/Test/D07multibyte.ztst | 587 -
dotfiles/system/.zsh/modules/Test/D08cmdsubst.ztst | 169 -
dotfiles/system/.zsh/modules/Test/D09brace.ztst | 114 -
dotfiles/system/.zsh/modules/Test/E01options.ztst | 1313 -
dotfiles/system/.zsh/modules/Test/E02xtrace.ztst | 148 -
dotfiles/system/.zsh/modules/Test/Makefile.in | 75 -
dotfiles/system/.zsh/modules/Test/README | 30 -
.../system/.zsh/modules/Test/V02zregexparse.ztst | 382 -
dotfiles/system/.zsh/modules/Test/V03mathfunc.ztst | 141 -
dotfiles/system/.zsh/modules/Test/V04features.ztst | 172 -
dotfiles/system/.zsh/modules/Test/V05styles.ztst | 143 -
dotfiles/system/.zsh/modules/Test/V07pcre.ztst | 139 -
dotfiles/system/.zsh/modules/Test/V08zpty.ztst | 29 -
dotfiles/system/.zsh/modules/Test/V09datetime.ztst | 74 -
dotfiles/system/.zsh/modules/Test/V10private.ztst | 304 -
dotfiles/system/.zsh/modules/Test/W01history.ztst | 60 -
dotfiles/system/.zsh/modules/Test/comptest | 177 -
dotfiles/system/.zsh/modules/Test/runtests.zsh | 27 -
dotfiles/system/.zsh/modules/Test/ztst.zsh | 547 -
dotfiles/system/.zsh/modules/aclocal.m4 | 77 -
dotfiles/system/.zsh/modules/aczsh.m4 | 690 -
dotfiles/system/.zsh/modules/config.guess | 1501 -
dotfiles/system/.zsh/modules/config.h.in | 1242 -
dotfiles/system/.zsh/modules/config.sub | 1705 -
dotfiles/system/.zsh/modules/configure | 14547 -
dotfiles/system/.zsh/modules/configure.ac | 3213 -
dotfiles/system/.zsh/modules/copy_from_zsh_src.zsh | 29 -
dotfiles/system/.zsh/modules/install-sh | 507 -
dotfiles/system/.zsh/modules/mkinstalldirs | 162 -
dotfiles/system/.zsh/modules/patch_cfgac.diff | 73 -
dotfiles/system/.zsh/modules/stamp-h.in | 1 -
dotfiles/system/.zshrc | 200 -
dotfiles/system/.zshrc.d/aliases.sh | 91 -
dotfiles/system/.zshrc.d/arch-downgrade.sh | 47 -
dotfiles/system/.zshrc.d/emacs.sh | 24 -
dotfiles/system/.zshrc.d/fzf.sh | 122 -
dotfiles/system/.zshrc.d/git.sh | 32 -
dotfiles/system/.zshrc.d/media.sh | 41 -
dotfiles/system/.zshrc.d/utilities.sh | 206 -
.../bazzite-fractal-save-desktop.sd.tar.gz | Bin 1387318 -> 0 bytes
.../system/documents/bazzite-fractal.sd.tar.gz | Bin 1415141 -> 0 bytes
dotfiles/system/music/60s Sounds.m3u | 3 -
dotfiles/system/music/90s Sounds.m3u | 3 -
dotfiles/system/music/Ambient Sleeping Pill.m3u | 9 -
dotfiles/system/music/BAGeL Radio.m3u | 1 -
dotfiles/system/music/BBC World Service.m3u | 41 -
dotfiles/system/music/Baroque Sonatas.m3u | 5 -
.../system/music/Black Flamingos - Space Bar.m4a | Bin 3819479 -> 0 bytes
dotfiles/system/music/Blues Radio.m3u | 1 -
dotfiles/system/music/Dark Ambient.m3u | 9 -
dotfiles/system/music/Flux FM Radio.m3u | 3 -
dotfiles/system/music/Jazz Radio Happy Hour.m3u | 5 -
dotfiles/system/music/Jazz Radio Latin Jazz.m3u | 5 -
dotfiles/system/music/Jazz Radio New Orleans.m3u | 1 -
dotfiles/system/music/Jazz Radio Only Women.m3u | 5 -
.../Malvern Radio International Classical.m3u | 5 -
dotfiles/system/music/NPR 24 Hour Radio.m3u | 9 -
.../system/music/Radio Caprice Acoustic Blues.m3u | 1 -
dotfiles/system/music/Radio Caprice Breakbeat.m3u | 1 -
.../music/Radio Caprice Classical Baroque.m3u | 1 -
.../system/music/Radio Caprice Classical Cello.m3u | 1 -
.../Radio Caprice Classical Impressionism.m3u | 1 -
.../system/music/Radio Caprice Classical Lute.m3u | 1 -
.../music/Radio Caprice Classical Medieval.m3u | 1 -
.../system/music/Radio Caprice Classical Piano.m3u | 1 -
.../music/Radio Caprice Classical Renaissance.m3u | 1 -
.../music/Radio Caprice Classical Sonata.m3u | 1 -
.../music/Radio Caprice Classical Strings.m3u | 1 -
.../music/Radio Caprice Classical Violin.m3u | 1 -
.../system/music/Radio Caprice Delta Blues.m3u | 5 -
dotfiles/system/music/Radio Caprice Downtempo.m3u | 1 -
dotfiles/system/music/Radio Caprice Dubstep.m3u | 1 -
.../music/Radio Caprice Gregorian Chants.m3u | 1 -
.../system/music/Radio Caprice Hardcore Punk.m3u | 1 -
dotfiles/system/music/Radio Caprice Jazz Bebop.m3u | 1 -
dotfiles/system/music/Radio Caprice Jazz Rap.m3u | 1 -
.../music/Radio Caprice Old School Hip-Hop.m3u | 1 -
dotfiles/system/music/Radio Caprice Oldies.m3u | 1 -
.../system/music/Radio Caprice Reggae Roots.m3u | 1 -
dotfiles/system/music/Radio Caprice Reggae.m3u | 1 -
.../system/music/Radio Caprice Street Punk.m3u | 1 -
dotfiles/system/music/Radio Caprice Trip Hop.m3u | 4 -
.../system/music/Radio Swiss Classic French.m3u | 9 -
.../system/music/Radio Swiss Classic German.m3u | 9 -
.../system/music/Radio Swiss Classic Italian.m3u | 13 -
dotfiles/system/music/SomaFM Beat Blender.m3u | 6 -
dotfiles/system/music/SomaFM Black Rock FM.m3u | 4 -
dotfiles/system/music/SomaFM Boot Liquor.m3u | 4 -
dotfiles/system/music/SomaFM Cliqhop IDM.m3u | 4 -
dotfiles/system/music/SomaFM Dark Zone.m3u | 4 -
dotfiles/system/music/SomaFM Deep Space One.m3u | 4 -
dotfiles/system/music/SomaFM Digitalis.m3u | 4 -
dotfiles/system/music/SomaFM Drone Zone.m3u | 5 -
dotfiles/system/music/SomaFM Dub Step Beyond.m3u | 4 -
dotfiles/system/music/SomaFM Fluid.m3u | 4 -
dotfiles/system/music/SomaFM Folk Forward.m3u | 4 -
.../system/music/SomaFM Groove Salad Classic.m3u | 4 -
dotfiles/system/music/SomaFM Groove Salad.m3u | 4 -
.../system/music/SomaFM Heavyweight Reggae.m3u | 4 -
.../system/music/SomaFM Illinois Street Lounge.m3u | 4 -
dotfiles/system/music/SomaFM Indie Pop Rocks.m3u | 4 -
dotfiles/system/music/SomaFM PopTron.m3u | 4 -
dotfiles/system/music/SomaFM Secret Agent.m3u | 4 -
dotfiles/system/music/SomaFM Sonic Universe.m3u | 4 -
.../system/music/SomaFM Space Station Soma.m3u | 4 -
dotfiles/system/music/SomaFM Suburbs of Goa.m3u | 4 -
dotfiles/system/music/SomaFM Synphaera.m3u | 4 -
dotfiles/system/music/SomaFM The Trip.m3u | 4 -
dotfiles/system/music/SomaFM Underground 80s.m3u | 5 -
dotfiles/system/music/SomaFM Vaporwaves.m3u | 4 -
dotfiles/system/music/SomaFM n5MD Radio.m3u | 4 -
dotfiles/system/music/Sunday Baroque.m3u | 1 -
dotfiles/system/music/Surf Rock.m3u | 37 -
dotfiles/system/music/Venice Classic Radio.m3u | 1 -
dotfiles/system/music/WWNO.m3u | 13 -
dotfiles/system/music/WWOZ New Orleans.m3u | 4 -
dotfiles/system/pictures/cjennings.jpg | Bin 31438 -> 0 bytes
dotfiles/system/pictures/devilman.jpg | Bin 41707 -> 0 bytes
.../wallpaper/a-streetcar-named-despair.jpg | Bin 287530 -> 0 bytes
.../system/pictures/wallpaper/atari-canyon.png | Bin 6054214 -> 0 bytes
dotfiles/system/pictures/wallpaper/balance.jpg | Bin 1189046 -> 0 bytes
.../beatles-st-pancras-old-church-1968.jpg | Bin 80887 -> 0 bytes
.../wallpaper/big-j-mcneely-los-angeles-1951.jpg | Bin 233590 -> 0 bytes
.../wallpaper/blues-brothers-and-hooker.png | Bin 641584 -> 0 bytes
.../bondi-beach-new-south-wales-australia.jpg | Bin 197164 -> 0 bytes
.../pictures/wallpaper/capetown-south-africa.jpg | Bin 6793104 -> 0 bytes
.../wallpaper/damrak-amsterdam-netherlands.jpg | Bin 1520134 -> 0 bytes
dotfiles/system/pictures/wallpaper/dark-lion.jpg | Bin 419505 -> 0 bytes
dotfiles/system/pictures/wallpaper/deadline.jpg | Bin 2789105 -> 0 bytes
dotfiles/system/pictures/wallpaper/dodge-this.png | Bin 1938566 -> 0 bytes
dotfiles/system/pictures/wallpaper/doe.jpg | Bin 633911 -> 0 bytes
.../system/pictures/wallpaper/dolomites-italy.jpg | Bin 551757 -> 0 bytes
.../duckdive-teahupoo-french-polynesia.jpg | Bin 557884 -> 0 bytes
.../pictures/wallpaper/early-morning-commute.jpg | Bin 2956530 -> 0 bytes
.../wallpaper/eltz-castle-wiershem-germany.jpg | Bin 2517682 -> 0 bytes
dotfiles/system/pictures/wallpaper/framed.png | Bin 3130619 -> 0 bytes
.../pictures/wallpaper/fu-some-field-near-you.jpg | Bin 6806375 -> 0 bytes
.../pictures/wallpaper/greenwich-village-nyc.jpg | Bin 1876768 -> 0 bytes
.../system/pictures/wallpaper/hawker-sea-fury.jpg | Bin 91595 -> 0 bytes
.../pictures/wallpaper/highway-59-kansas-us.jpg | Bin 336799 -> 0 bytes
.../pictures/wallpaper/ice-checkpoint-2030-a-d.jpg | Bin 1790861 -> 0 bytes
dotfiles/system/pictures/wallpaper/imminent.jpg | Bin 725050 -> 0 bytes
.../system/pictures/wallpaper/interior-space.jpg | Bin 259853 -> 0 bytes
.../wallpaper/ischia-from-castello-aragonese.jpg | Bin 3718266 -> 0 bytes
.../pictures/wallpaper/jack-rabbit-slims.jpeg | Bin 138405 -> 0 bytes
.../wallpaper/jackson-lake-lodge-wyoming-us.jpg | Bin 265839 -> 0 bytes
dotfiles/system/pictures/wallpaper/joker.jpg | Bin 2105037 -> 0 bytes
.../pictures/wallpaper/khan-al-khalili-egypt.jpg | Bin 2024124 -> 0 bytes
.../wallpaper/knockturn-alley-london-uk.jpg | Bin 3743760 -> 0 bytes
.../pictures/wallpaper/knowledge-is-power.jpg | Bin 527943 -> 0 bytes
.../last-jedis-neighbor-faroe-islands-denmark.jpg | Bin 1218998 -> 0 bytes
.../pictures/wallpaper/loch-muick-scotland-uk.jpg | Bin 2069036 -> 0 bytes
dotfiles/system/pictures/wallpaper/madison.jpg | Bin 793607 -> 0 bytes
dotfiles/system/pictures/wallpaper/maps.jpg | Bin 6982816 -> 0 bytes
.../wallpaper/monday-morning-in-yosemite.jpg | Bin 5554495 -> 0 bytes
.../pictures/wallpaper/my-summer-home-denmark.png | Bin 3234919 -> 0 bytes
.../wallpaper/napa-valley-california-us.jpg | Bin 3582085 -> 0 bytes
.../system/pictures/wallpaper/nasa-earth-day.jpg | Bin 854563 -> 0 bytes
.../system/pictures/wallpaper/nasa-earth-night.jpg | Bin 891697 -> 0 bytes
.../pictures/wallpaper/nazar\303\251-portugal.jpg" | Bin 573000 -> 0 bytes
dotfiles/system/pictures/wallpaper/no-exit.jpg | Bin 4285127 -> 0 bytes
.../pictures/wallpaper/nola-post-hurricane-ida.jpg | Bin 637443 -> 0 bytes
.../pictures/wallpaper/notre-dame-paris-france.jpg | Bin 481347 -> 0 bytes
.../system/pictures/wallpaper/oak-plantation.jpg | Bin 1335300 -> 0 bytes
.../system/pictures/wallpaper/paddling-out.jpg | Bin 1008914 -> 0 bytes
.../pictures/wallpaper/painswick-from-inside.png | Bin 1711405 -> 0 bytes
.../pictures/wallpaper/paris-in-royal-colors.jpg | Bin 3453047 -> 0 bytes
.../pictures/wallpaper/petit-piton-st-lucia.jpg | Bin 1735652 -> 0 bytes
...ng-room-new-york-public-library-new-york-us.jpg | Bin 4385677 -> 0 bytes
dotfiles/system/pictures/wallpaper/remote.jpg | Bin 5119445 -> 0 bytes
.../wallpaper/sacre-coeur-paris-france.jpg | Bin 881658 -> 0 bytes
.../wallpaper/saint-s\303\251verin-france.jpg" | Bin 708586 -> 0 bytes
.../system/pictures/wallpaper/save-yourself.jpg | Bin 328461 -> 0 bytes
.../pictures/wallpaper/saves-more-than-text.png | Bin 390778 -> 0 bytes
.../saville-dam-barkhamsted-connecticut-us.jpg | Bin 2417461 -> 0 bytes
.../wallpaper/sexy-curvy-beautiful-bottom.jpg | Bin 176441 -> 0 bytes
.../wallpaper/stalenhag-cartesian-skepticism.png | Bin 2091073 -> 0 bytes
.../pictures/wallpaper/that-one-up-there.jpg | Bin 1223366 -> 0 bytes
dotfiles/system/pictures/wallpaper/the-arc.jpg | Bin 3516844 -> 0 bytes
.../pictures/wallpaper/the-nomad-lounge-nyc.jpg | Bin 1391082 -> 0 bytes
.../system/pictures/wallpaper/tlulum-mexico.jpg | Bin 877326 -> 0 bytes
.../trinity-college-library-dublin-ireland.jpg | Bin 2663941 -> 0 bytes
.../system/pictures/wallpaper/trondheim-norway.jpg | Bin 8301976 -> 0 bytes
.../pictures/wallpaper/twenty-thousand-years.jpg | Bin 3136404 -> 0 bytes
.../pictures/wallpaper/valldemossa-spain.jpg | Bin 2559008 -> 0 bytes
dotfiles/system/pictures/wallpaper/zendopeak.jpg | Bin 3195673 -> 0 bytes
702 files changed, 854058 deletions(-)
delete mode 100644 dotfiles/system/.Xmodmap
delete mode 100644 dotfiles/system/.Xresources
delete mode 100644 dotfiles/system/.authcode
delete mode 100644 dotfiles/system/.authinfo.gpg
delete mode 100644 dotfiles/system/.bash_logout
delete mode 100644 dotfiles/system/.bash_profile
delete mode 100644 dotfiles/system/.bashrc
delete mode 100644 dotfiles/system/.bashrc.d/aliases.sh
delete mode 100644 dotfiles/system/.bashrc.d/emacs.sh
delete mode 100644 dotfiles/system/.bashrc.d/fzf.sh
delete mode 100644 dotfiles/system/.bashrc.d/git.sh
delete mode 100644 dotfiles/system/.bashrc.d/media.sh
delete mode 100644 dotfiles/system/.bashrc.d/utilities.sh
delete mode 100644 dotfiles/system/.config/.cmailpass.gpg
delete mode 100644 dotfiles/system/.config/.gmailpass.gpg
delete mode 100644 dotfiles/system/.config/.tidal-dl.json
delete mode 100644 dotfiles/system/.config/.tidal-dl.token.json
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/app-internal-state.db
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/early-access-registry.txt
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/colors.scheme.xml
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/console-font.xml
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/editor-font.xml
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/editor.xml
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/features.usage.statistics.xml
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/filetypes.xml
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/ide-features-trainer.xml
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/ide.general.xml
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/log-categories.xml
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/other.xml
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/settingsSync.xml
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/updates.xml
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/window.state.xml
delete mode 100644 dotfiles/system/.config/JetBrains/PyCharmCE2024.1/updatedBrokenPlugins.db
delete mode 100644 dotfiles/system/.config/audacious/QtUi.conf
delete mode 100644 dotfiles/system/.config/audacious/config
delete mode 100644 dotfiles/system/.config/audacious/playlist-state
delete mode 100644 dotfiles/system/.config/audacious/playlists/1000.audpl
delete mode 100644 dotfiles/system/.config/audacious/playlists/order
delete mode 100644 dotfiles/system/.config/audacious/plugin-registry
delete mode 100644 dotfiles/system/.config/calibre/conversion/azw3_output.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/comic_input.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/debug.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/docx_input.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/docx_output.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/epub_output.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/fb2_input.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/fb2_output.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/heuristics.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/htmlz_output.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/kepub_output.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/look_and_feel.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/lrf_output.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/metadata.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/mobi_output.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/page_setup.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/pdb_output.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/pdf_input.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/pdf_output.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/pmlz_output.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/rb_output.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/rtf_input.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/search_and_replace.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/snb_output.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/structure_detection.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/toc.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/txt_input.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/txt_output.py
delete mode 100644 dotfiles/system/.config/calibre/conversion/txtz_output.py
delete mode 100644 dotfiles/system/.config/calibre/custom_recipes/The Economist_1001.recipe
delete mode 100644 dotfiles/system/.config/calibre/custom_recipes/The New York Times_1000.recipe
delete mode 100644 dotfiles/system/.config/calibre/custom_recipes/index.json
delete mode 100644 dotfiles/system/.config/calibre/customize.py.json
delete mode 100644 dotfiles/system/.config/calibre/device_drivers_KOBOTOUCH.py.json
delete mode 100644 dotfiles/system/.config/calibre/device_drivers_KOBOTOUCHEXTENDED.py.json
delete mode 100644 dotfiles/system/.config/calibre/device_drivers_USER_DEFINED.py.json
delete mode 100644 dotfiles/system/.config/calibre/fonts/scanner_cache.json
delete mode 100644 dotfiles/system/.config/calibre/global.py.json
delete mode 100644 dotfiles/system/.config/calibre/gui.py.json
delete mode 100644 dotfiles/system/.config/calibre/history.plist
delete mode 100644 dotfiles/system/.config/calibre/icons-any.rcc
delete mode 100644 dotfiles/system/.config/calibre/icons-dark.rcc
delete mode 100644 dotfiles/system/.config/calibre/metadata-sources-cache.json
delete mode 100644 dotfiles/system/.config/calibre/metadata_sources/global.json
delete mode 100644 dotfiles/system/.config/calibre/mtp_devices.json
delete mode 100644 dotfiles/system/.config/calibre/plugins/Apple Books covers.zip
delete mode 100644 dotfiles/system/.config/calibre/plugins/Barnes & Noble.zip
delete mode 100644 dotfiles/system/.config/calibre/plugins/Clean Comments.zip
delete mode 100644 dotfiles/system/.config/calibre/plugins/Extract ISBN.zip
delete mode 100644 dotfiles/system/.config/calibre/plugins/Favourites Menu.json
delete mode 100644 dotfiles/system/.config/calibre/plugins/Favourites Menu.zip
delete mode 100644 dotfiles/system/.config/calibre/plugins/Find Duplicates.json
delete mode 100644 dotfiles/system/.config/calibre/plugins/Find Duplicates.zip
delete mode 100644 dotfiles/system/.config/calibre/plugins/KePub Metadata Reader.zip
delete mode 100644 dotfiles/system/.config/calibre/plugins/KePub Metadata Writer.zip
delete mode 100644 dotfiles/system/.config/calibre/plugins/Kindle hi-res covers.zip
delete mode 100644 dotfiles/system/.config/calibre/plugins/Kobo Metadata.zip
delete mode 100644 dotfiles/system/.config/calibre/plugins/Kobo Utilities.json
delete mode 100644 dotfiles/system/.config/calibre/plugins/Kobo Utilities.zip
delete mode 100644 dotfiles/system/.config/calibre/plugins/KoboTouchExtended.zip
delete mode 100644 dotfiles/system/.config/calibre/plugins/Open With.json
delete mode 100644 dotfiles/system/.config/calibre/plugins/Open With.zip
delete mode 100644 dotfiles/system/.config/calibre/plugins/Reading List.json
delete mode 100644 dotfiles/system/.config/calibre/plugins/Reading List.zip
delete mode 100644 dotfiles/system/.config/calibre/plugins/Search The Internet.json
delete mode 100644 dotfiles/system/.config/calibre/plugins/Wikidata.zip
delete mode 100644 dotfiles/system/.config/calibre/save_to_disk.py.json
delete mode 100644 dotfiles/system/.config/calibre/scheduler.xml
delete mode 100644 dotfiles/system/.config/calibre/server-config.txt
delete mode 100644 dotfiles/system/.config/calibre/server-custom-list-template.json
delete mode 100644 dotfiles/system/.config/calibre/server-search-the-net.json
delete mode 100644 dotfiles/system/.config/calibre/server-users.sqlite
delete mode 100644 dotfiles/system/.config/calibre/shortcuts/main.json
delete mode 100644 dotfiles/system/.config/calibre/smtp.py.json
delete mode 100644 dotfiles/system/.config/calibre/tag-map-rules.json
delete mode 100644 dotfiles/system/.config/calibre/viewer-webengine.json
delete mode 100644 dotfiles/system/.config/calibre/viewer.json
delete mode 100644 dotfiles/system/.config/calibre/viewer/annots/19f02e8b622152fd5d7c642d30ecac05080ddf3e9e288a22c4f49866ba57c8b2.json
delete mode 100644 dotfiles/system/.config/calibre/viewer/annots/33083ace2855943c7e4d7d188c47051f047f05e84d828fca5e5545396b94f14c.json
delete mode 100644 dotfiles/system/.config/calibre/viewer/annots/5856c3e5aa41dd1b47711fa2b70e5ba9a2f61369f97c7fcc415321753e7c8bea.json
delete mode 100644 dotfiles/system/.config/calibre/viewer/annots/5d4b018509f9383872d23f1c4a0652d20e908edc16409bc7697635a28f96478e.json
delete mode 100644 dotfiles/system/.config/calibre/viewer/annots/6fd06a181469267e9c09d240ef2d3cca061e54ce37143a9e142524f61028cdd9.json
delete mode 100644 dotfiles/system/.config/calibre/viewer/annots/90922c33b4cfd6cdf2f2f462bc5f6e6b0f18bdb829384144fdd13cc3b487deb1.json
delete mode 100644 dotfiles/system/.config/calibre/viewer/annots/ab0b0aa00cc90f53470da2761ea678a4ccacef1f5002917bda43970cd6096b19.json
delete mode 100644 dotfiles/system/.config/calibre/viewer/annots/c5a80ad08eb5ae859fefd73672b6a7cddc243254b55897adfdd5671fe7b2aacf.json
delete mode 100644 dotfiles/system/.config/conky/conky.conf
delete mode 100644 dotfiles/system/.config/dunst/dunstrc
delete mode 100644 dotfiles/system/.config/environment.d/envvars.conf
delete mode 100644 dotfiles/system/.config/feh/keys
delete mode 100644 dotfiles/system/.config/flameshot/flameshot.ini
delete mode 100644 dotfiles/system/.config/fontconfig/fonts.conf
delete mode 100644 dotfiles/system/.config/ghostty/config
delete mode 100644 dotfiles/system/.config/gtk-3.0/gtk.css
delete mode 100644 dotfiles/system/.config/gtk-3.0/settings.ini
delete mode 100644 dotfiles/system/.config/htop/htoprc
delete mode 100755 dotfiles/system/.config/lf/cleaner
delete mode 100755 dotfiles/system/.config/lf/draw_img
delete mode 100755 dotfiles/system/.config/lf/image
delete mode 100644 dotfiles/system/.config/lf/lfrc
delete mode 100755 dotfiles/system/.config/lf/preview
delete mode 100644 dotfiles/system/.config/mc/panels.ini
delete mode 100644 dotfiles/system/.config/mopidy/mopidy.conf
delete mode 100644 dotfiles/system/.config/mpd/mpd.conf
delete mode 100644 dotfiles/system/.config/mpd/musicpd.conf
delete mode 100644 dotfiles/system/.config/mpv/input.conf
delete mode 100644 dotfiles/system/.config/mpv/mpv.conf
delete mode 100644 dotfiles/system/.config/ncmpcpp/bindings
delete mode 100644 dotfiles/system/.config/ncmpcpp/config
delete mode 100644 dotfiles/system/.config/nitrogen/bg-saved.cfg
delete mode 100644 dotfiles/system/.config/picom.conf
delete mode 100644 dotfiles/system/.config/pychess/config
delete mode 100644 dotfiles/system/.config/pychess/engines.json
delete mode 100644 dotfiles/system/.config/pychess/pydock.xml
delete mode 100644 dotfiles/system/.config/qalculate/qalculate-gtk.cfg
delete mode 100644 dotfiles/system/.config/qt5ct/qt5ct.conf
delete mode 100644 dotfiles/system/.config/qt6ct/qt6ct.conf
delete mode 100644 dotfiles/system/.config/ranger/commands.py
delete mode 100644 dotfiles/system/.config/ranger/commands_full.py
delete mode 100644 dotfiles/system/.config/ranger/rc.conf
delete mode 100644 dotfiles/system/.config/ranger/rifle.conf
delete mode 100755 dotfiles/system/.config/ranger/scope.sh
delete mode 100644 dotfiles/system/.config/redshift.conf
delete mode 100644 dotfiles/system/.config/rofi/config.rasi
delete mode 100644 dotfiles/system/.config/rofi/themes/rounded-gray-dark.rasi
delete mode 100644 dotfiles/system/.config/sublime-merge/Local/License.sublime_license
delete mode 100644 dotfiles/system/.config/sxhkd/sxhkdrc
delete mode 100644 dotfiles/system/.config/systemd/user/emacs.service
delete mode 100644 dotfiles/system/.config/systemd/user/geoclue-agent.service
delete mode 100644 dotfiles/system/.config/systemd/user/xdg-desktop-portal-gtk.service.d/environment.conf
delete mode 100644 dotfiles/system/.config/tickrs/config.yml
delete mode 100644 dotfiles/system/.config/topgrade.toml
delete mode 100644 dotfiles/system/.config/touchpad-indicator/touchpad-indicator.conf
delete mode 120000 dotfiles/system/.config/transmission-daemon
delete mode 100644 dotfiles/system/.config/transmission/settings.json
delete mode 100644 dotfiles/system/.config/user-dirs.dirs
delete mode 100644 dotfiles/system/.config/user-dirs.locale
delete mode 100644 dotfiles/system/.config/youtube-dl/youtube-dl.conf
delete mode 100644 dotfiles/system/.config/zathura/zathurarc
delete mode 100644 dotfiles/system/.gitconfig
delete mode 100644 dotfiles/system/.gitignore
delete mode 100644 dotfiles/system/.gnupg/gpg-agent.conf
delete mode 100644 dotfiles/system/.gnupg/pinentry-dmenu.conf
delete mode 100644 dotfiles/system/.gtkrc-2.0
delete mode 100644 dotfiles/system/.hushlogin
delete mode 100644 dotfiles/system/.latexmkrc
delete mode 100755 dotfiles/system/.local/bin/AAXtoMP3
delete mode 100755 dotfiles/system/.local/bin/ai-assistants
delete mode 100755 dotfiles/system/.local/bin/any2flac
delete mode 100755 dotfiles/system/.local/bin/any2opus
delete mode 100755 dotfiles/system/.local/bin/build-emacs.sh
delete mode 100755 dotfiles/system/.local/bin/clobberall
delete mode 100644 dotfiles/system/.local/bin/cron/README.md
delete mode 100755 dotfiles/system/.local/bin/cron/checkup
delete mode 100755 dotfiles/system/.local/bin/cron/crontog
delete mode 100755 dotfiles/system/.local/bin/dab
delete mode 100755 dotfiles/system/.local/bin/dotfiles_pushall
delete mode 100755 dotfiles/system/.local/bin/ec
delete mode 100755 dotfiles/system/.local/bin/em
delete mode 100755 dotfiles/system/.local/bin/et
delete mode 100755 dotfiles/system/.local/bin/extractaudio
delete mode 100755 dotfiles/system/.local/bin/get-arch-iso.sh
delete mode 100755 dotfiles/system/.local/bin/gitconfig_defaults
delete mode 100755 dotfiles/system/.local/bin/ifinstalled
delete mode 100755 dotfiles/system/.local/bin/lfrun
delete mode 100755 dotfiles/system/.local/bin/lfub
delete mode 100755 dotfiles/system/.local/bin/linkhandler
delete mode 100755 dotfiles/system/.local/bin/lsbak
delete mode 100755 dotfiles/system/.local/bin/mkplaylist
delete mode 100755 dotfiles/system/.local/bin/mpd_play_yt_stream
delete mode 100755 dotfiles/system/.local/bin/msmtp-enqueue.sh
delete mode 100755 dotfiles/system/.local/bin/msmtp-listqueue.sh
delete mode 100755 dotfiles/system/.local/bin/msmtp-runqueue.sh
delete mode 100755 dotfiles/system/.local/bin/open-file-in-eww
delete mode 100755 dotfiles/system/.local/bin/opus2mp3
delete mode 100755 dotfiles/system/.local/bin/org-capture.sh
delete mode 100755 dotfiles/system/.local/bin/project
delete mode 100755 dotfiles/system/.local/bin/protonvpn
delete mode 100755 dotfiles/system/.local/bin/ps-mem
delete mode 100755 dotfiles/system/.local/bin/refresharchkeys
delete mode 100755 dotfiles/system/.local/bin/resetmimetypes
delete mode 100755 dotfiles/system/.local/bin/ssh-createkeys
delete mode 100755 dotfiles/system/.local/bin/steam
delete mode 100755 dotfiles/system/.local/bin/sudo-update-grub
delete mode 100755 dotfiles/system/.local/bin/sysupdate
delete mode 100755 dotfiles/system/.local/bin/timezone-change
delete mode 100755 dotfiles/system/.local/bin/timezone-set
delete mode 100755 dotfiles/system/.local/bin/torwrap
delete mode 100755 dotfiles/system/.local/bin/transadd
delete mode 100755 dotfiles/system/.local/bin/update-backup-repositories
delete mode 100755 dotfiles/system/.local/bin/updatemirrors
delete mode 100755 dotfiles/system/.local/bin/virtstart
delete mode 100755 dotfiles/system/.local/bin/warpinator-start
delete mode 100755 dotfiles/system/.local/bin/ytp
delete mode 100644 dotfiles/system/.local/share/applications/dwm.desktop
delete mode 100644 dotfiles/system/.local/share/applications/emacsclient-mail.desktop
delete mode 100644 dotfiles/system/.local/share/applications/file.desktop
delete mode 100644 dotfiles/system/.local/share/applications/img.desktop
delete mode 100644 dotfiles/system/.local/share/applications/lock-screen.desktop
delete mode 100644 dotfiles/system/.local/share/applications/logout.desktop
delete mode 100644 dotfiles/system/.local/share/applications/mail.desktop
delete mode 100644 dotfiles/system/.local/share/applications/mimeapps.list
delete mode 100644 dotfiles/system/.local/share/applications/org-protocol.desktop
delete mode 100644 dotfiles/system/.local/share/applications/pdf.desktop
delete mode 100644 dotfiles/system/.local/share/applications/reboot.desktop
delete mode 100644 dotfiles/system/.local/share/applications/shutdown.desktop
delete mode 100644 dotfiles/system/.local/share/applications/suspend.desktop
delete mode 100644 dotfiles/system/.local/share/applications/text.desktop
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/2a03.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/Adidas2-3.zip
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/Blac.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/Classic_70's_Marshall_Stack.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/Digital_Stereo_73.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/Expensive_HI_FI_Sony_2005.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/Future_Audio_1.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/Modern_Stereo_Amp_2.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/Modern_Style_Marshall_Stack.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/Nucleo_NLog_v102_.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/PioneerAmp.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/RAZORIX 50 % Uriel - 50% Kript.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/SONY3.WSZ
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/Sony MD.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/Spy Amp.zip
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/SpyAMP Pro Heaven.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/SpyAMP Pro Zeus.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/SpyAMP_professional_edition_mV1.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/SpyAmp-Pro-Heaven.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/Steel_Stereo.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/Technoia_ver001.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/base-2.91.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/deviantamp.zip
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/iWinamp_V1.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/nadamp.zip
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/s_Pioneer.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/satellite.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/sonympfx3lcdv111.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/spyamp.zip
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/spyamp_sepia.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/spyampy2k.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/spyampy2k3.wsz
delete mode 100644 dotfiles/system/.local/share/audacious/Skins/v2_technics_white_resting_by_johnnyg0.wsz
delete mode 100644 dotfiles/system/.local/share/emoji
delete mode 100644 dotfiles/system/.local/share/fonts/AppleColorEmoji.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-Bold.otf
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-Bold.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-Bold.woff
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-Bold.woff2
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-BoldItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-BoldItalic.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-BoldItalic.woff
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-BoldItalic.woff2
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-Italic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-Italic.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-Italic.woff
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-Italic.woff2
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-Regular.otf
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-Regular.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-Regular.woff
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMono-Regular.woff2
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMonoNerdFont-Bold.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMonoNerdFont-BoldItalic.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMonoNerdFont-Italic.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMonoNerdFont-Regular.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMonoVariable-Italic.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMonoVariable-Italic.woff
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMonoVariable-Italic.woff2
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMonoVariable-Regular.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMonoVariable-Regular.woff
delete mode 100644 dotfiles/system/.local/share/fonts/BerkeleyMonoVariable-Regular.woff2
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-Bold.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-BoldItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-DemiBold.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-DemiBoldItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-ExtraBold.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-ExtraBoldItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-ExtraLight.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-ExtraLightItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-Heavy.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-HeavyItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-Light.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-LightItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-Regular.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-RegularItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-Thin.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CartographCF-ThinItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CodeliaLigatures-Bold.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CodeliaLigatures-BoldItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CodeliaLigatures-Italic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/CodeliaLigatures-Regular.otf
delete mode 100644 dotfiles/system/.local/share/fonts/ComicCodeLigatures-Bold.otf
delete mode 100644 dotfiles/system/.local/share/fonts/ComicCodeLigatures-BoldItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/ComicCodeLigatures-Italic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/ComicCodeLigatures-Light.otf
delete mode 100644 dotfiles/system/.local/share/fonts/ComicCodeLigatures-LightItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/ComicCodeLigatures-Medium.otf
delete mode 100644 dotfiles/system/.local/share/fonts/ComicCodeLigatures-MediumItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/ComicCodeLigatures-Regular.otf
delete mode 100644 dotfiles/system/.local/share/fonts/ComicCodeLigatures-SBIta.otf
delete mode 100644 dotfiles/system/.local/share/fonts/ComicCodeLigatures-Semibold.otf
delete mode 100644 dotfiles/system/.local/share/fonts/ComicCodeLigatures-Thin.otf
delete mode 100644 dotfiles/system/.local/share/fonts/ComicCodeLigatures-ThinItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/ComicCodeLigatures-ULIta.otf
delete mode 100644 dotfiles/system/.local/share/fonts/ComicCodeLigatures-UltraLight.otf
delete mode 100644 dotfiles/system/.local/share/fonts/Courier 10 Pitch Regular.otf
delete mode 100644 dotfiles/system/.local/share/fonts/MERIFONT.TTF
delete mode 100644 dotfiles/system/.local/share/fonts/Merriweather-Black.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/Merriweather-BlackItalic.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/Merriweather-Bold.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/Merriweather-BoldItalic.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/Merriweather-Italic.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/Merriweather-Light.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/Merriweather-LightItalic.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/Merriweather-Regular.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/MonoLisa-Bold.otf
delete mode 100644 dotfiles/system/.local/share/fonts/MonoLisa-BoldItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/MonoLisa-Regular.otf
delete mode 100644 dotfiles/system/.local/share/fonts/MonoLisa-RegularItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/NovaletraSerifCF-Bold.otf
delete mode 100644 dotfiles/system/.local/share/fonts/NovaletraSerifCF-BoldItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/NovaletraSerifCF-DemiBold.otf
delete mode 100644 dotfiles/system/.local/share/fonts/NovaletraSerifCF-DemiBoldItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/NovaletraSerifCF-ExtBold.otf
delete mode 100644 dotfiles/system/.local/share/fonts/NovaletraSerifCF-ExtBoldItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/NovaletraSerifCF-Heavy.otf
delete mode 100644 dotfiles/system/.local/share/fonts/NovaletraSerifCF-HeavyItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/NovaletraSerifCF-Light.otf
delete mode 100644 dotfiles/system/.local/share/fonts/NovaletraSerifCF-LightItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/NovaletraSerifCF-Medium.otf
delete mode 100644 dotfiles/system/.local/share/fonts/NovaletraSerifCF-MediumItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/NovaletraSerifCF-Regular.otf
delete mode 100644 dotfiles/system/.local/share/fonts/NovaletraSerifCF-RegularItalic.otf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataProB_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataProB_liga_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataProI_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataProI_liga_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataProR_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataProR_liga_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataProZ_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataProZ_liga_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataPro_Mono_B_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataPro_Mono_B_liga_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataPro_Mono_I_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataPro_Mono_I_liga_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataPro_Mono_R_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataPro_Mono_R_liga_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataPro_Mono_Z_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/PragmataPro_Mono_Z_liga_09.ttf
delete mode 100644 dotfiles/system/.local/share/fonts/all-the-icons.ttf
delete mode 100644 dotfiles/system/.local/share/rhythmbox/playlists.xml
delete mode 100644 dotfiles/system/.local/share/rhythmbox/podcast-timestamp
delete mode 100644 dotfiles/system/.local/share/rhythmbox/rhythmdb.xml
delete mode 100644 dotfiles/system/.local/share/thequestionconcerningtechnology.txt
delete mode 100644 dotfiles/system/.mbsyncrc
delete mode 100644 dotfiles/system/.msmtprc
delete mode 100644 dotfiles/system/.profile
delete mode 100644 dotfiles/system/.profile.d/auto-tmux-session.sh
delete mode 100644 dotfiles/system/.profile.d/display.sh
delete mode 100644 dotfiles/system/.profile.d/framework.sh
delete mode 100644 dotfiles/system/.ssh/config
delete mode 100644 dotfiles/system/.ssh/decrypt_ssh
delete mode 100644 dotfiles/system/.ssh/set_perms
delete mode 100644 dotfiles/system/.ssh/ssh.tar.gz.gpg
delete mode 100644 dotfiles/system/.stardict/dic/dictd_www.dict.org_web1913.dict.dz
delete mode 100644 dotfiles/system/.stardict/dic/dictd_www.dict.org_web1913.idx
delete mode 100644 dotfiles/system/.stardict/dic/dictd_www.dict.org_web1913.idx.oft
delete mode 100644 dotfiles/system/.stardict/dic/dictd_www.dict.org_web1913.ifo
delete mode 100644 dotfiles/system/.stow-global-ignore
delete mode 100644 dotfiles/system/.ticker.yaml
delete mode 100644 dotfiles/system/.tmux.conf
delete mode 100644 dotfiles/system/.vale.ini
delete mode 100644 dotfiles/system/.wegorc
delete mode 100755 dotfiles/system/.xinitrc
delete mode 100644 dotfiles/system/.xscreensaver
delete mode 100644 dotfiles/system/.zsh/README.md
delete mode 100644 dotfiles/system/.zsh/fzf-tab.zsh
delete mode 100644 dotfiles/system/.zsh/lib/-ftb-colorize
delete mode 100755 dotfiles/system/.zsh/lib/-ftb-fzf
delete mode 100644 dotfiles/system/.zsh/lib/-ftb-generate-complist
delete mode 100644 dotfiles/system/.zsh/lib/-ftb-generate-header
delete mode 100644 dotfiles/system/.zsh/lib/-ftb-generate-query
delete mode 100644 dotfiles/system/.zsh/lib/ftb-switch-group
delete mode 100755 dotfiles/system/.zsh/lib/ftb-tmux-popup
delete mode 100644 dotfiles/system/.zsh/lib/zsh-ls-colors/LICENSE
delete mode 100644 dotfiles/system/.zsh/lib/zsh-ls-colors/README.md
delete mode 100755 dotfiles/system/.zsh/lib/zsh-ls-colors/demo
delete mode 100644 dotfiles/system/.zsh/lib/zsh-ls-colors/ls-colors.zsh
delete mode 100644 dotfiles/system/.zsh/modules/.cvsignore
delete mode 100644 dotfiles/system/.zsh/modules/.distfiles
delete mode 100644 dotfiles/system/.zsh/modules/.editorconfig
delete mode 100644 dotfiles/system/.zsh/modules/.gitignore
delete mode 100755 dotfiles/system/.zsh/modules/.preconfig
delete mode 100644 dotfiles/system/.zsh/modules/Config/.cvsignore
delete mode 100644 dotfiles/system/.zsh/modules/Config/.distfiles
delete mode 100644 dotfiles/system/.zsh/modules/Config/aczshoot.m4
delete mode 100644 dotfiles/system/.zsh/modules/Config/clean.mk
delete mode 100644 dotfiles/system/.zsh/modules/Config/config.mk
delete mode 100644 dotfiles/system/.zsh/modules/Config/defs.mk.in
delete mode 100755 dotfiles/system/.zsh/modules/Config/installfns.sh
delete mode 100755 dotfiles/system/.zsh/modules/Config/uninstallfns.sh
delete mode 100644 dotfiles/system/.zsh/modules/Config/version.mk
delete mode 100644 dotfiles/system/.zsh/modules/LICENCE
delete mode 100644 dotfiles/system/.zsh/modules/Makefile.in
delete mode 100644 dotfiles/system/.zsh/modules/RECOMPILE_REQUEST
delete mode 100644 dotfiles/system/.zsh/modules/Src/.cvsignore
delete mode 100644 dotfiles/system/.zsh/modules/Src/.distfiles
delete mode 100644 dotfiles/system/.zsh/modules/Src/.exrc
delete mode 100644 dotfiles/system/.zsh/modules/Src/.indent.pro
delete mode 100644 dotfiles/system/.zsh/modules/Src/Makefile.in
delete mode 100644 dotfiles/system/.zsh/modules/Src/Makemod.in.in
delete mode 100644 dotfiles/system/.zsh/modules/Src/aloxaf/.cvsignore
delete mode 100644 dotfiles/system/.zsh/modules/Src/aloxaf/.distfiles
delete mode 100644 dotfiles/system/.zsh/modules/Src/aloxaf/.exrc
delete mode 100644 dotfiles/system/.zsh/modules/Src/aloxaf/.gitignore
delete mode 100644 dotfiles/system/.zsh/modules/Src/aloxaf/fzftab.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/aloxaf/fzftab.mdd
delete mode 100644 dotfiles/system/.zsh/modules/Src/builtin.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/compat.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/exec.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/glob.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/hashtable.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/hashtable.h
delete mode 100644 dotfiles/system/.zsh/modules/Src/init.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/input.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/jobs.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/lex.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/loop.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/makepro.awk
delete mode 100644 dotfiles/system/.zsh/modules/Src/mem.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/mkbltnmlst.sh
delete mode 100644 dotfiles/system/.zsh/modules/Src/mkmakemod.sh
delete mode 100644 dotfiles/system/.zsh/modules/Src/module.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/options.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/params.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/parse.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/pattern.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/prompt.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/prototypes.h
delete mode 100644 dotfiles/system/.zsh/modules/Src/signals.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/signals.h
delete mode 100644 dotfiles/system/.zsh/modules/Src/signames1.awk
delete mode 100644 dotfiles/system/.zsh/modules/Src/signames2.awk
delete mode 100644 dotfiles/system/.zsh/modules/Src/string.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/utils.c
delete mode 100644 dotfiles/system/.zsh/modules/Src/wcwidth9.h
delete mode 100644 dotfiles/system/.zsh/modules/Src/zsh.h
delete mode 100644 dotfiles/system/.zsh/modules/Src/zsh.mdd
delete mode 100644 dotfiles/system/.zsh/modules/Src/zsh.rc
delete mode 100644 dotfiles/system/.zsh/modules/Src/zsh_system.h
delete mode 100644 dotfiles/system/.zsh/modules/Src/ztype.h
delete mode 100644 dotfiles/system/.zsh/modules/Test/.cvsignore
delete mode 100644 dotfiles/system/.zsh/modules/Test/.distfiles
delete mode 100644 dotfiles/system/.zsh/modules/Test/A01grammar.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/A02alias.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/A03quoting.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/A04redirect.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/A05execution.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/A06assign.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/A07control.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/B01cd.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/B02typeset.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/B03print.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/B04read.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/B05eval.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/B06fc.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/B07emulate.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/B08shift.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/B09hash.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/C01arith.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/C02cond.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/C03traps.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/C04funcdef.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/C05debug.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/D01prompt.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/D02glob.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/D03procsubst.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/D04parameter.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/D05array.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/D06subscript.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/D07multibyte.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/D08cmdsubst.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/D09brace.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/E01options.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/E02xtrace.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/Makefile.in
delete mode 100644 dotfiles/system/.zsh/modules/Test/README
delete mode 100644 dotfiles/system/.zsh/modules/Test/V02zregexparse.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/V03mathfunc.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/V04features.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/V05styles.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/V07pcre.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/V08zpty.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/V09datetime.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/V10private.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/W01history.ztst
delete mode 100644 dotfiles/system/.zsh/modules/Test/comptest
delete mode 100644 dotfiles/system/.zsh/modules/Test/runtests.zsh
delete mode 100755 dotfiles/system/.zsh/modules/Test/ztst.zsh
delete mode 100644 dotfiles/system/.zsh/modules/aclocal.m4
delete mode 100644 dotfiles/system/.zsh/modules/aczsh.m4
delete mode 100755 dotfiles/system/.zsh/modules/config.guess
delete mode 100644 dotfiles/system/.zsh/modules/config.h.in
delete mode 100755 dotfiles/system/.zsh/modules/config.sub
delete mode 100755 dotfiles/system/.zsh/modules/configure
delete mode 100644 dotfiles/system/.zsh/modules/configure.ac
delete mode 100755 dotfiles/system/.zsh/modules/copy_from_zsh_src.zsh
delete mode 100755 dotfiles/system/.zsh/modules/install-sh
delete mode 100755 dotfiles/system/.zsh/modules/mkinstalldirs
delete mode 100644 dotfiles/system/.zsh/modules/patch_cfgac.diff
delete mode 100644 dotfiles/system/.zsh/modules/stamp-h.in
delete mode 100644 dotfiles/system/.zshrc
delete mode 100644 dotfiles/system/.zshrc.d/aliases.sh
delete mode 100644 dotfiles/system/.zshrc.d/arch-downgrade.sh
delete mode 100644 dotfiles/system/.zshrc.d/emacs.sh
delete mode 100644 dotfiles/system/.zshrc.d/fzf.sh
delete mode 100644 dotfiles/system/.zshrc.d/git.sh
delete mode 100644 dotfiles/system/.zshrc.d/media.sh
delete mode 100644 dotfiles/system/.zshrc.d/utilities.sh
delete mode 100644 dotfiles/system/documents/bazzite-fractal-save-desktop.sd.tar.gz
delete mode 100644 dotfiles/system/documents/bazzite-fractal.sd.tar.gz
delete mode 100644 dotfiles/system/music/60s Sounds.m3u
delete mode 100644 dotfiles/system/music/90s Sounds.m3u
delete mode 100644 dotfiles/system/music/Ambient Sleeping Pill.m3u
delete mode 100644 dotfiles/system/music/BAGeL Radio.m3u
delete mode 100644 dotfiles/system/music/BBC World Service.m3u
delete mode 100644 dotfiles/system/music/Baroque Sonatas.m3u
delete mode 100644 dotfiles/system/music/Black Flamingos - Space Bar.m4a
delete mode 100644 dotfiles/system/music/Blues Radio.m3u
delete mode 100644 dotfiles/system/music/Dark Ambient.m3u
delete mode 100644 dotfiles/system/music/Flux FM Radio.m3u
delete mode 100644 dotfiles/system/music/Jazz Radio Happy Hour.m3u
delete mode 100644 dotfiles/system/music/Jazz Radio Latin Jazz.m3u
delete mode 100644 dotfiles/system/music/Jazz Radio New Orleans.m3u
delete mode 100644 dotfiles/system/music/Jazz Radio Only Women.m3u
delete mode 100644 dotfiles/system/music/Malvern Radio International Classical.m3u
delete mode 100644 dotfiles/system/music/NPR 24 Hour Radio.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Acoustic Blues.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Breakbeat.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Classical Baroque.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Classical Cello.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Classical Impressionism.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Classical Lute.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Classical Medieval.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Classical Piano.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Classical Renaissance.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Classical Sonata.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Classical Strings.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Classical Violin.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Delta Blues.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Downtempo.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Dubstep.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Gregorian Chants.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Hardcore Punk.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Jazz Bebop.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Jazz Rap.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Old School Hip-Hop.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Oldies.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Reggae Roots.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Reggae.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Street Punk.m3u
delete mode 100644 dotfiles/system/music/Radio Caprice Trip Hop.m3u
delete mode 100644 dotfiles/system/music/Radio Swiss Classic French.m3u
delete mode 100644 dotfiles/system/music/Radio Swiss Classic German.m3u
delete mode 100644 dotfiles/system/music/Radio Swiss Classic Italian.m3u
delete mode 100644 dotfiles/system/music/SomaFM Beat Blender.m3u
delete mode 100644 dotfiles/system/music/SomaFM Black Rock FM.m3u
delete mode 100644 dotfiles/system/music/SomaFM Boot Liquor.m3u
delete mode 100644 dotfiles/system/music/SomaFM Cliqhop IDM.m3u
delete mode 100644 dotfiles/system/music/SomaFM Dark Zone.m3u
delete mode 100644 dotfiles/system/music/SomaFM Deep Space One.m3u
delete mode 100644 dotfiles/system/music/SomaFM Digitalis.m3u
delete mode 100644 dotfiles/system/music/SomaFM Drone Zone.m3u
delete mode 100644 dotfiles/system/music/SomaFM Dub Step Beyond.m3u
delete mode 100644 dotfiles/system/music/SomaFM Fluid.m3u
delete mode 100644 dotfiles/system/music/SomaFM Folk Forward.m3u
delete mode 100644 dotfiles/system/music/SomaFM Groove Salad Classic.m3u
delete mode 100644 dotfiles/system/music/SomaFM Groove Salad.m3u
delete mode 100644 dotfiles/system/music/SomaFM Heavyweight Reggae.m3u
delete mode 100644 dotfiles/system/music/SomaFM Illinois Street Lounge.m3u
delete mode 100644 dotfiles/system/music/SomaFM Indie Pop Rocks.m3u
delete mode 100644 dotfiles/system/music/SomaFM PopTron.m3u
delete mode 100644 dotfiles/system/music/SomaFM Secret Agent.m3u
delete mode 100644 dotfiles/system/music/SomaFM Sonic Universe.m3u
delete mode 100644 dotfiles/system/music/SomaFM Space Station Soma.m3u
delete mode 100644 dotfiles/system/music/SomaFM Suburbs of Goa.m3u
delete mode 100644 dotfiles/system/music/SomaFM Synphaera.m3u
delete mode 100644 dotfiles/system/music/SomaFM The Trip.m3u
delete mode 100644 dotfiles/system/music/SomaFM Underground 80s.m3u
delete mode 100644 dotfiles/system/music/SomaFM Vaporwaves.m3u
delete mode 100644 dotfiles/system/music/SomaFM n5MD Radio.m3u
delete mode 100644 dotfiles/system/music/Sunday Baroque.m3u
delete mode 100644 dotfiles/system/music/Surf Rock.m3u
delete mode 100644 dotfiles/system/music/Venice Classic Radio.m3u
delete mode 100644 dotfiles/system/music/WWNO.m3u
delete mode 100644 dotfiles/system/music/WWOZ New Orleans.m3u
delete mode 100644 dotfiles/system/pictures/cjennings.jpg
delete mode 100644 dotfiles/system/pictures/devilman.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/a-streetcar-named-despair.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/atari-canyon.png
delete mode 100644 dotfiles/system/pictures/wallpaper/balance.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/beatles-st-pancras-old-church-1968.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/big-j-mcneely-los-angeles-1951.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/blues-brothers-and-hooker.png
delete mode 100644 dotfiles/system/pictures/wallpaper/bondi-beach-new-south-wales-australia.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/capetown-south-africa.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/damrak-amsterdam-netherlands.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/dark-lion.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/deadline.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/dodge-this.png
delete mode 100644 dotfiles/system/pictures/wallpaper/doe.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/dolomites-italy.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/duckdive-teahupoo-french-polynesia.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/early-morning-commute.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/eltz-castle-wiershem-germany.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/framed.png
delete mode 100644 dotfiles/system/pictures/wallpaper/fu-some-field-near-you.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/greenwich-village-nyc.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/hawker-sea-fury.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/highway-59-kansas-us.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/ice-checkpoint-2030-a-d.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/imminent.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/interior-space.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/ischia-from-castello-aragonese.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/jack-rabbit-slims.jpeg
delete mode 100644 dotfiles/system/pictures/wallpaper/jackson-lake-lodge-wyoming-us.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/joker.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/khan-al-khalili-egypt.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/knockturn-alley-london-uk.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/knowledge-is-power.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/last-jedis-neighbor-faroe-islands-denmark.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/loch-muick-scotland-uk.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/madison.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/maps.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/monday-morning-in-yosemite.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/my-summer-home-denmark.png
delete mode 100644 dotfiles/system/pictures/wallpaper/napa-valley-california-us.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/nasa-earth-day.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/nasa-earth-night.jpg
delete mode 100644 "dotfiles/system/pictures/wallpaper/nazar\303\251-portugal.jpg"
delete mode 100644 dotfiles/system/pictures/wallpaper/no-exit.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/nola-post-hurricane-ida.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/notre-dame-paris-france.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/oak-plantation.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/paddling-out.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/painswick-from-inside.png
delete mode 100644 dotfiles/system/pictures/wallpaper/paris-in-royal-colors.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/petit-piton-st-lucia.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/reading-room-new-york-public-library-new-york-us.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/remote.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/sacre-coeur-paris-france.jpg
delete mode 100644 "dotfiles/system/pictures/wallpaper/saint-s\303\251verin-france.jpg"
delete mode 100644 dotfiles/system/pictures/wallpaper/save-yourself.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/saves-more-than-text.png
delete mode 100644 dotfiles/system/pictures/wallpaper/saville-dam-barkhamsted-connecticut-us.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/sexy-curvy-beautiful-bottom.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/stalenhag-cartesian-skepticism.png
delete mode 100644 dotfiles/system/pictures/wallpaper/that-one-up-there.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/the-arc.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/the-nomad-lounge-nyc.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/tlulum-mexico.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/trinity-college-library-dublin-ireland.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/trondheim-norway.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/twenty-thousand-years.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/valldemossa-spain.jpg
delete mode 100644 dotfiles/system/pictures/wallpaper/zendopeak.jpg
(limited to 'dotfiles/system')
diff --git a/dotfiles/system/.Xmodmap b/dotfiles/system/.Xmodmap
deleted file mode 100644
index 981e9e7..0000000
--- a/dotfiles/system/.Xmodmap
+++ /dev/null
@@ -1,6 +0,0 @@
-!! keycode 119 = Delete
-clear lock
-clear control
-keycode 66 = Control_L
-add control = Control_L Control_R
-
diff --git a/dotfiles/system/.Xresources b/dotfiles/system/.Xresources
deleted file mode 100644
index d149a72..0000000
--- a/dotfiles/system/.Xresources
+++ /dev/null
@@ -1,105 +0,0 @@
-!! X Resources - Dupre theme
-!! Warm, earthy colors from dupre-theme.el
-!! For X11 applications (st, xterm, etc.) and Emacs
-
-!! X Font Settings
-Xft.dpi: 109
-Xcursor.size: 32
-Xcursor.theme: Vimix-white-cursors
-Xft.autohint: 0
-Xft.lcdfilter: lcddefault
-Xft.hintstyle: hintfull
-Xft.hinting: 1
-Xft.antialias: 1
-Xft.rgba: rgb
-
-!! Emacs
-Emacs*toolBar: 0
-
-!! ============================================================================
-!! Dupre Theme Colors
-!! ============================================================================
-
-#define dupre_fg #f0fef0
-#define dupre_bg #151311
-#define dupre_black #252321
-#define dupre_red #d47c59
-#define dupre_green #a4ac64
-#define dupre_yellow #d7af5f
-#define dupre_blue #67809c
-#define dupre_magenta #b294bb
-#define dupre_cyan #8a9496
-#define dupre_white #d0cbc0
-#define dupre_br_black #474544
-#define dupre_br_red #edb08f
-#define dupre_br_green #ccc768
-#define dupre_br_yellow #ffd75f
-#define dupre_br_blue #b2c3cc
-#define dupre_br_magenta #c397d8
-#define dupre_br_cyan #acb0b3
-#define dupre_br_white #f0fef0
-
-!! Active theme aliases
-#define theme_fg dupre_fg
-#define theme_bg dupre_bg
-#define theme_black dupre_black
-#define theme_red dupre_red
-#define theme_green dupre_green
-#define theme_yellow dupre_yellow
-#define theme_blue dupre_blue
-#define theme_magenta dupre_magenta
-#define theme_cyan dupre_cyan
-#define theme_white dupre_white
-#define theme_br_black dupre_br_black
-#define theme_br_red dupre_br_red
-#define theme_br_green dupre_br_green
-#define theme_br_yellow dupre_br_yellow
-#define theme_br_blue dupre_br_blue
-#define theme_br_magenta dupre_br_magenta
-#define theme_br_cyan dupre_br_cyan
-#define theme_br_white dupre_br_white
-
-!! ============================================================================
-
-!! ST (suckless terminal) settings
-st.font: BerkeleyMono Nerd Font:size=12
-st.background: theme_bg
-st.foreground: theme_fg
-st.color0: theme_black
-st.color1: theme_red
-st.color2: theme_green
-st.color3: theme_yellow
-st.color4: theme_blue
-st.color5: theme_magenta
-st.color6: theme_cyan
-st.color7: theme_white
-st.color8: theme_br_black
-st.color9: theme_br_red
-st.color10: theme_br_green
-st.color11: theme_br_yellow
-st.color12: theme_br_blue
-st.color13: theme_br_magenta
-st.color14: theme_br_cyan
-st.color15: theme_br_white
-
-!! XTerm settings
-XTerm*faceName: BerkeleyMono Nerd Font:size=12
-XTerm*selectToClipboard: true
-XTerm*background: theme_bg
-XTerm*foreground: theme_fg
-XTerm*color0: theme_black
-XTerm*color1: theme_red
-XTerm*color2: theme_green
-XTerm*color3: theme_yellow
-XTerm*color4: theme_blue
-XTerm*color5: theme_magenta
-XTerm*color6: theme_cyan
-XTerm*color7: theme_white
-XTerm*color8: theme_br_black
-XTerm*color9: theme_br_red
-XTerm*color10: theme_br_green
-XTerm*color11: theme_br_yellow
-XTerm*color12: theme_br_blue
-XTerm*color13: theme_br_magenta
-XTerm*color14: theme_br_cyan
-XTerm*color15: theme_br_white
diff --git a/dotfiles/system/.authcode b/dotfiles/system/.authcode
deleted file mode 100644
index d67b6ee..0000000
--- a/dotfiles/system/.authcode
+++ /dev/null
@@ -1 +0,0 @@
-be251501
diff --git a/dotfiles/system/.authinfo.gpg b/dotfiles/system/.authinfo.gpg
deleted file mode 100644
index fa213c0..0000000
--- a/dotfiles/system/.authinfo.gpg
+++ /dev/null
@@ -1,12 +0,0 @@
-machine cjennings.net login root port su password cmjDase1ngoat13
-machine localhost port sudo login root password cmjdase1n
-machine imap.gmail.com login craigmartinjennings@gmail.com port 993 password etnkalyscubewbfp
-machine smtp.gmail.com login craigmartinjennings@gmail.com port 587 password sryskmsxxuhlgcdy
-machine mail.cjennings.net user c@cjennings.net password cmjDase1ngoat13
-machine api.openai.com login apikey password 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
-machine irc.libera.chat login craigjennings password cmjdase1n
-machine api.github.com login cjennings^forge password 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
-machine api.anthropic.com login apikey password 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
-machine api.anthropic.com login personal password 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
-machine org-gcal login 491339091045-sjje1r54s22vn2ugh45khndjafp89vto.apps.googleusercontent.com password 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
-machine api.assemblyai.com login api password bc4dbd87f9214cd8ac82c5708d7c4e53
\ No newline at end of file
diff --git a/dotfiles/system/.bash_logout b/dotfiles/system/.bash_logout
deleted file mode 100644
index 1e36d02..0000000
--- a/dotfiles/system/.bash_logout
+++ /dev/null
@@ -1,6 +0,0 @@
-# ~/.bash_logout: executed by bash(1) when login shell exits.
-
-# clear the screen to increase privacy when leaving the console
-if [ "$SHLVL" = 1 ]; then
- [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
-fi
diff --git a/dotfiles/system/.bash_profile b/dotfiles/system/.bash_profile
deleted file mode 100644
index b910a02..0000000
--- a/dotfiles/system/.bash_profile
+++ /dev/null
@@ -1,11 +0,0 @@
-# .bash_profile
-# Craig Jennings
-#
-# Sourced by bash login shells. Sources .profile for env vars
-# and .bashrc for interactive settings.
-
-# Environment variables
-[ -f "$HOME/.profile" ] && . "$HOME/.profile"
-
-# Interactive shell settings (aliases, functions, prompt, etc.)
-[ -f "$HOME/.bashrc" ] && . "$HOME/.bashrc"
diff --git a/dotfiles/system/.bashrc b/dotfiles/system/.bashrc
deleted file mode 100644
index b2177d9..0000000
--- a/dotfiles/system/.bashrc
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/bin/bash
-# .bashrc
-# Craig Jennings
-#
-# Bash-specific interactive shell settings.
-# Aliases, functions, prompt, completions, shell options.
-
-# If not running interactively, don't do anything
-case $- in
- *i*) ;;
- *) return;;
-esac
-
-# =============================================================================
-# Environment Variables (from .profile)
-# =============================================================================
-# Source .profile for env vars (needed for non-login interactive shells)
-[ -f "$HOME/.profile" ] && . "$HOME/.profile"
-
-# =============================================================================
-# Shell Options
-# =============================================================================
-shopt -s histappend # append to history file, don't overwrite
-shopt -s checkwinsize # update LINES and COLUMNS after each command
-shopt -s autocd # cd to directory by typing its name
-shopt -s cdspell # correct minor spelling errors in cd
-shopt -s dirspell # correct spelling errors during tab-completion
-
-# =============================================================================
-# History
-# =============================================================================
-HISTCONTROL=ignoreboth # ignore duplicates and lines starting with space
-HISTSIZE=100000
-HISTFILESIZE=10000000
-HISTIGNORE="ls:ll:cd:pwd:bg:fg:history:exit"
-PROMPT_COMMAND="history -a; history -n" # append and reload after each command
-
-# =============================================================================
-# Prompt
-# =============================================================================
-PS1='[\d, \t] \u@\H:\w \n$ '
-
-# =============================================================================
-# Completions
-# =============================================================================
-if ! shopt -oq posix; then
- if [ -f /usr/share/bash-completion/bash_completion ]; then
- . /usr/share/bash-completion/bash_completion
- elif [ -f /etc/bash_completion ]; then
- . /etc/bash_completion
- fi
-fi
-
-# =============================================================================
-# Source modular bash configs from .bashrc.d/
-# =============================================================================
-if [ -d "$HOME/.bashrc.d" ]; then
- for file in "$HOME/.bashrc.d"/*.sh; do
- [ -r "$file" ] && . "$file"
- done
- unset file
-fi
-
-# =============================================================================
-# Tool-specific initialization
-# =============================================================================
-# FZF
-[ -f "$HOME/.fzf.bash" ] && . "$HOME/.fzf.bash"
-
-# Deno
-[ -f "$HOME/.deno/env" ] && . "$HOME/.deno/env"
-[ -f "$HOME/.local/share/bash-completion/completions/deno.bash" ] && \
- . "$HOME/.local/share/bash-completion/completions/deno.bash"
-
-# Zoxide (smart cd)
-command -v zoxide >/dev/null 2>&1 && eval "$(zoxide init bash)"
diff --git a/dotfiles/system/.bashrc.d/aliases.sh b/dotfiles/system/.bashrc.d/aliases.sh
deleted file mode 100644
index 28c0f3f..0000000
--- a/dotfiles/system/.bashrc.d/aliases.sh
+++ /dev/null
@@ -1,91 +0,0 @@
-# aliases.sh
-# Craig Jennings
-# Shell aliases - works in both bash and zsh
-
-# =============================================================================
-# Directory Navigation
-# =============================================================================
-alias cdot="cd ~/code/archsetup/dotfiles"
-alias cdpf="cd ~/projects/finances/"
-alias cdpj="cd ~/projects/jr-estate/"
-alias cdpd="cd ~/projects/documents/"
-
-# =============================================================================
-# File Listing (exa)
-# =============================================================================
-alias ls="exa --group-directories-first"
-alias l="exa -lhF --group-directories-first"
-alias ll="exa -lhAF --group-directories-first"
-alias lt="exa -lthAF --group-directories-first"
-
-# =============================================================================
-# File Operations
-# =============================================================================
-alias mkd="mkdir -pv"
-alias open="xdg-open"
-alias linkdel="find . -type l ! -exec test -d {} \; -delete"
-alias linkfind="find . -type l ! -exec test -d {} \; -print"
-
-# =============================================================================
-# System Administration
-# =============================================================================
-alias df='dfc -p /dev/'
-alias ducks='du -cksh * | sort -rh | head -n11'
-alias ntop="sudo bandwhich"
-alias ptop="sudo powertop"
-alias running_services='systemctl list-units --type=service --state=running'
-alias ssn="sudo shutdown now"
-alias boot2bios="sudo systemctl reboot --firmware-setup"
-alias backup='sudo rsyncshot backup 1000'
-alias sysinfo='sudo inxi -v 8 -a -xxxA -xxxB -xxxC -xxxD -xxxG -xxxI -xxxm -xxxN -xxxR -xxxS -xxx --usb -d -I -pl -n -s --slots'
-alias timeshift='sudo timeshift-gtk'
-alias sysupgrade="topgrade"
-
-# =============================================================================
-# Network
-# =============================================================================
-alias myip='curl -4 https://chroot-me.in/ip/ 2>/dev/null || w3m -4 -dump https://chroot-me.in/ip'
-alias whereami="curl ipinfo.io"
-alias speedtest="speedtest-go"
-
-# =============================================================================
-# Applications
-# =============================================================================
-alias vim="nvim"
-alias et="emacs -nw"
-alias weather="wego"
-alias crm="tickrs -s CRM"
-alias handbrake="ghb"
-alias smerge="/usr/bin/smerge"
-alias stext="/opt/sublime_text/sublime_text"
-alias steam="flatpak run com.valvesoftware.Steam"
-alias xterm="xterm -ti 340"
-
-# =============================================================================
-# Stow (dotfiles management)
-# =============================================================================
-alias stow="stow --target=/home/cjennings"
-
-# =============================================================================
-# Ranger (file manager)
-# =============================================================================
-alias cdr='. ranger'
-alias r='. ranger'
-
-# =============================================================================
-# Programming
-# =============================================================================
-alias cc="gcc -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wconversion -Wextra -std=c2x -pedantic"
-alias gdbx="gdb --batch --ex r --ex bt --ex q --args"
-
-# =============================================================================
-# Claude Code
-# =============================================================================
-alias hey='claude "Read ./docs/protocols.org and ./docs/NOTES.org, follow their instructions, then run session startup workflow."'
-
-# =============================================================================
-# Phenomenology RAG (ollama/deepseek)
-# =============================================================================
-phenom() {
- aichat --rag phenom -m ollama:deepseek-r1:70b "$@"
-}
diff --git a/dotfiles/system/.bashrc.d/emacs.sh b/dotfiles/system/.bashrc.d/emacs.sh
deleted file mode 100644
index 0a8444b..0000000
--- a/dotfiles/system/.bashrc.d/emacs.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-# emacs.sh
-# Craig Jennings
-# Emacs-specific settings and functions
-
-# GTK/Emacs accessibility bug workaround
-# https://unix.stackexchange.com/questions/230238/
-export NO_AT_BRIDGE=1
-
-# Wake emacs from elisp freeze
-alias emacswake='for i in $(seq 1 500); do killall -s USR2 emacs; done'
-
-# Vterm shell integration
-# Allows shell to send information to vterm via escape sequences
-vterm_printf() {
- if [ -n "$TMUX" ] && { [ "${TERM%%-*}" = "tmux" ] || [ "${TERM%%-*}" = "screen" ]; }; then
- # Tell tmux to pass the escape sequences through
- printf "\ePtmux;\e\e]%s\007\e\\" "$1"
- elif [ "${TERM%%-*}" = "screen" ]; then
- # GNU screen
- printf "\eP\e]%s\007\e\\" "$1"
- else
- printf "\e]%s\e\\" "$1"
- fi
-}
diff --git a/dotfiles/system/.bashrc.d/fzf.sh b/dotfiles/system/.bashrc.d/fzf.sh
deleted file mode 100644
index 9a5a9bd..0000000
--- a/dotfiles/system/.bashrc.d/fzf.sh
+++ /dev/null
@@ -1,122 +0,0 @@
-# fzf.sh
-# Craig Jennings
-# FZF settings and utility functions
-
-# =============================================================================
-# Settings
-# =============================================================================
-export FZF_DEFAULT_OPTS='--height=70%'
-export FZF_DEFAULT_COMMAND='rg --files --no-ignore-vcs --hidden'
-export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
-
-# Directory paths for convenience functions
-IF_GAMES_DIR="$HOME/sync/org/text.games"
-BOOKS_DIR="$HOME/sync/books"
-
-# =============================================================================
-# Navigation
-# =============================================================================
-
-# cdff - change directory to where a file resides
-cdff() {
- file=$(fzf +m -q "$1")
- dir=$(dirname "$file")
- cd "$dir" || return 1
-}
-
-# cdd - cd to directory with fzf
-cdd() {
- destdir=$(find "${1:-.}" -path '*/\.*' -prune \
- -o -type d -print 2>/dev/null | fzf +m) &&
- cd "$destdir"
-}
-
-# =============================================================================
-# System Admin
-# =============================================================================
-
-# Kill process with fzf
-kp() {
- pid=$(ps -ef | sed 1d | eval "fzf ${FZF_DEFAULT_OPTS} -m --header='[kill:process]'" | awk '{print $2}')
- if [ -n "$pid" ]; then
- echo "$pid" | xargs kill -"${1:-9}"
- kp
- fi
-}
-
-# Install packages with fzf preview
-yinstall() {
- yay -Slq | fzf --multi --preview 'yay -Si {1}' | xargs -ro yay -S --noconfirm
-}
-
-yinstall-skipverify() {
- yay -Slq | fzf --multi --preview 'yay -Si {1}' | xargs -ro yay -S --noconfirm --mflags --skipinteg
-}
-
-# Remove packages with fzf preview
-yrm() {
- yay -Qq | fzf --multi --preview 'yay -Qi {1}' | xargs -ro yay -Rns
-}
-
-# Find in file with fzf
-fif() {
- if [ "$#" -eq 0 ]; then
- echo "Need a string to search for!"
- return 1
- fi
- rg --files-with-matches --no-messages "$1" | \
- fzf --preview "highlight -O ansi -l {} 2>/dev/null | \
- rg --colors 'match:bg:yellow' --ignore-case --pretty --context 10 '$1' || \
- rg --ignore-case --pretty --context 10 '$1' {}"
-}
-
-# =============================================================================
-# Convenience
-# =============================================================================
-
-# Find and read epub book in terminal
-bk() {
- bkfile=$(find "$BOOKS_DIR" -iname "*.epub" -print | fzf)
- if [ -n "$bkfile" ]; then
- epr "$bkfile"
- fi
-}
-
-# Find and play interactive fiction game
-tg() {
- gamefile=$(find "$IF_GAMES_DIR" -type f \( -iname "*.z[1-8]" -o -iname "*.zblorb" -o -iname "*.blorb" \) -print | fzf)
- if [ -n "$gamefile" ]; then
- frotz "$gamefile"
- fi
-}
-
-# =============================================================================
-# WireGuard
-# =============================================================================
-
-wgup() {
- # Shutdown existing connections first
- output=$(sudo wg 2>/dev/null)
- if [ -n "$output" ]; then
- for iface in $(sudo wg show interfaces); do
- sudo wg-quick down "${iface}"
- done
- fi
- # Select and start new connection
- wgfile=$(sudo find /etc/wireguard/ -iname "*.conf" -exec basename -s .conf {} \; | fzf)
- if [ -n "$wgfile" ]; then
- sudo wg-quick up "$wgfile"
- sudo wg
- fi
-}
-
-wgdown() {
- output=$(sudo wg 2>/dev/null)
- if [ -n "$output" ]; then
- for iface in $(sudo wg show interfaces); do
- sudo wg-quick down "${iface}"
- done
- fi
-}
-
-alias wg=wgup
diff --git a/dotfiles/system/.bashrc.d/git.sh b/dotfiles/system/.bashrc.d/git.sh
deleted file mode 100644
index 6c2b6ad..0000000
--- a/dotfiles/system/.bashrc.d/git.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-# git.sh
-# Craig Jennings
-# Git aliases and convenience functions
-
-# =============================================================================
-# Aliases
-# =============================================================================
-alias gitlog="git log --graph --pretty=format:'%Cred%h%Creset %an: %s - %Creset %C(yellow)%d%Creset %Cgreen(%cr)%Creset' --abbrev-commit --date=relative"
-alias gitstatus='git status -sb'
-alias gitcom='git commit -m'
-alias gitpp='git pull --prune'
-alias gittagbydate="git for-each-ref --sort=creatordate --format '%(refname) %(creatordate)' refs/tags"
-
-# =============================================================================
-# Functions
-# =============================================================================
-
-# Stash, pull, pop
-gitsp() {
- git stash && git pull && git stash pop
-}
-
-# Checkout branch with fzf
-gitck() {
- git checkout "$(git branch --all | fzf | tr -d '[:space:]')"
-}
-
-# Diff with fzf preview
-gitdiff() {
- preview="git diff $@ --color=always -- {-1}"
- git diff "$@" --name-only | fzf -m --ansi --preview "$preview"
-}
diff --git a/dotfiles/system/.bashrc.d/media.sh b/dotfiles/system/.bashrc.d/media.sh
deleted file mode 100644
index 92fe2ce..0000000
--- a/dotfiles/system/.bashrc.d/media.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-# media.sh
-# Craig Jennings
-# Media utilities - music, video, downloads
-
-# =============================================================================
-# Terminal MPV
-# =============================================================================
-alias play='mpv --no-video'
-alias shuffle='mpv --no-video --shuffle'
-
-# =============================================================================
-# Tidal
-# =============================================================================
-alias tdl="tidal-dl -l"
-alias ttdl="tsp tidal-dl -l"
-
-# =============================================================================
-# YouTube (yt-dlp)
-# =============================================================================
-# Video - single
-alias yt="yt-dlp --ignore-config --no-playlist --add-metadata -i -o '%(channel)s-%(title)s.%(ext)s'"
-alias tyt="tsp yt-dlp --ignore-config --no-playlist --add-metadata -i -o '%(channel)s-%(title)s.%(ext)s'"
-
-# Video - playlist
-alias ytp="yt-dlp --ignore-config --yes-playlist --add-metadata -i -o '%(channel)s-%(playlist_title)s-%(playlist_index)s-%(title)s.%(ext)s'"
-alias tytp="tsp yt-dlp --ignore-config --yes-playlist --add-metadata -i -o '%(channel)s-%(playlist_title)s-%(playlist_index)s-%(title)s.%(ext)s'"
-
-# Audio - single
-alias yta="yt-dlp --ignore-config --no-playlist -x -f bestaudio/best -o '%(artist)s-%(title)s.%(ext)s'"
-alias tyta="tsp yt-dlp --ignore-config --no-playlist -x -f bestaudio/best -o '%(artist)s-%(title)s.%(ext)s'"
-
-# Audio - playlist
-alias ytap="yt-dlp --ignore-config --yes-playlist -x -f bestaudio/best -o '%(playlist_index)s-%(artist)s-%(title)s.%(ext)s'"
-alias tytap="tsp yt-dlp --ignore-config --yes-playlist -x -f bestaudio/best -o '%(playlist_index)s-%(artist)s-%(title)s.%(ext)s'"
-
-# =============================================================================
-# Audible Conversion (AAXtoMP3)
-# =============================================================================
-alias aax2flac='AAXtoMP3 -f'
-alias aax2mp3='AAXtoMP3 -c -e:mp3'
-alias aax2opus='AAXtoMP3 --opus -t . -c'
diff --git a/dotfiles/system/.bashrc.d/utilities.sh b/dotfiles/system/.bashrc.d/utilities.sh
deleted file mode 100644
index 431cac0..0000000
--- a/dotfiles/system/.bashrc.d/utilities.sh
+++ /dev/null
@@ -1,206 +0,0 @@
-# utilities.sh
-# Craig Jennings
-# General utility functions
-
-# =============================================================================
-# Archive Extraction
-# =============================================================================
-extract() {
- if [ -f "$1" ]; then
- case "$1" in
- *.tar.bz2) tar xjf "$1" ;;
- *.tar.gz) tar xzf "$1" ;;
- *.bz2) bunzip2 "$1" ;;
- *.rar) rar x "$1" ;;
- *.gz) gunzip "$1" ;;
- *.tar) tar xf "$1" ;;
- *.tbz2) tar xjf "$1" ;;
- *.tgz) tar xzf "$1" ;;
- *.zip) unzip "$1" ;;
- *.Z) uncompress "$1" ;;
- *) echo "$1 cannot be extracted via extract()" ;;
- esac
- else
- echo "$1 is not a valid file"
- fi
-}
-
-# =============================================================================
-# Archive Compression
-# =============================================================================
-compress() {
- if [ $# -ne 2 ]; then
- echo "Usage: compress "
- echo "Formats: tar.bz2, tar.gz, bz2, tar, tbz2, tgz, zip, gz, Z"
- return 1
- fi
-
- format="$1"
- target="$2"
-
- if [ ! -e "$target" ]; then
- echo "Error: '$target' does not exist"
- return 1
- fi
-
- basename=$(basename "$target")
-
- case "$format" in
- tar.bz2|tbz2) output="${basename}.tar.bz2" ;;
- tar.gz|tgz) output="${basename}.tar.gz" ;;
- bz2) output="${target}.bz2" ;;
- gz) output="${target}.gz" ;;
- tar) output="${basename}.tar" ;;
- zip) output="${basename}.zip" ;;
- Z) output="${target}.Z" ;;
- *)
- echo "Error: Unknown format '$format'"
- return 1
- ;;
- esac
-
- if [ -e "$output" ]; then
- printf "Warning: '%s' already exists. Overwrite? (y/N): " "$output"
- read -r response
- case "$response" in
- [yY]|[yY][eE][sS]) rm -f "$output" ;;
- *) echo "Aborted." && return 1 ;;
- esac
- fi
-
- case "$format" in
- tar.bz2|tbz2) tar -cjf "$output" "$target" ;;
- tar.gz|tgz) tar -czf "$output" "$target" ;;
- bz2)
- [ -d "$target" ] && echo "Error: bz2 only works on files" && return 1
- bzip2 -k "$target"
- ;;
- gz)
- [ -d "$target" ] && echo "Error: gz only works on files" && return 1
- gzip -k "$target"
- ;;
- tar) tar -cf "$output" "$target" ;;
- zip)
- [ -d "$target" ] && zip -r "$output" "$target" || zip "$output" "$target"
- ;;
- Z)
- [ -d "$target" ] && echo "Error: Z only works on files" && return 1
- command compress -c "$target" > "$output"
- ;;
- esac
-
- [ $? -eq 0 ] && echo "Created $output" || echo "Compression failed"
-}
-
-# =============================================================================
-# DD Helper
-# =============================================================================
-dd_with_bs() {
- OUT_DIR=$(dirname "$2")
- if [ ! -e "$1" ] || [ ! -e "$OUT_DIR" ]; then
- echo "$1 or $OUT_DIR doesn't exist"
- return 1
- fi
- IN_BS=$(stat -c "%o" "$1")
- OUT_BS=$(stat -c "%o" "$OUT_DIR")
- echo dd \"if=$1\" \"of=$2\" \"ibs=$IN_BS\" \"obs=$OUT_BS\"
-}
-
-# =============================================================================
-# Clock, Timer, Alarm, Stopwatch
-# =============================================================================
-export BEEP="/usr/share/sounds/freedesktop/stereo/bell.oga"
-alias beep='paplay $BEEP'
-
-clock() {
- while true; do
- tput clear
- echo ""
- date +" %l : %M %p" | figlet -f roman -w 200
- sleep 1
- done
-}
-
-timer() {
- if [ "$#" -lt 2 ]; then
- echo "Pass the time and a notification. Example: timer 1h30m Parking expiring"
- return 1
- fi
- message="${*:2}"
- start_time=$(date +"%H:%M:%S %p")
- printf "\nStarting %s timer at %s\n" "$1" "$start_time"
- snore "$1" && paplay "$BEEP" && notify-send "Timer" "$message"
-}
-
-alarm() {
- if [ "$#" -lt 2 ]; then
- echo "Pass both the time and a message. Example: alarm 1:45pm Time to eat!"
- return 1
- fi
-
- if ! date -d "$1" >/dev/null 2>&1; then
- echo "Invalid time: $1"
- return 1
- fi
-
- echo "paplay \$BEEP && notify-send \"Alarm\" \"$*\"" | at "$1" >/dev/null 2>&1
- echo ""
- echo "Alarm '${*:2}' is queued for $1."
- echo "To see all alarms: atq"
- echo "To remove an alarm: atrm "
- echo ""
-}
-
-# Stopwatch
-sw_start_time=0
-sw_started=0
-
-swreset() {
- sw_start_time=0
- sw_started=0
- echo "Stopwatch reset"
-}
-
-swshow() {
- if [ "$sw_started" = 0 ]; then
- echo "Error: Stopwatch not started" >&2
- return 1
- fi
-
- current_time=$(date +%s)
- elapsed_time=$((current_time - sw_start_time))
-
- if [ "$elapsed_time" -lt 60 ]; then
- echo "Elapsed time: $elapsed_time seconds"
- elif [ "$elapsed_time" -lt 3600 ]; then
- minutes=$((elapsed_time / 60))
- seconds=$((elapsed_time % 60))
- echo "Elapsed time: $minutes minutes, $seconds seconds"
- else
- hours=$((elapsed_time / 3600))
- minutes=$(((elapsed_time / 60) % 60))
- seconds=$((elapsed_time % 60))
- echo "Elapsed time: $hours hours, $minutes minutes, $seconds seconds"
- fi
-}
-
-swstop() {
- swshow
- swreset
-}
-
-swstart() {
- if [ "$sw_started" = 1 ]; then
- printf "Stopwatch is already started. Reset? (y/n): "
- read -r answer
- case "$answer" in
- [yY]) swreset ;;
- [nN]) echo "Stopwatch not reset." && swshow && return ;;
- *) echo "Error: Invalid input." >&2 && return 1 ;;
- esac
- fi
-
- sw_started=1
- sw_start_time=$(date +%s)
- printf "Stopwatch started at %s\n\n" "$(date +"%H:%M:%S %p")"
-}
diff --git a/dotfiles/system/.config/.cmailpass.gpg b/dotfiles/system/.config/.cmailpass.gpg
deleted file mode 100644
index 48c4632..0000000
--- a/dotfiles/system/.config/.cmailpass.gpg
+++ /dev/null
@@ -1,2 +0,0 @@
-Œ
-O;ŒŠª¨ƒÿÒKꡎÕýg{*F´¤pK4 _á aØ›¶ÎÁmÍrÉj"Τß;܃¢ÒêÌÌ€™ z¼šxx-šìûÝç9Ñô=ü`=£{ôDYà³
\ No newline at end of file
diff --git a/dotfiles/system/.config/.gmailpass.gpg b/dotfiles/system/.config/.gmailpass.gpg
deleted file mode 100644
index cea3fe1..0000000
--- a/dotfiles/system/.config/.gmailpass.gpg
+++ /dev/null
@@ -1 +0,0 @@
-Œ
¨‘q~–¤9KÿÒEp…é[,/Fd?aNTÒ†o%#JWÙ-«•‚rsšW_£ídíMïG¾>Óv³ª£õÃ~Bñzô²W[˜hQ°r
\ No newline at end of file
diff --git a/dotfiles/system/.config/.tidal-dl.json b/dotfiles/system/.config/.tidal-dl.json
deleted file mode 100644
index 9c39da2..0000000
--- a/dotfiles/system/.config/.tidal-dl.json
+++ /dev/null
@@ -1 +0,0 @@
-{"albumFolderFormat": "{ArtistName}/{AlbumTitle} ({AlbumYear})", "apiKeyIndex": 1, "audioQuality": "HiFi", "checkExist": true, "downloadDelay": true, "downloadPath": "/home/cjennings/music/", "includeEP": true, "language": "0", "lyricFile": false, "multiThread": true, "playlistFolderFormat": "{PlaylistName}", "saveAlbumInfo": false, "saveCovers": true, "showProgress": false, "showTrackInfo": false, "trackFileFormat": "{TrackNumber} {TrackTitle}", "usePlaylistFolder": false, "videoFileFormat": "{VideoNumber} - {ArtistName} - {VideoTitle}", "videoQuality": "P1080"}
\ No newline at end of file
diff --git a/dotfiles/system/.config/.tidal-dl.token.json b/dotfiles/system/.config/.tidal-dl.token.json
deleted file mode 100644
index 64396c3..0000000
--- a/dotfiles/system/.config/.tidal-dl.token.json
+++ /dev/null
@@ -1 +0,0 @@
-eyJhY2Nlc3NUb2tlbiI6ICJleUpyYVdRaU9pSjJPVTFHYkZocVdTSXNJbUZzWnlJNklrVlRNalUySW4wLmV5SjBlWEJsSWpvaWJ6SmZZV05qWlhOeklpd2lkV2xrSWpvek5qa3pOems0TUN3aWMyTnZjR1VpT2lKeVgzVnpjaUIzWDNWemNpQjNYM04xWWlJc0ltZFdaWElpT2pBc0luTldaWElpT2pFc0ltTnBaQ0k2TkRJMU9Td2laWGh3SWpveE56WXdOamcwT1RreUxDSnphV1FpT2lKaE5UTXpaalV3WkMxa056azVMVFExTXpJdE9UUmlNUzAwTWpFd1pqVXdOakZqTURRaUxDSnBjM01pT2lKb2RIUndjem92TDJGMWRHZ3VkR2xrWVd3dVkyOXRMM1l4SW4wLk9VaFJNNFlRMXNJQzB0QTVTX0ptck1FWjlzWmMxcUVwVzlNa203YUlIbDZKQlVxdGdGbnJFcFFBTmx5dFNYYXFDa0E3NWJ2aUV6TldGUE5iQmxyQUh3IiwgImNvdW50cnlDb2RlIjogIlVTIiwgImV4cGlyZXNBZnRlciI6IDE3NjA2ODQ5OTIuMzYzMTA4MiwgInJlZnJlc2hUb2tlbiI6ICJleUpyYVdRaU9pSm9VekZLWVRkVk1DSXNJbUZzWnlJNklrVlROVEV5SW4wLmV5SjBlWEJsSWpvaWJ6SmZjbVZtY21WemFDSXNJblZwWkNJNk16WTVNemM1T0RBc0luTmpiM0JsSWpvaWNsOTFjM0lnZDE5MWMzSWdkMTl6ZFdJaUxDSmphV1FpT2pReU5Ua3NJbk5XWlhJaU9qRXNJbWRXWlhJaU9qQXNJbWx6Y3lJNkltaDBkSEJ6T2k4dllYVjBhQzUwYVdSaGJDNWpiMjB2ZGpFaWZRLkFhQ1FFV1ZvWlZGU2p1NXpPLWJiMXV4QmpGZV9FVG1nWUhRRlpIb1BJQ2xnQW1IcWFBWUY2OXFacURmN0lpVktyLVBmdTRTN1p6ZHhiM3E4Mm5xY2F0WGtBRDNmV01sS0VDekxoNGwxTE50ODBFaU9LZk51T2lWZ2pnMmxpMzdweGltR3RuNGdybW5LS3pUTVlHV0dfSnBHLXY1SWRDdjdYVmtyRTRMNFpEM05DSGo1IiwgInVzZXJpZCI6IDM2OTM3OTgwfQ==
\ No newline at end of file
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/app-internal-state.db b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/app-internal-state.db
deleted file mode 100644
index 656dfd5..0000000
Binary files a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/app-internal-state.db and /dev/null differ
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/early-access-registry.txt b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/early-access-registry.txt
deleted file mode 100644
index 644afaf..0000000
--- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/early-access-registry.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-ide.experimental.ui
-true
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/colors.scheme.xml b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/colors.scheme.xml
deleted file mode 100644
index 19c4baa..0000000
--- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/colors.scheme.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/console-font.xml b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/console-font.xml
deleted file mode 100644
index 2c67ad2..0000000
--- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/console-font.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/editor-font.xml b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/editor-font.xml
deleted file mode 100644
index f03edf7..0000000
--- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/editor-font.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/editor.xml b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/editor.xml
deleted file mode 100644
index b43f2d4..0000000
--- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/editor.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/features.usage.statistics.xml b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/features.usage.statistics.xml
deleted file mode 100644
index ac11abf..0000000
--- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/features.usage.statistics.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/filetypes.xml b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/filetypes.xml
deleted file mode 100644
index 099baf9..0000000
--- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/filetypes.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/ide-features-trainer.xml b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/ide-features-trainer.xml
deleted file mode 100644
index 54b8902..0000000
--- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/ide-features-trainer.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/ide.general.xml b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/ide.general.xml
deleted file mode 100644
index 1df1fe5..0000000
--- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/ide.general.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/log-categories.xml b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/log-categories.xml
deleted file mode 100644
index 3ff0f01..0000000
--- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/log-categories.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/other.xml b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/other.xml
deleted file mode 100644
index 76bc172..0000000
--- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/other.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/settingsSync.xml b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/settingsSync.xml
deleted file mode 100644
index 6c9eb82..0000000
--- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/settingsSync.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/updates.xml b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/updates.xml
deleted file mode 100644
index 089dbf6..0000000
--- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/updates.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/window.state.xml b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/window.state.xml
deleted file mode 100644
index 078d8f1..0000000
--- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/options/window.state.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/updatedBrokenPlugins.db b/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/updatedBrokenPlugins.db
deleted file mode 100644
index 63a47f8..0000000
Binary files a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/updatedBrokenPlugins.db and /dev/null differ
diff --git a/dotfiles/system/.config/audacious/QtUi.conf b/dotfiles/system/.config/audacious/QtUi.conf
deleted file mode 100644
index 18b3f4c..0000000
--- a/dotfiles/system/.config/audacious/QtUi.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-[General]
-geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\xe\0\0\x4g\0\0\x2\xef\0\0\0\0\0\0\0\xe\0\0\x4g\0\0\x2\xef\0\0\0\0\0\0\0\0\x4h\0\0\0\0\0\0\0\xe\0\0\x4g\0\0\x2\xef)
-windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\x4h\0\0\x2\x93\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\x16\0M\0\x61\0i\0n\0T\0o\0o\0l\0\x42\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
diff --git a/dotfiles/system/.config/audacious/config b/dotfiles/system/.config/audacious/config
deleted file mode 100644
index fd1fdd4..0000000
--- a/dotfiles/system/.config/audacious/config
+++ /dev/null
@@ -1,23 +0,0 @@
-
-[audacious]
-repeat=TRUE
-
-[audgui]
-filesel_path=/home/cjennings/playlists/andor
-
-[audqt]
-icon_theme=audacious-flat
-theme=dark
-
-[qtui]
-player_height=738
-player_width=1128
-
-[skins]
-equalizer_x=178
-equalizer_y=22
-player_x=614
-player_y=442
-playlist_x=674
-playlist_y=181
-skin=/home/cjennings/.local/share/audacious/Skins/nadamp.zip
diff --git a/dotfiles/system/.config/audacious/playlist-state b/dotfiles/system/.config/audacious/playlist-state
deleted file mode 100644
index 985b3d2..0000000
--- a/dotfiles/system/.config/audacious/playlist-state
+++ /dev/null
@@ -1,12 +0,0 @@
-active 1
-playing 1
-playlist 0
-position 0
-shuffle 0
-resume-state 1
-resume-time 84873
-playlist 1
-position 0
-shuffle 0
-resume-state 1
-resume-time 5276
diff --git a/dotfiles/system/.config/audacious/playlists/1000.audpl b/dotfiles/system/.config/audacious/playlists/1000.audpl
deleted file mode 100644
index 3334184..0000000
--- a/dotfiles/system/.config/audacious/playlists/1000.audpl
+++ /dev/null
@@ -1,5 +0,0 @@
-title=New%20Playlist
-uri=file:///home/cjennings/playlists/andor/andor.opus
-length=215907
-bitrate=128
-codec=Opus
diff --git a/dotfiles/system/.config/audacious/playlists/order b/dotfiles/system/.config/audacious/playlists/order
deleted file mode 100644
index c9a7c13..0000000
--- a/dotfiles/system/.config/audacious/playlists/order
+++ /dev/null
@@ -1 +0,0 @@
-1000 1001
\ No newline at end of file
diff --git a/dotfiles/system/.config/audacious/plugin-registry b/dotfiles/system/.config/audacious/plugin-registry
deleted file mode 100644
index 9cedebb..0000000
--- a/dotfiles/system/.config/audacious/plugin-registry
+++ /dev/null
@@ -1,926 +0,0 @@
-format 11
-transport /usr/lib/audacious/Transport/gio.so
-stamp 1758887725
-version 48
-flags 0
-name GIO Plugin
-domain audacious-plugins
-priority 0
-about 1
-config 0
-enabled 1
-scheme ftp
-scheme sftp
-scheme smb
-scheme mtp
-transport /usr/lib/audacious/Transport/mms.so
-stamp 1758887725
-version 48
-flags 0
-name MMS Plugin
-domain audacious-plugins
-priority 0
-about 0
-config 0
-enabled 1
-scheme mms
-transport /usr/lib/audacious/Transport/neon.so
-stamp 1758887725
-version 48
-flags 0
-name Neon HTTP/HTTPS Plugin
-domain audacious-plugins
-priority 0
-about 0
-config 0
-enabled 1
-scheme http
-scheme https
-playlist /usr/lib/audacious/Container/asx.so
-stamp 1758887725
-version 48
-flags 0
-name ASXv1/ASXv2 Playlists
-domain audacious-plugins
-priority 0
-about 0
-config 0
-enabled 1
-ext asx
-saves 0
-playlist /usr/lib/audacious/Container/asx3.so
-stamp 1758887725
-version 48
-flags 0
-name ASXv3 Playlists
-domain audacious-plugins
-priority 0
-about 0
-config 0
-enabled 1
-ext asx
-saves 1
-playlist /usr/lib/audacious/Container/audpl.so
-stamp 1758887725
-version 48
-flags 0
-name Audacious Playlists (audpl)
-domain audacious-plugins
-priority 0
-about 0
-config 0
-enabled 1
-ext audpl
-saves 1
-playlist /usr/lib/audacious/Container/cue.so
-stamp 1758887725
-version 48
-flags 0
-name Cue Sheet Plugin
-domain audacious-plugins
-priority 0
-about 0
-config 0
-enabled 1
-ext cue
-saves 0
-playlist /usr/lib/audacious/Container/m3u.so
-stamp 1758887725
-version 48
-flags 0
-name M3U Playlists
-domain audacious-plugins
-priority 0
-about 0
-config 0
-enabled 1
-ext m3u
-ext m3u8
-saves 1
-playlist /usr/lib/audacious/Container/pls.so
-stamp 1758887725
-version 48
-flags 0
-name PLS Playlists
-domain audacious-plugins
-priority 0
-about 0
-config 0
-enabled 1
-ext pls
-saves 1
-playlist /usr/lib/audacious/Container/xspf.so
-stamp 1758887725
-version 48
-flags 0
-name XML Shareable Playlists (XSPF)
-domain audacious-plugins
-priority 0
-about 0
-config 0
-enabled 1
-ext xspf
-saves 1
-input /usr/lib/audacious/Input/xsf.so
-stamp 1758887725
-version 48
-flags 0
-name 2SF Decoder
-domain audacious-plugins
-priority 5
-about 0
-config 1
-enabled 1
-scheme 2sf
-scheme mini2sf
-subtunes 0
-writes 0
-input /usr/lib/audacious/Input/aac-raw.so
-stamp 1758887725
-version 48
-flags 0
-name AAC (Raw) Decoder
-domain audacious-plugins
-priority 5
-about 0
-config 0
-enabled 1
-scheme aac
-ext audio/aac
-subtunes 0
-writes 0
-input /usr/lib/audacious/Input/amidi-plug.so
-stamp 1758887725
-version 48
-flags 0
-name AMIDI-Plug (MIDI Player)
-domain audacious-plugins
-priority 5
-about 1
-config 1
-enabled 1
-scheme mid
-scheme midi
-scheme rmi
-scheme rmid
-ext audio/midi
-subtunes 0
-writes 0
-input /usr/lib/audacious/Input/cdaudio-ng.so
-stamp 1758887725
-version 48
-flags 0
-name Audio CD Plugin
-domain audacious-plugins
-priority 5
-about 1
-config 1
-enabled 1
-mime cdda
-subtunes 2
-writes 0
-input /usr/lib/audacious/Input/console.so
-stamp 1758887725
-version 48
-flags 0
-name Game Console Music Decoder
-domain audacious-plugins
-priority 5
-about 1
-config 1
-enabled 1
-scheme ay
-scheme gbs
-scheme gym
-scheme hes
-scheme kss
-scheme nsf
-scheme nsfe
-scheme sap
-scheme spc
-scheme vgm
-scheme vgz
-subtunes 2
-writes 0
-input /usr/lib/audacious/Input/madplug.so
-stamp 1758887725
-version 48
-flags 0
-name MPG123 Plugin
-domain audacious-plugins
-priority 5
-about 0
-config 1
-enabled 1
-scheme mp3
-scheme mp2
-scheme mp1
-scheme bmu
-ext audio/mp3
-ext audio/mpeg
-ext audio/x-mp3
-ext audio/x-mpeg
-subtunes 0
-writes 1
-input /usr/lib/audacious/Input/openmpt.so
-stamp 1758887725
-version 48
-flags 0
-name OpenMPT (Module Player)
-domain audacious-plugins
-priority 5
-about 1
-config 1
-enabled 1
-scheme 669
-scheme amf
-scheme ams
-scheme dbm
-scheme digi
-scheme dmf
-scheme dsm
-scheme far
-scheme gdm
-scheme ice
-scheme imf
-scheme it
-scheme j2b
-scheme m15
-scheme mdl
-scheme med
-scheme mmcmp
-scheme mms
-scheme mo3
-scheme mod
-scheme mptm
-scheme mt2
-scheme mtm
-scheme nst
-scheme okt
-scheme plm
-scheme ppm
-scheme psm
-scheme pt36
-scheme ptm
-scheme s3m
-scheme sfx
-scheme sfx2
-scheme st26
-scheme stk
-scheme stm
-scheme ult
-scheme umx
-scheme wow
-scheme xm
-scheme xpk
-subtunes 0
-writes 0
-input /usr/lib/audacious/Input/psf2.so
-stamp 1758887725
-version 48
-flags 0
-name OpenPSF PSF1/PSF2 Decoder
-domain audacious-plugins
-priority 5
-about 0
-config 1
-enabled 1
-scheme psf
-scheme minipsf
-scheme psf2
-scheme minipsf2
-scheme spu
-scheme spx
-subtunes 0
-writes 0
-input /usr/lib/audacious/Input/opus.so
-stamp 1758887725
-version 48
-flags 0
-name Opus Decoder
-domain audacious-plugins
-priority 5
-about 1
-config 0
-enabled 1
-scheme opus
-ext application/ogg
-ext audio/ogg
-ext audio/opus
-ext audio/x-opus+ogg
-subtunes 0
-writes 0
-input /usr/lib/audacious/Input/sid.so
-stamp 1758887725
-version 48
-flags 0
-name SID Player
-domain audacious-plugins
-priority 5
-about 0
-config 1
-enabled 1
-scheme sid
-scheme psid
-ext audio/prs.sid
-subtunes 2
-writes 0
-input /usr/lib/audacious/Input/metronom.so
-stamp 1758887725
-version 48
-flags 0
-name Tact Generator
-domain audacious-plugins
-priority 5
-about 1
-config 0
-enabled 1
-mime tact
-subtunes 0
-writes 0
-input /usr/lib/audacious/Input/tonegen.so
-stamp 1758887725
-version 48
-flags 0
-name Tone Generator
-domain audacious-plugins
-priority 5
-about 1
-config 0
-enabled 1
-mime tone
-subtunes 0
-writes 0
-input /usr/lib/audacious/Input/vtx.so
-stamp 1758887725
-version 48
-flags 0
-name VTX Decoder
-domain audacious-plugins
-priority 5
-about 1
-config 0
-enabled 1
-scheme vtx
-subtunes 0
-writes 0
-input /usr/lib/audacious/Input/wavpack.so
-stamp 1758887725
-version 48
-flags 0
-name WavPack Decoder
-domain audacious-plugins
-priority 5
-about 1
-config 0
-enabled 1
-scheme wv
-ext audio/x-wavpack
-subtunes 0
-writes 1
-input /usr/lib/audacious/Input/flacng.so
-stamp 1758887725
-version 48
-flags 0
-name FLAC Decoder
-domain audacious-plugins
-priority 6
-about 1
-config 0
-enabled 1
-scheme flac
-scheme fla
-ext audio/flac
-ext audio/x-flac
-ext audio/ogg
-ext application/ogg
-subtunes 0
-writes 1
-input /usr/lib/audacious/Input/modplug.so
-stamp 1758887725
-version 48
-flags 0
-name ModPlug (Module Player)
-domain audacious-plugins
-priority 6
-about 0
-config 1
-enabled 1
-scheme amf
-scheme ams
-scheme dbm
-scheme dbf
-scheme dsm
-scheme far
-scheme mdl
-scheme stm
-scheme ult
-scheme mt2
-scheme mod
-scheme s3m
-scheme dmf
-scheme umx
-scheme it
-scheme 669
-scheme xm
-scheme mtm
-scheme psm
-scheme ft2
-subtunes 2
-writes 0
-input /usr/lib/audacious/Input/vorbis.so
-stamp 1758887725
-version 48
-flags 0
-name Ogg Vorbis Decoder
-domain audacious-plugins
-priority 7
-about 1
-config 0
-enabled 1
-scheme ogg
-scheme ogm
-scheme oga
-ext application/ogg
-ext application/x-ogg
-ext audio/ogg
-ext audio/x-vorbis+ogg
-subtunes 0
-writes 1
-input /usr/lib/audacious/Input/sndfile.so
-stamp 1758887725
-version 48
-flags 0
-name Sndfile Plugin
-domain audacious-plugins
-priority 9
-about 1
-config 0
-enabled 1
-scheme aiff
-scheme au
-scheme raw
-scheme wav
-ext audio/wav
-ext audio/x-wav
-subtunes 0
-writes 0
-input /usr/lib/audacious/Input/ffaudio.so
-stamp 1758887725
-version 48
-flags 0
-name FFmpeg Plugin
-domain audacious-plugins
-priority 10
-about 1
-config 0
-enabled 1
-scheme mpc
-scheme mp+
-scheme mpp
-scheme wma
-scheme shn
-scheme aa3
-scheme oma
-scheme aac
-scheme ac3
-scheme adx
-scheme ape
-scheme dts
-scheme vqf
-scheme m4a
-scheme mp4
-scheme wav
-scheme ogg
-scheme oga
-scheme spx
-scheme tta
-scheme webm
-scheme mka
-scheme mkv
-ext application/ogg
-ext audio/aac
-ext audio/mp4
-ext audio/ogg
-subtunes 0
-writes 1
-effect /usr/lib/audacious/Effect/bs2b.so
-stamp 1758887725
-version 48
-flags 0
-name Bauer Stereophonic-to-Binaural (BS2B)
-domain audacious-plugins
-priority 0
-about 0
-config 1
-enabled 0
-effect /usr/lib/audacious/Effect/bitcrusher.so
-stamp 1758887725
-version 48
-flags 0
-name Bitcrusher
-domain audacious-plugins
-priority 0
-about 0
-config 1
-enabled 0
-effect /usr/lib/audacious/Effect/crystalizer.so
-stamp 1758887725
-version 48
-flags 0
-name Crystalizer
-domain audacious-plugins
-priority 0
-about 0
-config 1
-enabled 0
-effect /usr/lib/audacious/Effect/compressor.so
-stamp 1758887725
-version 48
-flags 0
-name Dynamic Range Compressor
-domain audacious-plugins
-priority 0
-about 1
-config 1
-enabled 0
-effect /usr/lib/audacious/Effect/echo.so
-stamp 1758887725
-version 48
-flags 0
-name Echo
-domain audacious-plugins
-priority 0
-about 1
-config 1
-enabled 0
-effect /usr/lib/audacious/Effect/stereo.so
-stamp 1758887725
-version 48
-flags 0
-name Extra Stereo
-domain audacious-plugins
-priority 0
-about 1
-config 1
-enabled 0
-effect /usr/lib/audacious/Effect/silence-removal.so
-stamp 1758887725
-version 48
-flags 0
-name Silence Removal
-domain audacious-plugins
-priority 0
-about 1
-config 1
-enabled 0
-effect /usr/lib/audacious/Effect/speed-pitch.so
-stamp 1758887725
-version 48
-flags 0
-name Speed and Pitch
-domain audacious-plugins
-priority 0
-about 0
-config 1
-enabled 0
-effect /usr/lib/audacious/Effect/voice_removal.so
-stamp 1758887725
-version 48
-flags 0
-name Voice Removal
-domain audacious-plugins
-priority 0
-about 0
-config 0
-enabled 0
-effect /usr/lib/audacious/Effect/mixer.so
-stamp 1758887725
-version 48
-flags 0
-name Channel Mixer
-domain audacious-plugins
-priority 2
-about 1
-config 1
-enabled 0
-effect /usr/lib/audacious/Effect/resample.so
-stamp 1758887725
-version 48
-flags 0
-name Sample Rate Converter
-domain audacious-plugins
-priority 2
-about 1
-config 1
-enabled 0
-effect /usr/lib/audacious/Effect/sox-resampler.so
-stamp 1758887725
-version 48
-flags 0
-name SoX Resampler
-domain audacious-plugins
-priority 2
-about 1
-config 1
-enabled 0
-effect /usr/lib/audacious/Effect/crossfade.so
-stamp 1758887725
-version 48
-flags 0
-name Crossfade
-domain audacious-plugins
-priority 5
-about 1
-config 1
-enabled 0
-effect /usr/lib/audacious/Effect/background_music.so
-stamp 1758887725
-version 48
-flags 0
-name Background Music
-domain audacious-plugins
-priority 10
-about 1
-config 1
-enabled 0
-output /usr/lib/audacious/Output/pipewire.so
-stamp 1758887725
-version 48
-flags 0
-name PipeWire Output
-domain audacious-plugins
-priority 2
-about 1
-config 0
-enabled 0
-output /usr/lib/audacious/Output/pulse_audio.so
-stamp 1758887725
-version 48
-flags 0
-name PulseAudio Output
-domain audacious-plugins
-priority 2
-about 1
-config 1
-enabled 1
-output /usr/lib/audacious/Output/alsa.so
-stamp 1758887725
-version 48
-flags 0
-name ALSA Output
-domain audacious-plugins
-priority 5
-about 1
-config 1
-enabled 0
-output /usr/lib/audacious/Output/oss4.so
-stamp 1758887725
-version 48
-flags 0
-name OSS3 Output
-domain audacious-plugins
-priority 6
-about 1
-config 1
-enabled 0
-output /usr/lib/audacious/Output/sdlout.so
-stamp 1758887725
-version 48
-flags 0
-name SDL Output
-domain audacious-plugins
-priority 9
-about 1
-config 0
-enabled 0
-output /usr/lib/audacious/Output/filewriter.so
-stamp 1758887725
-version 48
-flags 0
-name FileWriter Plugin
-domain audacious-plugins
-priority 10
-about 1
-config 1
-enabled 0
-output /usr/lib/audacious/Output/jack-ng.so
-stamp 1758887725
-version 48
-flags 0
-name JACK Output
-domain audacious-plugins
-priority 10
-about 0
-config 1
-enabled 0
-vis /usr/lib/audacious/Visualization/blur_scope-qt.so
-stamp 1758887725
-version 48
-flags 2
-name Blur Scope
-domain audacious-plugins
-priority 0
-about 0
-config 1
-enabled 0
-vis /usr/lib/audacious/Visualization/gl-spectrum-qt.so
-stamp 1758887725
-version 48
-flags 2
-name OpenGL Spectrum Analyzer
-domain audacious-plugins
-priority 0
-about 1
-config 0
-enabled 0
-vis /usr/lib/audacious/Visualization/qt-spectrum.so
-stamp 1758887725
-version 48
-flags 2
-name Spectrum Analyzer
-domain audacious-plugins
-priority 0
-about 0
-config 0
-enabled 0
-vis /usr/lib/audacious/Visualization/vumeter-qt.so
-stamp 1758887725
-version 48
-flags 2
-name VU Meter
-domain audacious-plugins
-priority 0
-about 1
-config 1
-enabled 0
-general /usr/lib/audacious/General/albumart-qt.so
-stamp 1758887725
-version 48
-flags 2
-name Album Art
-domain audacious-plugins
-priority 0
-about 0
-config 0
-enabled 0
-general /usr/lib/audacious/General/cd-menu-items.so
-stamp 1758887725
-version 48
-flags 0
-name Audio CD Menu Items
-domain audacious-plugins
-priority 0
-about 0
-config 0
-enabled 1
-general /usr/lib/audacious/General/delete-files.so
-stamp 1758887725
-version 48
-flags 0
-name Delete Files
-domain audacious-plugins
-priority 0
-about 0
-config 1
-enabled 0
-general /usr/lib/audacious/General/notify.so
-stamp 1758887725
-version 48
-flags 0
-name Desktop Notifications
-domain audacious-plugins
-priority 0
-about 1
-config 1
-enabled 0
-general /usr/lib/audacious/General/qthotkey.so
-stamp 1758887725
-version 48
-flags 2
-name Global Hotkeys
-domain audacious-plugins
-priority 0
-about 1
-config 1
-enabled 0
-general /usr/lib/audacious/General/lirc.so
-stamp 1758887725
-version 48
-flags 0
-name LIRC Plugin
-domain audacious-plugins
-priority 0
-about 1
-config 1
-enabled 0
-general /usr/lib/audacious/General/lyrics-qt.so
-stamp 1758887725
-version 48
-flags 2
-name Lyrics
-domain audacious-plugins
-priority 0
-about 0
-config 1
-enabled 0
-general /usr/lib/audacious/General/mpris2.so
-stamp 1758887725
-version 48
-flags 0
-name MPRIS 2 Server
-domain audacious-plugins
-priority 0
-about 1
-config 0
-enabled 1
-general /usr/lib/audacious/General/playback-history-qt.so
-stamp 1758887725
-version 48
-flags 2
-name Playback History
-domain audacious-plugins
-priority 0
-about 1
-config 1
-enabled 0
-general /usr/lib/audacious/General/playlist-manager-qt.so
-stamp 1758887725
-version 48
-flags 2
-name Playlist Manager
-domain audacious-plugins
-priority 0
-about 0
-config 0
-enabled 0
-general /usr/lib/audacious/General/scrobbler.so
-stamp 1758887725
-version 48
-flags 0
-name Scrobbler 2.0
-domain audacious-plugins
-priority 0
-about 1
-config 1
-enabled 0
-general /usr/lib/audacious/General/search-tool-qt.so
-stamp 1758887725
-version 48
-flags 2
-name Search Tool
-domain audacious-plugins
-priority 0
-about 0
-config 1
-enabled 0
-general /usr/lib/audacious/General/song_change.so
-stamp 1758887725
-version 48
-flags 0
-name Song Change
-domain audacious-plugins
-priority 0
-about 0
-config 1
-enabled 0
-general /usr/lib/audacious/General/song-info-qt.so
-stamp 1758887725
-version 48
-flags 2
-name Song Info
-domain audacious-plugins
-priority 0
-about 0
-config 0
-enabled 0
-general /usr/lib/audacious/General/statusicon-qt.so
-stamp 1758887725
-version 48
-flags 2
-name Status Icon
-domain audacious-plugins
-priority 0
-about 1
-config 1
-enabled 0
-iface /usr/lib/audacious/General/qtui.so
-stamp 1758887725
-version 48
-flags 2
-name Qt Interface
-domain audacious-plugins
-priority 0
-about 0
-config 1
-enabled 0
-iface /usr/lib/audacious/General/skins-qt.so
-stamp 1758887725
-version 48
-flags 2
-name Winamp Classic Interface
-domain audacious-plugins
-priority 0
-about 0
-config 1
-enabled 1
diff --git a/dotfiles/system/.config/calibre/conversion/azw3_output.py b/dotfiles/system/.config/calibre/conversion/azw3_output.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/comic_input.py b/dotfiles/system/.config/calibre/conversion/comic_input.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/debug.py b/dotfiles/system/.config/calibre/conversion/debug.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/docx_input.py b/dotfiles/system/.config/calibre/conversion/docx_input.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/docx_output.py b/dotfiles/system/.config/calibre/conversion/docx_output.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/epub_output.py b/dotfiles/system/.config/calibre/conversion/epub_output.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/fb2_input.py b/dotfiles/system/.config/calibre/conversion/fb2_input.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/fb2_output.py b/dotfiles/system/.config/calibre/conversion/fb2_output.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/heuristics.py b/dotfiles/system/.config/calibre/conversion/heuristics.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/htmlz_output.py b/dotfiles/system/.config/calibre/conversion/htmlz_output.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/kepub_output.py b/dotfiles/system/.config/calibre/conversion/kepub_output.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/look_and_feel.py b/dotfiles/system/.config/calibre/conversion/look_and_feel.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/lrf_output.py b/dotfiles/system/.config/calibre/conversion/lrf_output.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/metadata.py b/dotfiles/system/.config/calibre/conversion/metadata.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/mobi_output.py b/dotfiles/system/.config/calibre/conversion/mobi_output.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/page_setup.py b/dotfiles/system/.config/calibre/conversion/page_setup.py
deleted file mode 100644
index d54ecbb..0000000
--- a/dotfiles/system/.config/calibre/conversion/page_setup.py
+++ /dev/null
@@ -1,3 +0,0 @@
-json:{
- "output_profile": "kobo"
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/conversion/pdb_output.py b/dotfiles/system/.config/calibre/conversion/pdb_output.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/pdf_input.py b/dotfiles/system/.config/calibre/conversion/pdf_input.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/pdf_output.py b/dotfiles/system/.config/calibre/conversion/pdf_output.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/pmlz_output.py b/dotfiles/system/.config/calibre/conversion/pmlz_output.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/rb_output.py b/dotfiles/system/.config/calibre/conversion/rb_output.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/rtf_input.py b/dotfiles/system/.config/calibre/conversion/rtf_input.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/search_and_replace.py b/dotfiles/system/.config/calibre/conversion/search_and_replace.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/snb_output.py b/dotfiles/system/.config/calibre/conversion/snb_output.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/structure_detection.py b/dotfiles/system/.config/calibre/conversion/structure_detection.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/toc.py b/dotfiles/system/.config/calibre/conversion/toc.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/txt_input.py b/dotfiles/system/.config/calibre/conversion/txt_input.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/txt_output.py b/dotfiles/system/.config/calibre/conversion/txt_output.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/conversion/txtz_output.py b/dotfiles/system/.config/calibre/conversion/txtz_output.py
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/custom_recipes/The Economist_1001.recipe b/dotfiles/system/.config/calibre/custom_recipes/The Economist_1001.recipe
deleted file mode 100644
index bcb8364..0000000
--- a/dotfiles/system/.config/calibre/custom_recipes/The Economist_1001.recipe
+++ /dev/null
@@ -1,684 +0,0 @@
-#!/usr/bin/env python
-# License: GPLv3 Copyright: 2008, Kovid Goyal
-
-import json
-import re
-import time
-from collections import defaultdict
-from datetime import datetime, timedelta
-from urllib.parse import quote, urlencode
-from uuid import uuid4
-
-from html5_parser import parse
-from lxml import etree
-
-from calibre import replace_entities
-from calibre.ebooks.BeautifulSoup import BeautifulSoup, NavigableString, Tag
-from calibre.ptempfile import PersistentTemporaryFile
-from calibre.scraper.simple import read_url
-from calibre.utils.date import parse_only_date
-from calibre.web.feeds.news import BasicNewsRecipe
-
-
-def E(parent, name, text='', **attrs):
- ans = parent.makeelement(name, **attrs)
- ans.text = text
- parent.append(ans)
- return ans
-
-
-def process_node(node, html_parent):
- ntype = node.get('type')
- if ntype == 'tag':
- c = html_parent.makeelement(node['name'])
- c.attrib.update({k: v or '' for k, v in node.get('attribs', {}).items()})
- html_parent.append(c)
- for nc in node.get('children', ()):
- process_node(nc, c)
- elif ntype == 'text':
- text = node.get('data')
- if text:
- text = replace_entities(text)
- if len(html_parent):
- t = html_parent[-1]
- t.tail = (t.tail or '') + text
- else:
- html_parent.text = (html_parent.text or '') + text
-
-
-def safe_dict(data, *names):
- ans = data
- for x in names:
- ans = ans.get(x) or {}
- return ans
-
-
-class JSONHasNoContent(ValueError):
- pass
-
-
-def load_article_from_json(raw, root):
- # open('/t/raw.json', 'w').write(raw)
- data = json.loads(raw)
- body = root.xpath('//body')[0]
- article = E(body, 'article')
- E(article, 'div', data['flyTitle'], style='color: red; font-size:small; font-weight:bold;')
- E(article, 'h1', data['title'], title=safe_dict(data, 'url', 'canonical') or '')
- E(article, 'div', data['rubric'], style='font-style: italic; color:#202020;')
- try:
- date = data['dateModified']
- except Exception:
- date = data['datePublished']
- dt = datetime.fromisoformat(date[:-1]) + timedelta(seconds=time.timezone)
- dt = dt.strftime('%b %d, %Y %I:%M %p')
- if data['dateline'] is None:
- E(article, 'p', dt, style='color: gray; font-size:small;')
- else:
- E(article, 'p', dt + ' | ' + (data['dateline']), style='color: gray; font-size:small;')
- main_image_url = safe_dict(data, 'image', 'main', 'url').get('canonical')
- if main_image_url:
- div = E(article, 'div')
- try:
- E(div, 'img', src=main_image_url)
- except Exception:
- pass
- for node in data.get('text') or ():
- process_node(node, article)
-
-
-def process_web_list(li_node):
- li_html = ''
- for li in li_node['items']:
- if li.get('textHtml'):
- li_html += f'{li.get("textHtml")} '
- else:
- li_html += f'{li.get("text", "")} '
- return li_html
-
-
-def process_info_box(bx):
- info = ''
- for x in safe_dict(bx, 'components'):
- info += f'{process_web_node(x)} '
- return info
-
-
-def process_web_node(node):
- ntype = node.get('type', '')
- if ntype == 'CROSSHEAD':
- if node.get('textHtml'):
- return f'{node.get("textHtml")} '
- return f'{node.get("text", "")} '
- elif ntype in ['PARAGRAPH', 'BOOK_INFO']:
- if node.get('textHtml'):
- return f'{node.get("textHtml")}
'
- return f'{node.get("text", "")}
'
- elif ntype == 'IMAGE':
- alt = '' if node.get('altText') is None else node.get('altText')
- cap = ''
- if node.get('caption'):
- if node['caption'].get('textHtml') is not None:
- cap = node['caption']['textHtml']
- return f'{cap}
'
- elif ntype == 'PULL_QUOTE':
- if node.get('textHtml'):
- return f'{node.get("textHtml")} '
- return f'{node.get("text", "")} '
- elif ntype == 'DIVIDER':
- return ' '
- elif ntype == 'INFOGRAPHIC':
- if node.get('fallback'):
- return process_web_node(node['fallback'])
- elif ntype == 'INFOBOX':
- return process_info_box(node)
- elif ntype == 'UNORDERED_LIST':
- if node.get('items'):
- return process_web_list(node)
- elif ntype:
- print('** ', ntype)
- return ''
-
-
-def load_article_from_web_json(raw):
- # open('/t/raw.json', 'w').write(raw)
- body = ''
- try:
- data = json.loads(raw)['props']['pageProps']['cp2Content']
- except Exception:
- data = json.loads(raw)['props']['pageProps']['content']
- body += f'{data.get("flyTitle", "")}
'
- body += f'{data["headline"]} '
- if data.get('rubric') and data.get('rubric') is not None:
- body += f'{data.get("rubric", "")}
'
- try:
- date = data['dateModified']
- except Exception:
- date = data['datePublished']
- dt = datetime.fromisoformat(date[:-1]) + timedelta(seconds=time.timezone)
- dt = dt.strftime('%b %d, %Y %I:%M %p')
- if data.get('dateline') is None:
- body += f'{dt}
'
- else:
- body += f'{dt + " | " + (data["dateline"])}
'
- main_image_url = safe_dict(data, 'leadComponent') or ''
- if main_image_url:
- body += process_web_node(data['leadComponent'])
- for node in data.get('body'):
- body += process_web_node(node)
- return '' + body + ' '
-
-
-def cleanup_html_article(root):
- main = root.xpath('//main')[0]
- body = root.xpath('//body')[0]
- for child in tuple(body):
- body.remove(child)
- body.append(main)
- main.set('id', '')
- main.tag = 'article'
- for x in root.xpath('//*[@style]'):
- x.set('style', '')
- for x in root.xpath('//button'):
- x.getparent().remove(x)
-
-
-def classes(classes):
- q = frozenset(classes.split(' '))
- return dict(attrs={
- 'class': lambda x: x and frozenset(x.split()).intersection(q)})
-
-
-def new_tag(soup, name, attrs=()):
- impl = getattr(soup, 'new_tag', None)
- if impl is not None:
- return impl(name, attrs=dict(attrs))
- return Tag(soup, name, attrs=attrs or None)
-
-
-class NoArticles(Exception):
- pass
-
-
-def process_url(url):
- if url.startswith('/'):
- url = 'https://www.economist.com' + url
- return url
-
-
-class Economist(BasicNewsRecipe):
- title = 'The Economist'
- language = 'en_GB'
- encoding = 'utf-8'
- masthead_url = 'https://www.livemint.com/lm-img/dev/economist-logo-oneline.png'
-
- __author__ = 'Kovid Goyal'
- description = (
- 'Global news and current affairs from a European'
- ' perspective. Best downloaded on Friday mornings (GMT)'
- )
- extra_css = '''
- em { color:#202020; }
- img {display:block; margin:0 auto;}
- '''
- oldest_article = 7.0
- resolve_internal_links = True
- remove_tags = [
- dict(name=['script', 'noscript', 'title', 'iframe', 'cf_floatingcontent', 'aside', 'footer', 'svg']),
- dict(attrs={'aria-label': 'Article Teaser'}),
- dict(attrs={'id': 'player'}),
- dict(attrs={
- 'class': [
- 'dblClkTrk', 'ec-article-info', 'share_inline_header',
- 'related-items', 'main-content-container', 'ec-topic-widget',
- 'teaser', 'blog-post__bottom-panel-bottom', 'blog-post__comments-label',
- 'blog-post__foot-note', 'blog-post__sharebar', 'blog-post__bottom-panel',
- 'newsletter-form', 'share-links-header', 'teaser--wrapped', 'latest-updates-panel__container',
- 'latest-updates-panel__article-link', 'blog-post__section'
- ]
- }
- ),
- dict(attrs={
- 'class': lambda x: x and 'blog-post__siblings-list-aside' in x.split()}),
- dict(attrs={'id': lambda x: x and 'gpt-ad-slot' in x}),
- classes(
- 'share-links-header teaser--wrapped latest-updates-panel__container'
- ' latest-updates-panel__article-link blog-post__section newsletter-form blog-post__bottom-panel'
- )
- ]
- keep_only_tags = [dict(name='article', id=lambda x: not x)]
- no_stylesheets = True
- remove_attributes = ['data-reactid', 'width', 'height']
- # economist.com has started throttling after about 60% of the total has
- # downloaded with connection reset by peer (104) errors.
- delay = 3
- browser_type = 'webengine'
- from_archive = True
- recipe_specific_options = {
- 'date': {
- 'short': 'The date of the edition to download (YYYY-MM-DD format)',
- 'long': 'For example, 2024-07-19',
- },
- 'res': {
- 'short': 'For hi-res images, select a resolution from the\nfollowing options: 834, 960, 1096, 1280, 1424',
- 'long': 'This is useful for non e-ink devices, and for a lower file size\nthan the default, use from 480, 384, 360, 256.',
- 'default': '600',
- },
- 'de': {
- 'short': 'Web Edition',
- 'long': 'Yes/No. Digital Edition does not skip some articles based on your location.',
- 'default': 'No',
- }
- }
-
- def __init__(self, *args, **kwargs):
- BasicNewsRecipe.__init__(self, *args, **kwargs)
- d = self.recipe_specific_options.get('de')
- if d and isinstance(d, str):
- if d.lower().strip() == 'yes':
- self.from_archive = True
-
- needs_subscription = False
-
- def get_browser(self, *args, **kwargs):
- if self.from_archive:
- kwargs['user_agent'] = (
- 'Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.6533.103 Mobile Safari/537.36 Liskov'
- )
- br = BasicNewsRecipe.get_browser(self, *args, **kwargs)
- else:
- kwargs['user_agent'] = 'TheEconomist-Lamarr-android'
- br = BasicNewsRecipe.get_browser(self, *args, **kwargs)
- br.addheaders += [
- ('accept', '*/*'),
- ('content-type', 'application/json'),
- ('apollographql-client-name', 'mobile-app-apollo'),
- ('apollographql-client-version', '3.50.0'),
- ('x-request-id', str(uuid4())),
- ]
- return br
-
- def publication_date(self):
- edition_date = self.recipe_specific_options.get('date')
- if edition_date and isinstance(edition_date, str):
- return parse_only_date(edition_date, as_utc=False)
- try:
- url = self.browser.open('https://www.economist.com/printedition').geturl()
- except Exception as e:
- self.log('Failed to fetch publication date with error: ' + str(e))
- return super().publication_date()
- return parse_only_date(url.split('/')[-1], as_utc=False)
-
- def economist_test_article(self):
- return [('Articles', [{'title':'test',
- 'url':'https://www.economist.com/leaders/2025/03/13/americas-bullied-allies-need-to-toughen-up'
- }])]
-
- def economist_return_index(self, ans):
- if not ans:
- raise NoArticles(
- 'Could not find any articles, either the '
- 'economist.com server is having trouble and you should '
- 'try later or the website format has changed and the '
- 'recipe needs to be updated.'
- )
- return ans
-
- def get_content_id(self, ed_date):
- id_query = {
- 'query': 'query EditionsQuery($from:Int$size:Int$ref:String!){section:canonical(ref:$ref){...EditionFragment __typename}}fragment EditionFragment on Content{hasPart(from:$from size:$size sort:"datePublished:desc"){total parts{id datePublished image{...ImageCoverFragment __typename}__typename}__typename}__typename}fragment ImageCoverFragment on Media{cover{headline width height url{canonical __typename}regionsAllowed __typename}__typename}', # noqa: E501
- 'operationName': 'EditionsQuery',
- 'variables':'{"from":0,"size":24,"ref":"/content/d06tg8j85rifiq3oo544c6b9j61dno2n"}',
- }
- id_url = 'https://cp2-graphql-gateway.p.aws.economist.com/graphql?' + urlencode(id_query, safe='()!', quote_via=quote)
- raw_id_data = self.index_to_soup(id_url, raw=True)
- data = json.loads(raw_id_data)['data']['section']['hasPart']['parts']
- for x in data:
- if ed_date in x['datePublished']:
- return x['id']
- return None
-
- def parse_index(self):
- if self.from_archive:
- return self.parse_web_index()
- edition_date = self.recipe_specific_options.get('date')
- # return self.economist_test_article()
- # url = 'https://www.economist.com/weeklyedition/archive'
- query = {
- 'query': 'query LatestWeeklyAutoEditionQuery($ref:String!){canonical(ref:$ref){hasPart(from:0 size:1 sort:"datePublished:desc"){parts{...WeeklyEditionFragment __typename}__typename}__typename}}fragment WeeklyEditionFragment on Content{id type datePublished image{...ImageCoverFragment __typename}url{canonical __typename}hasPart(size:100 sort:"publication.context.position"){parts{...ArticleFragment __typename}__typename}__typename}fragment ArticleFragment on Content{ad{grapeshot{channels{name __typename}__typename}__typename}articleSection{internal{id title:headline __typename}__typename}audio{main{id duration(format:"seconds")source:channel{id __typename}url{canonical __typename}__typename}__typename}byline dateline dateModified datePublished dateRevised flyTitle:subheadline id image{...ImageInlineFragment ...ImageMainFragment ...ImagePromoFragment __typename}print{title:headline flyTitle:subheadline rubric:description section{id title:headline __typename}__typename}publication{id tegID title:headline flyTitle:subheadline datePublished regionsAllowed url{canonical __typename}__typename}rubric:description source:channel{id __typename}tegID text(format:"json")title:headline type url{canonical __typename}topic contentIdentity{forceAppWebview mediaType articleType __typename}__typename}fragment ImageInlineFragment on Media{inline{url{canonical __typename}width height __typename}__typename}fragment ImageMainFragment on Media{main{url{canonical __typename}width height __typename}__typename}fragment ImagePromoFragment on Media{promo{url{canonical __typename}id width height __typename}__typename}fragment ImageCoverFragment on Media{cover{headline width height url{canonical __typename}regionsAllowed __typename}__typename}', # noqa: E501
- 'operationName': 'LatestWeeklyAutoEditionQuery',
- 'variables': '{"ref":"/content/d06tg8j85rifiq3oo544c6b9j61dno2n"}',
- }
- if edition_date and isinstance(edition_date, str):
- content_id = self.get_content_id(edition_date)
- if content_id:
- query = {
- 'query': 'query SpecificWeeklyEditionQuery($path:String!){section:canonical(ref:$path){...WeeklyEditionFragment __typename}}fragment WeeklyEditionFragment on Content{id type datePublished image{...ImageCoverFragment __typename}url{canonical __typename}hasPart(size:100 sort:"publication.context.position"){parts{...ArticleFragment __typename}__typename}__typename}fragment ArticleFragment on Content{ad{grapeshot{channels{name __typename}__typename}__typename}articleSection{internal{id title:headline __typename}__typename}audio{main{id duration(format:"seconds")source:channel{id __typename}url{canonical __typename}__typename}__typename}byline dateline dateModified datePublished dateRevised flyTitle:subheadline id image{...ImageInlineFragment ...ImageMainFragment ...ImagePromoFragment __typename}print{title:headline flyTitle:subheadline rubric:description section{id title:headline __typename}__typename}publication{id tegID title:headline flyTitle:subheadline datePublished regionsAllowed url{canonical __typename}__typename}rubric:description source:channel{id __typename}tegID text(format:"json")title:headline type url{canonical __typename}topic contentIdentity{forceAppWebview mediaType articleType __typename}__typename}fragment ImageInlineFragment on Media{inline{url{canonical __typename}width height __typename}__typename}fragment ImageMainFragment on Media{main{url{canonical __typename}width height __typename}__typename}fragment ImagePromoFragment on Media{promo{url{canonical __typename}id width height __typename}__typename}fragment ImageCoverFragment on Media{cover{headline width height url{canonical __typename}regionsAllowed __typename}__typename}', # noqa: E501
- 'operationName': 'SpecificWeeklyEditionQuery',
- 'variables': '{{"path":"{}"}}'.format(content_id),
- }
- url = 'https://cp2-graphql-gateway.p.aws.economist.com/graphql?' + urlencode(query, safe='()!', quote_via=quote)
- try:
- if edition_date and isinstance(edition_date, str):
- if not content_id:
- self.log(edition_date, ' not found, trying web edition.')
- self.from_archive = True
- return self.parse_web_index()
- raw = self.index_to_soup(url, raw=True)
- except Exception:
- self.log('Digital Edition Server is not reachable, try again after some time.')
- self.from_archive = True
- return self.parse_web_index()
- ans = self.economist_parse_index(raw)
- return self.economist_return_index(ans)
-
- def economist_parse_index(self, raw):
- # edition_date = self.recipe_specific_options.get('date')
- # if edition_date and isinstance(edition_date, str):
- # data = json.loads(raw)['data']['section']
- # else:
- # data = json.loads(raw)['data']['canonical']['hasPart']['parts'][0]
- try:
- data = json.loads(raw)['data']['section']
- except KeyError:
- data = json.loads(raw)['data']['canonical']['hasPart']['parts'][0]
- dt = datetime.fromisoformat(data['datePublished'][:-1]) + timedelta(seconds=time.timezone)
- dt = dt.strftime('%b %d, %Y')
- self.timefmt = ' [' + dt + ']'
- # get local issue cover, title
- try:
- region = json.loads(self.index_to_soup('https://geolocation-db.com/json', raw=True))['country_code']
- except Exception:
- region = ''
- for cov in data['image']['cover']:
- if region in cov['regionsAllowed']:
- self.description = cov['headline']
- self.cover_url = cov['url']['canonical'].replace('economist.com/',
- 'economist.com/cdn-cgi/image/width=960,quality=80,format=auto/')
- break
- else:
- self.description = data['image']['cover'][0]['headline']
- self.cover_url = data['image']['cover'][0]['url']['canonical'].replace('economist.com/',
- 'economist.com/cdn-cgi/image/width=960,quality=80,format=auto/')
- self.log('Got cover:', self.cover_url, '\n', self.description)
-
- feeds_dict = defaultdict(list)
- for part in safe_dict(data, 'hasPart', 'parts'):
- try:
- section = part['articleSection']['internal'][0]['title']
- except Exception:
- section = safe_dict(part, 'print', 'section', 'title') or 'section'
- if section not in feeds_dict:
- self.log(section)
- title = safe_dict(part, 'title')
- desc = safe_dict(part, 'rubric') or ''
- sub = safe_dict(part, 'flyTitle') or ''
- if sub and section != sub:
- desc = sub + ' :: ' + desc
- pt = PersistentTemporaryFile('.html')
- pt.write(json.dumps(part).encode('utf-8'))
- pt.close()
- url = 'file:///' + pt.name
- feeds_dict[section].append({'title': title, 'url': url, 'description': desc})
- self.log('\t', title, '\n\t\t', desc)
- return list(feeds_dict.items())
-
- def populate_article_metadata(self, article, soup, first):
- if not self.from_archive:
- article.url = soup.find('h1')['title']
-
- def preprocess_html(self, soup):
- width = '600'
- w = self.recipe_specific_options.get('res')
- if w and isinstance(w, str):
- width = w
- for img in soup.findAll('img', src=True):
- qua = 'economist.com/cdn-cgi/image/width=' + width + ',quality=80,format=auto/'
- img['src'] = img['src'].replace('economist.com/', qua)
- return soup
-
- def preprocess_raw_html(self, raw, url):
- if self.from_archive:
- return self.preprocess_raw_web_html(raw, url)
-
- # open('/t/raw.html', 'wb').write(raw.encode('utf-8'))
-
- body = ' '
- root = parse(body)
- load_article_from_json(raw, root)
-
- if '/interactive/' in url:
- return ('' + root.xpath('//h1')[0].text + ' '
- 'This article is supposed to be read in a browser.'
- ' ')
-
- for div in root.xpath('//div[@class="lazy-image"]'):
- noscript = list(div.iter('noscript'))
- if noscript and noscript[0].text:
- img = list(parse(noscript[0].text).iter('img'))
- if img:
- p = noscript[0].getparent()
- idx = p.index(noscript[0])
- p.insert(idx, p.makeelement('img', src=img[0].get('src')))
- p.remove(noscript[0])
- for x in root.xpath('//*[name()="script" or name()="style" or name()="source" or name()="meta"]'):
- x.getparent().remove(x)
- # the economist uses for small caps with a custom font
- for init in root.xpath('//span[@data-caps="initial"]'):
- init.set('style', 'font-weight:bold;')
- for x in root.xpath('//small'):
- if x.text and len(x) == 0:
- x.text = x.text.upper()
- x.tag = 'span'
- x.set('style', 'font-variant: small-caps')
- for h2 in root.xpath('//h2'):
- h2.tag = 'h4'
- for x in root.xpath('//figcaption'):
- x.set('style', 'text-align:center; font-size:small;')
- for x in root.xpath('//cite'):
- x.tag = 'blockquote'
- x.set('style', 'color:#404040;')
- raw = etree.tostring(root, encoding='unicode')
- return raw
-
- def parse_index_from_printedition(self):
- # return self.economist_test_article()
- edition_date = self.recipe_specific_options.get('date')
- if edition_date and isinstance(edition_date, str):
- url = 'https://www.economist.com/weeklyedition/' + edition_date
- self.timefmt = ' [' + edition_date + ']'
- else:
- url = 'https://www.economist.com/printedition'
- # raw = open('/t/raw.html').read()
- raw = self.index_to_soup(url, raw=True)
- # with open('/t/raw.html', 'wb') as f:
- # f.write(raw)
- soup = self.index_to_soup(raw)
- # nav = soup.find(attrs={'class':'navigation__wrapper'})
- # if nav is not None:
- # a = nav.find('a', href=lambda x: x and '/printedition/' in x)
- # if a is not None:
- # self.log('Following nav link to current edition', a['href'])
- # soup = self.index_to_soup(process_url(a['href']))
- ans = self.economist_parse_index(soup)
- if not ans:
- raise NoArticles(
- 'Could not find any articles, either the '
- 'economist.com server is having trouble and you should '
- 'try later or the website format has changed and the '
- 'recipe needs to be updated.'
- )
- return ans
-
- def eco_find_image_tables(self, soup):
- for x in soup.findAll('table', align=['right', 'center']):
- if len(x.findAll('font')) in (1, 2) and len(x.findAll('img')) == 1:
- yield x
-
- def postprocess_html(self, soup, first):
- for img in soup.findAll('img', srcset=True):
- del img['srcset']
- for table in list(self.eco_find_image_tables(soup)):
- caption = table.find('font')
- img = table.find('img')
- div = new_tag(soup, 'div')
- div['style'] = 'text-align:left;font-size:70%'
- ns = NavigableString(self.tag_to_string(caption))
- div.insert(0, ns)
- div.insert(1, new_tag(soup, 'br'))
- del img['width']
- del img['height']
- img.extract()
- div.insert(2, img)
- table.replaceWith(div)
- return soup
-
- def canonicalize_internal_url(self, url, is_link=True):
- if url.endswith('/print'):
- url = url.rpartition('/')[0]
- return BasicNewsRecipe.canonicalize_internal_url(self, url, is_link=is_link)
-
- # archive code
- def parse_web_index(self):
- edition_date = self.recipe_specific_options.get('date')
- # return self.economist_test_article()
- if edition_date and isinstance(edition_date, str):
- url = 'https://www.economist.com/weeklyedition/' + edition_date
- self.timefmt = ' [' + edition_date + ']'
- else:
- url = 'https://www.economist.com/weeklyedition'
- soup = self.index_to_soup(url)
- ans = self.economist_parse_web_index(soup)
- return self.economist_return_index(ans)
-
- def economist_parse_web_index(self, soup):
- script_tag = soup.find('script', id='__NEXT_DATA__')
- if script_tag is not None:
- data = json.loads(script_tag.string)
- # open('/t/raw.json', 'w').write(json.dumps(data, indent=2, sort_keys=True))
- self.description = safe_dict(data, 'props', 'pageProps', 'content', 'headline')
- self.timefmt = ' [' + safe_dict(data, 'props', 'pageProps', 'content', 'formattedIssueDate') + ']'
- self.cover_url = safe_dict(data, 'props', 'pageProps', 'content', 'cover', 'url').replace(
- 'economist.com/', 'economist.com/cdn-cgi/image/width=960,quality=80,format=auto/').replace('SQ_', '')
- self.log('Got cover:', self.cover_url)
-
- feeds = []
-
- for part in safe_dict(
- data, 'props', 'pageProps', 'content', 'headerSections'
- ) + safe_dict(data, 'props', 'pageProps', 'content', 'sections'):
- section = safe_dict(part, 'name') or ''
- if not section:
- continue
- self.log(section)
-
- articles = []
-
- for ar in part['articles']:
- title = safe_dict(ar, 'headline') or ''
- url = process_url(safe_dict(ar, 'url') or '')
- if not title or not url:
- continue
- desc = safe_dict(ar, 'rubric') or ''
- sub = safe_dict(ar, 'flyTitle') or ''
- if sub and section != sub:
- desc = sub + ' :: ' + desc
- self.log('\t', title, '\n\t', desc, '\n\t\t', url)
- articles.append({'title': title, 'url': url, 'description': desc})
- feeds.append((section, articles))
- return feeds
- else:
- return []
-
- def preprocess_raw_web_html(self, raw, url):
- # open('/t/raw.html', 'wb').write(raw.encode('utf-8'))
- root_ = parse(raw)
- if '/interactive/' in url:
- return ('' + root_.xpath('//h1')[0].text + ' '
- 'This article is supposed to be read in a browser'
- ' ')
-
- script = root_.xpath('//script[@id="__NEXT_DATA__"]')
-
- html = load_article_from_web_json(script[0].text)
-
- root = parse(html)
- for div in root.xpath('//div[@class="lazy-image"]'):
- noscript = list(div.iter('noscript'))
- if noscript and noscript[0].text:
- img = list(parse(noscript[0].text).iter('img'))
- if img:
- p = noscript[0].getparent()
- idx = p.index(noscript[0])
- p.insert(idx, p.makeelement('img', src=img[0].get('src')))
- p.remove(noscript[0])
- for x in root.xpath('//*[name()="script" or name()="style" or name()="source" or name()="meta"]'):
- x.getparent().remove(x)
- # the economist uses for small caps with a custom font
- for init in root.xpath('//span[@data-caps="initial"]'):
- init.set('style', 'font-weight:bold;')
- for x in root.xpath('//small'):
- if x.text and len(x) == 0:
- x.text = x.text.upper()
- x.tag = 'span'
- x.set('style', 'font-variant: small-caps')
- for h2 in root.xpath('//h2'):
- h2.tag = 'h4'
- for x in root.xpath('//figcaption'):
- x.set('style', 'text-align:center; font-size:small;')
- for x in root.xpath('//cite'):
- x.tag = 'blockquote'
- x.set('style', 'color:#404040;')
- raw = etree.tostring(root, encoding='unicode')
- return raw
-
- raw_ar = read_url([], 'https://archive.is/latest/' + url)
- archive = BeautifulSoup(str(raw_ar))
- art = archive.find('article')
- if art:
- bdy = art.findAll('section')
- if len(bdy) != 0:
- content = bdy[-1]
- else:
- content = archive.find('div', attrs={'itemprop':'text'})
- soup = BeautifulSoup(raw)
- article = soup.find('section', attrs={'id':'body'})
- if not article:
- article = soup.find('div', attrs={'itemprop':'text'})
- if not article:
- article = soup.find(attrs={'itemprop':'blogPost'})
- if article and content:
- self.log('**fetching archive content')
- article.append(content)
-
- div = soup.findAll(attrs={'style': lambda x: x and x.startswith(
- ('color:rgb(13, 13, 13);', 'color: rgb(18, 18, 18);')
- )})
- for p in div:
- p.name = 'p'
- return str(soup)
- return raw
- return raw
-
- def preprocess_web_html(self, soup):
- for img in soup.findAll('img', attrs={'old-src':True}):
- img['src'] = img['old-src']
- for a in soup.findAll('a', href=True):
- a['href'] = 'http' + a['href'].split('http')[-1]
- for fig in soup.findAll('figure'):
- fig['class'] = 'sub'
- for sty in soup.findAll(attrs={'style':True}):
- del sty['style']
- width = '600'
- w = self.recipe_specific_options.get('res')
- if w and isinstance(w, str):
- width = w
- for img in soup.findAll('img', src=True):
- if '/cdn-cgi/image/' not in img['src']:
- qua = 'economist.com/cdn-cgi/image/width=' + width + ',quality=80,format=auto/'
- img['src'] = img['src'].replace('economist.com/', qua)
- else:
- img['src'] = re.sub(r'width=\d+', 'width=' + width, img['src'])
- return soup
-
-
-calibre_most_common_ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/custom_recipes/The New York Times_1000.recipe b/dotfiles/system/.config/calibre/custom_recipes/The New York Times_1000.recipe
deleted file mode 100644
index db3c40b..0000000
--- a/dotfiles/system/.config/calibre/custom_recipes/The New York Times_1000.recipe
+++ /dev/null
@@ -1,368 +0,0 @@
-#!/usr/bin/env python
-# vim:fileencoding=utf-8
-# License: GPLv3 Copyright: 2018, Kovid Goyal
-
-from __future__ import absolute_import, division, print_function, unicode_literals
-
-import datetime
-import json
-import re
-
-import mechanize
-
-from calibre import strftime
-from calibre.ebooks.BeautifulSoup import Tag
-from calibre.utils.date import strptime
-from calibre.web.feeds.news import BasicNewsRecipe
-from polyglot.urllib import urlencode
-
-is_web_edition = True
-use_wayback_machine = False
-
-# This is an Apollo persisted query hash which you can get
-# from looking at the XHR requests made by: https://www.nytimes.com/section/todayspaper
-# or by https://www.nytimes.com/section/world
-persistedQuery = '1f99120a11e94dd62a9474f68ee1255537ee3cf7eac20a0377819edb2fa1fef7'
-
-# The sections to download when downloading the web edition, comment out
-# the section you are not interested in
-web_sections = [
- ('World', 'world'),
- ('U.S.', 'us'),
- ('Politics', 'politics'),
- # ('New York', 'nyregion'),
- ('Business', 'business'),
- ('Technology', 'technology'),
- ('Sports', 'sports'),
- ('Science', 'science'),
- ('Health', 'health'),
- ('Opinion', 'opinion'),
- # ('Arts', 'arts'),
- ('Books', 'books'),
- # ('Movies', 'movies'),
- # ('Music', 'arts/music'),
- # ('Television', 'arts/television'),
- # ('Style', 'style'),
- # ('Dining & Wine', 'food'),
- # ('Fashion & Style', 'fashion'),
- # ('Home & Garden', 'garden'),
- # ('Travel', 'travel'),
- ('Education', 'education'),
- # ('Multimedia', 'multimedia'),
- ('Obituaries', 'obituaries'),
- # ('Sunday Magazine', 'magazine')
-]
-# web_sections = [ ('Business', 'business'), ]
-url_date_pat = re.compile(r'/(2\d\d\d)/(\d\d)/(\d\d)/')
-
-
-def date_from_url(url):
- m = url_date_pat.search(url)
- if m is not None:
- return datetime.date(*map(int, m.groups()))
-
-
-def format_date(d):
- try:
- return strftime(' [%a, %d %b %Y]', d)
- except Exception:
- return strftime(' [%Y/%m/%d]', d)
-
-
-def classes(classes):
- q = frozenset(classes.split(' '))
- return dict(attrs={
- 'class': lambda x: x and frozenset(x.split()).intersection(q)})
-
-
-def new_tag(soup, name, attrs=()):
- impl = getattr(soup, 'new_tag', None)
- if impl is not None:
- return impl(name, attrs=dict(attrs))
- return Tag(soup, name, attrs=attrs or None)
-
-
-class NewYorkTimes(BasicNewsRecipe):
- if is_web_edition:
- title = 'The New York Times (Web)'
- description = (
- 'New York Times (Web). You can edit the recipe to remove sections you are not interested in. '
- 'Use advanced menu to make changes to fetch Todays Paper'
- )
- else:
- title = 'The New York Times'
- description = (
- 'New York Times. Todays Paper '
- 'Use advanced menu to make changes to fetch Web Edition'
- )
- encoding = 'utf-8'
- __author__ = 'Kovid Goyal'
- language = 'en_US'
- ignore_duplicate_articles = {'title', 'url'}
- no_stylesheets = True
- oldest_web_edition_article = 1 # days
-
- extra_css = '''
- .byl, .time { font-size:small; color:#202020; }
- .cap { font-size:small; text-align:center; }
- .cred { font-style:italic; font-size:small; }
- em, blockquote { color: #202020; }
- .sc { font-variant: small-caps; }
- .lbl { font-size:small; color:#404040; }
- img { display:block; margin:0 auto; }
- '''
-
- @property
- def nyt_parser(self):
- ans = getattr(self, '_nyt_parser', None)
- if ans is None:
- from calibre.live import load_module
- self._nyt_parser = ans = load_module('calibre.web.site_parsers.nytimes')
- return ans
-
- def get_nyt_page(self, url, skip_wayback=False):
- if use_wayback_machine and not skip_wayback:
- from calibre import browser
- return self.nyt_parser.download_url(url, browser())
- return self.index_to_soup(url, raw=True)
-
- def preprocess_raw_html(self, raw_html, url):
- cleaned = self.nyt_parser.clean_js_json(raw_html)
- return self.nyt_parser.extract_html(self.index_to_soup(cleaned), url)
-
- articles_are_obfuscated = use_wayback_machine
-
- if use_wayback_machine:
- def get_obfuscated_article(self, url):
- from calibre.ptempfile import PersistentTemporaryFile
- with PersistentTemporaryFile() as tf:
- tf.write(self.get_nyt_page(url))
- return tf.name
-
- recipe_specific_options = {
- 'web': {
- 'short': 'Type in yes, if you want ' + ('Todays Paper' if is_web_edition else 'Web Edition'),
- 'default': 'Web Edition' if is_web_edition else 'Todays Paper',
- },
- 'days': {
- 'short': 'Oldest article to download from this news source. In days ',
- 'long': 'For example, 1, gives you articles from the past 24 hours\n(Works only for Web_Edition)',
- 'default': str(oldest_web_edition_article)
- },
- 'date': {
- 'short': 'The date of the edition to download (YYYY/MM/DD format)\nUsed to fetch past editions of NYT newspaper',
- 'long': 'For example, 2024/07/16'
- },
- 'res': {
- 'short': (
- 'For hi-res images, select a resolution from the following\noptions: '
- 'popup, jumbo, mobileMasterAt3x, superJumbo'
- ),
- 'long': (
- 'This is useful for non e-ink devices, and for a lower file size\nthan '
- 'the default, use mediumThreeByTwo440, mediumThreeByTwo225, articleInline.'
- ),
- },
- 'comp': {
- 'short': 'Compress News Images?',
- 'long': 'enter yes',
- 'default': 'no'
- }
- }
-
- def __init__(self, *args, **kwargs):
- BasicNewsRecipe.__init__(self, *args, **kwargs)
- c = self.recipe_specific_options.get('comp')
- d = self.recipe_specific_options.get('days')
- w = self.recipe_specific_options.get('web')
- self.is_web_edition = is_web_edition
- if w and isinstance(w, str):
- if w == 'yes':
- self.is_web_edition = not is_web_edition
- if d and isinstance(d, str):
- self.oldest_web_edition_article = float(d)
- if c and isinstance(c, str):
- if c.lower() == 'yes':
- self.compress_news_images = True
-
- def read_todays_paper(self):
- pdate = self.recipe_specific_options.get('date')
- templ = 'https://www.nytimes.com/issue/todayspaper/{}/todays-new-york-times'
- if pdate and isinstance(pdate, str):
- return pdate, self.index_to_soup(templ.format(pdate))
- # Cant figure out how to get the date so just try todays and yesterdays dates
- date = datetime.date.today()
- pdate = date.strftime('%Y/%m/%d')
- try:
- soup = self.index_to_soup(templ.format(pdate))
- except Exception as e:
- if getattr(e, 'code', None) == 404:
- date -= datetime.timedelta(days=1)
- pdate = date.strftime('%Y/%m/%d')
- soup = self.index_to_soup(templ.format(pdate))
- else:
- raise
- self.log("Using today's paper from:", pdate)
- return pdate, soup
-
- def read_nyt_metadata(self):
- pdate, soup = self.read_todays_paper()
- date = strptime(pdate, '%Y/%m/%d', assume_utc=False, as_utc=False)
- self.cover_url = 'https://static01.nyt.com/images/{}/nytfrontpage/scan.jpg'.format(pdate)
- self.timefmt = strftime(' [%d %b, %Y]', date)
- self.nytimes_publication_date = pdate
- script = soup.findAll('script', text=lambda x: x and 'window.__preloadedData' in x)[0]
- script = type(u'')(script)
- raw_json = script[script.find('{'):script.rfind(';')].strip().rstrip(';') # }}
- clean_json = self.nyt_parser.clean_js_json(raw_json)
- self.nytimes_graphql_config = json.loads(clean_json)['config']
- return soup
-
- def nyt_graphql_query(self, qid, operationName='CollectionsQuery'):
- query = {
- 'operationName': operationName,
- 'variables': json.dumps({
- 'id': qid,
- 'first': 10,
- 'exclusionMode': 'HIGHLIGHTS_AND_EMBEDDED',
- 'isFetchMore':False,
- 'isTranslatable':False,
- 'isEspanol':False,
- 'highlightsListUri':'nyt://per/personalized-list/__null__',
- 'highlightsListFirst':0,
- 'hasHighlightsList':False
- }, separators=',:'),
- 'extensions': json.dumps({
- 'persistedQuery': {
- 'version':1,
- 'sha256Hash': persistedQuery,
- },
- }, separators=',:')
- }
- url = self.nytimes_graphql_config['gqlUrlClient'] + '?' + urlencode(query)
- br = self.browser
- # br.set_debug_http(True)
- headers = dict(self.nytimes_graphql_config['gqlRequestHeaders'])
- headers['Accept'] = 'application/json'
- req = mechanize.Request(url, headers=headers)
- raw = br.open(req).read()
- # open('/t/raw.json', 'wb').write(raw)
- return json.loads(raw)
-
- def parse_todays_page(self):
- self.read_nyt_metadata()
- query_id = '/issue/todayspaper/{}/todays-new-york-times'.format(self.nytimes_publication_date)
- data = self.nyt_graphql_query(query_id)
- return parse_todays_page(data, self.log)
-
- def parse_web_sections(self):
- self.read_nyt_metadata()
- feeds = []
- for section_title, slug in web_sections:
- query_id = '/section/' + slug
- try:
- data = self.nyt_graphql_query(query_id)
- self.log('Section:', section_title)
- articles = parse_web_section(data, log=self.log, title=section_title)
- except Exception as e:
- self.log('Failed to parse section:', section_title, 'with error:', e)
- articles = []
- if articles:
- feeds.append((section_title, articles))
- else:
- # open('/t/raw.json', 'w').write(json.dumps(data, indent=2))
- self.log(' No articles found in section:', section_title)
- if self.test and len(feeds) >= self.test[0]:
- break
- return feeds
-
- def parse_index(self):
- # return [('All articles', [
- # {'title': 'XXXXX', 'url': 'https://www.nytimes.com/2020/11/27/world/americas/coronavirus-migrants-venezuela.html'},
- # ])]
- if self.is_web_edition:
- return self.parse_web_sections()
- return self.parse_todays_page()
-
- def get_browser(self, *args, **kwargs):
- kwargs['user_agent'] = 'User-Agent: Mozilla/5.0 (compatible; archive.org_bot; Wayback Machine Live Record; +http://archive.org/details/archive.org_bot)'
- br = BasicNewsRecipe.get_browser(self, *args, **kwargs)
- return br
-
- def preprocess_html(self, soup):
- w = self.recipe_specific_options.get('res')
- if w and isinstance(w, str):
- res = '-' + w
- for img in soup.findAll('img', attrs={'src':True}):
- if '-article' in img['src']:
- ext = img['src'].split('?')[0].split('.')[-1]
- img['src'] = img['src'].rsplit('-article', 1)[0] + res + '.' + ext
- for c in soup.findAll('div', attrs={'class':'cap'}):
- for p in c.findAll(['p', 'div']):
- p.name = 'span'
- return soup
-
- def get_article_url(self, article):
- url = BasicNewsRecipe.get_article_url(self, article)
- if not re.search(r'/video/|/athletic/|/card/', url):
- return url
- self.log('\tSkipping ', url)
-
-
-def asset_to_article(asset):
- title = asset['headline']['default']
- return {'title': title, 'url': asset['url'], 'description': asset['summary']}
-
-
-def parse_todays_page(data, log=print):
- containers = data['data']['legacyCollection']['groupings'][0]['containers']
- feeds = []
- for cont in containers:
- if cont['__typename'] != 'LegacyCollectionContainer':
- continue
- section_name = cont['label'].strip()
- if not section_name:
- continue
- log(section_name)
- articles = []
- for rel in cont['relations']:
- if rel.get('__typename') == 'LegacyCollectionRelation':
- asset = rel['asset']
- if asset['__typename'] == 'Article':
- articles.append(asset_to_article(asset))
- log(' ', articles[-1]['title'] + ':', articles[-1]['url'])
- if articles:
- feeds.append((section_name, articles))
- return feeds
-
-
-def parse_web_section(data, log=print, title=''):
- articles = []
- try:
- containers = data['data']['legacyCollection']['collectionsPage']
- if containers.get('embeddedCollections'):
- containers = containers['embeddedCollections']
- else:
- containers = [containers]
- except Exception as e:
- log('Failed to parse web section', title, 'with error:', e)
- return articles
- for cont in containers:
- for s in cont['stream']['edges']:
- asset = s['node']
- if asset['__typename'] == 'Article':
- articles.append(asset_to_article(asset))
- log(' ', articles[-1]['title'] + ':', articles[-1]['url'])
- return articles
-
-
-if __name__ == '__main__':
- import sys
- data = json.loads(open(sys.argv[-1], 'rb').read())
- if is_web_edition:
- parse_web_section(data)
- else:
- parse_todays_page(data)
-
-
-calibre_most_common_ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
diff --git a/dotfiles/system/.config/calibre/custom_recipes/index.json b/dotfiles/system/.config/calibre/custom_recipes/index.json
deleted file mode 100644
index 0d9451b..0000000
--- a/dotfiles/system/.config/calibre/custom_recipes/index.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "1001": [
- "The Economist",
- "The Economist_1001.recipe"
- ]
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/customize.py.json b/dotfiles/system/.config/calibre/customize.py.json
deleted file mode 100644
index 310bdb1..0000000
--- a/dotfiles/system/.config/calibre/customize.py.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
- "disabled_plugins": {
- "__class__": "set",
- "__value__": [
- "Amazon UK Kindle",
- "OZON.ru",
- "Amazon IN Kindle",
- "Baen Ebooks",
- "Wolne Lektury",
- "eBook.nl",
- "Feedbooks",
- "Amazon AU Kindle",
- "Библио.бг",
- "Amazon ES Kindle",
- "Mills and Boon UK",
- "ebook.de",
- "Legimi",
- "Bubok Portugal",
- "MobileRead",
- "Amazon FR Kindle",
- "МоÑта библиотека",
- "Ebookpoint",
- "Woblink",
- "Bubok Spain",
- "LitRes",
- "Amazon DE Kindle",
- "EbooksGratuits.com",
- "Kobo",
- "Empik",
- "Beam EBooks DE",
- "RW2010",
- "Amazon IT Kindle",
- "Nexto",
- "Amazon CA Kindle",
- "Publio",
- "Świat Ebooków",
- "Smashwords",
- "Virtualo",
- "Weightless Books"
- ]
- },
- "enabled_plugins": {
- "__class__": "set",
- "__value__": [
- "ManyBooks",
- "Archive.org",
- "Amazon Kindle",
- "Pragmatic Bookshelf",
- "Big Book Search",
- "Google Images",
- "Google Books",
- "eBooks.com",
- "Barnes and Noble",
- "Project Gutenberg"
- ]
- },
- "filetype_mapping": {},
- "plugin_customization": {},
- "plugins": {
- "Apple Books covers": "/home/cjennings/.config/calibre/plugins/Apple Books covers.zip",
- "Barnes & Noble": "/home/cjennings/.config/calibre/plugins/Barnes & Noble.zip",
- "Clean Comments": "/home/cjennings/.config/calibre/plugins/Clean Comments.zip",
- "Extract ISBN": "/home/cjennings/.config/calibre/plugins/Extract ISBN.zip",
- "Favourites Menu": "/home/cjennings/.config/calibre/plugins/Favourites Menu.zip",
- "Find Duplicates": "/home/cjennings/.config/calibre/plugins/Find Duplicates.zip",
- "Hardcover": "/home/cjennings/.config/calibre/plugins/Hardcover.zip",
- "Kindle Collections": "/home/cjennings/.config/calibre/plugins/Kindle Collections.zip",
- "Kindle hi-res covers": "/home/cjennings/.config/calibre/plugins/Kindle hi-res covers.zip",
- "Kobo Metadata": "/home/cjennings/.config/calibre/plugins/Kobo Metadata.zip",
- "Kobo Utilities": "/home/cjennings/.config/calibre/plugins/Kobo Utilities.zip",
- "Markdown Output": "/home/cjennings/.config/calibre/plugins/Markdown Output.zip",
- "Reading List": "/home/cjennings/.config/calibre/plugins/Reading List.zip",
- "Search The Internet": "/home/cjennings/.config/calibre/plugins/Search The Internet.zip",
- "Standard Ebooks": "/home/cjennings/.config/calibre/plugins/Standard Ebooks.zip"
- }
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/device_drivers_KOBOTOUCH.py.json b/dotfiles/system/.config/calibre/device_drivers_KOBOTOUCH.py.json
deleted file mode 100644
index 230e5b8..0000000
--- a/dotfiles/system/.config/calibre/device_drivers_KOBOTOUCH.py.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "affect_hyphenation": false,
- "bookstats_pagecount_template": "",
- "bookstats_timetoread_lower_template": "",
- "bookstats_timetoread_upper_template": "",
- "bookstats_wordcount_template": "",
- "collections_columns": "",
- "collections_template": "",
- "create_collections": false,
- "debugging_title": "",
- "delete_empty_collections": false,
- "disable_hyphenation": false,
- "dithered_covers": false,
- "driver_version": "2.6.0",
- "extra_customization": [],
- "force_series_id": false,
- "format_map": [
- "kepub",
- "epub",
- "cbz",
- "cbr"
- ],
- "hyphenation_limit_lines": 2,
- "hyphenation_min_chars": 6,
- "hyphenation_min_chars_after": 3,
- "hyphenation_min_chars_before": 3,
- "ignore_collections_names": "",
- "keep_cover_aspect": false,
- "kepubify": true,
- "letterbox_fs_covers": false,
- "letterbox_fs_covers_color": "#000000",
- "manage_collections": true,
- "modify_css": false,
- "override_kobo_replace_existing": true,
- "per_device_css": "{}",
- "png_covers": false,
- "read_metadata": true,
- "save_template": "{author_sort}/{title} - {authors}",
- "series_index_template": "",
- "show_archived_books": false,
- "show_previews": false,
- "show_recommendations": false,
- "subtitle_template": "",
- "support_newer_firmware": false,
- "template_for_kepubify": "",
- "update_bookstats": false,
- "update_core_metadata": false,
- "update_device_metadata": true,
- "update_purchased_kepubs": false,
- "update_series": true,
- "update_subtitle": false,
- "upload_covers": true,
- "upload_grayscale": false,
- "use_author_sort": false,
- "use_collections_columns": true,
- "use_collections_template": false,
- "use_series_index_template": false,
- "use_subdirs": true
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/device_drivers_KOBOTOUCHEXTENDED.py.json b/dotfiles/system/.config/calibre/device_drivers_KOBOTOUCHEXTENDED.py.json
deleted file mode 100644
index bfc0600..0000000
--- a/dotfiles/system/.config/calibre/device_drivers_KOBOTOUCHEXTENDED.py.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "bookstats_pagecount_template": "",
- "bookstats_timetoread_lower_template": "",
- "bookstats_timetoread_upper_template": "",
- "bookstats_wordcount_template": "",
- "clean_markup": false,
- "collections_columns": "",
- "collections_template": "",
- "create_collections": false,
- "debugging_title": "",
- "delete_empty_collections": false,
- "disable_hyphenation": false,
- "dithered_covers": false,
- "driver_version": "3.6.3",
- "extra_customization": [],
- "extra_features": true,
- "file_copy_dir": "",
- "format_map": [
- "kepub",
- "epub",
- "cbr",
- "cbz"
- ],
- "full_page_numbers": false,
- "hyphenate": false,
- "hyphenate_chars": 6,
- "hyphenate_chars_after": 3,
- "hyphenate_chars_before": 3,
- "hyphenate_limit_lines": 2,
- "ignore_collections_names": "",
- "keep_cover_aspect": false,
- "kepubify_template": "",
- "letterbox_fs_covers": false,
- "letterbox_fs_covers_color": "#000000",
- "manage_collections": true,
- "modify_css": false,
- "override_kobo_replace_existing": true,
- "png_covers": false,
- "read_metadata": true,
- "save_template": "{author_sort}/{title} - {authors}",
- "show_archived_books": false,
- "show_previews": false,
- "show_recommendations": false,
- "skip_failed": false,
- "smarten_punctuation": false,
- "subtitle_template": "",
- "support_newer_firmware": false,
- "update_bookstats": false,
- "update_core_metadata": false,
- "update_device_metadata": true,
- "update_purchased_kepubs": false,
- "update_series": true,
- "update_subtitle": false,
- "upload_covers": false,
- "upload_encumbered": false,
- "upload_grayscale": false,
- "use_author_sort": false,
- "use_collections_columns": true,
- "use_collections_template": false,
- "use_subdirs": true,
- "use_template": false
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/device_drivers_USER_DEFINED.py.json b/dotfiles/system/.config/calibre/device_drivers_USER_DEFINED.py.json
deleted file mode 100644
index 7963676..0000000
--- a/dotfiles/system/.config/calibre/device_drivers_USER_DEFINED.py.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "extra_customization": [
- "",
- "",
- "",
- null,
- "",
- "",
- "",
- "",
- "",
- "",
- false
- ],
- "format_map": [
- "epub",
- "mobi",
- "pdf"
- ],
- "read_metadata": true,
- "save_template": "{author_sort}/{title} - {authors}",
- "use_author_sort": false,
- "use_subdirs": true
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/fonts/scanner_cache.json b/dotfiles/system/.config/calibre/fonts/scanner_cache.json
deleted file mode 100644
index 4f118b6..0000000
--- a/dotfiles/system/.config/calibre/fonts/scanner_cache.json
+++ /dev/null
@@ -1,24018 +0,0 @@
-{
- "fonts": {
- "/home/cjennings/.local/share/fonts/AppleColorEmoji.ttf||42722048:1747702940.241918": {
- "family_name": "Apple Color Emoji",
- "font-family": "Apple Color Emoji",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Apple Color Emoji",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 6,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/AppleColorEmoji.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/BerkeleyMono-Bold.otf||74596:1747702940.241918": {
- "family_name": "Berkeley Mono",
- "font-family": "Berkeley Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Berkeley Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/BerkeleyMono-Bold.otf",
- "preferred_family_name": "Berkeley Mono",
- "preferred_subfamily_name": "Bold",
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/BerkeleyMono-Bold.ttf||114872:1747702940.242918": {
- "family_name": "Berkeley Mono",
- "font-family": "Berkeley Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Berkeley Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/BerkeleyMono-Bold.ttf",
- "preferred_family_name": "Berkeley Mono",
- "preferred_subfamily_name": "Bold",
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/BerkeleyMono-BoldItalic.otf||75756:1747702940.242918": {
- "family_name": "Berkeley Mono",
- "font-family": "Berkeley Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Berkeley Mono Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/BerkeleyMono-BoldItalic.otf",
- "preferred_family_name": "Berkeley Mono",
- "preferred_subfamily_name": "Bold Italic",
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/BerkeleyMono-BoldItalic.ttf||116664:1747702940.243918": {
- "family_name": "Berkeley Mono",
- "font-family": "Berkeley Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Berkeley Mono Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/BerkeleyMono-BoldItalic.ttf",
- "preferred_family_name": "Berkeley Mono",
- "preferred_subfamily_name": "Bold Italic",
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/BerkeleyMono-Italic.otf||75172:1747702940.243918": {
- "family_name": "Berkeley Mono",
- "font-family": "Berkeley Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Berkeley Mono Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/BerkeleyMono-Italic.otf",
- "preferred_family_name": "Berkeley Mono",
- "preferred_subfamily_name": "Italic",
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/BerkeleyMono-Italic.ttf||115636:1747702940.243918": {
- "family_name": "Berkeley Mono",
- "font-family": "Berkeley Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Berkeley Mono Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/BerkeleyMono-Italic.ttf",
- "preferred_family_name": "Berkeley Mono",
- "preferred_subfamily_name": "Italic",
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/BerkeleyMono-Regular.otf||72688:1747702940.2449179": {
- "family_name": "Berkeley Mono",
- "font-family": "Berkeley Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Berkeley Mono Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/BerkeleyMono-Regular.otf",
- "preferred_family_name": "Berkeley Mono",
- "preferred_subfamily_name": "Regular",
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/BerkeleyMono-Regular.ttf||114656:1747702940.2449179": {
- "family_name": "Berkeley Mono",
- "font-family": "Berkeley Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Berkeley Mono Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/BerkeleyMono-Regular.ttf",
- "preferred_family_name": "Berkeley Mono",
- "preferred_subfamily_name": "Regular",
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/BerkeleyMonoVariable-Italic.ttf||103704:1747702940.2449179": {
- "family_name": "Berkeley Mono Variable Italic",
- "font-family": "Berkeley Mono Variable Italic",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Berkeley Mono Variable Italic",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/BerkeleyMonoVariable-Italic.ttf",
- "preferred_family_name": "Berkeley Mono Variable",
- "preferred_subfamily_name": "Italic",
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/BerkeleyMonoVariable-Regular.ttf||101012:1747702940.2459176": {
- "family_name": "Berkeley Mono Variable",
- "font-family": "Berkeley Mono Variable",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Berkeley Mono Variable Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/BerkeleyMonoVariable-Regular.ttf",
- "preferred_family_name": "Berkeley Mono Variable",
- "preferred_subfamily_name": "Regular",
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-Bold.otf||112176:1747702940.2459176": {
- "family_name": "Cartograph CF Bold",
- "font-family": "Cartograph CF Bold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 8,
- "full_name": "Cartograph CF Bold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 8,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-Bold.otf",
- "preferred_family_name": "Cartograph CF",
- "preferred_subfamily_name": "Bold",
- "subfamily_name": "Regular",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-BoldItalic.otf||120580:1747702940.2469175": {
- "family_name": "Cartograph CF Bold",
- "font-family": "Cartograph CF Bold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 8,
- "full_name": "Cartograph CF Bold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 8,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-BoldItalic.otf",
- "preferred_family_name": "Cartograph CF",
- "preferred_subfamily_name": "Bold Italic",
- "subfamily_name": "Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-DemiBold.otf||110188:1747702940.2469175": {
- "family_name": "Cartograph CF Demi Bold",
- "font-family": "Cartograph CF Demi Bold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 8,
- "full_name": "Cartograph CF Demi Bold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 7,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-DemiBold.otf",
- "preferred_family_name": "Cartograph CF",
- "preferred_subfamily_name": "Demi Bold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-DemiBoldItalic.otf||121136:1747702940.2479174": {
- "family_name": "Cartograph CF Demi Bold",
- "font-family": "Cartograph CF Demi Bold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 8,
- "full_name": "Cartograph CF Demi Bold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 7,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-DemiBoldItalic.otf",
- "preferred_family_name": "Cartograph CF",
- "preferred_subfamily_name": "Demi Bold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-ExtraBold.otf||111532:1747702940.2479174": {
- "family_name": "Cartograph CF Extra Bold",
- "font-family": "Cartograph CF Extra Bold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 8,
- "full_name": "Cartograph CF Extra Bold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 9,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-ExtraBold.otf",
- "preferred_family_name": "Cartograph CF",
- "preferred_subfamily_name": "Extra Bold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-ExtraBoldItalic.otf||120080:1747702940.2479174": {
- "family_name": "Cartograph CF Extra Bold",
- "font-family": "Cartograph CF Extra Bold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "800",
- "fs_type": 8,
- "full_name": "Cartograph CF Extra Bold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 9,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-ExtraBoldItalic.otf",
- "preferred_family_name": "Cartograph CF",
- "preferred_subfamily_name": "Extra Bold Italic",
- "subfamily_name": "Italic",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-ExtraLight.otf||108024:1747702940.2489173": {
- "family_name": "Cartograph CF Extra Light",
- "font-family": "Cartograph CF Extra Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 8,
- "full_name": "Cartograph CF Extra Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 3,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-ExtraLight.otf",
- "preferred_family_name": "Cartograph CF",
- "preferred_subfamily_name": "Extra Light",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-ExtraLightItalic.otf||118496:1747702940.2489173": {
- "family_name": "Cartograph CF Extra Light",
- "font-family": "Cartograph CF Extra Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 8,
- "full_name": "Cartograph CF Extra Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 3,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-ExtraLightItalic.otf",
- "preferred_family_name": "Cartograph CF",
- "preferred_subfamily_name": "Extra Light Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-Heavy.otf||113700:1747702940.2499173": {
- "family_name": "Cartograph CF Heavy",
- "font-family": "Cartograph CF Heavy",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 8,
- "full_name": "Cartograph CF Heavy",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 10,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-Heavy.otf",
- "preferred_family_name": "Cartograph CF",
- "preferred_subfamily_name": "Heavy",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-HeavyItalic.otf||123024:1747702940.2499173": {
- "family_name": "Cartograph CF Heavy",
- "font-family": "Cartograph CF Heavy",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "900",
- "fs_type": 8,
- "full_name": "Cartograph CF Heavy Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 10,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-HeavyItalic.otf",
- "preferred_family_name": "Cartograph CF",
- "preferred_subfamily_name": "Heavy Italic",
- "subfamily_name": "Italic",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-Light.otf||108372:1747702940.2499173": {
- "family_name": "Cartograph CF Light",
- "font-family": "Cartograph CF Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 8,
- "full_name": "Cartograph CF Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 4,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-Light.otf",
- "preferred_family_name": "Cartograph CF",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-LightItalic.otf||118272:1747702940.2509172": {
- "family_name": "Cartograph CF Light",
- "font-family": "Cartograph CF Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 8,
- "full_name": "Cartograph CF Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 4,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-LightItalic.otf",
- "preferred_family_name": "Cartograph CF",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-Regular.otf||107884:1747702940.2509172": {
- "family_name": "Cartograph CF",
- "font-family": "Cartograph CF",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 8,
- "full_name": "Cartograph CF Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-Regular.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-RegularItalic.otf||117452:1747702940.251917": {
- "family_name": "Cartograph CF",
- "font-family": "Cartograph CF",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 8,
- "full_name": "Cartograph CF Regular Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-RegularItalic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": "Regular Italic",
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-Thin.otf||105640:1747702940.251917": {
- "family_name": "Cartograph CF Thin",
- "font-family": "Cartograph CF Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 8,
- "full_name": "Cartograph CF Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 2,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-Thin.otf",
- "preferred_family_name": "Cartograph CF",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CartographCF-ThinItalic.otf||116284:1747702940.251917": {
- "family_name": "Cartograph CF Thin",
- "font-family": "Cartograph CF Thin",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "100",
- "fs_type": 8,
- "full_name": "Cartograph CF Thin Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 2,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CartographCF-ThinItalic.otf",
- "preferred_family_name": "Cartograph CF",
- "preferred_subfamily_name": "Thin Italic",
- "subfamily_name": "Italic",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CodeliaLigatures-Bold.otf||118064:1747702940.2529168": {
- "family_name": "Codelia Ligatures",
- "font-family": "Codelia Ligatures",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 8,
- "full_name": "Codelia Ligatures Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CodeliaLigatures-Bold.otf",
- "preferred_family_name": "Codelia Ligatures",
- "preferred_subfamily_name": "Bold",
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CodeliaLigatures-BoldItalic.otf||117860:1747702940.2529168": {
- "family_name": "Codelia Ligatures",
- "font-family": "Codelia Ligatures",
- "font-stretch": "normal",
- "font-style": "oblique",
- "font-weight": "bold",
- "fs_type": 8,
- "full_name": "Codelia Ligatures Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": true,
- "is_otf": true,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CodeliaLigatures-BoldItalic.otf",
- "preferred_family_name": "Codelia Ligatures",
- "preferred_subfamily_name": "Bold Italic",
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CodeliaLigatures-Italic.otf||114384:1747702940.2539167": {
- "family_name": "Codelia Ligatures",
- "font-family": "Codelia Ligatures",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 8,
- "full_name": "Codelia Ligatures Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CodeliaLigatures-Italic.otf",
- "preferred_family_name": "Codelia Ligatures",
- "preferred_subfamily_name": "Italic",
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/CodeliaLigatures-Regular.otf||116684:1747702940.2539167": {
- "family_name": "Codelia Ligatures",
- "font-family": "Codelia Ligatures",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 8,
- "full_name": "Codelia Ligatures Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/CodeliaLigatures-Regular.otf",
- "preferred_family_name": "Codelia Ligatures",
- "preferred_subfamily_name": "Regular",
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/ComicCodeLigatures-Bold.otf||92016:1747702940.2539167": {
- "family_name": "Comic Code Ligatures",
- "font-family": "Comic Code Ligatures",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 8,
- "full_name": "Comic Code Ligatures Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 12,
- 5,
- 9,
- 2,
- 2,
- 4,
- 6,
- 2,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/ComicCodeLigatures-Bold.otf",
- "preferred_family_name": "Comic Code Ligatures",
- "preferred_subfamily_name": "Bold",
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/ComicCodeLigatures-BoldItalic.otf||92188:1747702940.2549167": {
- "family_name": "Comic Code Ligatures",
- "font-family": "Comic Code Ligatures",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 8,
- "full_name": "Comic Code Ligatures Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 1,
- 5,
- 9,
- 2,
- 2,
- 0,
- 6,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/ComicCodeLigatures-BoldItalic.otf",
- "preferred_family_name": "Comic Code Ligatures",
- "preferred_subfamily_name": "Bold Italic",
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/ComicCodeLigatures-Italic.otf||95120:1747702940.2549167": {
- "family_name": "Comic Code Ligatures",
- "font-family": "Comic Code Ligatures",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 8,
- "full_name": "Comic Code Ligatures Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 1,
- 5,
- 9,
- 2,
- 2,
- 0,
- 6,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/ComicCodeLigatures-Italic.otf",
- "preferred_family_name": "Comic Code Ligatures",
- "preferred_subfamily_name": "Italic",
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/ComicCodeLigatures-Light.otf||95088:1747702940.2549167": {
- "family_name": "Comic Code Ligatures Light",
- "font-family": "Comic Code Ligatures Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 8,
- "full_name": "Comic Code Ligatures Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 12,
- 5,
- 9,
- 2,
- 2,
- 4,
- 6,
- 2,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/ComicCodeLigatures-Light.otf",
- "preferred_family_name": "Comic Code Ligatures",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/ComicCodeLigatures-LightItalic.otf||96648:1747702940.2559166": {
- "family_name": "Comic Code Ligatures Light",
- "font-family": "Comic Code Ligatures Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 8,
- "full_name": "Comic Code Ligatures Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 1,
- 5,
- 9,
- 2,
- 2,
- 0,
- 6,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/ComicCodeLigatures-LightItalic.otf",
- "preferred_family_name": "Comic Code Ligatures",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/ComicCodeLigatures-Medium.otf||94056:1747702940.2559166": {
- "family_name": "Comic Code Ligatures Medium",
- "font-family": "Comic Code Ligatures Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 8,
- "full_name": "Comic Code Ligatures Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 12,
- 5,
- 9,
- 2,
- 2,
- 4,
- 6,
- 2,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/ComicCodeLigatures-Medium.otf",
- "preferred_family_name": "Comic Code Ligatures",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/ComicCodeLigatures-MediumItalic.otf||95256:1747702940.2569165": {
- "family_name": "Comic Code Ligatures Medium",
- "font-family": "Comic Code Ligatures Medium",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "500",
- "fs_type": 8,
- "full_name": "Comic Code Ligatures Medium Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 1,
- 5,
- 9,
- 2,
- 2,
- 0,
- 6,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/ComicCodeLigatures-MediumItalic.otf",
- "preferred_family_name": "Comic Code Ligatures",
- "preferred_subfamily_name": "Medium Italic",
- "subfamily_name": "Italic",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/ComicCodeLigatures-Regular.otf||93004:1747702940.2569165": {
- "family_name": "Comic Code Ligatures",
- "font-family": "Comic Code Ligatures",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 8,
- "full_name": "Comic Code Ligatures Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 12,
- 5,
- 9,
- 2,
- 2,
- 4,
- 6,
- 2,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/ComicCodeLigatures-Regular.otf",
- "preferred_family_name": "Comic Code Ligatures",
- "preferred_subfamily_name": "Regular",
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/ComicCodeLigatures-SBIta.otf||96380:1747702940.2569165": {
- "family_name": "Comic Code Ligatures Semibold",
- "font-family": "Comic Code Ligatures Semibold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 8,
- "full_name": "Comic Code Ligatures Semibold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 1,
- 5,
- 9,
- 2,
- 2,
- 0,
- 6,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/ComicCodeLigatures-SBIta.otf",
- "preferred_family_name": "Comic Code Ligatures",
- "preferred_subfamily_name": "Semibold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/ComicCodeLigatures-Semibold.otf||94744:1747702940.2579162": {
- "family_name": "Comic Code Ligatures Semibold",
- "font-family": "Comic Code Ligatures Semibold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 8,
- "full_name": "Comic Code Ligatures Semibold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 12,
- 5,
- 9,
- 2,
- 2,
- 4,
- 6,
- 2,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/ComicCodeLigatures-Semibold.otf",
- "preferred_family_name": "Comic Code Ligatures",
- "preferred_subfamily_name": "Semibold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/ComicCodeLigatures-Thin.otf||89560:1747702940.2579162": {
- "family_name": "Comic Code Ligatures Thin",
- "font-family": "Comic Code Ligatures Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 8,
- "full_name": "Comic Code Ligatures Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 12,
- 5,
- 9,
- 2,
- 2,
- 4,
- 6,
- 2,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/ComicCodeLigatures-Thin.otf",
- "preferred_family_name": "Comic Code Ligatures",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/ComicCodeLigatures-ThinItalic.otf||90044:1747702940.2579162": {
- "family_name": "Comic Code Ligatures Thin",
- "font-family": "Comic Code Ligatures Thin",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "100",
- "fs_type": 8,
- "full_name": "Comic Code Ligatures Thin Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 1,
- 5,
- 9,
- 2,
- 2,
- 0,
- 6,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/ComicCodeLigatures-ThinItalic.otf",
- "preferred_family_name": "Comic Code Ligatures",
- "preferred_subfamily_name": "Thin Italic",
- "subfamily_name": "Italic",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/ComicCodeLigatures-ULIta.otf||97832:1747702940.2589161": {
- "family_name": "Comic Code Ligatures UltraLight",
- "font-family": "Comic Code Ligatures UltraLight",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 8,
- "full_name": "Comic Code Ligatures UltraLight Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 1,
- 5,
- 9,
- 2,
- 2,
- 0,
- 6,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/ComicCodeLigatures-ULIta.otf",
- "preferred_family_name": "Comic Code Ligatures",
- "preferred_subfamily_name": "UltraLight Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/ComicCodeLigatures-UltraLight.otf||95728:1747702940.2589161": {
- "family_name": "Comic Code Ligatures UltraLight",
- "font-family": "Comic Code Ligatures UltraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 8,
- "full_name": "Comic Code Ligatures UltraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 12,
- 5,
- 9,
- 2,
- 2,
- 4,
- 6,
- 2,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/ComicCodeLigatures-UltraLight.otf",
- "preferred_family_name": "Comic Code Ligatures",
- "preferred_subfamily_name": "UltraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/Courier 10 Pitch Regular.otf||35196:1747702940.2589161": {
- "family_name": "Courier 10 Pitch",
- "font-family": "Courier 10 Pitch",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "Courier10PitchBT-Roman",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 2,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/Courier 10 Pitch Regular.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/MERIFONT.TTF||49504:1747702940.2589161": {
- "family_name": "Chess Merida",
- "font-family": "Chess Merida",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Chess Merida",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 0,
- "panose": [
- 2,
- 11,
- 6,
- 3,
- 5,
- 3,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/MERIFONT.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/Merriweather-Black.ttf||141700:1747702940.259916": {
- "family_name": "Merriweather Black",
- "font-family": "Merriweather Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Merriweather Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 10,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/Merriweather-Black.ttf",
- "preferred_family_name": "Merriweather",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/Merriweather-BlackItalic.ttf||142620:1747702940.259916": {
- "family_name": "Merriweather Black",
- "font-family": "Merriweather Black",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Merriweather Black Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 10,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/Merriweather-BlackItalic.ttf",
- "preferred_family_name": "Merriweather",
- "preferred_subfamily_name": "Black Italic",
- "subfamily_name": "Italic",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/Merriweather-Bold.ttf||142040:1747702940.260916": {
- "family_name": "Merriweather",
- "font-family": "Merriweather",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Merriweather Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 8,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/Merriweather-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/Merriweather-BoldItalic.ttf||143832:1747702940.260916": {
- "family_name": "Merriweather",
- "font-family": "Merriweather",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Merriweather Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 8,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/Merriweather-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/Merriweather-Italic.ttf||142648:1747702940.261916": {
- "family_name": "Merriweather",
- "font-family": "Merriweather",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Merriweather Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/Merriweather-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/Merriweather-Light.ttf||148124:1747702940.261916": {
- "family_name": "Merriweather Light",
- "font-family": "Merriweather Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Merriweather Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 4,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/Merriweather-Light.ttf",
- "preferred_family_name": "Merriweather",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/Merriweather-LightItalic.ttf||142056:1747702940.261916": {
- "family_name": "Merriweather Light",
- "font-family": "Merriweather Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Merriweather Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 4,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/Merriweather-LightItalic.ttf",
- "preferred_family_name": "Merriweather",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/Merriweather-Regular.ttf||149120:1747702940.2629156": {
- "family_name": "Merriweather",
- "font-family": "Merriweather",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Merriweather Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/Merriweather-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/MonoLisa-Bold.otf||118736:1747702940.2629156": {
- "family_name": "MonoLisa",
- "font-family": "MonoLisa",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 8,
- "full_name": "MonoLisa Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 8,
- 9,
- 3,
- 2,
- 4,
- 6,
- 2,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/MonoLisa-Bold.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/MonoLisa-BoldItalic.otf||119056:1747702940.2639155": {
- "family_name": "MonoLisa",
- "font-family": "MonoLisa",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 8,
- "full_name": "MonoLisa Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 8,
- 9,
- 3,
- 2,
- 4,
- 13,
- 2,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/MonoLisa-BoldItalic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/MonoLisa-Regular.otf||116244:1747702940.2639155": {
- "family_name": "MonoLisa",
- "font-family": "MonoLisa",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 8,
- "full_name": "MonoLisa Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 5,
- 9,
- 3,
- 2,
- 4,
- 6,
- 2,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/MonoLisa-Regular.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/MonoLisa-RegularItalic.otf||116892:1747702940.2649155": {
- "family_name": "MonoLisa",
- "font-family": "MonoLisa",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 8,
- "full_name": "MonoLisa Regular Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 5,
- 9,
- 3,
- 2,
- 4,
- 13,
- 2,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/MonoLisa-RegularItalic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/NFM.ttf||2507556:1761438003.486015": {
- "family_name": "Symbols Nerd Font Mono",
- "font-family": "Symbols Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Symbols Nerd Font Mono",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/NFM.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/NovaletraSerifCF-Bold.otf||64528:1747702940.2649155": {
- "family_name": "Novaletra Serif CF Medium",
- "font-family": "Novaletra Serif CF Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 8,
- "full_name": "Novaletra Serif CF Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/NovaletraSerifCF-Bold.otf",
- "preferred_family_name": "Novaletra Serif CF",
- "preferred_subfamily_name": "Bold",
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/NovaletraSerifCF-BoldItalic.otf||66320:1747702940.2649155": {
- "family_name": "Novaletra Serif CF Medium",
- "font-family": "Novaletra Serif CF Medium",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 8,
- "full_name": "Novaletra Serif CF Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/NovaletraSerifCF-BoldItalic.otf",
- "preferred_family_name": "Novaletra Serif CF",
- "preferred_subfamily_name": "Bold Italic",
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/NovaletraSerifCF-DemiBold.otf||64428:1747702940.2649155": {
- "family_name": "Novaletra Serif CF Demi Bold",
- "font-family": "Novaletra Serif CF Demi Bold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 8,
- "full_name": "Novaletra Serif CF Demi Bold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/NovaletraSerifCF-DemiBold.otf",
- "preferred_family_name": "Novaletra Serif CF",
- "preferred_subfamily_name": "Demi Bold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/NovaletraSerifCF-DemiBoldItalic.otf||65864:1747702940.2649155": {
- "family_name": "Novaletra Serif CF Demi Bold",
- "font-family": "Novaletra Serif CF Demi Bold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 8,
- "full_name": "Novaletra Serif CF Demi Bold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/NovaletraSerifCF-DemiBoldItalic.otf",
- "preferred_family_name": "Novaletra Serif CF",
- "preferred_subfamily_name": "Demi Bold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/NovaletraSerifCF-ExtBold.otf||63976:1747702940.2659154": {
- "family_name": "Novaletra Serif CF Ext Bold",
- "font-family": "Novaletra Serif CF Ext Bold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 8,
- "full_name": "Novaletra Serif CF Ext Bold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/NovaletraSerifCF-ExtBold.otf",
- "preferred_family_name": "Novaletra Serif CF",
- "preferred_subfamily_name": "Ext Bold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/NovaletraSerifCF-ExtBoldItalic.otf||65820:1747702940.2659154": {
- "family_name": "Novaletra Serif CF Ext Bold",
- "font-family": "Novaletra Serif CF Ext Bold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "800",
- "fs_type": 8,
- "full_name": "Novaletra Serif CF Ext Bold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/NovaletraSerifCF-ExtBoldItalic.otf",
- "preferred_family_name": "Novaletra Serif CF",
- "preferred_subfamily_name": "Ext Bold Italic",
- "subfamily_name": "Italic",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/NovaletraSerifCF-Heavy.otf||63884:1747702940.2659154": {
- "family_name": "Novaletra Serif CF Heavy",
- "font-family": "Novaletra Serif CF Heavy",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 8,
- "full_name": "Novaletra Serif CF Heavy",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/NovaletraSerifCF-Heavy.otf",
- "preferred_family_name": "Novaletra Serif CF",
- "preferred_subfamily_name": "Heavy",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/NovaletraSerifCF-HeavyItalic.otf||66264:1747702940.2659154": {
- "family_name": "Novaletra Serif CF Heavy",
- "font-family": "Novaletra Serif CF Heavy",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "900",
- "fs_type": 8,
- "full_name": "Novaletra Serif CF Heavy Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/NovaletraSerifCF-HeavyItalic.otf",
- "preferred_family_name": "Novaletra Serif CF",
- "preferred_subfamily_name": "Heavy Italic",
- "subfamily_name": "Italic",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/NovaletraSerifCF-Light.otf||64140:1747702940.2669153": {
- "family_name": "Novaletra Serif CF Light",
- "font-family": "Novaletra Serif CF Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 8,
- "full_name": "Novaletra Serif CF Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/NovaletraSerifCF-Light.otf",
- "preferred_family_name": "Novaletra Serif CF",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/NovaletraSerifCF-LightItalic.otf||66732:1747702940.2669153": {
- "family_name": "Novaletra Serif CF Light",
- "font-family": "Novaletra Serif CF Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 8,
- "full_name": "Novaletra Serif CF Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/NovaletraSerifCF-LightItalic.otf",
- "preferred_family_name": "Novaletra Serif CF",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/NovaletraSerifCF-Medium.otf||64364:1747702940.2669153": {
- "family_name": "Novaletra Serif CF Medium",
- "font-family": "Novaletra Serif CF Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 8,
- "full_name": "Novaletra Serif CF Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/NovaletraSerifCF-Medium.otf",
- "preferred_family_name": "Novaletra Serif CF",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/NovaletraSerifCF-MediumItalic.otf||66216:1747702940.2669153": {
- "family_name": "Novaletra Serif CF Medium",
- "font-family": "Novaletra Serif CF Medium",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "500",
- "fs_type": 8,
- "full_name": "Novaletra Serif CF Medium Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/NovaletraSerifCF-MediumItalic.otf",
- "preferred_family_name": "Novaletra Serif CF",
- "preferred_subfamily_name": "Medium Italic",
- "subfamily_name": "Italic",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/NovaletraSerifCF-Regular.otf||64392:1747702940.2669153": {
- "family_name": "Novaletra Serif CF",
- "font-family": "Novaletra Serif CF",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 8,
- "full_name": "Novaletra Serif CF Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/NovaletraSerifCF-Regular.otf",
- "preferred_family_name": "Novaletra Serif CF",
- "preferred_subfamily_name": "Regular",
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/NovaletraSerifCF-RegularItalic.otf||66240:1747702940.2679152": {
- "family_name": "Novaletra Serif CF",
- "font-family": "Novaletra Serif CF",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 8,
- "full_name": "Novaletra Serif CF Regular Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/NovaletraSerifCF-RegularItalic.otf",
- "preferred_family_name": "Novaletra Serif CF",
- "preferred_subfamily_name": "Regular Italic",
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataProB_09.ttf||4607292:1747702940.2899127": {
- "family_name": "PragmataPro",
- "font-family": "PragmataPro",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 264,
- "full_name": "PragmataPro Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 0,
- 3,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataProB_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataProB_liga_09.ttf||4624112:1747702940.294912": {
- "family_name": "PragmataPro Liga",
- "font-family": "PragmataPro Liga",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 264,
- "full_name": "PragmataPro Liga Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 0,
- 3,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataProB_liga_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataProI_09.ttf||4490692:1747702940.2999115": {
- "family_name": "PragmataPro",
- "font-family": "PragmataPro",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 264,
- "full_name": "PragmataPro Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 0,
- 3,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataProI_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataProI_liga_09.ttf||4507588:1747702940.303911": {
- "family_name": "PragmataPro Liga",
- "font-family": "PragmataPro Liga",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 264,
- "full_name": "PragmataPro Liga Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 0,
- 3,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataProI_liga_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataProR_09.ttf||5051440:1747702940.3059108": {
- "family_name": "PragmataPro",
- "font-family": "PragmataPro",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 264,
- "full_name": "PragmataPro Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataProR_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataProR_liga_09.ttf||5068260:1747702940.3079107": {
- "family_name": "PragmataPro Liga",
- "font-family": "PragmataPro Liga",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 264,
- "full_name": "PragmataPro Liga Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataProR_liga_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataProZ_09.ttf||4439452:1747702940.3089106": {
- "family_name": "PragmataPro",
- "font-family": "PragmataPro",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 258,
- "full_name": "PragmataPro Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 0,
- 8,
- 0,
- 8,
- 2,
- 0,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataProZ_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataProZ_liga_09.ttf||4456268:1747702940.3109102": {
- "family_name": "PragmataPro Liga",
- "font-family": "PragmataPro Liga",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 258,
- "full_name": "PragmataPro Liga Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 0,
- 8,
- 0,
- 8,
- 2,
- 0,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataProZ_liga_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataPro_Mono_B_09.ttf||3900260:1747702940.3239088": {
- "family_name": "PragmataPro Mono",
- "font-family": "PragmataPro Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 264,
- "full_name": "PragmataPro Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 9,
- 3,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataPro_Mono_B_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataPro_Mono_B_liga_09.ttf||3917076:1747702940.3279083": {
- "family_name": "PragmataPro Mono Liga",
- "font-family": "PragmataPro Mono Liga",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 264,
- "full_name": "PragmataPro Mono Liga Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 9,
- 3,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataPro_Mono_B_liga_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataPro_Mono_I_09.ttf||3822344:1747702940.3329077": {
- "family_name": "PragmataPro Mono",
- "font-family": "PragmataPro Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 264,
- "full_name": "PragmataPro Mono Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 9,
- 3,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataPro_Mono_I_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataPro_Mono_I_liga_09.ttf||3839140:1747702940.3339076": {
- "family_name": "PragmataPro Mono Liga",
- "font-family": "PragmataPro Mono Liga",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 264,
- "full_name": "PragmataPro Mono Liga Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 9,
- 3,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataPro_Mono_I_liga_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataPro_Mono_R_09.ttf||4233500:1747702940.339907": {
- "family_name": "PragmataPro Mono",
- "font-family": "PragmataPro Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 264,
- "full_name": "PragmataPro Mono Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 9,
- 4,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataPro_Mono_R_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataPro_Mono_R_liga_09.ttf||4250320:1747702940.3449063": {
- "family_name": "PragmataPro Mono Liga",
- "font-family": "PragmataPro Mono Liga",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 264,
- "full_name": "PragmataPro Mono Liga Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 9,
- 4,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataPro_Mono_R_liga_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataPro_Mono_Z_09.ttf||3752628:1747702940.3459063": {
- "family_name": "PragmataPro Mono",
- "font-family": "PragmataPro Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 264,
- "full_name": "PragmataPro Mono Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 9,
- 3,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataPro_Mono_Z_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/PragmataPro_Mono_Z_liga_09.ttf||3769444:1747702940.347906": {
- "family_name": "PragmataPro Mono Liga",
- "font-family": "PragmataPro Mono Liga",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 264,
- "full_name": "PragmataPro Mono Liga Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 9,
- 3,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/home/cjennings/.local/share/fonts/PragmataPro_Mono_Z_liga_09.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/all-the-icons-nerd-fonts-family.ttf||14:1748063563.124969": {},
- "/home/cjennings/.local/share/fonts/all-the-icons.ttf||44732:1748063565.161948": {
- "family_name": "all-the-icons",
- "font-family": "all-the-icons",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "all-the-icons",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/all-the-icons.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/file-icons.ttf||489672:1748063564.8389513": {
- "family_name": "file-icons",
- "font-family": "file-icons",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "file-icons",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/file-icons.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/fontawesome.ttf||152796:1748063564.3299565": {
- "family_name": "FontAwesome",
- "font-family": "FontAwesome",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "FontAwesome Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/fontawesome.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/material-design-icons.ttf||128180:1748063563.532965": {
- "family_name": "Material Icons",
- "font-family": "Material Icons",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Material Icons",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 3,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/material-design-icons.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/octicons.ttf||52544:1748063563.9909601": {
- "family_name": "github-octicons",
- "font-family": "github-octicons",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 8,
- "full_name": "github-octicons",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 0,
- 5,
- 3,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/octicons.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/home/cjennings/.local/share/fonts/weathericons.ttf||99564:1748063563.7869623": {
- "family_name": "Weather Icons",
- "font-family": "Weather Icons",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "Weather Icons Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/home/cjennings/.local/share/fonts/weathericons.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/opt/calibre/resources/fonts/liberation/LiberationMono-Bold.ttf||307996:1710386566.0": {
- "family_name": "Liberation Mono",
- "font-family": "Liberation Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Liberation Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 7,
- 7,
- 9,
- 2,
- 2,
- 5,
- 2,
- 4,
- 4
- ],
- "path": "/opt/calibre/resources/fonts/liberation/LiberationMono-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/opt/calibre/resources/fonts/liberation/LiberationMono-BoldItalic.ttf||284068:1710386566.0": {
- "family_name": "Liberation Mono",
- "font-family": "Liberation Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Liberation Mono Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 7,
- 7,
- 9,
- 2,
- 2,
- 5,
- 9,
- 4,
- 4
- ],
- "path": "/opt/calibre/resources/fonts/liberation/LiberationMono-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/opt/calibre/resources/fonts/liberation/LiberationMono-Italic.ttf||281536:1710386566.0": {
- "family_name": "Liberation Mono",
- "font-family": "Liberation Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Liberation Mono Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 7,
- 4,
- 9,
- 2,
- 2,
- 5,
- 9,
- 4,
- 4
- ],
- "path": "/opt/calibre/resources/fonts/liberation/LiberationMono-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/opt/calibre/resources/fonts/liberation/LiberationMono-Regular.ttf||319508:1710386566.0": {
- "family_name": "Liberation Mono",
- "font-family": "Liberation Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Liberation Mono",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 7,
- 4,
- 9,
- 2,
- 2,
- 5,
- 2,
- 4,
- 4
- ],
- "path": "/opt/calibre/resources/fonts/liberation/LiberationMono-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/opt/calibre/resources/fonts/liberation/LiberationSans-Bold.ttf||414456:1710386566.0": {
- "family_name": "Liberation Sans",
- "font-family": "Liberation Sans",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Liberation Sans Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 7,
- 4,
- 2,
- 2,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/opt/calibre/resources/fonts/liberation/LiberationSans-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/opt/calibre/resources/fonts/liberation/LiberationSans-BoldItalic.ttf||408996:1710386566.0": {
- "family_name": "Liberation Sans",
- "font-family": "Liberation Sans",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Liberation Sans Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 7,
- 4,
- 2,
- 2,
- 2,
- 9,
- 2,
- 4
- ],
- "path": "/opt/calibre/resources/fonts/liberation/LiberationSans-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/opt/calibre/resources/fonts/liberation/LiberationSans-Italic.ttf||415816:1710386566.0": {
- "family_name": "Liberation Sans",
- "font-family": "Liberation Sans",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Liberation Sans Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 6,
- 4,
- 2,
- 2,
- 2,
- 9,
- 2,
- 4
- ],
- "path": "/opt/calibre/resources/fonts/liberation/LiberationSans-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/opt/calibre/resources/fonts/liberation/LiberationSans-Regular.ttf||410712:1710386566.0": {
- "family_name": "Liberation Sans",
- "font-family": "Liberation Sans",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Liberation Sans",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 6,
- 4,
- 2,
- 2,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/opt/calibre/resources/fonts/liberation/LiberationSans-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/opt/calibre/resources/fonts/liberation/LiberationSerif-Bold.ttf||370096:1710386566.0": {
- "family_name": "Liberation Serif",
- "font-family": "Liberation Serif",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Liberation Serif Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 2,
- 8,
- 3,
- 7,
- 5,
- 5,
- 2,
- 3,
- 4
- ],
- "path": "/opt/calibre/resources/fonts/liberation/LiberationSerif-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/opt/calibre/resources/fonts/liberation/LiberationSerif-BoldItalic.ttf||376772:1710386566.0": {
- "family_name": "Liberation Serif",
- "font-family": "Liberation Serif",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Liberation Serif Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 2,
- 7,
- 3,
- 6,
- 5,
- 5,
- 9,
- 3,
- 4
- ],
- "path": "/opt/calibre/resources/fonts/liberation/LiberationSerif-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/opt/calibre/resources/fonts/liberation/LiberationSerif-Italic.ttf||375632:1710386566.0": {
- "family_name": "Liberation Serif",
- "font-family": "Liberation Serif",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Liberation Serif Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 2,
- 5,
- 3,
- 5,
- 4,
- 5,
- 9,
- 3,
- 4
- ],
- "path": "/opt/calibre/resources/fonts/liberation/LiberationSerif-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/opt/calibre/resources/fonts/liberation/LiberationSerif-Regular.ttf||393576:1710386566.0": {
- "family_name": "Liberation Serif",
- "font-family": "Liberation Serif",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Liberation Serif",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 2,
- 6,
- 3,
- 5,
- 4,
- 5,
- 2,
- 3,
- 4
- ],
- "path": "/opt/calibre/resources/fonts/liberation/LiberationSerif-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/Adwaita/AdwaitaMono-Bold.ttf||1413212:1751188544.0": {
- "family_name": "Adwaita Mono",
- "font-family": "Adwaita Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Adwaita Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 8,
- 9,
- 3,
- 0,
- 0,
- 0,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/Adwaita/AdwaitaMono-Bold.ttf",
- "preferred_family_name": "Adwaita Mono",
- "preferred_subfamily_name": "Bold",
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": "Adwaita Mono",
- "wws_subfamily_name": "Bold"
- },
- "/usr/share/fonts/Adwaita/AdwaitaMono-BoldItalic.ttf||1473552:1751188544.0": {
- "family_name": "Adwaita Mono",
- "font-family": "Adwaita Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Adwaita Mono Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 8,
- 9,
- 3,
- 0,
- 0,
- 0,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/Adwaita/AdwaitaMono-BoldItalic.ttf",
- "preferred_family_name": "Adwaita Mono",
- "preferred_subfamily_name": "Bold Italic",
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": "Adwaita Mono",
- "wws_subfamily_name": "Bold Italic"
- },
- "/usr/share/fonts/Adwaita/AdwaitaMono-Italic.ttf||1469384:1751188544.0": {
- "family_name": "Adwaita Mono",
- "font-family": "Adwaita Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Adwaita Mono Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 9,
- 3,
- 0,
- 0,
- 0,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/Adwaita/AdwaitaMono-Italic.ttf",
- "preferred_family_name": "Adwaita Mono",
- "preferred_subfamily_name": "Italic",
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": "Adwaita Mono",
- "wws_subfamily_name": "Italic"
- },
- "/usr/share/fonts/Adwaita/AdwaitaMono-Regular.ttf||1417460:1751188544.0": {
- "family_name": "Adwaita Mono",
- "font-family": "Adwaita Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Adwaita Mono",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 9,
- 3,
- 0,
- 0,
- 0,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/Adwaita/AdwaitaMono-Regular.ttf",
- "preferred_family_name": "Adwaita Mono",
- "preferred_subfamily_name": "Regular",
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": "Adwaita Mono",
- "wws_subfamily_name": "Regular"
- },
- "/usr/share/fonts/Adwaita/AdwaitaSans-Italic.ttf||910352:1751188544.0": {
- "family_name": "Adwaita Sans",
- "font-family": "Adwaita Sans",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Adwaita Sans Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 3,
- 0,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/Adwaita/AdwaitaSans-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/Adwaita/AdwaitaSans-Regular.ttf||879796:1751188544.0": {
- "family_name": "Adwaita Sans",
- "font-family": "Adwaita Sans",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Adwaita Sans",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 3,
- 0,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/Adwaita/AdwaitaSans-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/AndaleMo.TTF||105468:1747703126.0": {
- "family_name": "Andale Mono",
- "font-family": "Andale Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 8,
- "full_name": "Andale Mono",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 5,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/TTF/AndaleMo.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/AriBlk.TTF||117028:1747703126.0": {
- "family_name": "Arial Black",
- "font-family": "Arial Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Arial Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 10,
- 4,
- 2,
- 1,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/AriBlk.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Arial.TTF||275572:1747703126.0": {
- "family_name": "Arial",
- "font-family": "Arial",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Arial",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 4,
- 2,
- 2,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Arial.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Arialbd.TTF||286620:1747703126.0": {
- "family_name": "Arial",
- "font-family": "Arial",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Arial Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 7,
- 4,
- 2,
- 2,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Arialbd.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Arialbi.TTF||224692:1747703126.0": {
- "family_name": "Arial",
- "font-family": "Arial",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Arial Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 7,
- 4,
- 2,
- 2,
- 2,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Arialbi.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Ariali.TTF||206132:1747703126.0": {
- "family_name": "Arial",
- "font-family": "Arial",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Arial Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 4,
- 2,
- 2,
- 2,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Ariali.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Charis-Bold.ttf||875024:1749461378.0": {
- "family_name": "Charis",
- "font-family": "Charis",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Charis Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 8,
- 0,
- 6,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Charis-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Charis-BoldItalic.ttf||895556:1749461378.0": {
- "family_name": "Charis",
- "font-family": "Charis",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Charis Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 8,
- 0,
- 6,
- 0,
- 0,
- 9,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Charis-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Charis-Italic.ttf||892576:1749461378.0": {
- "family_name": "Charis",
- "font-family": "Charis",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Charis Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 0,
- 6,
- 0,
- 0,
- 9,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Charis-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Charis-Medium.ttf||882532:1749461378.0": {
- "family_name": "Charis Medium",
- "font-family": "Charis Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "Charis Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 0,
- 6,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Charis-Medium.ttf",
- "preferred_family_name": "Charis",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Charis-MediumItalic.ttf||905440:1749461378.0": {
- "family_name": "Charis Medium",
- "font-family": "Charis Medium",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "Charis Medium Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 0,
- 6,
- 0,
- 0,
- 9,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Charis-MediumItalic.ttf",
- "preferred_family_name": "Charis",
- "preferred_subfamily_name": "Medium Italic",
- "subfamily_name": "Italic",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Charis-Regular.ttf||878076:1749461378.0": {
- "family_name": "Charis",
- "font-family": "Charis",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Charis",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 0,
- 6,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Charis-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Charis-SemiBold.ttf||872028:1749461378.0": {
- "family_name": "Charis SemiBold",
- "font-family": "Charis SemiBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Charis SemiBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 0,
- 6,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Charis-SemiBold.ttf",
- "preferred_family_name": "Charis",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Charis-SemiBoldItalic.ttf||906668:1749461378.0": {
- "family_name": "Charis SemiBold",
- "font-family": "Charis SemiBold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Charis SemiBold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 0,
- 6,
- 0,
- 0,
- 9,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Charis-SemiBoldItalic.ttf",
- "preferred_family_name": "Charis",
- "preferred_subfamily_name": "SemiBold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Comic.TTF||126364:1747703126.0": {
- "family_name": "Comic Sans MS",
- "font-family": "Comic Sans MS",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Comic Sans MS",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 3,
- 15,
- 7,
- 2,
- 3,
- 3,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Comic.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Comicbd.TTF||111476:1747703126.0": {
- "family_name": "Comic Sans MS",
- "font-family": "Comic Sans MS",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Comic Sans MS Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 3,
- 15,
- 9,
- 2,
- 3,
- 3,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Comicbd.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuMathTeXGyre.ttf||577192:1710752851.0": {
- "family_name": "DejaVu Math TeX Gyre",
- "font-family": "DejaVu Math TeX Gyre",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 12,
- "full_name": "DejaVuMathTeXGyre-Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 3,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/DejaVuMathTeXGyre.ttf",
- "preferred_family_name": "DejaVu Math TeX Gyre",
- "preferred_subfamily_name": "Regular",
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSans-Bold.ttf||708920:1710752851.0": {
- "family_name": "DejaVu Sans",
- "font-family": "DejaVu Sans",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "DejaVu Sans Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 8,
- 3,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSans-Bold.ttf",
- "preferred_family_name": "DejaVu Sans",
- "preferred_subfamily_name": "Bold",
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSans-BoldOblique.ttf||645600:1710752851.0": {
- "family_name": "DejaVu Sans",
- "font-family": "DejaVu Sans",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "DejaVu Sans Bold Oblique",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 8,
- 3,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSans-BoldOblique.ttf",
- "preferred_family_name": "DejaVu Sans",
- "preferred_subfamily_name": "Bold Oblique",
- "subfamily_name": "Bold Oblique",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSans-ExtraLight.ttf||355824:1710752851.0": {
- "family_name": "DejaVu Sans Light",
- "font-family": "DejaVu Sans Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "DejaVu Sans ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 2,
- 3,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSans-ExtraLight.ttf",
- "preferred_family_name": "DejaVu Sans",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "ExtraLight",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSans-Oblique.ttf||637648:1710752851.0": {
- "family_name": "DejaVu Sans",
- "font-family": "DejaVu Sans",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "DejaVu Sans Oblique",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 3,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSans-Oblique.ttf",
- "preferred_family_name": "DejaVu Sans",
- "preferred_subfamily_name": "Oblique",
- "subfamily_name": "Oblique",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSans.ttf||759720:1710752851.0": {
- "family_name": "DejaVu Sans",
- "font-family": "DejaVu Sans",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "DejaVu Sans",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 3,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSans.ttf",
- "preferred_family_name": "DejaVu Sans",
- "preferred_subfamily_name": "Book",
- "subfamily_name": "Book",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSansCondensed-Bold.ttf||667844:1710752851.0": {
- "family_name": "DejaVu Sans Condensed",
- "font-family": "DejaVu Sans Condensed",
- "font-stretch": "semi-condensed",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "DejaVu Sans Condensed Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 8,
- 6,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSansCondensed-Bold.ttf",
- "preferred_family_name": "DejaVu Sans",
- "preferred_subfamily_name": "Condensed Bold",
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 4,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSansCondensed-BoldOblique.ttf||614068:1710752851.0": {
- "family_name": "DejaVu Sans Condensed",
- "font-family": "DejaVu Sans Condensed",
- "font-stretch": "semi-condensed",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "DejaVu Sans Condensed Bold Oblique",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 8,
- 6,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSansCondensed-BoldOblique.ttf",
- "preferred_family_name": "DejaVu Sans",
- "preferred_subfamily_name": "Condensed Bold Oblique",
- "subfamily_name": "Bold Oblique",
- "weight": 700,
- "width": 4,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSansCondensed-Oblique.ttf||601448:1710752851.0": {
- "family_name": "DejaVu Sans Condensed",
- "font-family": "DejaVu Sans Condensed",
- "font-stretch": "semi-condensed",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "DejaVu Sans Condensed Oblique",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 6,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSansCondensed-Oblique.ttf",
- "preferred_family_name": "DejaVu Sans",
- "preferred_subfamily_name": "Condensed Oblique",
- "subfamily_name": "Oblique",
- "weight": 400,
- "width": 4,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSansCondensed.ttf||682828:1710752851.0": {
- "family_name": "DejaVu Sans Condensed",
- "font-family": "DejaVu Sans Condensed",
- "font-stretch": "semi-condensed",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "DejaVu Sans Condensed",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 6,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSansCondensed.ttf",
- "preferred_family_name": "DejaVu Sans",
- "preferred_subfamily_name": "Condensed",
- "subfamily_name": "Book",
- "weight": 400,
- "width": 4,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf||334268:1710752851.0": {
- "family_name": "DejaVu Sans Mono",
- "font-family": "DejaVu Sans Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "DejaVu Sans Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSansMono-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSansMono-BoldOblique.ttf||254960:1710752851.0": {
- "family_name": "DejaVu Sans Mono",
- "font-family": "DejaVu Sans Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "DejaVu Sans Mono Bold Oblique",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSansMono-BoldOblique.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Oblique",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSansMono-Oblique.ttf||253448:1710752851.0": {
- "family_name": "DejaVu Sans Mono",
- "font-family": "DejaVu Sans Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "DejaVu Sans Mono Oblique",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSansMono-Oblique.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Oblique",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSansMono.ttf||343140:1710752851.0": {
- "family_name": "DejaVu Sans Mono",
- "font-family": "DejaVu Sans Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "DejaVu Sans Mono",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSansMono.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Book",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSerif-Bold.ttf||356668:1710752851.0": {
- "family_name": "DejaVu Serif",
- "font-family": "DejaVu Serif",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "DejaVu Serif Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 6,
- 8,
- 3,
- 5,
- 6,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSerif-Bold.ttf",
- "preferred_family_name": "DejaVu Serif",
- "preferred_subfamily_name": "Bold",
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSerif-BoldItalic.ttf||348020:1710752851.0": {
- "family_name": "DejaVu Serif",
- "font-family": "DejaVu Serif",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "DejaVu Serif Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 6,
- 8,
- 3,
- 5,
- 3,
- 5,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSerif-BoldItalic.ttf",
- "preferred_family_name": "DejaVu Serif",
- "preferred_subfamily_name": "Bold Italic",
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSerif-Italic.ttf||346544:1710752851.0": {
- "family_name": "DejaVu Serif",
- "font-family": "DejaVu Serif",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "DejaVu Serif Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 6,
- 6,
- 3,
- 5,
- 3,
- 5,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSerif-Italic.ttf",
- "preferred_family_name": "DejaVu Serif",
- "preferred_subfamily_name": "Italic",
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSerif.ttf||380660:1710752851.0": {
- "family_name": "DejaVu Serif",
- "font-family": "DejaVu Serif",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "DejaVu Serif",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 6,
- 6,
- 3,
- 5,
- 6,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSerif.ttf",
- "preferred_family_name": "DejaVu Serif",
- "preferred_subfamily_name": "Book",
- "subfamily_name": "Book",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSerifCondensed-Bold.ttf||331820:1710752851.0": {
- "family_name": "DejaVu Serif Condensed",
- "font-family": "DejaVu Serif Condensed",
- "font-stretch": "semi-condensed",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "DejaVu Serif Condensed Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 6,
- 8,
- 6,
- 5,
- 6,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSerifCondensed-Bold.ttf",
- "preferred_family_name": "DejaVu Serif",
- "preferred_subfamily_name": "Condensed Bold",
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 4,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSerifCondensed-BoldItalic.ttf||347076:1710752851.0": {
- "family_name": "DejaVu Serif Condensed",
- "font-family": "DejaVu Serif Condensed",
- "font-stretch": "semi-condensed",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "DejaVu Serif Condensed Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 6,
- 8,
- 6,
- 5,
- 3,
- 5,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSerifCondensed-BoldItalic.ttf",
- "preferred_family_name": "DejaVu Serif",
- "preferred_subfamily_name": "Condensed Bold Italic",
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 4,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSerifCondensed-Italic.ttf||345868:1710752851.0": {
- "family_name": "DejaVu Serif Condensed",
- "font-family": "DejaVu Serif Condensed",
- "font-stretch": "semi-condensed",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "DejaVu Serif Condensed Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 6,
- 6,
- 6,
- 5,
- 3,
- 5,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSerifCondensed-Italic.ttf",
- "preferred_family_name": "DejaVu Serif",
- "preferred_subfamily_name": "Condensed Italic",
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 4,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/DejaVuSerifCondensed.ttf||347208:1710752851.0": {
- "family_name": "DejaVu Serif Condensed",
- "font-family": "DejaVu Serif Condensed",
- "font-stretch": "semi-condensed",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "DejaVu Serif Condensed",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 6,
- 6,
- 6,
- 5,
- 6,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/DejaVuSerifCondensed.ttf",
- "preferred_family_name": "DejaVu Serif",
- "preferred_subfamily_name": "Condensed",
- "subfamily_name": "Book",
- "weight": 400,
- "width": 4,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFont-Bold.ttf||2672432:1745519248.0": {
- "family_name": "FiraCode Nerd Font",
- "font-family": "FiraCode Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFont-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFont-Light.ttf||2641408:1745519248.0": {
- "family_name": "FiraCode Nerd Font Light",
- "font-family": "FiraCode Nerd Font Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFont-Light.ttf",
- "preferred_family_name": "FiraCode Nerd Font",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFont-Medium.ttf||2636736:1745519248.0": {
- "family_name": "FiraCode Nerd Font Med",
- "font-family": "FiraCode Nerd Font Med",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Med",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFont-Medium.ttf",
- "preferred_family_name": "FiraCode Nerd Font",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFont-Regular.ttf||2642616:1745519248.0": {
- "family_name": "FiraCode Nerd Font",
- "font-family": "FiraCode Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Reg",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFont-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFont-Retina.ttf||2638472:1745519248.0": {
- "family_name": "FiraCode Nerd Font Ret",
- "font-family": "FiraCode Nerd Font Ret",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "450",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Ret",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFont-Retina.ttf",
- "preferred_family_name": "FiraCode Nerd Font",
- "preferred_subfamily_name": "Retina",
- "subfamily_name": "Regular",
- "weight": 450,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFont-SemiBold.ttf||2657272:1745519248.0": {
- "family_name": "FiraCode Nerd Font SemBd",
- "font-family": "FiraCode Nerd Font SemBd",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font SemBd",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFont-SemiBold.ttf",
- "preferred_family_name": "FiraCode Nerd Font",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFontMono-Bold.ttf||2677400:1745519248.0": {
- "family_name": "FiraCode Nerd Font Mono",
- "font-family": "FiraCode Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFontMono-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFontMono-Light.ttf||2646620:1745519248.0": {
- "family_name": "FiraCode Nerd Font Mono Light",
- "font-family": "FiraCode Nerd Font Mono Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Mono Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFontMono-Light.ttf",
- "preferred_family_name": "FiraCode Nerd Font Mono",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFontMono-Medium.ttf||2641764:1745519248.0": {
- "family_name": "FiraCode Nerd Font Mono Med",
- "font-family": "FiraCode Nerd Font Mono Med",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Mono Med",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFontMono-Medium.ttf",
- "preferred_family_name": "FiraCode Nerd Font Mono",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFontMono-Regular.ttf||2647492:1745519248.0": {
- "family_name": "FiraCode Nerd Font Mono",
- "font-family": "FiraCode Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Mono Reg",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFontMono-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFontMono-Retina.ttf||2643500:1745519248.0": {
- "family_name": "FiraCode Nerd Font Mono Ret",
- "font-family": "FiraCode Nerd Font Mono Ret",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "450",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Mono Ret",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFontMono-Retina.ttf",
- "preferred_family_name": "FiraCode Nerd Font Mono",
- "preferred_subfamily_name": "Retina",
- "subfamily_name": "Regular",
- "weight": 450,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFontMono-SemiBold.ttf||2662304:1745519248.0": {
- "family_name": "FiraCode Nerd Font Mono SemBd",
- "font-family": "FiraCode Nerd Font Mono SemBd",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Mono SemBd",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFontMono-SemiBold.ttf",
- "preferred_family_name": "FiraCode Nerd Font Mono",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFontPropo-Bold.ttf||2686036:1745519248.0": {
- "family_name": "FiraCode Nerd Font Propo",
- "font-family": "FiraCode Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Propo Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFontPropo-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFontPropo-Light.ttf||2655032:1745519248.0": {
- "family_name": "FiraCode Nerd Font Propo Light",
- "font-family": "FiraCode Nerd Font Propo Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Propo Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFontPropo-Light.ttf",
- "preferred_family_name": "FiraCode Nerd Font Propo",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFontPropo-Medium.ttf||2650356:1745519248.0": {
- "family_name": "FiraCode Nerd Font Propo Med",
- "font-family": "FiraCode Nerd Font Propo Med",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Propo Med",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFontPropo-Medium.ttf",
- "preferred_family_name": "FiraCode Nerd Font Propo",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFontPropo-Regular.ttf||2656220:1745519248.0": {
- "family_name": "FiraCode Nerd Font Propo",
- "font-family": "FiraCode Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Propo Reg",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFontPropo-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFontPropo-Retina.ttf||2652092:1745519248.0": {
- "family_name": "FiraCode Nerd Font Propo Ret",
- "font-family": "FiraCode Nerd Font Propo Ret",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "450",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Propo Ret",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFontPropo-Retina.ttf",
- "preferred_family_name": "FiraCode Nerd Font Propo",
- "preferred_subfamily_name": "Retina",
- "subfamily_name": "Regular",
- "weight": 450,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/FiraCodeNerdFontPropo-SemiBold.ttf||2670896:1745519248.0": {
- "family_name": "FiraCode Nerd Font Propo SemBd",
- "font-family": "FiraCode Nerd Font Propo SemBd",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "FiraCode Nerd Font Propo SemBd",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/FiraCodeNerdFontPropo-SemiBold.ttf",
- "preferred_family_name": "FiraCode Nerd Font Propo",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Georgia.TTF||142964:1747703126.0": {
- "family_name": "Georgia",
- "font-family": "Georgia",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Georgia",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 4,
- 5,
- 2,
- 5,
- 4,
- 5,
- 2,
- 3,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Georgia.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Georgiab.TTF||139584:1747703126.0": {
- "family_name": "Georgia",
- "font-family": "Georgia",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Georgia Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 4,
- 8,
- 2,
- 5,
- 4,
- 5,
- 2,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Georgiab.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Georgiai.TTF||156668:1747703126.0": {
- "family_name": "Georgia",
- "font-family": "Georgia",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Georgia Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 4,
- 5,
- 2,
- 5,
- 4,
- 5,
- 9,
- 3,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Georgiai.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Georgiaz.TTF||158796:1747703126.0": {
- "family_name": "Georgia",
- "font-family": "Georgia",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Georgia Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 4,
- 8,
- 2,
- 5,
- 4,
- 5,
- 9,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Georgiaz.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/HackNerdFont-Bold.ttf||2694312:1745519248.0": {
- "family_name": "Hack Nerd Font",
- "font-family": "Hack Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Hack Nerd Font Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 8,
- 9,
- 3,
- 2,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/HackNerdFont-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/HackNerdFont-BoldItalic.ttf||2699988:1745519248.0": {
- "family_name": "Hack Nerd Font",
- "font-family": "Hack Nerd Font",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Hack Nerd Font Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 8,
- 9,
- 3,
- 2,
- 2,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/HackNerdFont-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/HackNerdFont-Italic.ttf||2693356:1745519248.0": {
- "family_name": "Hack Nerd Font",
- "font-family": "Hack Nerd Font",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Hack Nerd Font Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 2,
- 2,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/HackNerdFont-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/HackNerdFont-Regular.ttf||2685912:1745519248.0": {
- "family_name": "Hack Nerd Font",
- "font-family": "Hack Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Hack Nerd Font Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 2,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/HackNerdFont-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/HackNerdFontMono-Bold.ttf||2674696:1745519248.0": {
- "family_name": "Hack Nerd Font Mono",
- "font-family": "Hack Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Hack Nerd Font Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 8,
- 9,
- 3,
- 2,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/HackNerdFontMono-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/HackNerdFontMono-BoldItalic.ttf||2680468:1745519248.0": {
- "family_name": "Hack Nerd Font Mono",
- "font-family": "Hack Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Hack Nerd Font Mono Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 8,
- 9,
- 3,
- 2,
- 2,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/HackNerdFontMono-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/HackNerdFontMono-Italic.ttf||2673840:1745519248.0": {
- "family_name": "Hack Nerd Font Mono",
- "font-family": "Hack Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Hack Nerd Font Mono Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 2,
- 2,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/HackNerdFontMono-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/HackNerdFontMono-Regular.ttf||2666460:1745519248.0": {
- "family_name": "Hack Nerd Font Mono",
- "font-family": "Hack Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Hack Nerd Font Mono Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 2,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/HackNerdFontMono-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/HackNerdFontPropo-Bold.ttf||2694156:1745519248.0": {
- "family_name": "Hack Nerd Font Propo",
- "font-family": "Hack Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Hack Nerd Font Propo Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 8,
- 9,
- 3,
- 2,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/HackNerdFontPropo-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/HackNerdFontPropo-BoldItalic.ttf||2699832:1745519248.0": {
- "family_name": "Hack Nerd Font Propo",
- "font-family": "Hack Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Hack Nerd Font Propo Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 8,
- 9,
- 3,
- 2,
- 2,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/HackNerdFontPropo-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/HackNerdFontPropo-Italic.ttf||2693200:1745519248.0": {
- "family_name": "Hack Nerd Font Propo",
- "font-family": "Hack Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Hack Nerd Font Propo Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 2,
- 2,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/HackNerdFontPropo-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/HackNerdFontPropo-Regular.ttf||2685760:1745519248.0": {
- "family_name": "Hack Nerd Font Propo",
- "font-family": "Hack Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Hack Nerd Font Propo Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 2,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/HackNerdFontPropo-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Impact.TTF||136076:1747703126.0": {
- "family_name": "Impact",
- "font-family": "Impact",
- "font-stretch": "condensed",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Impact",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 8,
- 6,
- 3,
- 9,
- 2,
- 5,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Impact.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 3,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-Bold.ttf||2389020:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF",
- "font-family": "JetBrainsMonoNL NF",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-Bold.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-BoldItalic.ttf||2392132:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF",
- "font-family": "JetBrainsMonoNL NF",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-BoldItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-ExtraBold.ttf||2391492:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF ExtraBold",
- "font-family": "JetBrainsMonoNL NF ExtraBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF ExtraBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-ExtraBold.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": "ExtraBold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-ExtraBoldItalic.ttf||2393472:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF ExtraBold",
- "font-family": "JetBrainsMonoNL NF ExtraBold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF ExtraBold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-ExtraBoldItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": "ExtraBold Italic",
- "subfamily_name": "Italic",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-ExtraLight.ttf||2387208:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF ExtraLight",
- "font-family": "JetBrainsMonoNL NF ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-ExtraLight.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-ExtraLightItalic.ttf||2387952:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF ExtraLight",
- "font-family": "JetBrainsMonoNL NF ExtraLight",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF ExtraLight Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-ExtraLightItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": "ExtraLight Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-Italic.ttf||2389592:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF",
- "font-family": "JetBrainsMonoNL NF",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-Italic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-Light.ttf||2388892:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF Light",
- "font-family": "JetBrainsMonoNL NF Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-Light.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-LightItalic.ttf||2390312:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF Light",
- "font-family": "JetBrainsMonoNL NF Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-LightItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-Medium.ttf||2386364:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF Medium",
- "font-family": "JetBrainsMonoNL NF Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-Medium.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-MediumItalic.ttf||2389596:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF Medium",
- "font-family": "JetBrainsMonoNL NF Medium",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF Medium Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-MediumItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": "Medium Italic",
- "subfamily_name": "Italic",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-Regular.ttf||2386636:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF",
- "font-family": "JetBrainsMonoNL NF",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-Regular.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-SemiBold.ttf||2387944:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF SemiBold",
- "font-family": "JetBrainsMonoNL NF SemiBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF SemiBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-SemiBold.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-SemiBoldItalic.ttf||2392048:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF SemiBold",
- "font-family": "JetBrainsMonoNL NF SemiBold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF SemiBold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-SemiBoldItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": "SemiBold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-Thin.ttf||2384112:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF Thin",
- "font-family": "JetBrainsMonoNL NF Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-Thin.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-ThinItalic.ttf||2387148:1745519248.0": {
- "family_name": "JetBrainsMonoNL NF Thin",
- "font-family": "JetBrainsMonoNL NF Thin",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NF Thin Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFont-ThinItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font",
- "preferred_subfamily_name": "Thin Italic",
- "subfamily_name": "Italic",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-Bold.ttf||2390340:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM",
- "font-family": "JetBrainsMonoNL NFM",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-Bold.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-BoldItalic.ttf||2393480:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM",
- "font-family": "JetBrainsMonoNL NFM",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-BoldItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-ExtraBold.ttf||2392812:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM ExtraBold",
- "font-family": "JetBrainsMonoNL NFM ExtraBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM ExtraBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-ExtraBold.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": "ExtraBold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-ExtraBoldItalic.ttf||2394820:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM ExtraBold",
- "font-family": "JetBrainsMonoNL NFM ExtraBold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM ExtraBold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-ExtraBoldItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": "ExtraBold Italic",
- "subfamily_name": "Italic",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-ExtraLight.ttf||2388532:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM ExtraLight",
- "font-family": "JetBrainsMonoNL NFM ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-ExtraLight.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-ExtraLightItalic.ttf||2389304:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM ExtraLight",
- "font-family": "JetBrainsMonoNL NFM ExtraLight",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM ExtraLight Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-ExtraLightItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": "ExtraLight Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-Italic.ttf||2390940:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM",
- "font-family": "JetBrainsMonoNL NFM",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-Italic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-Light.ttf||2390212:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM Light",
- "font-family": "JetBrainsMonoNL NFM Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-Light.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-LightItalic.ttf||2391660:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM Light",
- "font-family": "JetBrainsMonoNL NFM Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-LightItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-Medium.ttf||2387688:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM Medium",
- "font-family": "JetBrainsMonoNL NFM Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-Medium.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-MediumItalic.ttf||2390948:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM Medium",
- "font-family": "JetBrainsMonoNL NFM Medium",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM Medium Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-MediumItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": "Medium Italic",
- "subfamily_name": "Italic",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-Regular.ttf||2387956:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM",
- "font-family": "JetBrainsMonoNL NFM",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-Regular.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-SemiBold.ttf||2389264:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM SemiBold",
- "font-family": "JetBrainsMonoNL NFM SemiBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM SemiBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-SemiBold.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-SemiBoldItalic.ttf||2393396:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM SemiBold",
- "font-family": "JetBrainsMonoNL NFM SemiBold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM SemiBold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-SemiBoldItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": "SemiBold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-Thin.ttf||2385432:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM Thin",
- "font-family": "JetBrainsMonoNL NFM Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-Thin.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-ThinItalic.ttf||2388496:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFM Thin",
- "font-family": "JetBrainsMonoNL NFM Thin",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFM Thin Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontMono-ThinItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Mono",
- "preferred_subfamily_name": "Thin Italic",
- "subfamily_name": "Italic",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-Bold.ttf||2388880:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP",
- "font-family": "JetBrainsMonoNL NFP",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-Bold.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-BoldItalic.ttf||2391992:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP",
- "font-family": "JetBrainsMonoNL NFP",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-BoldItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-ExtraBold.ttf||2391352:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP ExtraBold",
- "font-family": "JetBrainsMonoNL NFP ExtraBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP ExtraBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-ExtraBold.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": "ExtraBold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-ExtraBoldItalic.ttf||2393332:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP ExtraBold",
- "font-family": "JetBrainsMonoNL NFP ExtraBold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP ExtraBold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-ExtraBoldItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": "ExtraBold Italic",
- "subfamily_name": "Italic",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-ExtraLight.ttf||2387068:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP ExtraLight",
- "font-family": "JetBrainsMonoNL NFP ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-ExtraLight.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-ExtraLightItalic.ttf||2387812:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP ExtraLight",
- "font-family": "JetBrainsMonoNL NFP ExtraLight",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP ExtraLight Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-ExtraLightItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": "ExtraLight Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-Italic.ttf||2389452:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP",
- "font-family": "JetBrainsMonoNL NFP",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-Italic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-Light.ttf||2388752:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP Light",
- "font-family": "JetBrainsMonoNL NFP Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-Light.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-LightItalic.ttf||2390172:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP Light",
- "font-family": "JetBrainsMonoNL NFP Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-LightItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-Medium.ttf||2386224:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP Medium",
- "font-family": "JetBrainsMonoNL NFP Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-Medium.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-MediumItalic.ttf||2389456:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP Medium",
- "font-family": "JetBrainsMonoNL NFP Medium",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP Medium Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-MediumItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": "Medium Italic",
- "subfamily_name": "Italic",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-Regular.ttf||2386496:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP",
- "font-family": "JetBrainsMonoNL NFP",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-Regular.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-SemiBold.ttf||2387804:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP SemiBold",
- "font-family": "JetBrainsMonoNL NFP SemiBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP SemiBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-SemiBold.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-SemiBoldItalic.ttf||2391908:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP SemiBold",
- "font-family": "JetBrainsMonoNL NFP SemiBold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP SemiBold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-SemiBoldItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": "SemiBold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-Thin.ttf||2383972:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP Thin",
- "font-family": "JetBrainsMonoNL NFP Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-Thin.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-ThinItalic.ttf||2387008:1745519248.0": {
- "family_name": "JetBrainsMonoNL NFP Thin",
- "font-family": "JetBrainsMonoNL NFP Thin",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "JetBrainsMonoNL NFP Thin Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNLNerdFontPropo-ThinItalic.ttf",
- "preferred_family_name": "JetBrainsMonoNL Nerd Font Propo",
- "preferred_subfamily_name": "Thin Italic",
- "subfamily_name": "Italic",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-Bold.ttf||2472872:1745519248.0": {
- "family_name": "JetBrainsMono NF",
- "font-family": "JetBrainsMono NF",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-Bold.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-BoldItalic.ttf||2474096:1745519248.0": {
- "family_name": "JetBrainsMono NF",
- "font-family": "JetBrainsMono NF",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-BoldItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-ExtraBold.ttf||2474636:1745519248.0": {
- "family_name": "JetBrainsMono NF ExtraBold",
- "font-family": "JetBrainsMono NF ExtraBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF ExtraBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-ExtraBold.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": "ExtraBold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-ExtraBoldItalic.ttf||2476116:1745519248.0": {
- "family_name": "JetBrainsMono NF ExtraBold",
- "font-family": "JetBrainsMono NF ExtraBold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF ExtraBold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-ExtraBoldItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": "ExtraBold Italic",
- "subfamily_name": "Italic",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-ExtraLight.ttf||2469240:1745519248.0": {
- "family_name": "JetBrainsMono NF ExtraLight",
- "font-family": "JetBrainsMono NF ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-ExtraLight.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-ExtraLightItalic.ttf||2468532:1745519248.0": {
- "family_name": "JetBrainsMono NF ExtraLight",
- "font-family": "JetBrainsMono NF ExtraLight",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF ExtraLight Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-ExtraLightItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": "ExtraLight Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-Italic.ttf||2471188:1745519248.0": {
- "family_name": "JetBrainsMono NF",
- "font-family": "JetBrainsMono NF",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-Italic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-Light.ttf||2471528:1745519248.0": {
- "family_name": "JetBrainsMono NF Light",
- "font-family": "JetBrainsMono NF Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-Light.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-LightItalic.ttf||2471416:1745519248.0": {
- "family_name": "JetBrainsMono NF Light",
- "font-family": "JetBrainsMono NF Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-LightItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-Medium.ttf||2468976:1745519248.0": {
- "family_name": "JetBrainsMono NF Medium",
- "font-family": "JetBrainsMono NF Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-Medium.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-MediumItalic.ttf||2471136:1745519248.0": {
- "family_name": "JetBrainsMono NF Medium",
- "font-family": "JetBrainsMono NF Medium",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF Medium Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-MediumItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": "Medium Italic",
- "subfamily_name": "Italic",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-Regular.ttf||2469104:1745519248.0": {
- "family_name": "JetBrainsMono NF",
- "font-family": "JetBrainsMono NF",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-Regular.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-SemiBold.ttf||2472212:1745519248.0": {
- "family_name": "JetBrainsMono NF SemiBold",
- "font-family": "JetBrainsMono NF SemiBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF SemiBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-SemiBold.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-SemiBoldItalic.ttf||2474204:1745519248.0": {
- "family_name": "JetBrainsMono NF SemiBold",
- "font-family": "JetBrainsMono NF SemiBold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF SemiBold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-SemiBoldItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": "SemiBold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-Thin.ttf||2465240:1745519248.0": {
- "family_name": "JetBrainsMono NF Thin",
- "font-family": "JetBrainsMono NF Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-Thin.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-ThinItalic.ttf||2467336:1745519248.0": {
- "family_name": "JetBrainsMono NF Thin",
- "font-family": "JetBrainsMono NF Thin",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "JetBrainsMono NF Thin Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFont-ThinItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font",
- "preferred_subfamily_name": "Thin Italic",
- "subfamily_name": "Italic",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-Bold.ttf||2473884:1745519248.0": {
- "family_name": "JetBrainsMono NFM",
- "font-family": "JetBrainsMono NFM",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-Bold.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-BoldItalic.ttf||2475144:1745519248.0": {
- "family_name": "JetBrainsMono NFM",
- "font-family": "JetBrainsMono NFM",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-BoldItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-ExtraBold.ttf||2475648:1745519248.0": {
- "family_name": "JetBrainsMono NFM ExtraBold",
- "font-family": "JetBrainsMono NFM ExtraBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM ExtraBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-ExtraBold.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": "ExtraBold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-ExtraBoldItalic.ttf||2477160:1745519248.0": {
- "family_name": "JetBrainsMono NFM ExtraBold",
- "font-family": "JetBrainsMono NFM ExtraBold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM ExtraBold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-ExtraBoldItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": "ExtraBold Italic",
- "subfamily_name": "Italic",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-ExtraLight.ttf||2470252:1745519248.0": {
- "family_name": "JetBrainsMono NFM ExtraLight",
- "font-family": "JetBrainsMono NFM ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-ExtraLight.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-ExtraLightItalic.ttf||2469576:1745519248.0": {
- "family_name": "JetBrainsMono NFM ExtraLight",
- "font-family": "JetBrainsMono NFM ExtraLight",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM ExtraLight Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-ExtraLightItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": "ExtraLight Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-Italic.ttf||2472232:1745519248.0": {
- "family_name": "JetBrainsMono NFM",
- "font-family": "JetBrainsMono NFM",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-Italic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-Light.ttf||2472540:1745519248.0": {
- "family_name": "JetBrainsMono NFM Light",
- "font-family": "JetBrainsMono NFM Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-Light.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-LightItalic.ttf||2472460:1745519248.0": {
- "family_name": "JetBrainsMono NFM Light",
- "font-family": "JetBrainsMono NFM Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-LightItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-Medium.ttf||2469988:1745519248.0": {
- "family_name": "JetBrainsMono NFM Medium",
- "font-family": "JetBrainsMono NFM Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-Medium.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-MediumItalic.ttf||2472180:1745519248.0": {
- "family_name": "JetBrainsMono NFM Medium",
- "font-family": "JetBrainsMono NFM Medium",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM Medium Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-MediumItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": "Medium Italic",
- "subfamily_name": "Italic",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-Regular.ttf||2470116:1745519248.0": {
- "family_name": "JetBrainsMono NFM",
- "font-family": "JetBrainsMono NFM",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-Regular.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-SemiBold.ttf||2473228:1745519248.0": {
- "family_name": "JetBrainsMono NFM SemiBold",
- "font-family": "JetBrainsMono NFM SemiBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM SemiBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-SemiBold.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-SemiBoldItalic.ttf||2475252:1745519248.0": {
- "family_name": "JetBrainsMono NFM SemiBold",
- "font-family": "JetBrainsMono NFM SemiBold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM SemiBold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-SemiBoldItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": "SemiBold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-Thin.ttf||2466256:1745519248.0": {
- "family_name": "JetBrainsMono NFM Thin",
- "font-family": "JetBrainsMono NFM Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-Thin.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-ThinItalic.ttf||2468384:1745519248.0": {
- "family_name": "JetBrainsMono NFM Thin",
- "font-family": "JetBrainsMono NFM Thin",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFM Thin Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontMono-ThinItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Mono",
- "preferred_subfamily_name": "Thin Italic",
- "subfamily_name": "Italic",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-Bold.ttf||2472732:1745519248.0": {
- "family_name": "JetBrainsMono NFP",
- "font-family": "JetBrainsMono NFP",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-Bold.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-BoldItalic.ttf||2473956:1745519248.0": {
- "family_name": "JetBrainsMono NFP",
- "font-family": "JetBrainsMono NFP",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-BoldItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-ExtraBold.ttf||2474496:1745519248.0": {
- "family_name": "JetBrainsMono NFP ExtraBold",
- "font-family": "JetBrainsMono NFP ExtraBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP ExtraBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-ExtraBold.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": "ExtraBold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-ExtraBoldItalic.ttf||2475976:1745519248.0": {
- "family_name": "JetBrainsMono NFP ExtraBold",
- "font-family": "JetBrainsMono NFP ExtraBold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP ExtraBold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-ExtraBoldItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": "ExtraBold Italic",
- "subfamily_name": "Italic",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-ExtraLight.ttf||2469100:1745519248.0": {
- "family_name": "JetBrainsMono NFP ExtraLight",
- "font-family": "JetBrainsMono NFP ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-ExtraLight.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-ExtraLightItalic.ttf||2468392:1745519248.0": {
- "family_name": "JetBrainsMono NFP ExtraLight",
- "font-family": "JetBrainsMono NFP ExtraLight",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP ExtraLight Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-ExtraLightItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": "ExtraLight Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-Italic.ttf||2471048:1745519248.0": {
- "family_name": "JetBrainsMono NFP",
- "font-family": "JetBrainsMono NFP",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-Italic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-Light.ttf||2471388:1745519248.0": {
- "family_name": "JetBrainsMono NFP Light",
- "font-family": "JetBrainsMono NFP Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-Light.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-LightItalic.ttf||2471276:1745519248.0": {
- "family_name": "JetBrainsMono NFP Light",
- "font-family": "JetBrainsMono NFP Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-LightItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-Medium.ttf||2468836:1745519248.0": {
- "family_name": "JetBrainsMono NFP Medium",
- "font-family": "JetBrainsMono NFP Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-Medium.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-MediumItalic.ttf||2470996:1745519248.0": {
- "family_name": "JetBrainsMono NFP Medium",
- "font-family": "JetBrainsMono NFP Medium",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP Medium Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-MediumItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": "Medium Italic",
- "subfamily_name": "Italic",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-Regular.ttf||2468964:1745519248.0": {
- "family_name": "JetBrainsMono NFP",
- "font-family": "JetBrainsMono NFP",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-Regular.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-SemiBold.ttf||2472072:1745519248.0": {
- "family_name": "JetBrainsMono NFP SemiBold",
- "font-family": "JetBrainsMono NFP SemiBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP SemiBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-SemiBold.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-SemiBoldItalic.ttf||2474064:1745519248.0": {
- "family_name": "JetBrainsMono NFP SemiBold",
- "font-family": "JetBrainsMono NFP SemiBold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP SemiBold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-SemiBoldItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": "SemiBold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-Thin.ttf||2465100:1745519248.0": {
- "family_name": "JetBrainsMono NFP Thin",
- "font-family": "JetBrainsMono NFP Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-Thin.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-ThinItalic.ttf||2467196:1745519248.0": {
- "family_name": "JetBrainsMono NFP Thin",
- "font-family": "JetBrainsMono NFP Thin",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "JetBrainsMono NFP Thin Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 0,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/JetBrainsMonoNerdFontPropo-ThinItalic.ttf",
- "preferred_family_name": "JetBrainsMono Nerd Font Propo",
- "preferred_subfamily_name": "Thin Italic",
- "subfamily_name": "Italic",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-Black.ttf||614544:1720269962.0": {
- "family_name": "Lato Black",
- "font-family": "Lato Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Lato Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-Black.ttf",
- "preferred_family_name": "Lato",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-BlackItalic.ttf||672480:1720269962.0": {
- "family_name": "Lato Black",
- "font-family": "Lato Black",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Lato Black Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-BlackItalic.ttf",
- "preferred_family_name": "Lato",
- "preferred_subfamily_name": "Black Italic",
- "subfamily_name": "Italic",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-Bold.ttf||657188:1720269962.0": {
- "family_name": "Lato",
- "font-family": "Lato",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Lato Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-BoldItalic.ttf||699008:1720269962.0": {
- "family_name": "Lato",
- "font-family": "Lato",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Lato Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-Hairline.ttf||584784:1720269962.0": {
- "family_name": "Lato Hairline",
- "font-family": "Lato Hairline",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "250",
- "fs_type": 0,
- "full_name": "Lato Hairline",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-Hairline.ttf",
- "preferred_family_name": "Lato",
- "preferred_subfamily_name": "Hairline",
- "subfamily_name": "Regular",
- "weight": 250,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-HairlineItalic.ttf||609436:1720269962.0": {
- "family_name": "Lato Hairline",
- "font-family": "Lato Hairline",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "250",
- "fs_type": 0,
- "full_name": "Lato Hairline Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-HairlineItalic.ttf",
- "preferred_family_name": "Lato",
- "preferred_subfamily_name": "Hairline Italic",
- "subfamily_name": "Italic",
- "weight": 250,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-Heavy.ttf||665420:1720269962.0": {
- "family_name": "Lato Heavy",
- "font-family": "Lato Heavy",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "Lato Heavy",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-Heavy.ttf",
- "preferred_family_name": "Lato",
- "preferred_subfamily_name": "Heavy",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-HeavyItalic.ttf||698924:1720269962.0": {
- "family_name": "Lato Heavy",
- "font-family": "Lato Heavy",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "Lato Heavy Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-HeavyItalic.ttf",
- "preferred_family_name": "Lato",
- "preferred_subfamily_name": "Heavy Italic",
- "subfamily_name": "Italic",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-Italic.ttf||723544:1720269962.0": {
- "family_name": "Lato",
- "font-family": "Lato",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lato Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-Light.ttf||644556:1720269962.0": {
- "family_name": "Lato Light",
- "font-family": "Lato Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Lato Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-Light.ttf",
- "preferred_family_name": "Lato",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-LightItalic.ttf||658212:1720269962.0": {
- "family_name": "Lato Light",
- "font-family": "Lato Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Lato Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-LightItalic.ttf",
- "preferred_family_name": "Lato",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-Medium.ttf||637068:1720269962.0": {
- "family_name": "Lato Medium",
- "font-family": "Lato Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "Lato Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-Medium.ttf",
- "preferred_family_name": "Lato",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-MediumItalic.ttf||695588:1720269962.0": {
- "family_name": "Lato Medium",
- "font-family": "Lato Medium",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "Lato Medium Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-MediumItalic.ttf",
- "preferred_family_name": "Lato",
- "preferred_subfamily_name": "Medium Italic",
- "subfamily_name": "Italic",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-Regular.ttf||657212:1720269962.0": {
- "family_name": "Lato",
- "font-family": "Lato",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lato Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-Semibold.ttf||669228:1720269962.0": {
- "family_name": "Lato Semibold",
- "font-family": "Lato Semibold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Lato Semibold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-Semibold.ttf",
- "preferred_family_name": "Lato",
- "preferred_subfamily_name": "Semibold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-SemiboldItalic.ttf||698028:1720269962.0": {
- "family_name": "Lato Semibold",
- "font-family": "Lato Semibold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Lato Semibold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-SemiboldItalic.ttf",
- "preferred_family_name": "Lato",
- "preferred_subfamily_name": "Semibold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-Thin.ttf||627220:1720269962.0": {
- "family_name": "Lato Thin",
- "font-family": "Lato Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "275",
- "fs_type": 0,
- "full_name": "Lato Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-Thin.ttf",
- "preferred_family_name": "Lato",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 275,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lato-ThinItalic.ttf||654216:1720269962.0": {
- "family_name": "Lato Thin",
- "font-family": "Lato Thin",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "275",
- "fs_type": 0,
- "full_name": "Lato Thin Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 15,
- 5,
- 2,
- 2,
- 2,
- 4,
- 3,
- 2,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Lato-ThinItalic.ttf",
- "preferred_family_name": "Lato",
- "preferred_subfamily_name": "Thin Italic",
- "subfamily_name": "Italic",
- "weight": 275,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lexend-Black.ttf||105484:1762977106.0": {
- "family_name": "Lexend Black",
- "font-family": "Lexend Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Lexend Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/Lexend-Black.ttf",
- "preferred_family_name": "Lexend",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lexend-Bold.ttf||105564:1762977106.0": {
- "family_name": "Lexend",
- "font-family": "Lexend",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Lexend Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/Lexend-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lexend-ExtraBold.ttf||105516:1762977106.0": {
- "family_name": "Lexend ExtraBold",
- "font-family": "Lexend ExtraBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "Lexend ExtraBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/Lexend-ExtraBold.ttf",
- "preferred_family_name": "Lexend",
- "preferred_subfamily_name": "ExtraBold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lexend-ExtraLight.ttf||100612:1762977106.0": {
- "family_name": "Lexend ExtraLight",
- "font-family": "Lexend ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Lexend ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/Lexend-ExtraLight.ttf",
- "preferred_family_name": "Lexend",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lexend-Light.ttf||100656:1762977106.0": {
- "family_name": "Lexend Light",
- "font-family": "Lexend Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Lexend Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/Lexend-Light.ttf",
- "preferred_family_name": "Lexend",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lexend-Medium.ttf||101904:1762977106.0": {
- "family_name": "Lexend Medium",
- "font-family": "Lexend Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "Lexend Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/Lexend-Medium.ttf",
- "preferred_family_name": "Lexend",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lexend-Regular.ttf||100264:1762977106.0": {
- "family_name": "Lexend",
- "font-family": "Lexend",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/Lexend-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lexend-SemiBold.ttf||102264:1762977106.0": {
- "family_name": "Lexend SemiBold",
- "font-family": "Lexend SemiBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Lexend SemiBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/Lexend-SemiBold.ttf",
- "preferred_family_name": "Lexend",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lexend-Thin.ttf||97420:1762977106.0": {
- "family_name": "Lexend Thin",
- "font-family": "Lexend Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "Lexend Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/Lexend-Thin.ttf",
- "preferred_family_name": "Lexend",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendDeca-Black.ttf||105528:1762977106.0": {
- "family_name": "Lexend Deca Black",
- "font-family": "Lexend Deca Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Lexend Deca Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendDeca-Black.ttf",
- "preferred_family_name": "Lexend Deca",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendDeca-Bold.ttf||105600:1762977106.0": {
- "family_name": "Lexend Deca",
- "font-family": "Lexend Deca",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Lexend Deca Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendDeca-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendDeca-ExtraBold.ttf||105560:1762977106.0": {
- "family_name": "Lexend Deca ExtraBold",
- "font-family": "Lexend Deca ExtraBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "Lexend Deca ExtraBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendDeca-ExtraBold.ttf",
- "preferred_family_name": "Lexend Deca",
- "preferred_subfamily_name": "ExtraBold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendDeca-ExtraLight.ttf||100660:1762977106.0": {
- "family_name": "Lexend Deca ExtraLight",
- "font-family": "Lexend Deca ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Lexend Deca ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendDeca-ExtraLight.ttf",
- "preferred_family_name": "Lexend Deca",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendDeca-Light.ttf||100700:1762977106.0": {
- "family_name": "Lexend Deca Light",
- "font-family": "Lexend Deca Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Lexend Deca Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendDeca-Light.ttf",
- "preferred_family_name": "Lexend Deca",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendDeca-Medium.ttf||101952:1762977106.0": {
- "family_name": "Lexend Deca Medium",
- "font-family": "Lexend Deca Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "Lexend Deca Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendDeca-Medium.ttf",
- "preferred_family_name": "Lexend Deca",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendDeca-Regular.ttf||100300:1762977106.0": {
- "family_name": "Lexend Deca",
- "font-family": "Lexend Deca",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Deca Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendDeca-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendDeca-SemiBold.ttf||102312:1762977106.0": {
- "family_name": "Lexend Deca SemiBold",
- "font-family": "Lexend Deca SemiBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Lexend Deca SemiBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendDeca-SemiBold.ttf",
- "preferred_family_name": "Lexend Deca",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendDeca-Thin.ttf||97468:1762977106.0": {
- "family_name": "Lexend Deca Thin",
- "font-family": "Lexend Deca Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "Lexend Deca Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendDeca-Thin.ttf",
- "preferred_family_name": "Lexend Deca",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendDeca[wght].ttf||174564:1762977106.0": {
- "family_name": "Lexend Deca",
- "font-family": "Lexend Deca",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Deca Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendDeca[wght].ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendExa-Black.ttf||105860:1762977106.0": {
- "family_name": "Lexend Exa Black",
- "font-family": "Lexend Exa Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Lexend Exa Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendExa-Black.ttf",
- "preferred_family_name": "Lexend Exa",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendExa-Bold.ttf||106728:1762977106.0": {
- "family_name": "Lexend Exa",
- "font-family": "Lexend Exa",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Lexend Exa Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendExa-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendExa-ExtraBold.ttf||106552:1762977106.0": {
- "family_name": "Lexend Exa ExtraBold",
- "font-family": "Lexend Exa ExtraBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "Lexend Exa ExtraBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendExa-ExtraBold.ttf",
- "preferred_family_name": "Lexend Exa",
- "preferred_subfamily_name": "ExtraBold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendExa-ExtraLight.ttf||101408:1762977106.0": {
- "family_name": "Lexend Exa ExtraLight",
- "font-family": "Lexend Exa ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Lexend Exa ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendExa-ExtraLight.ttf",
- "preferred_family_name": "Lexend Exa",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendExa-Light.ttf||101640:1762977106.0": {
- "family_name": "Lexend Exa Light",
- "font-family": "Lexend Exa Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Lexend Exa Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendExa-Light.ttf",
- "preferred_family_name": "Lexend Exa",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendExa-Medium.ttf||103160:1762977106.0": {
- "family_name": "Lexend Exa Medium",
- "font-family": "Lexend Exa Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "Lexend Exa Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendExa-Medium.ttf",
- "preferred_family_name": "Lexend Exa",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendExa-Regular.ttf||101208:1762977106.0": {
- "family_name": "Lexend Exa",
- "font-family": "Lexend Exa",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Exa Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendExa-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendExa-SemiBold.ttf||102852:1762977106.0": {
- "family_name": "Lexend Exa SemiBold",
- "font-family": "Lexend Exa SemiBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Lexend Exa SemiBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendExa-SemiBold.ttf",
- "preferred_family_name": "Lexend Exa",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendExa-Thin.ttf||98224:1762977106.0": {
- "family_name": "Lexend Exa Thin",
- "font-family": "Lexend Exa Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "Lexend Exa Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendExa-Thin.ttf",
- "preferred_family_name": "Lexend Exa",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendExa[wght].ttf||188436:1762977106.0": {
- "family_name": "Lexend Exa",
- "font-family": "Lexend Exa",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Exa Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendExa[wght].ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendGiga-Black.ttf||106152:1762977106.0": {
- "family_name": "Lexend Giga Black",
- "font-family": "Lexend Giga Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Lexend Giga Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendGiga-Black.ttf",
- "preferred_family_name": "Lexend Giga",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendGiga-Bold.ttf||107492:1762977106.0": {
- "family_name": "Lexend Giga",
- "font-family": "Lexend Giga",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Lexend Giga Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendGiga-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendGiga-ExtraBold.ttf||106868:1762977106.0": {
- "family_name": "Lexend Giga ExtraBold",
- "font-family": "Lexend Giga ExtraBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "Lexend Giga ExtraBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendGiga-ExtraBold.ttf",
- "preferred_family_name": "Lexend Giga",
- "preferred_subfamily_name": "ExtraBold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendGiga-ExtraLight.ttf||101384:1762977106.0": {
- "family_name": "Lexend Giga ExtraLight",
- "font-family": "Lexend Giga ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Lexend Giga ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendGiga-ExtraLight.ttf",
- "preferred_family_name": "Lexend Giga",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendGiga-Light.ttf||102132:1762977106.0": {
- "family_name": "Lexend Giga Light",
- "font-family": "Lexend Giga Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Lexend Giga Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendGiga-Light.ttf",
- "preferred_family_name": "Lexend Giga",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendGiga-Medium.ttf||103652:1762977106.0": {
- "family_name": "Lexend Giga Medium",
- "font-family": "Lexend Giga Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "Lexend Giga Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendGiga-Medium.ttf",
- "preferred_family_name": "Lexend Giga",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendGiga-Regular.ttf||101324:1762977106.0": {
- "family_name": "Lexend Giga",
- "font-family": "Lexend Giga",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Giga Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendGiga-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendGiga-SemiBold.ttf||103968:1762977106.0": {
- "family_name": "Lexend Giga SemiBold",
- "font-family": "Lexend Giga SemiBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Lexend Giga SemiBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendGiga-SemiBold.ttf",
- "preferred_family_name": "Lexend Giga",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendGiga-Thin.ttf||98272:1762977106.0": {
- "family_name": "Lexend Giga Thin",
- "font-family": "Lexend Giga Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "Lexend Giga Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendGiga-Thin.ttf",
- "preferred_family_name": "Lexend Giga",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendGiga[wght].ttf||190576:1762977106.0": {
- "family_name": "Lexend Giga",
- "font-family": "Lexend Giga",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Giga Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendGiga[wght].ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendMega-Black.ttf||106232:1762977106.0": {
- "family_name": "Lexend Mega Black",
- "font-family": "Lexend Mega Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Lexend Mega Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendMega-Black.ttf",
- "preferred_family_name": "Lexend Mega",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendMega-Bold.ttf||107376:1762977106.0": {
- "family_name": "Lexend Mega",
- "font-family": "Lexend Mega",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Lexend Mega Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendMega-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendMega-ExtraBold.ttf||107024:1762977106.0": {
- "family_name": "Lexend Mega ExtraBold",
- "font-family": "Lexend Mega ExtraBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "Lexend Mega ExtraBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendMega-ExtraBold.ttf",
- "preferred_family_name": "Lexend Mega",
- "preferred_subfamily_name": "ExtraBold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendMega-ExtraLight.ttf||101480:1762977106.0": {
- "family_name": "Lexend Mega ExtraLight",
- "font-family": "Lexend Mega ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Lexend Mega ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendMega-ExtraLight.ttf",
- "preferred_family_name": "Lexend Mega",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendMega-Light.ttf||102224:1762977106.0": {
- "family_name": "Lexend Mega Light",
- "font-family": "Lexend Mega Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Lexend Mega Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendMega-Light.ttf",
- "preferred_family_name": "Lexend Mega",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendMega-Medium.ttf||103832:1762977106.0": {
- "family_name": "Lexend Mega Medium",
- "font-family": "Lexend Mega Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "Lexend Mega Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendMega-Medium.ttf",
- "preferred_family_name": "Lexend Mega",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendMega-Regular.ttf||101464:1762977106.0": {
- "family_name": "Lexend Mega",
- "font-family": "Lexend Mega",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Mega Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendMega-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendMega-SemiBold.ttf||103916:1762977106.0": {
- "family_name": "Lexend Mega SemiBold",
- "font-family": "Lexend Mega SemiBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Lexend Mega SemiBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendMega-SemiBold.ttf",
- "preferred_family_name": "Lexend Mega",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendMega-Thin.ttf||98416:1762977106.0": {
- "family_name": "Lexend Mega Thin",
- "font-family": "Lexend Mega Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "Lexend Mega Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendMega-Thin.ttf",
- "preferred_family_name": "Lexend Mega",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendMega[wght].ttf||190592:1762977106.0": {
- "family_name": "Lexend Mega",
- "font-family": "Lexend Mega",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Mega Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendMega[wght].ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendPeta-Black.ttf||106436:1762977106.0": {
- "family_name": "Lexend Peta Black",
- "font-family": "Lexend Peta Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Lexend Peta Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendPeta-Black.ttf",
- "preferred_family_name": "Lexend Peta",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendPeta-Bold.ttf||107428:1762977106.0": {
- "family_name": "Lexend Peta",
- "font-family": "Lexend Peta",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Lexend Peta Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendPeta-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendPeta-ExtraBold.ttf||107144:1762977106.0": {
- "family_name": "Lexend Peta ExtraBold",
- "font-family": "Lexend Peta ExtraBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "Lexend Peta ExtraBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendPeta-ExtraBold.ttf",
- "preferred_family_name": "Lexend Peta",
- "preferred_subfamily_name": "ExtraBold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendPeta-ExtraLight.ttf||101660:1762977106.0": {
- "family_name": "Lexend Peta ExtraLight",
- "font-family": "Lexend Peta ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Lexend Peta ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendPeta-ExtraLight.ttf",
- "preferred_family_name": "Lexend Peta",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendPeta-Light.ttf||102324:1762977106.0": {
- "family_name": "Lexend Peta Light",
- "font-family": "Lexend Peta Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Lexend Peta Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendPeta-Light.ttf",
- "preferred_family_name": "Lexend Peta",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendPeta-Medium.ttf||103800:1762977106.0": {
- "family_name": "Lexend Peta Medium",
- "font-family": "Lexend Peta Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "Lexend Peta Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendPeta-Medium.ttf",
- "preferred_family_name": "Lexend Peta",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendPeta-Regular.ttf||101436:1762977106.0": {
- "family_name": "Lexend Peta",
- "font-family": "Lexend Peta",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Peta Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendPeta-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendPeta-SemiBold.ttf||103844:1762977106.0": {
- "family_name": "Lexend Peta SemiBold",
- "font-family": "Lexend Peta SemiBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Lexend Peta SemiBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendPeta-SemiBold.ttf",
- "preferred_family_name": "Lexend Peta",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendPeta-Thin.ttf||98576:1762977106.0": {
- "family_name": "Lexend Peta Thin",
- "font-family": "Lexend Peta Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "Lexend Peta Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendPeta-Thin.ttf",
- "preferred_family_name": "Lexend Peta",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendPeta[wght].ttf||190708:1762977106.0": {
- "family_name": "Lexend Peta",
- "font-family": "Lexend Peta",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Peta Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendPeta[wght].ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendTera-Black.ttf||106516:1762977106.0": {
- "family_name": "Lexend Tera Black",
- "font-family": "Lexend Tera Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Lexend Tera Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendTera-Black.ttf",
- "preferred_family_name": "Lexend Tera",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendTera-Bold.ttf||107324:1762977106.0": {
- "family_name": "Lexend Tera",
- "font-family": "Lexend Tera",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Lexend Tera Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendTera-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendTera-ExtraBold.ttf||107188:1762977106.0": {
- "family_name": "Lexend Tera ExtraBold",
- "font-family": "Lexend Tera ExtraBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "Lexend Tera ExtraBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendTera-ExtraBold.ttf",
- "preferred_family_name": "Lexend Tera",
- "preferred_subfamily_name": "ExtraBold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendTera-ExtraLight.ttf||101600:1762977106.0": {
- "family_name": "Lexend Tera ExtraLight",
- "font-family": "Lexend Tera ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Lexend Tera ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendTera-ExtraLight.ttf",
- "preferred_family_name": "Lexend Tera",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendTera-Light.ttf||102320:1762977106.0": {
- "family_name": "Lexend Tera Light",
- "font-family": "Lexend Tera Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Lexend Tera Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendTera-Light.ttf",
- "preferred_family_name": "Lexend Tera",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendTera-Medium.ttf||104020:1762977106.0": {
- "family_name": "Lexend Tera Medium",
- "font-family": "Lexend Tera Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "Lexend Tera Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendTera-Medium.ttf",
- "preferred_family_name": "Lexend Tera",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendTera-Regular.ttf||101472:1762977106.0": {
- "family_name": "Lexend Tera",
- "font-family": "Lexend Tera",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Tera Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendTera-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendTera-SemiBold.ttf||103904:1762977106.0": {
- "family_name": "Lexend Tera SemiBold",
- "font-family": "Lexend Tera SemiBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Lexend Tera SemiBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendTera-SemiBold.ttf",
- "preferred_family_name": "Lexend Tera",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendTera-Thin.ttf||98496:1762977106.0": {
- "family_name": "Lexend Tera Thin",
- "font-family": "Lexend Tera Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "Lexend Tera Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendTera-Thin.ttf",
- "preferred_family_name": "Lexend Tera",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendTera[wght].ttf||191036:1762977106.0": {
- "family_name": "Lexend Tera",
- "font-family": "Lexend Tera",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Tera Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendTera[wght].ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendZetta-Black.ttf||107560:1762977106.0": {
- "family_name": "Lexend Zetta Black",
- "font-family": "Lexend Zetta Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Lexend Zetta Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendZetta-Black.ttf",
- "preferred_family_name": "Lexend Zetta",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendZetta-Bold.ttf||107952:1762977106.0": {
- "family_name": "Lexend Zetta",
- "font-family": "Lexend Zetta",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Lexend Zetta Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendZetta-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendZetta-ExtraBold.ttf||107344:1762977106.0": {
- "family_name": "Lexend Zetta ExtraBold",
- "font-family": "Lexend Zetta ExtraBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "800",
- "fs_type": 0,
- "full_name": "Lexend Zetta ExtraBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendZetta-ExtraBold.ttf",
- "preferred_family_name": "Lexend Zetta",
- "preferred_subfamily_name": "ExtraBold",
- "subfamily_name": "Regular",
- "weight": 800,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendZetta-ExtraLight.ttf||101704:1762977106.0": {
- "family_name": "Lexend Zetta ExtraLight",
- "font-family": "Lexend Zetta ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Lexend Zetta ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendZetta-ExtraLight.ttf",
- "preferred_family_name": "Lexend Zetta",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendZetta-Light.ttf||102120:1762977106.0": {
- "family_name": "Lexend Zetta Light",
- "font-family": "Lexend Zetta Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Lexend Zetta Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendZetta-Light.ttf",
- "preferred_family_name": "Lexend Zetta",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendZetta-Medium.ttf||104036:1762977106.0": {
- "family_name": "Lexend Zetta Medium",
- "font-family": "Lexend Zetta Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "Lexend Zetta Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendZetta-Medium.ttf",
- "preferred_family_name": "Lexend Zetta",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendZetta-Regular.ttf||102040:1762977106.0": {
- "family_name": "Lexend Zetta",
- "font-family": "Lexend Zetta",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Zetta Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendZetta-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendZetta-SemiBold.ttf||104448:1762977106.0": {
- "family_name": "Lexend Zetta SemiBold",
- "font-family": "Lexend Zetta SemiBold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Lexend Zetta SemiBold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendZetta-SemiBold.ttf",
- "preferred_family_name": "Lexend Zetta",
- "preferred_subfamily_name": "SemiBold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendZetta-Thin.ttf||98616:1762977106.0": {
- "family_name": "Lexend Zetta Thin",
- "font-family": "Lexend Zetta Thin",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "100",
- "fs_type": 0,
- "full_name": "Lexend Zetta Thin",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendZetta-Thin.ttf",
- "preferred_family_name": "Lexend Zetta",
- "preferred_subfamily_name": "Thin",
- "subfamily_name": "Regular",
- "weight": 100,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/LexendZetta[wght].ttf||191192:1762977106.0": {
- "family_name": "Lexend Zetta",
- "font-family": "Lexend Zetta",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Zetta Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/LexendZetta[wght].ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Lexend[HEXP,wght].ttf||240288:1762977106.0": {
- "family_name": "Lexend",
- "font-family": "Lexend",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Lexend Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/Lexend[HEXP,wght].ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLDZNerdFont-Bold.ttf||2870796:1745519248.0": {
- "family_name": "MesloLGLDZ Nerd Font",
- "font-family": "MesloLGLDZ Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGLDZ Nerd Font Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLDZNerdFont-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLDZNerdFont-BoldItalic.ttf||2828752:1745519248.0": {
- "family_name": "MesloLGLDZ Nerd Font",
- "font-family": "MesloLGLDZ Nerd Font",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGLDZ Nerd Font Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLDZNerdFont-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLDZNerdFont-Italic.ttf||2812340:1745519248.0": {
- "family_name": "MesloLGLDZ Nerd Font",
- "font-family": "MesloLGLDZ Nerd Font",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGLDZ Nerd Font Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLDZNerdFont-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLDZNerdFont-Regular.ttf||2853588:1745519248.0": {
- "family_name": "MesloLGLDZ Nerd Font",
- "font-family": "MesloLGLDZ Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGLDZ Nerd Font Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLDZNerdFont-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLDZNerdFontMono-Bold.ttf||2849396:1745519248.0": {
- "family_name": "MesloLGLDZ Nerd Font Mono",
- "font-family": "MesloLGLDZ Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGLDZ Nerd Font Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLDZNerdFontMono-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLDZNerdFontMono-BoldItalic.ttf||2807872:1745519248.0": {
- "family_name": "MesloLGLDZ Nerd Font Mono",
- "font-family": "MesloLGLDZ Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGLDZ Nerd Font Mono Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLDZNerdFontMono-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLDZNerdFontMono-Italic.ttf||2791460:1745519248.0": {
- "family_name": "MesloLGLDZ Nerd Font Mono",
- "font-family": "MesloLGLDZ Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGLDZ Nerd Font Mono Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLDZNerdFontMono-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLDZNerdFontMono-Regular.ttf||2832192:1745519248.0": {
- "family_name": "MesloLGLDZ Nerd Font Mono",
- "font-family": "MesloLGLDZ Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGLDZ Nerd Font Mono Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLDZNerdFontMono-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLDZNerdFontPropo-Bold.ttf||2870644:1745519248.0": {
- "family_name": "MesloLGLDZ Nerd Font Propo",
- "font-family": "MesloLGLDZ Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGLDZ Nerd Font Propo Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLDZNerdFontPropo-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLDZNerdFontPropo-BoldItalic.ttf||2828596:1745519248.0": {
- "family_name": "MesloLGLDZ Nerd Font Propo",
- "font-family": "MesloLGLDZ Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGLDZ Nerd Font Propo Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLDZNerdFontPropo-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLDZNerdFontPropo-Italic.ttf||2812188:1745519248.0": {
- "family_name": "MesloLGLDZ Nerd Font Propo",
- "font-family": "MesloLGLDZ Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGLDZ Nerd Font Propo Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLDZNerdFontPropo-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLDZNerdFontPropo-Regular.ttf||2853436:1745519248.0": {
- "family_name": "MesloLGLDZ Nerd Font Propo",
- "font-family": "MesloLGLDZ Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGLDZ Nerd Font Propo Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLDZNerdFontPropo-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLNerdFont-Bold.ttf||2870760:1745519248.0": {
- "family_name": "MesloLGL Nerd Font",
- "font-family": "MesloLGL Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGL Nerd Font Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLNerdFont-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLNerdFont-BoldItalic.ttf||2828720:1745519248.0": {
- "family_name": "MesloLGL Nerd Font",
- "font-family": "MesloLGL Nerd Font",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGL Nerd Font Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLNerdFont-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLNerdFont-Italic.ttf||2812300:1745519248.0": {
- "family_name": "MesloLGL Nerd Font",
- "font-family": "MesloLGL Nerd Font",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGL Nerd Font Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLNerdFont-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLNerdFont-Regular.ttf||2853552:1745519248.0": {
- "family_name": "MesloLGL Nerd Font",
- "font-family": "MesloLGL Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGL Nerd Font Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLNerdFont-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLNerdFontMono-Bold.ttf||2849360:1745519248.0": {
- "family_name": "MesloLGL Nerd Font Mono",
- "font-family": "MesloLGL Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGL Nerd Font Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLNerdFontMono-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLNerdFontMono-BoldItalic.ttf||2807840:1745519248.0": {
- "family_name": "MesloLGL Nerd Font Mono",
- "font-family": "MesloLGL Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGL Nerd Font Mono Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLNerdFontMono-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLNerdFontMono-Italic.ttf||2791420:1745519248.0": {
- "family_name": "MesloLGL Nerd Font Mono",
- "font-family": "MesloLGL Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGL Nerd Font Mono Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLNerdFontMono-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLNerdFontMono-Regular.ttf||2832156:1745519248.0": {
- "family_name": "MesloLGL Nerd Font Mono",
- "font-family": "MesloLGL Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGL Nerd Font Mono Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLNerdFontMono-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLNerdFontPropo-Bold.ttf||2870608:1745519248.0": {
- "family_name": "MesloLGL Nerd Font Propo",
- "font-family": "MesloLGL Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGL Nerd Font Propo Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLNerdFontPropo-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLNerdFontPropo-BoldItalic.ttf||2828564:1745519248.0": {
- "family_name": "MesloLGL Nerd Font Propo",
- "font-family": "MesloLGL Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGL Nerd Font Propo Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLNerdFontPropo-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLNerdFontPropo-Italic.ttf||2812148:1745519248.0": {
- "family_name": "MesloLGL Nerd Font Propo",
- "font-family": "MesloLGL Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGL Nerd Font Propo Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLNerdFontPropo-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGLNerdFontPropo-Regular.ttf||2853400:1745519248.0": {
- "family_name": "MesloLGL Nerd Font Propo",
- "font-family": "MesloLGL Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGL Nerd Font Propo Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGLNerdFontPropo-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMDZNerdFont-Bold.ttf||2870760:1745519248.0": {
- "family_name": "MesloLGMDZ Nerd Font",
- "font-family": "MesloLGMDZ Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGMDZ Nerd Font Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMDZNerdFont-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMDZNerdFont-BoldItalic.ttf||2828716:1745519248.0": {
- "family_name": "MesloLGMDZ Nerd Font",
- "font-family": "MesloLGMDZ Nerd Font",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGMDZ Nerd Font Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMDZNerdFont-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMDZNerdFont-Italic.ttf||2812352:1745519248.0": {
- "family_name": "MesloLGMDZ Nerd Font",
- "font-family": "MesloLGMDZ Nerd Font",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGMDZ Nerd Font Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMDZNerdFont-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMDZNerdFont-Regular.ttf||2853600:1745519248.0": {
- "family_name": "MesloLGMDZ Nerd Font",
- "font-family": "MesloLGMDZ Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGMDZ Nerd Font Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMDZNerdFont-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMDZNerdFontMono-Bold.ttf||2849148:1745519248.0": {
- "family_name": "MesloLGMDZ Nerd Font Mono",
- "font-family": "MesloLGMDZ Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGMDZ Nerd Font Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMDZNerdFontMono-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMDZNerdFontMono-BoldItalic.ttf||2807624:1745519248.0": {
- "family_name": "MesloLGMDZ Nerd Font Mono",
- "font-family": "MesloLGMDZ Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGMDZ Nerd Font Mono Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMDZNerdFontMono-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMDZNerdFontMono-Italic.ttf||2791260:1745519248.0": {
- "family_name": "MesloLGMDZ Nerd Font Mono",
- "font-family": "MesloLGMDZ Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGMDZ Nerd Font Mono Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMDZNerdFontMono-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMDZNerdFontMono-Regular.ttf||2831992:1745519248.0": {
- "family_name": "MesloLGMDZ Nerd Font Mono",
- "font-family": "MesloLGMDZ Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGMDZ Nerd Font Mono Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMDZNerdFontMono-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMDZNerdFontPropo-Bold.ttf||2870608:1745519248.0": {
- "family_name": "MesloLGMDZ Nerd Font Propo",
- "font-family": "MesloLGMDZ Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGMDZ Nerd Font Propo Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMDZNerdFontPropo-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMDZNerdFontPropo-BoldItalic.ttf||2828560:1745519248.0": {
- "family_name": "MesloLGMDZ Nerd Font Propo",
- "font-family": "MesloLGMDZ Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGMDZ Nerd Font Propo Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMDZNerdFontPropo-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMDZNerdFontPropo-Italic.ttf||2812200:1745519248.0": {
- "family_name": "MesloLGMDZ Nerd Font Propo",
- "font-family": "MesloLGMDZ Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGMDZ Nerd Font Propo Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMDZNerdFontPropo-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMDZNerdFontPropo-Regular.ttf||2853448:1745519248.0": {
- "family_name": "MesloLGMDZ Nerd Font Propo",
- "font-family": "MesloLGMDZ Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGMDZ Nerd Font Propo Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMDZNerdFontPropo-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMNerdFont-Bold.ttf||2870724:1745519248.0": {
- "family_name": "MesloLGM Nerd Font",
- "font-family": "MesloLGM Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGM Nerd Font Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMNerdFont-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMNerdFont-BoldItalic.ttf||2828684:1745519248.0": {
- "family_name": "MesloLGM Nerd Font",
- "font-family": "MesloLGM Nerd Font",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGM Nerd Font Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMNerdFont-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMNerdFont-Italic.ttf||2812312:1745519248.0": {
- "family_name": "MesloLGM Nerd Font",
- "font-family": "MesloLGM Nerd Font",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGM Nerd Font Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMNerdFont-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMNerdFont-Regular.ttf||2853564:1745519248.0": {
- "family_name": "MesloLGM Nerd Font",
- "font-family": "MesloLGM Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGM Nerd Font Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMNerdFont-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMNerdFontMono-Bold.ttf||2849112:1745519248.0": {
- "family_name": "MesloLGM Nerd Font Mono",
- "font-family": "MesloLGM Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGM Nerd Font Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMNerdFontMono-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMNerdFontMono-BoldItalic.ttf||2807592:1745519248.0": {
- "family_name": "MesloLGM Nerd Font Mono",
- "font-family": "MesloLGM Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGM Nerd Font Mono Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMNerdFontMono-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMNerdFontMono-Italic.ttf||2791220:1745519248.0": {
- "family_name": "MesloLGM Nerd Font Mono",
- "font-family": "MesloLGM Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGM Nerd Font Mono Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMNerdFontMono-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMNerdFontMono-Regular.ttf||2831956:1745519248.0": {
- "family_name": "MesloLGM Nerd Font Mono",
- "font-family": "MesloLGM Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGM Nerd Font Mono Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMNerdFontMono-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMNerdFontPropo-Bold.ttf||2870572:1745519248.0": {
- "family_name": "MesloLGM Nerd Font Propo",
- "font-family": "MesloLGM Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGM Nerd Font Propo Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMNerdFontPropo-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMNerdFontPropo-BoldItalic.ttf||2828528:1745519248.0": {
- "family_name": "MesloLGM Nerd Font Propo",
- "font-family": "MesloLGM Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGM Nerd Font Propo Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMNerdFontPropo-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMNerdFontPropo-Italic.ttf||2812160:1745519248.0": {
- "family_name": "MesloLGM Nerd Font Propo",
- "font-family": "MesloLGM Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGM Nerd Font Propo Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMNerdFontPropo-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGMNerdFontPropo-Regular.ttf||2853412:1745519248.0": {
- "family_name": "MesloLGM Nerd Font Propo",
- "font-family": "MesloLGM Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGM Nerd Font Propo Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGMNerdFontPropo-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSDZNerdFont-Bold.ttf||2870472:1745519248.0": {
- "family_name": "MesloLGSDZ Nerd Font",
- "font-family": "MesloLGSDZ Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGSDZ Nerd Font Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSDZNerdFont-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSDZNerdFont-BoldItalic.ttf||2828428:1745519248.0": {
- "family_name": "MesloLGSDZ Nerd Font",
- "font-family": "MesloLGSDZ Nerd Font",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGSDZ Nerd Font Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSDZNerdFont-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSDZNerdFont-Italic.ttf||2812112:1745519248.0": {
- "family_name": "MesloLGSDZ Nerd Font",
- "font-family": "MesloLGSDZ Nerd Font",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGSDZ Nerd Font Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSDZNerdFont-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSDZNerdFont-Regular.ttf||2853360:1745519248.0": {
- "family_name": "MesloLGSDZ Nerd Font",
- "font-family": "MesloLGSDZ Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGSDZ Nerd Font Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSDZNerdFont-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSDZNerdFontMono-Bold.ttf||2848808:1745519248.0": {
- "family_name": "MesloLGSDZ Nerd Font Mono",
- "font-family": "MesloLGSDZ Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGSDZ Nerd Font Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSDZNerdFontMono-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSDZNerdFontMono-BoldItalic.ttf||2807284:1745519248.0": {
- "family_name": "MesloLGSDZ Nerd Font Mono",
- "font-family": "MesloLGSDZ Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGSDZ Nerd Font Mono Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSDZNerdFontMono-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSDZNerdFontMono-Italic.ttf||2790968:1745519248.0": {
- "family_name": "MesloLGSDZ Nerd Font Mono",
- "font-family": "MesloLGSDZ Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGSDZ Nerd Font Mono Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSDZNerdFontMono-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSDZNerdFontMono-Regular.ttf||2831700:1745519248.0": {
- "family_name": "MesloLGSDZ Nerd Font Mono",
- "font-family": "MesloLGSDZ Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGSDZ Nerd Font Mono Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSDZNerdFontMono-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSDZNerdFontPropo-Bold.ttf||2870320:1745519248.0": {
- "family_name": "MesloLGSDZ Nerd Font Propo",
- "font-family": "MesloLGSDZ Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGSDZ Nerd Font Propo Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSDZNerdFontPropo-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSDZNerdFontPropo-BoldItalic.ttf||2828272:1745519248.0": {
- "family_name": "MesloLGSDZ Nerd Font Propo",
- "font-family": "MesloLGSDZ Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGSDZ Nerd Font Propo Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSDZNerdFontPropo-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSDZNerdFontPropo-Italic.ttf||2811960:1745519248.0": {
- "family_name": "MesloLGSDZ Nerd Font Propo",
- "font-family": "MesloLGSDZ Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGSDZ Nerd Font Propo Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSDZNerdFontPropo-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSDZNerdFontPropo-Regular.ttf||2853208:1745519248.0": {
- "family_name": "MesloLGSDZ Nerd Font Propo",
- "font-family": "MesloLGSDZ Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGSDZ Nerd Font Propo Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSDZNerdFontPropo-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSNerdFont-Bold.ttf||2870436:1745519248.0": {
- "family_name": "MesloLGS Nerd Font",
- "font-family": "MesloLGS Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGS Nerd Font Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSNerdFont-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSNerdFont-BoldItalic.ttf||2828396:1745519248.0": {
- "family_name": "MesloLGS Nerd Font",
- "font-family": "MesloLGS Nerd Font",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGS Nerd Font Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSNerdFont-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSNerdFont-Italic.ttf||2812072:1745519248.0": {
- "family_name": "MesloLGS Nerd Font",
- "font-family": "MesloLGS Nerd Font",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGS Nerd Font Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSNerdFont-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSNerdFont-Regular.ttf||2853324:1745519248.0": {
- "family_name": "MesloLGS Nerd Font",
- "font-family": "MesloLGS Nerd Font",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGS Nerd Font Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSNerdFont-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSNerdFontMono-Bold.ttf||2848772:1745519248.0": {
- "family_name": "MesloLGS Nerd Font Mono",
- "font-family": "MesloLGS Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGS Nerd Font Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSNerdFontMono-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSNerdFontMono-BoldItalic.ttf||2807252:1745519248.0": {
- "family_name": "MesloLGS Nerd Font Mono",
- "font-family": "MesloLGS Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGS Nerd Font Mono Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSNerdFontMono-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSNerdFontMono-Italic.ttf||2790928:1745519248.0": {
- "family_name": "MesloLGS Nerd Font Mono",
- "font-family": "MesloLGS Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGS Nerd Font Mono Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSNerdFontMono-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSNerdFontMono-Regular.ttf||2831664:1745519248.0": {
- "family_name": "MesloLGS Nerd Font Mono",
- "font-family": "MesloLGS Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGS Nerd Font Mono Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSNerdFontMono-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSNerdFontPropo-Bold.ttf||2870284:1745519248.0": {
- "family_name": "MesloLGS Nerd Font Propo",
- "font-family": "MesloLGS Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGS Nerd Font Propo Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSNerdFontPropo-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSNerdFontPropo-BoldItalic.ttf||2828240:1745519248.0": {
- "family_name": "MesloLGS Nerd Font Propo",
- "font-family": "MesloLGS Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "MesloLGS Nerd Font Propo Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSNerdFontPropo-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSNerdFontPropo-Italic.ttf||2811920:1745519248.0": {
- "family_name": "MesloLGS Nerd Font Propo",
- "font-family": "MesloLGS Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGS Nerd Font Propo Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSNerdFontPropo-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/MesloLGSNerdFontPropo-Regular.ttf||2853172:1745519248.0": {
- "family_name": "MesloLGS Nerd Font Propo",
- "font-family": "MesloLGS Nerd Font Propo",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "MesloLGS Nerd Font Propo Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/MesloLGSNerdFontPropo-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/SymbolsNerdFontMono-Regular.ttf||2507556:1745602343.0": {
- "family_name": "Symbols Nerd Font Mono",
- "font-family": "Symbols Nerd Font Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Symbols Nerd Font Mono",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": true,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/SymbolsNerdFontMono-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Times.TTF||330412:1747703126.0": {
- "family_name": "Times New Roman",
- "font-family": "Times New Roman",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Times New Roman",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 2,
- 6,
- 3,
- 5,
- 4,
- 5,
- 2,
- 3,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Times.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Timesbd.TTF||333900:1747703126.0": {
- "family_name": "Times New Roman",
- "font-family": "Times New Roman",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Times New Roman Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 2,
- 8,
- 3,
- 7,
- 5,
- 5,
- 2,
- 3,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Timesbd.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Timesbi.TTF||238612:1747703126.0": {
- "family_name": "Times New Roman",
- "font-family": "Times New Roman",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Times New Roman Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 2,
- 7,
- 3,
- 6,
- 5,
- 5,
- 9,
- 3,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Timesbi.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Timesi.TTF||247092:1747703126.0": {
- "family_name": "Times New Roman",
- "font-family": "Times New Roman",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Times New Roman Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 2,
- 5,
- 3,
- 5,
- 4,
- 5,
- 9,
- 3,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Timesi.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Trebucbd.ttf||123828:1747703126.0": {
- "family_name": "Trebuchet MS",
- "font-family": "Trebuchet MS",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 8,
- "full_name": "Trebuchet MS Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 7,
- 3,
- 2,
- 2,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Trebucbd.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/UBraille.ttf||154412:1747703135.0": {
- "family_name": "Braille",
- "font-family": "Braille",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Braille",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 0,
- 6,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/UBraille.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Vera.ttf||65932:1720917375.0": {
- "family_name": "Bitstream Vera Sans",
- "font-family": "Bitstream Vera Sans",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "Bitstream Vera Sans",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 3,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Vera.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Roman",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/VeraBI.ttf||63208:1720917375.0": {
- "family_name": "Bitstream Vera Sans",
- "font-family": "Bitstream Vera Sans",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "Bitstream Vera Sans Bold Oblique",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 8,
- 3,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/VeraBI.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Oblique",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/VeraBd.ttf||58716:1720917375.0": {
- "family_name": "Bitstream Vera Sans",
- "font-family": "Bitstream Vera Sans",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "Bitstream Vera Sans Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 8,
- 3,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/VeraBd.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/VeraIt.ttf||63684:1720917375.0": {
- "family_name": "Bitstream Vera Sans",
- "font-family": "Bitstream Vera Sans",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "Bitstream Vera Sans Oblique",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 3,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/VeraIt.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Oblique",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/VeraMoBI.ttf||55032:1720917375.0": {
- "family_name": "Bitstream Vera Sans Mono",
- "font-family": "Bitstream Vera Sans Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "Bitstream Vera Sans Mono Bold Oblique",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/VeraMoBI.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Oblique",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/VeraMoBd.ttf||49052:1720917375.0": {
- "family_name": "Bitstream Vera Sans Mono",
- "font-family": "Bitstream Vera Sans Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "Bitstream Vera Sans Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 7,
- 9,
- 3,
- 6,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/VeraMoBd.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/VeraMoIt.ttf||54508:1720917375.0": {
- "family_name": "Bitstream Vera Sans Mono",
- "font-family": "Bitstream Vera Sans Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "Bitstream Vera Sans Mono Oblique",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 3,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/VeraMoIt.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Oblique",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/VeraMono.ttf||49224:1720917375.0": {
- "family_name": "Bitstream Vera Sans Mono",
- "font-family": "Bitstream Vera Sans Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "Bitstream Vera Sans Mono",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 9,
- 3,
- 8,
- 4,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/VeraMono.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Roman",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/VeraSe.ttf||60280:1720917375.0": {
- "family_name": "Bitstream Vera Serif",
- "font-family": "Bitstream Vera Serif",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "Bitstream Vera Serif",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 6,
- 6,
- 3,
- 5,
- 6,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/VeraSe.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Roman",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/VeraSeBd.ttf||58736:1720917375.0": {
- "family_name": "Bitstream Vera Serif",
- "font-family": "Bitstream Vera Serif",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "Bitstream Vera Serif Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 6,
- 8,
- 3,
- 5,
- 6,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/VeraSeBd.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Verdana.TTF||139640:1747703126.0": {
- "family_name": "Verdana",
- "font-family": "Verdana",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Verdana",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 4,
- 3,
- 5,
- 4,
- 4,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Verdana.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Verdanab.TTF||136032:1747703126.0": {
- "family_name": "Verdana",
- "font-family": "Verdana",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Verdana Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 8,
- 4,
- 3,
- 5,
- 4,
- 4,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Verdanab.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Verdanai.TTF||154264:1747703126.0": {
- "family_name": "Verdana",
- "font-family": "Verdana",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Verdana Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 4,
- 3,
- 5,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Verdanai.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Verdanaz.TTF||153324:1747703126.0": {
- "family_name": "Verdana",
- "font-family": "Verdana",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Verdana Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 8,
- 4,
- 3,
- 5,
- 4,
- 11,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/Verdanaz.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/Webdings.TTF||118752:1747703126.0": {
- "family_name": "Webdings",
- "font-family": "Webdings",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Webdings",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 5,
- 3,
- 1,
- 2,
- 1,
- 5,
- 9,
- 6,
- 7,
- 3
- ],
- "path": "/usr/share/fonts/TTF/Webdings.TTF",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/all-the-icons.ttf||44732:1747703104.0": {
- "family_name": "all-the-icons",
- "font-family": "all-the-icons",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "all-the-icons",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/all-the-icons.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/cour.ttf||302688:1747703126.0": {
- "family_name": "Courier New",
- "font-family": "Courier New",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Courier New",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 7,
- 3,
- 9,
- 2,
- 2,
- 5,
- 2,
- 4,
- 4
- ],
- "path": "/usr/share/fonts/TTF/cour.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/courbd.ttf||311508:1747703126.0": {
- "family_name": "Courier New",
- "font-family": "Courier New",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Courier New Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 7,
- 6,
- 9,
- 2,
- 2,
- 5,
- 2,
- 4,
- 4
- ],
- "path": "/usr/share/fonts/TTF/courbd.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/courbi.ttf||234788:1747703126.0": {
- "family_name": "Courier New",
- "font-family": "Courier New",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Courier New Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 7,
- 6,
- 9,
- 2,
- 2,
- 5,
- 9,
- 4,
- 4
- ],
- "path": "/usr/share/fonts/TTF/courbi.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/couri.ttf||244156:1747703126.0": {
- "family_name": "Courier New",
- "font-family": "Courier New",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Courier New Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 7,
- 4,
- 9,
- 2,
- 2,
- 5,
- 9,
- 4,
- 4
- ],
- "path": "/usr/share/fonts/TTF/couri.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/file-icons.ttf||489672:1747703104.0": {
- "family_name": "file-icons",
- "font-family": "file-icons",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "file-icons",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/file-icons.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/fontawesome.ttf||152796:1747703104.0": {
- "family_name": "FontAwesome",
- "font-family": "FontAwesome",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "FontAwesome Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/fontawesome.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/literata-variable/Literata-Italic[opsz,wght].ttf||902728:1762976654.0": {
- "family_name": "Literata",
- "font-family": "Literata",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Literata Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/literata-variable/Literata-Italic[opsz,wght].ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/literata-variable/Literata[opsz,wght].ttf||955132:1762976654.0": {
- "family_name": "Literata",
- "font-family": "Literata",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Literata Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/literata-variable/Literata[opsz,wght].ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/material-design-icons.ttf||128180:1747703104.0": {
- "family_name": "Material Icons",
- "font-family": "Material Icons",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Material Icons",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 3,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/material-design-icons.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/octicons.ttf||52544:1747703104.0": {
- "family_name": "github-octicons",
- "font-family": "github-octicons",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 8,
- "full_name": "github-octicons",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 0,
- 5,
- 3,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/octicons.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/trebuc.ttf||126796:1747703126.0": {
- "family_name": "Trebuchet MS",
- "font-family": "Trebuchet MS",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 8,
- "full_name": "Trebuchet MS",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 3,
- 2,
- 2,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/trebuc.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/trebucbi.ttf||131188:1747703126.0": {
- "family_name": "Trebuchet MS",
- "font-family": "Trebuchet MS",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 8,
- "full_name": "Trebuchet MS Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 7,
- 3,
- 2,
- 2,
- 2,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/trebucbi.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/trebucit.ttf||139288:1747703126.0": {
- "family_name": "Trebuchet MS",
- "font-family": "Trebuchet MS",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 8,
- "full_name": "Trebuchet MS Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 1,
- "panose": [
- 2,
- 11,
- 6,
- 3,
- 2,
- 2,
- 2,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/TTF/trebucit.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/TTF/weathericons.ttf||99564:1747703104.0": {
- "family_name": "Weather Icons",
- "font-family": "Weather Icons",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "Weather Icons Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/TTF/weathericons.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3-Black.otf||337012:1720044504.0": {
- "family_name": "Source Sans 3 Black",
- "font-family": "Source Sans 3 Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Sans 3 Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 9,
- 3,
- 3,
- 4,
- 3,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3-Black.otf",
- "preferred_family_name": "Source Sans 3",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3-BlackIt.otf||240960:1720044504.0": {
- "family_name": "Source Sans 3 Black",
- "font-family": "Source Sans 3 Black",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Sans 3 Black Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 9,
- 3,
- 3,
- 4,
- 3,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3-BlackIt.otf",
- "preferred_family_name": "Source Sans 3",
- "preferred_subfamily_name": "Black Italic",
- "subfamily_name": "Italic",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3-Bold.otf||343596:1720044504.0": {
- "family_name": "Source Sans 3",
- "font-family": "Source Sans 3",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Sans 3 Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 8,
- 3,
- 3,
- 4,
- 3,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3-Bold.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3-BoldIt.otf||243664:1720044504.0": {
- "family_name": "Source Sans 3",
- "font-family": "Source Sans 3",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Sans 3 Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 8,
- 3,
- 3,
- 4,
- 3,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3-BoldIt.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3-ExtraLight.otf||318280:1720044504.0": {
- "family_name": "Source Sans 3 ExtraLight",
- "font-family": "Source Sans 3 ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Sans 3 ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 3,
- 3,
- 3,
- 4,
- 3,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3-ExtraLight.otf",
- "preferred_family_name": "Source Sans 3",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3-ExtraLightIt.otf||226468:1720044504.0": {
- "family_name": "Source Sans 3 ExtraLight",
- "font-family": "Source Sans 3 ExtraLight",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Sans 3 ExtraLight Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 3,
- 3,
- 3,
- 4,
- 3,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3-ExtraLightIt.otf",
- "preferred_family_name": "Source Sans 3",
- "preferred_subfamily_name": "ExtraLight Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3-It.otf||239048:1720044504.0": {
- "family_name": "Source Sans 3",
- "font-family": "Source Sans 3",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Sans 3 Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 5,
- 3,
- 3,
- 4,
- 3,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3-It.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3-Light.otf||327396:1720044504.0": {
- "family_name": "Source Sans 3 Light",
- "font-family": "Source Sans 3 Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Sans 3 Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 4,
- 3,
- 3,
- 4,
- 3,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3-Light.otf",
- "preferred_family_name": "Source Sans 3",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3-LightIt.otf||233512:1720044504.0": {
- "family_name": "Source Sans 3 Light",
- "font-family": "Source Sans 3 Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Sans 3 Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 4,
- 3,
- 3,
- 4,
- 3,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3-LightIt.otf",
- "preferred_family_name": "Source Sans 3",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3-Medium.otf||336848:1720044504.0": {
- "family_name": "Source Sans 3 Medium",
- "font-family": "Source Sans 3 Medium",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "Source Sans 3 Medium",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 6,
- 3,
- 3,
- 4,
- 3,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3-Medium.otf",
- "preferred_family_name": "Source Sans 3",
- "preferred_subfamily_name": "Medium",
- "subfamily_name": "Regular",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3-MediumIt.otf||239040:1720044504.0": {
- "family_name": "Source Sans 3 Medium",
- "font-family": "Source Sans 3 Medium",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "500",
- "fs_type": 0,
- "full_name": "Source Sans 3 Medium Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 6,
- 3,
- 3,
- 4,
- 3,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3-MediumIt.otf",
- "preferred_family_name": "Source Sans 3",
- "preferred_subfamily_name": "Medium Italic",
- "subfamily_name": "Italic",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3-Regular.otf||334924:1720044504.0": {
- "family_name": "Source Sans 3",
- "font-family": "Source Sans 3",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Sans 3",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 5,
- 3,
- 3,
- 4,
- 3,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3-Regular.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3-Semibold.otf||339636:1720044504.0": {
- "family_name": "Source Sans 3 Semibold",
- "font-family": "Source Sans 3 Semibold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Sans 3 Semibold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 7,
- 3,
- 3,
- 4,
- 3,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3-Semibold.otf",
- "preferred_family_name": "Source Sans 3",
- "preferred_subfamily_name": "Semibold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3-SemiboldIt.otf||239736:1720044504.0": {
- "family_name": "Source Sans 3 Semibold",
- "font-family": "Source Sans 3 Semibold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Sans 3 Semibold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 7,
- 3,
- 3,
- 4,
- 3,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3-SemiboldIt.otf",
- "preferred_family_name": "Source Sans 3",
- "preferred_subfamily_name": "Semibold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3VF-Italic.otf||303192:1720044504.0": {
- "family_name": "SourceSans3VF",
- "font-family": "SourceSans3VF",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "SourceSans3VF Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 3,
- 3,
- 3,
- 4,
- 3,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3VF-Italic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSans3VF-Upright.otf||538164:1720044504.0": {
- "family_name": "SourceSans3VF",
- "font-family": "SourceSans3VF",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "SourceSans3VF",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 11,
- 3,
- 3,
- 3,
- 4,
- 3,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSans3VF-Upright.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSansPro-Black.otf||295500:1720044504.0": {
- "family_name": "Source Sans Pro Black",
- "font-family": "Source Sans Pro Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Sans Pro Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 8,
- 3,
- 3,
- 4,
- 3,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSansPro-Black.otf",
- "preferred_family_name": "Source Sans Pro",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSansPro-BlackIt.otf||212660:1720044504.0": {
- "family_name": "Source Sans Pro Black",
- "font-family": "Source Sans Pro Black",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Sans Pro Black Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 8,
- 3,
- 3,
- 4,
- 3,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSansPro-BlackIt.otf",
- "preferred_family_name": "Source Sans Pro",
- "preferred_subfamily_name": "Black Italic",
- "subfamily_name": "Italic",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSansPro-Bold.otf||298076:1720044504.0": {
- "family_name": "Source Sans Pro",
- "font-family": "Source Sans Pro",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Sans Pro Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 7,
- 3,
- 3,
- 4,
- 3,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSansPro-Bold.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSansPro-BoldIt.otf||212380:1720044504.0": {
- "family_name": "Source Sans Pro",
- "font-family": "Source Sans Pro",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Sans Pro Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 7,
- 3,
- 3,
- 4,
- 3,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSansPro-BoldIt.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSansPro-ExtraLight.otf||282200:1720044504.0": {
- "family_name": "Source Sans Pro ExtraLight",
- "font-family": "Source Sans Pro ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Sans Pro ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 3,
- 3,
- 3,
- 4,
- 3,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSansPro-ExtraLight.otf",
- "preferred_family_name": "Source Sans Pro",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSansPro-ExtraLightIt.otf||198324:1720044504.0": {
- "family_name": "Source Sans Pro ExtraLight",
- "font-family": "Source Sans Pro ExtraLight",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Sans Pro ExtraLight Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 3,
- 3,
- 3,
- 4,
- 3,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSansPro-ExtraLightIt.otf",
- "preferred_family_name": "Source Sans Pro",
- "preferred_subfamily_name": "ExtraLight Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSansPro-It.otf||208408:1720044504.0": {
- "family_name": "Source Sans Pro",
- "font-family": "Source Sans Pro",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Sans Pro Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 5,
- 3,
- 3,
- 4,
- 3,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSansPro-It.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSansPro-Light.otf||290464:1720044504.0": {
- "family_name": "Source Sans Pro Light",
- "font-family": "Source Sans Pro Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Sans Pro Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 4,
- 3,
- 3,
- 4,
- 3,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSansPro-Light.otf",
- "preferred_family_name": "Source Sans Pro",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSansPro-LightIt.otf||204752:1720044504.0": {
- "family_name": "Source Sans Pro Light",
- "font-family": "Source Sans Pro Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Sans Pro Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 4,
- 3,
- 3,
- 4,
- 3,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSansPro-LightIt.otf",
- "preferred_family_name": "Source Sans Pro",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSansPro-Regular.otf||293200:1720044504.0": {
- "family_name": "Source Sans Pro",
- "font-family": "Source Sans Pro",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Sans Pro",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 5,
- 3,
- 3,
- 4,
- 3,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSansPro-Regular.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSansPro-Semibold.otf||295952:1720044504.0": {
- "family_name": "Source Sans Pro Semibold",
- "font-family": "Source Sans Pro Semibold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Sans Pro Semibold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 6,
- 3,
- 3,
- 4,
- 3,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSansPro-Semibold.otf",
- "preferred_family_name": "Source Sans Pro",
- "preferred_subfamily_name": "Semibold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSansPro-SemiboldIt.otf||210012:1720044504.0": {
- "family_name": "Source Sans Pro Semibold",
- "font-family": "Source Sans Pro Semibold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Sans Pro Semibold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 6,
- 3,
- 3,
- 4,
- 3,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSansPro-SemiboldIt.otf",
- "preferred_family_name": "Source Sans Pro",
- "preferred_subfamily_name": "Semibold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSansVariable-Italic.otf||252284:1720044504.0": {
- "family_name": "Source Sans Variable",
- "font-family": "Source Sans Variable",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Sans Variable Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 3,
- 3,
- 3,
- 4,
- 3,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSansVariable-Italic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-sans/SourceSansVariable-Roman.otf||467920:1720044504.0": {
- "family_name": "Source Sans Variable",
- "font-family": "Source Sans Variable",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Sans Variable",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 3,
- 3,
- 3,
- 4,
- 3,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-sans/SourceSansVariable-Roman.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": "Roman",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4-Black.otf||247640:1720044433.0": {
- "family_name": "Source Serif 4 Black",
- "font-family": "Source Serif 4 Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Serif 4 Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 9,
- 3,
- 6,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4-Black.otf",
- "preferred_family_name": "Source Serif 4",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4-BlackIt.otf||169532:1720044433.0": {
- "family_name": "Source Serif 4 Black",
- "font-family": "Source Serif 4 Black",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Serif 4 Black Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 8,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4-BlackIt.otf",
- "preferred_family_name": "Source Serif 4",
- "preferred_subfamily_name": "Black Italic",
- "subfamily_name": "Italic",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4-Bold.otf||251844:1720044433.0": {
- "family_name": "Source Serif 4",
- "font-family": "Source Serif 4",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Serif 4 Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 8,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4-Bold.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4-BoldIt.otf||175576:1720044433.0": {
- "family_name": "Source Serif 4",
- "font-family": "Source Serif 4",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Serif 4 Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 8,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4-BoldIt.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4-ExtraLight.otf||237768:1720044433.0": {
- "family_name": "Source Serif 4 ExtraLight",
- "font-family": "Source Serif 4 ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Serif 4 ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 3,
- 3,
- 3,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4-ExtraLight.otf",
- "preferred_family_name": "Source Serif 4",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4-ExtraLightIt.otf||162564:1720044433.0": {
- "family_name": "Source Serif 4 ExtraLight",
- "font-family": "Source Serif 4 ExtraLight",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Serif 4 ExtraLight Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 3,
- 3,
- 4,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4-ExtraLightIt.otf",
- "preferred_family_name": "Source Serif 4",
- "preferred_subfamily_name": "ExtraLight Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4-It.otf||169132:1720044433.0": {
- "family_name": "Source Serif 4",
- "font-family": "Source Serif 4",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Serif 4 Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 5,
- 3,
- 4,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4-It.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4-Light.otf||246032:1720044433.0": {
- "family_name": "Source Serif 4 Light",
- "font-family": "Source Serif 4 Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Serif 4 Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 4,
- 3,
- 4,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4-Light.otf",
- "preferred_family_name": "Source Serif 4",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4-LightIt.otf||173476:1720044433.0": {
- "family_name": "Source Serif 4 Light",
- "font-family": "Source Serif 4 Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Serif 4 Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 4,
- 3,
- 4,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4-LightIt.otf",
- "preferred_family_name": "Source Serif 4",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4-Regular.otf||241392:1720044433.0": {
- "family_name": "Source Serif 4",
- "font-family": "Source Serif 4",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Serif 4",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 6,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4-Regular.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4-Semibold.otf||252852:1720044433.0": {
- "family_name": "Source Serif 4 Semibold",
- "font-family": "Source Serif 4 Semibold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Serif 4 Semibold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 7,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4-Semibold.otf",
- "preferred_family_name": "Source Serif 4",
- "preferred_subfamily_name": "Semibold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4-SemiboldIt.otf||174988:1720044433.0": {
- "family_name": "Source Serif 4 Semibold",
- "font-family": "Source Serif 4 Semibold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Serif 4 Semibold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 6,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4-SemiboldIt.otf",
- "preferred_family_name": "Source Serif 4",
- "preferred_subfamily_name": "Semibold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-Black.otf||236952:1720044433.0": {
- "family_name": "Source Serif 4 Caption Black",
- "font-family": "Source Serif 4 Caption Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Serif 4 Caption Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 9,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-Black.otf",
- "preferred_family_name": "Source Serif 4 Caption",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-BlackIt.otf||160764:1720044433.0": {
- "family_name": "Source Serif 4 Caption Black",
- "font-family": "Source Serif 4 Caption Black",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Serif 4 Caption Black Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 9,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-BlackIt.otf",
- "preferred_family_name": "Source Serif 4 Caption",
- "preferred_subfamily_name": "Black Italic",
- "subfamily_name": "Italic",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-Bold.otf||243868:1720044433.0": {
- "family_name": "Source Serif 4 Caption",
- "font-family": "Source Serif 4 Caption",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Serif 4 Caption Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 8,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-Bold.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-BoldIt.otf||172204:1720044433.0": {
- "family_name": "Source Serif 4 Caption",
- "font-family": "Source Serif 4 Caption",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Serif 4 Caption Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 8,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-BoldIt.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-ExtraLight.otf||234244:1720044433.0": {
- "family_name": "Source Serif 4 Caption ExtraLight",
- "font-family": "Source Serif 4 Caption ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Serif 4 Caption ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 3,
- 3,
- 3,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-ExtraLight.otf",
- "preferred_family_name": "Source Serif 4 Caption",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-ExtraLightIt.otf||158272:1720044433.0": {
- "family_name": "Source Serif 4 Caption ExtraLight",
- "font-family": "Source Serif 4 Caption ExtraLight",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Serif 4 Caption ExtraLight Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 3,
- 3,
- 3,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-ExtraLightIt.otf",
- "preferred_family_name": "Source Serif 4 Caption",
- "preferred_subfamily_name": "ExtraLight Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-It.otf||158864:1720044433.0": {
- "family_name": "Source Serif 4 Caption",
- "font-family": "Source Serif 4 Caption",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Serif 4 Caption Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 6,
- 3,
- 4,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-It.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-Light.otf||240880:1720044433.0": {
- "family_name": "Source Serif 4 Caption Light",
- "font-family": "Source Serif 4 Caption Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Serif 4 Caption Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 4,
- 3,
- 3,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-Light.otf",
- "preferred_family_name": "Source Serif 4 Caption",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-LightIt.otf||167608:1720044433.0": {
- "family_name": "Source Serif 4 Caption Light",
- "font-family": "Source Serif 4 Caption Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Serif 4 Caption Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 4,
- 3,
- 3,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-LightIt.otf",
- "preferred_family_name": "Source Serif 4 Caption",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-Regular.otf||226484:1720044433.0": {
- "family_name": "Source Serif 4 Caption",
- "font-family": "Source Serif 4 Caption",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Serif 4 Caption",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 6,
- 3,
- 4,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-Regular.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-Semibold.otf||244224:1720044433.0": {
- "family_name": "Source Serif 4 Caption Semibold",
- "font-family": "Source Serif 4 Caption Semibold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Serif 4 Caption Semibold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 7,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-Semibold.otf",
- "preferred_family_name": "Source Serif 4 Caption",
- "preferred_subfamily_name": "Semibold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-SemiboldIt.otf||171272:1720044433.0": {
- "family_name": "Source Serif 4 Caption Semibold",
- "font-family": "Source Serif 4 Caption Semibold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Serif 4 Caption Semibold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 7,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Caption-SemiboldIt.otf",
- "preferred_family_name": "Source Serif 4 Caption",
- "preferred_subfamily_name": "Semibold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-Black.otf||266984:1720044433.0": {
- "family_name": "Source Serif 4 Display Black",
- "font-family": "Source Serif 4 Display Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Serif 4 Display Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 8,
- 3,
- 7,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-Black.otf",
- "preferred_family_name": "Source Serif 4 Display",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-BlackIt.otf||178752:1720044433.0": {
- "family_name": "Source Serif 4 Display Black",
- "font-family": "Source Serif 4 Display Black",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Serif 4 Display Black Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 8,
- 3,
- 7,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-BlackIt.otf",
- "preferred_family_name": "Source Serif 4 Display",
- "preferred_subfamily_name": "Black Italic",
- "subfamily_name": "Italic",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-Bold.otf||275896:1720044433.0": {
- "family_name": "Source Serif 4 Display",
- "font-family": "Source Serif 4 Display",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Serif 4 Display Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 7,
- 3,
- 7,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-Bold.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-BoldIt.otf||183092:1720044433.0": {
- "family_name": "Source Serif 4 Display",
- "font-family": "Source Serif 4 Display",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Serif 4 Display Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 7,
- 3,
- 7,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-BoldIt.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-ExtraLight.otf||259356:1720044433.0": {
- "family_name": "Source Serif 4 Display ExtraLight",
- "font-family": "Source Serif 4 Display ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Serif 4 Display ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 3,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-ExtraLight.otf",
- "preferred_family_name": "Source Serif 4 Display",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-ExtraLightIt.otf||173540:1720044433.0": {
- "family_name": "Source Serif 4 Display ExtraLight",
- "font-family": "Source Serif 4 Display ExtraLight",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Serif 4 Display ExtraLight Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 3,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-ExtraLightIt.otf",
- "preferred_family_name": "Source Serif 4 Display",
- "preferred_subfamily_name": "ExtraLight Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-It.otf||175300:1720044433.0": {
- "family_name": "Source Serif 4 Display",
- "font-family": "Source Serif 4 Display",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Serif 4 Display Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 4,
- 3,
- 6,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-It.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-Light.otf||266612:1720044433.0": {
- "family_name": "Source Serif 4 Display Light",
- "font-family": "Source Serif 4 Display Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Serif 4 Display Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 4,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-Light.otf",
- "preferred_family_name": "Source Serif 4 Display",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-LightIt.otf||177676:1720044433.0": {
- "family_name": "Source Serif 4 Display Light",
- "font-family": "Source Serif 4 Display Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Serif 4 Display Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 4,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-LightIt.otf",
- "preferred_family_name": "Source Serif 4 Display",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-Regular.otf||262988:1720044433.0": {
- "family_name": "Source Serif 4 Display",
- "font-family": "Source Serif 4 Display",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Serif 4 Display",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 5,
- 3,
- 6,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-Regular.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-Semibold.otf||273232:1720044433.0": {
- "family_name": "Source Serif 4 Display Semibold",
- "font-family": "Source Serif 4 Display Semibold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Serif 4 Display Semibold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 6,
- 3,
- 6,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-Semibold.otf",
- "preferred_family_name": "Source Serif 4 Display",
- "preferred_subfamily_name": "Semibold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-SemiboldIt.otf||181464:1720044433.0": {
- "family_name": "Source Serif 4 Display Semibold",
- "font-family": "Source Serif 4 Display Semibold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Serif 4 Display Semibold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 6,
- 3,
- 6,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Display-SemiboldIt.otf",
- "preferred_family_name": "Source Serif 4 Display",
- "preferred_subfamily_name": "Semibold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-Black.otf||253628:1720044433.0": {
- "family_name": "Source Serif 4 SmText Black",
- "font-family": "Source Serif 4 SmText Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Serif 4 SmText Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 9,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-Black.otf",
- "preferred_family_name": "Source Serif 4 SmText",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-BlackIt.otf||175452:1720044433.0": {
- "family_name": "Source Serif 4 SmText Black",
- "font-family": "Source Serif 4 SmText Black",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Serif 4 SmText Black Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 9,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-BlackIt.otf",
- "preferred_family_name": "Source Serif 4 SmText",
- "preferred_subfamily_name": "Black Italic",
- "subfamily_name": "Italic",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-Bold.otf||254540:1720044433.0": {
- "family_name": "Source Serif 4 SmText",
- "font-family": "Source Serif 4 SmText",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Serif 4 SmText Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 8,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-Bold.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-BoldIt.otf||177564:1720044433.0": {
- "family_name": "Source Serif 4 SmText",
- "font-family": "Source Serif 4 SmText",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Serif 4 SmText Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 8,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-BoldIt.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-ExtraLight.otf||241412:1720044433.0": {
- "family_name": "Source Serif 4 SmText ExtraLight",
- "font-family": "Source Serif 4 SmText ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Serif 4 SmText ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 3,
- 3,
- 3,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-ExtraLight.otf",
- "preferred_family_name": "Source Serif 4 SmText",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-ExtraLightIt.otf||170024:1720044433.0": {
- "family_name": "Source Serif 4 SmText ExtraLight",
- "font-family": "Source Serif 4 SmText ExtraLight",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Serif 4 SmText ExtraLight Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 3,
- 3,
- 3,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-ExtraLightIt.otf",
- "preferred_family_name": "Source Serif 4 SmText",
- "preferred_subfamily_name": "ExtraLight Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-It.otf||172992:1720044433.0": {
- "family_name": "Source Serif 4 SmText",
- "font-family": "Source Serif 4 SmText",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Serif 4 SmText Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 6,
- 3,
- 4,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-It.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-Light.otf||246944:1720044433.0": {
- "family_name": "Source Serif 4 SmText Light",
- "font-family": "Source Serif 4 SmText Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Serif 4 SmText Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 4,
- 3,
- 4,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-Light.otf",
- "preferred_family_name": "Source Serif 4 SmText",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-LightIt.otf||173956:1720044433.0": {
- "family_name": "Source Serif 4 SmText Light",
- "font-family": "Source Serif 4 SmText Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Serif 4 SmText Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 4,
- 3,
- 3,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-LightIt.otf",
- "preferred_family_name": "Source Serif 4 SmText",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-Regular.otf||245204:1720044433.0": {
- "family_name": "Source Serif 4 SmText",
- "font-family": "Source Serif 4 SmText",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Serif 4 SmText",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 6,
- 3,
- 4,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-Regular.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-Semibold.otf||252660:1720044433.0": {
- "family_name": "Source Serif 4 SmText Semibold",
- "font-family": "Source Serif 4 SmText Semibold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Serif 4 SmText Semibold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 7,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-Semibold.otf",
- "preferred_family_name": "Source Serif 4 SmText",
- "preferred_subfamily_name": "Semibold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-SemiboldIt.otf||177964:1720044433.0": {
- "family_name": "Source Serif 4 SmText Semibold",
- "font-family": "Source Serif 4 SmText Semibold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Serif 4 SmText Semibold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 7,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4SmText-SemiboldIt.otf",
- "preferred_family_name": "Source Serif 4 SmText",
- "preferred_subfamily_name": "Semibold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-Black.otf||278960:1720044433.0": {
- "family_name": "Source Serif 4 Subhead Black",
- "font-family": "Source Serif 4 Subhead Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Serif 4 Subhead Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 9,
- 3,
- 6,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-Black.otf",
- "preferred_family_name": "Source Serif 4 Subhead",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-BlackIt.otf||179448:1720044433.0": {
- "family_name": "Source Serif 4 Subhead Black",
- "font-family": "Source Serif 4 Subhead Black",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Serif 4 Subhead Black Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 8,
- 3,
- 6,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-BlackIt.otf",
- "preferred_family_name": "Source Serif 4 Subhead",
- "preferred_subfamily_name": "Black Italic",
- "subfamily_name": "Italic",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-Bold.otf||279084:1720044433.0": {
- "family_name": "Source Serif 4 Subhead",
- "font-family": "Source Serif 4 Subhead",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Serif 4 Subhead Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 8,
- 3,
- 6,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-Bold.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-BoldIt.otf||182496:1720044433.0": {
- "family_name": "Source Serif 4 Subhead",
- "font-family": "Source Serif 4 Subhead",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Serif 4 Subhead Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 7,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-BoldIt.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-ExtraLight.otf||267592:1720044433.0": {
- "family_name": "Source Serif 4 Subhead ExtraLight",
- "font-family": "Source Serif 4 Subhead ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Serif 4 Subhead ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 3,
- 3,
- 4,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-ExtraLight.otf",
- "preferred_family_name": "Source Serif 4 Subhead",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-ExtraLightIt.otf||176412:1720044433.0": {
- "family_name": "Source Serif 4 Subhead ExtraLight",
- "font-family": "Source Serif 4 Subhead ExtraLight",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Serif 4 Subhead ExtraLight Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 3,
- 3,
- 4,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-ExtraLightIt.otf",
- "preferred_family_name": "Source Serif 4 Subhead",
- "preferred_subfamily_name": "ExtraLight Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-It.otf||179776:1720044433.0": {
- "family_name": "Source Serif 4 Subhead",
- "font-family": "Source Serif 4 Subhead",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Serif 4 Subhead Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 5,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-It.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-Light.otf||270416:1720044433.0": {
- "family_name": "Source Serif 4 Subhead Light",
- "font-family": "Source Serif 4 Subhead Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Serif 4 Subhead Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 4,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-Light.otf",
- "preferred_family_name": "Source Serif 4 Subhead",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-LightIt.otf||180108:1720044433.0": {
- "family_name": "Source Serif 4 Subhead Light",
- "font-family": "Source Serif 4 Subhead Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Serif 4 Subhead Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 4,
- 3,
- 4,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-LightIt.otf",
- "preferred_family_name": "Source Serif 4 Subhead",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-Regular.otf||272540:1720044433.0": {
- "family_name": "Source Serif 4 Subhead",
- "font-family": "Source Serif 4 Subhead",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Serif 4 Subhead",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 5,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-Regular.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-Semibold.otf||277164:1720044433.0": {
- "family_name": "Source Serif 4 Subhead Semibold",
- "font-family": "Source Serif 4 Subhead Semibold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Serif 4 Subhead Semibold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 7,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-Semibold.otf",
- "preferred_family_name": "Source Serif 4 Subhead",
- "preferred_subfamily_name": "Semibold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-SemiboldIt.otf||181760:1720044433.0": {
- "family_name": "Source Serif 4 Subhead Semibold",
- "font-family": "Source Serif 4 Subhead Semibold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Serif 4 Subhead Semibold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 6,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Subhead-SemiboldIt.otf",
- "preferred_family_name": "Source Serif 4 Subhead",
- "preferred_subfamily_name": "Semibold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Variable-Italic.otf||1303316:1720044433.0": {
- "family_name": "Source Serif 4 Variable",
- "font-family": "Source Serif 4 Variable",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Serif 4 Variable Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 4,
- 5,
- 3,
- 4,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Variable-Italic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerif4Variable-Roman.otf||1884148:1720044433.0": {
- "family_name": "Source Serif 4 Variable",
- "font-family": "Source Serif 4 Variable",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Serif 4 Variable",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 4,
- 6,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerif4Variable-Roman.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerifPro-Black.otf||239188:1720044433.0": {
- "family_name": "Source Serif Pro Black",
- "font-family": "Source Serif Pro Black",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Serif Pro Black",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 9,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerifPro-Black.otf",
- "preferred_family_name": "Source Serif Pro",
- "preferred_subfamily_name": "Black",
- "subfamily_name": "Regular",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerifPro-BlackIt.otf||165908:1720044433.0": {
- "family_name": "Source Serif Pro Black",
- "font-family": "Source Serif Pro Black",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "900",
- "fs_type": 0,
- "full_name": "Source Serif Pro Black Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 9,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerifPro-BlackIt.otf",
- "preferred_family_name": "Source Serif Pro",
- "preferred_subfamily_name": "Black Italic",
- "subfamily_name": "Italic",
- "weight": 900,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerifPro-Bold.otf||241476:1720044433.0": {
- "family_name": "Source Serif Pro",
- "font-family": "Source Serif Pro",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Serif Pro Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 8,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerifPro-Bold.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerifPro-BoldIt.otf||172096:1720044433.0": {
- "family_name": "Source Serif Pro",
- "font-family": "Source Serif Pro",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Source Serif Pro Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 8,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerifPro-BoldIt.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerifPro-ExtraLight.otf||228772:1720044433.0": {
- "family_name": "Source Serif Pro ExtraLight",
- "font-family": "Source Serif Pro ExtraLight",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Serif Pro ExtraLight",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 2,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerifPro-ExtraLight.otf",
- "preferred_family_name": "Source Serif Pro",
- "preferred_subfamily_name": "ExtraLight",
- "subfamily_name": "Regular",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerifPro-ExtraLightIt.otf||160992:1720044433.0": {
- "family_name": "Source Serif Pro ExtraLight",
- "font-family": "Source Serif Pro ExtraLight",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "200",
- "fs_type": 0,
- "full_name": "Source Serif Pro ExtraLight Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 2,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerifPro-ExtraLightIt.otf",
- "preferred_family_name": "Source Serif Pro",
- "preferred_subfamily_name": "ExtraLight Italic",
- "subfamily_name": "Italic",
- "weight": 200,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerifPro-It.otf||165356:1720044433.0": {
- "family_name": "Source Serif Pro",
- "font-family": "Source Serif Pro",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Serif Pro Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 6,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerifPro-It.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerifPro-Light.otf||235500:1720044433.0": {
- "family_name": "Source Serif Pro Light",
- "font-family": "Source Serif Pro Light",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Serif Pro Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 3,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerifPro-Light.otf",
- "preferred_family_name": "Source Serif Pro",
- "preferred_subfamily_name": "Light",
- "subfamily_name": "Regular",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerifPro-LightIt.otf||167540:1720044433.0": {
- "family_name": "Source Serif Pro Light",
- "font-family": "Source Serif Pro Light",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 0,
- "full_name": "Source Serif Pro Light Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 3,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerifPro-LightIt.otf",
- "preferred_family_name": "Source Serif Pro",
- "preferred_subfamily_name": "Light Italic",
- "subfamily_name": "Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerifPro-Regular.otf||236192:1720044433.0": {
- "family_name": "Source Serif Pro",
- "font-family": "Source Serif Pro",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Source Serif Pro",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 6,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerifPro-Regular.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerifPro-Semibold.otf||239464:1720044433.0": {
- "family_name": "Source Serif Pro Semibold",
- "font-family": "Source Serif Pro Semibold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Serif Pro Semibold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 7,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerifPro-Semibold.otf",
- "preferred_family_name": "Source Serif Pro",
- "preferred_subfamily_name": "Semibold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerifPro-SemiboldIt.otf||172504:1720044433.0": {
- "family_name": "Source Serif Pro Semibold",
- "font-family": "Source Serif Pro Semibold",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Source Serif Pro Semibold Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 7,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerifPro-SemiboldIt.otf",
- "preferred_family_name": "Source Serif Pro",
- "preferred_subfamily_name": "Semibold Italic",
- "subfamily_name": "Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerifVariable-Italic.otf||296396:1720044433.0": {
- "family_name": "Source Serif Variable",
- "font-family": "Source Serif Variable",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "389",
- "fs_type": 0,
- "full_name": "Source Serif Variable Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 6,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerifVariable-Italic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 389,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/adobe-source-serif/SourceSerifVariable-Roman.otf||458404:1720044433.0": {
- "family_name": "Source Serif Variable",
- "font-family": "Source Serif Variable",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "389",
- "fs_type": 0,
- "full_name": "Source Serif Variable",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 4,
- 6,
- 3,
- 5,
- 4,
- 5,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/adobe-source-serif/SourceSerifVariable-Roman.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": "Roman",
- "subfamily_name": "Regular",
- "weight": 389,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/cantarell/Cantarell-VF.otf||170588:1720749076.0": {
- "family_name": "Cantarell",
- "font-family": "Cantarell",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Cantarell Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 5,
- 3,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/cantarell/Cantarell-VF.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gargoyle/Gargoyle-Mono-Bold-Italic.ttf||176888:1763372473.0": {
- "family_name": "Gargoyle Mono",
- "font-family": "Gargoyle Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Gargoyle Mono Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 6,
- 7,
- 9,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gargoyle/Gargoyle-Mono-Bold-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gargoyle/Gargoyle-Mono-Bold.ttf||168396:1763372473.0": {
- "family_name": "Gargoyle Mono",
- "font-family": "Gargoyle Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Gargoyle Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 6,
- 7,
- 9,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gargoyle/Gargoyle-Mono-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gargoyle/Gargoyle-Mono-Italic.ttf||173600:1763372473.0": {
- "family_name": "Gargoyle Mono",
- "font-family": "Gargoyle Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Gargoyle Mono Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 6,
- 6,
- 9,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gargoyle/Gargoyle-Mono-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gargoyle/Gargoyle-Mono.ttf||164304:1763372473.0": {
- "family_name": "Gargoyle Mono",
- "font-family": "Gargoyle Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Gargoyle Mono Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 6,
- 6,
- 9,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gargoyle/Gargoyle-Mono.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gargoyle/Gargoyle-Serif-Bold-Italic.ttf||1500764:1763372473.0": {
- "family_name": "Gargoyle Serif",
- "font-family": "Gargoyle Serif",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Gargoyle Serif Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 0,
- 8,
- 0,
- 7,
- 0,
- 0,
- 9,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/gargoyle/Gargoyle-Serif-Bold-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gargoyle/Gargoyle-Serif-Bold.ttf||1439752:1763372473.0": {
- "family_name": "Gargoyle Serif",
- "font-family": "Gargoyle Serif",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Gargoyle Serif Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 0,
- 8,
- 0,
- 7,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/gargoyle/Gargoyle-Serif-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gargoyle/Gargoyle-Serif-Italic.ttf||1505932:1763372473.0": {
- "family_name": "Gargoyle Serif",
- "font-family": "Gargoyle Serif",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Gargoyle Serif Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 0,
- 6,
- 0,
- 6,
- 0,
- 0,
- 9,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/gargoyle/Gargoyle-Serif-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gargoyle/Gargoyle-Serif.ttf||1504176:1763372473.0": {
- "family_name": "Gargoyle Serif",
- "font-family": "Gargoyle Serif",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Gargoyle Serif Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 0,
- 5,
- 0,
- 6,
- 0,
- 0,
- 2,
- 0,
- 4
- ],
- "path": "/usr/share/fonts/gargoyle/Gargoyle-Serif.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/C059-BdIta.otf||103444:1759628689.0": {
- "family_name": "C059",
- "font-family": "C059",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "C059-BdIta",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 8,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/C059-BdIta.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/C059-Bold.otf||100692:1759628689.0": {
- "family_name": "C059",
- "font-family": "C059",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "C059-Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 8,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/C059-Bold.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/C059-Italic.otf||101324:1759628689.0": {
- "family_name": "C059",
- "font-family": "C059",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "C059-Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/C059-Italic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/C059-Roman.otf||97476:1759628689.0": {
- "family_name": "C059",
- "font-family": "C059",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "C059-Roman",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/C059-Roman.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Roman",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/D050000L.otf||29832:1759628689.0": {
- "family_name": "D050000L",
- "font-family": "D050000L",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "D050000L",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 1,
- 1,
- 6,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1
- ],
- "path": "/usr/share/fonts/gsfonts/D050000L.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusMonoPS-Bold.otf||87520:1759628689.0": {
- "family_name": "Nimbus Mono PS",
- "font-family": "Nimbus Mono PS",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "NimbusMonoPS-Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 8,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusMonoPS-Bold.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusMonoPS-BoldItalic.otf||89580:1759628689.0": {
- "family_name": "Nimbus Mono PS",
- "font-family": "Nimbus Mono PS",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "NimbusMonoPS-BoldItalic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 8,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusMonoPS-BoldItalic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusMonoPS-Italic.otf||82648:1759628689.0": {
- "family_name": "Nimbus Mono PS",
- "font-family": "Nimbus Mono PS",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "NimbusMonoPS-Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusMonoPS-Italic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusMonoPS-Regular.otf||77936:1759628689.0": {
- "family_name": "Nimbus Mono PS",
- "font-family": "Nimbus Mono PS",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "NimbusMonoPS-Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusMonoPS-Regular.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusRoman-Bold.otf||100984:1759628689.0": {
- "family_name": "Nimbus Roman",
- "font-family": "Nimbus Roman",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "NimbusRoman-Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 8,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusRoman-Bold.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusRoman-BoldItalic.otf||104772:1759628689.0": {
- "family_name": "Nimbus Roman",
- "font-family": "Nimbus Roman",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "NimbusRoman-BoldItalic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 8,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusRoman-BoldItalic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusRoman-Italic.otf||105684:1759628689.0": {
- "family_name": "Nimbus Roman",
- "font-family": "Nimbus Roman",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "NimbusRoman-Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusRoman-Italic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusRoman-Regular.otf||98200:1759628689.0": {
- "family_name": "Nimbus Roman",
- "font-family": "Nimbus Roman",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "NimbusRoman-Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusRoman-Regular.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusSans-Bold.otf||83264:1759628689.0": {
- "family_name": "Nimbus Sans",
- "font-family": "Nimbus Sans",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "NimbusSans-Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 8,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusSans-Bold.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusSans-BoldItalic.otf||95396:1759628689.0": {
- "family_name": "Nimbus Sans",
- "font-family": "Nimbus Sans",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "NimbusSans-BoldItalic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 8,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusSans-BoldItalic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusSans-Italic.otf||95244:1759628689.0": {
- "family_name": "Nimbus Sans",
- "font-family": "Nimbus Sans",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "NimbusSans-Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusSans-Italic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusSans-Regular.otf||82264:1759628689.0": {
- "family_name": "Nimbus Sans",
- "font-family": "Nimbus Sans",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "NimbusSans-Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusSans-Regular.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusSansNarrow-Bold.otf||81340:1759628689.0": {
- "family_name": "Nimbus Sans Narrow",
- "font-family": "Nimbus Sans Narrow",
- "font-stretch": "semi-condensed",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "NimbusSansNarrow-Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 8,
- 6,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusSansNarrow-Bold.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 4,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusSansNarrow-BoldOblique.otf||87956:1759628689.0": {
- "family_name": "Nimbus Sans Narrow",
- "font-family": "Nimbus Sans Narrow",
- "font-stretch": "semi-condensed",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "NimbusSansNarrow-BoldOblique",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 8,
- 6,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusSansNarrow-BoldOblique.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Oblique",
- "weight": 700,
- "width": 4,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusSansNarrow-Oblique.otf||87068:1759628689.0": {
- "family_name": "Nimbus Sans Narrow",
- "font-family": "Nimbus Sans Narrow",
- "font-stretch": "semi-condensed",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "NimbusSansNarrow-Oblique",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 6,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusSansNarrow-Oblique.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Oblique",
- "weight": 400,
- "width": 4,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/NimbusSansNarrow-Regular.otf||80864:1759628689.0": {
- "family_name": "Nimbus Sans Narrow",
- "font-family": "Nimbus Sans Narrow",
- "font-stretch": "semi-condensed",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "NimbusSansNarrow-Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 6,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/NimbusSansNarrow-Regular.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 4,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/P052-Bold.otf||110980:1759628689.0": {
- "family_name": "P052",
- "font-family": "P052",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "P052-Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 8,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/P052-Bold.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/P052-BoldItalic.otf||110928:1759628689.0": {
- "family_name": "P052",
- "font-family": "P052",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 4,
- "full_name": "P052-BoldItalic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 8,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/P052-BoldItalic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/P052-Italic.otf||109824:1759628689.0": {
- "family_name": "P052",
- "font-family": "P052",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "P052-Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/P052-Italic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/P052-Roman.otf||110236:1759628689.0": {
- "family_name": "P052",
- "font-family": "P052",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "P052-Roman",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/P052-Roman.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Roman",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/StandardSymbolsPS.otf||21176:1759628689.0": {
- "family_name": "Standard Symbols PS",
- "font-family": "Standard Symbols PS",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "Standard Symbols PS",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 5,
- 5,
- 1,
- 2,
- 1,
- 7,
- 6,
- 2,
- 5,
- 7
- ],
- "path": "/usr/share/fonts/gsfonts/StandardSymbolsPS.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/URWBookman-Demi.otf||97208:1759628689.0": {
- "family_name": "URW Bookman",
- "font-family": "URW Bookman",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 4,
- "full_name": "URWBookman-Demi",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 7,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/URWBookman-Demi.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Demi",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/URWBookman-DemiItalic.otf||101584:1759628689.0": {
- "family_name": "URW Bookman",
- "font-family": "URW Bookman",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 4,
- "full_name": "URWBookman-DemiItalic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 7,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/URWBookman-DemiItalic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Demi Italic",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/URWBookman-Light.otf||98396:1759628689.0": {
- "family_name": "URW Bookman",
- "font-family": "URW Bookman",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "300",
- "fs_type": 4,
- "full_name": "URWBookman-Light",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 4,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/URWBookman-Light.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Light",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/URWBookman-LightItalic.otf||102764:1759628689.0": {
- "family_name": "URW Bookman",
- "font-family": "URW Bookman",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "300",
- "fs_type": 4,
- "full_name": "URWBookman-LightItalic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 4,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/URWBookman-LightItalic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Light Italic",
- "weight": 300,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/URWGothic-Book.otf||82968:1759628689.0": {
- "family_name": "URW Gothic",
- "font-family": "URW Gothic",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "URWGothic-Book",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/URWGothic-Book.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Book",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/URWGothic-BookOblique.otf||85336:1759628689.0": {
- "family_name": "URW Gothic",
- "font-family": "URW Gothic",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 4,
- "full_name": "URWGothic-BookOblique",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 5,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/URWGothic-BookOblique.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Book Oblique",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/URWGothic-Demi.otf||83580:1759628689.0": {
- "family_name": "URW Gothic",
- "font-family": "URW Gothic",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 4,
- "full_name": "URWGothic-Demi",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 7,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/URWGothic-Demi.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Demi",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/URWGothic-DemiOblique.otf||86232:1759628689.0": {
- "family_name": "URW Gothic",
- "font-family": "URW Gothic",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "600",
- "fs_type": 4,
- "full_name": "URWGothic-DemiOblique",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 7,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/URWGothic-DemiOblique.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Demi Oblique",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/gsfonts/Z003-MediumItalic.otf||114052:1759628689.0": {
- "family_name": "Z003",
- "font-family": "Z003",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "500",
- "fs_type": 4,
- "full_name": "Z003-MediumItalic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": true,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 0,
- 0,
- 6,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/gsfonts/Z003-MediumItalic.otf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Medium Italic",
- "weight": 500,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/liberation/LiberationMono-Bold.ttf||308068:1720827900.0": {
- "family_name": "Liberation Mono",
- "font-family": "Liberation Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Liberation Mono Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 7,
- 7,
- 9,
- 2,
- 2,
- 5,
- 2,
- 4,
- 4
- ],
- "path": "/usr/share/fonts/liberation/LiberationMono-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/liberation/LiberationMono-BoldItalic.ttf||284184:1720827900.0": {
- "family_name": "Liberation Mono",
- "font-family": "Liberation Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Liberation Mono Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 7,
- 7,
- 9,
- 2,
- 2,
- 5,
- 9,
- 4,
- 4
- ],
- "path": "/usr/share/fonts/liberation/LiberationMono-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/liberation/LiberationMono-Italic.ttf||281608:1720827900.0": {
- "family_name": "Liberation Mono",
- "font-family": "Liberation Mono",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Liberation Mono Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 7,
- 4,
- 9,
- 2,
- 2,
- 5,
- 9,
- 4,
- 4
- ],
- "path": "/usr/share/fonts/liberation/LiberationMono-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/liberation/LiberationMono-Regular.ttf||319624:1720827900.0": {
- "family_name": "Liberation Mono",
- "font-family": "Liberation Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Liberation Mono",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 7,
- 4,
- 9,
- 2,
- 2,
- 5,
- 2,
- 4,
- 4
- ],
- "path": "/usr/share/fonts/liberation/LiberationMono-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/liberation/LiberationSans-Bold.ttf||414568:1720827900.0": {
- "family_name": "Liberation Sans",
- "font-family": "Liberation Sans",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Liberation Sans Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 7,
- 4,
- 2,
- 2,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/liberation/LiberationSans-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/liberation/LiberationSans-BoldItalic.ttf||409108:1720827900.0": {
- "family_name": "Liberation Sans",
- "font-family": "Liberation Sans",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Liberation Sans Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 7,
- 4,
- 2,
- 2,
- 2,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/liberation/LiberationSans-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/liberation/LiberationSans-Italic.ttf||415920:1720827900.0": {
- "family_name": "Liberation Sans",
- "font-family": "Liberation Sans",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Liberation Sans Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 6,
- 4,
- 2,
- 2,
- 2,
- 9,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/liberation/LiberationSans-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/liberation/LiberationSans-Regular.ttf||410820:1720827900.0": {
- "family_name": "Liberation Sans",
- "font-family": "Liberation Sans",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Liberation Sans",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 11,
- 6,
- 4,
- 2,
- 2,
- 2,
- 2,
- 2,
- 4
- ],
- "path": "/usr/share/fonts/liberation/LiberationSans-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/liberation/LiberationSerif-Bold.ttf||370196:1720827900.0": {
- "family_name": "Liberation Serif",
- "font-family": "Liberation Serif",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Liberation Serif Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 2,
- 8,
- 3,
- 7,
- 5,
- 5,
- 2,
- 3,
- 4
- ],
- "path": "/usr/share/fonts/liberation/LiberationSerif-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/liberation/LiberationSerif-BoldItalic.ttf||376892:1720827900.0": {
- "family_name": "Liberation Serif",
- "font-family": "Liberation Serif",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Liberation Serif Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 2,
- 7,
- 3,
- 6,
- 5,
- 5,
- 9,
- 3,
- 4
- ],
- "path": "/usr/share/fonts/liberation/LiberationSerif-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/liberation/LiberationSerif-Italic.ttf||375760:1720827900.0": {
- "family_name": "Liberation Serif",
- "font-family": "Liberation Serif",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Liberation Serif Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 2,
- 5,
- 3,
- 5,
- 4,
- 5,
- 9,
- 3,
- 4
- ],
- "path": "/usr/share/fonts/liberation/LiberationSerif-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/liberation/LiberationSerif-Regular.ttf||393692:1720827900.0": {
- "family_name": "Liberation Serif",
- "font-family": "Liberation Serif",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Liberation Serif",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 3,
- "panose": [
- 2,
- 2,
- 6,
- 3,
- 5,
- 4,
- 5,
- 2,
- 3,
- 4
- ],
- "path": "/usr/share/fonts/liberation/LiberationSerif-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/libertinus/LibertinusKeyboard-Regular.ttf||204448:1727393489.0": {
- "family_name": "Libertinus Keyboard",
- "font-family": "Libertinus Keyboard",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Libertinus Keyboard Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/libertinus/LibertinusKeyboard-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/libertinus/LibertinusMath-Regular.ttf||1229260:1727393489.0": {
- "family_name": "Libertinus Math",
- "font-family": "Libertinus Math",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Libertinus Math Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/libertinus/LibertinusMath-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/libertinus/LibertinusMono-Regular.ttf||153992:1727393489.0": {
- "family_name": "Libertinus Mono",
- "font-family": "Libertinus Mono",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Libertinus Mono Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/libertinus/LibertinusMono-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/libertinus/LibertinusSans-Bold.ttf||453840:1727393489.0": {
- "family_name": "Libertinus Sans",
- "font-family": "Libertinus Sans",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Libertinus Sans Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/libertinus/LibertinusSans-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/libertinus/LibertinusSans-Italic.ttf||625672:1727393489.0": {
- "family_name": "Libertinus Sans",
- "font-family": "Libertinus Sans",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Libertinus Sans Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/libertinus/LibertinusSans-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/libertinus/LibertinusSans-Regular.ttf||424224:1727393489.0": {
- "family_name": "Libertinus Sans",
- "font-family": "Libertinus Sans",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Libertinus Sans Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/libertinus/LibertinusSans-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/libertinus/LibertinusSerif-Bold.ttf||462900:1727393489.0": {
- "family_name": "Libertinus Serif",
- "font-family": "Libertinus Serif",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Libertinus Serif Bold",
- "is_bold": true,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/libertinus/LibertinusSerif-Bold.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/libertinus/LibertinusSerif-BoldItalic.ttf||499608:1727393489.0": {
- "family_name": "Libertinus Serif",
- "font-family": "Libertinus Serif",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "bold",
- "fs_type": 0,
- "full_name": "Libertinus Serif Bold Italic",
- "is_bold": true,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/libertinus/LibertinusSerif-BoldItalic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Bold Italic",
- "weight": 700,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/libertinus/LibertinusSerif-Italic.ttf||586600:1727393489.0": {
- "family_name": "Libertinus Serif",
- "font-family": "Libertinus Serif",
- "font-stretch": "normal",
- "font-style": "italic",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Libertinus Serif Italic",
- "is_bold": false,
- "is_italic": true,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": false,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/libertinus/LibertinusSerif-Italic.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Italic",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/libertinus/LibertinusSerif-Regular.ttf||560864:1727393489.0": {
- "family_name": "Libertinus Serif",
- "font-family": "Libertinus Serif",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Libertinus Serif Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/libertinus/LibertinusSerif-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/libertinus/LibertinusSerif-Semibold.ttf||456324:1727393489.0": {
- "family_name": "Libertinus Serif Semibold",
- "font-family": "Libertinus Serif Semibold",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Libertinus Serif Semibold",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/libertinus/LibertinusSerif-Semibold.ttf",
- "preferred_family_name": "Libertinus Serif",
- "preferred_subfamily_name": "Semibold",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/libertinus/LibertinusSerif-SemiboldItalic.ttf||582032:1727393489.0": {
- "family_name": "Libertinus Serif Semibold Italic",
- "font-family": "Libertinus Serif Semibold Italic",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "600",
- "fs_type": 0,
- "full_name": "Libertinus Serif Semibold Italic",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/libertinus/LibertinusSerif-SemiboldItalic.ttf",
- "preferred_family_name": "Libertinus Serif",
- "preferred_subfamily_name": "Semibold Italic",
- "subfamily_name": "Regular",
- "weight": 600,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/libertinus/LibertinusSerifDisplay-Regular.ttf||728776:1727393489.0": {
- "family_name": "Libertinus Serif Display",
- "font-family": "Libertinus Serif Display",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Libertinus Serif Display Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/libertinus/LibertinusSerifDisplay-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/libertinus/LibertinusSerifInitials-Regular.ttf||323892:1727393489.0": {
- "family_name": "Libertinus Serif Initials",
- "font-family": "Libertinus Serif Initials",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Libertinus Serif Initials Regular",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/libertinus/LibertinusSerifInitials-Regular.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- },
- "/usr/share/fonts/noto/NotoColorEmoji.ttf||10673480:1758002085.0": {
- "family_name": "Noto Color Emoji",
- "font-family": "Noto Color Emoji",
- "font-stretch": "normal",
- "font-style": "normal",
- "font-weight": "normal",
- "fs_type": 0,
- "full_name": "Noto Color Emoji",
- "is_bold": false,
- "is_italic": false,
- "is_oblique": false,
- "is_otf": false,
- "is_regular": true,
- "is_wws": false,
- "os2_version": 4,
- "panose": [
- 2,
- 0,
- 6,
- 9,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- ],
- "path": "/usr/share/fonts/noto/NotoColorEmoji.ttf",
- "preferred_family_name": null,
- "preferred_subfamily_name": null,
- "subfamily_name": "Regular",
- "weight": 400,
- "width": 5,
- "wws_family_name": null,
- "wws_subfamily_name": null
- }
- },
- "version": 2
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/global.py.json b/dotfiles/system/.config/calibre/global.py.json
deleted file mode 100644
index e44de2c..0000000
--- a/dotfiles/system/.config/calibre/global.py.json
+++ /dev/null
@@ -1,82 +0,0 @@
-{
- "add_formats_to_existing": false,
- "case_sensitive": false,
- "check_for_dupes_on_ctl": false,
- "database_path": "/home/cjennings/library1.db",
- "filename_pattern": "(?P.+) - (?P[^_]+)",
- "input_format_order": [
- "EPUB",
- "PDF",
- "AZW3",
- "MOBI",
- "LIT",
- "PRC",
- "FB2",
- "HTML",
- "HTM",
- "XHTM",
- "SHTML",
- "XHTML",
- "ZIP",
- "DOCX",
- "ODT",
- "RTF",
- "TXT",
- "CB7",
- "SHTM",
- "SNB",
- "PMLZ",
- "TCR",
- "FBZ",
- "DJVU",
- "DOCM",
- "LRF",
- "TXTZ",
- "KEPUB",
- "POBI",
- "PDB",
- "CHM",
- "CBR",
- "HTMLZ",
- "RB",
- "MD",
- "CBC",
- "MARKDOWN",
- "TEXT",
- "AZW",
- "UPDB",
- "RECIPE",
- "PML",
- "DOWNLOADED_RECIPE",
- "TEXTILE",
- "RAR",
- "CBZ",
- "OPF",
- "AZW4",
- "DJV"
- ],
- "installation_uuid": "4c998702-215a-4787-a019-abdee4cdf53c",
- "isbndb_com_key": "",
- "language": "en",
- "library_path": "/home/cjennings/archive/books",
- "limit_search_columns": false,
- "limit_search_columns_to": [
- "title",
- "authors",
- "tags",
- "publisher"
- ],
- "manage_device_metadata": "manual",
- "mark_new_books": true,
- "migrated": false,
- "network_timeout": 5,
- "new_book_tags": [],
- "numeric_collation": false,
- "output_format": "epub",
- "read_file_metadata": true,
- "saved_searches": {},
- "swap_author_names": false,
- "use_primary_find_in_search": true,
- "user_categories": {},
- "worker_process_priority": "normal"
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/gui.py.json b/dotfiles/system/.config/calibre/gui.py.json
deleted file mode 100644
index bfe8d92..0000000
--- a/dotfiles/system/.config/calibre/gui.py.json
+++ /dev/null
@@ -1,115 +0,0 @@
-{
- "LRF_conversion_defaults": [],
- "LRF_ebook_viewer_options": null,
- "asked_library_thing_password": false,
- "auto_download_cover": false,
- "autolaunch_server": false,
- "column_map": [
- "title",
- "ondevice",
- "authors",
- "size",
- "timestamp",
- "rating",
- "publisher",
- "tags",
- "series",
- "pubdate"
- ],
- "confirm_delete": false,
- "cover_flow_queue_length": 6,
- "default_send_to_device_action": "DeviceAction:main::False:False",
- "delete_news_from_library_on_upload": false,
- "disable_animations": true,
- "disable_tray_notification": false,
- "enforce_cpu_limit": true,
- "get_social_metadata": true,
- "gui_layout": "wide",
- "highlight_search_matches": false,
- "internally_viewed_formats": [
- "AZW",
- "AZW3",
- "FB2",
- "FBZ",
- "HTML",
- "HTMLZ",
- "KEPUB",
- "LIT",
- "LRF",
- "MOBI",
- "PDB",
- "POBI",
- "PRC",
- "RB",
- "SNB"
- ],
- "jobs_search_history": [],
- "lrf_viewer_search_history": [],
- "main_search_history": [
- "author:kant",
- "title:critique of pure reason",
- "title critique of pure reason",
- "title:being and time",
- "heidegger basic writings",
- "title:question concerning technology",
- "tag:epub",
- "question concerning technology heidegger",
- "poetry language thought heidegger",
- "basic writings heidegger",
- "author:corrington",
- "author:stanley",
- "Marco",
- "format:epub",
- "publisher:nolo",
- "author:heidegger format:epub",
- "author:heidegger",
- "author:ibsen",
- "author:simenon",
- "title:nexus",
- "format:pdf tags:philosophy #reviewed:true",
- "format:pdf tags:literature #reviewed:true",
- "format:epub tags:literature #reviewed:true",
- "format:epub tags:philosophy #reviewed:true",
- "format:epub tags:philosophy #reviewed"
- ],
- "main_window_geometry": null,
- "match_tags_type": "any",
- "new_version_notification": false,
- "oldest_news": 0,
- "overwrite_author_title_metadata": true,
- "plugin_search_history": [
- "kobo",
- "covers",
- "cover",
- "rsync"
- ],
- "save_to_disk_template_history": [
- "{author_sort}/{title}/{title} - {authors}"
- ],
- "scheduler_search_history": [
- "Jacobin",
- "New Republic"
- ],
- "search_as_you_type": false,
- "send_to_device_template_history": [],
- "send_to_storage_card_by_default": false,
- "separate_cover_flow": false,
- "shortcuts_search_history": [
- "quit",
- "quickview",
- "q"
- ],
- "show_avg_rating": true,
- "sort_tags_by": "name",
- "systray_icon": false,
- "tag_browser_hidden_categories": {
- "__class__": "set",
- "__value__": []
- },
- "tweaks_search_history": [],
- "upload_news_to_device": false,
- "use_roman_numerals_for_series_number": false,
- "viewer_search_history": [],
- "viewer_toc_search_history": [],
- "worker_limit": 6
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/history.plist b/dotfiles/system/.config/calibre/history.plist
deleted file mode 100644
index 14189a8..0000000
--- a/dotfiles/system/.config/calibre/history.plist
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
- lineedit_history_choose_library_dialog
-
- /home/cjennings/sync/books
- /home/cjennings/archive/books
- /home/cjennings/books
- /home/cjennings/Library
-
- lineedit_history_preferences_setting_auto_add_path
-
- /home/cjennings/downloads/ebooks
- /home/cjennings/
- /home/cjennings/Downloads/ebooks
- /home/cjennings/Downloads/eBooks
- /home/cjennings/Documents/eBooks
-
- lineedit_history_store_config_chooser_query
-
- lineedit_history_tag_browser_search
-
-
-
diff --git a/dotfiles/system/.config/calibre/icons-any.rcc b/dotfiles/system/.config/calibre/icons-any.rcc
deleted file mode 100644
index 2c2f7d2..0000000
Binary files a/dotfiles/system/.config/calibre/icons-any.rcc and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/icons-dark.rcc b/dotfiles/system/.config/calibre/icons-dark.rcc
deleted file mode 100644
index 28b9a51..0000000
Binary files a/dotfiles/system/.config/calibre/icons-dark.rcc and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/metadata-sources-cache.json b/dotfiles/system/.config/calibre/metadata-sources-cache.json
deleted file mode 100644
index 8424645..0000000
--- a/dotfiles/system/.config/calibre/metadata-sources-cache.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "amazon": "#!/usr/bin/env python\n# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai\n# License: GPLv3 Copyright: 2011, Kovid Goyal \nfrom __future__ import absolute_import, division, print_function, unicode_literals\n\nimport re\nimport socket\nimport string\nimport time\nfrom functools import partial\n\ntry:\n from queue import Empty, Queue\nexcept ImportError:\n from Queue import Empty, Queue\n\nfrom threading import Thread\n\ntry:\n from urllib.parse import urlparse\nexcept ImportError:\n from urlparse import urlparse\n\nfrom mechanize import HTTPError\n\nfrom calibre import as_unicode, browser, random_user_agent, xml_replace_entities\nfrom calibre.ebooks.metadata import check_isbn\nfrom calibre.ebooks.metadata.book.base import Metadata\nfrom calibre.ebooks.metadata.sources.base import Option, Source, fixauthors, fixcase\nfrom calibre.utils.icu import lower as icu_lower\nfrom calibre.utils.localization import canonicalize_lang\nfrom calibre.utils.random_ua import accept_header_for_ua\n\n\ndef sort_matches_preferring_kindle_editions(matches):\n upos_map = {url:i for i, url in enumerate(matches)}\n\n def skey(url):\n opos = upos_map[url]\n parts = url.split('/')\n try:\n idx = parts.index('dp')\n except Exception:\n idx = -1\n if idx < 0 or idx + 1 >= len(parts) or not parts[idx+1].startswith('B'):\n return 1, opos\n return 0, opos\n matches.sort(key=skey)\n return matches\n\n\ndef iri_quote_plus(url):\n from calibre.ebooks.oeb.base import urlquote\n ans = urlquote(url)\n if isinstance(ans, bytes):\n ans = ans.decode('utf-8')\n return ans.replace('%20', '+')\n\n\ndef user_agent_is_ok(ua):\n return 'Mobile/' not in ua and 'Mobile ' not in ua\n\n\nclass CaptchaError(Exception):\n pass\n\n\nclass SearchFailed(ValueError):\n pass\n\n\nclass UrlNotFound(ValueError):\n\n def __init__(self, url):\n ValueError.__init__(self, 'The URL {} was not found (HTTP 404)'.format(url))\n\n\nclass UrlTimedOut(ValueError):\n\n def __init__(self, url):\n ValueError.__init__(self, 'Timed out fetching {} try again later'.format(url))\n\n\ndef parse_html(raw):\n try:\n from html5_parser import parse\n except ImportError:\n # Old versions of calibre\n import html5lib\n return html5lib.parse(raw, treebuilder='lxml', namespaceHTMLElements=False)\n else:\n return parse(raw)\n\n\ndef parse_details_page(url, log, timeout, browser, domain):\n from lxml.html import tostring\n\n from calibre.ebooks.chardet import xml_to_unicode\n from calibre.utils.cleantext import clean_ascii_chars\n try:\n from calibre.ebooks.metadata.sources.update import search_engines_module\n get_data_for_cached_url = search_engines_module().get_data_for_cached_url\n except Exception:\n def get_data_for_cached_url(*a):\n return None\n raw = get_data_for_cached_url(url)\n if raw:\n log('Using cached details for url:', url)\n else:\n log('Downloading details from:', url)\n try:\n raw = browser.open_novisit(url, timeout=timeout).read().strip()\n except Exception as e:\n if callable(getattr(e, 'getcode', None)) and e.getcode() == 404:\n log.error('URL not found: %r' % url)\n raise UrlNotFound(url)\n attr = getattr(e, 'args', [None])\n attr = attr if attr else [None]\n if isinstance(attr[0], socket.timeout):\n msg = 'Details page timed out. Try again later.'\n log.error(msg)\n raise UrlTimedOut(url)\n else:\n msg = 'Failed to make details query: %r' % url\n log.exception(msg)\n raise ValueError('Could not make details query for {}'.format(url))\n\n oraw = raw\n if 'amazon.com.br' in url:\n # amazon.com.br serves utf-8 but has an incorrect latin1 tag\n raw = raw.decode('utf-8')\n raw = xml_to_unicode(raw, strip_encoding_pats=True,\n resolve_entities=True)[0]\n if '404 - ' in raw:\n raise ValueError('Got a 404 page for: %r' % url)\n if '>Could not find the requested document in the cache.<' in raw:\n raise ValueError('No cached entry for %s found' % url)\n\n try:\n root = parse_html(clean_ascii_chars(raw))\n except Exception:\n msg = 'Failed to parse amazon details page: %r' % url\n log.exception(msg)\n raise ValueError(msg)\n if domain == 'jp':\n for a in root.xpath('//a[@href]'):\n if ('black-curtain-redirect.html' in a.get('href')) or ('/black-curtain/save-eligibility/black-curtain' in a.get('href')):\n url = a.get('href')\n if url:\n if url.startswith('/'):\n url = 'https://amazon.co.jp' + a.get('href')\n log('Black curtain redirect found, following')\n return parse_details_page(url, log, timeout, browser, domain)\n\n errmsg = root.xpath('//*[@id=\"errorMessage\"]')\n if errmsg:\n msg = 'Failed to parse amazon details page: %r' % url\n msg += tostring(errmsg, method='text', encoding='unicode').strip()\n log.error(msg)\n raise ValueError(msg)\n\n from css_selectors import Select\n selector = Select(root)\n return oraw, root, selector\n\n\ndef parse_asin(root, log, url):\n try:\n link = root.xpath('//link[@rel=\"canonical\" and @href]')\n for l in link:\n return l.get('href').rpartition('/')[-1]\n except Exception:\n log.exception('Error parsing ASIN for url: %r' % url)\n\n\nclass Worker(Thread): # Get details {{{\n\n '''\n Get book details from amazons book page in a separate thread\n '''\n\n def __init__(self, url, result_queue, browser, log, relevance, domain,\n plugin, timeout=20, testing=False, preparsed_root=None,\n cover_url_processor=None, filter_result=None):\n Thread.__init__(self)\n self.cover_url_processor = cover_url_processor\n self.preparsed_root = preparsed_root\n self.daemon = True\n self.testing = testing\n self.url, self.result_queue = url, result_queue\n self.log, self.timeout = log, timeout\n self.filter_result = filter_result or (lambda x, log: True)\n self.relevance, self.plugin = relevance, plugin\n self.browser = browser\n self.cover_url = self.amazon_id = self.isbn = None\n self.domain = domain\n from lxml.html import tostring\n self.tostring = tostring\n\n months = { # {{{\n 'de': {\n 1: ['jän', 'januar'],\n 2: ['februar'],\n 3: ['märz'],\n 5: ['mai'],\n 6: ['juni'],\n 7: ['juli'],\n 10: ['okt', 'oktober'],\n 12: ['dez', 'dezember']\n },\n 'it': {\n 1: ['gennaio', 'enn'],\n 2: ['febbraio', 'febbr'],\n 3: ['marzo'],\n 4: ['aprile'],\n 5: ['maggio', 'magg'],\n 6: ['giugno'],\n 7: ['luglio'],\n 8: ['agosto', 'ag'],\n 9: ['settembre', 'sett'],\n 10: ['ottobre', 'ott'],\n 11: ['novembre'],\n 12: ['dicembre', 'dic'],\n },\n 'fr': {\n 1: ['janv'],\n 2: ['févr'],\n 3: ['mars'],\n 4: ['avril'],\n 5: ['mai'],\n 6: ['juin'],\n 7: ['juil'],\n 8: ['août'],\n 9: ['sept'],\n 10: ['oct', 'octobre'],\n 11: ['nov', 'novembre'],\n 12: ['déc', 'décembre'],\n },\n 'br': {\n 1: ['janeiro'],\n 2: ['fevereiro'],\n 3: ['março'],\n 4: ['abril'],\n 5: ['maio'],\n 6: ['junho'],\n 7: ['julho'],\n 8: ['agosto'],\n 9: ['setembro'],\n 10: ['outubro'],\n 11: ['novembro'],\n 12: ['dezembro'],\n },\n 'es': {\n 1: ['enero'],\n 2: ['febrero'],\n 3: ['marzo'],\n 4: ['abril'],\n 5: ['mayo'],\n 6: ['junio'],\n 7: ['julio'],\n 8: ['agosto'],\n 9: ['septiembre', 'setiembre'],\n 10: ['octubre'],\n 11: ['noviembre'],\n 12: ['diciembre'],\n },\n 'se': {\n 1: ['januari'],\n 2: ['februari'],\n 3: ['mars'],\n 4: ['april'],\n 5: ['maj'],\n 6: ['juni'],\n 7: ['juli'],\n 8: ['augusti'],\n 9: ['september'],\n 10: ['oktober'],\n 11: ['november'],\n 12: ['december'],\n },\n 'jp': {\n 1: ['1月'],\n 2: ['2月'],\n 3: ['3月'],\n 4: ['4月'],\n 5: ['5月'],\n 6: ['6月'],\n 7: ['7月'],\n 8: ['8月'],\n 9: ['9月'],\n 10: ['10月'],\n 11: ['11月'],\n 12: ['12月'],\n },\n 'nl': {\n 1: ['januari'], 2: ['februari'], 3: ['maart'], 5: ['mei'], 6: ['juni'], 7: ['juli'], 8: ['augustus'], 10: ['oktober'],\n }\n\n } # }}}\n\n self.english_months = [None, 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n self.months = months.get(self.domain, {})\n\n self.pd_xpath = '''\n //h2[text()=\"Product Details\" or \\\n text()=\"Produktinformation\" or \\\n text()=\"Dettagli prodotto\" or \\\n text()=\"Product details\" or \\\n text()=\"Détails sur le produit\" or \\\n text()=\"Detalles del producto\" or \\\n text()=\"Detalhes do produto\" or \\\n text()=\"Productgegevens\" or \\\n text()=\"基本信æ¯\" or \\\n starts-with(text(), \"ç™»éŒ²æƒ…å ±\")]/../div[@class=\"content\"]\n '''\n # Editor: is for Spanish\n self.publisher_xpath = '''\n descendant::*[starts-with(text(), \"Publisher:\") or \\\n starts-with(text(), \"Verlag:\") or \\\n starts-with(text(), \"Editore:\") or \\\n starts-with(text(), \"Editeur\") or \\\n starts-with(text(), \"Editor:\") or \\\n starts-with(text(), \"Editora:\") or \\\n starts-with(text(), \"Uitgever:\") or \\\n starts-with(text(), \"Utgivare:\") or \\\n starts-with(text(), \"出版社:\")]\n '''\n self.pubdate_xpath = '''\n descendant::*[starts-with(text(), \"Publication Date:\") or \\\n starts-with(text(), \"Audible.com Release Date:\")]\n '''\n self.publisher_names = {'Publisher', 'Uitgever', 'Verlag', 'Utgivare', 'Herausgeber',\n 'Editore', 'Editeur', 'Éditeur', 'Editor', 'Editora', '出版社'}\n\n self.language_xpath = '''\n descendant::*[\n starts-with(text(), \"Language:\") \\\n or text() = \"Language\" \\\n or text() = \"Sprache:\" \\\n or text() = \"Lingua:\" \\\n or text() = \"Idioma:\" \\\n or starts-with(text(), \"Langue\") \\\n or starts-with(text(), \"言語\") \\\n or starts-with(text(), \"SprÃ¥k\") \\\n or starts-with(text(), \"è¯ç§\")\n ]\n '''\n self.language_names = {'Language', 'Sprache', 'SprÃ¥k',\n 'Lingua', 'Idioma', 'Langue', '言語', 'Taal', 'è¯ç§'}\n\n self.tags_xpath = '''\n descendant::h2[\n text() = \"Look for Similar Items by Category\" or\n text() = \"Ähnliche Artikel finden\" or\n text() = \"Buscar productos similares por categorÃa\" or\n text() = \"Ricerca articoli simili per categoria\" or\n text() = \"Rechercher des articles similaires par rubrique\" or\n text() = \"Procure por items similares por categoria\" or\n text() = \"関連商å“を探ã™\"\n ]/../descendant::ul/li\n '''\n\n self.ratings_pat = re.compile(\n r'([0-9.,]+) ?(out of|von|van|su|étoiles sur|ã¤æ˜Ÿã®ã†ã¡|de un máximo de|de|av) '\n r'([\\d\\.]+)( (stars|Sternen|stelle|estrellas|estrelas|sterren|stjärnor)){0,1}'\n )\n self.ratings_pat_cn = re.compile(r'([0-9.]+) 颗星,最多 5 颗星')\n self.ratings_pat_jp = re.compile(r'\\d+ã¤æ˜Ÿã®ã†ã¡([\\d\\.]+)')\n\n lm = {\n 'eng': ('English', 'Englisch', 'Engels', 'Engelska'),\n 'fra': ('French', 'Français'),\n 'ita': ('Italian', 'Italiano'),\n 'deu': ('German', 'Deutsch'),\n 'spa': ('Spanish', 'Espa\\xf1ol', 'Espaniol'),\n 'jpn': ('Japanese', '日本語'),\n 'por': ('Portuguese', 'Português'),\n 'nld': ('Dutch', 'Nederlands',),\n 'chs': ('Chinese', '䏿–‡', 'ç®€ä½“ä¸æ–‡'),\n 'swe': ('Swedish', 'Svenska'),\n }\n self.lang_map = {}\n for code, names in lm.items():\n for name in names:\n self.lang_map[name] = code\n\n self.series_pat = re.compile(\n r'''\n \\|\\s* # Prefix\n (Series)\\s*:\\s* # Series declaration\n (?P.+?)\\s+ # The series name\n \\((Book)\\s* # Book declaration\n (?P[0-9.]+) # Series index\n \\s*\\)\n ''', re.X)\n\n def delocalize_datestr(self, raw):\n if self.domain == 'cn':\n return raw.replace('å¹´', '-').replace('月', '-').replace('æ—¥', '')\n if not self.months:\n return raw\n ans = raw.lower()\n for i, vals in self.months.items():\n for x in vals:\n ans = ans.replace(x, self.english_months[i])\n ans = ans.replace(' de ', ' ')\n return ans\n\n def run(self):\n try:\n self.get_details()\n except Exception:\n self.log.exception('get_details failed for url: %r' % self.url)\n\n def get_details(self):\n if self.preparsed_root is None:\n raw, root, selector = parse_details_page(\n self.url, self.log, self.timeout, self.browser, self.domain)\n else:\n raw, root, selector = self.preparsed_root\n\n from css_selectors import Select\n self.selector = Select(root)\n self.parse_details(raw, root)\n\n def parse_details(self, raw, root):\n asin = parse_asin(root, self.log, self.url)\n if not asin and root.xpath('//form[@action=\"/errors/validateCaptcha\"]'):\n raise CaptchaError(\n 'Amazon returned a CAPTCHA page, probably because you downloaded too many books. Wait for some time and try again.')\n if self.testing:\n import tempfile\n import uuid\n with tempfile.NamedTemporaryFile(prefix=(asin or type('')(uuid.uuid4())) + '_',\n suffix='.html', delete=False) as f:\n f.write(raw)\n print('Downloaded HTML for', asin, 'saved in', f.name)\n\n try:\n title = self.parse_title(root)\n except Exception:\n self.log.exception('Error parsing title for url: %r' % self.url)\n title = None\n\n try:\n authors = self.parse_authors(root)\n except Exception:\n self.log.exception('Error parsing authors for url: %r' % self.url)\n authors = []\n\n if not title or not authors or not asin:\n self.log.error(\n 'Could not find title/authors/asin for %r' % self.url)\n self.log.error('ASIN: %r Title: %r Authors: %r' % (asin, title,\n authors))\n return\n\n mi = Metadata(title, authors)\n idtype = 'amazon' if self.domain == 'com' else 'amazon_' + self.domain\n mi.set_identifier(idtype, asin)\n self.amazon_id = asin\n\n try:\n mi.rating = self.parse_rating(root)\n except Exception:\n self.log.exception('Error parsing ratings for url: %r' % self.url)\n\n try:\n mi.comments = self.parse_comments(root, raw)\n except Exception:\n self.log.exception('Error parsing comments for url: %r' % self.url)\n\n try:\n series, series_index = self.parse_series(root)\n if series:\n mi.series, mi.series_index = series, series_index\n elif self.testing:\n mi.series, mi.series_index = 'Dummy series for testing', 1\n except Exception:\n self.log.exception('Error parsing series for url: %r' % self.url)\n\n try:\n mi.tags = self.parse_tags(root)\n except Exception:\n self.log.exception('Error parsing tags for url: %r' % self.url)\n\n try:\n self.cover_url = self.parse_cover(root, raw)\n except Exception:\n self.log.exception('Error parsing cover for url: %r' % self.url)\n if self.cover_url_processor is not None and self.cover_url and self.cover_url.startswith('/'):\n self.cover_url = self.cover_url_processor(self.cover_url)\n mi.has_cover = bool(self.cover_url)\n\n detail_bullets = root.xpath('//*[@data-feature-name=\"detailBullets\"]')\n non_hero = tuple(self.selector(\n 'div#bookDetails_container_div div#nonHeroSection')) or tuple(self.selector(\n '#productDetails_techSpec_sections'))\n feature_and_detail_bullets = root.xpath('//*[@data-feature-name=\"featureBulletsAndDetailBullets\"]')\n if detail_bullets:\n self.parse_detail_bullets(root, mi, detail_bullets[0])\n elif non_hero:\n try:\n self.parse_new_details(root, mi, non_hero[0])\n except Exception:\n self.log.exception(\n 'Failed to parse new-style book details section')\n elif feature_and_detail_bullets:\n self.parse_detail_bullets(root, mi, feature_and_detail_bullets[0], ul_selector='ul')\n\n else:\n pd = root.xpath(self.pd_xpath)\n if pd:\n pd = pd[0]\n\n try:\n isbn = self.parse_isbn(pd)\n if isbn:\n self.isbn = mi.isbn = isbn\n except Exception:\n self.log.exception(\n 'Error parsing ISBN for url: %r' % self.url)\n\n try:\n mi.publisher = self.parse_publisher(pd)\n except Exception:\n self.log.exception(\n 'Error parsing publisher for url: %r' % self.url)\n\n try:\n mi.pubdate = self.parse_pubdate(pd)\n except Exception:\n self.log.exception(\n 'Error parsing publish date for url: %r' % self.url)\n\n try:\n lang = self.parse_language(pd)\n if lang:\n mi.language = lang\n except Exception:\n self.log.exception(\n 'Error parsing language for url: %r' % self.url)\n\n else:\n self.log.warning(\n 'Failed to find product description for url: %r' % self.url)\n\n mi.source_relevance = self.relevance\n\n if self.amazon_id:\n if self.isbn:\n self.plugin.cache_isbn_to_identifier(self.isbn, self.amazon_id)\n if self.cover_url:\n self.plugin.cache_identifier_to_cover_url(self.amazon_id,\n self.cover_url)\n\n self.plugin.clean_downloaded_metadata(mi)\n\n if self.filter_result(mi, self.log):\n self.result_queue.put(mi)\n\n def totext(self, elem, only_printable=False):\n res = self.tostring(elem, encoding='unicode', method='text')\n if only_printable:\n try:\n filtered_characters = [s for s in res if s.isprintable()]\n except AttributeError:\n filtered_characters = [s for s in res if s in string.printable]\n res = ''.join(filtered_characters)\n return res.strip()\n\n def parse_title(self, root):\n\n def sanitize_title(title):\n ans = title.strip()\n if not ans.startswith('['):\n ans = re.sub(r'[(\\[].*[)\\]]', '', title).strip()\n return ans\n\n h1 = root.xpath('//h1[@id=\"title\"]')\n if h1:\n h1 = h1[0]\n for child in h1.xpath('./*[contains(@class, \"a-color-secondary\")]'):\n h1.remove(child)\n return sanitize_title(self.totext(h1))\n # audiobooks\n elem = root.xpath('//*[@id=\"productTitle\"]')\n if elem:\n return sanitize_title(self.totext(elem[0]))\n tdiv = root.xpath('//h1[contains(@class, \"parseasinTitle\")]')\n if not tdiv:\n span = root.xpath('//*[@id=\"ebooksTitle\"]')\n if span:\n return sanitize_title(self.totext(span[0]))\n h1 = root.xpath('//h1[@data-feature-name=\"title\"]')\n if h1:\n return sanitize_title(self.totext(h1[0]))\n raise ValueError('No title block found')\n tdiv = tdiv[0]\n actual_title = tdiv.xpath('descendant::*[@id=\"btAsinTitle\"]')\n if actual_title:\n title = self.tostring(actual_title[0], encoding='unicode',\n method='text').strip()\n else:\n title = self.tostring(tdiv, encoding='unicode',\n method='text').strip()\n return sanitize_title(title)\n\n def parse_authors(self, root):\n for sel in (\n '#byline .author .contributorNameID',\n '#byline .author a.a-link-normal',\n '#bylineInfo .author .contributorNameID',\n '#bylineInfo .author a.a-link-normal',\n '#bylineInfo #bylineContributor',\n '#bylineInfo #contributorLink',\n ):\n matches = tuple(self.selector(sel))\n if matches:\n authors = [self.totext(x) for x in matches]\n return [a for a in authors if a]\n\n x = '//h1[contains(@class, \"parseasinTitle\")]/following-sibling::span/*[(name()=\"a\" and @href) or (name()=\"span\" and @class=\"contributorNameTrigger\")]'\n aname = root.xpath(x)\n if not aname:\n aname = root.xpath('''\n //h1[contains(@class, \"parseasinTitle\")]/following-sibling::*[(name()=\"a\" and @href) or (name()=\"span\" and @class=\"contributorNameTrigger\")]\n ''')\n for x in aname:\n x.tail = ''\n authors = [self.tostring(x, encoding='unicode', method='text').strip() for x\n in aname]\n authors = [a for a in authors if a]\n return authors\n\n def parse_rating(self, root):\n for x in root.xpath('//div[@id=\"cpsims-feature\" or @id=\"purchase-sims-feature\" or @id=\"rhf\"]'):\n # Remove the similar books section as it can cause spurious\n # ratings matches\n x.getparent().remove(x)\n\n rating_paths = (\n '//div[@data-feature-name=\"averageCustomerReviews\" or @id=\"averageCustomerReviews\"]',\n '//div[@class=\"jumpBar\"]/descendant::span[contains(@class,\"asinReviewsSummary\")]',\n '//div[@class=\"buying\"]/descendant::span[contains(@class,\"asinReviewsSummary\")]',\n '//span[@class=\"crAvgStars\"]/descendant::span[contains(@class,\"asinReviewsSummary\")]'\n )\n ratings = None\n for p in rating_paths:\n ratings = root.xpath(p)\n if ratings:\n break\n\n def parse_ratings_text(text):\n try:\n m = self.ratings_pat.match(text)\n return float(m.group(1).replace(',', '.')) / float(m.group(3)) * 5\n except Exception:\n pass\n\n if ratings:\n ratings = ratings[0]\n for elem in ratings.xpath('descendant::*[@title]'):\n t = elem.get('title').strip()\n if self.domain == 'cn':\n m = self.ratings_pat_cn.match(t)\n if m is not None:\n return float(m.group(1))\n elif self.domain == 'jp':\n m = self.ratings_pat_jp.match(t)\n if m is not None:\n return float(m.group(1))\n else:\n ans = parse_ratings_text(t)\n if ans is not None:\n return ans\n for elem in ratings.xpath('descendant::span[@class=\"a-icon-alt\"]'):\n t = self.tostring(\n elem, encoding='unicode', method='text', with_tail=False).strip()\n ans = parse_ratings_text(t)\n if ans is not None:\n return ans\n else:\n # found in kindle book pages on amazon.com\n for x in root.xpath('//a[@id=\"acrCustomerReviewLink\"]'):\n spans = x.xpath('./span')\n if spans:\n txt = self.tostring(spans[0], method='text', encoding='unicode', with_tail=False).strip()\n try:\n return float(txt.replace(',', '.'))\n except Exception:\n pass\n\n def _render_comments(self, desc):\n from calibre.library.comments import sanitize_comments_html\n\n for c in desc.xpath('descendant::noscript'):\n c.getparent().remove(c)\n for c in desc.xpath('descendant::*[@class=\"seeAll\" or'\n ' @class=\"emptyClear\" or @id=\"collapsePS\" or'\n ' @id=\"expandPS\"]'):\n c.getparent().remove(c)\n for b in desc.xpath('descendant::b[@style]'):\n # Bing highlights search results\n s = b.get('style', '')\n if 'color' in s:\n b.tag = 'span'\n del b.attrib['style']\n\n for a in desc.xpath('descendant::a[@href]'):\n del a.attrib['href']\n a.tag = 'span'\n for a in desc.xpath('descendant::span[@class=\"a-text-italic\"]'):\n a.tag = 'i'\n for a in desc.xpath('descendant::span[@class=\"a-text-bold\"]'):\n a.tag = 'b'\n desc = self.tostring(desc, method='html', encoding='unicode').strip()\n desc = xml_replace_entities(desc, 'utf-8')\n\n # Encoding bug in Amazon data U+fffd (replacement char)\n # in some examples it is present in place of '\n desc = desc.replace('\\ufffd', \"'\")\n # remove all attributes from tags\n desc = re.sub(r'<([a-zA-Z0-9]+)\\s[^>]+>', r'<\\1>', desc)\n # Collapse whitespace\n # desc = re.sub(r'\\n+', '\\n', desc)\n # desc = re.sub(r' +', ' ', desc)\n # Remove the notice about text referring to out of print editions\n desc = re.sub(r'(?s)--This text ref.*? ', '', desc)\n # Remove comments\n desc = re.sub(r'(?s)', '', desc)\n return sanitize_comments_html(desc)\n\n def parse_comments(self, root, raw):\n try:\n from urllib.parse import unquote\n except ImportError:\n from urllib import unquote\n ans = ''\n ovr = tuple(self.selector('#drengr_MobileTabbedDescriptionOverviewContent_feature_div')) or tuple(\n self.selector('#drengr_DesktopTabbedDescriptionOverviewContent_feature_div'))\n if ovr:\n ovr = ovr[0]\n ovr.tag = 'div'\n ans = self._render_comments(ovr)\n ovr = tuple(self.selector('#drengr_MobileTabbedDescriptionEditorialsContent_feature_div')) or tuple(\n self.selector('#drengr_DesktopTabbedDescriptionEditorialsContent_feature_div'))\n if ovr:\n ovr = ovr[0]\n ovr.tag = 'div'\n ans += self._render_comments(ovr)\n else:\n ns = tuple(self.selector('#bookDescription_feature_div noscript'))\n if ns:\n ns = ns[0]\n if len(ns) == 0 and ns.text:\n import html5lib\n\n # html5lib parsed noscript as CDATA\n ns = html5lib.parseFragment(\n '%s
' % (ns.text), treebuilder='lxml', namespaceHTMLElements=False)[0]\n else:\n ns.tag = 'div'\n ans = self._render_comments(ns)\n else:\n desc = root.xpath('//div[@id=\"ps-content\"]/div[@class=\"content\"]')\n if desc:\n ans = self._render_comments(desc[0])\n else:\n ns = tuple(self.selector('#bookDescription_feature_div .a-expander-content'))\n if ns:\n ans = self._render_comments(ns[0])\n # audiobooks\n if not ans:\n elem = root.xpath('//*[@id=\"audible_desktopTabbedDescriptionOverviewContent_feature_div\"]')\n if elem:\n ans = self._render_comments(elem[0])\n desc = root.xpath(\n '//div[@id=\"productDescription\"]/*[@class=\"content\"]')\n if desc:\n ans += self._render_comments(desc[0])\n else:\n # Idiot chickens from amazon strike again. This data is now stored\n # in a JS variable inside a script tag URL encoded.\n m = re.search(br'var\\s+iframeContent\\s*=\\s*\"([^\"]+)\"', raw)\n if m is not None:\n try:\n text = unquote(m.group(1)).decode('utf-8')\n nr = parse_html(text)\n desc = nr.xpath(\n '//div[@id=\"productDescription\"]/*[@class=\"content\"]')\n if desc:\n ans += self._render_comments(desc[0])\n except Exception as e:\n self.log.warn(\n 'Parsing of obfuscated product description failed with error: %s' % as_unicode(e))\n else:\n desc = root.xpath('//div[@id=\"productDescription_fullView\"]')\n if desc:\n ans += self._render_comments(desc[0])\n\n return ans\n\n def parse_series(self, root):\n ans = (None, None)\n\n # This is found on kindle pages for books on amazon.* (including amazon.co.jp)\n series = root.xpath('//*[@id=\"rpi-attribute-book_details-series\"]')\n if series:\n spans = series[0].xpath('descendant::span')\n if spans:\n texts = [self.tostring(x, encoding='unicode', method='text', with_tail=False).strip()\n for x in spans]\n texts = list(filter(None, texts))\n if len(texts) == 2:\n idxinfo, series_name = texts\n idxinfo = idxinfo.strip()\n\n # Try Japanese pattern like: \"å…¨5å·»ä¸ç¬¬1å·»\", \"å…¨3å·»ä¸ç¬¬2å·»\"\n m = re.search(r'å…¨\\s*[0-9.]+\\s*(?:å·»|冊)ä¸ç¬¬\\s*([0-9.]+)\\s*(?:å·»|冊)', idxinfo)\n if m is not None:\n ans = (series_name, float(m.group(1)))\n return ans\n\n # Fallback: original behaviour (first number), used for EN/etc\n m = re.search(r'[0-9.]+', idxinfo)\n if m is not None:\n ans = (series_name, float(m.group()))\n return ans\n\n # This is found on the paperback/hardback pages for books on amazon.com\n series = root.xpath('//div[@data-feature-name=\"seriesTitle\"]')\n if series:\n series = series[0]\n spans = series.xpath('./span')\n if spans:\n raw = self.tostring(\n spans[0], encoding='unicode', method='text', with_tail=False).strip()\n m = re.search(r'\\s+([0-9.]+)$', raw.strip())\n if m is not None:\n series_index = float(m.group(1))\n s = series.xpath('./a[@id=\"series-page-link\"]')\n if s:\n series = self.tostring(\n s[0], encoding='unicode', method='text', with_tail=False).strip()\n if series:\n ans = (series, series_index)\n else:\n series = root.xpath('//div[@id=\"seriesBulletWidget_feature_div\"]')\n if series:\n a = series[0].xpath('descendant::a')\n if a:\n raw = self.tostring(a[0], encoding='unicode', method='text', with_tail=False)\n if self.domain == 'jp':\n m = re.search(r'å…¨\\s*[0-9.]+\\s*(?:å·»|冊)ä¸ç¬¬\\s*(?P[0-9.]+)\\s*(?:å·»|冊)\\s*:\\s*(?P.+)', raw.strip())\n else:\n m = re.search(r'(?:Book|Libro|Buch)\\s+(?P[0-9.]+)\\s+(?:of|de|von)\\s+([0-9.]+)\\s*:\\s*(?P.+)', raw.strip())\n if m is not None:\n ans = (m.group('series').strip(), float(m.group('index')))\n\n # This is found on Kindle edition pages on amazon.com\n if ans == (None, None):\n for span in root.xpath('//div[@id=\"aboutEbooksSection\"]//li/span'):\n text = (span.text or '').strip()\n m = re.match(r'Book\\s+([0-9.]+)', text)\n if m is not None:\n series_index = float(m.group(1))\n a = span.xpath('./a[@href]')\n if a:\n series = self.tostring(\n a[0], encoding='unicode', method='text', with_tail=False).strip()\n if series:\n ans = (series, series_index)\n # This is found on newer Kindle edition pages on amazon.com\n if ans == (None, None):\n for b in root.xpath('//div[@id=\"reviewFeatureGroup\"]/span/b'):\n text = (b.text or '').strip()\n m = re.match(r'Book\\s+([0-9.]+)', text)\n if m is not None:\n series_index = float(m.group(1))\n a = b.getparent().xpath('./a[@href]')\n if a:\n series = self.tostring(\n a[0], encoding='unicode', method='text', with_tail=False).partition('(')[0].strip()\n if series:\n ans = series, series_index\n\n if ans == (None, None):\n desc = root.xpath('//div[@id=\"ps-content\"]/div[@class=\"buying\"]')\n if desc:\n raw = self.tostring(desc[0], method='text', encoding='unicode')\n raw = re.sub(r'\\s+', ' ', raw)\n match = self.series_pat.search(raw)\n if match is not None:\n s, i = match.group('series'), float(match.group('index'))\n if s:\n ans = (s, i)\n if ans[0]:\n ans = (re.sub(r'\\s+Series$', '', ans[0]).strip(), ans[1])\n ans = (re.sub(r'\\(.+?\\s+Series\\)$', '', ans[0]).strip(), ans[1])\n return ans\n\n def parse_tags(self, root):\n ans = []\n exclude_tokens = {'kindle', 'a-z'}\n exclude = {'special features', 'by authors',\n 'authors & illustrators', 'books', 'new; used & rental textbooks'}\n seen = set()\n for li in root.xpath(self.tags_xpath):\n for i, a in enumerate(li.iterdescendants('a')):\n if i > 0:\n # we ignore the first category since it is almost always\n # too broad\n raw = (a.text or '').strip().replace(',', ';')\n lraw = icu_lower(raw)\n tokens = frozenset(lraw.split())\n if raw and lraw not in exclude and not tokens.intersection(exclude_tokens) and lraw not in seen:\n ans.append(raw)\n seen.add(lraw)\n return ans\n\n def parse_cover(self, root, raw=b''):\n # Look for the image URL in javascript, using the first image in the\n # image gallery as the cover\n import json\n imgpat = re.compile(r'\"hiRes\":\"(.+?)\",\"thumb\"')\n for script in root.xpath('//script'):\n m = imgpat.search(script.text or '')\n if m is not None:\n return m.group(1)\n imgpat = re.compile(r''''imageGalleryData'\\s*:\\s*(\\[\\s*{.+])''')\n for script in root.xpath('//script'):\n m = imgpat.search(script.text or '')\n if m is not None:\n try:\n return json.loads(m.group(1))[0]['mainUrl']\n except Exception:\n continue\n\n def clean_img_src(src):\n parts = src.split('/')\n if len(parts) > 3:\n bn = parts[-1]\n sparts = bn.split('_')\n if len(sparts) > 2:\n bn = re.sub(r'\\.\\.jpg$', '.jpg', (sparts[0] + sparts[-1]))\n return ('/'.join(parts[:-1])) + '/' + bn\n\n imgpat2 = re.compile(r'var imageSrc = \"([^\"]+)\"')\n for script in root.xpath('//script'):\n m = imgpat2.search(script.text or '')\n if m is not None:\n src = m.group(1)\n url = clean_img_src(src)\n if url:\n return url\n\n imgs = root.xpath(\n '//img[(@id=\"prodImage\" or @id=\"original-main-image\" or @id=\"main-image\" or @id=\"main-image-nonjs\") and @src]')\n if not imgs:\n imgs = (\n root.xpath('//div[@class=\"main-image-inner-wrapper\"]/img[@src]') or\n root.xpath('//div[@id=\"main-image-container\" or @id=\"ebooks-main-image-container\"]//img[@src]') or\n root.xpath(\n '//div[@id=\"mainImageContainer\"]//img[@data-a-dynamic-image]')\n )\n for img in imgs:\n try:\n idata = json.loads(img.get('data-a-dynamic-image'))\n except Exception:\n imgs = ()\n else:\n mwidth = 0\n try:\n url = None\n for iurl, (width, height) in idata.items():\n if width > mwidth:\n mwidth = width\n url = iurl\n\n return url\n except Exception:\n pass\n\n for img in imgs:\n src = img.get('src')\n if 'data:' in src:\n continue\n if 'loading-' in src:\n js_img = re.search(br'\"largeImage\":\"(https?://[^\"]+)\",', raw)\n if js_img:\n src = js_img.group(1).decode('utf-8')\n if ('/no-image-avail' not in src and 'loading-' not in src and '/no-img-sm' not in src):\n self.log('Found image: %s' % src)\n url = clean_img_src(src)\n if url:\n return url\n\n def parse_detail_bullets(self, root, mi, container, ul_selector='.detail-bullet-list'):\n try:\n ul = next(self.selector(ul_selector, root=container))\n except StopIteration:\n return\n for span in self.selector('.a-list-item', root=ul):\n cells = span.xpath('./span')\n if len(cells) >= 2:\n self.parse_detail_cells(mi, cells[0], cells[1])\n\n def parse_new_details(self, root, mi, non_hero):\n table = non_hero.xpath('descendant::table')[0]\n for tr in table.xpath('descendant::tr'):\n cells = tr.xpath('descendant::*[local-name()=\"td\" or local-name()=\"th\"]')\n if len(cells) == 2:\n self.parse_detail_cells(mi, cells[0], cells[1])\n\n def parse_detail_cells(self, mi, c1, c2):\n name = self.totext(c1, only_printable=True).strip().strip(':').strip()\n val = self.totext(c2)\n val = val.replace('\\u200e', '').replace('\\u200f', '')\n if not val:\n return\n if name in self.language_names:\n ans = self.lang_map.get(val)\n if not ans:\n ans = canonicalize_lang(val)\n if ans:\n mi.language = ans\n elif name in self.publisher_names:\n pub = val.partition(';')[0].partition('(')[0].strip()\n if pub:\n mi.publisher = pub\n date = val.rpartition('(')[-1].replace(')', '').strip()\n try:\n from calibre.utils.date import parse_only_date\n date = self.delocalize_datestr(date)\n mi.pubdate = parse_only_date(date, assume_utc=True)\n except Exception:\n self.log.exception('Failed to parse pubdate: %s' % val)\n elif name in {'ISBN', 'ISBN-10', 'ISBN-13'}:\n ans = check_isbn(val)\n if ans:\n self.isbn = mi.isbn = ans\n elif name in {'Publication date'}:\n from calibre.utils.date import parse_only_date\n date = self.delocalize_datestr(val)\n mi.pubdate = parse_only_date(date, assume_utc=True)\n\n def parse_isbn(self, pd):\n items = pd.xpath(\n 'descendant::*[starts-with(text(), \"ISBN\")]')\n if not items:\n items = pd.xpath(\n 'descendant::b[contains(text(), \"ISBN:\")]')\n for x in reversed(items):\n if x.tail:\n ans = check_isbn(x.tail.strip())\n if ans:\n return ans\n\n def parse_publisher(self, pd):\n for x in reversed(pd.xpath(self.publisher_xpath)):\n if x.tail:\n ans = x.tail.partition(';')[0]\n return ans.partition('(')[0].strip()\n\n def parse_pubdate(self, pd):\n from calibre.utils.date import parse_only_date\n for x in reversed(pd.xpath(self.pubdate_xpath)):\n if x.tail:\n date = x.tail.strip()\n date = self.delocalize_datestr(date)\n try:\n return parse_only_date(date, assume_utc=True)\n except Exception:\n pass\n for x in reversed(pd.xpath(self.publisher_xpath)):\n if x.tail:\n ans = x.tail\n date = ans.rpartition('(')[-1].replace(')', '').strip()\n date = self.delocalize_datestr(date)\n try:\n return parse_only_date(date, assume_utc=True)\n except Exception:\n pass\n\n def parse_language(self, pd):\n for x in reversed(pd.xpath(self.language_xpath)):\n if x.tail:\n raw = x.tail.strip().partition(',')[0].strip()\n ans = self.lang_map.get(raw, None)\n if ans:\n return ans\n ans = canonicalize_lang(ans)\n if ans:\n return ans\n# }}}\n\n\nclass Amazon(Source):\n\n name = 'Amazon.com'\n version = (1, 3, 15)\n minimum_calibre_version = (2, 82, 0)\n description = _('Downloads metadata and covers from Amazon')\n\n capabilities = frozenset(('identify', 'cover'))\n touched_fields = frozenset(('title', 'authors', 'identifier:amazon',\n 'rating', 'comments', 'publisher', 'pubdate',\n 'languages', 'series', 'tags'))\n has_html_comments = True\n supports_gzip_transfer_encoding = True\n prefer_results_with_isbn = False\n\n AMAZON_DOMAINS = {\n 'com': _('US'),\n 'fr': _('France'),\n 'de': _('Germany'),\n 'uk': _('UK'),\n 'au': _('Australia'),\n 'it': _('Italy'),\n 'jp': _('Japan'),\n 'es': _('Spain'),\n 'br': _('Brazil'),\n 'in': _('India'),\n 'nl': _('Netherlands'),\n 'cn': _('China'),\n 'ca': _('Canada'),\n 'se': _('Sweden'),\n }\n\n SERVERS = {\n 'auto': _('Choose server automatically'),\n 'amazon': _('Amazon servers'),\n 'bing': _('Bing search cache'),\n 'google': _('Google search cache'),\n 'wayback': _('Wayback machine cache (slow)'),\n 'ddg': _('DuckDuckGo search and Google cache'),\n }\n\n options = (\n Option('domain', 'choices', 'com', _('Amazon country website to use:'),\n _('Metadata from Amazon will be fetched using this '\n \"country's Amazon website.\"), choices=AMAZON_DOMAINS),\n Option('server', 'choices', 'auto', _('Server to get data from:'),\n _(\n 'Amazon has started blocking attempts to download'\n ' metadata from its servers. To get around this problem,'\n ' calibre can fetch the Amazon data from many different'\n ' places where it is cached. Choose the source you prefer.'\n ), choices=SERVERS),\n Option('use_mobi_asin', 'bool', False, _('Use the MOBI-ASIN for metadata search'),\n _(\n 'Enable this option to search for metadata with an'\n ' ASIN identifier from the MOBI file at the current country website,'\n ' unless any other amazon id is available. Note that if the'\n ' MOBI file came from a different Amazon country store, you could get'\n ' incorrect results.'\n )),\n Option('prefer_kindle_edition', 'bool', False, _('Prefer the Kindle edition, when available'),\n _(\n 'When searching for a book and the search engine returns both paper and Kindle editions,'\n ' always prefer the Kindle edition, instead of whatever the search engine returns at the'\n ' top.')\n ),\n )\n\n def __init__(self, *args, **kwargs):\n Source.__init__(self, *args, **kwargs)\n self.set_amazon_id_touched_fields()\n\n def id_from_url(self, url):\n from polyglot.urllib import urlparse\n purl = urlparse(url)\n if purl.netloc and purl.path and '/dp/' in purl.path:\n host_parts = tuple(x.lower() for x in purl.netloc.split('.'))\n if 'amazon' in host_parts:\n domain = host_parts[-1]\n parts = purl.path.split('/')\n idx = parts.index('dp')\n try:\n val = parts[idx+1]\n except IndexError:\n return\n aid = 'amazon' if domain == 'com' else ('amazon_' + domain)\n return aid, val\n\n def test_fields(self, mi):\n '''\n Return the first field from self.touched_fields that is null on the\n mi object\n '''\n for key in self.touched_fields:\n if key.startswith('identifier:'):\n key = key.partition(':')[-1]\n if key == 'amazon':\n if self.domain != 'com':\n key += '_' + self.domain\n if not mi.has_identifier(key):\n return 'identifier: ' + key\n elif mi.is_null(key):\n return key\n\n @property\n def browser(self):\n br = self._browser\n if br is None:\n ua = 'Mobile '\n while not user_agent_is_ok(ua):\n ua = random_user_agent(allow_ie=False)\n # ua = 'Mozilla/5.0 (Linux; Android 8.0.0; VTR-L29; rv:63.0) Gecko/20100101 Firefox/63.0'\n self._browser = br = browser(user_agent=ua)\n br.set_handle_gzip(True)\n if self.use_search_engine:\n br.addheaders += [\n ('Accept', accept_header_for_ua(ua)),\n ('Upgrade-insecure-requests', '1'),\n ]\n else:\n br.addheaders += [\n ('Accept', accept_header_for_ua(ua)),\n ('Upgrade-insecure-requests', '1'),\n ('Referer', self.referrer_for_domain()),\n ]\n return br\n\n def save_settings(self, *args, **kwargs):\n Source.save_settings(self, *args, **kwargs)\n self.set_amazon_id_touched_fields()\n\n def set_amazon_id_touched_fields(self):\n ident_name = 'identifier:amazon'\n if self.domain != 'com':\n ident_name += '_' + self.domain\n tf = [x for x in self.touched_fields if not\n x.startswith('identifier:amazon')] + [ident_name]\n self.touched_fields = frozenset(tf)\n\n def get_domain_and_asin(self, identifiers, extra_domains=()):\n identifiers = {k.lower(): v for k, v in identifiers.items()}\n for key, val in identifiers.items():\n if key in ('amazon', 'asin'):\n return 'com', val\n if key.startswith('amazon_'):\n domain = key.partition('_')[-1]\n if domain and (domain in self.AMAZON_DOMAINS or domain in extra_domains):\n return domain, val\n if self.prefs['use_mobi_asin']:\n val = identifiers.get('mobi-asin')\n if val is not None:\n return self.domain, val\n return None, None\n\n def referrer_for_domain(self, domain=None):\n domain = domain or self.domain\n return {\n 'uk': 'https://www.amazon.co.uk/',\n 'au': 'https://www.amazon.com.au/',\n 'br': 'https://www.amazon.com.br/',\n 'jp': 'https://www.amazon.co.jp/',\n 'mx': 'https://www.amazon.com.mx/',\n }.get(domain, 'https://www.amazon.%s/' % domain)\n\n def _get_book_url(self, identifiers): # {{{\n domain, asin = self.get_domain_and_asin(\n identifiers, extra_domains=('au', 'ca'))\n if domain and asin:\n url = None\n r = self.referrer_for_domain(domain)\n if r is not None:\n url = r + 'dp/' + asin\n if url:\n idtype = 'amazon' if domain == 'com' else 'amazon_' + domain\n return domain, idtype, asin, url\n\n def get_book_url(self, identifiers):\n ans = self._get_book_url(identifiers)\n if ans is not None:\n return ans[1:]\n\n def get_book_url_name(self, idtype, idval, url):\n if idtype == 'amazon':\n return self.name\n return 'A' + idtype.replace('_', '.')[1:]\n # }}}\n\n @property\n def domain(self):\n x = getattr(self, 'testing_domain', None)\n if x is not None:\n return x\n domain = self.prefs['domain']\n if domain not in self.AMAZON_DOMAINS:\n domain = 'com'\n\n return domain\n\n @property\n def server(self):\n x = getattr(self, 'testing_server', None)\n if x is not None:\n return x\n server = self.prefs['server']\n if server not in self.SERVERS:\n server = 'auto'\n return server\n\n @property\n def use_search_engine(self):\n return self.server != 'amazon'\n\n def clean_downloaded_metadata(self, mi):\n docase = (\n mi.language == 'eng' or\n (mi.is_null('language') and self.domain in {'com', 'uk', 'au'})\n )\n if mi.title and docase:\n # Remove series information from title\n m = re.search(r'\\S+\\s+(\\(.+?\\s+Book\\s+\\d+\\))$', mi.title)\n if m is not None:\n mi.title = mi.title.replace(m.group(1), '').strip()\n mi.title = fixcase(mi.title)\n mi.authors = fixauthors(mi.authors)\n if mi.tags and docase:\n mi.tags = list(map(fixcase, mi.tags))\n mi.isbn = check_isbn(mi.isbn)\n if mi.series and docase:\n mi.series = fixcase(mi.series)\n if mi.title and mi.series:\n for pat in (r':\\s*Book\\s+\\d+\\s+of\\s+%s$', r'\\(%s\\)$', r':\\s*%s\\s+Book\\s+\\d+$'):\n pat = pat % re.escape(mi.series)\n q = re.sub(pat, '', mi.title, flags=re.I).strip()\n if q and q != mi.title:\n mi.title = q\n break\n\n def get_website_domain(self, domain):\n return {'uk': 'co.uk', 'jp': 'co.jp', 'br': 'com.br', 'au': 'com.au'}.get(domain, domain)\n\n def create_query(self, log, title=None, authors=None, identifiers={}, # {{{\n domain=None, for_amazon=True):\n try:\n from urllib.parse import unquote_plus, urlencode\n except ImportError:\n from urllib import unquote_plus, urlencode\n if domain is None:\n domain = self.domain\n\n idomain, asin = self.get_domain_and_asin(identifiers)\n if idomain is not None:\n domain = idomain\n\n # See the amazon detailed search page to get all options\n terms = []\n q = {'search-alias': 'aps',\n 'unfiltered': '1',\n }\n\n if domain == 'com':\n q['sort'] = 'relevanceexprank'\n else:\n q['sort'] = 'relevancerank'\n\n isbn = check_isbn(identifiers.get('isbn', None))\n\n if asin is not None:\n q['field-keywords'] = asin\n terms.append(asin)\n elif isbn is not None:\n q['field-isbn'] = isbn\n if len(isbn) == 13:\n terms.extend('({} OR {}-{})'.format(isbn, isbn[:3], isbn[3:]).split())\n else:\n terms.append(isbn)\n else:\n # Only return book results\n q['search-alias'] = {'br': 'digital-text',\n 'nl': 'aps'}.get(domain, 'stripbooks')\n if title:\n title_tokens = list(self.get_title_tokens(title))\n if title_tokens:\n q['field-title'] = ' '.join(title_tokens)\n terms.extend(title_tokens)\n if authors:\n author_tokens = list(self.get_author_tokens(authors,\n only_first_author=True))\n if author_tokens:\n q['field-author'] = ' '.join(author_tokens)\n terms.extend(author_tokens)\n\n if not ('field-keywords' in q or 'field-isbn' in q or\n ('field-title' in q)):\n # Insufficient metadata to make an identify query\n log.error('Insufficient metadata to construct query, none of title, ISBN or ASIN supplied')\n raise SearchFailed()\n\n if not for_amazon:\n return terms, domain\n\n if domain == 'nl':\n q['__mk_nl_NL'] = 'Ã…MÅŽÕÑ'\n if 'field-keywords' not in q:\n q['field-keywords'] = ''\n for f in 'field-isbn field-title field-author'.split():\n q['field-keywords'] += ' ' + q.pop(f, '')\n q['field-keywords'] = q['field-keywords'].strip()\n\n encoded_q = {x.encode('utf-8', 'ignore'): y.encode('utf-8', 'ignore') for x, y in q.items()}\n url_query = urlencode(encoded_q)\n # amazon's servers want IRIs with unicode characters not percent esaped\n parts = []\n for x in url_query.split(b'&' if isinstance(url_query, bytes) else '&'):\n k, v = x.split(b'=' if isinstance(x, bytes) else '=', 1)\n parts.append('{}={}'.format(iri_quote_plus(unquote_plus(k)), iri_quote_plus(unquote_plus(v))))\n url_query = '&'.join(parts)\n url = 'https://www.amazon.%s/s/?' % self.get_website_domain(\n domain) + url_query\n return url, domain\n\n # }}}\n\n def get_cached_cover_url(self, identifiers): # {{{\n url = None\n domain, asin = self.get_domain_and_asin(identifiers)\n if asin is None:\n isbn = identifiers.get('isbn', None)\n if isbn is not None:\n asin = self.cached_isbn_to_identifier(isbn)\n if asin is not None:\n url = self.cached_identifier_to_cover_url(asin)\n\n return url\n # }}}\n\n def parse_results_page(self, root, domain): # {{{\n from lxml.html import tostring\n\n matches = []\n\n def title_ok(title):\n title = title.lower()\n bad = ['bulk pack', '[audiobook]', '[audio cd]',\n '(a book companion)', '( slipcase with door )', ': free sampler']\n if self.domain == 'com':\n bad.extend(['(%s edition)' % x for x in ('spanish', 'german')])\n for x in bad:\n if x in title:\n return False\n if title and title[0] in '[{' and re.search(r'\\(\\s*author\\s*\\)', title) is not None:\n # Bad entries in the catalog\n return False\n return True\n\n for query in (\n '//div[contains(@class, \"s-result-list\")]//h2/a[@href]',\n '//div[contains(@class, \"s-result-list\")]//div[@data-index]//h5//a[@href]',\n r'//li[starts-with(@id, \"result_\")]//a[@href and contains(@class, \"s-access-detail-page\")]',\n '//div[@data-cy=\"title-recipe\"]/a[@href]',\n ):\n result_links = root.xpath(query)\n if result_links:\n break\n for a in result_links:\n title = tostring(a, method='text', encoding='unicode')\n if title_ok(title):\n url = a.get('href')\n if url.startswith('/'):\n url = 'https://www.amazon.%s%s' % (\n self.get_website_domain(domain), url)\n matches.append(url)\n\n if not matches:\n # Previous generation of results page markup\n for div in root.xpath(r'//div[starts-with(@id, \"result_\")]'):\n links = div.xpath(r'descendant::a[@class=\"title\" and @href]')\n if not links:\n # New amazon markup\n links = div.xpath('descendant::h3/a[@href]')\n for a in links:\n title = tostring(a, method='text', encoding='unicode')\n if title_ok(title):\n url = a.get('href')\n if url.startswith('/'):\n url = 'https://www.amazon.%s%s' % (\n self.get_website_domain(domain), url)\n matches.append(url)\n break\n\n if not matches:\n # This can happen for some user agents that Amazon thinks are\n # mobile/less capable\n for td in root.xpath(\n r'//div[@id=\"Results\"]/descendant::td[starts-with(@id, \"search:Td:\")]'):\n for a in td.xpath(r'descendant::td[@class=\"dataColumn\"]/descendant::a[@href]/span[@class=\"srTitle\"]/..'):\n title = tostring(a, method='text', encoding='unicode')\n if title_ok(title):\n url = a.get('href')\n if url.startswith('/'):\n url = 'https://www.amazon.%s%s' % (\n self.get_website_domain(domain), url)\n matches.append(url)\n break\n if not matches and root.xpath('//form[@action=\"/errors/validateCaptcha\"]'):\n raise CaptchaError('Amazon returned a CAPTCHA page. Recently Amazon has begun using statistical'\n ' profiling to block access to its website. As such this metadata plugin is'\n ' unlikely to ever work reliably.')\n\n # Keep only the top 3 matches as the matches are sorted by relevance by\n # Amazon so lower matches are not likely to be very relevant\n return matches[:3]\n # }}}\n\n def search_amazon(self, br, testing, log, abort, title, authors, identifiers, timeout): # {{{\n from calibre.ebooks.chardet import xml_to_unicode\n from calibre.utils.cleantext import clean_ascii_chars\n matches = []\n query, domain = self.create_query(log, title=title, authors=authors,\n identifiers=identifiers)\n time.sleep(1)\n try:\n raw = br.open_novisit(query, timeout=timeout).read().strip()\n except Exception as e:\n if callable(getattr(e, 'getcode', None)) and \\\n e.getcode() == 404:\n log.error('Query malformed: %r' % query)\n raise SearchFailed()\n attr = getattr(e, 'args', [None])\n attr = attr if attr else [None]\n if isinstance(attr[0], socket.timeout):\n msg = _('Amazon timed out. Try again later.')\n log.error(msg)\n else:\n msg = 'Failed to make identify query: %r' % query\n log.exception(msg)\n raise SearchFailed()\n\n raw = clean_ascii_chars(xml_to_unicode(raw,\n strip_encoding_pats=True, resolve_entities=True)[0])\n\n if testing:\n import tempfile\n with tempfile.NamedTemporaryFile(prefix='amazon_results_',\n suffix='.html', delete=False) as f:\n f.write(raw.encode('utf-8'))\n print('Downloaded html for results page saved in', f.name)\n\n matches = []\n found = '404 - ' not in raw\n\n if found:\n try:\n root = parse_html(raw)\n except Exception:\n msg = 'Failed to parse amazon page for query: %r' % query\n log.exception(msg)\n raise SearchFailed()\n\n matches = self.parse_results_page(root, domain)\n\n return matches, query, domain, None\n # }}}\n\n def search_search_engine(self, br, testing, log, abort, title, authors, identifiers, timeout, override_server=None): # {{{\n from calibre.ebooks.metadata.sources.update import search_engines_module\n se = search_engines_module()\n terms, domain = self.create_query(log, title=title, authors=authors,\n identifiers=identifiers, for_amazon=False)\n site = self.referrer_for_domain(\n domain)[len('https://'):].partition('/')[0]\n matches = []\n server = override_server or self.server\n if server == 'bing':\n urlproc, sfunc = se.bing_url_processor, se.bing_search\n elif server == 'wayback':\n urlproc, sfunc = se.wayback_url_processor, se.ddg_search\n elif server == 'ddg':\n urlproc, sfunc = se.ddg_url_processor, se.ddg_search\n elif server == 'google':\n urlproc, sfunc = se.google_url_processor, se.google_search\n else: # auto or unknown\n urlproc, sfunc = se.google_url_processor, se.google_search\n # urlproc, sfunc = se.bing_url_processor, se.bing_search\n try:\n results, qurl = sfunc(terms, site, log=log, br=br, timeout=timeout)\n except HTTPError as err:\n if err.code == 429 and sfunc is se.google_search:\n log('Got too many requests error from Google, trying via DuckDuckGo')\n urlproc, sfunc = se.ddg_url_processor, se.ddg_search\n results, qurl = sfunc(terms, site, log=log, br=br, timeout=timeout)\n else:\n raise\n\n br.set_current_header('Referer', qurl)\n for result in results:\n if abort.is_set():\n return matches, terms, domain, None\n\n purl = urlparse(result.url)\n if '/dp/' in purl.path and site in purl.netloc:\n # We cannot use cached URL as wayback machine no longer caches\n # amazon and Google and Bing web caches are no longer\n # accessible.\n url = result.url\n if url not in matches:\n matches.append(url)\n if len(matches) >= 3:\n break\n else:\n log('Skipping non-book result:', result)\n if not matches:\n log('No search engine results for terms:', ' '.join(terms))\n if urlproc is se.google_url_processor:\n # Google does not cache adult titles\n log('Trying the bing search engine instead')\n return self.search_search_engine(br, testing, log, abort, title, authors, identifiers, timeout, 'bing')\n return matches, terms, domain, urlproc\n # }}}\n\n def identify(self, log, result_queue, abort, title=None, authors=None, # {{{\n identifiers={}, timeout=60):\n '''\n Note this method will retry without identifiers automatically if no\n match is found with identifiers.\n '''\n\n testing = getattr(self, 'running_a_test', False)\n\n udata = self._get_book_url(identifiers)\n br = self.browser\n log('User-agent:', br.current_user_agent())\n log('Server:', self.server)\n if testing:\n print('User-agent:', br.current_user_agent())\n if udata is not None and not self.use_search_engine:\n # Try to directly get details page instead of running a search\n # Cannot use search engine as the directly constructed URL is\n # usually redirected to a full URL by amazon, and is therefore\n # not cached\n domain, idtype, asin, durl = udata\n if durl is not None:\n preparsed_root = parse_details_page(\n durl, log, timeout, br, domain)\n if preparsed_root is not None:\n qasin = parse_asin(preparsed_root[1], log, durl)\n if qasin == asin:\n w = Worker(durl, result_queue, br, log, 0, domain,\n self, testing=testing, preparsed_root=preparsed_root, timeout=timeout)\n try:\n w.get_details()\n return\n except Exception:\n log.exception(\n 'get_details failed for url: %r' % durl)\n func = self.search_search_engine if self.use_search_engine else self.search_amazon\n try:\n matches, query, domain, cover_url_processor = func(\n br, testing, log, abort, title, authors, identifiers, timeout)\n except SearchFailed:\n return\n\n if abort.is_set():\n return\n\n if not matches:\n if identifiers and title and authors:\n log('No matches found with identifiers, retrying using only'\n ' title and authors. Query: %r' % query)\n time.sleep(1)\n return self.identify(log, result_queue, abort, title=title,\n authors=authors, timeout=timeout)\n log.error('No matches found with query: %r' % query)\n return\n\n if self.prefs['prefer_kindle_edition']:\n matches = sort_matches_preferring_kindle_editions(matches)\n\n workers = [Worker(\n url, result_queue, br, log, i, domain, self, testing=testing, timeout=timeout,\n cover_url_processor=cover_url_processor, filter_result=partial(\n self.filter_result, title, authors, identifiers)) for i, url in enumerate(matches)]\n\n for w in workers:\n # Don't send all requests at the same time\n time.sleep(1)\n w.start()\n if abort.is_set():\n return\n\n while not abort.is_set():\n a_worker_is_alive = False\n for w in workers:\n w.join(0.2)\n if abort.is_set():\n break\n if w.is_alive():\n a_worker_is_alive = True\n if not a_worker_is_alive:\n break\n\n return None\n # }}}\n\n def filter_result(self, title, authors, identifiers, mi, log): # {{{\n if not self.use_search_engine:\n return True\n if title is not None:\n import regex\n only_punctuation_pat = regex.compile(r'^\\p{P}+$')\n\n def tokenize_title(x):\n ans = icu_lower(x).replace(\"'\", '').replace('\"', '').rstrip(':')\n if only_punctuation_pat.match(ans) is not None:\n ans = ''\n return ans\n\n tokens = {tokenize_title(x) for x in title.split() if len(x) > 3}\n tokens.discard('')\n if tokens:\n result_tokens = {tokenize_title(x) for x in mi.title.split()}\n result_tokens.discard('')\n if not tokens.intersection(result_tokens):\n log('Ignoring result:', mi.title, 'as its title does not match')\n return False\n if authors:\n author_tokens = set()\n for author in authors:\n author_tokens |= {icu_lower(x) for x in author.split() if len(x) > 2}\n result_tokens = set()\n for author in mi.authors:\n result_tokens |= {icu_lower(x) for x in author.split() if len(x) > 2}\n if author_tokens and not author_tokens.intersection(result_tokens):\n log('Ignoring result:', mi.title, 'by', ' & '.join(mi.authors), 'as its author does not match')\n return False\n return True\n # }}}\n\n def download_cover(self, log, result_queue, abort, # {{{\n title=None, authors=None, identifiers={}, timeout=60, get_best_cover=False):\n cached_url = self.get_cached_cover_url(identifiers)\n if cached_url is None:\n log.info('No cached cover found, running identify')\n rq = Queue()\n self.identify(log, rq, abort, title=title, authors=authors,\n identifiers=identifiers)\n if abort.is_set():\n return\n results = []\n while True:\n try:\n results.append(rq.get_nowait())\n except Empty:\n break\n results.sort(key=self.identify_results_keygen(\n title=title, authors=authors, identifiers=identifiers))\n for mi in results:\n cached_url = self.get_cached_cover_url(mi.identifiers)\n if cached_url is not None:\n break\n if cached_url is None:\n log.info('No cover found')\n return\n\n if abort.is_set():\n return\n log('Downloading cover from:', cached_url)\n br = self.browser\n if self.use_search_engine:\n br = br.clone_browser()\n br.set_current_header('Referer', self.referrer_for_domain(self.domain))\n try:\n time.sleep(1)\n cdata = br.open_novisit(\n cached_url, timeout=timeout).read()\n result_queue.put((self, cdata))\n except Exception:\n log.exception('Failed to download cover from:', cached_url)\n # }}}\n\n\ndef manual_tests(domain, **kw): # {{{\n # To run these test use:\n # calibre-debug -c \"from calibre.ebooks.metadata.sources.amazon import *; manual_tests('com')\"\n from calibre.ebooks.metadata.sources.test import authors_test, comments_test, isbn_test, series_test, test_identify_plugin, title_test\n all_tests = {}\n all_tests['com'] = [ # {{{\n ( # in title\n {'title': 'Expert C# 2008 Business Objects',\n 'authors': ['Lhotka']},\n [title_test('Expert C#'),\n authors_test(['Rockford Lhotka'])\n ]\n ),\n\n ( # Paperback with series\n {'identifiers': {'amazon': '1423146786'}},\n [title_test('Heroes of Olympus', exact=False), series_test('The Heroes of Olympus', 5)]\n ),\n\n ( # Kindle edition with series\n {'identifiers': {'amazon': 'B0085UEQDO'}},\n [title_test('Three Parts Dead', exact=True),\n series_test('Craft Sequence', 1)]\n ),\n\n ( # + in title and uses id=\"main-image\" for cover\n {'identifiers': {'amazon': '1933988770'}},\n [title_test(\n 'C++ Concurrency in Action: Practical Multithreading', exact=True)]\n ),\n\n\n ( # Different comments markup, using Book Description section\n {'identifiers': {'amazon': '0982514506'}},\n [title_test(\n \"Griffin's Destiny\",\n exact=True),\n comments_test('Jelena'), comments_test('Ashinji'),\n ]\n ),\n\n ( # New search results page markup (Dec 2024)\n {'title': 'Come si scrive un articolo medico-scientifico'},\n [title_test('Come si scrive un articolo medico-scientifico', exact=True)]\n ),\n\n ( # No specific problems\n {'identifiers': {'isbn': '0743273567'}},\n [title_test('the great gatsby'),\n authors_test(['f. Scott Fitzgerald'])]\n ),\n\n ]\n\n # }}}\n\n all_tests['de'] = [ # {{{\n # series\n (\n {'identifiers': {'isbn': '3499275120'}},\n [title_test('Vespasian: Das Schwert des Tribuns: Historischer Roman',\n exact=False), authors_test(['Robert Fabbri']), series_test('Die Vespasian-Reihe', 1)\n ]\n\n ),\n\n ( # umlaut in title/authors\n {'title': 'Flüsternde Wälder',\n 'authors': ['Nicola Förg']},\n [title_test('Flüsternde Wälder'),\n authors_test(['Nicola Förg'], subset=True)\n ]\n ),\n\n (\n {'identifiers': {'isbn': '9783453314979'}},\n [title_test('Die letzten Wächter: Roman',\n exact=False), authors_test(['Sergej Lukianenko'])\n ]\n\n ),\n\n (\n {'identifiers': {'isbn': '3548283519'}},\n [title_test('Wer Wind Sät: Der Fünfte Fall Für Bodenstein Und Kirchhoff',\n exact=False), authors_test(['Nele Neuhaus'])\n ]\n\n ),\n ] # }}}\n\n all_tests['it'] = [ # {{{\n (\n {'identifiers': {'isbn': '8838922195'}},\n [title_test('La briscola in cinque',\n exact=True), authors_test(['Marco Malvaldi'])\n ]\n\n ),\n ] # }}}\n\n all_tests['fr'] = [ # {{{\n (\n {'identifiers': {'amazon_fr': 'B07L7ST4RS'}},\n [title_test('Le secret de Lola', exact=True),\n authors_test(['Amélie BRIZIO'])\n ]\n ),\n (\n {'identifiers': {'isbn': '2221116798'}},\n [title_test(\"L'étrange voyage de Monsieur Daldry\",\n exact=True), authors_test(['Marc Levy'])\n ]\n\n ),\n ] # }}}\n\n all_tests['es'] = [ # {{{\n (\n {'identifiers': {'isbn': '8483460831'}},\n [title_test('Tiempos Interesantes',\n exact=False), authors_test(['Terry Pratchett'])\n ]\n\n ),\n ] # }}}\n\n all_tests['se'] = [ # {{{\n (\n {'identifiers': {'isbn': '9780552140287'}},\n [title_test('Men At Arms: A Discworld Novel: 14',\n exact=False), authors_test(['Terry Pratchett'])\n ]\n\n ),\n ] # }}}\n\n all_tests['jp'] = [ # {{{\n ( # Adult filtering test\n {'identifiers': {'isbn': '4799500066'}},\n [title_test('Bitch ï¼´ï½’ï½ï½'), ]\n ),\n\n ( # isbn -> title, authors\n {'identifiers': {'isbn': '9784101302720'}},\n [title_test('精霊ã®å®ˆã‚Šäºº',\n exact=True), authors_test(['上橋 èœç©‚å'])\n ]\n ),\n ( # title, authors -> isbn (will use Shift_JIS encoding in query.)\n {'title': '考ãˆãªã„ç·´ç¿’',\n 'authors': ['å°æ± é¾ä¹‹ä»‹']},\n [isbn_test('9784093881067'), ]\n ),\n ] # }}}\n\n all_tests['br'] = [ # {{{\n (\n {'title': 'A Ascensão da Sombra'},\n [title_test('A Ascensão da Sombra'), authors_test(['Robert Jordan'])]\n ),\n\n (\n {'title': 'Guerra dos Tronos'},\n [title_test('A Guerra dos Tronos. As Crônicas de Gelo e Fogo - Livro 1'), authors_test(['George R. R. Martin'])\n ]\n\n ),\n ] # }}}\n\n all_tests['nl'] = [ # {{{\n (\n {'title': 'Freakonomics'},\n [title_test('Freakonomics',\n exact=True), authors_test(['Steven Levitt & Stephen Dubner & R. Kuitenbrouwer & O. Brenninkmeijer & A. van Den Berg'])\n ]\n\n ),\n ] # }}}\n\n all_tests['cn'] = [ # {{{\n (\n {'identifiers': {'isbn': '9787115369512'}},\n [title_test('若为自由故 è‡ªç”±è½¯ä»¶ä¹‹çˆ¶ç†æŸ¥å¾·æ–¯æ‰˜æ›¼ä¼ ', exact=True),\n authors_test(['[美]sam Williams', 'é‚“æ¥ ï¼ŒæŽå‡¡å¸Œ'])]\n ),\n (\n {'title': '爱上Raspberry Pi'},\n [title_test('爱上Raspberry Pi',\n exact=True), authors_test(['Matt Richardson', 'Shawn Wallace', 'æŽå‡¡å¸Œ'])\n ]\n\n ),\n ] # }}}\n\n all_tests['ca'] = [ # {{{\n ( # Paperback with series\n {'identifiers': {'isbn': '9781623808747'}},\n [title_test('Parting Shot', exact=True),\n authors_test(['Mary Calmes'])]\n ),\n ( # in title\n {'title': 'Expert C# 2008 Business Objects',\n 'authors': ['Lhotka']},\n [title_test('Expert C# 2008 Business Objects'),\n authors_test(['Rockford Lhotka'])]\n ),\n ( # noscript description\n {'identifiers': {'amazon_ca': '162380874X'}},\n [title_test('Parting Shot', exact=True), authors_test(['Mary Calmes'])\n ]\n ),\n ] # }}}\n\n all_tests['in'] = [ # {{{\n ( # Paperback with series\n {'identifiers': {'amazon_in': '1423146786'}},\n [title_test('The Heroes of Olympus, Book Five The Blood of Olympus', exact=True)]\n ),\n ] # }}}\n\n def do_test(domain, start=0, stop=None, server='auto'):\n tests = all_tests[domain]\n if stop is None:\n stop = len(tests)\n tests = tests[start:stop]\n test_identify_plugin(Amazon.name, tests, modify_plugin=lambda p: (\n setattr(p, 'testing_domain', domain),\n setattr(p, 'touched_fields', p.touched_fields - {'tags'}),\n setattr(p, 'testing_server', server),\n ))\n\n do_test(domain, **kw)\n# }}}\n",
- "big_book_search": "#!/usr/bin/env python\n# vim:fileencoding=UTF-8\nfrom __future__ import absolute_import, division, print_function, unicode_literals\n\n__license__ = 'GPL v3'\n__copyright__ = '2013, Kovid Goyal '\n__docformat__ = 'restructuredtext en'\n\nfrom calibre.ebooks.metadata.sources.base import Option, Source\n\n\ndef get_urls(br, tokens):\n from urllib.parse import quote_plus\n\n from html5_parser import parse\n escaped = (quote_plus(x) for x in tokens if x and x.strip())\n q = '+'.join(escaped)\n url = 'https://bigbooksearch.com/please-dont-scrape-my-site-you-will-put-my-api-key-over-the-usage-limit-and-the-site-will-break/books/'+q\n raw = br.open(url).read()\n root = parse(raw.decode('utf-8'))\n urls = [i.get('src') for i in root.xpath('//img[@src]')]\n return urls\n\n\nclass BigBookSearch(Source):\n\n name = 'Big Book Search'\n version = (1, 0, 1)\n minimum_calibre_version = (2, 80, 0)\n description = _('Downloads multiple book covers from Amazon. Useful to find alternate covers.')\n capabilities = frozenset(['cover'])\n can_get_multiple_covers = True\n options = (Option('max_covers', 'number', 5, _('Maximum number of covers to get'),\n _('The maximum number of covers to process from the search result')),\n )\n supports_gzip_transfer_encoding = True\n\n def download_cover(self, log, result_queue, abort,\n title=None, authors=None, identifiers={}, timeout=30, get_best_cover=False):\n if not title:\n return\n br = self.browser\n tokens = tuple(self.get_title_tokens(title)) + tuple(self.get_author_tokens(authors))\n urls = get_urls(br, tokens)\n self.download_multiple_covers(title, authors, urls, get_best_cover, timeout, result_queue, abort, log)\n\n\ndef test():\n import pprint\n\n from calibre import browser\n br = browser()\n urls = get_urls(br, ['consider', 'phlebas', 'banks'])\n pprint.pprint(urls)\n\n\nif __name__ == '__main__':\n test()\n",
- "edelweiss": "#!/usr/bin/env python\n# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai\nfrom __future__ import absolute_import, division, print_function, unicode_literals\n\n__license__ = 'GPL v3'\n__copyright__ = '2013, Kovid Goyal '\n__docformat__ = 'restructuredtext en'\n\nimport re\nimport time\nfrom threading import Thread\n\ntry:\n from queue import Empty, Queue\nexcept ImportError:\n from Queue import Empty, Queue\n\nfrom calibre import as_unicode, random_user_agent\nfrom calibre.ebooks.metadata import check_isbn\nfrom calibre.ebooks.metadata.sources.base import Source\n\n\ndef clean_html(raw):\n from calibre.ebooks.chardet import xml_to_unicode\n from calibre.utils.cleantext import clean_ascii_chars\n return clean_ascii_chars(xml_to_unicode(raw, strip_encoding_pats=True,\n resolve_entities=True, assume_utf8=True)[0])\n\n\ndef parse_html(raw):\n raw = clean_html(raw)\n from html5_parser import parse\n return parse(raw)\n\n\ndef astext(node):\n from lxml import etree\n return etree.tostring(node, method='text', encoding='unicode',\n with_tail=False).strip()\n\n\nclass Worker(Thread): # {{{\n\n def __init__(self, basic_data, relevance, result_queue, br, timeout, log, plugin):\n Thread.__init__(self)\n self.daemon = True\n self.basic_data = basic_data\n self.br, self.log, self.timeout = br, log, timeout\n self.result_queue, self.plugin, self.sku = result_queue, plugin, self.basic_data['sku']\n self.relevance = relevance\n\n def run(self):\n url = ('https://www.edelweiss.plus/GetTreelineControl.aspx?controlName=/uc/product/two_Enhanced.ascx&'\n 'sku={0}&idPrefix=content_1_{0}&mode=0'.format(self.sku))\n try:\n raw = self.br.open_novisit(url, timeout=self.timeout).read()\n except Exception:\n self.log.exception('Failed to load comments page: %r'%url)\n return\n\n try:\n mi = self.parse(raw)\n mi.source_relevance = self.relevance\n self.plugin.clean_downloaded_metadata(mi)\n self.result_queue.put(mi)\n except Exception:\n self.log.exception('Failed to parse details for sku: %s'%self.sku)\n\n def parse(self, raw):\n from calibre.ebooks.metadata.book.base import Metadata\n from calibre.utils.date import UNDEFINED_DATE\n root = parse_html(raw)\n mi = Metadata(self.basic_data['title'], self.basic_data['authors'])\n\n # Identifiers\n if self.basic_data['isbns']:\n mi.isbn = self.basic_data['isbns'][0]\n mi.set_identifier('edelweiss', self.sku)\n\n # Tags\n if self.basic_data['tags']:\n mi.tags = self.basic_data['tags']\n mi.tags = [t[1:].strip() if t.startswith('&') else t for t in mi.tags]\n\n # Publisher\n mi.publisher = self.basic_data['publisher']\n\n # Pubdate\n if self.basic_data['pubdate'] and self.basic_data['pubdate'].year != UNDEFINED_DATE:\n mi.pubdate = self.basic_data['pubdate']\n\n # Rating\n if self.basic_data['rating']:\n mi.rating = self.basic_data['rating']\n\n # Comments\n comments = ''\n for cid in ('summary', 'contributorbio', 'quotes_reviews'):\n cid = 'desc_{}{}-content'.format(cid, self.sku)\n div = root.xpath('//*[@id=\"{}\"]'.format(cid))\n if div:\n comments += self.render_comments(div[0])\n if comments:\n mi.comments = comments\n\n mi.has_cover = self.plugin.cached_identifier_to_cover_url(self.sku) is not None\n return mi\n\n def render_comments(self, desc):\n from lxml import etree\n\n from calibre.library.comments import sanitize_comments_html\n for c in desc.xpath('descendant::noscript'):\n c.getparent().remove(c)\n for a in desc.xpath('descendant::a[@href]'):\n del a.attrib['href']\n a.tag = 'span'\n desc = etree.tostring(desc, method='html', encoding='unicode').strip()\n\n # remove all attributes from tags\n desc = re.sub(r'<([a-zA-Z0-9]+)\\s[^>]+>', r'<\\1>', desc)\n # Collapse whitespace\n # desc = re.sub(r'\\n+', '\\n', desc)\n # desc = re.sub(r' +', ' ', desc)\n # Remove comments\n desc = re.sub(r'(?s)', '', desc)\n return sanitize_comments_html(desc)\n# }}}\n\n\ndef get_basic_data(browser, log, *skus):\n from mechanize import Request\n\n from calibre.utils.date import parse_only_date\n zeroes = ','.join('0' for sku in skus)\n data = {\n 'skus': ','.join(skus),\n 'drc': zeroes,\n 'startPosition': '0',\n 'sequence': '1',\n 'selected': zeroes,\n 'itemID': '0',\n 'orderID': '0',\n 'mailingID': '',\n 'tContentWidth': '926',\n 'originalOrder': ','.join(type('')(i) for i in range(len(skus))),\n 'selectedOrderID': '0',\n 'selectedSortColumn': '0',\n 'listType': '1',\n 'resultType': '32',\n 'blockView': '1',\n }\n items_data_url = 'https://www.edelweiss.plus/GetTreelineControl.aspx?controlName=/uc/listviews/ListView_Title_Multi.ascx'\n req = Request(items_data_url, data)\n response = browser.open_novisit(req)\n raw = response.read()\n root = parse_html(raw)\n for item in root.xpath('//div[@data-priority]'):\n row = item.getparent().getparent()\n sku = item.get('id').split('-')[-1]\n isbns = [x.strip() for x in row.xpath('descendant::*[contains(@class, \"pev_sku\")]/text()')[0].split(',') if check_isbn(x.strip())]\n isbns.sort(key=len, reverse=True)\n try:\n tags = [x.strip() for x in astext(row.xpath('descendant::*[contains(@class, \"pev_categories\")]')[0]).split('/')]\n except IndexError:\n tags = []\n rating = 0\n for bar in row.xpath('descendant::*[contains(@class, \"bgdColorCommunity\")]/@style'):\n m = re.search(r'width: (\\d+)px;.*max-width: (\\d+)px', bar)\n if m is not None:\n rating = float(m.group(1)) / float(m.group(2))\n break\n try:\n pubdate = parse_only_date(astext(row.xpath('descendant::*[contains(@class, \"pev_shipDate\")]')[0]\n ).split(':')[-1].split(u'\\xa0')[-1].strip(), assume_utc=True)\n except Exception:\n log.exception('Error parsing published date')\n pubdate = None\n authors = []\n for x in [x.strip() for x in row.xpath('descendant::*[contains(@class, \"pev_contributor\")]/@title')]:\n authors.extend(a.strip() for a in x.split(','))\n entry = {\n 'sku': sku,\n 'cover': row.xpath('descendant::img/@src')[0].split('?')[0],\n 'publisher': astext(row.xpath('descendant::*[contains(@class, \"headerPublisher\")]')[0]),\n 'title': astext(row.xpath('descendant::*[@id=\"title_{}\"]'.format(sku))[0]),\n 'authors': authors,\n 'isbns': isbns,\n 'tags': tags,\n 'pubdate': pubdate,\n 'format': ' '.join(row.xpath('descendant::*[contains(@class, \"pev_format\")]/text()')).strip(),\n 'rating': rating,\n }\n if entry['cover'].startswith('/'):\n entry['cover'] = None\n yield entry\n\n\nclass Edelweiss(Source):\n\n name = 'Edelweiss'\n version = (2, 0, 1)\n minimum_calibre_version = (3, 6, 0)\n description = _('Downloads metadata and covers from Edelweiss - A catalog updated by book publishers')\n\n capabilities = frozenset(['identify', 'cover'])\n touched_fields = frozenset([\n 'title', 'authors', 'tags', 'pubdate', 'comments', 'publisher',\n 'identifier:isbn', 'identifier:edelweiss', 'rating'])\n supports_gzip_transfer_encoding = True\n has_html_comments = True\n\n @property\n def user_agent(self):\n # Pass in an index to random_user_agent() to test with a particular\n # user agent\n return random_user_agent(allow_ie=False)\n\n def _get_book_url(self, sku):\n if sku:\n return 'https://www.edelweiss.plus/#sku={}&page=1'.format(sku)\n\n def get_book_url(self, identifiers): # {{{\n sku = identifiers.get('edelweiss', None)\n if sku:\n return 'edelweiss', sku, self._get_book_url(sku)\n\n # }}}\n\n def get_cached_cover_url(self, identifiers): # {{{\n sku = identifiers.get('edelweiss', None)\n if not sku:\n isbn = identifiers.get('isbn', None)\n if isbn is not None:\n sku = self.cached_isbn_to_identifier(isbn)\n return self.cached_identifier_to_cover_url(sku)\n # }}}\n\n def create_query(self, log, title=None, authors=None, identifiers={}):\n try:\n from urllib.parse import urlencode\n except ImportError:\n from urllib import urlencode\n import time\n BASE_URL = ('https://www.edelweiss.plus/GetTreelineControl.aspx?'\n 'controlName=/uc/listviews/controls/ListView_data.ascx&itemID=0&resultType=32&dashboardType=8&itemType=1&dataType=products&keywordSearch&')\n keywords = []\n isbn = check_isbn(identifiers.get('isbn', None))\n if isbn is not None:\n keywords.append(isbn)\n elif title:\n title_tokens = list(self.get_title_tokens(title))\n if title_tokens:\n keywords.extend(title_tokens)\n author_tokens = self.get_author_tokens(authors, only_first_author=True)\n if author_tokens:\n keywords.extend(author_tokens)\n if not keywords:\n return None\n params = {\n 'q': (' '.join(keywords)).encode('utf-8'),\n '_': type('')(int(time.time()))\n }\n return BASE_URL+urlencode(params)\n\n # }}}\n\n def identify(self, log, result_queue, abort, title=None, authors=None, # {{{\n identifiers={}, timeout=30):\n import json\n\n br = self.browser\n br.addheaders = [\n ('Referer', 'https://www.edelweiss.plus/'),\n ('X-Requested-With', 'XMLHttpRequest'),\n ('Cache-Control', 'no-cache'),\n ('Pragma', 'no-cache'),\n ]\n if 'edelweiss' in identifiers:\n items = [identifiers['edelweiss']]\n else:\n log.error('Currently Edelweiss returns random books for search queries')\n return\n query = self.create_query(log, title=title, authors=authors,\n identifiers=identifiers)\n if not query:\n log.error('Insufficient metadata to construct query')\n return\n log('Using query URL:', query)\n try:\n raw = br.open(query, timeout=timeout).read().decode('utf-8')\n except Exception as e:\n log.exception('Failed to make identify query: %r'%query)\n return as_unicode(e)\n items = re.search(r'window[.]items\\s*=\\s*(.+?);', raw)\n if items is None:\n log.error('Failed to get list of matching items')\n log.debug('Response text:')\n log.debug(raw)\n return\n items = json.loads(items.group(1))\n\n if (not items and identifiers and title and authors and\n not abort.is_set()):\n return self.identify(log, result_queue, abort, title=title,\n authors=authors, timeout=timeout)\n\n if not items:\n return\n\n workers = []\n items = items[:5]\n for i, item in enumerate(get_basic_data(self.browser, log, *items)):\n sku = item['sku']\n for isbn in item['isbns']:\n self.cache_isbn_to_identifier(isbn, sku)\n if item['cover']:\n self.cache_identifier_to_cover_url(sku, item['cover'])\n fmt = item['format'].lower()\n if 'audio' in fmt or 'mp3' in fmt:\n continue # Audio-book, ignore\n workers.append(Worker(item, i, result_queue, br.clone_browser(), timeout, log, self))\n\n if not workers:\n return\n\n for w in workers:\n w.start()\n # Don't send all requests at the same time\n time.sleep(0.1)\n\n while not abort.is_set():\n a_worker_is_alive = False\n for w in workers:\n w.join(0.2)\n if abort.is_set():\n break\n if w.is_alive():\n a_worker_is_alive = True\n if not a_worker_is_alive:\n break\n\n # }}}\n\n def download_cover(self, log, result_queue, abort, # {{{\n title=None, authors=None, identifiers={}, timeout=30, get_best_cover=False):\n cached_url = self.get_cached_cover_url(identifiers)\n if cached_url is None:\n log.info('No cached cover found, running identify')\n rq = Queue()\n self.identify(log, rq, abort, title=title, authors=authors,\n identifiers=identifiers)\n if abort.is_set():\n return\n results = []\n while True:\n try:\n results.append(rq.get_nowait())\n except Empty:\n break\n results.sort(key=self.identify_results_keygen(\n title=title, authors=authors, identifiers=identifiers))\n for mi in results:\n cached_url = self.get_cached_cover_url(mi.identifiers)\n if cached_url is not None:\n break\n if cached_url is None:\n log.info('No cover found')\n return\n\n if abort.is_set():\n return\n br = self.browser\n log('Downloading cover from:', cached_url)\n try:\n cdata = br.open_novisit(cached_url, timeout=timeout).read()\n result_queue.put((self, cdata))\n except Exception:\n log.exception('Failed to download cover from:', cached_url)\n # }}}\n\n\nif __name__ == '__main__':\n from calibre.ebooks.metadata.sources.test import authors_test, comments_test, pubdate_test, test_identify_plugin, title_test\n tests = [\n ( # A title and author search\n {'title': \"The Husband's Secret\", 'authors':['Liane Moriarty']},\n [title_test(\"The Husband's Secret\", exact=True),\n authors_test(['Liane Moriarty'])]\n ),\n\n ( # An isbn present in edelweiss\n {'identifiers':{'isbn': '9780312621360'}, },\n [title_test('Flame: A Sky Chasers Novel', exact=True),\n authors_test(['Amy Kathleen Ryan'])]\n ),\n\n # Multiple authors and two part title and no general description\n ({'identifiers':{'edelweiss':'0321180607'}},\n [title_test('XQuery From the Experts: A Guide to the W3C XML Query Language', exact=True),\n authors_test([\n 'Howard Katz', 'Don Chamberlin', 'Denise Draper', 'Mary Fernandez',\n 'Michael Kay', 'Jonathan Robie', 'Michael Rys', 'Jerome Simeon',\n 'Jim Tivy', 'Philip Wadler']),\n pubdate_test(2003, 8, 22),\n comments_test('Jérôme Siméon'), lambda mi: bool(mi.comments and 'No title summary' not in mi.comments)\n ]),\n ]\n start, stop = 0, len(tests)\n\n tests = tests[start:stop]\n test_identify_plugin(Edelweiss.name, tests)\n",
- "google": "#!/usr/bin/env python\n# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai\n# License: GPLv3 Copyright: 2011, Kovid Goyal \nfrom __future__ import absolute_import, division, print_function, unicode_literals\n\nimport hashlib\nimport os\nimport re\nimport sys\nimport tempfile\nimport time\n\nimport regex\n\ntry:\n from queue import Empty, Queue\nexcept ImportError:\n from Queue import Empty, Queue\n\nfrom calibre import as_unicode, prepare_string_for_xml, replace_entities\nfrom calibre.ebooks.chardet import xml_to_unicode\nfrom calibre.ebooks.metadata import authors_to_string, check_isbn\nfrom calibre.ebooks.metadata.book.base import Metadata\nfrom calibre.ebooks.metadata.sources.base import Source\nfrom calibre.utils.cleantext import clean_ascii_chars\nfrom calibre.utils.localization import canonicalize_lang\n\nNAMESPACES = {\n 'openSearch': 'http://a9.com/-/spec/opensearchrss/1.0/',\n 'atom': 'http://www.w3.org/2005/Atom',\n 'dc': 'http://purl.org/dc/terms',\n 'gd': 'http://schemas.google.com/g/2005'\n}\n\n\ndef pretty_google_books_comments(raw):\n raw = replace_entities(raw)\n # Paragraphs in the comments are removed but whatever software googl uses\n # to do this does not insert a space so we often find the pattern\n # word.Capital in the comments which can be used to find paragraph markers.\n parts = []\n for x in re.split(r'([a-z)\"â€])(\\.)([A-Z(\"“])', raw):\n if x == '.':\n parts.append('.
\\n\\n')\n else:\n parts.append(prepare_string_for_xml(x))\n raw = '
' + ''.join(parts) + '
'\n return raw\n\n\ndef get_details(browser, url, timeout): # {{{\n try:\n raw = browser.open_novisit(url, timeout=timeout).read()\n except Exception as e:\n gc = getattr(e, 'getcode', lambda: -1)\n if gc() != 403:\n raise\n # Google is throttling us, wait a little\n time.sleep(2)\n raw = browser.open_novisit(url, timeout=timeout).read()\n\n return raw\n# }}}\n\n\nxpath_cache = {}\n\n\ndef XPath(x):\n ans = xpath_cache.get(x)\n if ans is None:\n from lxml import etree\n ans = xpath_cache[x] = etree.XPath(x, namespaces=NAMESPACES)\n return ans\n\n\ndef to_metadata(browser, log, entry_, timeout, running_a_test=False): # {{{\n from calibre.utils.xml_parse import safe_xml_fromstring\n # total_results = XPath('//openSearch:totalResults')\n # start_index = XPath('//openSearch:startIndex')\n # items_per_page = XPath('//openSearch:itemsPerPage')\n entry = XPath('//atom:entry')\n entry_id = XPath('descendant::atom:id')\n url = XPath('descendant::atom:link[@rel=\"self\"]/@href')\n creator = XPath('descendant::dc:creator')\n identifier = XPath('descendant::dc:identifier')\n title = XPath('descendant::dc:title')\n date = XPath('descendant::dc:date')\n publisher = XPath('descendant::dc:publisher')\n subject = XPath('descendant::dc:subject')\n description = XPath('descendant::dc:description')\n language = XPath('descendant::dc:language')\n\n # print(etree.tostring(entry_, pretty_print=True))\n\n def get_text(extra, x):\n try:\n ans = x(extra)\n if ans:\n ans = ans[0].text\n if ans and ans.strip():\n return ans.strip()\n except Exception:\n log.exception('Programming error:')\n return None\n\n def get_extra_details():\n raw = get_details(browser, details_url, timeout)\n if running_a_test:\n with open(os.path.join(tempfile.gettempdir(), 'Google-' + details_url.split('/')[-1] + '.xml'), 'wb') as f:\n f.write(raw)\n print('Book details saved to:', f.name, file=sys.stderr)\n feed = safe_xml_fromstring(xml_to_unicode(clean_ascii_chars(raw), strip_encoding_pats=True)[0])\n return entry(feed)[0]\n\n if isinstance(entry_, str):\n google_id = entry_\n details_url = 'https://www.google.com/books/feeds/volumes/' + google_id\n extra = get_extra_details()\n title_ = ': '.join([x.text for x in title(extra)]).strip()\n authors = [x.text.strip() for x in creator(extra) if x.text]\n else:\n id_url = entry_id(entry_)[0].text\n google_id = id_url.split('/')[-1]\n details_url = url(entry_)[0]\n title_ = ': '.join([x.text for x in title(entry_)]).strip()\n authors = [x.text.strip() for x in creator(entry_) if x.text]\n if not id_url or not title:\n # Silently discard this entry\n return None\n extra = None\n\n if not authors:\n authors = [_('Unknown')]\n if not title:\n return None\n if extra is None:\n extra = get_extra_details()\n mi = Metadata(title_, authors)\n mi.identifiers = {'google': google_id}\n mi.comments = get_text(extra, description)\n lang = canonicalize_lang(get_text(extra, language))\n if lang:\n mi.language = lang\n mi.publisher = get_text(extra, publisher)\n\n # ISBN\n isbns = []\n for x in identifier(extra):\n t = type('')(x.text).strip()\n if t[:5].upper() in ('ISBN:', 'LCCN:', 'OCLC:'):\n if t[:5].upper() == 'ISBN:':\n t = check_isbn(t[5:])\n if t:\n isbns.append(t)\n if isbns:\n mi.isbn = sorted(isbns, key=len)[-1]\n mi.all_isbns = isbns\n\n # Tags\n try:\n btags = [x.text for x in subject(extra) if x.text]\n tags = []\n for t in btags:\n atags = [y.strip() for y in t.split('/')]\n for tag in atags:\n if tag not in tags:\n tags.append(tag)\n except Exception:\n log.exception('Failed to parse tags:')\n tags = []\n if tags:\n mi.tags = [x.replace(',', ';') for x in tags]\n\n # pubdate\n pubdate = get_text(extra, date)\n if pubdate:\n from calibre.utils.date import parse_date, utcnow\n try:\n default = utcnow().replace(day=15)\n mi.pubdate = parse_date(pubdate, assume_utc=True, default=default)\n except Exception:\n log.error('Failed to parse pubdate %r' % pubdate)\n\n # Cover\n mi.has_google_cover = None\n for x in extra.xpath(\n '//*[@href and @rel=\"http://schemas.google.com/books/2008/thumbnail\"]'\n ):\n mi.has_google_cover = x.get('href')\n break\n\n return mi\n\n# }}}\n\n\nclass GoogleBooks(Source):\n\n name = 'Google'\n version = (1, 1, 3)\n minimum_calibre_version = (2, 80, 0)\n description = _('Downloads metadata and covers from Google Books')\n\n capabilities = frozenset({'identify'})\n touched_fields = frozenset({\n 'title', 'authors', 'tags', 'pubdate', 'comments', 'publisher',\n 'identifier:isbn', 'identifier:google', 'languages'\n })\n supports_gzip_transfer_encoding = True\n cached_cover_url_is_reliable = False\n\n GOOGLE_COVER = 'https://books.google.com/books?id=%s&printsec=frontcover&img=1'\n\n DUMMY_IMAGE_MD5 = frozenset(\n ('0de4383ebad0adad5eeb8975cd796657', 'a64fa89d7ebc97075c1d363fc5fea71f')\n )\n\n def get_book_url(self, identifiers): # {{{\n goog = identifiers.get('google', None)\n if goog is not None:\n return ('google', goog, 'https://books.google.com/books?id=%s' % goog)\n # }}}\n\n def id_from_url(self, url): # {{{\n from polyglot.urllib import parse_qs, urlparse\n purl = urlparse(url)\n if purl.netloc == 'books.google.com':\n q = parse_qs(purl.query)\n gid = q.get('id')\n if gid:\n return 'google', gid[0]\n # }}}\n\n def create_query(self, title=None, authors=None, identifiers={}, capitalize_isbn=False): # {{{\n try:\n from urllib.parse import urlencode\n except ImportError:\n from urllib import urlencode\n BASE_URL = 'https://books.google.com/books/feeds/volumes?'\n isbn = check_isbn(identifiers.get('isbn', None))\n q = ''\n if isbn is not None:\n q += ('ISBN:' if capitalize_isbn else 'isbn:') + isbn\n elif title or authors:\n\n def build_term(prefix, parts):\n return ' '.join('in' + prefix + ':' + x for x in parts)\n\n title_tokens = list(self.get_title_tokens(title))\n if title_tokens:\n q += build_term('title', title_tokens)\n author_tokens = list(self.get_author_tokens(authors, only_first_author=True))\n if author_tokens:\n q += ('+' if q else '') + build_term('author', author_tokens)\n\n if not q:\n return None\n if not isinstance(q, bytes):\n q = q.encode('utf-8')\n return BASE_URL + urlencode({\n 'q': q,\n 'max-results': 20,\n 'start-index': 1,\n 'min-viewability': 'none',\n })\n\n # }}}\n\n def download_cover( # {{{\n self,\n log,\n result_queue,\n abort,\n title=None,\n authors=None,\n identifiers={},\n timeout=30,\n get_best_cover=False\n ):\n cached_url = self.get_cached_cover_url(identifiers)\n if cached_url is None:\n log.info('No cached cover found, running identify')\n rq = Queue()\n self.identify(\n log,\n rq,\n abort,\n title=title,\n authors=authors,\n identifiers=identifiers\n )\n if abort.is_set():\n return\n results = []\n while True:\n try:\n results.append(rq.get_nowait())\n except Empty:\n break\n results.sort(\n key=self.identify_results_keygen(\n title=title, authors=authors, identifiers=identifiers\n )\n )\n for mi in results:\n cached_url = self.get_cached_cover_url(mi.identifiers)\n if cached_url is not None:\n break\n if cached_url is None:\n log.info('No cover found')\n return\n\n br = self.browser\n for candidate in (0, 1):\n if abort.is_set():\n return\n url = cached_url + '&zoom={}'.format(candidate)\n log('Downloading cover from:', cached_url)\n try:\n cdata = br.open_novisit(url, timeout=timeout).read()\n if cdata:\n if hashlib.md5(cdata).hexdigest() in self.DUMMY_IMAGE_MD5:\n log.warning('Google returned a dummy image, ignoring')\n else:\n result_queue.put((self, cdata))\n break\n except Exception:\n log.exception('Failed to download cover from:', cached_url)\n\n # }}}\n\n def get_cached_cover_url(self, identifiers): # {{{\n url = None\n goog = identifiers.get('google', None)\n if goog is None:\n isbn = identifiers.get('isbn', None)\n if isbn is not None:\n goog = self.cached_isbn_to_identifier(isbn)\n if goog is not None:\n url = self.cached_identifier_to_cover_url(goog)\n\n return url\n\n # }}}\n\n def postprocess_downloaded_google_metadata(self, ans, relevance=0): # {{{\n if not isinstance(ans, Metadata):\n return ans\n ans.source_relevance = relevance\n goog = ans.identifiers['google']\n for isbn in getattr(ans, 'all_isbns', []):\n self.cache_isbn_to_identifier(isbn, goog)\n if getattr(ans, 'has_google_cover', False):\n self.cache_identifier_to_cover_url(goog, self.GOOGLE_COVER % goog)\n if ans.comments:\n ans.comments = pretty_google_books_comments(ans.comments)\n self.clean_downloaded_metadata(ans)\n return ans\n # }}}\n\n def get_all_details( # {{{\n self,\n br,\n log,\n entries,\n abort,\n result_queue,\n timeout\n ):\n from lxml import etree\n for relevance, i in enumerate(entries):\n try:\n ans = self.postprocess_downloaded_google_metadata(to_metadata(br, log, i, timeout, self.running_a_test), relevance)\n if isinstance(ans, Metadata):\n result_queue.put(ans)\n except Exception:\n log.exception(\n 'Failed to get metadata for identify entry:', etree.tostring(i)\n )\n if abort.is_set():\n break\n\n # }}}\n\n def identify_via_web_search( # {{{\n self,\n log,\n result_queue,\n abort,\n title=None,\n authors=None,\n identifiers={},\n timeout=30\n ):\n from calibre.utils.filenames import ascii_text\n from polyglot.urllib import urlparse\n isbn = check_isbn(identifiers.get('isbn', None))\n q = []\n strip_punc_pat = regex.compile(r'[\\p{C}|\\p{M}|\\p{P}|\\p{S}|\\p{Z}]+', regex.UNICODE)\n google_ids = []\n check_tokens = set()\n has_google_id = 'google' in identifiers\n\n def to_check_tokens(*tokens):\n for t in tokens:\n if len(t) < 3:\n continue\n t = t.lower()\n if t in ('and', 'not', 'the'):\n continue\n yield ascii_text(strip_punc_pat.sub('', t))\n\n if has_google_id:\n google_ids.append(identifiers['google'])\n elif isbn is not None:\n q.append(isbn)\n elif title or authors:\n title_tokens = list(self.get_title_tokens(title))\n if title_tokens:\n q += title_tokens\n check_tokens |= set(to_check_tokens(*title_tokens))\n author_tokens = list(self.get_author_tokens(authors, only_first_author=True))\n if author_tokens:\n q += author_tokens\n check_tokens |= set(to_check_tokens(*author_tokens))\n if not q and not google_ids:\n return None\n from calibre.ebooks.metadata.sources.update import search_engines_module\n se = search_engines_module()\n br = se.google_specialize_browser(se.browser())\n if not has_google_id:\n url = se.google_format_query(q, site='books.google.com')\n log('Making query:', url)\n r = []\n root = se.query(br, url, 'google', timeout=timeout, save_raw=r.append)\n pat = re.compile(r'id=([^&]+)')\n for q in se.google_parse_results(root, r[0], log=log, ignore_uncached=False):\n m = pat.search(q.url)\n if m is None or not q.url:\n continue\n try:\n purl = urlparse(q.url)\n except Exception:\n continue\n if not purl.hostname.startswith('books.google'):\n continue\n google_ids.append(m.group(1))\n\n if not google_ids and isbn and (title or authors):\n return self.identify_via_web_search(log, result_queue, abort, title, authors, {}, timeout)\n found = False\n seen = set()\n for relevance, gid in enumerate(google_ids):\n if gid in seen:\n continue\n seen.add(gid)\n try:\n ans = to_metadata(br, log, gid, timeout, self.running_a_test)\n if isinstance(ans, Metadata):\n if isbn:\n if isbn not in ans.all_isbns:\n log('Excluding', ans.title, 'by', authors_to_string(ans.authors), 'as it does not match the ISBN:', isbn,\n 'not in', ' '.join(ans.all_isbns))\n continue\n elif check_tokens:\n candidate = set(to_check_tokens(*self.get_title_tokens(ans.title)))\n candidate |= set(to_check_tokens(*self.get_author_tokens(ans.authors)))\n if candidate.intersection(check_tokens) != check_tokens:\n log('Excluding', ans.title, 'by', authors_to_string(ans.authors), 'as it does not match the query')\n continue\n ans = self.postprocess_downloaded_google_metadata(ans, relevance)\n result_queue.put(ans)\n found = True\n except Exception:\n log.exception('Failed to get metadata for google books id:', gid)\n if abort.is_set():\n break\n if not found and isbn and (title or authors):\n return self.identify_via_web_search(log, result_queue, abort, title, authors, {}, timeout)\n # }}}\n\n def identify( # {{{\n self,\n log,\n result_queue,\n abort,\n title=None,\n authors=None,\n identifiers={},\n timeout=30\n ):\n from calibre.utils.xml_parse import safe_xml_fromstring\n entry = XPath('//atom:entry')\n identifiers = identifiers.copy()\n br = self.browser\n if 'google' in identifiers:\n try:\n ans = to_metadata(br, log, identifiers['google'], timeout, self.running_a_test)\n if isinstance(ans, Metadata):\n self.postprocess_downloaded_google_metadata(ans)\n result_queue.put(ans)\n return\n except Exception:\n log.exception('Failed to get metadata for Google identifier:', identifiers['google'])\n del identifiers['google']\n\n query = self.create_query(\n title=title, authors=authors, identifiers=identifiers\n )\n if not query:\n log.error('Insufficient metadata to construct query')\n return\n\n def make_query(query):\n log('Making query:', query)\n try:\n raw = br.open_novisit(query, timeout=timeout).read()\n except Exception as e:\n log.exception('Failed to make identify query: %r' % query)\n return False, as_unicode(e)\n\n try:\n feed = safe_xml_fromstring(xml_to_unicode(clean_ascii_chars(raw), strip_encoding_pats=True)[0])\n return True, entry(feed)\n except Exception as e:\n log.exception('Failed to parse identify results')\n return False, as_unicode(e)\n ok, entries = make_query(query)\n if not ok:\n return entries\n if not entries and not abort.is_set():\n log('No results found, doing a web search instead')\n return self.identify_via_web_search(log, result_queue, abort, title, authors, identifiers, timeout)\n\n # There is no point running these queries in threads as google\n # throttles requests returning 403 Forbidden errors\n self.get_all_details(br, log, entries, abort, result_queue, timeout)\n\n # }}}\n\n\nif __name__ == '__main__': # tests {{{\n # To run these test use:\n # calibre-debug src/calibre/ebooks/metadata/sources/google.py\n from calibre.ebooks.metadata.sources.test import authors_test, test_identify_plugin, title_test\n tests = [\n ({\n 'identifiers': {'google': 's7NIrgEACAAJ'},\n }, [title_test('Ride Every Stride', exact=False)]),\n\n ({\n 'identifiers': {'isbn': '0743273567'},\n 'title': 'Great Gatsby',\n 'authors': ['Fitzgerald']\n }, [\n title_test('The great gatsby', exact=True),\n authors_test(['F. Scott Fitzgerald'])\n ]),\n\n ({\n 'title': 'Flatland',\n 'authors': ['Abbott']\n }, [title_test('Flatland', exact=False)]),\n\n ({\n 'title': 'The Blood Red Indian Summer: A Berger and Mitry Mystery',\n 'authors': ['David Handler'],\n }, [title_test('The Blood Red Indian Summer: A Berger and Mitry Mystery')\n ]),\n\n ({\n # requires using web search to find the book, but web search is broken currently\n 'title': 'Dragon Done It',\n 'authors': ['Eric Flint'],\n }, [\n title_test('The dragon done it', exact=True),\n authors_test(['Eric Flint', 'Mike Resnick'])\n ]),\n\n ]\n test_identify_plugin(GoogleBooks.name, tests)\n\n# }}}\n",
- "google_images": "#!/usr/bin/env python\n# vim:fileencoding=UTF-8\nfrom __future__ import absolute_import, division, print_function, unicode_literals\n\n__license__ = 'GPL v3'\n__copyright__ = '2013, Kovid Goyal '\n__docformat__ = 'restructuredtext en'\n\nfrom collections import OrderedDict\n\nfrom calibre import random_user_agent\nfrom calibre.ebooks.metadata.sources.base import Option, Source\n\n\ndef parse_html(raw):\n try:\n from html5_parser import parse\n except ImportError:\n # Old versions of calibre\n import html5lib\n return html5lib.parse(raw, treebuilder='lxml', namespaceHTMLElements=False)\n else:\n return parse(raw)\n\n\ndef imgurl_from_id(raw, tbnid):\n from json import JSONDecoder\n q = '\"{}\",['.format(tbnid)\n start_pos = raw.index(q)\n if start_pos < 100:\n return\n jd = JSONDecoder()\n data = jd.raw_decode('[' + raw[start_pos:])[0]\n # from pprint import pprint\n # pprint(data)\n url_num = 0\n for x in data:\n if isinstance(x, list) and len(x) == 3:\n q = x[0]\n if hasattr(q, 'lower') and q.lower().startswith('http'):\n url_num += 1\n if url_num > 1:\n return q\n\n\ndef parse_google_markup(raw):\n root = parse_html(raw)\n # newer markup pages use data-docid not data-tbnid\n results = root.xpath('//div/@data-tbnid') or root.xpath('//div/@data-docid')\n ans = OrderedDict()\n for tbnid in results:\n try:\n imgurl = imgurl_from_id(raw, tbnid)\n except Exception:\n continue\n if imgurl:\n ans[imgurl] = True\n return list(ans)\n\n\nclass GoogleImages(Source):\n\n name = 'Google Images'\n version = (1, 0, 6)\n minimum_calibre_version = (2, 80, 0)\n description = _('Downloads covers from a Google Image search. Useful to find larger/alternate covers.')\n capabilities = frozenset(['cover'])\n can_get_multiple_covers = True\n supports_gzip_transfer_encoding = True\n options = (Option('max_covers', 'number', 5, _('Maximum number of covers to get'),\n _('The maximum number of covers to process from the Google search result')),\n Option('size', 'choices', 'svga', _('Cover size'),\n _('Search for covers larger than the specified size'),\n choices=OrderedDict((\n ('any', _('Any size'),),\n ('l', _('Large'),),\n ('qsvga', _('Larger than %s')%'400x300',),\n ('vga', _('Larger than %s')%'640x480',),\n ('svga', _('Larger than %s')%'600x800',),\n ('xga', _('Larger than %s')%'1024x768',),\n ('2mp', _('Larger than %s')%'2 MP',),\n ('4mp', _('Larger than %s')%'4 MP',),\n ))),\n )\n\n def download_cover(self, log, result_queue, abort,\n title=None, authors=None, identifiers={}, timeout=30, get_best_cover=False):\n if not title:\n return\n timeout = max(60, timeout) # Needs at least a minute\n title = ' '.join(self.get_title_tokens(title))\n author = ' '.join(self.get_author_tokens(authors))\n urls = self.get_image_urls(title, author, log, abort, timeout)\n self.download_multiple_covers(title, authors, urls, get_best_cover, timeout, result_queue, abort, log)\n\n @property\n def user_agent(self):\n return random_user_agent(allow_ie=False)\n\n def get_image_urls(self, title, author, log, abort, timeout):\n from calibre.utils.cleantext import clean_ascii_chars\n try:\n from urllib.parse import urlencode\n except ImportError:\n from urllib import urlencode\n br = self.browser\n q = urlencode({'as_q': ('%s %s'%(title, author)).encode('utf-8')})\n if isinstance(q, bytes):\n q = q.decode('utf-8')\n sz = self.prefs['size']\n if sz == 'any':\n sz = ''\n elif sz == 'l':\n sz = 'isz:l,'\n else:\n sz = 'isz:lt,islt:%s,' % sz\n # See https://www.google.com/advanced_image_search to understand this\n # URL scheme\n url = 'https://www.google.com/search?as_st=y&tbm=isch&{}&as_epq=&as_oq=&as_eq=&cr=&as_sitesearch=&safe=images&tbs={}iar:t,ift:jpg'.format(q, sz)\n log('Search URL: ' + url)\n # See https://github.com/benbusby/whoogle-search/pull/1054 for cookies\n br.set_simple_cookie('CONSENT', 'PENDING+987', '.google.com', path='/')\n template = b'\\x08\\x01\\x128\\x08\\x14\\x12+boq_identityfrontenduiserver_20231107.05_p0\\x1a\\x05en-US \\x03\\x1a\\x06\\x08\\x80\\xf1\\xca\\xaa\\x06'\n from base64 import standard_b64encode\n from datetime import date\n template.replace(b'20231107', date.today().strftime('%Y%m%d').encode('ascii'))\n br.set_simple_cookie('SOCS', standard_b64encode(template).decode('ascii').rstrip('='), '.google.com', path='/')\n # br.set_debug_http(True)\n raw = clean_ascii_chars(br.open(url).read().decode('utf-8'))\n # with open('/t/raw.html', 'w') as f:\n # f.write(raw)\n return parse_google_markup(raw)\n\n\ndef test_raw():\n import sys\n raw = open(sys.argv[-1]).read()\n for x in parse_google_markup(raw):\n print(x)\n\n\ndef test(title='Star Trek: Section 31: Control', authors=('David Mack',)):\n try:\n from queue import Queue\n except ImportError:\n from Queue import Queue\n from threading import Event\n\n from calibre.utils.logging import default_log\n p = GoogleImages(None)\n p.log = default_log\n rq = Queue()\n p.download_cover(default_log, rq, Event(), title=title, authors=authors)\n print('Downloaded', rq.qsize(), 'covers')\n\n\nif __name__ == '__main__':\n test()\n",
- "hashes": {
- "amazon": "3b8bf719310f23384f819213f656693baac2821f",
- "big_book_search": "7a8b67c0f19ecbfe8a9d28b961aab1119f31c3e3",
- "edelweiss": "640a39d0926dfdaa72f54160a1db5323b4d7c164",
- "google": "e71e2242c2dababa10f73d9c2aee9b2864d4f80a",
- "google_images": "4244dd8267cb6215c7dfd2da166c6e02b1db31ea",
- "openlibrary": "239077a692701cbf0281e7a2e64306cd00217410",
- "search_engines": "65c9081d21ecf31abf31ceb5f0d87870fcd943db"
- },
- "openlibrary": "#!/usr/bin/env python\n# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai\nfrom __future__ import absolute_import, division, print_function, unicode_literals\n\n__license__ = 'GPL v3'\n__copyright__ = '2011, Kovid Goyal '\n__docformat__ = 'restructuredtext en'\n\nfrom calibre.ebooks.metadata.sources.base import Source\n\n\nclass OpenLibrary(Source):\n\n name = 'Open Library'\n version = (1, 0, 2)\n minimum_calibre_version = (2, 80, 0)\n description = _('Downloads covers from The Open Library')\n\n capabilities = frozenset(['cover'])\n\n OPENLIBRARY = 'https://covers.openlibrary.org/b/isbn/%s-L.jpg?default=false'\n\n def download_cover(self, log, result_queue, abort,\n title=None, authors=None, identifiers={}, timeout=30, get_best_cover=False):\n if 'isbn' not in identifiers:\n return\n isbn = identifiers['isbn']\n br = self.browser\n try:\n ans = br.open_novisit(self.OPENLIBRARY%isbn, timeout=timeout).read()\n result_queue.put((self, ans))\n except Exception as e:\n if callable(getattr(e, 'getcode', None)) and e.getcode() == 404:\n log.error('No cover for ISBN: %r found'%isbn)\n else:\n log.exception('Failed to download cover for ISBN:', isbn)\n",
- "search_engines": "#!/usr/bin/env python\n# vim:fileencoding=utf-8\n# License: GPLv3 Copyright: 2017, Kovid Goyal \n\nfrom __future__ import absolute_import, division, print_function, unicode_literals\n\nimport json\nimport os\nimport re\nimport sys\nimport time\nfrom collections import namedtuple\nfrom contextlib import contextmanager\nfrom functools import partial\nfrom threading import Lock\n\ntry:\n from urllib.parse import parse_qs, quote, quote_plus, urlencode, urlparse\nexcept ImportError:\n from urllib import quote, quote_plus, urlencode\n\n from urlparse import parse_qs, urlparse\n\nfrom lxml import etree\n\nfrom calibre import browser as _browser\nfrom calibre import prints as safe_print\nfrom calibre import random_user_agent\nfrom calibre.constants import cache_dir\nfrom calibre.ebooks.chardet import xml_to_unicode\nfrom calibre.utils.lock import ExclusiveFile\nfrom calibre.utils.random_ua import accept_header_for_ua\n\ncurrent_version = (1, 2, 15)\nminimum_calibre_version = (2, 80, 0)\nwebcache = {}\nwebcache_lock = Lock()\nprints = partial(safe_print, file=sys.stderr)\n\n\nResult = namedtuple('Result', 'url title cached_url')\n\n\n@contextmanager\ndef rate_limit(name='test', time_between_visits=2, max_wait_seconds=5 * 60, sleep_time=0.2):\n lock_file = os.path.join(cache_dir(), 'search-engine.' + name + '.lock')\n with ExclusiveFile(lock_file, timeout=max_wait_seconds, sleep_time=sleep_time) as f:\n try:\n lv = float(f.read().decode('utf-8').strip())\n except Exception:\n lv = 0\n # we cannot use monotonic() as this is cross process and historical\n # data as well\n delta = time.time() - lv\n if delta < time_between_visits:\n time.sleep(time_between_visits - delta)\n try:\n yield\n finally:\n f.seek(0)\n f.truncate()\n f.write(repr(time.time()).encode('utf-8'))\n\n\ndef tostring(elem):\n return etree.tostring(elem, encoding='unicode', method='text', with_tail=False)\n\n\ndef browser():\n ua = random_user_agent(allow_ie=False)\n # ua = 'Mozilla/5.0 (Linux; Android 8.0.0; VTR-L29; rv:63.0) Gecko/20100101 Firefox/63.0'\n br = _browser(user_agent=ua)\n br.set_handle_gzip(True)\n br.addheaders += [\n ('Accept', accept_header_for_ua(ua)),\n ('Upgrade-insecure-requests', '1'),\n ]\n return br\n\n\ndef encode_query(**query):\n q = {k.encode('utf-8'): v.encode('utf-8') for k, v in query.items()}\n return urlencode(q).decode('utf-8')\n\n\ndef parse_html(raw):\n try:\n from html5_parser import parse\n except ImportError:\n # Old versions of calibre\n import html5lib\n return html5lib.parse(raw, treebuilder='lxml', namespaceHTMLElements=False)\n else:\n return parse(raw)\n\n\ndef query(br, url, key, dump_raw=None, limit=1, parser=parse_html, timeout=60, save_raw=None, simple_scraper=None):\n with rate_limit(key):\n if simple_scraper is None:\n raw = br.open_novisit(url, timeout=timeout).read()\n raw = xml_to_unicode(raw, strip_encoding_pats=True)[0]\n else:\n raw = simple_scraper(url, timeout=timeout)\n if dump_raw is not None:\n with open(dump_raw, 'w') as f:\n f.write(raw)\n if save_raw is not None:\n save_raw(raw)\n return parser(raw)\n\n\ndef quote_term(x):\n ans = quote_plus(x.encode('utf-8'))\n if isinstance(ans, bytes):\n ans = ans.decode('utf-8')\n return ans\n\n\n# DDG + Wayback machine DDG does a captcha after 2-3 requests {{{\n\ndef ddg_url_processor(url):\n return url\n\n\ndef ddg_term(t):\n t = t.replace('\"', '')\n if t.lower() in {'map', 'news'}:\n t = '\"' + t + '\"'\n if t in {'OR', 'AND', 'NOT'}:\n t = t.lower()\n return t\n\n\ndef ddg_href(url):\n if url.startswith('/'):\n q = url.partition('?')[2]\n url = parse_qs(q.encode('utf-8'))[b'uddg'][0].decode('utf-8')\n return url\n\n\ndef wayback_machine_cached_url(url, br=None, log=prints, timeout=60):\n q = quote_term(url)\n br = br or browser()\n try:\n data = query(br, 'https://archive.org/wayback/available?url=' +\n q, 'wayback', parser=json.loads, limit=0.25, timeout=timeout)\n except Exception as e:\n log('Wayback machine query failed for url: ' + url + ' with error: ' + str(e))\n return None\n try:\n closest = data['archived_snapshots']['closest']\n if closest['available']:\n ans = closest['url'].replace('http:', 'https:', 1)\n # get unmodified HTML\n ans = ans.replace(closest['timestamp'], closest['timestamp'] + 'id_', 1)\n return ans\n except Exception:\n pass\n from pprint import pformat\n log('Response from wayback machine:', pformat(data))\n\n\ndef wayback_url_processor(url):\n if url.startswith('/'):\n # Use original URL instead of absolutizing to wayback URL as wayback is\n # slow\n m = re.search(r'https?:', url)\n if m is None:\n url = 'https://web.archive.org' + url\n else:\n url = url[m.start():]\n return url\n\n\nddg_scraper_storage = []\n\n\ndef ddg_search(terms, site=None, br=None, log=prints, safe_search=False, dump_raw=None, timeout=60):\n # https://duck.co/help/results/syntax\n terms = [quote_term(ddg_term(t)) for t in terms]\n if site is not None:\n terms.append(quote_term(('site:' + site)))\n q = '+'.join(terms)\n url = 'https://duckduckgo.com/html/?q={q}&kp={kp}'.format(\n q=q, kp=1 if safe_search else -1)\n log('Making ddg query: ' + url)\n from calibre.scraper.simple import read_url\n br = br or browser()\n root = query(br, url, 'ddg', dump_raw, timeout=timeout, simple_scraper=partial(read_url, ddg_scraper_storage))\n ans = []\n for a in root.xpath('//*[@class=\"results\"]//*[@class=\"result__title\"]/a[@href and @class=\"result__a\"]'):\n try:\n ans.append(Result(ddg_href(a.get('href')), tostring(a), None))\n except KeyError:\n log('Failed to find ddg href in:', a.get('href'))\n return ans, url\n\n\ndef ddg_develop():\n br = browser()\n for result in ddg_search('heroes abercrombie'.split(), 'www.amazon.com', dump_raw='/t/raw.html', br=br)[0]:\n if '/dp/' in result.url:\n print(result.title)\n print(' ', result.url)\n print(' ', get_cached_url(result.url, br))\n print()\n# }}}\n\n\n# Bing uses a CAPTCHA {{{\n\ndef bing_term(t):\n t = t.replace('\"', '')\n if t in {'OR', 'AND', 'NOT'}:\n t = t.lower()\n return t\n\n\ndef bing_url_processor(url):\n return url\n\n\ndef resolve_bing_wrapper_page(url, br, log):\n raw = br.open_novisit(url).read().decode('utf-8', 'replace')\n m = re.search(r'var u = \"(.+)\"', raw)\n if m is None:\n log('Failed to resolve bing wrapper page for url: ' + url)\n return url\n log('Resolved bing wrapped URL: ' + url + ' to ' + m.group(1))\n return m.group(1)\n\n\nbing_scraper_storage = []\n\n\ndef bing_search(\n terms, site=None, br=None, log=prints, safe_search=False, dump_raw=None, timeout=60,\n show_user_agent=False, result_url_is_ok=lambda x: True\n):\n # http://vlaurie.com/computers2/Articles/bing_advanced_search.htm\n terms = [quote_term(bing_term(t)) for t in terms]\n if site is not None:\n terms.append(quote_term(('site:' + site)))\n q = '+'.join(terms)\n url = 'https://www.bing.com/search?q={q}'.format(q=q)\n log('Making bing query: ' + url)\n from calibre.scraper.simple import read_url\n root = query(br, url, 'bing', dump_raw, timeout=timeout, simple_scraper=partial(read_url, bing_scraper_storage))\n ans = []\n result_items = root.xpath('//*[@id=\"b_results\"]/li[@class=\"b_algo\"]')\n if not result_items:\n log('Bing returned no results')\n return ans, url\n for li in result_items:\n a = li.xpath('descendant::h2/a[@href]') or li.xpath('descendant::div[@class=\"b_algoheader\"]/a[@href]')\n a = a[0]\n title = tostring(a)\n ans_url = a.get('href')\n if ans_url.startswith('https://www.bing.com/'):\n ans_url = resolve_bing_wrapper_page(ans_url, br, log)\n if result_url_is_ok(ans_url):\n ans.append(Result(ans_url, title, None))\n if not ans:\n title = ' '.join(root.xpath('//title/text()'))\n log('Failed to find any results on results page, with title:', title)\n return ans, url\n\n\ndef bing_develop(terms='heroes abercrombie'):\n if isinstance(terms, str):\n terms = terms.split()\n for result in bing_search(terms, 'www.amazon.com', dump_raw='/t/raw.html', show_user_agent=True)[0]:\n if '/dp/' in result.url:\n print(result.title)\n print(' ', result.url)\n print(' ', result.cached_url)\n print()\n# }}}\n\n\n# Google only serves JS enabled search pages as of Sep 11, 2025 {{{\n\ndef google_term(t):\n t = t.replace('\"', '')\n if t in {'OR', 'AND', 'NOT'}:\n t = t.lower()\n return t\n\n\ndef google_url_processor(url):\n return url\n\n\ndef google_cache_url_for_url(url):\n if not isinstance(url, bytes):\n url = url.encode('utf-8')\n cu = quote(url, safe='')\n if isinstance(cu, bytes):\n cu = cu.decode('utf-8')\n return 'https://webcache.googleusercontent.com/search?q=cache:' + cu\n\n\ndef google_get_cached_url(url, br=None, log=prints, timeout=60):\n # Google's webcache was discontinued in september 2024\n cached_url = google_cache_url_for_url(url)\n br = google_specialize_browser(br or browser())\n try:\n raw = query(br, cached_url, 'google-cache', parser=lambda x: x.encode('utf-8'), timeout=timeout)\n except Exception as err:\n log('Failed to get cached URL from google for URL: {} with error: {}'.format(url, err))\n else:\n with webcache_lock:\n webcache[cached_url] = raw\n return cached_url\n\n\ndef canonicalize_url_for_cache_map(url):\n try:\n purl = urlparse(url)\n except Exception:\n return url\n if '.amazon.' in purl.netloc:\n url = url.split('&', 1)[0]\n return url\n\n\ndef google_parse_results(root, raw, log=prints, ignore_uncached=True):\n ans = []\n seen = set()\n for a in root.xpath('//a[@href]'):\n href = a.get('href')\n if not href.startswith('/url?q=http'):\n continue\n try:\n url = parse_qs(urlparse(href).query)['q'][0]\n purl = urlparse(url)\n except Exception:\n continue\n if purl.hostname.endswith('google.com'):\n continue\n try:\n title = tostring(next(a.iterchildren('span')))\n except StopIteration:\n continue\n curl = canonicalize_url_for_cache_map(url)\n if curl in seen:\n continue\n seen.add(curl)\n ans.append(Result(curl, title, None))\n if not ans:\n title = ' '.join(root.xpath('//title/text()'))\n log('Failed to find any results on results page, with title:', title)\n return ans\n\n\ndef google_consent_cookies():\n # See https://github.com/benbusby/whoogle-search/pull/1054 for cookies\n from base64 import standard_b64encode\n from datetime import date\n base = {'domain': '.google.com', 'path': '/'}\n b = base.copy()\n b['name'], b['value'] = 'CONSENT', 'PENDING+987'\n yield b\n template = b'\\x08\\x01\\x128\\x08\\x14\\x12+boq_identityfrontenduiserver_20231107.05_p0\\x1a\\x05en-US \\x03\\x1a\\x06\\x08\\x80\\xf1\\xca\\xaa\\x06'\n template.replace(b'20231107', date.today().strftime('%Y%m%d').encode('ascii'))\n b = base.copy()\n b['name'], b['value'] = 'SOCS', standard_b64encode(template).decode('ascii').rstrip('=')\n yield b\n\n\ndef google_specialize_browser(br):\n with webcache_lock:\n if not hasattr(br, 'google_consent_cookie_added'):\n for c in google_consent_cookies():\n br.set_simple_cookie(c['name'], c['value'], c['domain'], path=c['path'])\n br.google_consent_cookie_added = True\n # google serves JS based pages without the right user agent\n br.set_user_agent('L''y''nx''/2.''8.''6rel''.5 lib''ww''w-F''M/2.''1''4') # noqa\n return br\n\n\ndef is_probably_book_asin(t):\n return t and len(t) == 10 and t.startswith('B') and t.upper() == t\n\n\ndef is_asin_or_isbn(t):\n from calibre.ebooks.metadata import check_isbn\n return bool(check_isbn(t) or is_probably_book_asin(t))\n\n\ndef google_format_query(terms, site=None, tbm=None):\n prevent_spelling_correction = False\n for t in terms:\n if is_asin_or_isbn(t):\n prevent_spelling_correction = True\n break\n terms = [quote_term(google_term(t)) for t in terms]\n if site is not None:\n terms.append(quote_term(('site:' + site)))\n q = '+'.join(terms)\n url = 'https://www.google.com/search?q={q}'.format(q=q)\n # tbm causes 403 forbidden errors\n # if tbm:\n # url += '&tbm=' + tbm\n if prevent_spelling_correction:\n url += '&nfpr=1'\n return url\n\n\ndef google_search(terms, site=None, br=None, log=prints, safe_search=False, dump_raw=None, timeout=60):\n url = google_format_query(terms, site)\n log('Making google query: ' + url)\n br = google_specialize_browser(br or browser())\n r = []\n root = query(br, url, 'google', dump_raw, timeout=timeout, save_raw=r.append)\n return google_parse_results(root, r[0], log=log), url\n\n\ndef google_develop(search_terms='1423146786', raw_from=''):\n if raw_from:\n with open(raw_from, 'rb') as f:\n raw = f.read()\n results = google_parse_results(parse_html(raw), raw)\n else:\n br = browser()\n results = google_search(search_terms.split(), 'www.amazon.com', dump_raw='/t/raw.html', br=br)[0]\n for result in results:\n if '/dp/' in result.url:\n print(result.title)\n print(' ', result.url)\n print(' ', result.cached_url)\n print()\n# }}}\n\n\n# Yandex uses a CAPTCHA {{{\ndef yandex_term(t):\n t = t.replace('\"', '')\n if t in {'OR', 'AND', 'NOT'}:\n t = t.lower()\n return t\n\n\ndef yandex_format_query(terms, site=None):\n terms = [quote_term(yandex_term(t)) for t in terms]\n if site is not None:\n terms.append(quote_term(('site:' + site)))\n q = '+'.join(terms)\n url = 'https://yandex.com/search?text={q}'.format(q=q)\n return url\n\n\ndef yandex_parse_results(root, raw, log=prints, ignore_uncached=True):\n pass\n\n\nyandex_scraper_storage = []\n\n\ndef yandex_search(terms, site=None, br=None, dump_raw=None, log=prints, timeout=60):\n # Sadly yandex uses CAPTCHAs aggresively\n url = yandex_format_query(terms, site)\n br = browser()\n r = []\n from calibre.scraper.simple import read_url\n root = query(br, url, 'yandex', dump_raw, timeout=timeout, save_raw=r.append, simple_scraper=partial(read_url, yandex_scraper_storage))\n return yandex_parse_results(root, r[0], log=log), url\n\n\ndef yandex_develop(search_terms='1423146786', raw_from=''):\n if raw_from:\n with open(raw_from, 'rb') as f:\n raw = f.read()\n results = yandex_parse_results(parse_html(raw), raw)\n else:\n results = yandex_search(search_terms.split(), 'www.amazon.com', dump_raw='/t/raw.html')[0]\n for result in results:\n if '/dp/' in result.url:\n print(result.title)\n print(' ', result.url)\n print(' ', result.cached_url)\n print()\n\n# }}}\n\n\ndef get_cached_url(url, br=None, log=prints, timeout=60):\n from threading import Lock, Thread\n\n from polyglot.queue import Queue\n print_lock = Lock()\n q = Queue()\n\n def safe_print(*a):\n with print_lock:\n log(*a)\n\n def doit(func):\n try:\n q.put(func(url, br, safe_print, timeout))\n except Exception as e:\n safe_print(e)\n q.put(None)\n\n threads = []\n threads.append(Thread(target=doit, args=(wayback_machine_cached_url,), daemon=True).start())\n while threads:\n x = q.get()\n if x is not None:\n return x\n threads.pop()\n\n\ndef get_data_for_cached_url(url):\n with webcache_lock:\n return webcache.get(url)\n\n\ndef resolve_url(url):\n prefix, rest = url.partition(':')[::2]\n if prefix == 'bing':\n return bing_url_processor(rest)\n if prefix == 'wayback':\n return wayback_url_processor(rest)\n return url\n\n\n# if __name__ == '__main__':\n# import sys\n# func = sys.argv[-1]\n# globals()[func]()\n"
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/metadata_sources/global.json b/dotfiles/system/.config/calibre/metadata_sources/global.json
deleted file mode 100644
index be7665d..0000000
--- a/dotfiles/system/.config/calibre/metadata_sources/global.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "id_link_rules": {
- "title": [
- [
- "Title",
- "https://z-library.sk/s/?q=title%3A{title}&languages[]=english&extensions[]=EPUB&extensions[]=PDF&selected_content_types[]=book&order=bestmatch"
- ]
- ]
- },
- "ignore_fields": [
- "rating",
- "series"
- ],
- "tag_map_rules": [
- {
- "action": "remove",
- "match_type": "not_one_of",
- "query": "Art, Biography & Autobiography, Business, Chess, Computers, Cooking, Critical Theory, Design, Economics, French, History, Law, Linguistics, Literature, Magic, Mathematics, Music, Mythology, Non-Fiction, Philosophy, Poetry, Political Science, Politics, Psychology, Religion, Science, Social Critique, Sociology, Travel",
- "replace": ""
- }
- ],
- "txt_comments": true
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/mtp_devices.json b/dotfiles/system/.config/calibre/mtp_devices.json
deleted file mode 100644
index 274f3de..0000000
--- a/dotfiles/system/.config/calibre/mtp_devices.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "blacklist": [],
- "history": {
- "G0W19E040464033L": [
- "Fire",
- "2021-01-28T21:54:04.815072+00:00"
- ]
- }
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/plugins/Apple Books covers.zip b/dotfiles/system/.config/calibre/plugins/Apple Books covers.zip
deleted file mode 100644
index 722e2c7..0000000
Binary files a/dotfiles/system/.config/calibre/plugins/Apple Books covers.zip and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/plugins/Barnes & Noble.zip b/dotfiles/system/.config/calibre/plugins/Barnes & Noble.zip
deleted file mode 100644
index 9c3932d..0000000
Binary files a/dotfiles/system/.config/calibre/plugins/Barnes & Noble.zip and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/plugins/Clean Comments.zip b/dotfiles/system/.config/calibre/plugins/Clean Comments.zip
deleted file mode 100644
index 224fcd7..0000000
Binary files a/dotfiles/system/.config/calibre/plugins/Clean Comments.zip and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/plugins/Extract ISBN.zip b/dotfiles/system/.config/calibre/plugins/Extract ISBN.zip
deleted file mode 100644
index 7214c0e..0000000
Binary files a/dotfiles/system/.config/calibre/plugins/Extract ISBN.zip and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/plugins/Favourites Menu.json b/dotfiles/system/.config/calibre/plugins/Favourites Menu.json
deleted file mode 100644
index 8f239ba..0000000
--- a/dotfiles/system/.config/calibre/plugins/Favourites Menu.json
+++ /dev/null
@@ -1,140 +0,0 @@
-{
- "menus": [
- {
- "display": "Convert books",
- "path": [
- "Convert Books"
- ]
- },
- null,
- {
- "display": "Start Content server",
- "path": [
- "Connect Share",
- "Start Content server"
- ]
- },
- {
- "display": "Extract ISBN",
- "path": [
- "Extract ISBN"
- ]
- },
- null,
- {
- "display": "Add to default list",
- "path": [
- "Reading List",
- "Add to default list"
- ]
- },
- {
- "display": "Remove from default list",
- "path": [
- "Reading List",
- "Remove from default list"
- ]
- },
- {
- "display": "View default list",
- "path": [
- "Reading List",
- "View default list"
- ]
- },
- null,
- {
- "display": "Find book duplicates...",
- "path": [
- "Find Duplicates",
- "Find book duplicates..."
- ]
- },
- {
- "display": "Clean comments",
- "path": [
- "Clean Comments",
- "Clean comments"
- ]
- },
- {
- "display": "Check library",
- "path": [
- "Choose Library",
- "Library maintenance",
- "Check library"
- ]
- },
- {
- "display": "Plugin updater",
- "path": [
- "Plugin Updater"
- ]
- },
- null,
- {
- "display": "Email to...",
- "path": [
- "Connect Share",
- "Email to..."
- ]
- },
- {
- "display": "email to Christine's Kindle",
- "path": [
- "Connect Share",
- "Email to...",
- "Christine's Kindle"
- ]
- },
- {
- "display": "email to Craig's Paperwhite",
- "path": [
- "Connect Share",
- "Email to...",
- "Paperwhite"
- ]
- },
- {
- "display": "email to Craig's Pixel6",
- "path": [
- "Connect Share",
- "Email to...",
- "Pixel6"
- ]
- },
- null,
- {
- "display": "Start wireless device connection",
- "path": [
- "Connect Share",
- "Start wireless device connection"
- ]
- },
- {
- "display": "Stop wireless device connection [192.168.86.26 or 172.17.0.1, port 9090]",
- "path": [
- "Connect Share",
- "Stop wireless device connection [192.168.86.26 or 172.17.0.1, port 9090]"
- ]
- },
- {
- "display": "Manage collections",
- "path": [
- "Edit Collections"
- ]
- },
- {
- "display": "Get books",
- "path": [
- "Store"
- ]
- },
- {
- "display": "Kindle Collections",
- "path": [
- "Kindle Collections"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/plugins/Favourites Menu.zip b/dotfiles/system/.config/calibre/plugins/Favourites Menu.zip
deleted file mode 100644
index 767f621..0000000
Binary files a/dotfiles/system/.config/calibre/plugins/Favourites Menu.zip and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/plugins/Find Duplicates.json b/dotfiles/system/.config/calibre/plugins/Find Duplicates.json
deleted file mode 100644
index 9daa2b7..0000000
--- a/dotfiles/system/.config/calibre/plugins/Find Duplicates.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "authorMatch": "identical",
- "authorSoundexLength": 8,
- "autoDeleteBinaryDups": false,
- "identifierType": "isbn",
- "includeLanguages": false,
- "searchType": "binary",
- "showAllGroups": true,
- "showTagAuthor": true,
- "sortGroupsByTitle": true,
- "titleMatch": "identical",
- "titleSoundexLength": 6
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/plugins/Find Duplicates.zip b/dotfiles/system/.config/calibre/plugins/Find Duplicates.zip
deleted file mode 100644
index a6ce77a..0000000
Binary files a/dotfiles/system/.config/calibre/plugins/Find Duplicates.zip and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/plugins/KePub Metadata Reader.zip b/dotfiles/system/.config/calibre/plugins/KePub Metadata Reader.zip
deleted file mode 100644
index 13394c9..0000000
Binary files a/dotfiles/system/.config/calibre/plugins/KePub Metadata Reader.zip and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/plugins/KePub Metadata Writer.zip b/dotfiles/system/.config/calibre/plugins/KePub Metadata Writer.zip
deleted file mode 100644
index 7ac4e55..0000000
Binary files a/dotfiles/system/.config/calibre/plugins/KePub Metadata Writer.zip and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/plugins/Kindle hi-res covers.zip b/dotfiles/system/.config/calibre/plugins/Kindle hi-res covers.zip
deleted file mode 100644
index 40106fe..0000000
Binary files a/dotfiles/system/.config/calibre/plugins/Kindle hi-res covers.zip and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/plugins/Kobo Metadata.zip b/dotfiles/system/.config/calibre/plugins/Kobo Metadata.zip
deleted file mode 100644
index aaf91cb..0000000
Binary files a/dotfiles/system/.config/calibre/plugins/Kobo Metadata.zip and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/plugins/Kobo Utilities.json b/dotfiles/system/.config/calibre/plugins/Kobo Utilities.json
deleted file mode 100644
index 4d9121a..0000000
--- a/dotfiles/system/.config/calibre/plugins/Kobo Utilities.json
+++ /dev/null
@@ -1,122 +0,0 @@
-{
- "BookmarkOptions": {
- "backgroundJob": false,
- "clearIfUnread": false,
- "doNotStoreIfReopened": false,
- "rating": true,
- "readingStatus": true,
- "setDateToNow": true,
- "storeBookmarks": true,
- "storeIfMoreRecent": false
- },
- "Devices": {
- "N4181C1037466": {
- "active": true,
- "backupOptionsStore": {
- "backupCopiesToKeepSpin": 10,
- "backupDestDirectory": "/home/cjennings/documents/kobo",
- "backupEachCOnnection": true,
- "backupZipDatabase": true,
- "doDailyBackp": false
- },
- "location_code": "main",
- "name": "Kobo Libra 2",
- "serial_no": "N4181C1037466",
- "type": "Kobo Libra 2",
- "updateOptionsStore": {
- "doEarlyFirmwareUpdate": false,
- "doFirmwareUpdateCheck": true,
- "firmwareUpdateCheckLastTime": 0
- },
- "uuid": "8de75c8a-f9b6-405c-86a3-515afd1e71fa"
- }
- },
- "MetadataOptions": {
- "author": false,
- "authourSort": false,
- "description": false,
- "descriptionTemplate": "",
- "descriptionUseTemplate": false,
- "isbn": false,
- "language": false,
- "published_date": false,
- "publisher": false,
- "rating": false,
- "readingStatus": -1,
- "reading_direction": "Default",
- "resetPosition": false,
- "series": false,
- "setRreadingStatus": false,
- "set_reading_direction": false,
- "set_sync_date": false,
- "subtitle": false,
- "subtitleTemplate": "",
- "sync_date_library_date": "timestamp",
- "title": false,
- "titleSort": false,
- "update_KoboEpubs": false,
- "usePlugboard": false
- },
- "ReadingOptions": {
- "doNotUpdateIfSet": false,
- "lockMargins": false,
- "readingAlignment": "Off",
- "readingFontFamily": "Georgia",
- "readingFontSize": 22,
- "readingLeftMargin": 3,
- "readingLineHeight": 1.3,
- "readingRightMargin": 3,
- "updateConfigFile": false
- },
- "_version": 2,
- "backupAnnotations": {
- "dest_directory": ""
- },
- "backupOptionsStore": {
- "backupCopiesToKeepSpin": 5,
- "backupDestDirectory": "",
- "backupEachCOnnection": false,
- "backupZipDatabase": true,
- "doDailyBackp": false
- },
- "cleanImagesDir": {
- "delete_extra_covers": false
- },
- "commonOptionsStore": {
- "buttonActionDevice": "",
- "buttonActionLibrary": "",
- "individualDeviceOptions": true
- },
- "coverUpload": {
- "blackandwhite": false,
- "dithered_covers": false,
- "keep_cover_aspect": false,
- "kepub_covers": false,
- "letterbox": false,
- "letterbox_color": "#000000",
- "png_covers": false
- },
- "fixDuplicatesOptionsStore": {
- "keepNewestShelf": true,
- "purgeShelves": false
- },
- "getShelvesOptionStore": {
- "allBooks": true,
- "replaceShelves": true
- },
- "removeAnnotations": {
- "removeAnnotAction": 0
- },
- "removeCovers": {
- "kepub_covers": false,
- "remove_fullsize_covers": false
- },
- "setRelatedBooksOptionsStore": {
- "relatedBooksType": 0
- },
- "updateOptionsStore": {
- "doEarlyFirmwareUpdate": false,
- "doFirmwareUpdateCheck": false,
- "firmwareUpdateCheckLastTime": 1656213583
- }
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/plugins/Kobo Utilities.zip b/dotfiles/system/.config/calibre/plugins/Kobo Utilities.zip
deleted file mode 100644
index 4d62c4b..0000000
Binary files a/dotfiles/system/.config/calibre/plugins/Kobo Utilities.zip and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/plugins/KoboTouchExtended.zip b/dotfiles/system/.config/calibre/plugins/KoboTouchExtended.zip
deleted file mode 100644
index 3640da2..0000000
Binary files a/dotfiles/system/.config/calibre/plugins/KoboTouchExtended.zip and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/plugins/Open With.json b/dotfiles/system/.config/calibre/plugins/Open With.json
deleted file mode 100644
index 81eaeb8..0000000
--- a/dotfiles/system/.config/calibre/plugins/Open With.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "OpenWithMenus": {
- "Menus": [
- {
- "active": false,
- "appArgs": "",
- "appPath": "firefox",
- "format": "EPUB",
- "image": "owp_firefox.png",
- "menuText": "EPUBReader (EPUB)",
- "subMenu": ""
- },
- {
- "active": false,
- "appArgs": "-c",
- "appPath": "/usr/bin/emacsclient",
- "format": "PDF",
- "image": "reader.png",
- "menuText": "Emacsclient",
- "subMenu": ""
- },
- {
- "active": true,
- "appArgs": "",
- "appPath": "/usr/bin/zathura",
- "format": "EPUB",
- "image": "edit_book.png",
- "menuText": "Zathura (EPUB)",
- "subMenu": ""
- },
- {
- "active": true,
- "appArgs": "",
- "appPath": "/usr/bin/zathura",
- "format": "PDF",
- "image": "PDF.png",
- "menuText": "Zathura (PDF)",
- "subMenu": ""
- },
- {
- "active": false,
- "appArgs": "-c",
- "appPath": "/usr/bin/emacsclient",
- "format": "EPUB",
- "image": "PDF.png",
- "menuText": "Emacsclient",
- "subMenu": ""
- },
- {
- "active": false,
- "appArgs": "",
- "appPath": "gimp",
- "format": "COVER",
- "image": "owp_gimp.png",
- "menuText": "Gimp (Cover)",
- "subMenu": ""
- }
- ],
- "UrlColWidth": 202
- }
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/plugins/Open With.zip b/dotfiles/system/.config/calibre/plugins/Open With.zip
deleted file mode 100644
index 548c8ed..0000000
Binary files a/dotfiles/system/.config/calibre/plugins/Open With.zip and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/plugins/Reading List.json b/dotfiles/system/.config/calibre/plugins/Reading List.json
deleted file mode 100644
index a348407..0000000
--- a/dotfiles/system/.config/calibre/plugins/Reading List.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "Devices": {},
- "Options": {
- "quickAccess": false,
- "removeDialog": true
- },
- "SchemaVersion": 1.65
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/plugins/Reading List.zip b/dotfiles/system/.config/calibre/plugins/Reading List.zip
deleted file mode 100644
index 3a46edf..0000000
Binary files a/dotfiles/system/.config/calibre/plugins/Reading List.zip and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/plugins/Search The Internet.json b/dotfiles/system/.config/calibre/plugins/Search The Internet.json
deleted file mode 100644
index 21f6786..0000000
--- a/dotfiles/system/.config/calibre/plugins/Search The Internet.json
+++ /dev/null
@@ -1,1097 +0,0 @@
-{
- "SearchMenus": {
- "Menus": [
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_audible.png",
- "menuText": "Audible for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.audible.com/search?keywords={author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_audible.png",
- "menuText": "Audible for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.audible.com/search?keywords={author}+{title}"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": true,
- "encoding": "latin-1",
- "image": "stip_amazon.png",
- "menuText": "Amazon.com for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Dstripbooks&field-keywords={author}+{title}"
- },
- {
- "active": false,
- "encoding": "latin-1",
- "image": "stip_amazon.png",
- "menuText": "Amazon.co.uk for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.amazon.co.uk/s/ref=nb_sb_noss?url=search-alias%3Dstripbooks&field-keywords={author}+{title}"
- },
- {
- "active": false,
- "encoding": "latin-1",
- "image": "stip_amazon.png",
- "menuText": "Amazon.com.au for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.amazon.com.au/s/ref=nb_sb_noss?url=search-alias%3Dstripbooks&field-keywords={author}+{title}"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_bn.png",
- "menuText": "Barnes and Noble for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.barnesandnoble.com/s/{author}/_/M-8q8"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_bn.png",
- "menuText": "Barnes and Noble for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.barnesandnoble.com/s/{author}+{title}/_/M-8q8"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_bn.png",
- "menuText": "Barnes and Noble for ISBN",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.barnesandnoble.com/s/{isbn}/_/M-8q8"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_bn.png",
- "menuText": "Barnes and Noble for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.barnesandnoble.com/s/{title}/_/M-8q8"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_ebay.png",
- "menuText": "EBay US",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.ebay.com/sch/i.html?_nkw={author}+{title}&_sacat=267"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_ebay.png",
- "menuText": "EBay UK",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.ebay.co.uk/sch/i.html?_nkw={author}+{title}&_sacat=267"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_ebooks.png",
- "menuText": "EBooks for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.ebooks.com/SearchApp/SearchResults.net?term={author}&RestrictBy=author"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_ebooks.png",
- "menuText": "EBooks for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.ebooks.com/SearchApp/SearchResults.net?term={author}+{title}"
- },
- {
- "active": true,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": true,
- "encoding": "utf-8",
- "image": "stip_ff.png",
- "menuText": "FantasticFiction for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.fantasticfiction.com/search/?searchfor=author&keywords={author}"
- },
- {
- "active": true,
- "encoding": "utf-8",
- "image": "stip_ff.png",
- "menuText": "FantasticFiction for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.fantasticfiction.com/search/?searchfor=book&keywords={title}"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_fictiondb.png",
- "menuText": "FictionDB for Author",
- "method": "POST",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.fictiondb.com/search/searchresults.htm?styp=5&srchtxt={author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_fictiondb.png",
- "menuText": "FictionDB for Book",
- "method": "POST",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.fictiondb.com/search/searchresults.htm?styp=5&author={author}&title={title}&srchtxt=multi&sgcode=0&tpcode=0&imprint=0&pubgroup=0&genretype=--&rating=-&myrating=-&status=-"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_fictiondb.png",
- "menuText": "FictionDB for ISBN",
- "method": "POST",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.fictiondb.com/search/searchresults.htm?styp=5&srchtxt={isbn}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_fictiondb.png",
- "menuText": "FictionDB for Title",
- "method": "POST",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.fictiondb.com/search/searchresults.htm?styp=5&srchtxt={title}"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_goodreads.png",
- "menuText": "Goodreads for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.goodreads.com/search/search?q={author}&search_type=books"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_goodreads.png",
- "menuText": "Goodreads for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.goodreads.com/search/search?q={author}+{title}&search_type=books"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_goodreads.png",
- "menuText": "Goodreads for ISBN",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.goodreads.com/search/search?q={isbn}&search_type=books"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_goodreads.png",
- "menuText": "Goodreads for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.goodreads.com/search/search?q={title}&search_type=books"
- },
- {
- "active": true,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": true,
- "encoding": "utf-8",
- "image": "stip_google.png",
- "menuText": "Google images for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.google.com/images?q=%22{author}%22+%22{title}%22"
- },
- {
- "active": true,
- "encoding": "utf-8",
- "image": "stip_google.png",
- "menuText": "Google images 400x300",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.google.com/images?as_q={author}+%22{title}%22&tbs=isch:1,isz:lt,islt:qsvga,imgo:1&safe=off"
- },
- {
- "active": true,
- "encoding": "utf-8",
- "image": "stip_google.png",
- "menuText": "Google.com for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.google.com/#sclient=psy&q=%22{author}%22+%22{title}%22"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "latin-1",
- "image": "stip_isfdb.png",
- "menuText": "isfdb for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.isfdb.org/cgi-bin/se.cgi?type=Name&arg={author}"
- },
- {
- "active": false,
- "encoding": "latin-1",
- "image": "stip_isfdb.png",
- "menuText": "isfdb for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.isfdb.org/cgi-bin/edit/tp_search.cgi?TERM_1={title}&USE_1=title&OPERATOR_1=AND&TERM_2={author}&USE_2=author&OPERATOR_2=AND"
- },
- {
- "active": false,
- "encoding": "latin-1",
- "image": "stip_isfdb.png",
- "menuText": "isfdb for ISBN",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.isfdb.org/cgi-bin/se.cgi?type=ISBN&arg={isbn}"
- },
- {
- "active": false,
- "encoding": "latin-1",
- "image": "stip_isfdb.png",
- "menuText": "isfdb for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.isfdb.org/cgi-bin/se.cgi?type=Fiction+Titles&arg={title}"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_kobo.png",
- "menuText": "Kobo for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.kobobooks.com/search/search.html?q={author}&f=author"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_kobo.png",
- "menuText": "Kobo for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.kobobooks.com/search/search.html?q={author}+{title}&f=author"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_kobo.png",
- "menuText": "Kobo for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.kobobooks.com/search/search.html?q={title}"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_loc.png",
- "menuText": "Library of Congress for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://catalog.loc.gov/cgi-bin/Pwebrecon.cgi?DB=local&Search_Arg={author}&Search_Code=NAME%40&CNT=100&hist=1&type=quick"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_loc.png",
- "menuText": "Library of Congress for ISBN",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://catalog.loc.gov/cgi-bin/Pwebrecon.cgi?DB=local&Search_Arg={isbn}&Search_Code=STNO^*&CNT=100&hist=1&type=quick"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_loc.png",
- "menuText": "Library of Congress for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://catalog.loc.gov/cgi-bin/Pwebrecon.cgi?DB=local&Search_Arg={title}&Search_Code=TKEY^*&CNT=100&hist=1&type=quick"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_lthing.png",
- "menuText": "LibraryThing for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.librarything.com/search.php?search={author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_lthing.png",
- "menuText": "LibraryThing for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.librarything.com/search.php?search={title}+{author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_lthing.png",
- "menuText": "LibraryThing for ISBN",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.librarything.com/search.php?search={isbn}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_lthing.png",
- "menuText": "LibraryThing for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.librarything.com/search.php?search={title}"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_litmap.png",
- "menuText": "Literature-Map like Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.literature-map.com/{author}"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_loveread.png",
- "menuText": "Lovereading for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.lovereading.co.uk/search?s={author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_loveread.png",
- "menuText": "Lovereading for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.lovereading.co.uk/search?s={author}+{title}&view=book-results"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_loveread.png",
- "menuText": "Lovereading for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.lovereading.co.uk/search?s={title}&view=book-results"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_manybooks.png",
- "menuText": "ManyBooks for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://manybooks.net/search-book?search={author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_manybooks.png",
- "menuText": "ManyBooks for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://manybooks.net/search-book?search={title}"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "",
- "image": "stip_nyt.png",
- "menuText": "NYTimes for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://nytimes.com/search?query={author}"
- },
- {
- "active": false,
- "encoding": "",
- "image": "stip_nyt.png",
- "menuText": "NYTimes for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://nytimes.com/search?query={author}+{title}"
- },
- {
- "active": false,
- "encoding": "",
- "image": "stip_nyt.png",
- "menuText": "NYTimes for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://nytimes.com/search?query={title}"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wstones.png",
- "menuText": "Waterstones for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.waterstones.com/books/search/term/{author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wstones.png",
- "menuText": "Waterstones for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.waterstones.com/books/search/term/{title}+{author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wstones.png",
- "menuText": "Waterstones for ISBN",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.waterstones.com/books/search/term/{isbn}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wstones.png",
- "menuText": "Waterstones for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.waterstones.com/books/search/term/{title}"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wsirn.png",
- "menuText": "WhatShouldIReadNext for ISBN",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.whatshouldireadnext.com/isbn/{isbn}"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wikipedia.png",
- "menuText": "Wikipedia for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://en.wikipedia.org/w/index.php?title=Special%3ASearch&search={author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wikipedia.png",
- "menuText": "Wikipedia for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://en.wikipedia.org/w/index.php?title=Special%3ASearch&search={author}+{title}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wikipedia.png",
- "menuText": "Wikipedia for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://en.wikipedia.org/w/index.php?title=Special%3ASearch&search={title}"
- },
- {
- "active": false,
- "encoding": "",
- "image": "",
- "menuText": "",
- "method": "",
- "openGroup": false,
- "subMenu": "",
- "url": ""
- },
- {
- "active": false,
- "encoding": "latin-1",
- "image": "stip_amazon.png",
- "menuText": "Amazon.ca for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.amazon.ca/s/ref=nb_sb_noss?url=search-alias%3Dstripbooks&field-keywords={author}+{title}"
- },
- {
- "active": false,
- "encoding": "latin-1",
- "image": "stip_amazon.png",
- "menuText": "Amazon.cn for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.amazon.cn/s/ref=nb_sb_noss?url=search-alias%3Dstripbooks&field-keywords={author}+{title}"
- },
- {
- "active": false,
- "encoding": "latin-1",
- "image": "stip_amazon.png",
- "menuText": "Amazon.co.jp for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.amazon.co.jp/s/ref=nb_sb_noss?url=search-alias%3Dstripbooks&field-keywords={author}+{title}"
- },
- {
- "active": false,
- "encoding": "latin-1",
- "image": "stip_amazon.png",
- "menuText": "Amazon.de for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.amazon.de/s/ref=nb_sb_noss?url=search-alias%3Dstripbooks&field-keywords={author}+{title}"
- },
- {
- "active": false,
- "encoding": "latin-1",
- "image": "stip_amazon.png",
- "menuText": "Amazon.it for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.amazon.it/s/ref=nb_sb_noss?url=search-alias%3Dstripbooks&field-keywords={author}+{title}"
- },
- {
- "active": false,
- "encoding": "latin-1",
- "image": "stip_amazon.png",
- "menuText": "Amazon.fr for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.amazon.fr/s/ref=nb_sb_noss?url=search-alias%3Dstripbooks&field-keywords={author}+{title}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_chapters.png",
- "menuText": "Chapters.ca for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://indigo.ca/en-ca/search/?q={author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_chapters.png",
- "menuText": "Chapters.ca for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://indigo.ca/en-ca/search/?q={author}+{title}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_chapters.png",
- "menuText": "Chapters.ca for ISBN",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://indigo.ca/en-ca/search/?q={isbn}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_chapters.png",
- "menuText": "Chapters.ca for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://indigo.ca/en-ca/search/?q={title}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_fnac.png",
- "menuText": "Fnac for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://recherche.fnac.com/Search/SearchResult.aspx?SCat=2&Search={author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_fnac.png",
- "menuText": "Fnac for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://recherche.fnac.com/Search/SearchResult.aspx?SCat=2&Search={author}+{title}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_fnac.png",
- "menuText": "Fnac for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://recherche.fnac.com/Search/SearchResult.aspx?SCat=2&Search={title}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_google.png",
- "menuText": "Google.de for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.google.de/#sclient=psy&q=%22{author}%22+%22{title}%22"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_google.png",
- "menuText": "Google.es for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.google.es/#sclient=psy&q=%22{author}%22+%22{title}%22"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_google.png",
- "menuText": "Google.fr for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.google.fr/#sclient=psy&q=%22{author}%22+%22{title}%22"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_google.png",
- "menuText": "Google.it for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.google.it/#sclient=psy&q=%22{author}%22+%22{title}%22"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_libri.png",
- "menuText": "libri.de for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.libri.de/shop/action/advancedSearch?action=search&nodeId=-1&binderType=Alle&languageCode=DE&person={author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_libri.png",
- "menuText": "libri.de for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.libri.de/shop/action/advancedSearch?action=search&nodeId=-1&binderType=Alle&languageCode=DE&title={title}&person={author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_libri.png",
- "menuText": "libri.de for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://www.libri.de/shop/action/advancedSearch?action=search&nodeId=-1&binderType=Alle&languageCode=DE&title={title}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wikipedia.png",
- "menuText": "Wikipedia.de for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://de.wikipedia.org/w/index.php?title=Special%3ASearch&search={author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wikipedia.png",
- "menuText": "Wikipedia.de for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://de.wikipedia.org/w/index.php?title=Special%3ASearch&search={author}+{title}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wikipedia.png",
- "menuText": "Wikipedia.de for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://de.wikipedia.org/w/index.php?title=Special%3ASearch&search={title}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wikipedia.png",
- "menuText": "Wikipedia.es for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://es.wikipedia.org/w/index.php?title=Special%3ASearch&search={author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wikipedia.png",
- "menuText": "Wikipedia.es for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://es.wikipedia.org/w/index.php?title=Special%3ASearch&search={author}+{title}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wikipedia.png",
- "menuText": "Wikipedia.es for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://es.wikipedia.org/w/index.php?title=Special%3ASearch&search={title}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wikipedia.png",
- "menuText": "Wikipedia.fr for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://fr.wikipedia.org/w/index.php?title=Sp%E9cial%3ARecherche&search={author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wikipedia.png",
- "menuText": "Wikipedia.fr for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://fr.wikipedia.org/w/index.php?title=Special%3ASearch&search={author}+{title}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wikipedia.png",
- "menuText": "Wikipedia.fr for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://fr.wikipedia.org/w/index.php?title=Sp%E9cial%3ARecherche&search={title}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wikipedia.png",
- "menuText": "Wikipedia.it for Author",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://it.wikipedia.org/w/index.php?title=Special%3ASearch&search={author}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wikipedia.png",
- "menuText": "Wikipedia.it for Book",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://it.wikipedia.org/w/index.php?title=Special%3ASearch&search={author}+{title}"
- },
- {
- "active": false,
- "encoding": "utf-8",
- "image": "stip_wikipedia.png",
- "menuText": "Wikipedia.it for Title",
- "method": "GET",
- "openGroup": false,
- "subMenu": "",
- "url": "https://it.wikipedia.org/w/index.php?title=Special%3ASearch&search={title}"
- }
- ],
- "UrlColWidth": 1543
- }
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/plugins/Wikidata.zip b/dotfiles/system/.config/calibre/plugins/Wikidata.zip
deleted file mode 100644
index 61f919b..0000000
Binary files a/dotfiles/system/.config/calibre/plugins/Wikidata.zip and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/save_to_disk.py.json b/dotfiles/system/.config/calibre/save_to_disk.py.json
deleted file mode 100644
index bdf4e57..0000000
--- a/dotfiles/system/.config/calibre/save_to_disk.py.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "asciiize": false,
- "formats": "all",
- "replace_whitespace": false,
- "save_cover": true,
- "save_extra_files": false,
- "send_template": "{author_sort}/{title} - {authors}",
- "send_timefmt": "%b, %Y",
- "single_dir": false,
- "template": "{author_sort}/{title}/{title} - {authors}",
- "timefmt": "%b, %Y",
- "to_lowercase": false,
- "update_metadata": false,
- "write_opf": true
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/scheduler.xml b/dotfiles/system/.config/calibre/scheduler.xml
deleted file mode 100644
index d145a64..0000000
--- a/dotfiles/system/.config/calibre/scheduler.xml
+++ /dev/null
@@ -1,166 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 6:6:0
-
-
-
-
-
-
-
- 24:6:0
-
-
-
- 24:6:0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1:0:0
-
-
-
-
-
-
-
- 30.000000
-
-
-
- 5:6:0
-
-
-
-
-
-
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/server-config.txt b/dotfiles/system/.config/calibre/server-config.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/calibre/server-custom-list-template.json b/dotfiles/system/.config/calibre/server-custom-list-template.json
deleted file mode 100644
index f5cad2c..0000000
--- a/dotfiles/system/.config/calibre/server-custom-list-template.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "comments_fields": [
- "comments"
- ],
- "height": "auto",
- "lines": [
- "{title} by {authors}",
- "{series_index} of {series} |||{rating}",
- "{tags}",
- "Date: {timestamp}|||Published: {pubdate}|||Publisher: {publisher}"
- ],
- "thumbnail": true,
- "thumbnail_height": 140
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/server-search-the-net.json b/dotfiles/system/.config/calibre/server-search-the-net.json
deleted file mode 100644
index 89dbf5a..0000000
--- a/dotfiles/system/.config/calibre/server-search-the-net.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- {
- "name": "Z-Library",
- "url": "https://z-library.sk/s/?q=Title%3A{title}%20author%3A{author}&languages[]=english&extensions[]=EPUB&extensions[]=PDF&selected_content_types[]=book&order=bestmatch",
- "type": "book"
- }
-]
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/server-users.sqlite b/dotfiles/system/.config/calibre/server-users.sqlite
deleted file mode 100644
index c191559..0000000
Binary files a/dotfiles/system/.config/calibre/server-users.sqlite and /dev/null differ
diff --git a/dotfiles/system/.config/calibre/shortcuts/main.json b/dotfiles/system/.config/calibre/shortcuts/main.json
deleted file mode 100644
index 3af458c..0000000
--- a/dotfiles/system/.config/calibre/shortcuts/main.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "map": {
- "Interface Action: Edit Collections (Edit Collections) - qaction": [
- "Ctrl+Shift+C"
- ],
- "Interface Action: Extract ISBN (Extract ISBN) - qaction": [
- "Ctrl+I"
- ],
- "Interface Action: Quickview (Quickview) - qaction": [],
- "quit calibre": [
- "Q"
- ]
- },
- "options_map": {}
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/smtp.py.json b/dotfiles/system/.config/calibre/smtp.py.json
deleted file mode 100644
index 9e9ebb8..0000000
--- a/dotfiles/system/.config/calibre/smtp.py.json
+++ /dev/null
@@ -1,77 +0,0 @@
-{
- "accounts": {
- "c@cjennings.net": [
- "EPUB,PDF",
- false,
- false
- ],
- "cciarmello@gmail.com": [
- "PDF",
- false,
- false
- ],
- "cjennings_oasis@kindle.com": [
- "EPUB",
- false,
- false
- ],
- "cjennings_paperwhite@kindle.com": [
- "EPUB",
- false,
- true
- ],
- "cjennings_pixel6@kindle.com": [
- "EPUB",
- false,
- false
- ],
- "laurajsmetanick@gmail.com": [
- "PDF",
- false,
- false
- ],
- "laurajsmetanick@kindle.com": [
- "EPUB, TPZ",
- false,
- false
- ],
- "lugrad2012_VxFH2q@kindle.com": [
- "EPUB, TPZ",
- false,
- false
- ],
- "rubyblu@kindle.com": [
- "EPUB,AZW3,MOBI",
- false,
- false
- ]
- },
- "aliases": {
- "c@cjennings.net": "c@cjennings.net",
- "cjennings_oasis@kindle.com": "Oasis",
- "cjennings_paperwhite@kindle.com": "Paperwhite",
- "cjennings_pixel6@kindle.com": "Pixel6",
- "laurajsmetanick@gmail.com": "Laura's Direct Email",
- "laurajsmetanick@kindle.com": "Laura's Kindle",
- "lugrad2012_VxFH2q@kindle.com": "Laura's iPad Kindle",
- "rubyblu@kindle.com": "Christine's Kindle"
- },
- "encryption": "TLS",
- "from_": "c@cjennings.net",
- "relay_host": "127.0.0.1",
- "relay_password": "306c5275546b4e3766396f556d4d4342584d65786567",
- "relay_port": 1025,
- "relay_username": "c@cjennings.net",
- "subjects": {
- "c@cjennings.net": "Book: {title} - {author}",
- "cciarmello@gmail.com": "{title}",
- "cjennings_oasis@kindle.com": "{title}",
- "cjennings_paperwhite@kindle.com": "{title}",
- "cjennings_pixel6@kindle.com": "{title}",
- "laurajsmetanick@gmail.com": "{title}",
- "laurajsmetanick@kindle.com": "Book: {title} - {author}",
- "lugrad2012_VxFH2q@kindle.com": "Book: {title} - {author}",
- "rubyblu@kindle.com": "Book: {title} - {author}"
- },
- "tags": {}
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/tag-map-rules.json b/dotfiles/system/.config/calibre/tag-map-rules.json
deleted file mode 100644
index 7238834..0000000
--- a/dotfiles/system/.config/calibre/tag-map-rules.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "default": [
- {
- "action": "remove",
- "match_type": "not_one_of",
- "query": "Art, Biography & Autobiography, Business, Chess, Comics, Computer, Cooking, Design, Economics, Fiction, Finance, Fitness, Games, Gardening, History, Latin, Law, Linguistics, Literary Critique, Literature, Magic, Mathematics, Music, Mythology, Non-Fiction, Philosophy, Poetry, Political Science, Politics, Psychology, Religion, Science, Social Critique, Sociology, Travel, Zen",
- "replace": ""
- }
- ]
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/viewer-webengine.json b/dotfiles/system/.config/calibre/viewer-webengine.json
deleted file mode 100644
index dcd1405..0000000
--- a/dotfiles/system/.config/calibre/viewer-webengine.json
+++ /dev/null
@@ -1,327 +0,0 @@
-{
- "geometry-of-main_window_geometry": {
- "frame_geometry": {
- "height": 981,
- "width": 1504,
- "x": 0,
- "y": 22
- },
- "full_screened": false,
- "geometry": {
- "height": 981,
- "width": 1504,
- "x": 0,
- "y": 22
- },
- "maximized": false,
- "normal_geometry": {
- "height": 981,
- "width": 1504,
- "x": 0,
- "y": 22
- },
- "qt": {
- "__class__": "bytearray",
- "__value__": "AdnQywADAAAAAAAAAAAAFgAABd8AAAPqAAAAAAAAABYAAAXfAAAD6gAAAAAAAAAABeAAAAAAAAAAFgAABd8AAAPq"
- },
- "screen": {
- "depth": 24,
- "device_pixel_ratio": 1.5,
- "geometry_in_logical_pixels": {
- "height": 1003,
- "width": 1504,
- "x": 0,
- "y": 0
- },
- "index_in_screens_list": 0,
- "manufacturer": "",
- "model": "",
- "name": "eDP-1",
- "serial": "",
- "size_in_logical_pixels": {
- "height": 1003,
- "width": 1504
- },
- "virtual_geometry": {
- "height": 1003,
- "width": 1504,
- "x": 0,
- "y": 0
- }
- }
- },
- "local_storage": {
- "search-bar-history-search-for-sc": [
- "black",
- "dark",
- "reverse",
- "invert",
- "quit"
- ]
- },
- "lookup_location": "Google dictionary",
- "main_window_geometry": {
- "__class__": "bytearray",
- "__value__": "AdnQywADAAAAAAAAAAAAEwAABd8AAAPqAAAAAAAAABMAAAXfAAAD6gAAAAAAAAAABeAAAAAAAAAAEwAABd8AAAPq"
- },
- "main_window_state": {
- "__class__": "bytearray",
- "__value__": "AAAA/wAAAAH9AAAAAgAAAAAAAAAAAAAAAPwCAAAAAvsAAAAQAHQAbwBjAC0AZABvAGMAawAAAAAA/////wAAAIsA////+wAAABYAcwBlAGEAcgBjAGgALQBkAG8AYwBrAAAAAAD/////AAAAnAD///8AAAABAAABeAAAA9X8AgAAAAT7AAAAFgBsAG8AbwBrAHUAcAAtAGQAbwBjAGsAAAAAAAAAA9UAAACGAP////sAAAAcAGIAbwBvAGsAbQBhAHIAawBzAC0AZABvAGMAawAAAAAAAAAD1QAAAPcA////+wAAABwAaQBuAHMAcABlAGMAdABvAHIALQBkAG8AYwBrAAAAAAD/////AAAAFAD////7AAAAHgBoAGkAZwBoAGwAaQBnAGgAdABzAC0AZABvAGMAawAAAAAA/////wAAANoA////AAAF4AAAA9UAAAAEAAAABAAAAAgAAAAI/AAAAAEAAAAAAAAAAQAAAB4AYQBjAHQAaQBvAG4AcwBfAHQAbwBvAGwAYgBhAHICAAAAAP////8AAAAAAAAAAA=="
- },
- "old_prefs_migrated": true,
- "session_data": {
- "base_font_size": 28,
- "columns_per_screen": {
- "landscape": 1,
- "portrait": 1
- },
- "controls_help_shown_count": 2,
- "current_color_scheme": "black",
- "keyboard_shortcuts": {
- "quit": [
- {
- "altKey": false,
- "ctrlKey": false,
- "key": "q",
- "metaKey": false,
- "shiftKey": false
- }
- ]
- },
- "margin_bottom": 100,
- "margin_left": 100,
- "margin_right": 100,
- "margin_top": 100,
- "read_mode": "flow",
- "standalone_font_settings": {
- "minimum_font_size": 12,
- "mono_family": "Berkeley Mono",
- "sans_family": "Verdana",
- "serif_family": "Merriweather"
- },
- "standalone_misc_settings": {
- "remember_last_read": true,
- "remember_window_geometry": false,
- "save_annotations_in_ebook": true,
- "singleinstance": false
- },
- "standalone_recently_opened": [
- {
- "authors": [
- "Richard Polt"
- ],
- "key": "/home/cjennings/sync/books/Richard Polt/Heidegger_ An Introduction (44728)/Heidegger_ An Introduction - Richard Polt.azw3",
- "pathtoebook": "/home/cjennings/sync/books/Richard Polt/Heidegger_ An Introduction (44728)/Heidegger_ An Introduction - Richard Polt.azw3",
- "timestamp": "2025-09-10T01:03:46.282Z",
- "title": "Heidegger: An Introduction"
- },
- {
- "authors": [
- "David Harvey"
- ],
- "key": "/home/cjennings/sync/books/David Harvey/A Companion to Marx's Capital_ Volume 1 (44747)/A Companion to Marx's Capital_ Volume 1 - David Harvey.mobi",
- "pathtoebook": "/home/cjennings/sync/books/David Harvey/A Companion to Marx's Capital_ Volume 1 (44747)/A Companion to Marx's Capital_ Volume 1 - David Harvey.mobi",
- "timestamp": "2025-09-10T01:01:01.569Z",
- "title": "A Companion to Marx's Capital: Volume 1"
- },
- {
- "authors": [
- "Quentin Skinner"
- ],
- "key": "/home/cjennings/sync/books/Quentin Skinner/Liberty before Liberalism (44222)/Liberty before Liberalism - Quentin Skinner.mobi",
- "pathtoebook": "/home/cjennings/sync/books/Quentin Skinner/Liberty before Liberalism (44222)/Liberty before Liberalism - Quentin Skinner.mobi",
- "timestamp": "2025-08-03T23:22:50.318Z",
- "title": "Liberty before Liberalism"
- },
- {
- "authors": [
- "Saint Thomas Aquinas"
- ],
- "key": "/home/cjennings/sync/books/Thomas Aquinas/Commentary on Aristotle's Metaphysics (43871)/Commentary on Aristotle's Metaphysics - Thomas Aquinas.epub",
- "pathtoebook": "/home/cjennings/sync/books/Thomas Aquinas/Commentary on Aristotle's Metaphysics (43871)/Commentary on Aristotle's Metaphysics - Thomas Aquinas.epub",
- "timestamp": "2025-07-30T21:29:13.047Z",
- "title": "Commentary on Aristotle's Metaphysics"
- },
- {
- "authors": [
- "Saint Thomas Aquinas"
- ],
- "key": "/home/cjennings/sync/books/Saint Thomas Aquinas/Commentary on Aristotle's Metaphysics (43871)/Commentary on Aristotle's Metaphysics - Saint Thomas Aquinas.epub",
- "pathtoebook": "/home/cjennings/sync/books/Saint Thomas Aquinas/Commentary on Aristotle's Metaphysics (43871)/Commentary on Aristotle's Metaphysics - Saint Thomas Aquinas.epub",
- "timestamp": "2025-07-30T08:21:23.202Z",
- "title": "Commentary on Aristotle's Metaphysics"
- },
- {
- "authors": [
- "Desconocido"
- ],
- "key": "/home/cjennings/sync/books/Jill Vance Buroker/Kant's 'Critique of Pure Reason'_ An Introduction (43864)/Kant's 'Critique of Pure Reason'_ An Intro - Jill Vance Buroker.mobi",
- "pathtoebook": "/home/cjennings/sync/books/Jill Vance Buroker/Kant's 'Critique of Pure Reason'_ An Introduction (43864)/Kant's 'Critique of Pure Reason'_ An Intro - Jill Vance Buroker.mobi",
- "timestamp": "2025-07-18T04:13:33.770Z",
- "title": "Kants Critique of Pure Reason An Introduction Cambridge Introductions to Key Philosophical Texts Cambridge"
- },
- {
- "authors": [
- "Leszek Kolakowski"
- ],
- "key": "/home/cjennings/sync/books/Leszek Kolakowski/Is God Happy__ Selected Essays (43040)/Is God Happy__ Selected Essays - Leszek Kolakowski.azw3",
- "pathtoebook": "/home/cjennings/sync/books/Leszek Kolakowski/Is God Happy__ Selected Essays (43040)/Is God Happy__ Selected Essays - Leszek Kolakowski.azw3",
- "timestamp": "2025-07-13T16:19:13.806Z",
- "title": "Is God Happy?: Selected Essays (Penguin Modern Classics)"
- },
- {
- "authors": [
- "Desconocido"
- ],
- "key": "/home/cjennings/sync/books/Desconocido/Routledge Aristotle And The Metaphysics (43652)/Routledge Aristotle And The Metaphysics - Desconocido.azw3",
- "pathtoebook": "/home/cjennings/sync/books/Desconocido/Routledge Aristotle And The Metaphysics (43652)/Routledge Aristotle And The Metaphysics - Desconocido.azw3",
- "timestamp": "2025-07-06T21:55:18.416Z",
- "title": "Routledge Aristotle And The Metaphysics"
- },
- {
- "authors": [
- "Habermas, Jürgen"
- ],
- "key": "/home/cjennings/sync/books/Habermas, Jurgen/The Philosophical Discourse of Modernity (40589)/The Philosophical Discourse of Modernity - Habermas, Jurgen.epub",
- "pathtoebook": "/home/cjennings/sync/books/Habermas, Jurgen/The Philosophical Discourse of Modernity (40589)/The Philosophical Discourse of Modernity - Habermas, Jurgen.epub",
- "timestamp": "2024-12-13T02:38:28.792Z",
- "title": "The Philosophical Discourse of Modernity"
- },
- {
- "authors": [
- "Tamsyn Muir"
- ],
- "key": "/home/cjennings/sync/books/Tamsyn Muir/Gideon the Ninth (40289)/Gideon the Ninth - Tamsyn Muir.epub",
- "pathtoebook": "/home/cjennings/sync/books/Tamsyn Muir/Gideon the Ninth (40289)/Gideon the Ninth - Tamsyn Muir.epub",
- "timestamp": "2024-11-15T19:06:33.047Z",
- "title": "Gideon the Ninth"
- },
- {
- "key": "/home/cjennings/.local/opt/tor-browser/app/Browser/downloads/Love and Rockets #1 (1981) [Pyramid].cbz",
- "pathtoebook": "/home/cjennings/.local/opt/tor-browser/app/Browser/downloads/Love and Rockets #1 (1981) [Pyramid].cbz",
- "timestamp": "2022-08-23T16:40:22.898Z",
- "title": "Love and Rockets #1 (1981) [Pyramid]"
- },
- {
- "key": "/home/cjennings/.local/opt/tor-browser/app/Browser/downloads/Love & Rockets v1 #05 (March 1984) [Cclay].cbr",
- "pathtoebook": "/home/cjennings/.local/opt/tor-browser/app/Browser/downloads/Love & Rockets v1 #05 (March 1984) [Cclay].cbr",
- "timestamp": "2022-08-23T16:40:04.599Z",
- "title": "Love & Rockets v1 #05 (March 1984) [Cclay]"
- },
- {
- "key": "/tmp/mozilla_cjennings0/Love & Rockets v1 #05 (March 1984) [Cclay].cbr",
- "pathtoebook": "/tmp/mozilla_cjennings0/Love & Rockets v1 #05 (March 1984) [Cclay].cbr",
- "timestamp": "2022-08-23T16:31:27.722Z",
- "title": "Love & Rockets v1 #05 (March 1984) [Cclay]"
- },
- {
- "authors": [
- "George Grätzer"
- ],
- "key": "/home/cjennings/Library/George Gratzer/More Math Into LaTeX (27737)/More Math Into LaTeX - George Gratzer.mobi",
- "pathtoebook": "/home/cjennings/Library/George Gratzer/More Math Into LaTeX (27737)/More Math Into LaTeX - George Gratzer.mobi",
- "timestamp": "2022-01-14T10:36:05.803Z",
- "title": "More Math Into LaTeX"
- },
- {
- "authors": [
- "Simenon Georges"
- ],
- "key": "/home/cjennings/Library/Simenon Georges/050 Maigret's Little Joke (27730)/050 Maigret's Little Joke - Simenon Georges.mobi",
- "pathtoebook": "/home/cjennings/Library/Simenon Georges/050 Maigret's Little Joke (27730)/050 Maigret's Little Joke - Simenon Georges.mobi",
- "timestamp": "2022-01-10T12:32:52.530Z",
- "title": "050 Maigret's Little Joke"
- },
- {
- "authors": [
- "Will Durant"
- ],
- "key": "/home/cjennings/Library/Will Durant/Story of Philosophy (3224)/Story of Philosophy - Will Durant.azw3",
- "pathtoebook": "/home/cjennings/Library/Will Durant/Story of Philosophy (3224)/Story of Philosophy - Will Durant.azw3",
- "timestamp": "2022-01-05T19:33:13.710Z",
- "title": "Story of Philosophy"
- },
- {
- "authors": [
- "P G Wodehouse"
- ],
- "key": "/home/cjennings/Library/P. G. Wodehouse/Laughing Gas (24469)/Laughing Gas - P. G. Wodehouse.mobi",
- "pathtoebook": "/home/cjennings/Library/P. G. Wodehouse/Laughing Gas (24469)/Laughing Gas - P. G. Wodehouse.mobi",
- "timestamp": "2022-01-03T00:51:21.126Z",
- "title": "Laughing Gas"
- },
- {
- "authors": [
- "Peter Seibel"
- ],
- "key": "/home/cjennings/Library/Peter Seibel/Coders at Work_ Reflections on the Craft of Programming (316)/Coders at Work_ Reflections on the Craft o - Peter Seibel.htmlz",
- "pathtoebook": "/home/cjennings/Library/Peter Seibel/Coders at Work_ Reflections on the Craft of Programming (316)/Coders at Work_ Reflections on the Craft o - Peter Seibel.htmlz",
- "timestamp": "2022-01-03T00:38:17.903Z",
- "title": "Coders at Work"
- },
- {
- "authors": [
- "by Mike Gancarz"
- ],
- "key": "/home/cjennings/Downloads/torrents/files/Linux and the Unix Philosophy by Mike Gancarz (z-lib.org).epub",
- "pathtoebook": "/home/cjennings/Downloads/torrents/files/Linux and the Unix Philosophy by Mike Gancarz (z-lib.org).epub",
- "timestamp": "2022-01-02T23:44:59.829Z",
- "title": "4362"
- },
- {
- "authors": [
- "Margaret Dauler Wilson"
- ],
- "key": "/home/cjennings/Library/Margaret Dauler Wilson/Descartes (86)/Descartes - Margaret Dauler Wilson.mobi",
- "pathtoebook": "/home/cjennings/Library/Margaret Dauler Wilson/Descartes (86)/Descartes - Margaret Dauler Wilson.mobi",
- "timestamp": "2022-01-02T14:20:51.792Z",
- "title": "Descartes (Arguments of the Philosophers)"
- },
- {
- "authors": [
- "Alexander Tarlinder"
- ],
- "key": "/home/cjennings/Library/Alexander Tarlinder/Developer Testing_ Building Quality Into Software (26)/Developer Testing_ Building Quality Into S - Alexander Tarlinder.azw3",
- "pathtoebook": "/home/cjennings/Library/Alexander Tarlinder/Developer Testing_ Building Quality Into Software (26)/Developer Testing_ Building Quality Into S - Alexander Tarlinder.azw3",
- "timestamp": "2022-01-02T03:53:52.454Z",
- "title": "Developer Testing: Building Quality into Software (Addison-Wesley Signature Series (Cohn))"
- },
- {
- "authors": [
- "Dieter Lohmar, Jagna Brudzinska"
- ],
- "key": "/home/cjennings/Library/Dieter Lohmar/Founding Psychoanalysis Phenomenologically_ Phenomenological Theory of Subjectivity and the Ps (17064)/Founding Psychoanalysis Phenomenologically - Dieter Lohmar.pdf",
- "pathtoebook": "/home/cjennings/Library/Dieter Lohmar/Founding Psychoanalysis Phenomenologically_ Phenomenological Theory of Subjectivity and the Ps (17064)/Founding Psychoanalysis Phenomenologically - Dieter Lohmar.pdf",
- "timestamp": "2022-01-01T22:55:44.420Z",
- "title": "Founding Psychoanalysis Phenomenologically: Phenomenological Theory of Subjectivity and the Psychoanalytic Experience (Phaenomenologica, 199)"
- },
- {
- "authors": [
- "Kevin Passmore"
- ],
- "key": "/home/cjennings/Library/Kevin Passmore/Fascism_ A Very Short Introduction (5508)/Fascism_ A Very Short Introduction - Kevin Passmore.mobi",
- "pathtoebook": "/home/cjennings/Library/Kevin Passmore/Fascism_ A Very Short Introduction (5508)/Fascism_ A Very Short Introduction - Kevin Passmore.mobi",
- "timestamp": "2021-11-01T00:49:09.044Z",
- "title": "Fascism: A Very Short Introduction (Very Short Introductions)"
- },
- {
- "authors": [
- "Lewis Carroll"
- ],
- "key": "/home/cjennings/Library/Lewis Carroll/Alice's Adventures in Wonderland_ &, Through the Looking-Glass (784)/Alice's Adventures in Wonderland_ &, Throu - Lewis Carroll.mobi",
- "pathtoebook": "/home/cjennings/Library/Lewis Carroll/Alice's Adventures in Wonderland_ &, Through the Looking-Glass (784)/Alice's Adventures in Wonderland_ &, Throu - Lewis Carroll.mobi",
- "timestamp": "2021-11-01T00:48:02.197Z",
- "title": "Alice's Adventures in Wonderland and Through the Looking-Glass"
- },
- {
- "authors": [
- "Timothy Snyder"
- ],
- "key": "/home/cjennings/Library/Timothy Snyder/On Tyranny_ Twenty Lessons From the Twentieth Century (635)/On Tyranny_ Twenty Lessons From the Twenti - Timothy Snyder.azw3",
- "pathtoebook": "/home/cjennings/Library/Timothy Snyder/On Tyranny_ Twenty Lessons From the Twentieth Century (635)/On Tyranny_ Twenty Lessons From the Twenti - Timothy Snyder.azw3",
- "timestamp": "2021-10-31T22:46:48.986Z",
- "title": "On Tyranny: Twenty Lessons from the Twentieth Century"
- }
- ]
- }
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/viewer.json b/dotfiles/system/.config/calibre/viewer.json
deleted file mode 100644
index ecc631e..0000000
--- a/dotfiles/system/.config/calibre/viewer.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "print-to-pdf-bottom-margin": 1.0,
- "print-to-pdf-geometry": {
- "__class__": "bytearray",
- "__value__": "AdnQywADAAAAAAEjAAAA7AAAAyQAAAIpAAABJQAAAO4AAAMiAAACJwAAAAAAAAAABVYAAAElAAAA7gAAAyIAAAIn"
- },
- "print-to-pdf-left-margin": 1.0,
- "print-to-pdf-page-numbers": false,
- "print-to-pdf-page-size": "letter",
- "print-to-pdf-right-margin": 1.0,
- "print-to-pdf-show-file": true,
- "print-to-pdf-top-margin": 1.0
-}
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/viewer/annots/19f02e8b622152fd5d7c642d30ecac05080ddf3e9e288a22c4f49866ba57c8b2.json b/dotfiles/system/.config/calibre/viewer/annots/19f02e8b622152fd5d7c642d30ecac05080ddf3e9e288a22c4f49866ba57c8b2.json
deleted file mode 100644
index 6ecdf09..0000000
--- a/dotfiles/system/.config/calibre/viewer/annots/19f02e8b622152fd5d7c642d30ecac05080ddf3e9e288a22c4f49866ba57c8b2.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"pos": "epubcfi(/10/2/4/2[sbo-rt-content]/2/2[idm45611906833112]/16/1:266)", "pos_type": "epubcfi", "timestamp": "2022-07-09T18:01:11.603570+00:00", "type": "last-read"}]
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/viewer/annots/33083ace2855943c7e4d7d188c47051f047f05e84d828fca5e5545396b94f14c.json b/dotfiles/system/.config/calibre/viewer/annots/33083ace2855943c7e4d7d188c47051f047f05e84d828fca5e5545396b94f14c.json
deleted file mode 100644
index 0317109..0000000
--- a/dotfiles/system/.config/calibre/viewer/annots/33083ace2855943c7e4d7d188c47051f047f05e84d828fca5e5545396b94f14c.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"pos": "epubcfi(/2/2/4/2@50:49.93)", "pos_type": "epubcfi", "timestamp": "2025-07-18T04:14:04.406842+00:00", "type": "last-read"}]
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/viewer/annots/5856c3e5aa41dd1b47711fa2b70e5ba9a2f61369f97c7fcc415321753e7c8bea.json b/dotfiles/system/.config/calibre/viewer/annots/5856c3e5aa41dd1b47711fa2b70e5ba9a2f61369f97c7fcc415321753e7c8bea.json
deleted file mode 100644
index a44655c..0000000
--- a/dotfiles/system/.config/calibre/viewer/annots/5856c3e5aa41dd1b47711fa2b70e5ba9a2f61369f97c7fcc415321753e7c8bea.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"pos": "epubcfi(/2/2/4/2[page_1]@50:50)", "pos_type": "epubcfi", "timestamp": "2022-08-23T16:40:12.749665+00:00", "type": "last-read"}]
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/viewer/annots/5d4b018509f9383872d23f1c4a0652d20e908edc16409bc7697635a28f96478e.json b/dotfiles/system/.config/calibre/viewer/annots/5d4b018509f9383872d23f1c4a0652d20e908edc16409bc7697635a28f96478e.json
deleted file mode 100644
index 1dfa74a..0000000
--- a/dotfiles/system/.config/calibre/viewer/annots/5d4b018509f9383872d23f1c4a0652d20e908edc16409bc7697635a28f96478e.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"pos": "epubcfi(/2/2/4/12[page_6]@50:50)", "pos_type": "epubcfi", "timestamp": "2022-08-23T16:41:02.476450+00:00", "type": "last-read"}]
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/viewer/annots/6fd06a181469267e9c09d240ef2d3cca061e54ce37143a9e142524f61028cdd9.json b/dotfiles/system/.config/calibre/viewer/annots/6fd06a181469267e9c09d240ef2d3cca061e54ce37143a9e142524f61028cdd9.json
deleted file mode 100644
index 2579467..0000000
--- a/dotfiles/system/.config/calibre/viewer/annots/6fd06a181469267e9c09d240ef2d3cca061e54ce37143a9e142524f61028cdd9.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"pos": "epubcfi(/2/2/4/6[page_3]@50:50)", "pos_type": "epubcfi", "timestamp": "2022-08-23T16:31:51.861250+00:00", "type": "last-read"}]
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/viewer/annots/90922c33b4cfd6cdf2f2f462bc5f6e6b0f18bdb829384144fdd13cc3b487deb1.json b/dotfiles/system/.config/calibre/viewer/annots/90922c33b4cfd6cdf2f2f462bc5f6e6b0f18bdb829384144fdd13cc3b487deb1.json
deleted file mode 100644
index 0637a08..0000000
--- a/dotfiles/system/.config/calibre/viewer/annots/90922c33b4cfd6cdf2f2f462bc5f6e6b0f18bdb829384144fdd13cc3b487deb1.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/viewer/annots/ab0b0aa00cc90f53470da2761ea678a4ccacef1f5002917bda43970cd6096b19.json b/dotfiles/system/.config/calibre/viewer/annots/ab0b0aa00cc90f53470da2761ea678a4ccacef1f5002917bda43970cd6096b19.json
deleted file mode 100644
index ac7dcad..0000000
--- a/dotfiles/system/.config/calibre/viewer/annots/ab0b0aa00cc90f53470da2761ea678a4ccacef1f5002917bda43970cd6096b19.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"pos": "epubcfi(/2/2/4/2@50:49.93)", "pos_type": "epubcfi", "timestamp": "2025-07-13T16:19:15.135276+00:00", "type": "last-read"}]
\ No newline at end of file
diff --git a/dotfiles/system/.config/calibre/viewer/annots/c5a80ad08eb5ae859fefd73672b6a7cddc243254b55897adfdd5671fe7b2aacf.json b/dotfiles/system/.config/calibre/viewer/annots/c5a80ad08eb5ae859fefd73672b6a7cddc243254b55897adfdd5671fe7b2aacf.json
deleted file mode 100644
index 098752f..0000000
--- a/dotfiles/system/.config/calibre/viewer/annots/c5a80ad08eb5ae859fefd73672b6a7cddc243254b55897adfdd5671fe7b2aacf.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"pos": "epubcfi(/4/2/4/128/1:16)", "pos_type": "epubcfi", "timestamp": "2025-07-06T21:55:27.324496+00:00", "type": "last-read"}]
\ No newline at end of file
diff --git a/dotfiles/system/.config/conky/conky.conf b/dotfiles/system/.config/conky/conky.conf
deleted file mode 100644
index 09ee8ea..0000000
--- a/dotfiles/system/.config/conky/conky.conf
+++ /dev/null
@@ -1,24 +0,0 @@
-conky.config = {
-out_to_console = true,
-out_to_x = false,
-background = false,
-update_interval = 30,
-total_run_times = 0,
-};
-conky.text = [[ \
-${if_existing /sys/class/power_supply/BAT0}\
-󱊣 \
-${battery_percent BAT0}% \
-${if_existing /sys/class/power_supply/BAT0/status Charging}îª ${endif}\
-${if_existing /sys/class/power_supply/BAT0/status Discharging}îª ${endif}\
-${endif}\
-${if_existing /sys/class/power_supply/BAT1}\
-󱊣 \
-${battery_percent BAT1}% \
-${if_existing /sys/class/power_supply/BAT1/status Charging}îª ${endif}\
-${if_existing /sys/class/power_supply/BAT1/status Discharging}îª ${endif}\
-${endif}\
-ï‚ ${fs_used}/${fs_size} \
-ï³ ${time %a %B %d} \
-ó°¥” ${time %I:%M %p %Z}
-]];
diff --git a/dotfiles/system/.config/dunst/dunstrc b/dotfiles/system/.config/dunst/dunstrc
deleted file mode 100644
index 104df28..0000000
--- a/dotfiles/system/.config/dunst/dunstrc
+++ /dev/null
@@ -1,72 +0,0 @@
-# Dunst config - Dupre theme
-# Warm, earthy colors from dupre-theme.el
-
-[global]
-# Display
-follow = mouse
-width = 350
-height = (0, 300)
-origin = top-right
-offset = (35, 35)
-indicate_hidden = yes
-notification_limit = 5
-gap_size = 12
-padding = 12
-horizontal_padding = 20
-frame_width = 2
-sort = no
-corner_radius = 10
-
-# Progress bar
-progress_bar_frame_width = 0
-progress_bar_corner_radius = 3
-
-# Colors - Dupre theme
-foreground = "#f0fef0"
-frame_color = "#d7af5f"
-highlight = "#d7af5f, #ccc768"
-
-# Text
-font = BerkeleyMono Nerd Font 11
-markup = full
-format = "%a \n%s \n%b"
-alignment = left
-vertical_alignment = center
-show_age_threshold = -1
-hide_duplicate_count = false
-
-# Icon
-icon_position = left
-min_icon_size = 54
-max_icon_size = 80
-icon_corner_radius = 4
-
-# Misc/Advanced
-dmenu = fuzzel --dmenu --prompt 'Open with'
-
-# Mouse
-mouse_left_click = close_current
-mouse_middle_click = do_action, close_current
-mouse_right_click = close_all
-
-[urgency_low]
-background = "#151311f0"
-timeout = 3
-
-[urgency_normal]
-background = "#151311f0"
-timeout = 8
-
-[urgency_critical]
-background = "#7c2a09f0"
-frame_color = "#d47c59"
-highlight = "#ff2a00"
-foreground = "#f0fef0"
-timeout = 0
-
-[fullscreen_delay_everything]
-fullscreen = delay
-
-[fullscreen_show_critical]
-msg_urgency = critical
-fullscreen = show
diff --git a/dotfiles/system/.config/environment.d/envvars.conf b/dotfiles/system/.config/environment.d/envvars.conf
deleted file mode 100644
index f937aab..0000000
--- a/dotfiles/system/.config/environment.d/envvars.conf
+++ /dev/null
@@ -1 +0,0 @@
-PATH=/usr/local/bin:/usr/bin:/bin:$HOME/.local/bin:/usr/sbin:$HOME/.config/rofi/scripts
diff --git a/dotfiles/system/.config/feh/keys b/dotfiles/system/.config/feh/keys
deleted file mode 100644
index 3cdea0b..0000000
--- a/dotfiles/system/.config/feh/keys
+++ /dev/null
@@ -1,6 +0,0 @@
-# feh key bindings
-# Format: action key1 [key2 [key3]]
-
-# Zoom: add +/- to existing Up/Down bindings
-zoom_in plus equal Up
-zoom_out minus Down KP_Subtract
diff --git a/dotfiles/system/.config/flameshot/flameshot.ini b/dotfiles/system/.config/flameshot/flameshot.ini
deleted file mode 100644
index 8874b3b..0000000
--- a/dotfiles/system/.config/flameshot/flameshot.ini
+++ /dev/null
@@ -1,11 +0,0 @@
-[General]
-contrastOpacity=216
-copyOnDoubleClick=true
-copyPathAfterSave=true
-saveAfterCopy=true
-saveAsFileExtension=jpg
-savePath=/home/cjennings/pictures/screenshots
-savePathFixed=true
-showStartupLaunchMessage=false
-uiColor=#2587e2
-useJpgForClipboard=true
diff --git a/dotfiles/system/.config/fontconfig/fonts.conf b/dotfiles/system/.config/fontconfig/fonts.conf
deleted file mode 100644
index 6a27675..0000000
--- a/dotfiles/system/.config/fontconfig/fonts.conf
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
- true
-
-
- true
-
-
- hintslight
-
-
- none
-
-
- true
-
-
- lcdnone
-
-
- 144
-
-
-
diff --git a/dotfiles/system/.config/ghostty/config b/dotfiles/system/.config/ghostty/config
deleted file mode 100644
index 68f8a15..0000000
--- a/dotfiles/system/.config/ghostty/config
+++ /dev/null
@@ -1,44 +0,0 @@
-# Ghostty configuration to match st terminal appearance
-
-# Font configuration (matching st)
-font-family = "Berkeley Mono"
-font-size = 12
-font-feature = ss01
-font-feature = ss02
-font-feature = ss03
-
-# Window appearance
-window-padding-x = 2
-window-padding-y = 2
-background-opacity = 0.8
-gtk-titlebar = false
-
-# Colors (matching st's color scheme)
-# Foreground: gray90, Background: black
-foreground = d9d9d9
-background = 000000
-
-# 16 ANSI colors (matching st config.def.h)
-palette = 0=#000000
-palette = 1=#cd0000
-palette = 2=#00cd00
-palette = 3=#cdcd00
-palette = 4=#0000ee
-palette = 5=#cd00cd
-palette = 6=#00cdcd
-palette = 7=#e5e5e5
-palette = 8=#7f7f7f
-palette = 9=#ff0000
-palette = 10=#00ff00
-palette = 11=#ffff00
-palette = 12=#5c5cff
-palette = 13=#ff00ff
-palette = 14=#00ffff
-palette = 15=#ffffff
-
-# Cursor configuration
-cursor-color = cccccc
-cursor-style = block
-
-# Keybindings
-keybind = shift+enter=text:\x1b\r
diff --git a/dotfiles/system/.config/gtk-3.0/gtk.css b/dotfiles/system/.config/gtk-3.0/gtk.css
deleted file mode 100644
index a1d4c13..0000000
--- a/dotfiles/system/.config/gtk-3.0/gtk.css
+++ /dev/null
@@ -1,6 +0,0 @@
-.window-frame, .window-frame:backdrop {
- box-shadow: 0 0 0 black; /* removes shadow completely */
- border-style: none;
- margin: 1; /* this retains the ability to resize with the mouse, if 1px is too narrow, set some higher values */
- border-radius: 0;
-}
diff --git a/dotfiles/system/.config/gtk-3.0/settings.ini b/dotfiles/system/.config/gtk-3.0/settings.ini
deleted file mode 100644
index 2023ae6..0000000
--- a/dotfiles/system/.config/gtk-3.0/settings.ini
+++ /dev/null
@@ -1,18 +0,0 @@
-[Settings]
-gtk-print-backends=file,cups,pdf
-gtk-theme-name=Adwaita-dark
-gtk-icon-theme-name=Papirus-Dark
-gtk-font-name=Cantarell 11
-gtk-cursor-theme-name=Vimix-white-cursors
-gtk-cursor-theme-size=0
-gtk-toolbar-style=GTK_TOOLBAR_BOTH
-gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
-gtk-button-images=1
-gtk-menu-images=1
-gtk-enable-event-sounds=1
-gtk-enable-input-feedback-sounds=1
-gtk-xft-antialias=1
-gtk-xft-hinting=1
-gtk-xft-hintstyle=hintfull
-gtk-xft-rgba=rgb
-gtk-application-prefer-dark-theme=1
\ No newline at end of file
diff --git a/dotfiles/system/.config/htop/htoprc b/dotfiles/system/.config/htop/htoprc
deleted file mode 100644
index 06b580d..0000000
--- a/dotfiles/system/.config/htop/htoprc
+++ /dev/null
@@ -1,63 +0,0 @@
-# Beware! This file is rewritten by htop when settings are changed in the interface.
-# The parser is also very primitive, and not human-friendly.
-htop_version=3.2.2
-config_reader_min_version=3
-fields=0 48 17 18 38 39 40 2 46 47 49 1
-hide_kernel_threads=1
-hide_userland_threads=0
-hide_running_in_container=0
-shadow_other_users=0
-show_thread_names=0
-show_program_path=1
-highlight_base_name=0
-highlight_deleted_exe=1
-shadow_distribution_path_prefix=0
-highlight_megabytes=1
-highlight_threads=1
-highlight_changes=0
-highlight_changes_delay_secs=5
-find_comm_in_cmdline=1
-strip_exe_from_cmdline=1
-show_merged_command=0
-header_margin=1
-screen_tabs=1
-detailed_cpu_time=0
-cpu_count_from_one=0
-show_cpu_usage=1
-show_cpu_frequency=0
-show_cpu_temperature=0
-degree_fahrenheit=0
-update_process_names=0
-account_guest_in_cpu_meter=0
-color_scheme=0
-enable_mouse=1
-delay=15
-hide_function_bar=0
-header_layout=two_50_50
-column_meters_0=AllCPUs Memory Swap
-column_meter_modes_0=1 1 1
-column_meters_1=Tasks LoadAverage Uptime
-column_meter_modes_1=2 2 2
-tree_view=0
-sort_key=46
-tree_sort_key=0
-sort_direction=-1
-tree_sort_direction=1
-tree_view_always_by_pid=0
-all_branches_collapsed=0
-screen:Main=PID USER PRIORITY NICE M_VIRT M_RESIDENT M_SHARE STATE PERCENT_CPU PERCENT_MEM TIME Command
-.sort_key=PERCENT_CPU
-.tree_sort_key=PID
-.tree_view=0
-.tree_view_always_by_pid=0
-.sort_direction=-1
-.tree_sort_direction=1
-.all_branches_collapsed=0
-screen:I/O=PID USER IO_PRIORITY IO_RATE IO_READ_RATE IO_WRITE_RATE PERCENT_SWAP_DELAY PERCENT_IO_DELAY Command
-.sort_key=IO_RATE
-.tree_sort_key=PID
-.tree_view=0
-.tree_view_always_by_pid=0
-.sort_direction=-1
-.tree_sort_direction=1
-.all_branches_collapsed=0
diff --git a/dotfiles/system/.config/lf/cleaner b/dotfiles/system/.config/lf/cleaner
deleted file mode 100755
index a184d84..0000000
--- a/dotfiles/system/.config/lf/cleaner
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-if [ -n "$FIFO_UEBERZUG" ]; then
- printf '{"action": "remove", "identifier": "PREVIEW"}\n' > "$FIFO_UEBERZUG"
-fi
diff --git a/dotfiles/system/.config/lf/draw_img b/dotfiles/system/.config/lf/draw_img
deleted file mode 100755
index 5a70d5e..0000000
--- a/dotfiles/system/.config/lf/draw_img
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env bash
-
-clear_screen() {
- printf '\e[%sH\e[9999C\e[1J%b\e[1;%sr' \
- "$((LINES-2))" "${TMUX:+\e[2J}" "$max_items"
-}
-
-# Get a file's mime_type.
-mime_type=$(file -bi "$1")
-
-# File isn't an image file, give warning.
-if [[ $mime_type != image/* ]]; then
- lf -remote "send $id echoerr 'Not an image'"
- exit
-fi
-
-w3m_paths=(/usr/{local/,}{lib,libexec,lib64,libexec64}/w3m/w3mi*)
-read -r w3m _ < <(type -p w3mimgdisplay "${w3m_paths[@]}")
-read -r LINES COLUMNS < <(stty size)
-
-# Get terminal window size in pixels and set it to WIDTH and HEIGHT.
-export $(xdotool getactivewindow getwindowgeometry --shell)
-
-# Get the image size in pixels.
-read -r img_width img_height < <("$w3m" <<< "5;${CACHE:-$1}")
-
-((img_width > WIDTH)) && {
- ((img_height=img_height*WIDTH/img_width))
- ((img_width=WIDTH))
-}
-
-((img_height > HEIGHT)) && {
- ((img_width=img_width*HEIGHT/img_height))
- ((img_height=HEIGHT))
-}
-
-# Variable needed for centering image.
-HALF_HEIGHT=$(expr $HEIGHT / 2)
-HALF_WIDTH=$(expr $WIDTH / 2)
-HALF_IMG_HEIGHT=$(expr $img_height / 2)
-HALF_IMG_WIDTH=$(expr $img_width / 2)
-X_POS=$(expr $HALF_WIDTH - $HALF_IMG_WIDTH)
-Y_POS=$(expr $HALF_HEIGHT - $HALF_IMG_HEIGHT)
-
-clear_screen
-# Hide the cursor.
-printf '\e[?25l'
-
-# Display the image.
-printf '0;1;%s;%s;%s;%s;;;;;%s\n3;\n4\n' \
- ${X_POS:-0} \
- ${Y_POS:-0} \
- "$img_width" \
- "$img_height" \
- "${CACHE:-$1}" | "$w3m" &>/dev/null
-
-# Wait for user input.
-read -ern 1
-
-# Clear the image.
-printf '6;%s;%s;%s;%s\n3;' \
- "${X_POS:-0}" \
- "${Y_POS:-0}" \
- "$WIDTH" \
- "$HEIGHT" | "$w3m" &>/dev/null
-
-clear_screen
diff --git a/dotfiles/system/.config/lf/image b/dotfiles/system/.config/lf/image
deleted file mode 100755
index 77ddb5b..0000000
--- a/dotfiles/system/.config/lf/image
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env bash
-readonly ID_PREVIEW="preview"
-main() {
- case "$1" in
- "clear")
- declare -p -A cmd=([action]=remove [identifier]="$ID_PREVIEW") \
- > "$FIFO_UEBERZUG"
- ;;
- "draw")
- declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW" \
- [x]="$3" [y]="$4" [max_width]="$5" [max_height]="$6" \
- [path]="$2") > "$FIFO_UEBERZUG"
- ;;
- "*") echo "Unknown command: '$1', '$2'" ;;
- esac
-}
-main "$@"
-
diff --git a/dotfiles/system/.config/lf/lfrc b/dotfiles/system/.config/lf/lfrc
deleted file mode 100644
index 50f5af9..0000000
--- a/dotfiles/system/.config/lf/lfrc
+++ /dev/null
@@ -1,333 +0,0 @@
-# lffc
-# Craig Jennings
-#
-
-
-##########################################################################
-# BASIC SETTINGS #
-##########################################################################
-
-set ratios 1:2:3
-set cleaner ~/.config/lf/cleaner # path to cleaner script
-set previewer ~/.config/lf/preview # path to preview script
-set preview # turn on previews
-
-set nohidden # don't show hidden files. '.' toggles
-set incsearch true # incremental searching
-set drawbox # draw boxes around panes
-set noicons # turn on icons
-set ignorecase # ignore case in sorting & searching
-set filesep " " # separate files w/ space not newline
-
-set shell sh
-set shellopts '-eu'
-
-##########################################################################
-# REMOVE SOME DEFAULT BINDINGS #
-##########################################################################
-
-map m
-map o
-map n
-map "'"
-map '"'
-map d
-map c
-map e
-map f
-
-##########################################################################
-# BASIC COMMANDS #
-##########################################################################
-
-map . set hidden! # toggle hidden files
-map p paste
-map x cut
-map y copy
-map H top
-map L bottom
-map R reload
-map C clear
-map U unselect
-
-##########################################################################
-# LF CONFIG EDIT/NAV
-##########################################################################
-
-# LF CONFIG
-#edit lfrc
-map elf $$EDITOR ~/.config/lf/lfrc &!
-
-# goto lf dir
-map glf cd ~/.config/lf/
-
-# reload lfrc
-map push :source~/.config/lf/lfrc
-
-##########################################################################
-# CUSTOM COMMANDS #
-##########################################################################
-
-# SET WALLPAPER BACKGROUND
-map bg $feh --bg-fill "$f"
-
-# ROTATE IMAGE 90 degrees clockwise
-map 90 mogrify -rotate 90 "$f"
-
-# DETOX FILENAME
-map dtx $detox "$f"
-
-# COPY FILE PATH
-map Y $echo "$fx" | clip
-
-# ADD TO DOTFILES REPO
-map atd /usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME add "$f"
-
-
-##########################################################################
-# NAVIGATION / FILE MANAGEMENT #
-##########################################################################
-
-### MAIN
-map mh. $mv "$f" ~
-map ch. $cp "$f" ~
-map gh. cd ~
-
-map mdx $mv "$f" ~/documents
-map cdx $cp "$f" ~/documents
-map gdx cd ~/documents
-
-map mdl $mv "$f" ~/downloads
-map cdl $cp "$f" ~/downloads
-map gdl cd ~/downloads
-
-### PICTURES
-map mpx $mv "$f" ~/pictures
-map cpx $cp "$f" ~/pictures
-map gpx cd ~/pictures
-
-map mps $mv "$f" ~/pictures/screenshots
-map cps $cp "$f" ~/pictures/screenshots
-map gps cd ~/pictures/screenshots
-
-map mpw $mv "$f" ~/pictures/wallpaper
-map cpw $cp "$f" ~/pictures/wallpaper
-map gpw cd ~/pictures/wallpaper
-
-### MAME
-
-map mmr $mv "$f" ~/.mame/roms
-map cmr $cp "$f" ~/.mame/roms
-map gmr cd ~/.mame/roms
-map owm /usr/bin/mame "$f"
-
-### MISC
-map gtc cd ~/downloads/torrents/complete
-map gulb cd /usr/local/bin
-map gp0 cd ~/.vids
-map mp0 $mv "$f" ~/.vids
-
-map gmv cd ~/movies
-map mmv $mv "$f" ~/movies
-
-##########################################################################
-# OPEN WITH COMMANDS #
-##########################################################################
-
-# open with vlc video player (default: mpv)
-map owv $vlc "$f"
-
-# open with gimp (default: nsxiv)
-map owg $gimp "$f"
-
-# open with zathura (default emacs pdf-tools)
-map owz $zathura "$f"
-
-# open with audacious
-map owa $audacious "$f"
-
-##########################################################################
-# FILE OPERATION #
-##########################################################################
-
-
-# RENAME
-#
-cmd rename %[ -e $1 ] && printf "file exists" || mv "$f" $1
-map r push :rename
-
-
-# OPEN
-#
-# Called when current file is not a directory.
-cmd open ${{
- # if text or json file
- case $(file --mime-type "$f" -bL) in
- text/*|application/json) $EDITOR "$f";;
-
- *) xdg-open "$f" ;;
- esac
-}}
-map open
-
-
-# DELETE
-#
-cmd delete $rm -rf "$fx"
-map dd delete
-
-map delete
-
-# MKDIR
-#
-cmd mkdir ${{
- printf "Directory Name: "
- read ans
- mkdir $ans
-}}
-map md mkdir
-
-
-# MKFILE
-#
-cmd mkfile ${{
- printf "File Name: "
- read ans
- $EDITOR $ans
-}}
-map mf mkfile
-
-
-# SUDO MKFILE
-#
-cmd sudomkfile ${{
- printf "File Name: "
- read ans
- sudo $EDITOR $ans
-}}
-map mr sudomkfile
-
-
-# CHMOD
-#
-cmd chmod ${{
- printf "Mode Bits: "
- read ans
- for file in "$fx"
- do
- chmod $ans $file
- done
- lf -remote 'send reload'
-}}
-map ch chmod
-
-
-######################################################################## #
-# COMPRESSION FUNCTIONS #
-######################################################################## #
-
-# EXTRACT
-cmd extract ${{
- case "$f" in
- *.tar.bz2) tar xjf "$f" ;;
- *.tar.gz) tar xzf "$f" ;;
- *.bz2) bunzip2 "$f" ;;
- *.rar) rar x "$f" ;;
- *.gz) gunzip "$f" ;;
- *.tar) tar xf "$f" ;;
- *.tbz2) tar xjf "$f" ;;
- *.tgz) tar xzf "$f" ;;
- *.zip) unzip "$f" ;;
- *.Z) uncompress "$f" ;;
- *) echo "Unsupported format" ;;
- esac
-}}
-map ex extract
-
-
-# TARGZ
-# tar.gz current or selected files
-#
-cmd targz ${{
- set -f
- mkdir $1
- cp -r "$fx" $1
- tar czf $1.tar.gz $1
- rm -rf $1
-}}
-map tgz targz
-
-
-# ZIP
-# zip current file or selected files
-cmd zip ${{
- set -f
- mkdir $1
- cp -r "$fx" $1
- zip -r $1.zip $1
- rm -rf $1
-}}
-map zip zip
-
-
-######################################################################## #
-# MISCELLANEOUS CONVENIENCE COMMANDS #
-######################################################################## #
-
-
-# PACMAN INSTALL
-#
-cmd pacman_install ${{
- case "$f" in
- *.pkg.tar.xz|*.pkg.tar.gz|*.pkg.tar.zst) sudo pacman -U "$f" ;;
- *) echo "This doesn't look like an Arch package, so not installing."
-}}
-
-
-# MP3
-# convert audio file to mp3
-#
-cmd mp3 ${{
- set -f
- outname=$(echo "$f" | cut -f 1 -d '.')
- lame -V --preset extreme $f "${outname}.mp3"
-}}
-
-
-######################################################################## #
-# FZF HELPER FUNCTIONS #
-######################################################################## #
-
-
-# FZF-JUMP
-#
-# jump to file or directory with c-f
-cmd fzf_jump ${{
- res="$(find . -maxdepth 1 | fzf --reverse --header='Jump to location' | sed 's/\\/\\\\/g;s/"/\\"/g')"
- if [ -d "$res" ] ; then
- cmd="cd"
- elif [ -f "$res" ] ; then
- cmd="select"
- else
- exit 0
- fi
- lf -remote "send $id $cmd \"$res\""
-}}
-map :fzf_jump
-
-
-# FZF-SEARCH
-#
-# search contents of files in current directory, then select a file
-cmd fzf_search ${{
- res="$( \
- RG_PREFIX="rg --column --line-number --no-heading --color=always \
- --smart-case "
- FZF_DEFAULT_COMMAND="$RG_PREFIX ''" \
- fzf --bind "change:reload:$RG_PREFIX {q} || true" \
- --ansi --layout=reverse --header 'Search in files' \
- | cut -d':' -f1
- )"
- [ ! -z "$res" ] && lf -remote "send $id select \"$res\""
-}}
-map gs :fzf_search
diff --git a/dotfiles/system/.config/lf/preview b/dotfiles/system/.config/lf/preview
deleted file mode 100755
index 68cda52..0000000
--- a/dotfiles/system/.config/lf/preview
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/bin/sh
-
-image() {
- geometry="$(($2-2))x$3"
- chafa "$1" -f sixel -s "$geometry" --animate false
-}
-
-batorcat() {
- file="$1"
- shift
- if command -v bat > /dev/null 2>&1
- then
- bat --color=always --style=plain --pager=never "$file" "$@"
- else
- cat "$file"
- fi
-}
-
-glowormdcat() {
- file="$1"
- shift
- if command -v glow > /dev/null 2>&1
- then
- glow "$file"
- else
- mdcat "$file"
- fi
-}
-
-CACHE="$HOME/.cache/lf/thumbnail.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | awk '{print $1}'))"
-
-case "$(printf "%s\n" "$(readlink -f "$1")" | awk '{print tolower($0)}')" in
- *.tgz|*.tar.gz) tar tzf "$1" ;;
- *.tar.bz2|*.tbz2) tar tjf "$1" ;;
- *.tar.txz|*.txz) xz --list "$1" ;;
- *.tar) tar tf "$1" ;;
- *.zip|*.jar|*.war|*.ear|*.oxt) unzip -l "$1" ;;
- *.rar) unrar l "$1" ;;
- *.md)
- glowormdcat "$1";;
- *.7z) 7z l "$1" ;;
- *.[1-8]) man "$1" | col -b ;;
- *.o) nm "$1";;
- *.torrent) transmission-show "$1" ;;
- *.iso) iso-info --no-header -l "$1" ;;
- *.odt|*.ods|*.odp|*.sxw) odt2txt "$1" ;;
- *.doc) catdoc "$1" ;;
- *.docx) docx2txt "$1" ;;
- *.xml|*.html) w3m -dump "$1";;
- *.xls|*.xlsx)
- ssconvert --export-type=Gnumeric_stf:stf_csv "$1" "fd://1" | batorcat --language=csv
- ;;
- *.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.mka)
- exiftool "$1"
- ;;
- *.pdf)
- [ ! -f "${CACHE}.jpg" ] && \
- pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE"
- image "${CACHE}.jpg" "$2" "$3" "$4" "$5"
- ;;
- *.epub)
- [ ! -f "$CACHE" ] && \
- epub-thumbnailer "$1" "$CACHE" 1024
- image "$CACHE" "$2" "$3" "$4" "$5"
- ;;
- *.cbz|*.cbr|*.cbt)
- [ ! -f "$CACHE" ] && \
- comicthumb "$1" "$CACHE" 1024
- image "$CACHE" "$2" "$3" "$4" "$5"
- ;;
- *.avi|*.mp4|*.wmv|*.dat|*.3gp|*.ogv|*.mkv|*.mpg|*.mpeg|*.vob|*.fl[icv]|*.m2v|*.mov|*.webm|*.ts|*.mts|*.m4v|*.r[am]|*.qt|*.divx)
- [ ! -f "${CACHE}.jpg" ] && \
- ffmpegthumbnailer -i "$1" -o "${CACHE}.jpg" -s 0 -q 5
- image "${CACHE}.jpg" "$2" "$3" "$4" "$5"
- ;;
- *.bmp|*.jpg|*.jpeg|*.png|*.xpm|*.webp|*.tiff|*.gif|*.jfif|*.ico)
- image "$1" "$2" "$3" "$4" "$5"
- ;;
- *.svg)
- [ ! -f "${CACHE}.jpg" ] && \
- convert "$1" "${CACHE}.jpg"
- image "${CACHE}.jpg" "$2" "$3" "$4" "$5"
- ;;
- *.ino)
- batorcat --language=cpp "$1"
- ;;
- *)
- batorcat "$1"
- ;;
-esac
-exit 0
diff --git a/dotfiles/system/.config/mc/panels.ini b/dotfiles/system/.config/mc/panels.ini
deleted file mode 100644
index e69de29..0000000
diff --git a/dotfiles/system/.config/mopidy/mopidy.conf b/dotfiles/system/.config/mopidy/mopidy.conf
deleted file mode 100644
index a386dbd..0000000
--- a/dotfiles/system/.config/mopidy/mopidy.conf
+++ /dev/null
@@ -1,91 +0,0 @@
-# Mopidy configuration for cjennings
-# See https://docs.mopidy.com/en/latest/config/ for documentation
-
-[core]
-cache_dir = $XDG_CACHE_DIR/mopidy
-config_dir = $XDG_CONFIG_DIR/mopidy
-data_dir = $XDG_DATA_DIR/mopidy
-max_tracklist_length = 10000
-restore_state = false
-
-[logging]
-verbosity = 0
-format = %(levelname)-8s %(asctime)s [%(process)d:%(threadName)s] %(name)s\n %(message)s
-color = true
-
-[audio]
-mixer = software
-mixer_volume =
-output = pulsesink device=alsa_output.pci-0000_00_1f.3.analog-stereo
-# Buffer time in milliseconds - 1000ms works well for local files
-# Explicitly using analog output to avoid Bluetooth latency/jumpiness issues
-buffer_time = 1000
-
-[proxy]
-scheme =
-hostname =
-port =
-username =
-password =
-
-[file]
-enabled = true
-# Point to Craig's music directory
-media_dirs =
- /home/cjennings/music|Music
-excluded_file_extensions =
- .directory
- .html
- .jpeg
- .jpg
- .log
- .nfo
- .pdf
- .png
- .txt
- .zip
-show_dotfiles = false
-follow_symlinks = false
-metadata_timeout = 1000
-
-[http]
-enabled = true
-hostname = 127.0.0.1
-port = 6680
-zeroconf = Mopidy HTTP server on $hostname
-allowed_origins =
-csrf_protection = true
-default_app = mopidy
-
-[m3u]
-enabled = true
-base_dir = /home/cjennings/music
-default_encoding = latin-1
-default_extension = .m3u
-playlists_dir = /home/cjennings/music
-
-[softwaremixer]
-enabled = true
-
-[stream]
-enabled = true
-protocols =
- http
- https
- mms
- rtmp
- rtmps
- rtsp
-metadata_blacklist =
-# Increase timeout for slow/distant streams (30 seconds)
-timeout = 30000
-
-# MPD frontend - enables MPD protocol compatibility (port 6600)
-# This allows MPD clients like mpc, ncmpcpp to work with Mopidy
-[mpd]
-enabled = true
-hostname = 127.0.0.1
-port = 6600
-password =
-max_connections = 20
-connection_timeout = 60
\ No newline at end of file
diff --git a/dotfiles/system/.config/mpd/mpd.conf b/dotfiles/system/.config/mpd/mpd.conf
deleted file mode 100644
index d084cb2..0000000
--- a/dotfiles/system/.config/mpd/mpd.conf
+++ /dev/null
@@ -1,437 +0,0 @@
-# An example configuration file for MPD.
-# Read the user manual for documentation: http://www.musicpd.org/doc/user/
-# or /usr/share/doc/mpd/user-manual.html
-
-
-# Files and directories #######################################################
-#
-# This setting controls the top directory which MPD will search to discover the
-# available audio files and add them to the daemon's online database. This
-# setting defaults to the XDG directory, otherwise the music directory will be
-# be disabled and audio files will only be accepted over ipc socket (using
-# file:// protocol) or streaming files over an accepted protocol.
-#
-music_directory "/home/cjennings/music"
-#
-# This setting sets the MPD internal playlist directory. The purpose of this
-# directory is storage for playlists created by MPD. The server will use
-# playlist files not created by the server but only if they are in the MPD
-# format. This setting defaults to playlist saving being disabled.
-#
-playlist_directory "/home/cjennings/music"
-#
-# This setting sets the location of the MPD database. This file is used to
-# load the database at server start up and store the database while the
-# server is not up. This setting defaults to disabled which will allow
-# MPD to accept files over ipc socket (using file:// protocol) or streaming
-# files over an accepted protocol.
-#
-db_file "/home/cjennings/.config/mpd/database"
-#
-# These settings are the locations for the daemon log files for the daemon.
-# These logs are great for troubleshooting, depending on your log_level
-# settings.
-#
-# The special value "syslog" makes MPD use the local syslog daemon. This
-# setting defaults to logging to syslog, otherwise logging is disabled.
-#
-log_file "/home/cjennings/.config/mpd/log"
-#
-# This setting sets the location of the file which stores the process ID
-# for use of mpd --kill and some init scripts. This setting is disabled by
-# default and the pid file will not be stored.
-#
-pid_file "/home/cjennings/.config/mpd/pid"
-#
-# This setting sets the location of the file which contains information about
-# most variables to get MPD back into the same general shape it was in before
-# it was brought down. This setting is disabled by default and the server
-# state will be reset on server start up.
-#
-state_file "/home/cjennings/.config/mpd/state"
-#
-# The location of the sticker database. This is a database which
-# manages dynamic information attached to songs.
-#
-sticker_file "/home/cjennings/.config/mpd/sticker.sql"
-#
-###############################################################################
-
-
-# General music daemon options ################################################
-#
-# This setting specifies the user that MPD will run as. MPD should never run as
-# root and you may use this setting to make MPD change its user ID after
-# initialization. This setting is disabled by default and MPD is run as the
-# current user.
-#
-user "cjennings"
-#
-# This setting specifies the group that MPD will run as. If not specified
-# primary group of user specified with "user" setting will be used (if set).
-# This is useful if MPD needs to be a member of group such as "audio" to
-# have permission to use sound card.
-#
-#group "nogroup"
-#
-# This setting sets the address for the daemon to listen on. Careful attention
-# should be paid if this is assigned to anything other then the default, any.
-# This setting can deny access to control of the daemon. Choose any if you want
-# to have mpd listen on every address. Not effective if systemd socket
-# activation is in use.
-#
-# For network
-# bind_to_address "0.0.0.0"
-#
-# And for Unix Socket
-# bind_to_address "/home/cjennings/.config/mpd/socket"
-bind_to_address "127.0.0.1"
-#
-# This setting is the TCP port that is desired for the daemon to get assigned
-# to.
-#
-port "6600"
-#
-# This setting controls the type of information which is logged. Available
-# setting arguments are "default", "secure" or "verbose". The "verbose" setting
-# argument is recommended for troubleshooting, though can quickly stretch
-# available resources on limited hardware storage.
-#
-log_level "default"
-#
-# If you have a problem with your MP3s ending abruptly it is recommended that
-# you set this argument to "no" to attempt to fix the problem. If this solves
-# the problem, it is highly recommended to fix the MP3 files with vbrfix
-# (available as vbrfix in the debian archive), at which
-# point gapless MP3 playback can be enabled.
-#
-#gapless_mp3_playback "yes"
-#
-# Setting "restore_paused" to "yes" puts MPD into pause mode instead
-# of starting playback after startup.
-#
-restore_paused "yes"
-#
-# This setting enables MPD to create playlists in a format usable by other
-# music players.
-#
-save_absolute_paths_in_playlists "yes"
-#
-# This setting defines a list of tag types that will be extracted during the
-# audio file discovery process. The complete list of possible values can be
-# found in the mpd.conf man page.
-#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
-#
-# This setting enables automatic update of MPD's database when files in
-# music_directory are changed.
-#
-auto_update "yes"
-#
-# Limit the depth of the directories being watched, 0 means only watch
-# the music directory itself. There is no limit by default.
-#
-#auto_update_depth "3"
-#
-# Buffer settings for smooth streaming
-audio_buffer_size "16384" # 16 MB buffer (default 4096 KB)
-#
-###############################################################################
-
-
-# Symbolic link behavior ######################################################
-#
-# If this setting is set to "yes", MPD will discover audio files by following
-# symbolic links outside of the configured music_directory.
-#
-#follow_outside_symlinks "yes"
-#
-# If this setting is set to "yes", MPD will discover audio files by following
-# symbolic links inside of the configured music_directory.
-#
-#follow_inside_symlinks "yes"
-#
-###############################################################################
-
-
-# Zeroconf / Avahi Service Discovery ##########################################
-#
-# If this setting is set to "yes", service information will be published with
-# Zeroconf / Avahi.
-#
-# zeroconf_enabled "yes"
-#
-# The argument to this setting will be the Zeroconf / Avahi unique name for
-# this MPD server on the network.
-#
-# zeroconf_name "Music Player Daemon"
-#
-###############################################################################
-
-
-# Permissions #################################################################
-#
-# If this setting is set, MPD will require password authorization. The password
-# can setting can be specified multiple times for different password profiles.
-#
-#password "password@read,add,control,admin"
-#
-# This setting specifies the permissions a user has who has not yet logged in.
-#
-#default_permissions "read,add,control,admin"
-#
-###############################################################################
-
-
-# Database #######################################################################
-#
-
-#database {
-# plugin "proxy"
-# host "other.mpd.host"
-# port "6600"
-#}
-
-# Input #######################################################################
-#
-
-input {
- plugin "curl"
- timeout "30000" # 30 second timeout for connections
-# proxy "proxy.isp.com:8080"
-# proxy_user "user"
-# proxy_password "password"
-}
-
-#
-###############################################################################
-
-# Audio Output ################################################################
-#
-# MPD supports various audio output types, as well as playing through multiple
-# audio outputs at the same time, through multiple audio_output settings
-# blocks. Setting this block is optional, though the server will only attempt
-# autodetection for one sound card.
-#
-# An example of an ALSA output:
-#
-#audio_output {
-# type "alsa"
-# name "My ALSA Device"
-# device "hw:0,0" # optional
-# mixer_type "hardware" # optional
-# mixer_device "default" # optional
-# mixer_control "PCM" # optional
-# mixer_index "0" # optional
-#}
-#
-# An example of an OSS output:
-#
-#audio_output {
-# type "oss"
-# name "My OSS Device"
-# device "/dev/dsp" # optional
-# mixer_type "hardware" # optional
-# mixer_device "/dev/mixer" # optional
-# mixer_control "PCM" # optional
-#}
-#
-# An example of a shout output (for streaming to Icecast):
-#
-#audio_output {
-# type "shout"
-# encoding "ogg" # optional
-# name "My Shout Stream"
-# host "localhost"
-# port "8000"
-# mount "/mpd.ogg"
-# password "hackme"
-# quality "5.0"
-# bitrate "128"
-# format "44100:16:1"
-# protocol "icecast2" # optional
-# user "source" # optional
-# description "My Stream Description" # optional
-# url "http://example.com" # optional
-# genre "jazz" # optional
-# public "no" # optional
-# timeout "2" # optional
-# mixer_type "software" # optional
-#}
-#
-# An example of a recorder output:
-#
-#audio_output {
-# type "recorder"
-# name "My recorder"
-# encoder "vorbis" # optional, vorbis or lame
-# path "/var/lib/mpd/recorder/mpd.ogg"
-## quality "5.0" # do not define if bitrate is defined
-# bitrate "128" # do not define if quality is defined
-# format "44100:16:1"
-#}
-#
-# An example of a httpd output (built-in HTTP streaming server):
-#
-#audio_output {
-# type "httpd"
-# name "My HTTP Stream"
-# encoder "vorbis" # optional, vorbis or lame
-# port "8000"
-# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6
-# quality "5.0" # do not define if bitrate is defined
-# bitrate "128" # do not define if quality is defined
-# format "44100:16:1"
-# max_clients "0" # optional 0=no limit
-#}
-#
-## cjennings 2021-06-26
-
-audio_output {
- type "pulse"
- name "pulse audio"
-}
-
-audio_output {
- type "fifo"
- name "my_fifo"
- path "/tmp/mpd.fifo"
- format "44100:16:2"
-}
-# An example of a pulseaudio output (streaming to a remote pulseaudio server)
-# Please see README.Debian if you want mpd to play through the pulseaudio
-# daemon started as part of your graphical desktop session!
-#
-#audio_output {
-# type "pulse"
-# name "My Pulse Output"
-# server "remote_server" # optional
-# sink "remote_server_sink" # optional
-#}
-#
-# An example of a winmm output (Windows multimedia API).
-#
-#audio_output {
-# type "winmm"
-# name "My WinMM output"
-# device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
-# or
-# device "0" # optional
-# mixer_type "hardware" # optional
-#}
-#
-# An example of an openal output.
-#
-#audio_output {
-# type "openal"
-# name "My OpenAL output"
-# device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
-#}
-#
-## Example "pipe" output:
-#
-#audio_output {
-# type "pipe"
-# name "my pipe"
-# command "aplay -f cd 2>/dev/null"
-## Or if you're want to use AudioCompress
-# command "AudioCompress -m | aplay -f cd 2>/dev/null"
-## Or to send raw PCM stream through PCM:
-# command "nc example.org 8765"
-# format "44100:16:2"
-#}
-#
-## An example of a null output (for no audio output):
-#
-#audio_output {
-# type "null"
-# name "My Null Output"
-# mixer_type "none" # optional
-#}
-#
-# If MPD has been compiled with libsamplerate support, this setting specifies
-# the sample rate converter to use. Possible values can be found in the
-# mpd.conf man page or the libsamplerate documentation. By default, this is
-# setting is disabled.
-#
-#samplerate_converter "Fastest Sinc Interpolator"
-#
-###############################################################################
-
-
-# Normalization automatic volume adjustments ##################################
-#
-# This setting specifies the type of ReplayGain to use. This setting can have
-# the argument "off", "album", "track" or "auto". "auto" is a special mode that
-# chooses between "track" and "album" depending on the current state of
-# random playback. If random playback is enabled then "track" mode is used.
-# See for more details about ReplayGain.
-# This setting is off by default.
-#
-replaygain "track"
-#
-# This setting sets the pre-amp used for files that have ReplayGain tags. By
-# default this setting is disabled.
-#
-#replaygain_preamp "0"
-#
-# This setting sets the pre-amp used for files that do NOT have ReplayGain tags.
-# By default this setting is disabled.
-#
-#replaygain_missing_preamp "0"
-#
-# This setting enables or disables ReplayGain limiting.
-# MPD calculates actual amplification based on the ReplayGain tags
-# and replaygain_preamp / replaygain_missing_preamp setting.
-# If replaygain_limit is enabled MPD will never amplify audio signal
-# above its original level. If replaygain_limit is disabled such amplification
-# might occur. By default this setting is enabled.
-#
-#replaygain_limit "yes"
-#
-# This setting enables on-the-fly normalization volume adjustment. This will
-# result in the volume of all playing audio to be adjusted so the output has
-# equal "loudness". This setting is disabled by default.
-#
-volume_normalization "yes"
-#
-###############################################################################
-
-
-# Character Encoding ##########################################################
-#
-# If file or directory names do not display correctly for your locale then you
-# may need to modify this setting.
-#
-filesystem_charset "UTF-8"
-#
-# This setting controls the encoding that ID3v1 tags should be converted from.
-#
-# id3v1_encoding "UTF-8" (this is now deprecated)
-#
-###############################################################################
-
-
-# SIDPlay decoder #############################################################
-#
-# songlength_database:
-# Location of your songlengths file, as distributed with the HVSC.
-# The sidplay plugin checks this for matching MD5 fingerprints.
-# See http://www.c64.org/HVSC/DOCUMENTS/Songlengths.faq
-#
-# default_songlength:
-# This is the default playing time in seconds for songs not in the
-# songlength database, or in case you're not using a database.
-# A value of 0 means play indefinitely.
-#
-# filter:
-# Turns the SID filter emulation on or off.
-#
-#decoder {
-# plugin "sidplay"
-# songlength_database "/media/C64Music/DOCUMENTS/Songlengths.txt"
-# default_songlength "120"
-# filter "true"
-#}
-#
-###############################################################################
-
diff --git a/dotfiles/system/.config/mpd/musicpd.conf b/dotfiles/system/.config/mpd/musicpd.conf
deleted file mode 100644
index 9f34c44..0000000
--- a/dotfiles/system/.config/mpd/musicpd.conf
+++ /dev/null
@@ -1,436 +0,0 @@
-# An example configuration file for MPD.
-# Read the user manual for documentation: http://www.musicpd.org/doc/user/
-# or /usr/share/doc/mpd/user-manual.html
-
-
-# Files and directories #######################################################
-#
-# This setting controls the top directory which MPD will search to discover the
-# available audio files and add them to the daemon's online database. This
-# setting defaults to the XDG directory, otherwise the music directory will be
-# be disabled and audio files will only be accepted over ipc socket (using
-# file:// protocol) or streaming files over an accepted protocol.
-#
-music_directory "~cjennings/music"
-#
-# This setting sets the MPD internal playlist directory. The purpose of this
-# directory is storage for playlists created by MPD. The server will use
-# playlist files not created by the server but only if they are in the MPD
-# format. This setting defaults to playlist saving being disabled.
-#
-playlist_directory "~cjennings/music"
-#
-# This setting sets the location of the MPD database. This file is used to
-# load the database at server start up and store the database while the
-# server is not up. This setting defaults to disabled which will allow
-# MPD to accept files over ipc socket (using file:// protocol) or streaming
-# files over an accepted protocol.
-#
-db_file "~cjennings/.config/mpd/database"
-#
-# These settings are the locations for the daemon log files for the daemon.
-# These logs are great for troubleshooting, depending on your log_level
-# settings.
-#
-# The special value "syslog" makes MPD use the local syslog daemon. This
-# setting defaults to logging to syslog, otherwise logging is disabled.
-#
-log_file "~cjennings/.config/mpd/mpd.log"
-#
-# This setting sets the location of the file which stores the process ID
-# for use of mpd --kill and some init scripts. This setting is disabled by
-# default and the pid file will not be stored.
-#
-pid_file "~cjennings/.config/mpd/pid"
-#
-# This setting sets the location of the file which contains information about
-# most variables to get MPD back into the same general shape it was in before
-# it was brought down. This setting is disabled by default and the server
-# state will be reset on server start up.
-#
-state_file "~cjennings/.config/mpd/state"
-#
-# The location of the sticker database. This is a database which
-# manages dynamic information attached to songs.
-#
-sticker_file "~cjennings/.config/mpd/sticker.sql"
-#
-###############################################################################
-
-
-# General music daemon options ################################################
-#
-# This setting specifies the user that MPD will run as. MPD should never run as
-# root and you may use this setting to make MPD change its user ID after
-# initialization. This setting is disabled by default and MPD is run as the
-# current user.
-#
-user "cjennings"
-#
-# This setting specifies the group that MPD will run as. If not specified
-# primary group of user specified with "user" setting will be used (if set).
-# This is useful if MPD needs to be a member of group such as "audio" to
-# have permission to use sound card.
-#
-#group "nogroup"
-#
-# This setting sets the address for the daemon to listen on. Careful attention
-# should be paid if this is assigned to anything other then the default, any.
-# This setting can deny access to control of the daemon. Choose any if you want
-# to have mpd listen on every address. Not effective if systemd socket
-# activation is in use.
-#
-# For network
-bind_to_address "0.0.0.0"
-#
-# And for Unix Socket
-#bind_to_address "/run/mpd/socket"
-#
-# This setting is the TCP port that is desired for the daemon to get assigned
-# to.
-#
-#port "6600"
-#
-# This setting controls the type of information which is logged. Available
-# setting arguments are "default", "secure" or "verbose". The "verbose" setting
-# argument is recommended for troubleshooting, though can quickly stretch
-# available resources on limited hardware storage.
-#
-#log_level "default"
-#
-# If you have a problem with your MP3s ending abruptly it is recommended that
-# you set this argument to "no" to attempt to fix the problem. If this solves
-# the problem, it is highly recommended to fix the MP3 files with vbrfix
-# (available as vbrfix in the debian archive), at which
-# point gapless MP3 playback can be enabled.
-#
-#gapless_mp3_playback "yes"
-#
-# Setting "restore_paused" to "yes" puts MPD into pause mode instead
-# of starting playback after startup.
-#
-restore_paused "yes"
-#
-# This setting enables MPD to create playlists in a format usable by other
-# music players.
-#
-save_absolute_paths_in_playlists "yes"
-#
-# This setting defines a list of tag types that will be extracted during the
-# audio file discovery process. The complete list of possible values can be
-# found in the mpd.conf man page.
-#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
-#
-# This setting enables automatic update of MPD's database when files in
-# music_directory are changed.
-#
-auto_update "yes"
-#
-# Limit the depth of the directories being watched, 0 means only watch
-# the music directory itself. There is no limit by default.
-#
-#auto_update_depth "3"
-#
-###############################################################################
-
-
-# Symbolic link behavior ######################################################
-#
-# If this setting is set to "yes", MPD will discover audio files by following
-# symbolic links outside of the configured music_directory.
-#
-#follow_outside_symlinks "yes"
-#
-# If this setting is set to "yes", MPD will discover audio files by following
-# symbolic links inside of the configured music_directory.
-#
-#follow_inside_symlinks "yes"
-#
-###############################################################################
-
-
-# Zeroconf / Avahi Service Discovery ##########################################
-#
-# If this setting is set to "yes", service information will be published with
-# Zeroconf / Avahi.
-#
-# zeroconf_enabled "yes"
-#
-# The argument to this setting will be the Zeroconf / Avahi unique name for
-# this MPD server on the network.
-#
-# zeroconf_name "Music Player Daemon"
-#
-###############################################################################
-
-
-# Permissions #################################################################
-#
-# If this setting is set, MPD will require password authorization. The password
-# can setting can be specified multiple times for different password profiles.
-#
-#password "password@read,add,control,admin"
-#
-# This setting specifies the permissions a user has who has not yet logged in.
-#
-#default_permissions "read,add,control,admin"
-#
-###############################################################################
-
-
-# Database #######################################################################
-#
-
-#database {
-# plugin "proxy"
-# host "other.mpd.host"
-# port "6600"
-#}
-
-# Input #######################################################################
-#
-
-input {
- plugin "curl"
-# proxy "proxy.isp.com:8080"
-# proxy_user "user"
-# proxy_password "password"
-}
-
-#
-###############################################################################
-
-# Audio Output ################################################################
-#
-# MPD supports various audio output types, as well as playing through multiple
-# audio outputs at the same time, through multiple audio_output settings
-# blocks. Setting this block is optional, though the server will only attempt
-# autodetection for one sound card.
-#
-# An example of an ALSA output:
-#
-#audio_output {
-# type "alsa"
-# name "My ALSA Device"
-# device "hw:0,0" # optional
-# mixer_type "hardware" # optional
-# mixer_device "default" # optional
-# mixer_control "PCM" # optional
-# mixer_index "0" # optional
-#}
-#
-# An example of an OSS output:
-#
-#audio_output {
-# type "oss"
-# name "My OSS Device"
-# device "/dev/dsp" # optional
-# mixer_type "hardware" # optional
-# mixer_device "/dev/mixer" # optional
-# mixer_control "PCM" # optional
-#}
-#
-# An example of a shout output (for streaming to Icecast):
-#
-#audio_output {
-# type "shout"
-# encoding "ogg" # optional
-# name "My Shout Stream"
-# host "localhost"
-# port "8000"
-# mount "/mpd.ogg"
-# password "hackme"
-# quality "5.0"
-# bitrate "128"
-# format "44100:16:1"
-# protocol "icecast2" # optional
-# user "source" # optional
-# description "My Stream Description" # optional
-# url "http://example.com" # optional
-# genre "jazz" # optional
-# public "no" # optional
-# timeout "2" # optional
-# mixer_type "software" # optional
-#}
-#
-# An example of a recorder output:
-#
-#audio_output {
-# type "recorder"
-# name "My recorder"
-# encoder "vorbis" # optional, vorbis or lame
-# path "/var/lib/mpd/recorder/mpd.ogg"
-## quality "5.0" # do not define if bitrate is defined
-# bitrate "128" # do not define if quality is defined
-# format "44100:16:1"
-#}
-#
-# An example of a httpd output (built-in HTTP streaming server):
-#
-#audio_output {
-# type "httpd"
-# name "My HTTP Stream"
-# encoder "vorbis" # optional, vorbis or lame
-# port "8000"
-# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6
-# quality "5.0" # do not define if bitrate is defined
-# bitrate "128" # do not define if quality is defined
-# format "44100:16:1"
-# max_clients "0" # optional 0=no limit
-#}
-#
-## cjennings 2021-06-26
-
-audio_output {
- type "oss"
- name "OSS Audio"
- device "/dev/dsp" # optional
- mixer_type "hardware" # optional
- mixer_device "/dev/mixer" # optional
- mixer_control "vol" # optional
-}
-
-audio_output {
- type "fifo"
- name "my_fifo"
- path "/tmp/mpd.fifo"
- format "44100:16:2"
-}
-# An example of a pulseaudio output (streaming to a remote pulseaudio server)
-# Please see README.Debian if you want mpd to play through the pulseaudio
-# daemon started as part of your graphical desktop session!
-#
-#audio_output {
-# type "pulse"
-# name "My Pulse Output"
-# server "remote_server" # optional
-# sink "remote_server_sink" # optional
-#}
-#
-# An example of a winmm output (Windows multimedia API).
-#
-#audio_output {
-# type "winmm"
-# name "My WinMM output"
-# device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
-# or
-# device "0" # optional
-# mixer_type "hardware" # optional
-#}
-#
-# An example of an openal output.
-#
-#audio_output {
-# type "openal"
-# name "My OpenAL output"
-# device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
-#}
-#
-## Example "pipe" output:
-#
-#audio_output {
-# type "pipe"
-# name "my pipe"
-# command "aplay -f cd 2>/dev/null"
-## Or if you're want to use AudioCompress
-# command "AudioCompress -m | aplay -f cd 2>/dev/null"
-## Or to send raw PCM stream through PCM:
-# command "nc example.org 8765"
-# format "44100:16:2"
-#}
-#
-## An example of a null output (for no audio output):
-#
-#audio_output {
-# type "null"
-# name "My Null Output"
-# mixer_type "none" # optional
-#}
-#
-# If MPD has been compiled with libsamplerate support, this setting specifies
-# the sample rate converter to use. Possible values can be found in the
-# mpd.conf man page or the libsamplerate documentation. By default, this is
-# setting is disabled.
-#
-#samplerate_converter "Fastest Sinc Interpolator"
-#
-###############################################################################
-
-
-# Normalization automatic volume adjustments ##################################
-#
-# This setting specifies the type of ReplayGain to use. This setting can have
-# the argument "off", "album", "track" or "auto". "auto" is a special mode that
-# chooses between "track" and "album" depending on the current state of
-# random playback. If random playback is enabled then "track" mode is used.
-# See for more details about ReplayGain.
-# This setting is off by default.
-#
-replaygain "album"
-#
-# This setting sets the pre-amp used for files that have ReplayGain tags. By
-# default this setting is disabled.
-#
-#replaygain_preamp "0"
-#
-# This setting sets the pre-amp used for files that do NOT have ReplayGain tags.
-# By default this setting is disabled.
-#
-#replaygain_missing_preamp "0"
-#
-# This setting enables or disables ReplayGain limiting.
-# MPD calculates actual amplification based on the ReplayGain tags
-# and replaygain_preamp / replaygain_missing_preamp setting.
-# If replaygain_limit is enabled MPD will never amplify audio signal
-# above its original level. If replaygain_limit is disabled such amplification
-# might occur. By default this setting is enabled.
-#
-#replaygain_limit "yes"
-#
-# This setting enables on-the-fly normalization volume adjustment. This will
-# result in the volume of all playing audio to be adjusted so the output has
-# equal "loudness". This setting is disabled by default.
-#
-volume_normalization "yes"
-#
-###############################################################################
-
-
-# Character Encoding ##########################################################
-#
-# If file or directory names do not display correctly for your locale then you
-# may need to modify this setting.
-#
-filesystem_charset "UTF-8"
-#
-# This setting controls the encoding that ID3v1 tags should be converted from.
-#
-# id3v1_encoding "UTF-8"
-#
-###############################################################################
-
-
-# SIDPlay decoder #############################################################
-#
-# songlength_database:
-# Location of your songlengths file, as distributed with the HVSC.
-# The sidplay plugin checks this for matching MD5 fingerprints.
-# See http://www.c64.org/HVSC/DOCUMENTS/Songlengths.faq
-#
-# default_songlength:
-# This is the default playing time in seconds for songs not in the
-# songlength database, or in case you're not using a database.
-# A value of 0 means play indefinitely.
-#
-# filter:
-# Turns the SID filter emulation on or off.
-#
-#decoder {
-# plugin "sidplay"
-# songlength_database "/media/C64Music/DOCUMENTS/Songlengths.txt"
-# default_songlength "120"
-# filter "true"
-#}
-#
-###############################################################################
-
diff --git a/dotfiles/system/.config/mpv/input.conf b/dotfiles/system/.config/mpv/input.conf
deleted file mode 100644
index 937534c..0000000
--- a/dotfiles/system/.config/mpv/input.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-UP add volume +5
-DOWN add volume -5
-- add volume -5
-= add volume 5
diff --git a/dotfiles/system/.config/mpv/mpv.conf b/dotfiles/system/.config/mpv/mpv.conf
deleted file mode 100644
index 52a4082..0000000
--- a/dotfiles/system/.config/mpv/mpv.conf
+++ /dev/null
@@ -1 +0,0 @@
-volume=75
diff --git a/dotfiles/system/.config/ncmpcpp/bindings b/dotfiles/system/.config/ncmpcpp/bindings
deleted file mode 100644
index a7ca6c0..0000000
--- a/dotfiles/system/.config/ncmpcpp/bindings
+++ /dev/null
@@ -1,551 +0,0 @@
-##############################################################
-## This is the example bindings file. Copy it to ##
-## $XDG_CONFIG_HOME/ncmpcpp/bindings or ~/.ncmpcpp/bindings ##
-## and set up your preferences. ##
-##############################################################
-##
-##### General rules #####
-##
-## 1) Because each action has runtime checks whether it's
-## ok to run it, a few actions can be bound to one key.
-## Actions will be bound in order given in configuration
-## file. When a key is pressed, first action in order
-## will test itself whether it's possible to run it. If
-## test succeeds, action is executed and other actions
-## bound to this key are ignored. If it doesn't, next
-## action in order tests itself etc.
-##
-## 2) It's possible to bind more that one action at once
-## to a key. It can be done using the following syntax:
-##
-## def_key "key"
-## action1
-## action2
-## ...
-##
-## This creates a chain of actions. When such chain is
-## executed, each action in chain is run until the end of
-## chain is reached or one of its actions fails to execute
-## due to its requirements not being met. If multiple actions
-## and/or chains are bound to the same key, they will be
-## consecutively run until one of them gets fully executed.
-##
-## 3) When ncmpcpp starts, bindings configuration file is
-## parsed and then ncmpcpp provides "missing pieces"
-## of default keybindings. If you want to disable some
-## bindings, there is a special action called 'dummy'
-## for that purpose. Eg. if you want to disable ability
-## to crop playlists, you need to put the following
-## into configuration file:
-##
-## def_key "C"
-## dummy
-##
-## After that ncmpcpp will not bind any default action
-## to this key.
-##
-## 4) To let you write simple macros, the following special
-## actions are provided:
-##
-## - push_character "character" - pushes given special
-## character into input queue, so it will be immediately
-## picked by ncmpcpp upon next call to readKey function.
-## Accepted values: mouse, up, down, page_up, page_down,
-## home, end, space, enter, insert, delete, left, right,
-## tab, ctrl-a, ctrl-b, ..., ctrl-z, ctrl-[, ctrl-\\,
-## ctrl-], ctrl-^, ctrl-_, f1, f2, ..., f12, backspace.
-## In addition, most of these names can be prefixed with
-## alt-/ctrl-/shift- to be recognized with the appropriate
-## modifier key(s).
-##
-## - push_characters "string" - pushes given string into
-## input queue.
-##
-## - require_runnable "action" - checks whether given action
-## is runnable and fails if it isn't. This is especially
-## useful when mixed with previous two functions. Consider
-## the following macro definition:
-##
-## def_key "key"
-## push_characters "custom_filter"
-## apply_filter
-##
-## If apply_filter can't be currently run, we end up with
-## sequence of characters in input queue which will be
-## treated just as we typed them. This may lead to unexpected
-## results (in this case 'c' will most likely clear current
-## playlist, 'u' will trigger database update, 's' will stop
-## playback etc.). To prevent such thing from happening, we
-## need to change above definition to this one:
-##
-## def_key "key"
-## require_runnable "apply_filter"
-## push_characters "custom_filter"
-## apply_filter
-##
-## Here, first we test whether apply_filter can be actually run
-## before we stuff characters into input queue, so if condition
-## is not met, whole chain is aborted and we're fine.
-##
-## - require_screen "screen" - checks whether given screen is
-## currently active. accepted values: browser, clock, help,
-## media_library, outputs, playlist, playlist_editor,
-## search_engine, tag_editor, visualizer, last_fm, lyrics,
-## selected_items_adder, server_info, song_info,
-## sort_playlist_dialog, tiny_tag_editor.
-##
-## - run_external_command "command" - runs given command using
-## system() function.
-##
-## - run_external_console_command "command" - runs given console
-## command using system() function.
-##
-##
-## 5) In addition to binding to a key, you can also bind actions
-## or chains of actions to a command. If it comes to commands,
-## syntax is very similar to defining keys. Here goes example
-## definition of a command:
-##
-## def_command "quit" [deferred]
-## stop
-## quit
-##
-## If you execute the above command (which can be done by
-## invoking action execute_command, typing 'quit' and pressing
-## enter), ncmpcpp will stop the player and then quit. Note the
-## presence of word 'deferred' enclosed in square brackets. It
-## tells ncmpcpp to wait for confirmation (ie. pressing enter)
-## after you typed quit. Instead of 'deferred', 'immediate'
-## could be used. Then ncmpcpp will not wait for confirmation
-## (enter) and will execute the command the moment it sees it.
-##
-## Note: while command chains are executed, internal environment
-## update (which includes current window refresh and mpd status
-## update) is not performed for performance reasons. However, it
-## may be desirable to do so in some situration. Therefore it's
-## possible to invoke by hand by performing 'update enviroment'
-## action.
-##
-## Note: There is a difference between:
-##
-## def_key "key"
-## action1
-##
-## def_key "key"
-## action2
-##
-## and
-##
-## def_key "key"
-## action1
-## action2
-##
-## First one binds two single actions to the same key whilst
-## second one defines a chain of actions. The behavior of
-## these two is different and is described in (1) and (2).
-##
-## Note: Function def_key accepts non-ascii characters.
-##
-##### List of unbound actions #####
-##
-## The following actions are not bound to any key/command:
-##
-## - set_volume
-## - load
-##
-#
-#def_key "mouse"
-# mouse_event
-#
-#def_key "up"
-# scroll_up
-#
-#def_key "shift-up"
-# select_item
-# scroll_up
-#
-#def_key "down"
-# scroll_down
-#
-#def_key "shift-down"
-# select_item
-# scroll_down
-#
-#def_key "["
-# scroll_up_album
-#
-#def_key "]"
-# scroll_down_album
-#
-#def_key "{"
-# scroll_up_artist
-#
-#def_key "}"
-# scroll_down_artist
-#
-#def_key "page_up"
-# page_up
-#
-#def_key "page_down"
-# page_down
-#
-#def_key "home"
-# move_home
-#
-#def_key "end"
-# move_end
-#
-#def_key "insert"
-# select_item
-#
-#def_key "enter"
-# enter_directory
-#
-#def_key "enter"
-# toggle_output
-#
-#def_key "enter"
-# run_action
-#
-#def_key "enter"
-# play_item
-#
-#def_key "space"
-# add_item_to_playlist
-#
-#def_key "space"
-# toggle_lyrics_update_on_song_change
-#
-#def_key "space"
-# toggle_visualization_type
-#
-#def_key "delete"
-# delete_playlist_items
-#
-#def_key "delete"
-# delete_browser_items
-#
-#def_key "delete"
-# delete_stored_playlist
-#
-#def_key "right"
-# next_column
-#
-#def_key "right"
-# slave_screen
-#
-#def_key "right"
-# volume_up
-#
-#def_key "+"
-# volume_up
-#
-#def_key "left"
-# previous_column
-#
-#def_key "left"
-# master_screen
-#
-#def_key "left"
-# volume_down
-#
-#def_key "-"
-# volume_down
-#
-#def_key ":"
-# execute_command
-#
-#def_key "tab"
-# next_screen
-#
-#def_key "shift-tab"
-# previous_screen
-#
-#def_key "f1"
-# show_help
-#
-#def_key "1"
-# show_playlist
-#
-#def_key "2"
-# show_browser
-#
-#def_key "2"
-# change_browse_mode
-#
-#def_key "3"
-# show_search_engine
-#
-#def_key "3"
-# reset_search_engine
-#
-#def_key "4"
-# show_media_library
-#
-#def_key "4"
-# toggle_media_library_columns_mode
-#
-#def_key "5"
-# show_playlist_editor
-#
-#def_key "6"
-# show_tag_editor
-#
-#def_key "7"
-# show_outputs
-#
-#def_key "8"
-# show_visualizer
-#
-def_key "="
- show_clock
-#
-#def_key "@"
-# show_server_info
-#
-#def_key "s"
-# stop
-#
-#def_key "p"
-# pause
-#
-#def_key ">"
-# next
-#
-#def_key "<"
-# previous
-#
-#def_key "ctrl-h"
-# jump_to_parent_directory
-#
-#def_key "ctrl-h"
-# replay_song
-#
-#def_key "backspace"
-# jump_to_parent_directory
-#
-#def_key "backspace"
-# replay_song
-#
-#def_key "backspace"
-# play
-#
-#def_key "f"
-# seek_forward
-#
-#def_key "b"
-# seek_backward
-#
-#def_key "r"
-# toggle_repeat
-#
-#def_key "z"
-# toggle_random
-#
-#def_key "y"
-# save_tag_changes
-#
-#def_key "y"
-# start_searching
-#
-def_key "t"
- toggle_single
-#
-#def_key "R"
-# toggle_consume
-#
-#def_key "Y"
-# toggle_replay_gain_mode
-#
-#def_key "T"
-# toggle_add_mode
-#
-#def_key "|"
-# toggle_mouse
-#
-#def_key "#"
-# toggle_bitrate_visibility
-#
-#def_key "Z"
-# shuffle
-#
-#def_key "x"
-# toggle_crossfade
-#
-#def_key "X"
-# set_crossfade
-#
-#def_key "u"
-# update_database
-#
-#def_key "ctrl-s"
-# sort_playlist
-#
-#def_key "ctrl-s"
-# toggle_browser_sort_mode
-#
-#def_key "ctrl-s"
-# toggle_media_library_sort_mode
-#
-#def_key "ctrl-r"
-# reverse_playlist
-#
-#def_key "ctrl-f"
-# apply_filter
-#
-#def_key "ctrl-_"
-# select_found_items
-#
-#def_key "/"
-# find
-#
-#def_key "/"
-# find_item_forward
-#
-#def_key "?"
-# find
-#
-#def_key "?"
-# find_item_backward
-#
-#def_key "."
-# next_found_item
-#
-#def_key ","
-# previous_found_item
-#
-#def_key "w"
-# toggle_find_mode
-#
-#def_key "e"
-# edit_song
-#
-#def_key "e"
-# edit_library_tag
-#
-#def_key "e"
-# edit_library_album
-#
-#def_key "e"
-# edit_directory_name
-#
-#def_key "e"
-# edit_playlist_name
-#
-#def_key "e"
-# edit_lyrics
-#
-def_key "i"
- show_song_info
-#
-#def_key "I"
-# show_artist_info
-#
-#def_key "g"
-# jump_to_position_in_song
-#
-def_key "l"
- show_lyrics
-#
-#def_key "ctrl-v"
-# select_range
-#
-#def_key "v"
-# reverse_selection
-#
-#def_key "V"
-# remove_selection
-#
-#def_key "B"
-# select_album
-#
-#def_key "a"
-# add_selected_items
-#
-#def_key "c"
-# clear_playlist
-#
-#def_key "c"
-# clear_main_playlist
-#
-#def_key "C"
-# crop_playlist
-#
-#def_key "C"
-# crop_main_playlist
-#
-#def_key "m"
-# move_sort_order_up
-#
-def_key "shift-up"
- move_selected_items_up
-#
-#def_key "n"
-# move_sort_order_down
-#
-def_key "shift-down"
- move_selected_items_down
-#
-#def_key "M"
-# move_selected_items_to
-#
-#def_key "A"
-# add
-#
-def_key "S"
- save_playlist
-#
-#def_key "o"
-# jump_to_playing_song
-#
-#def_key "G"
-# jump_to_browser
-#
-#def_key "G"
-# jump_to_playlist_editor
-#
-#def_key "~"
-# jump_to_media_library
-#
-#def_key "E"
-# jump_to_tag_editor
-#
-#def_key "U"
-# toggle_playing_song_centering
-#
-#def_key "P"
-# toggle_display_mode
-#
-#def_key "\\"
-# toggle_interface
-#
-#def_key "!"
-# toggle_separators_between_albums
-#
-#def_key "L"
-# toggle_lyrics_fetcher
-#
-#def_key "F"
-# fetch_lyrics_in_background
-#
-#def_key "alt-l"
-# toggle_fetching_lyrics_in_background
-#
-#def_key "ctrl-l"
-# toggle_screen_lock
-#
-#def_key "`"
-# toggle_library_tag_type
-#
-#def_key "`"
-# refetch_lyrics
-#
-#def_key "`"
-# add_random_items
-#
-#def_key "ctrl-p"
-# set_selected_items_priority
-#
-#def_key "q"
-# quit
-#
diff --git a/dotfiles/system/.config/ncmpcpp/config b/dotfiles/system/.config/ncmpcpp/config
deleted file mode 100644
index 6520d5a..0000000
--- a/dotfiles/system/.config/ncmpcpp/config
+++ /dev/null
@@ -1,71 +0,0 @@
-# Connection
-mpd_host = "127.0.0.1"
-# mpd_host = "/home/cjennings/.config/mpd/socket"
-mpd_port = "6600"
-mpd_music_dir = "/home/cjennings/music"
-mpd_connection_timeout = "10"
-mpd_crossfade_time = "1"
-
-# Visualizer
-visualizer_data_source = "/tmp/mpd.fifo"
-visualizer_output_name = "FIFO"
-visualizer_in_stereo = "yes"
-visualizer_type = "wave_filled"
-visualizer_color = 246,245,244,243,242,241,240,239,238,237,236,235
-visualizer_look = "|â—‹"
-
-# Columns
-song_columns_list_format = "(3f)[239]{} (35)[246]{t|f} (30)[blue]{a} (30)[green]{b} (5f)[240]{l}"
-song_list_format = "{$5 %a$9 $1│$9 $8%t$9 }|{ $8%f$9}$R{$5%b $7}"
-song_status_format = "{{{$5%a$9}} $8-$9 {$2%t$9}|{$0%f$9}{ $8-$9 $3%b$9{ $8-$9 $5%y$9}}}"
-song_library_format = "{%n $8-$9 }{%t}|{%f}"
-now_playing_prefix = "$8$b ➤ "
-browser_playlist_prefix = "playlist"
-selected_item_prefix = "$5"
-selected_item_suffix = "$9"
-song_window_title_format = "{%t}|{%f} - {%a}"
-
-# Various
-playlist_show_remaining_time = "no"
-playlist_shorten_total_times = "yes"
-playlist_separate_albums = "no"
-playlist_display_mode = "columns"
-browser_display_mode = "columns"
-search_engine_display_mode = "columns"
-discard_colors_if_item_is_selected = "no"
-incremental_seeking = "yes"
-seek_time = "1"
-autocenter_mode = "yes"
-centered_cursor = "yes"
-progressbar_look = "─╼─"
-progressbar_color = 240
-progressbar_elapsed_color = white
-user_interface = "classic"
-header_visibility = "no"
-titles_visibility = "no"
-header_text_scrolling = "yes"
-cyclic_scrolling = "no"
-lines_scrolled = "2"
-follow_now_playing_lyrics = "yes"
-show_hidden_files_in_local_browser = "no"
-jump_to_now_playing_song_at_start = "yes"
-clock_display_seconds = "no"
-display_volume_level = "no"
-display_bitrate = "yes"
-display_remaining_time = "no"
-regular_expressions = "extended"
-ignore_leading_the = "no"
-block_search_constraints_change_if_items_found = "yes"
-mouse_support = "yes"
-mouse_list_scroll_whole_page = "yes"
-external_editor = "vim"
-use_console_editor = "yes"
-colors_enabled = "yes"
-empty_tag_color = "white"
-header_window_color = "yellow"
-state_line_color = "black"
-state_flags_color = "black"
-main_window_color = 243
-statusbar_color = "yellow"
-active_window_border = "yellow"
-
diff --git a/dotfiles/system/.config/nitrogen/bg-saved.cfg b/dotfiles/system/.config/nitrogen/bg-saved.cfg
deleted file mode 100644
index eccaecb..0000000
--- a/dotfiles/system/.config/nitrogen/bg-saved.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-[xin_-1]
-file=/home/cjennings/pictures/wallpaper/zendopeak.jpg
-mode=5
-bgcolor=#000000
diff --git a/dotfiles/system/.config/picom.conf b/dotfiles/system/.config/picom.conf
deleted file mode 100644
index 0b65df7..0000000
--- a/dotfiles/system/.config/picom.conf
+++ /dev/null
@@ -1,56 +0,0 @@
-# opacity-rule = [
-# "85:class_g = 'XTerm'",
-# "85:class_g = 'Alacritty'",
-# "85:class_g = 'xterm-kitty'",
-# "85:class_g = 'URxvt'",
-# "85:class_g = 'tabbed'",
-# ];
-# "85:class_g = 'st-256color'",
-# "85:class_g = 'Emacs'",
-
-# Blur
-blur:
-{
- method = "dual_kawase";
- strength = 2;
-}
-
-wintypes:
-{
- normal = { blur-background = true; };
- splash = { blur-background = false; };
-};
-
-# Fading
-fading = false;
-fade-in-step = 0.07;
-fade-out-step = 0.07;
-fade-exclude = [ ];
-
-# Other
-corner-radius = 10.0;
-round-borders = 1;
-mark-wmwin-focused = true;
-mark-ovredir-focused = true;
-detect-rounded-corners = true;
-rounded-corners-exclude = [
- "class_g = 'dwm'",
- "class_g = 'dwmsystray'",
- "window_type = 'dock'"
- ];
-detect-client-opacity = true;
-
-vsync = true;
-dbe = false;
-unredir-if-possible = true;
-detect-transient = true;
-detect-client-leader = true;
-invert-color-include = [ ];
-
-# GLX backend
-backend = "glx";
-glx-no-stencil = true;
-glx-copy-from-front = false;
-use-damage = true
-glx-no-rebind-pixmap = true;
-
diff --git a/dotfiles/system/.config/pychess/config b/dotfiles/system/.config/pychess/config
deleted file mode 100644
index 694298a..0000000
--- a/dotfiles/system/.config/pychess/config
+++ /dev/null
@@ -1,213 +0,0 @@
-[General]
-soundcombo0 = 3
-soundcombo1 = 3
-soundcombo2 = 3
-soundcombo3 = 3
-soundcombo4 = 3
-soundcombo5 = 3
-soundcombo6 = 3
-soundcombo7 = 3
-soundcombo8 = 3
-soundcombo9 = 3
-soundcombo10 = 3
-soundcombo11 = 3
-soundcombo12 = 3
-sounduri0 = file:/usr/share/pychess/sounds/move1.ogg
-sounduri1 = file:/usr/share/pychess/sounds/check1.ogg
-sounduri2 = file:/usr/share/pychess/sounds/capture1.ogg
-sounduri3 = file:/usr/share/pychess/sounds/start1.ogg
-sounduri4 = file:/usr/share/pychess/sounds/win1.ogg
-sounduri5 = file:/usr/share/pychess/sounds/lose1.ogg
-sounduri6 = file:/usr/share/pychess/sounds/draw1.ogg
-sounduri7 = file:/usr/share/pychess/sounds/obs_mov.ogg
-sounduri8 = file:/usr/share/pychess/sounds/obs_end.ogg
-sounduri9 = file:/usr/share/pychess/sounds/alarm.ogg
-sounduri10 = file:/usr/share/pychess/sounds/invalid.ogg
-sounduri11 = file:/usr/share/pychess/sounds/success.ogg
-sounduri12 = file:/usr/share/pychess/sounds/choice.ogg
-ics_combo = 0
-autologin = False
-categorycombo = 0
-max_log_files = 10
-hint_mode = False
-spy_mode = False
-show_sidepanels = True
-autocallflag = True
-tips_seed = 468535751
-tips_index = 3
-firstname = Craig Jennings
-secondname = Whomever
-showemt = False
-showeval = True
-showblunder = True
-hidetabs = True
-closeall = False
-facetoface = False
-scorelinearscale = False
-showcaptured = True
-figuresinnotation = False
-moveanimation = True
-noanimation = False
-autopromote = False
-autorotate = False
-showficsgameno = False
-fullanimation = False
-showcords = False
-drawgrid = False
-activatesupportalgorithm = False
-autosave = True
-autosaveformat = cjennings
-saveemt = True
-saveeval = True
-saveratingchange = True
-indentpgn = True
-saveowngames = False
-max_analysis_spin = 3
-max_depth_spin = 20
-infinite_analysis = False
-infinite_depth = True
-opening_check = False
-book_depth_max = 13
-endgame_check = False
-online_egtb_check = True
-analyzer_check = True
-inv_analyzer_check = False
-alarm_spin = 15
-usesounds = False
-newgametasker_playercombo = 1
-taskerskillslider = 2.0
-ana_combobox = c72ee03eee276a3a8e142ed144b4c77b
-inv_ana_combobox = c72ee03eee276a3a8e142ed144b4c77b
-tipofthedaywindow_width = 693
-tipofthedaywindow_height = 373
-tipofthedaywindow_x = 778
-tipofthedaywindow_y = 562
-externalsdialogwindow_width = 1193
-externalsdialogwindow_height = 371
-externalsdialogwindow_x = 528
-externalsdialogwindow_y = 563
-mainwindow_width = 2256
-mainwindow_height = 1471
-mainwindow_x = 0
-mainwindow_y = 33
-download_scoutfish = True
-opening_file_entry = /usr/share/pychess/pychess_book.bin
-book_exact_match = True
-egtb_path = /usr/share/pychess
-welcome_image = /usr/share/pychess/glade/background.jpg
-board_style = 2
-board_frame = 5
-lightcolour = #444444
-darkcolour = #252525
-piecetheme = Merida_new
-autosavepath = /home/cjennings/documents/chessdata
-preferencesdialogwindow_width = 1102
-preferencesdialogwindow_height = 1031
-preferencesdialogwindow_x = 574
-preferencesdialogwindow_y = 233
-show_tip_at_startup = False
-dont_show_externals_at_startup = False
-ngblitz min = 5
-ngblitz moves = 0
-ngblitz gain = 0
-ngrapid min = 15
-ngrapid moves = 0
-ngrapid gain = 5
-ngnormal min = 45
-ngnormal moves = 0
-ngnormal gain = 15
-ngclassical min = 3
-ngclassical moves = 40
-ngclassical gain = 0
-ngvariant1 = 3
-ngvariant2 = 23
-whiteplayercombobox = 0
-blackplayercombobox = 1
-skillslider1 = 20
-skillslider2 = 4.0
-notimeradio = True
-blitzradio = False
-rapidradio = 0
-normalradio = False
-classicalradio = False
-playnormalradio = 0
-playvariant1radio = 0
-playvariant2radio = 0
-numberoffingers = 2
-seek1radio = 0
-seek2radio = 0
-seek3radio = 0
-challenge1radio = 0
-challenge2radio = 0
-challenge3radio = 0
-untimedcheck-1 = False
-minutesspin-1 = 15
-gainspin-1 = 10
-strengthcheck-1 = True
-chainalignment-1 = True
-ratingcenterslider-1 = 40
-toleranceslider-1 = 8
-tolerancehbox-1 = False
-nocolorradio-1 = True
-whitecolorradio-1 = False
-blackcolorradio-1 = False
-variantcombo-1 = 4
-novariantradio-1 = True
-variantradio-1 = False
-ratedgamecheck-1 = False
-manualacceptcheck-1 = False
-untimedcheck-2 = False
-minutesspin-2 = 10
-gainspin-2 = 0
-strengthcheck-2 = True
-chainalignment-2 = True
-ratingcenterslider-2 = 40
-toleranceslider-2 = 8
-tolerancehbox-2 = False
-nocolorradio-2 = True
-whitecolorradio-2 = False
-blackcolorradio-2 = False
-variantcombo-2 = 3
-novariantradio-2 = True
-variantradio-2 = False
-ratedgamecheck-2 = False
-manualacceptcheck-2 = False
-untimedcheck-3 = False
-minutesspin-3 = 2
-gainspin-3 = 12
-strengthcheck-3 = True
-chainalignment-3 = True
-ratingcenterslider-3 = 40
-toleranceslider-3 = 8
-tolerancehbox-3 = False
-nocolorradio-3 = True
-whitecolorradio-3 = False
-blackcolorradio-3 = False
-variantcombo-3 = 23
-novariantradio-3 = True
-variantradio-3 = False
-ratedgamecheck-3 = False
-manualacceptcheck-3 = False
-chat_paned_position = 306
-standard_toggle = True
-blitz_toggle = True
-lightning_toggle = True
-variant_toggle = True
-registered_toggle = True
-guest_toggle = True
-computer_toggle = True
-titled_toggle = True
-standard_toggle1 = True
-blitz_toggle1 = True
-lightning_toggle1 = True
-variant_toggle1 = True
-computer_toggle1 = True
-download_chess_db = True
-download_timestamp = True
-
-[FICS]
-asguestcheck = True
-timesealcheck = True
-
-[ICC]
-
diff --git a/dotfiles/system/.config/pychess/engines.json b/dotfiles/system/.config/pychess/engines.json
deleted file mode 100644
index 913a9be..0000000
--- a/dotfiles/system/.config/pychess/engines.json
+++ /dev/null
@@ -1,526 +0,0 @@
-[
- {
- "analyze": true,
- "command": "/usr/lib/python3.13/site-packages/pychess/Players/PyChess.py",
- "comment": "",
- "country": "dk",
- "level": 5,
- "md5": "be6e594623ce6b20024914bcffba3f66",
- "name": "PyChess.py",
- "options": [
- {
- "default": false,
- "name": "Ponder",
- "type": "check",
- "value": false
- },
- {
- "default": 0,
- "max": 100,
- "min": 0,
- "name": "skipPruneChance",
- "type": "spin",
- "value": 0
- }
- ],
- "protocol": "xboard",
- "recheck": false,
- "variants": [
- "normal",
- "wildcastle",
- "nocastle",
- "fischerandom",
- "crazyhouse",
- "light-brigade",
- "losers",
- "suicide",
- "giveaway",
- "horde",
- "atomic",
- "racingkings",
- "seirawan",
- "kingofthehill",
- "3check",
- "placement",
- "asean",
- "cambodian",
- "makruk",
- "sittuyin"
- ],
- "vm_args": [
- "-u"
- ],
- "vm_command": "/usr/bin/python",
- "vm_name": "python"
- },
- {
- "analyze": true,
- "command": "/usr/bin/critter",
- "comment": "",
- "country": "sk",
- "level": 20,
- "md5": "854b376c8e7b3405b5e4f7cef8420204",
- "name": "critter",
- "options": [
- {
- "default": 64,
- "max": 8192,
- "min": 8,
- "name": "Hash",
- "type": "spin"
- },
- {
- "default": false,
- "name": "Ponder",
- "type": "check"
- },
- {
- "default": true,
- "name": "OwnBook",
- "type": "check"
- },
- {
- "default": "book.cbk",
- "name": "Book File",
- "type": "text"
- },
- {
- "default": false,
- "name": "UCI_Chess960",
- "type": "check"
- },
- {
- "default": 1,
- "max": 100,
- "min": 1,
- "name": "MultiPV",
- "type": "spin"
- },
- {
- "default": 20,
- "max": 32,
- "min": 1,
- "name": "Threads",
- "type": "spin"
- },
- {
- "default": 5,
- "max": 15,
- "min": 4,
- "name": "Split Depth",
- "type": "spin"
- },
- {
- "default": "/gtb",
- "name": "GaviotaTbPath",
- "type": "text"
- },
- {
- "default": 32,
- "max": 256,
- "min": 4,
- "name": "GaviotaTbCache",
- "type": "spin"
- },
- {
- "choices": [
- "uncompressed",
- "cp1",
- "cp2",
- "cp3",
- "cp4"
- ],
- "default": "cp4",
- "name": "GaviotaTbCompression",
- "type": "combo"
- },
- {
- "choices": [
- "Disable",
- "Only At Root",
- "Everywhere"
- ],
- "default": "Only At Root",
- "name": "Tablebase Usage",
- "type": "combo"
- },
- {
- "name": "Clear Hash",
- "type": "button"
- },
- {
- "default": false,
- "name": "Use Session File",
- "type": "check"
- },
- {
- "default": "session.csf",
- "name": "Session File",
- "type": "text"
- },
- {
- "default": 32,
- "max": 1024,
- "min": 2,
- "name": "SF Size",
- "type": "spin"
- },
- {
- "default": 8,
- "max": 32,
- "min": 2,
- "name": "SF Write Depth",
- "type": "spin"
- },
- {
- "default": 0,
- "max": 32,
- "min": 0,
- "name": "SF Material Limit",
- "type": "spin"
- },
- {
- "default": 0,
- "max": 999,
- "min": 0,
- "name": "SF Move Limit",
- "type": "spin"
- },
- {
- "name": "Clear SF",
- "type": "button"
- },
- {
- "default": false,
- "name": "Resolve Score Drops",
- "type": "check"
- },
- {
- "default": 32,
- "max": 100,
- "min": 0,
- "name": "King Safety Weight",
- "type": "spin"
- }
- ],
- "protocol": "uci",
- "recheck": false
- },
- {
- "analyze": true,
- "command": "/usr/bin/fruit",
- "comment": "",
- "country": "fr",
- "level": 5,
- "md5": "d401d07d0b5c41cbf8be63574a9214ca",
- "name": "fruit",
- "options": [
- {
- "default": "book_small.bin",
- "name": "BookFile",
- "type": "text",
- "value": "book_small.bin"
- },
- {
- "default": 50,
- "max": 500,
- "min": 0,
- "name": "Delta Margin",
- "type": "spin",
- "value": 50
- },
- {
- "default": false,
- "name": "Delta Pruning",
- "type": "check",
- "value": false
- },
- {
- "default": 100,
- "max": 500,
- "min": 0,
- "name": "Futility Margin",
- "type": "spin",
- "value": 100
- },
- {
- "default": false,
- "name": "Futility Pruning",
- "type": "check",
- "value": false
- },
- {
- "default": 16,
- "max": 1024,
- "min": 4,
- "name": "Hash",
- "type": "spin",
- "value": 16
- },
- {
- "default": true,
- "name": "History Pruning",
- "type": "check",
- "value": true
- },
- {
- "default": 60,
- "max": 100,
- "min": 0,
- "name": "History Threshold",
- "type": "spin",
- "value": 60
- },
- {
- "default": 100,
- "max": 400,
- "min": 0,
- "name": "King Safety",
- "type": "spin",
- "value": 100
- },
- {
- "default": 100,
- "max": 400,
- "min": 0,
- "name": "Material",
- "type": "spin",
- "value": 100
- },
- {
- "choices": [
- "Always",
- "Fail High",
- "Never"
- ],
- "default": "Fail High",
- "name": "NullMove Pruning",
- "type": "combo",
- "value": "Fail High"
- },
- {
- "default": 3,
- "max": 3,
- "min": 1,
- "name": "NullMove Reduction",
- "type": "spin",
- "value": 3
- },
- {
- "default": true,
- "name": "OwnBook",
- "type": "check",
- "value": true
- },
- {
- "default": 100,
- "max": 400,
- "min": 0,
- "name": "Passed Pawns",
- "type": "spin",
- "value": 100
- },
- {
- "default": 100,
- "max": 400,
- "min": 0,
- "name": "Pawn Structure",
- "type": "spin",
- "value": 100
- },
- {
- "default": 100,
- "max": 400,
- "min": 0,
- "name": "Piece Activity",
- "type": "spin",
- "value": 100
- },
- {
- "default": false,
- "name": "Ponder",
- "type": "check",
- "value": false
- },
- {
- "default": 1,
- "max": 2,
- "min": 0,
- "name": "Quiescence Check Plies",
- "type": "spin",
- "value": 1
- },
- {
- "default": 5,
- "max": 6,
- "min": 1,
- "name": "Verification Reduction",
- "type": "spin",
- "value": 5
- },
- {
- "choices": [
- "Always",
- "Endgame",
- "Never"
- ],
- "default": "Endgame",
- "name": "Verification Search",
- "type": "combo",
- "value": "Endgame"
- }
- ],
- "protocol": "uci",
- "recheck": false,
- "workingDirectory": "/usr/bin"
- },
- {
- "analyze": true,
- "command": "/usr/bin/stockfish",
- "comment": "",
- "country": "no",
- "level": 20,
- "md5": "c72ee03eee276a3a8e142ed144b4c77b",
- "name": "stockfish",
- "options": [
- {
- "name": "Clear Hash",
- "type": "button"
- },
- {
- "default": "",
- "name": "Debug Log File",
- "type": "text",
- "value": ""
- },
- {
- "default": "nn-1c0000000000.nnue",
- "name": "EvalFile",
- "type": "text",
- "value": "nn-1c0000000000.nnue"
- },
- {
- "default": "nn-37f18f62d772.nnue",
- "name": "EvalFileSmall",
- "type": "text",
- "value": "nn-37f18f62d772.nnue"
- },
- {
- "default": 16,
- "max": 33554432,
- "min": 1,
- "name": "Hash",
- "type": "spin",
- "value": 16
- },
- {
- "default": 10,
- "max": 5000,
- "min": 0,
- "name": "Move Overhead",
- "type": "spin",
- "value": 10
- },
- {
- "default": 1,
- "max": 256,
- "min": 1,
- "name": "MultiPV",
- "type": "spin",
- "value": 1
- },
- {
- "default": 0,
- "max": 10000,
- "min": 0,
- "name": "nodestime",
- "type": "spin",
- "value": 0
- },
- {
- "default": "auto",
- "name": "NumaPolicy",
- "type": "text",
- "value": "auto"
- },
- {
- "default": false,
- "name": "Ponder",
- "type": "check",
- "value": false
- },
- {
- "default": 20,
- "max": 20,
- "min": 0,
- "name": "Skill Level",
- "type": "spin",
- "value": 20
- },
- {
- "default": true,
- "name": "Syzygy50MoveRule",
- "type": "check",
- "value": true
- },
- {
- "default": "",
- "name": "SyzygyPath",
- "type": "text",
- "value": ""
- },
- {
- "default": 1,
- "max": 100,
- "min": 1,
- "name": "SyzygyProbeDepth",
- "type": "spin",
- "value": 1
- },
- {
- "default": 7,
- "max": 7,
- "min": 0,
- "name": "SyzygyProbeLimit",
- "type": "spin",
- "value": 7
- },
- {
- "default": 1,
- "max": 1024,
- "min": 1,
- "name": "Threads",
- "type": "spin",
- "value": 1
- },
- {
- "default": false,
- "name": "UCI_Chess960",
- "type": "check",
- "value": false
- },
- {
- "default": 1320,
- "max": 3190,
- "min": 1320,
- "name": "UCI_Elo",
- "type": "spin",
- "value": 1320
- },
- {
- "default": false,
- "name": "UCI_LimitStrength",
- "type": "check",
- "value": false
- },
- {
- "default": false,
- "name": "UCI_ShowWDL",
- "type": "check",
- "value": false
- }
- ],
- "protocol": "uci",
- "recheck": false
- }
-]
\ No newline at end of file
diff --git a/dotfiles/system/.config/pychess/pydock.xml b/dotfiles/system/.config/pychess/pydock.xml
deleted file mode 100644
index ef523db..0000000
--- a/dotfiles/system/.config/pychess/pydock.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/dotfiles/system/.config/qalculate/qalculate-gtk.cfg b/dotfiles/system/.config/qalculate/qalculate-gtk.cfg
deleted file mode 100644
index 22d7f45..0000000
--- a/dotfiles/system/.config/qalculate/qalculate-gtk.cfg
+++ /dev/null
@@ -1,329 +0,0 @@
-
-[General]
-version=5.9.0
-allow_multiple_instances=-1
-width=1167
-always_on_top=0
-enable_tooltips=1
-error_info_shown=1
-save_mode_on_exit=1
-save_definitions_on_exit=1
-save_history_separately=0
-auto_update_exchange_rates=-1
-clear_history_on_exit=0
-history_expression_type=2
-use_custom_history_font=0
-use_custom_expression_font=0
-replace_expression=0
-enable_completion=1
-enable_completion2=1
-completion_min=1
-completion_min2=1
-completion_delay=0
-use_custom_status_font=0
-vertical_button_padding=-1
-horizontal_button_padding=-1
-use_custom_keypad_font=0
-latest_button_currency=USD
-use_custom_result_font=0
-continuous_conversion=1
-set_missing_prefixes=0
-show_bases_keypad=1
-keep_function_dialog_open=0
-ignore_locale=0
-load_global_definitions=1
-local_currency_conversion=1
-use_binary_prefixes=0
-check_version=0
-show_keypad=1
-show_history=0
-history_height=0
-minimal_width=500
-show_stack=1
-show_convert=0
-persistent_keypad=0
-minimal_mode=0
-rpn_keys=1
-display_expression_status=1
-parsed_expression_in_resultview=0
-calculate_as_you_type_history_delay=2000
-use_unicode_signs=1
-lower_case_numbers=0
-duodecimal_symbols=0
-exp_display=3
-imaginary_j=0
-base_display=1
-twos_complement=1
-hexadecimal_twos_complement=0
-twos_complement_input=0
-hexadecimal_twos_complement_input=0
-spell_out_logical_operators=1
-caret_as_xor=0
-close_with_esc=-1
-digit_grouping=1
-copy_ascii=0
-copy_ascii_without_units=0
-decimal_comma=-1
-dot_as_separator=0
-comma_as_separator=1
-use_custom_application_font=0
-multiplication_sign=2
-division_sign=1
-expression_history=125×7×6
-expression_history=7600×4
-expression_history=7600X4
-expression_history=10619.57−3000
-expression_history=1991−1964
-expression_history=(5×75)+150
-expression_history=5×75
-expression_history=100−35
-expression_history=262690−165393.50
-expression_history=212770+24960
-expression_history=212770−24960
-expression_history=49920/2
-expression_history=262690−212770
-expression_history=68/24
-expression_history=168/197
-expression_history=197/168
-expression_history=262690−19100
-expression_history=38200/2
-expression_history=$38,200/2
-expression_history=30000/197000
-expression_history=197250+6360+6140+3840
-expression_history=4550+4050
-expression_history=4,500+4060
-expression_history=490×6
-expression_history=7688.16×4
-expression_history=3277.52+46.85
-expression_history=3310.94+109.04
-expression_history=3277.52+46.86
-expression_history=30 + 15 + 5 + 10 + 30 + 30
-expression_history=30 +5+15+30+20+20
-expression_history=30 + 5 + 15 + 30 + 20 + 5 + 5 + 20
-expression_history=1024×16
-expression_history=3278×12
-expression_history=1026×16
-expression_history=96×2
-history_time=1768330887
-history_expression=125×7×6
-history_parse=125 × 7 × 6
-history_result=5250
-history_time=1767984868
-history_expression=7600×4
-history_parse=7600 × 4
-history_result=30 400
-history_time=1767984861
-history_expression=7600X4
-history_parse=7600
-history_error=Trailing characters "X4" (not a valid variable/function/unit) in number "7600X4" were ignored.
-history_result=7600
-history_time=1767984665
-history_expression=10619.57−3000
-history_parse=10 619.57 − 3000
-history_result=7619.57
-history_time=1767807514
-history_expression=1991−1964
-history_parse=1991 − 1964
-history_result=27
-history_time=1766252840
-history_expression=(5×75)+150
-history_parse=(5 × 75) + 150
-history_result=525
-history_time=1766252831
-history_expression=5×75
-history_parse=5 × 75
-history_result=375
-history_time=1764874377
-history_expression=100−35
-history_parse=100 − 35
-history_result=65
-history_time=1762832920
-history_expression=262690−165393.50
-history_parse=262 690 − 165 393.5
-history_result=97 296.5
-history_time=1762825204
-history_expression=212770+24960
-history_parse=212 770 + 24 960
-history_result=237 730
-history_time=1762825199
-history_expression=212770−24960
-history_parse=212 770 − 24 960
-history_result=187 810
-history_time=1762825172
-history_expression=49920/2
-history_parse=49 920 ∕ 2
-history_result=24 960
-history_time=1762823711
-history_expression=262690−212770
-history_parse=262 690 − 212 770
-history_result=49 920
-history_time=1762731979
-history_expression=68/24
-history_parse=68 ∕ 24
-history_result_approximate=2.833 333 333
-history_time=1762176587
-history_expression=168/197
-history_parse=168 ∕ 197
-history_result_approximate=0.852 791 878 2
-history_time=1762176579
-history_expression=197/168
-history_parse=197 ∕ 168
-history_result_approximate=1.172 619 048
-history_time=1761510158
-history_expression=262690−19100
-history_parse=262 690 − 19 100
-history_result=243 590
-history_time=1761508703
-history_expression=38200/2
-history_parse=38 200 ∕ 2
-history_result=19 100
-history_time=1761508667
-history_expression=$38,200/2
-history_parse=(USD × 38 200) ∕ 2
-history_result=$19 100
-history_time=1761449979
-history_expression=30000/197000
-history_parse=30 000 ∕ 197 000
-history_result_approximate=0.152 284 264 0
-history_time=1761245928
-history_expression=197250+6360+6140+3840
-history_parse=197 250 + 6360 + 6140 + 3840
-history_result=213 590
-history_time=1761167849
-history_expression=4550+4050
-history_parse=4550 + 4050
-history_result=8600
-history_time=1761167803
-history_expression=4,500+4060
-history_parse=4500 + 4060
-history_result=8560
-history_time=1752350332
-history_expression=490×6
-history_parse=490 × 6
-history_result=2940
-history_time=1752334636
-history_expression=7688.16×4
-history_parse=7688.16 × 4
-history_result=30 752.64
-history_time=1751310907
-history_expression=3277.52+46.85
-history_parse=3277.52 + 46.85
-history_result=3324.37
-history_time=1751310861
-history_expression=3310.94+109.04
-history_parse=3310.94 + 109.04
-history_result=3419.98
-history_time=1751310628
-history_expression=3277.52+46.86
-history_parse=3277.52 + 46.86
-history_result=3324.38
-history_time=1750342970
-history_expression=30 + 15 + 5 + 10 + 30 + 30
-history_parse=30 + 15 + 5 + 10 + 30 + 30
-history_result=120
-history_time=1750342955
-history_expression=30 +5+15+30+20+20
-history_parse=30 + 5 + 15 + 30 + 20 + 20
-history_result=120
-history_time=1750342806
-history_expression=30 + 15 + 5 + 10 + 30 + 30
-history_parse=30 + 15 + 5 + 10 + 30 + 30
-history_result=120
-history_time=1750342726
-history_expression=30 + 5 + 15 + 30 + 20 + 5 + 5 + 20
-history_parse=30 + 5 + 15 + 30 + 20 + 5 + 5 + 20
-history_result=130
-history_time=1749150165
-history_expression=1024×16
-history_parse=1024 × 16
-history_result=16 384
-history_time=1748972784
-history_expression=3278×12
-history_parse=3278 × 12
-history_result=39 336
-history_time=1748621453
-history_expression=1026×16
-history_parse=1026 × 16
-history_result=16 416
-history_time=1747760701
-history_expression=96×2
-history_parse=96 × 2
-history_result=192
-recent_functions=
-recent_variables=
-recent_units=
-
-[Mode]
-min_deci=0
-use_min_deci=0
-max_deci=2
-use_max_deci=0
-precision=10
-interval_arithmetic=1
-interval_display=0
-min_exp=-1
-negative_exponents=0
-sort_minus_last=1
-number_fraction_format=0
-complex_number_form=0
-use_prefixes=1
-use_prefixes_for_all_units=0
-use_prefixes_for_currencies=0
-abbreviate_names=1
-all_prefixes_enabled=0
-denominator_prefix_enabled=1
-place_units_separately=1
-auto_post_conversion=3
-mixed_units_conversion=3
-number_base=10
-number_base_expression=10
-read_precision=0
-assume_denominators_nonzero=1
-warn_about_denominators_assumed_nonzero=1
-structuring=1
-angle_unit=1
-functions_enabled=1
-variables_enabled=1
-calculate_functions=1
-calculate_variables=1
-variable_units_enabled=1
-sync_units=1
-unknownvariables_enabled=0
-units_enabled=1
-allow_complex=1
-allow_infinite=1
-indicate_infinite_series=0
-show_ending_zeroes=1
-rounding_mode=0
-approximation=1
-interval_calculation=1
-concise_uncertainty_input=0
-calculate_as_you_type=0
-in_rpn_mode=0
-chain_mode=0
-limit_implicit_multiplication=0
-parsing_mode=0
-simplified_percentage=-1
-spacious=1
-excessive_parenthesis=0
-visible_keypad=0
-short_multiplication=1
-default_assumption_type=4
-default_assumption_sign=0
-
-[Plotting]
-plot_legend_placement=2
-plot_style=0
-plot_smoothing=0
-plot_display_grid=1
-plot_full_border=0
-plot_min=0
-plot_max=10
-plot_step=1
-plot_sampling_rate=1001
-plot_use_sampling_rate=1
-plot_variable=x
-plot_rows=0
-plot_type=0
-plot_color=1
-plot_linewidth=2
diff --git a/dotfiles/system/.config/qt5ct/qt5ct.conf b/dotfiles/system/.config/qt5ct/qt5ct.conf
deleted file mode 100644
index 56a88db..0000000
--- a/dotfiles/system/.config/qt5ct/qt5ct.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-[Appearance]
-color_scheme_path=/usr/share/qt5ct/colors/darker.conf
-custom_palette=true
-icon_theme=Papirus-Dark
-standard_dialogs=default
-style=Adwaita-Dark
-
-[Fonts]
-fixed="Cantarell,11,-1,5,50,0,0,0,0,0"
-general="Cantarell,11,-1,5,50,0,0,0,0,0"
-
-[Interface]
-activate_item_on_single_click=1
-buttonbox_layout=0
-cursor_flash_time=1000
-dialog_buttons_have_icons=1
-double_click_interval=400
-gui_effects=@Invalid()
-keyboard_scheme=2
-menus_have_icons=true
-show_shortcuts_in_context_menus=true
-stylesheets=@Invalid()
-toolbutton_style=4
-underline_shortcut=1
-wheel_scroll_lines=3
-
-[SettingsWindow]
-geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x11\0\0\x4g\0\0\x2\xf0\0\0\0\0\0\0\0\x11\0\0\x4g\0\0\x2\xf0\0\0\0\0\0\0\0\0\x4h\0\0\0\0\0\0\0\x11\0\0\x4g\0\0\x2\xf0)
-
-[Troubleshooting]
-force_raster_widgets=1
-ignored_applications=@Invalid()
diff --git a/dotfiles/system/.config/qt6ct/qt6ct.conf b/dotfiles/system/.config/qt6ct/qt6ct.conf
deleted file mode 100644
index 496c09d..0000000
--- a/dotfiles/system/.config/qt6ct/qt6ct.conf
+++ /dev/null
@@ -1,29 +0,0 @@
-[Appearance]
-color_scheme_path=/usr/share/qt6ct/colors/darker.conf
-custom_palette=true
-icon_theme=Papirus-Dark
-standard_dialogs=default
-style=Adwaita-Dark
-
-[Fonts]
-fixed="Cantarell,11,-1,5,50,0,0,0,0,0"
-general="Cantarell,11,-1,5,50,0,0,0,0,0"
-
-[Interface]
-activate_item_on_single_click=1
-buttonbox_layout=0
-cursor_flash_time=1000
-dialog_buttons_have_icons=1
-double_click_interval=400
-gui_effects=@Invalid()
-keyboard_scheme=2
-menus_have_icons=true
-show_shortcuts_in_context_menus=true
-stylesheets=@Invalid()
-toolbutton_style=4
-underline_shortcut=1
-wheel_scroll_lines=3
-
-[Troubleshooting]
-force_raster_widgets=1
-ignored_applications=@Invalid()
diff --git a/dotfiles/system/.config/ranger/commands.py b/dotfiles/system/.config/ranger/commands.py
deleted file mode 100644
index 97b7909..0000000
--- a/dotfiles/system/.config/ranger/commands.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# This is a sample commands.py. You can add your own commands here.
-#
-# Please refer to commands_full.py for all the default commands and a complete
-# documentation. Do NOT add them all here, or you may end up with defunct
-# commands when upgrading ranger.
-
-# A simple command for demonstration purposes follows.
-# -----------------------------------------------------------------------------
-
-from __future__ import (absolute_import, division, print_function)
-
-# You can import any python module as needed.
-import os
-
-# You always need to import ranger.api.commands here to get the Command class:
-from ranger.api.commands import Command
-
-
-# Any class that is a subclass of "Command" will be integrated into ranger as a
-# command. Try typing ":my_edit" in ranger!
-class my_edit(Command):
- # The so-called doc-string of the class will be visible in the built-in
- # help that is accessible by typing "?c" inside ranger.
- """:my_edit
-
- A sample command for demonstration purposes that opens a file in an editor.
- """
-
- # The execute method is called when you run this command in ranger.
- def execute(self):
- # self.arg(1) is the first (space-separated) argument to the function.
- # This way you can write ":my_edit somefilename".
- if self.arg(1):
- # self.rest(1) contains self.arg(1) and everything that follows
- target_filename = self.rest(1)
- else:
- # self.fm is a ranger.core.filemanager.FileManager object and gives
- # you access to internals of ranger.
- # self.fm.thisfile is a ranger.container.file.File object and is a
- # reference to the currently selected file.
- target_filename = self.fm.thisfile.path
-
- # This is a generic function to print text in ranger.
- self.fm.notify("Let's edit the file " + target_filename + "!")
-
- # Using bad=True in fm.notify allows you to print error messages:
- if not os.path.exists(target_filename):
- self.fm.notify("The given file does not exist!", bad=True)
- return
-
- # This executes a function from ranger.core.acitons, a module with a
- # variety of subroutines that can help you construct commands.
- # Check out the source, or run "pydoc ranger.core.actions" for a list.
- self.fm.edit_file(target_filename)
-
- # The tab method is called when you press tab, and should return a list of
- # suggestions that the user will tab through.
- # tabnum is 1 for and -1 for by default
- def tab(self, tabnum):
- # This is a generic tab-completion function that iterates through the
- # content of the current directory.
- return self._tab_directory_content()
diff --git a/dotfiles/system/.config/ranger/commands_full.py b/dotfiles/system/.config/ranger/commands_full.py
deleted file mode 100644
index d177203..0000000
--- a/dotfiles/system/.config/ranger/commands_full.py
+++ /dev/null
@@ -1,1836 +0,0 @@
-# -*- coding: utf-8 -*-
-# This file is part of ranger, the console file manager.
-# This configuration file is licensed under the same terms as ranger.
-# ===================================================================
-#
-# NOTE: If you copied this file to /etc/ranger/commands_full.py or
-# ~/.config/ranger/commands_full.py, then it will NOT be loaded by ranger,
-# and only serve as a reference.
-#
-# ===================================================================
-# This file contains ranger's commands.
-# It's all in python; lines beginning with # are comments.
-#
-# Note that additional commands are automatically generated from the methods
-# of the class ranger.core.actions.Actions.
-#
-# You can customize commands in the files /etc/ranger/commands.py (system-wide)
-# and ~/.config/ranger/commands.py (per user).
-# They have the same syntax as this file. In fact, you can just copy this
-# file to ~/.config/ranger/commands_full.py with
-# `ranger --copy-config=commands_full' and make your modifications, don't
-# forget to rename it to commands.py. You can also use
-# `ranger --copy-config=commands' to copy a short sample commands.py that
-# has everything you need to get started.
-# But make sure you update your configs when you update ranger.
-#
-# ===================================================================
-# Every class defined here which is a subclass of `Command' will be used as a
-# command in ranger. Several methods are defined to interface with ranger:
-# execute(): called when the command is executed.
-# cancel(): called when closing the console.
-# tab(tabnum): called when is pressed.
-# quick(): called after each keypress.
-#
-# tab() argument tabnum is 1 for and -1 for by default
-#
-# The return values for tab() can be either:
-# None: There is no tab completion
-# A string: Change the console to this string
-# A list/tuple/generator: cycle through every item in it
-#
-# The return value for quick() can be:
-# False: Nothing happens
-# True: Execute the command afterwards
-#
-# The return value for execute() and cancel() doesn't matter.
-#
-# ===================================================================
-# Commands have certain attributes and methods that facilitate parsing of
-# the arguments:
-#
-# self.line: The whole line that was written in the console.
-# self.args: A list of all (space-separated) arguments to the command.
-# self.quantifier: If this command was mapped to the key "X" and
-# the user pressed 6X, self.quantifier will be 6.
-# self.arg(n): The n-th argument, or an empty string if it doesn't exist.
-# self.rest(n): The n-th argument plus everything that followed. For example,
-# if the command was "search foo bar a b c", rest(2) will be "bar a b c"
-# self.start(n): Anything before the n-th argument. For example, if the
-# command was "search foo bar a b c", start(2) will be "search foo"
-#
-# ===================================================================
-# And this is a little reference for common ranger functions and objects:
-#
-# self.fm: A reference to the "fm" object which contains most information
-# about ranger.
-# self.fm.notify(string): Print the given string on the screen.
-# self.fm.notify(string, bad=True): Print the given string in RED.
-# self.fm.reload_cwd(): Reload the current working directory.
-# self.fm.thisdir: The current working directory. (A File object.)
-# self.fm.thisfile: The current file. (A File object too.)
-# self.fm.thistab.get_selection(): A list of all selected files.
-# self.fm.execute_console(string): Execute the string as a ranger command.
-# self.fm.open_console(string): Open the console with the given string
-# already typed in for you.
-# self.fm.move(direction): Moves the cursor in the given direction, which
-# can be something like down=3, up=5, right=1, left=1, to=6, ...
-#
-# File objects (for example self.fm.thisfile) have these useful attributes and
-# methods:
-#
-# tfile.path: The path to the file.
-# tfile.basename: The base name only.
-# tfile.load_content(): Force a loading of the directories content (which
-# obviously works with directories only)
-# tfile.is_directory: True/False depending on whether it's a directory.
-#
-# For advanced commands it is unavoidable to dive a bit into the source code
-# of ranger.
-# ===================================================================
-
-from __future__ import (absolute_import, division, print_function)
-
-from collections import deque
-import os
-import re
-
-from ranger.api.commands import Command
-
-
-class alias(Command):
- """:alias
-
- Copies the oldcommand as newcommand.
- """
-
- context = 'browser'
- resolve_macros = False
-
- def execute(self):
- if not self.arg(1) or not self.arg(2):
- self.fm.notify('Syntax: alias ', bad=True)
- return
-
- self.fm.commands.alias(self.arg(1), self.rest(2))
-
-
-class echo(Command):
- """:echo
-
- Display the text in the statusbar.
- """
-
- def execute(self):
- self.fm.notify(self.rest(1))
-
-
-class cd(Command):
- """:cd [-r]
-
- The cd command changes the directory.
- If the path is a file, selects that file.
- The command 'cd -' is equivalent to typing ``.
- Using the option "-r" will get you to the real path.
- """
-
- def execute(self):
- if self.arg(1) == '-r':
- self.shift()
- destination = os.path.realpath(self.rest(1))
- if os.path.isfile(destination):
- self.fm.select_file(destination)
- return
- else:
- destination = self.rest(1)
-
- if not destination:
- destination = '~'
-
- if destination == '-':
- self.fm.enter_bookmark('`')
- else:
- self.fm.cd(destination)
-
- def _tab_args(self):
- # dest must be rest because path could contain spaces
- if self.arg(1) == '-r':
- start = self.start(2)
- dest = self.rest(2)
- else:
- start = self.start(1)
- dest = self.rest(1)
-
- if dest:
- head, tail = os.path.split(os.path.expanduser(dest))
- if head:
- dest_exp = os.path.join(os.path.normpath(head), tail)
- else:
- dest_exp = tail
- else:
- dest_exp = ''
- return (start, dest_exp, os.path.join(self.fm.thisdir.path, dest_exp),
- dest.endswith(os.path.sep))
-
- @staticmethod
- def _tab_paths(dest, dest_abs, ends_with_sep):
- if not dest:
- try:
- return next(os.walk(dest_abs))[1], dest_abs
- except (OSError, StopIteration):
- return [], ''
-
- if ends_with_sep:
- try:
- return [os.path.join(dest, path) for path in next(os.walk(dest_abs))[1]], ''
- except (OSError, StopIteration):
- return [], ''
-
- return None, None
-
- def _tab_match(self, path_user, path_file):
- if self.fm.settings.cd_tab_case == 'insensitive':
- path_user = path_user.lower()
- path_file = path_file.lower()
- elif self.fm.settings.cd_tab_case == 'smart' and path_user.islower():
- path_file = path_file.lower()
- return path_file.startswith(path_user)
-
- def _tab_normal(self, dest, dest_abs):
- dest_dir = os.path.dirname(dest)
- dest_base = os.path.basename(dest)
-
- try:
- dirnames = next(os.walk(os.path.dirname(dest_abs)))[1]
- except (OSError, StopIteration):
- return [], ''
-
- return [os.path.join(dest_dir, d) for d in dirnames if self._tab_match(dest_base, d)], ''
-
- def _tab_fuzzy_match(self, basepath, tokens):
- """ Find directories matching tokens recursively """
- if not tokens:
- tokens = ['']
- paths = [basepath]
- while True:
- token = tokens.pop()
- matches = []
- for path in paths:
- try:
- directories = next(os.walk(path))[1]
- except (OSError, StopIteration):
- continue
- matches += [os.path.join(path, d) for d in directories
- if self._tab_match(token, d)]
- if not tokens or not matches:
- return matches
- paths = matches
-
- return None
-
- def _tab_fuzzy(self, dest, dest_abs):
- tokens = []
- basepath = dest_abs
- while True:
- basepath_old = basepath
- basepath, token = os.path.split(basepath)
- if basepath == basepath_old:
- break
- if os.path.isdir(basepath_old) and not token.startswith('.'):
- basepath = basepath_old
- break
- tokens.append(token)
-
- paths = self._tab_fuzzy_match(basepath, tokens)
- if not os.path.isabs(dest):
- paths_rel = basepath
- paths = [os.path.relpath(path, paths_rel) for path in paths]
- else:
- paths_rel = ''
- return paths, paths_rel
-
- def tab(self, tabnum):
- from os.path import sep
-
- start, dest, dest_abs, ends_with_sep = self._tab_args()
-
- paths, paths_rel = self._tab_paths(dest, dest_abs, ends_with_sep)
- if paths is None:
- if self.fm.settings.cd_tab_fuzzy:
- paths, paths_rel = self._tab_fuzzy(dest, dest_abs)
- else:
- paths, paths_rel = self._tab_normal(dest, dest_abs)
-
- paths.sort()
-
- if self.fm.settings.cd_bookmarks:
- paths[0:0] = [
- os.path.relpath(v.path, paths_rel) if paths_rel else v.path
- for v in self.fm.bookmarks.dct.values() for path in paths
- if v.path.startswith(os.path.join(paths_rel, path) + sep)
- ]
-
- if not paths:
- return None
- if len(paths) == 1:
- return start + paths[0] + sep
- return [start + dirname for dirname in paths]
-
-
-class chain(Command):
- """:chain ; ; ...
-
- Calls multiple commands at once, separated by semicolons.
- """
-
- def execute(self):
- if not self.rest(1).strip():
- self.fm.notify('Syntax: chain ; ; ...', bad=True)
- return
- for command in [s.strip() for s in self.rest(1).split(";")]:
- self.fm.execute_console(command)
-
-
-class shell(Command):
- escape_macros_for_shell = True
-
- def execute(self):
- if self.arg(1) and self.arg(1)[0] == '-':
- flags = self.arg(1)[1:]
- command = self.rest(2)
- else:
- flags = ''
- command = self.rest(1)
-
- if command:
- self.fm.execute_command(command, flags=flags)
-
- def tab(self, tabnum):
- from ranger.ext.get_executables import get_executables
- if self.arg(1) and self.arg(1)[0] == '-':
- command = self.rest(2)
- else:
- command = self.rest(1)
- start = self.line[0:len(self.line) - len(command)]
-
- try:
- position_of_last_space = command.rindex(" ")
- except ValueError:
- return (start + program + ' ' for program
- in get_executables() if program.startswith(command))
- if position_of_last_space == len(command) - 1:
- selection = self.fm.thistab.get_selection()
- if len(selection) == 1:
- return self.line + selection[0].shell_escaped_basename + ' '
- return self.line + '%s '
-
- before_word, start_of_word = self.line.rsplit(' ', 1)
- return (before_word + ' ' + file.shell_escaped_basename
- for file in self.fm.thisdir.files or []
- if file.shell_escaped_basename.startswith(start_of_word))
-
-
-class open_with(Command):
-
- def execute(self):
- app, flags, mode = self._get_app_flags_mode(self.rest(1))
- self.fm.execute_file(
- files=[f for f in self.fm.thistab.get_selection()],
- app=app,
- flags=flags,
- mode=mode)
-
- def tab(self, tabnum):
- return self._tab_through_executables()
-
- def _get_app_flags_mode(self, string): # pylint: disable=too-many-branches,too-many-statements
- """Extracts the application, flags and mode from a string.
-
- examples:
- "mplayer f 1" => ("mplayer", "f", 1)
- "atool 4" => ("atool", "", 4)
- "p" => ("", "p", 0)
- "" => None
- """
-
- app = ''
- flags = ''
- mode = 0
- split = string.split()
-
- if len(split) == 1:
- part = split[0]
- if self._is_app(part):
- app = part
- elif self._is_flags(part):
- flags = part
- elif self._is_mode(part):
- mode = part
-
- elif len(split) == 2:
- part0 = split[0]
- part1 = split[1]
-
- if self._is_app(part0):
- app = part0
- if self._is_flags(part1):
- flags = part1
- elif self._is_mode(part1):
- mode = part1
- elif self._is_flags(part0):
- flags = part0
- if self._is_mode(part1):
- mode = part1
- elif self._is_mode(part0):
- mode = part0
- if self._is_flags(part1):
- flags = part1
-
- elif len(split) >= 3:
- part0 = split[0]
- part1 = split[1]
- part2 = split[2]
-
- if self._is_app(part0):
- app = part0
- if self._is_flags(part1):
- flags = part1
- if self._is_mode(part2):
- mode = part2
- elif self._is_mode(part1):
- mode = part1
- if self._is_flags(part2):
- flags = part2
- elif self._is_flags(part0):
- flags = part0
- if self._is_mode(part1):
- mode = part1
- elif self._is_mode(part0):
- mode = part0
- if self._is_flags(part1):
- flags = part1
-
- return app, flags, int(mode)
-
- def _is_app(self, arg):
- return not self._is_flags(arg) and not arg.isdigit()
-
- @staticmethod
- def _is_flags(arg):
- from ranger.core.runner import ALLOWED_FLAGS
- return all(x in ALLOWED_FLAGS for x in arg)
-
- @staticmethod
- def _is_mode(arg):
- return all(x in '0123456789' for x in arg)
-
-
-class set_(Command):
- """:set =
-
- Gives an option a new value.
-
- Use `:set !` to toggle or cycle it, e.g. `:set flush_input!`
- """
- name = 'set' # don't override the builtin set class
-
- def execute(self):
- name = self.arg(1)
- name, value, _, toggle = self.parse_setting_line_v2()
- if toggle:
- self.fm.toggle_option(name)
- else:
- self.fm.set_option_from_string(name, value)
-
- def tab(self, tabnum): # pylint: disable=too-many-return-statements
- from ranger.gui.colorscheme import get_all_colorschemes
- name, value, name_done = self.parse_setting_line()
- settings = self.fm.settings
- if not name:
- return sorted(self.firstpart + setting for setting in settings)
- if not value and not name_done:
- return sorted(self.firstpart + setting for setting in settings
- if setting.startswith(name))
- if not value:
- value_completers = {
- "colorscheme":
- # Cycle through colorschemes when name, but no value is specified
- lambda: sorted(self.firstpart + colorscheme for colorscheme
- in get_all_colorschemes(self.fm)),
-
- "column_ratios":
- lambda: self.firstpart + ",".join(map(str, settings[name])),
- }
-
- def default_value_completer():
- return self.firstpart + str(settings[name])
-
- return value_completers.get(name, default_value_completer)()
- if bool in settings.types_of(name):
- if 'true'.startswith(value.lower()):
- return self.firstpart + 'True'
- if 'false'.startswith(value.lower()):
- return self.firstpart + 'False'
- # Tab complete colorscheme values if incomplete value is present
- if name == "colorscheme":
- return sorted(self.firstpart + colorscheme for colorscheme
- in get_all_colorschemes(self.fm) if colorscheme.startswith(value))
- return None
-
-
-class setlocal(set_):
- """:setlocal path= =
-
- Gives an option a new value.
- """
- PATH_RE_DQUOTED = re.compile(r'^setlocal\s+path="(.*?)"')
- PATH_RE_SQUOTED = re.compile(r"^setlocal\s+path='(.*?)'")
- PATH_RE_UNQUOTED = re.compile(r'^path=(.*?)$')
-
- def _re_shift(self, match):
- if not match:
- return None
- path = os.path.expanduser(match.group(1))
- for _ in range(len(path.split())):
- self.shift()
- return path
-
- def execute(self):
- path = self._re_shift(self.PATH_RE_DQUOTED.match(self.line))
- if path is None:
- path = self._re_shift(self.PATH_RE_SQUOTED.match(self.line))
- if path is None:
- path = self._re_shift(self.PATH_RE_UNQUOTED.match(self.arg(1)))
- if path is None and self.fm.thisdir:
- path = self.fm.thisdir.path
- if not path:
- return
-
- name, value, _ = self.parse_setting_line()
- self.fm.set_option_from_string(name, value, localpath=path)
-
-
-class setintag(set_):
- """:setintag =
-
- Sets an option for directories that are tagged with a specific tag.
- """
-
- def execute(self):
- tags = self.arg(1)
- self.shift()
- name, value, _ = self.parse_setting_line()
- self.fm.set_option_from_string(name, value, tags=tags)
-
-
-class default_linemode(Command):
-
- def execute(self):
- from ranger.container.fsobject import FileSystemObject
-
- if len(self.args) < 2:
- self.fm.notify(
- "Usage: default_linemode [path= | tag=] ", bad=True)
-
- # Extract options like "path=..." or "tag=..." from the command line
- arg1 = self.arg(1)
- method = "always"
- argument = None
- if arg1.startswith("path="):
- method = "path"
- argument = re.compile(arg1[5:])
- self.shift()
- elif arg1.startswith("tag="):
- method = "tag"
- argument = arg1[4:]
- self.shift()
-
- # Extract and validate the line mode from the command line
- lmode = self.rest(1)
- if lmode not in FileSystemObject.linemode_dict:
- self.fm.notify(
- "Invalid linemode: %s; should be %s" % (
- lmode, "/".join(FileSystemObject.linemode_dict)),
- bad=True,
- )
-
- # Add the prepared entry to the fm.default_linemodes
- entry = [method, argument, lmode]
- self.fm.default_linemodes.appendleft(entry)
-
- # Redraw the columns
- if self.fm.ui.browser:
- for col in self.fm.ui.browser.columns:
- col.need_redraw = True
-
- def tab(self, tabnum):
- return (self.arg(0) + " " + lmode
- for lmode in self.fm.thisfile.linemode_dict.keys()
- if lmode.startswith(self.arg(1)))
-
-
-class quit(Command): # pylint: disable=redefined-builtin
- """:quit
-
- Closes the current tab, if there's only one tab.
- Otherwise quits if there are no tasks in progress.
- """
- def _exit_no_work(self):
- if self.fm.loader.has_work():
- self.fm.notify('Not quitting: Tasks in progress: Use `quit!` to force quit')
- else:
- self.fm.exit()
-
- def execute(self):
- if len(self.fm.tabs) >= 2:
- self.fm.tab_close()
- else:
- self._exit_no_work()
-
-
-class quit_bang(Command):
- """:quit!
-
- Closes the current tab, if there's only one tab.
- Otherwise force quits immediately.
- """
- name = 'quit!'
- allow_abbrev = False
-
- def execute(self):
- if len(self.fm.tabs) >= 2:
- self.fm.tab_close()
- else:
- self.fm.exit()
-
-
-class quitall(Command):
- """:quitall
-
- Quits if there are no tasks in progress.
- """
- def _exit_no_work(self):
- if self.fm.loader.has_work():
- self.fm.notify('Not quitting: Tasks in progress: Use `quitall!` to force quit')
- else:
- self.fm.exit()
-
- def execute(self):
- self._exit_no_work()
-
-
-class quitall_bang(Command):
- """:quitall!
-
- Force quits immediately.
- """
- name = 'quitall!'
- allow_abbrev = False
-
- def execute(self):
- self.fm.exit()
-
-
-class terminal(Command):
- """:terminal
-
- Spawns an "x-terminal-emulator" starting in the current directory.
- """
-
- def execute(self):
- from ranger.ext.get_executables import get_term
- self.fm.run(get_term(), flags='f')
-
-
-class delete(Command):
- """:delete
-
- Tries to delete the selection or the files passed in arguments (if any).
- The arguments use a shell-like escaping.
-
- "Selection" is defined as all the "marked files" (by default, you
- can mark files with space or v). If there are no marked files,
- use the "current file" (where the cursor is)
-
- When attempting to delete non-empty directories or multiple
- marked files, it will require a confirmation.
- """
-
- allow_abbrev = False
- escape_macros_for_shell = True
-
- def execute(self):
- import shlex
- from functools import partial
-
- def is_directory_with_files(path):
- return os.path.isdir(path) and not os.path.islink(path) and len(os.listdir(path)) > 0
-
- if self.rest(1):
- files = shlex.split(self.rest(1))
- many_files = (len(files) > 1 or is_directory_with_files(files[0]))
- else:
- cwd = self.fm.thisdir
- tfile = self.fm.thisfile
- if not cwd or not tfile:
- self.fm.notify("Error: no file selected for deletion!", bad=True)
- return
-
- # relative_path used for a user-friendly output in the confirmation.
- files = [f.relative_path for f in self.fm.thistab.get_selection()]
- many_files = (cwd.marked_items or is_directory_with_files(tfile.path))
-
- confirm = self.fm.settings.confirm_on_delete
- if confirm != 'never' and (confirm != 'multiple' or many_files):
- self.fm.ui.console.ask(
- "Confirm deletion of: %s (y/N)" % ', '.join(files),
- partial(self._question_callback, files),
- ('n', 'N', 'y', 'Y'),
- )
- else:
- # no need for a confirmation, just delete
- self.fm.delete(files)
-
- def tab(self, tabnum):
- return self._tab_directory_content()
-
- def _question_callback(self, files, answer):
- if answer == 'y' or answer == 'Y':
- self.fm.delete(files)
-
-
-class jump_non(Command):
- """:jump_non [-FLAGS...]
-
- Jumps to first non-directory if highlighted file is a directory and vice versa.
-
- Flags:
- -r Jump in reverse order
- -w Wrap around if reaching end of filelist
- """
- def __init__(self, *args, **kwargs):
- super(jump_non, self).__init__(*args, **kwargs)
-
- flags, _ = self.parse_flags()
- self._flag_reverse = 'r' in flags
- self._flag_wrap = 'w' in flags
-
- @staticmethod
- def _non(fobj, is_directory):
- return fobj.is_directory if not is_directory else not fobj.is_directory
-
- def execute(self):
- tfile = self.fm.thisfile
- passed = False
- found_before = None
- found_after = None
- for fobj in self.fm.thisdir.files[::-1] if self._flag_reverse else self.fm.thisdir.files:
- if fobj.path == tfile.path:
- passed = True
- continue
-
- if passed:
- if self._non(fobj, tfile.is_directory):
- found_after = fobj.path
- break
- elif not found_before and self._non(fobj, tfile.is_directory):
- found_before = fobj.path
-
- if found_after:
- self.fm.select_file(found_after)
- elif self._flag_wrap and found_before:
- self.fm.select_file(found_before)
-
-
-class mark_tag(Command):
- """:mark_tag []
-
- Mark all tags that are tagged with either of the given tags.
- When leaving out the tag argument, all tagged files are marked.
- """
- do_mark = True
-
- def execute(self):
- cwd = self.fm.thisdir
- tags = self.rest(1).replace(" ", "")
- if not self.fm.tags or not cwd.files:
- return
- for fileobj in cwd.files:
- try:
- tag = self.fm.tags.tags[fileobj.realpath]
- except KeyError:
- continue
- if not tags or tag in tags:
- cwd.mark_item(fileobj, val=self.do_mark)
- self.fm.ui.status.need_redraw = True
- self.fm.ui.need_redraw = True
-
-
-class console(Command):
- """:console
-
- Open the console with the given command.
- """
-
- def execute(self):
- position = None
- if self.arg(1)[0:2] == '-p':
- try:
- position = int(self.arg(1)[2:])
- except ValueError:
- pass
- else:
- self.shift()
- self.fm.open_console(self.rest(1), position=position)
-
-
-class load_copy_buffer(Command):
- """:load_copy_buffer
-
- Load the copy buffer from datadir/copy_buffer
- """
- copy_buffer_filename = 'copy_buffer'
-
- def execute(self):
- import sys
- from ranger.container.file import File
- from os.path import exists
- fname = self.fm.datapath(self.copy_buffer_filename)
- unreadable = IOError if sys.version_info[0] < 3 else OSError
- try:
- fobj = open(fname, 'r')
- except unreadable:
- return self.fm.notify(
- "Cannot open %s" % (fname or self.copy_buffer_filename), bad=True)
-
- self.fm.copy_buffer = set(File(g)
- for g in fobj.read().split("\n") if exists(g))
- fobj.close()
- self.fm.ui.redraw_main_column()
- return None
-
-
-class save_copy_buffer(Command):
- """:save_copy_buffer
-
- Save the copy buffer to datadir/copy_buffer
- """
- copy_buffer_filename = 'copy_buffer'
-
- def execute(self):
- import sys
- fname = None
- fname = self.fm.datapath(self.copy_buffer_filename)
- unwritable = IOError if sys.version_info[0] < 3 else OSError
- try:
- fobj = open(fname, 'w')
- except unwritable:
- return self.fm.notify("Cannot open %s" %
- (fname or self.copy_buffer_filename), bad=True)
- fobj.write("\n".join(fobj.path for fobj in self.fm.copy_buffer))
- fobj.close()
- return None
-
-
-class unmark_tag(mark_tag):
- """:unmark_tag []
-
- Unmark all tags that are tagged with either of the given tags.
- When leaving out the tag argument, all tagged files are unmarked.
- """
- do_mark = False
-
-
-class mkdir(Command):
- """:mkdir
-
- Creates a directory with the name .
- """
-
- def execute(self):
- from os.path import join, expanduser, lexists
- from os import makedirs
-
- dirname = join(self.fm.thisdir.path, expanduser(self.rest(1)))
- if not lexists(dirname):
- makedirs(dirname)
- else:
- self.fm.notify("file/directory exists!", bad=True)
-
- def tab(self, tabnum):
- return self._tab_directory_content()
-
-
-class touch(Command):
- """:touch
-
- Creates a file with the name .
- """
-
- def execute(self):
- from os.path import join, expanduser, lexists
-
- fname = join(self.fm.thisdir.path, expanduser(self.rest(1)))
- if not lexists(fname):
- open(fname, 'a').close()
- else:
- self.fm.notify("file/directory exists!", bad=True)
-
- def tab(self, tabnum):
- return self._tab_directory_content()
-
-
-class edit(Command):
- """:edit
-
- Opens the specified file in vim
- """
-
- def execute(self):
- if not self.arg(1):
- self.fm.edit_file(self.fm.thisfile.path)
- else:
- self.fm.edit_file(self.rest(1))
-
- def tab(self, tabnum):
- return self._tab_directory_content()
-
-
-class eval_(Command):
- """:eval [-q]
-
- Evaluates the python code.
- `fm' is a reference to the FM instance.
- To display text, use the function `p'.
-
- Examples:
- :eval fm
- :eval len(fm.directories)
- :eval p("Hello World!")
- """
- name = 'eval'
- resolve_macros = False
-
- def execute(self):
- # The import is needed so eval() can access the ranger module
- import ranger # NOQA pylint: disable=unused-import,unused-variable
- if self.arg(1) == '-q':
- code = self.rest(2)
- quiet = True
- else:
- code = self.rest(1)
- quiet = False
- global cmd, fm, p, quantifier # pylint: disable=invalid-name,global-variable-undefined
- fm = self.fm
- cmd = self.fm.execute_console
- p = fm.notify
- quantifier = self.quantifier
- try:
- try:
- result = eval(code) # pylint: disable=eval-used
- except SyntaxError:
- exec(code) # pylint: disable=exec-used
- else:
- if result and not quiet:
- p(result)
- except Exception as err: # pylint: disable=broad-except
- fm.notify("The error `%s` was caused by evaluating the "
- "following code: `%s`" % (err, code), bad=True)
-
-
-class rename(Command):
- """:rename
-
- Changes the name of the currently highlighted file to
- """
-
- def execute(self):
- from ranger.container.file import File
- from os import access
-
- new_name = self.rest(1)
-
- if not new_name:
- return self.fm.notify('Syntax: rename ', bad=True)
-
- if new_name == self.fm.thisfile.relative_path:
- return None
-
- if access(new_name, os.F_OK):
- return self.fm.notify("Can't rename: file already exists!", bad=True)
-
- if self.fm.rename(self.fm.thisfile, new_name):
- file_new = File(new_name)
- self.fm.bookmarks.update_path(self.fm.thisfile.path, file_new)
- self.fm.tags.update_path(self.fm.thisfile.path, file_new.path)
- self.fm.thisdir.pointed_obj = file_new
- self.fm.thisfile = file_new
-
- return None
-
- def tab(self, tabnum):
- return self._tab_directory_content()
-
-
-class rename_append(Command):
- """:rename_append [-FLAGS...]
-
- Opens the console with ":rename " with the cursor positioned
- before the file extension.
-
- Flags:
- -a Position before all extensions
- -r Remove everything before extensions
- """
- def __init__(self, *args, **kwargs):
- super(rename_append, self).__init__(*args, **kwargs)
-
- flags, _ = self.parse_flags()
- self._flag_ext_all = 'a' in flags
- self._flag_remove = 'r' in flags
-
- def execute(self):
- from ranger import MACRO_DELIMITER, MACRO_DELIMITER_ESC
-
- tfile = self.fm.thisfile
- relpath = tfile.relative_path.replace(MACRO_DELIMITER, MACRO_DELIMITER_ESC)
- basename = tfile.basename.replace(MACRO_DELIMITER, MACRO_DELIMITER_ESC)
-
- if basename.find('.') <= 0:
- self.fm.open_console('rename ' + relpath)
- return
-
- if self._flag_ext_all:
- pos_ext = re.search(r'[^.]+', basename).end(0)
- else:
- pos_ext = basename.rindex('.')
- pos = len(relpath) - len(basename) + pos_ext
-
- if self._flag_remove:
- relpath = relpath[:-len(basename)] + basename[pos_ext:]
- pos -= pos_ext
-
- self.fm.open_console('rename ' + relpath, position=(7 + pos))
-
-
-class chmod(Command):
- """:chmod
-
- Sets the permissions of the selection to the octal number.
-
- The octal number is between 0 and 777. The digits specify the
- permissions for the user, the group and others.
-
- A 1 permits execution, a 2 permits writing, a 4 permits reading.
- Add those numbers to combine them. So a 7 permits everything.
- """
-
- def execute(self):
- mode_str = self.rest(1)
- if not mode_str:
- if not self.quantifier:
- self.fm.notify("Syntax: chmod ", bad=True)
- return
- mode_str = str(self.quantifier)
-
- try:
- mode = int(mode_str, 8)
- if mode < 0 or mode > 0o777:
- raise ValueError
- except ValueError:
- self.fm.notify("Need an octal number between 0 and 777!", bad=True)
- return
-
- for fobj in self.fm.thistab.get_selection():
- try:
- os.chmod(fobj.path, mode)
- except OSError as ex:
- self.fm.notify(ex)
-
- # reloading directory. maybe its better to reload the selected
- # files only.
- self.fm.thisdir.content_outdated = True
-
-
-class bulkrename(Command):
- """:bulkrename
-
- This command opens a list of selected files in an external editor.
- After you edit and save the file, it will generate a shell script
- which does bulk renaming according to the changes you did in the file.
-
- This shell script is opened in an editor for you to review.
- After you close it, it will be executed.
- """
-
- def execute(self): # pylint: disable=too-many-locals,too-many-statements
- import sys
- import tempfile
- from ranger.container.file import File
- from ranger.ext.shell_escape import shell_escape as esc
- py3 = sys.version_info[0] >= 3
-
- # Create and edit the file list
- filenames = [f.relative_path for f in self.fm.thistab.get_selection()]
- listfile = tempfile.NamedTemporaryFile(delete=False)
- listpath = listfile.name
-
- if py3:
- listfile.write("\n".join(filenames).encode("utf-8"))
- else:
- listfile.write("\n".join(filenames))
- listfile.close()
- self.fm.execute_file([File(listpath)], app='editor')
- listfile = open(listpath, 'r')
- new_filenames = listfile.read().split("\n")
- listfile.close()
- os.unlink(listpath)
- if all(a == b for a, b in zip(filenames, new_filenames)):
- self.fm.notify("No renaming to be done!")
- return
-
- # Generate script
- cmdfile = tempfile.NamedTemporaryFile()
- script_lines = []
- script_lines.append("# This file will be executed when you close the editor.\n")
- script_lines.append("# Please double-check everything, clear the file to abort.\n")
- script_lines.extend("mv -vi -- %s %s\n" % (esc(old), esc(new))
- for old, new in zip(filenames, new_filenames) if old != new)
- script_content = "".join(script_lines)
- if py3:
- cmdfile.write(script_content.encode("utf-8"))
- else:
- cmdfile.write(script_content)
- cmdfile.flush()
-
- # Open the script and let the user review it, then check if the script
- # was modified by the user
- self.fm.execute_file([File(cmdfile.name)], app='editor')
- cmdfile.seek(0)
- script_was_edited = (script_content != cmdfile.read())
-
- # Do the renaming
- self.fm.run(['/bin/sh', cmdfile.name], flags='w')
- cmdfile.close()
-
- # Retag the files, but only if the script wasn't changed during review,
- # because only then we know which are the source and destination files.
- if not script_was_edited:
- tags_changed = False
- for old, new in zip(filenames, new_filenames):
- if old != new:
- oldpath = self.fm.thisdir.path + '/' + old
- newpath = self.fm.thisdir.path + '/' + new
- if oldpath in self.fm.tags:
- old_tag = self.fm.tags.tags[oldpath]
- self.fm.tags.remove(oldpath)
- self.fm.tags.tags[newpath] = old_tag
- tags_changed = True
- if tags_changed:
- self.fm.tags.dump()
- else:
- fm.notify("files have not been retagged")
-
-
-class relink(Command):
- """:relink
-
- Changes the linked path of the currently highlighted symlink to
- """
-
- def execute(self):
- new_path = self.rest(1)
- tfile = self.fm.thisfile
-
- if not new_path:
- return self.fm.notify('Syntax: relink ', bad=True)
-
- if not tfile.is_link:
- return self.fm.notify('%s is not a symlink!' % tfile.relative_path, bad=True)
-
- if new_path == os.readlink(tfile.path):
- return None
-
- try:
- os.remove(tfile.path)
- os.symlink(new_path, tfile.path)
- except OSError as err:
- self.fm.notify(err)
-
- self.fm.reset()
- self.fm.thisdir.pointed_obj = tfile
- self.fm.thisfile = tfile
-
- return None
-
- def tab(self, tabnum):
- if not self.rest(1):
- return self.line + os.readlink(self.fm.thisfile.path)
- return self._tab_directory_content()
-
-
-class help_(Command):
- """:help
-
- Display ranger's manual page.
- """
- name = 'help'
-
- def execute(self):
- def callback(answer):
- if answer == "q":
- return
- elif answer == "m":
- self.fm.display_help()
- elif answer == "c":
- self.fm.dump_commands()
- elif answer == "k":
- self.fm.dump_keybindings()
- elif answer == "s":
- self.fm.dump_settings()
-
- self.fm.ui.console.ask(
- "View [m]an page, [k]ey bindings, [c]ommands or [s]ettings? (press q to abort)",
- callback,
- list("mqkcs")
- )
-
-
-class copymap(Command):
- """:copymap [...]
-
- Copies a "browser" keybinding from to
- """
- context = 'browser'
-
- def execute(self):
- if not self.arg(1) or not self.arg(2):
- return self.fm.notify("Not enough arguments", bad=True)
-
- for arg in self.args[2:]:
- self.fm.ui.keymaps.copy(self.context, self.arg(1), arg)
-
- return None
-
-
-class copypmap(copymap):
- """:copypmap [...]
-
- Copies a "pager" keybinding from to
- """
- context = 'pager'
-
-
-class copycmap(copymap):
- """:copycmap [...]
-
- Copies a "console" keybinding from to
- """
- context = 'console'
-
-
-class copytmap(copymap):
- """:copycmap [...]
-
- Copies a "taskview" keybinding from to
- """
- context = 'taskview'
-
-
-class unmap(Command):
- """:unmap [, ...]
-
- Remove the given "browser" mappings
- """
- context = 'browser'
-
- def execute(self):
- for arg in self.args[1:]:
- self.fm.ui.keymaps.unbind(self.context, arg)
-
-
-class cunmap(unmap):
- """:cunmap [, ...]
-
- Remove the given "console" mappings
- """
- context = 'browser'
-
-
-class punmap(unmap):
- """:punmap [, ...]
-
- Remove the given "pager" mappings
- """
- context = 'pager'
-
-
-class tunmap(unmap):
- """:tunmap [, ...]
-
- Remove the given "taskview" mappings
- """
- context = 'taskview'
-
-
-class map_(Command):
- """:map
-
- Maps a command to a keysequence in the "browser" context.
-
- Example:
- map j move down
- map J move down 10
- """
- name = 'map'
- context = 'browser'
- resolve_macros = False
-
- def execute(self):
- if not self.arg(1) or not self.arg(2):
- self.fm.notify("Syntax: {0} ".format(self.get_name()), bad=True)
- return
-
- self.fm.ui.keymaps.bind(self.context, self.arg(1), self.rest(2))
-
-
-class cmap(map_):
- """:cmap
-
- Maps a command to a keysequence in the "console" context.
-
- Example:
- cmap console_close
- cmap console_type test
- """
- context = 'console'
-
-
-class tmap(map_):
- """:tmap
-
- Maps a command to a keysequence in the "taskview" context.
- """
- context = 'taskview'
-
-
-class pmap(map_):
- """:pmap
-
- Maps a command to a keysequence in the "pager" context.
- """
- context = 'pager'
-
-
-class scout(Command):
- """:scout [-FLAGS...]
-
- Swiss army knife command for searching, traveling and filtering files.
-
- Flags:
- -a Automatically open a file on unambiguous match
- -e Open the selected file when pressing enter
- -f Filter files that match the current search pattern
- -g Interpret pattern as a glob pattern
- -i Ignore the letter case of the files
- -k Keep the console open when changing a directory with the command
- -l Letter skipping; e.g. allow "rdme" to match the file "readme"
- -m Mark the matching files after pressing enter
- -M Unmark the matching files after pressing enter
- -p Permanent filter: hide non-matching files after pressing enter
- -r Interpret pattern as a regular expression pattern
- -s Smart case; like -i unless pattern contains upper case letters
- -t Apply filter and search pattern as you type
- -v Inverts the match
-
- Multiple flags can be combined. For example, ":scout -gpt" would create
- a :filter-like command using globbing.
- """
- # pylint: disable=bad-whitespace
- AUTO_OPEN = 'a'
- OPEN_ON_ENTER = 'e'
- FILTER = 'f'
- SM_GLOB = 'g'
- IGNORE_CASE = 'i'
- KEEP_OPEN = 'k'
- SM_LETTERSKIP = 'l'
- MARK = 'm'
- UNMARK = 'M'
- PERM_FILTER = 'p'
- SM_REGEX = 'r'
- SMART_CASE = 's'
- AS_YOU_TYPE = 't'
- INVERT = 'v'
- # pylint: enable=bad-whitespace
-
- def __init__(self, *args, **kwargs):
- super(scout, self).__init__(*args, **kwargs)
- self._regex = None
- self.flags, self.pattern = self.parse_flags()
-
- def execute(self): # pylint: disable=too-many-branches
- thisdir = self.fm.thisdir
- flags = self.flags
- pattern = self.pattern
- regex = self._build_regex()
- count = self._count(move=True)
-
- self.fm.thistab.last_search = regex
- self.fm.set_search_method(order="search")
-
- if (self.MARK in flags or self.UNMARK in flags) and thisdir.files:
- value = flags.find(self.MARK) > flags.find(self.UNMARK)
- if self.FILTER in flags:
- for fobj in thisdir.files:
- thisdir.mark_item(fobj, value)
- else:
- for fobj in thisdir.files:
- if regex.search(fobj.relative_path):
- thisdir.mark_item(fobj, value)
-
- if self.PERM_FILTER in flags:
- thisdir.filter = regex if pattern else None
-
- # clean up:
- self.cancel()
-
- if self.OPEN_ON_ENTER in flags or \
- (self.AUTO_OPEN in flags and count == 1):
- if pattern == '..':
- self.fm.cd(pattern)
- else:
- self.fm.move(right=1)
- if self.quickly_executed:
- self.fm.block_input(0.5)
-
- if self.KEEP_OPEN in flags and thisdir != self.fm.thisdir:
- # reopen the console:
- if not pattern:
- self.fm.open_console(self.line)
- else:
- self.fm.open_console(self.line[0:-len(pattern)])
-
- if self.quickly_executed and thisdir != self.fm.thisdir and pattern != "..":
- self.fm.block_input(0.5)
-
- def cancel(self):
- self.fm.thisdir.temporary_filter = None
- self.fm.thisdir.refilter()
-
- def quick(self):
- asyoutype = self.AS_YOU_TYPE in self.flags
- if self.FILTER in self.flags:
- self.fm.thisdir.temporary_filter = self._build_regex()
- if self.PERM_FILTER in self.flags and asyoutype:
- self.fm.thisdir.filter = self._build_regex()
- if self.FILTER in self.flags or self.PERM_FILTER in self.flags:
- self.fm.thisdir.refilter()
- if self._count(move=asyoutype) == 1 and self.AUTO_OPEN in self.flags:
- return True
- return False
-
- def tab(self, tabnum):
- self._count(move=True, offset=tabnum)
-
- def _build_regex(self):
- if self._regex is not None:
- return self._regex
-
- frmat = "%s"
- flags = self.flags
- pattern = self.pattern
-
- if pattern == ".":
- return re.compile("")
-
- # Handle carets at start and dollar signs at end separately
- if pattern.startswith('^'):
- pattern = pattern[1:]
- frmat = "^" + frmat
- if pattern.endswith('$'):
- pattern = pattern[:-1]
- frmat += "$"
-
- # Apply one of the search methods
- if self.SM_REGEX in flags:
- regex = pattern
- elif self.SM_GLOB in flags:
- regex = re.escape(pattern).replace("\\*", ".*").replace("\\?", ".")
- elif self.SM_LETTERSKIP in flags:
- regex = ".*".join(re.escape(c) for c in pattern)
- else:
- regex = re.escape(pattern)
-
- regex = frmat % regex
-
- # Invert regular expression if necessary
- if self.INVERT in flags:
- regex = "^(?:(?!%s).)*$" % regex
-
- # Compile Regular Expression
- # pylint: disable=no-member
- options = re.UNICODE
- if self.IGNORE_CASE in flags or self.SMART_CASE in flags and \
- pattern.islower():
- options |= re.IGNORECASE
- # pylint: enable=no-member
- try:
- self._regex = re.compile(regex, options)
- except re.error:
- self._regex = re.compile("")
- return self._regex
-
- def _count(self, move=False, offset=0):
- count = 0
- cwd = self.fm.thisdir
- pattern = self.pattern
-
- if not pattern or not cwd.files:
- return 0
- if pattern == '.':
- return 0
- if pattern == '..':
- return 1
-
- deq = deque(cwd.files)
- deq.rotate(-cwd.pointer - offset)
- i = offset
- regex = self._build_regex()
- for fsobj in deq:
- if regex.search(fsobj.relative_path):
- count += 1
- if move and count == 1:
- cwd.move(to=(cwd.pointer + i) % len(cwd.files))
- self.fm.thisfile = cwd.pointed_obj
- if count > 1:
- return count
- i += 1
-
- return count == 1
-
-
-class narrow(Command):
- """
- :narrow
-
- Show only the files selected right now. If no files are selected,
- disable narrowing.
- """
- def execute(self):
- if self.fm.thisdir.marked_items:
- selection = [f.basename for f in self.fm.thistab.get_selection()]
- self.fm.thisdir.narrow_filter = selection
- else:
- self.fm.thisdir.narrow_filter = None
- self.fm.thisdir.refilter()
-
-
-class filter_inode_type(Command):
- """
- :filter_inode_type [dfl]
-
- Displays only the files of specified inode type. Parameters
- can be combined.
-
- d display directories
- f display files
- l display links
- """
-
- def execute(self):
- if not self.arg(1):
- self.fm.thisdir.inode_type_filter = ""
- else:
- self.fm.thisdir.inode_type_filter = self.arg(1)
- self.fm.thisdir.refilter()
-
-
-class filter_stack(Command):
- """
- :filter_stack ...
-
- Manages the filter stack.
-
- filter_stack add FILTER_TYPE ARGS...
- filter_stack pop
- filter_stack decompose
- filter_stack rotate [N=1]
- filter_stack clear
- filter_stack show
- """
- def execute(self):
- from ranger.core.filter_stack import SIMPLE_FILTERS, FILTER_COMBINATORS
-
- subcommand = self.arg(1)
-
- if subcommand == "add":
- try:
- self.fm.thisdir.filter_stack.append(
- SIMPLE_FILTERS[self.arg(2)](self.rest(3))
- )
- except KeyError:
- FILTER_COMBINATORS[self.arg(2)](self.fm.thisdir.filter_stack)
- elif subcommand == "pop":
- self.fm.thisdir.filter_stack.pop()
- elif subcommand == "decompose":
- inner_filters = self.fm.thisdir.filter_stack.pop().decompose()
- if inner_filters:
- self.fm.thisdir.filter_stack.extend(inner_filters)
- elif subcommand == "clear":
- self.fm.thisdir.filter_stack = []
- elif subcommand == "rotate":
- rotate_by = int(self.arg(2) or 1)
- self.fm.thisdir.filter_stack = (
- self.fm.thisdir.filter_stack[-rotate_by:]
- + self.fm.thisdir.filter_stack[:-rotate_by]
- )
- elif subcommand == "show":
- stack = list(map(str, self.fm.thisdir.filter_stack))
- pager = self.fm.ui.open_pager()
- pager.set_source(["Filter stack: "] + stack)
- pager.move(to=100, percentage=True)
- return
- else:
- self.fm.notify(
- "Unknown subcommand: {}".format(subcommand),
- bad=True
- )
- return
-
- self.fm.thisdir.refilter()
-
-
-class grep(Command):
- """:grep
-
- Looks for a string in all marked files or directories
- """
-
- def execute(self):
- if self.rest(1):
- action = ['grep', '--line-number']
- action.extend(['-e', self.rest(1), '-r'])
- action.extend(f.path for f in self.fm.thistab.get_selection())
- self.fm.execute_command(action, flags='p')
-
-
-class flat(Command):
- """
- :flat
-
- Flattens the directory view up to the specified level.
-
- -1 fully flattened
- 0 remove flattened view
- """
-
- def execute(self):
- try:
- level_str = self.rest(1)
- level = int(level_str)
- except ValueError:
- level = self.quantifier
- if level is None:
- self.fm.notify("Syntax: flat ", bad=True)
- return
- if level < -1:
- self.fm.notify("Need an integer number (-1, 0, 1, ...)", bad=True)
- self.fm.thisdir.unload()
- self.fm.thisdir.flat = level
- self.fm.thisdir.load_content()
-
-# Version control commands
-# --------------------------------
-
-
-class stage(Command):
- """
- :stage
-
- Stage selected files for the corresponding version control system
- """
-
- def execute(self):
- from ranger.ext.vcs import VcsError
-
- if self.fm.thisdir.vcs and self.fm.thisdir.vcs.track:
- filelist = [f.path for f in self.fm.thistab.get_selection()]
- try:
- self.fm.thisdir.vcs.action_add(filelist)
- except VcsError as ex:
- self.fm.notify('Unable to stage files: {0}'.format(ex))
- self.fm.ui.vcsthread.process(self.fm.thisdir)
- else:
- self.fm.notify('Unable to stage files: Not in repository')
-
-
-class unstage(Command):
- """
- :unstage
-
- Unstage selected files for the corresponding version control system
- """
-
- def execute(self):
- from ranger.ext.vcs import VcsError
-
- if self.fm.thisdir.vcs and self.fm.thisdir.vcs.track:
- filelist = [f.path for f in self.fm.thistab.get_selection()]
- try:
- self.fm.thisdir.vcs.action_reset(filelist)
- except VcsError as ex:
- self.fm.notify('Unable to unstage files: {0}'.format(ex))
- self.fm.ui.vcsthread.process(self.fm.thisdir)
- else:
- self.fm.notify('Unable to unstage files: Not in repository')
-
-# Metadata commands
-# --------------------------------
-
-
-class prompt_metadata(Command):
- """
- :prompt_metadata [ [ ...]]
-
- Prompt the user to input metadata for multiple keys in a row.
- """
-
- _command_name = "meta"
- _console_chain = None
-
- def execute(self):
- prompt_metadata._console_chain = self.args[1:]
- self._process_command_stack()
-
- def _process_command_stack(self):
- if prompt_metadata._console_chain:
- key = prompt_metadata._console_chain.pop()
- self._fill_console(key)
- else:
- for col in self.fm.ui.browser.columns:
- col.need_redraw = True
-
- def _fill_console(self, key):
- metadata = self.fm.metadata.get_metadata(self.fm.thisfile.path)
- if key in metadata and metadata[key]:
- existing_value = metadata[key]
- else:
- existing_value = ""
- text = "%s %s %s" % (self._command_name, key, existing_value)
- self.fm.open_console(text, position=len(text))
-
-
-class meta(prompt_metadata):
- """
- :meta []
-
- Change metadata of a file. Deletes the key if value is empty.
- """
-
- def execute(self):
- key = self.arg(1)
- update_dict = dict()
- update_dict[key] = self.rest(2)
- selection = self.fm.thistab.get_selection()
- for fobj in selection:
- self.fm.metadata.set_metadata(fobj.path, update_dict)
- self._process_command_stack()
-
- def tab(self, tabnum):
- key = self.arg(1)
- metadata = self.fm.metadata.get_metadata(self.fm.thisfile.path)
- if key in metadata and metadata[key]:
- return [" ".join([self.arg(0), self.arg(1), metadata[key]])]
- return [self.arg(0) + " " + k for k in sorted(metadata)
- if k.startswith(self.arg(1))]
-
-
-class linemode(default_linemode):
- """
- :linemode
-
- Change what is displayed as a filename.
-
- - "mode" may be any of the defined linemodes (see: ranger.core.linemode).
- "normal" is mapped to "filename".
- """
-
- def execute(self):
- mode = self.arg(1)
-
- if mode == "normal":
- from ranger.core.linemode import DEFAULT_LINEMODE
- mode = DEFAULT_LINEMODE
-
- if mode not in self.fm.thisfile.linemode_dict:
- self.fm.notify("Unhandled linemode: `%s'" % mode, bad=True)
- return
-
- self.fm.thisdir.set_linemode_of_children(mode)
-
- # Ask the browsercolumns to redraw
- for col in self.fm.ui.browser.columns:
- col.need_redraw = True
-
-
-class yank(Command):
- """:yank [name|dir|path]
-
- Copies the file's name (default), directory or path into both the primary X
- selection and the clipboard.
- """
-
- modes = {
- '': 'basename',
- 'name_without_extension': 'basename_without_extension',
- 'name': 'basename',
- 'dir': 'dirname',
- 'path': 'path',
- }
-
- def execute(self):
- import subprocess
-
- def clipboards():
- from ranger.ext.get_executables import get_executables
- clipboard_managers = {
- 'xclip': [
- ['xclip'],
- ['xclip', '-selection', 'clipboard'],
- ],
- 'xsel': [
- ['xsel'],
- ['xsel', '-b'],
- ],
- 'pbcopy': [
- ['pbcopy'],
- ],
- }
- ordered_managers = ['pbcopy', 'xclip', 'xsel']
- executables = get_executables()
- for manager in ordered_managers:
- if manager in executables:
- return clipboard_managers[manager]
- return []
-
- clipboard_commands = clipboards()
-
- mode = self.modes[self.arg(1)]
- selection = self.get_selection_attr(mode)
-
- new_clipboard_contents = "\n".join(selection)
- for command in clipboard_commands:
- process = subprocess.Popen(command, universal_newlines=True,
- stdin=subprocess.PIPE)
- process.communicate(input=new_clipboard_contents)
-
- def get_selection_attr(self, attr):
- return [getattr(item, attr) for item in
- self.fm.thistab.get_selection()]
-
- def tab(self, tabnum):
- return (
- self.start(1) + mode for mode
- in sorted(self.modes.keys())
- if mode
- )
diff --git a/dotfiles/system/.config/ranger/rc.conf b/dotfiles/system/.config/ranger/rc.conf
deleted file mode 100644
index 89d09ff..0000000
--- a/dotfiles/system/.config/ranger/rc.conf
+++ /dev/null
@@ -1,790 +0,0 @@
-
-# ===================================================================
-# This file contains the default startup commands for ranger.
-# To change them, it is recommended to create either /etc/ranger/rc.conf
-# (system-wide) or ~/.config/ranger/rc.conf (per user) and add your custom
-# commands there.
-#
-# If you copy this whole file there, you may want to set the environment
-# variable RANGER_LOAD_DEFAULT_RC to FALSE to avoid loading it twice.
-#
-# The purpose of this file is mainly to define keybindings and settings.
-# For running more complex python code, please create a plugin in "plugins/" or
-# a command in "commands.py".
-#
-# Each line is a command that will be run before the user interface
-# is initialized. As a result, you can not use commands which rely
-# on the UI such as :delete or :mark.
-# ===================================================================
-
-# ===================================================================
-# == Options
-# ===================================================================
-
-# Which viewmode should be used? Possible values are:
-# miller: Use miller columns which show multiple levels of the hierarchy
-# multipane: Midnight-commander like multipane view showing all tabs next
-# to each other
-set viewmode miller
-#set viewmode multipane
-
-# How many columns are there, and what are their relative widths?
-set column_ratios 1,3,4
-
-# Which files should be hidden? (regular expression)
-set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$
-
-# Show hidden files? You can toggle this by typing 'zh'
-set show_hidden false
-
-# Ask for a confirmation when running the "delete" command?
-# Valid values are "always", "never", "multiple" (default)
-# With "multiple", ranger will ask only if you delete multiple files at once.
-set confirm_on_delete multiple
-
-# Use non-default path for file preview script?
-# ranger ships with scope.sh, a script that calls external programs (see
-# README.md for dependencies) to preview images, archives, etc.
-set preview_script ~/.config/ranger/scope.sh
-
-# Use the external preview script or display simple plain text or image previews?
-set use_preview_script true
-
-# Automatically count files in the directory, even before entering them?
-set automatically_count_files true
-
-# Open all images in this directory when running certain image viewers
-# like feh or sxiv? You can still open selected files by marking them.
-set open_all_images true
-
-# Be aware of version control systems and display information.
-set vcs_aware true
-
-# State of the four backends git, hg, bzr, svn. The possible states are
-# disabled, local (only show local info), enabled (show local and remote
-# information).
-set vcs_backend_git enabled
-set vcs_backend_hg disabled
-set vcs_backend_bzr disabled
-set vcs_backend_svn disabled
-
-# Use one of the supported image preview protocols
-set preview_images true
-
-# Set the preview image method. Supported methods:
-#
-# * w3m (default):
-# Preview images in full color with the external command "w3mimgpreview"?
-# This requires the console web browser "w3m" and a supported terminal.
-# It has been successfully tested with "xterm" and "urxvt" without tmux.
-#
-# * iterm2:
-# Preview images in full color using iTerm2 image previews
-# (http://iterm2.com/images.html). This requires using iTerm2 compiled
-# with image preview support.
-#
-# This feature relies on the dimensions of the terminal's font. By default, a
-# width of 8 and height of 11 are used. To use other values, set the options
-# iterm2_font_width and iterm2_font_height to the desired values.
-#
-# * terminology:
-# Previews images in full color in the terminology terminal emulator.
-# Supports a wide variety of formats, even vector graphics like svg.
-#
-# * urxvt:
-# Preview images in full color using urxvt image backgrounds. This
-# requires using urxvt compiled with pixbuf support.
-#
-# * urxvt-full:
-# The same as urxvt but utilizing not only the preview pane but the
-# whole terminal window.
-#
-# * kitty:
-# Preview images in full color using kitty image protocol.
-# Requires python PIL or pillow library.
-# If ranger does not share the local filesystem with kitty
-# the transfer method is changed to encode the whole image;
-# while slower, this allows remote previews,
-# for example during an ssh session.
-# Tmux is unsupported.
-set preview_images_method ueberzug
-
-# Delay in seconds before displaying an image with the w3m method.
-# Increase it in case of experiencing display corruption.
-set w3m_delay 0.05
-
-# Default iTerm2 font size (see: preview_images_method: iterm2)
-set iterm2_font_width 8
-set iterm2_font_height 11
-
-# Use a unicode "..." character to mark cut-off filenames?
-set unicode_ellipsis false
-
-# BIDI support - try to properly display file names in RTL languages (Hebrew, Arabic).
-# Requires the python-bidi pip package
-set bidi_support false
-
-# Show dotfiles in the bookmark preview box?
-set show_hidden_bookmarks true
-
-# Which colorscheme to use? These colorschemes are available by default:
-# default, jungle, snow, solarized
-# set colorscheme gruvbox
-
-# Preview files on the rightmost column?
-# And collapse (shrink) the last column if there is nothing to preview?
-set preview_files true
-set preview_directories true
-set collapse_preview true
-
-# Save the console history on exit?
-set save_console_history true
-
-# Draw the status bar on top of the browser window (default: bottom)
-set status_bar_on_top false
-
-# Draw a progress bar in the status bar which displays the average state of all
-# currently running tasks which support progress bars?
-set draw_progress_bar_in_status_bar true
-
-# Draw borders around columns? (separators, outline, both, or none)
-# Separators are vertical lines between columns.
-# Outline draws a box around all the columns.
-# Both combines the two.
-set draw_borders none
-
-# Display the directory name in tabs?
-set dirname_in_tabs false
-
-# Enable the mouse support?
-set mouse_enabled true
-
-# Display the file size in the main column or status bar?
-set display_size_in_main_column true
-set display_size_in_status_bar true
-
-# Display the free disk space in the status bar?
-set display_free_space_in_status_bar true
-
-# Display files tags in all columns or only in main column?
-set display_tags_in_all_columns true
-
-# Set a title for the window?
-set update_title false
-
-# Set the title to "ranger" in the tmux program?
-set update_tmux_title true
-
-# Shorten the title if it gets long? The number defines how many
-# directories are displayed at once, 0 turns off this feature.
-set shorten_title 3
-
-# Show hostname in titlebar?
-set hostname_in_titlebar true
-
-# Abbreviate $HOME with ~ in the titlebar (first line) of ranger?
-set tilde_in_titlebar false
-
-# How many directory-changes or console-commands should be kept in history?
-set max_history_size 20
-set max_console_history_size 50
-
-# Try to keep so much space between the top/bottom border when scrolling:
-set scroll_offset 8
-
-# Flush the input after each key hit? (Noticeable when ranger lags)
-set flushinput true
-
-# Padding on the right when there's no preview?
-# This allows you to click into the space to run the file.
-set padding_right true
-
-# Save bookmarks (used with mX and `X) instantly?
-# This helps to synchronize bookmarks between multiple ranger
-# instances but leads to *slight* performance loss.
-# When false, bookmarks are saved when ranger is exited.
-set autosave_bookmarks true
-
-# Save the "`" bookmark to disk. This can be used to switch to the last
-# directory by typing "``".
-set save_backtick_bookmark true
-
-# You can display the "real" cumulative size of directories by using the
-# command :get_cumulative_size or typing "dc". The size is expensive to
-# calculate and will not be updated automatically. You can choose
-# to update it automatically though by turning on this option:
-set autoupdate_cumulative_size false
-
-# Turning this on makes sense for screen readers:
-set show_cursor false
-
-# One of: size, natural, basename, atime, ctime, mtime, type, random
-set sort natural
-
-# Additional sorting options
-set sort_reverse false
-set sort_case_insensitive true
-set sort_directories_first true
-set sort_unicode false
-
-# Enable this if key combinations with the Alt Key don't work for you.
-# (Especially on xterm)
-set xterm_alt_key false
-
-# Whether to include bookmarks in cd command
-set cd_bookmarks true
-
-# Changes case sensitivity for the cd command tab completion
-set cd_tab_case sensitive
-
-# Use fuzzy tab completion with the "cd" command. For example,
-# ":cd /u/lo/b" expands to ":cd /usr/local/bin".
-set cd_tab_fuzzy false
-
-# Avoid previewing files larger than this size, in bytes. Use a value of 0 to
-# disable this feature.
-set preview_max_size 0
-
-# The key hint lists up to this size have their sublists expanded.
-# Otherwise the submaps are replaced with "...".
-set hint_collapse_threshold 10
-
-# Add the highlighted file to the path in the titlebar
-set show_selection_in_titlebar true
-
-# The delay that ranger idly waits for user input, in milliseconds, with a
-# resolution of 100ms. Lower delay reduces lag between directory updates but
-# increases CPU load.
-set idle_delay 2000
-
-# When the metadata manager module looks for metadata, should it only look for
-# a ".metadata.json" file in the current directory, or do a deep search and
-# check all directories above the current one as well?
-set metadata_deep_search false
-
-# Clear all existing filters when leaving a directory
-set clear_filters_on_dir_change false
-
-# Disable displaying line numbers in main column.
-# Possible values: false, absolute, relative.
-set line_numbers false
-
-# When line_numbers=relative show the absolute line number in the
-# current line.
-set relative_current_zero false
-
-# Start line numbers from 1 instead of 0
-set one_indexed false
-
-# Save tabs on exit
-set save_tabs_on_exit false
-
-# Enable scroll wrapping - moving down while on the last item will wrap around to
-# the top and vice versa.
-set wrap_scroll false
-
-# Set the global_inode_type_filter to nothing. Possible options: d, f and l for
-# directories, files and symlinks respectively.
-set global_inode_type_filter
-
-# This setting allows to freeze the list of files to save I/O bandwidth. It
-# should be 'false' during start-up, but you can toggle it by pressing F.
-set freeze_files false
-
-# ===================================================================
-# == Local Options
-# ===================================================================
-# You can set local options that only affect a single directory.
-
-# Examples:
-# setlocal path=~/downloads sort mtime
-
-# ===================================================================
-# == Command Aliases in the Console
-# ===================================================================
-
-alias e edit
-alias q quit
-alias q! quit!
-alias qa quitall
-alias qa! quitall!
-alias qall quitall
-alias qall! quitall!
-alias setl setlocal
-
-alias filter scout -prts
-alias find scout -aets
-alias mark scout -mr
-alias unmark scout -Mr
-alias search scout -rs
-alias search_inc scout -rts
-alias travel scout -aefklst
-
-# ===================================================================
-# == Define keys for the browser
-# ===================================================================
-
-# Basic
-map Q quitall
-map q quit
-copymap q ZZ ZQ
-
-map R reload_cwd
-map F set freeze_files!
-map reset
-map redraw_window
-map abort
-map change_mode normal
-map ~ set viewmode!
-
-map i display_file
-map ? help
-map W display_log
-map w taskview_open
-map S shell $SHELL
-
-map : console
-map ; console
-map ! console shell%space
-map @ console -p6 shell %%s
-map # console shell -p%space
-map s console shell%space
-map r chain draw_possible_programs; console open_with%%space
-map f console find%space
-map cd console cd%space
-
-map chain console; eval fm.ui.console.history_move(-1)
-
-# Change the line mode
-map Mf linemode filename
-map Mi linemode fileinfo
-map Mm linemode mtime
-map Mp linemode permissions
-map Ms linemode sizemtime
-map Mt linemode metatitle
-
-# Tagging / Marking
-map t tag_toggle
-map ut tag_remove
-map " tag_toggle tag=%any
-map mark_files toggle=True
-map v mark_files all=True toggle=True
-map uv mark_files all=True val=False
-map V toggle_visual_mode
-map uV toggle_visual_mode reverse=True
-
-# For the nostalgics: Midnight Commander bindings
-map help
-map rename_append
-map display_file
-map edit
-map copy
-map cut
-map console mkdir%space
-map console delete
-map exit
-
-# In case you work on a keyboard with dvorak layout
-map move up=1
-map move down=1
-map move left=1
-map move right=1
-map move to=0
-map move to=-1
-map move down=1 pages=True
-map move up=1 pages=True
-map move right=1
-#map console delete
-map console touch%space
-
-# VIM-like
-copymap k
-copymap j
-copymap h
-copymap l
-copymap gg
-copymap G
-copymap
-copymap
-
-map J move down=0.5 pages=True
-map K move up=0.5 pages=True
-copymap J
-copymap K
-
-# Jumping around
-map H history_go -1
-map L history_go 1
-map ] move_parent 1
-map [ move_parent -1
-map } traverse
-map { traverse_backwards
-map ) jump_non
-
-map gh cd ~
-map ge cd /etc
-map gu cd /usr
-map gd cd /dev
-map gl cd -r .
-map gL cd -r %f
-map go cd /opt
-map gv cd /var
-map gi eval fm.cd('/run/media/' + os.getenv('USER'))
-map gM cd /media
-map gs cd /srv
-map gp cd /tmp
-map gR eval fm.cd(ranger.RANGERDIR)
-map g/ cd /
-map g? cd /usr/share/doc/ranger
-
-# External Programs
-map E edit
-map du shell -p du --max-depth=1 -h --apparent-size
-map dU shell -p du --max-depth=1 -h --apparent-size | sort -rh
-map yp yank path
-map yd yank dir
-map yn yank name
-map y. yank name_without_extension
-
-# Filesystem Operations
-map = chmod
-
-map cw console rename%space
-map a rename_append
-map A eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"))
-map I eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7)
-
-map pp paste
-map po paste overwrite=True
-map pP paste append=True
-map pO paste overwrite=True append=True
-map pl paste_symlink relative=False
-map pL paste_symlink relative=True
-map phl paste_hardlink
-map pht paste_hardlinked_subtree
-
-map dd console delete
-
-map da cut mode=add
-map dr cut mode=remove
-map dt cut mode=toggle
-
-map yy copy
-map uy uncut
-map ya copy mode=add
-map yr copy mode=remove
-map yt copy mode=toggle
-
-# Temporary workarounds
-map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier)
-map dG eval fm.cut(dirarg=dict(to=-1), narg=quantifier)
-map dj eval fm.cut(dirarg=dict(down=1), narg=quantifier)
-map dk eval fm.cut(dirarg=dict(up=1), narg=quantifier)
-map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier)
-map yG eval fm.copy(dirarg=dict(to=-1), narg=quantifier)
-map yj eval fm.copy(dirarg=dict(down=1), narg=quantifier)
-map yk eval fm.copy(dirarg=dict(up=1), narg=quantifier)
-
-# Searching
-map / console search%space
-map n search_next
-map N search_next forward=False
-map ct search_next order=tag
-map cs search_next order=size
-map ci search_next order=mimetype
-map cc search_next order=ctime
-map cm search_next order=mtime
-map ca search_next order=atime
-
-# Tabs
-map tab_new
-map tab_close
-map tab_move 1
-map tab_move -1
-map tab_move 1
-map tab_move -1
-map gt tab_move 1
-map gT tab_move -1
-map gn tab_new
-map gc tab_close
-map uq tab_restore
-map tab_open 1
-map tab_open 2
-map tab_open 3
-map tab_open 4
-map tab_open 5
-map tab_open 6
-map tab_open 7
-map tab_open 8
-map tab_open 9
-map tab_shift 1
-map tab_shift -1
-
-# Sorting
-map or set sort_reverse!
-map oz set sort=random
-map os chain set sort=size; set sort_reverse=False
-map ob chain set sort=basename; set sort_reverse=False
-map on chain set sort=natural; set sort_reverse=False
-map om chain set sort=mtime; set sort_reverse=False
-map oc chain set sort=ctime; set sort_reverse=False
-map oa chain set sort=atime; set sort_reverse=False
-map ot chain set sort=type; set sort_reverse=False
-map oe chain set sort=extension; set sort_reverse=False
-
-map oS chain set sort=size; set sort_reverse=True
-map oB chain set sort=basename; set sort_reverse=True
-map oN chain set sort=natural; set sort_reverse=True
-map oM chain set sort=mtime; set sort_reverse=True
-map oC chain set sort=ctime; set sort_reverse=True
-map oA chain set sort=atime; set sort_reverse=True
-map oT chain set sort=type; set sort_reverse=True
-map oE chain set sort=extension; set sort_reverse=True
-
-map dc get_cumulative_size
-
-# Settings
-map zc set collapse_preview!
-map zd set sort_directories_first!
-map zh set show_hidden!
-map set show_hidden!
-copymap
-copymap
-map zI set flushinput!
-map zi set preview_images!
-map zm set mouse_enabled!
-map zp set preview_files!
-map zP set preview_directories!
-map zs set sort_case_insensitive!
-map zu set autoupdate_cumulative_size!
-map zv set use_preview_script!
-map zf console filter%space
-copymap zf zz
-
-# Filter stack
-map .n console filter_stack add name%space
-map .m console filter_stack add mime%space
-map .d filter_stack add type d
-map .f filter_stack add type f
-map .l filter_stack add type l
-map .| filter_stack add or
-map .& filter_stack add and
-map .! filter_stack add not
-map .r console filter_stack rotate
-map .c filter_stack clear
-map .* filter_stack decompose
-map .p filter_stack pop
-map .. filter_stack show
-
-# Bookmarks
-map ` enter_bookmark %any
-map ' enter_bookmark %any
-map m set_bookmark %any
-map um unset_bookmark %any
-
-map m draw_bookmarks
-copymap m um ` '
-
-# Generate all the chmod bindings with some python help:
-eval for arg in "rwxXst": cmd("map +u{0} shell -f chmod u+{0} %s".format(arg))
-eval for arg in "rwxXst": cmd("map +g{0} shell -f chmod g+{0} %s".format(arg))
-eval for arg in "rwxXst": cmd("map +o{0} shell -f chmod o+{0} %s".format(arg))
-eval for arg in "rwxXst": cmd("map +a{0} shell -f chmod a+{0} %s".format(arg))
-eval for arg in "rwxXst": cmd("map +{0} shell -f chmod u+{0} %s".format(arg))
-
-eval for arg in "rwxXst": cmd("map -u{0} shell -f chmod u-{0} %s".format(arg))
-eval for arg in "rwxXst": cmd("map -g{0} shell -f chmod g-{0} %s".format(arg))
-eval for arg in "rwxXst": cmd("map -o{0} shell -f chmod o-{0} %s".format(arg))
-eval for arg in "rwxXst": cmd("map -a{0} shell -f chmod a-{0} %s".format(arg))
-eval for arg in "rwxXst": cmd("map -{0} shell -f chmod u-{0} %s".format(arg))
-
-# ===================================================================
-# == Define keys for the console
-# ===================================================================
-# Note: Unmapped keys are passed directly to the console.
-
-# Basic
-cmap eval fm.ui.console.tab()
-cmap eval fm.ui.console.tab(-1)
-cmap eval fm.ui.console.close()
-cmap eval fm.ui.console.execute()
-cmap redraw_window
-
-copycmap
-copycmap
-
-# Move around
-cmap eval fm.ui.console.history_move(-1)
-cmap eval fm.ui.console.history_move(1)
-cmap eval fm.ui.console.move(left=1)
-cmap eval fm.ui.console.move(right=1)
-cmap eval fm.ui.console.move(right=0, absolute=True)
-cmap eval fm.ui.console.move(right=-1, absolute=True)
-cmap eval fm.ui.console.move_word(left=1)
-cmap eval fm.ui.console.move_word(right=1)
-
-copycmap
-copycmap
-
-# Line Editing
-cmap eval fm.ui.console.delete(-1)
-cmap eval fm.ui.console.delete(0)
-cmap eval fm.ui.console.delete_word()
-cmap eval fm.ui.console.delete_word(backward=False)
-cmap eval fm.ui.console.delete_rest(1)
-cmap eval fm.ui.console.delete_rest(-1)
-cmap eval fm.ui.console.paste()
-
-# And of course the emacs way
-copycmap
-copycmap
-copycmap
-copycmap
-copycmap
-copycmap
-copycmap
-copycmap
-copycmap
-
-# Note: There are multiple ways to express backspaces. (code 263)
-# and (code 127). To be sure, use both.
-copycmap
-
-# This special expression allows typing in numerals:
-cmap false
-
-# ===================================================================
-# == Pager Keybindings
-# ===================================================================
-
-# Movement
-pmap pager_move down=1
-pmap pager_move up=1
-pmap pager_move left=4
-pmap pager_move right=4
-pmap pager_move to=0
-pmap pager_move to=-1
-pmap pager_move down=1.0 pages=True
-pmap pager_move up=1.0 pages=True
-pmap pager_move down=0.5 pages=True
-pmap pager_move up=0.5 pages=True
-
-copypmap k
-copypmap j
-copypmap h
-copypmap l
-copypmap