diff options
Diffstat (limited to 'dotfiles/system/.config')
165 files changed, 0 insertions, 36477 deletions
diff --git a/dotfiles/system/.config/.cmailpass.gpg b/dotfiles/system/.config/.cmailpass.gpg deleted file mode 100644 index e2f102e..0000000 --- a/dotfiles/system/.config/.cmailpass.gpg +++ /dev/null @@ -1 +0,0 @@ -Œ
ÈL’FàÎýÜÿÒLJEã¡dM0Ú+G 5nnÇþ]®›Ý‹ÖôâŸ÷›)>{\¨Þ›\KøZ´È˜ÝGÂ>ZÄ—ÊÓ¶Kv!å“Ó>€W³’~<
\ 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 Binary files differdeleted file mode 100644 index 656dfd5..0000000 --- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/app-internal-state.db +++ /dev/null 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 @@ -<application> - <component name="EditorColorsManagerImpl"> - <global_color_scheme name="Dark" /> - </component> -</application>
\ 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 @@ -<application> - <component name="ConsoleFont"> - <option name="VERSION" value="1" /> - </component> -</application>
\ 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 @@ -<application> - <component name="DefaultFont"> - <option name="VERSION" value="1" /> - <option name="FONT_SIZE" value="20" /> - <option name="FONT_SIZE_2D" value="19.5" /> - <option name="FONT_SCALE" value="1.5" /> - </component> -</application>
\ 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 @@ -<application> - <component name="CodeInsightSettings"> - <option name="REFORMAT_ON_PASTE" value="1" /> - <option name="INDENT_TO_CARET_ON_PASTE" value="true" /> - </component> -</application>
\ 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 @@ -<application> - <component name="FeatureUsageStatistics" first-run="1731435818931" have-been-shown="false" show-in-other="true" show-in-compilation="true"> - <feature id="editing.completion.camelHumps" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.clipboard.history" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.compare.editor.with.clipboard" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="codeassists.surroundwith.statement" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="refactoring.rename" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.popup.action" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.goto.file.line" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="refactoring.show.quick.list" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.completion.cancelByControlArrows" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.popup.symbol" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="find.recent.search" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="switcher" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.completion.replace" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="codeassists.complete.statement" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.goto.inspection" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="vcs.show.local.history" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="vcs.show.quick.list" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="vcs.use.integration" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.popup.file" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="codeassists.overrideimplement" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="ui.close.all.editors" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.popup.wildcards" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.convert.line.separators" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="refactoring.introduceVariable" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="refactoring.extractMethod" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="codeassists.generate.code" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.recent.files" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.goto.declaration" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="scratch" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.completion.finishByDotEtc" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="ui.open.project.tool.window" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.join.lines" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="vcs.pull.requests" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="vcs.annotate" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="debugger.breakpoint.non.suspending" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.completion.finishByCtrlDot" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="codeassists.context.actions" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="ui.open.last.tool.window" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.select.in" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.reformat.code" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.completion.show.liveTemplates" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.copy.line" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.find.in.files" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="ui.tree.speedsearch" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="ui.horizontal.scrolling" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.replace" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="ui.hide.tool.window" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.find.replace.in.files.toggle" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="intentions.check.regexp" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="profiler.open.snapshot" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="codeassists.comment.line" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.popup.camelprefix" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="SearchEverywhere" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.popup.class" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editor.delete.line" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="codeassists.parameterInfo" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.inheritance.hierarchy" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.duplicate" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.copy.reference" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.find" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="find.completion" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="codeassists.quickdefinition" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.completion.basic" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="tag.name.completion" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.completion.postfix" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="refactoring.introduceVariable.incompleteStatement" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="vcs.compare.file.versions" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.find.replace.toggle" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="dir.diff" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.recent.locations" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.select.word" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.add.carets.using.double.ctrl" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="ui.close.other.editors" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="debugger.evaluate.expression" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="codeassists.quickjavadoc.lookup" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="ui.scheme.quickswitch" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.replace.in.files" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="codeassists.highlight.usages" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="debugger.breakpoint.edit" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="codeassist.inspect.batch" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.popup.file.structure" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="codeassists.liveTemplates" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="codeassists.quickjavadoc.ctrln" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.goto.usages" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="codeassists.quickjavadoc" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="ui.recentchanges" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="intentions.edit.regexp" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.move.statement.up.down" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="editing.completion.changeSorting" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="codeassists.quickdefinition.lookup" count="0" last-shown="0" last-used="0" shown-count="0" /> - <feature id="navigation.find.usages" count="0" last-shown="0" last-used="0" shown-count="0" /> - <completionStatsTag /> - <fixesStatsTag /> - </component> -</application>
\ 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 @@ -<application> - <component name="FileTypeManager" version="19"> - <ignoreFiles list="*$py.class;*.pyc;*.pyo;*.rbc;*.yarb;*~;.DS_Store;.git;.hg;.mypy_cache;.pytest_cache;.ruff_cache;.svn;CVS;__pycache__;_svn;vssver.scc;vssver2.scc" /> - </component> -</application>
\ 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 @@ -<application> - <component name="LessonStateBase"> - <option name="map"> - <map> - <entry key="python.onboarding" value="NOT_PASSED" /> - </map> - </option> - </component> -</application>
\ 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 @@ -<application> - <component name="Registry"> - <entry key="ide.experimental.ui" value="true" /> - </component> -</application>
\ 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 @@ -<application> - <component name="Logs.Categories"><![CDATA[{}]]></component> -</application>
\ 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 @@ -<application> - <component name="LangManager"> - <option name="languageName" value="Python" /> - </component> - <component name="NotRoamableUiSettings"> - <option name="presentationModeIdeScale" value="1.75" /> - </component> - <component name="PropertyService"><![CDATA[{ - "keyToString": { - "PyCharm.InitialConfiguration": "true", - "PyCharm.InitialConfiguration.V2": "true", - "PyCharm.InitialConfiguration.V3": "true", - "PyCharm.InitialConfiguration.V4": "true", - "PyCharm.InitialConfiguration.V5": "true", - "PyCharm.InitialConfiguration.V6": "true", - "PyCharm.InitialConfiguration.V7": "true", - "PyCharm.InitialConfiguration.V8": "true", - "ask.about.ctrl.y.shortcut.v2": "true", - "experimental.ui.on.first.startup": "true", - "experimental.ui.used.version": "241.18968.29", - "experimentalFeature.terminal.shell.command.handling": "false", - "fileTypeChangedCounter": "2", - "fontSizeToResetConsole": "19.5", - "fontSizeToResetEditor": "19.5", - "ift.hide.welcome.screen.promo": "true", - "input.method.disabler.muted": "true", - "previousColorScheme": "_@user_Dark" - }, - "keyToStringList": { - "fileTypeDetectors": [ - "com.intellij.ide.scratch.ScratchFileServiceImpl$Detector", - "org.jetbrains.plugins.textmate.TextMateFileType$TextMateFileDetector" - ] - } -}]]></component> -</application>
\ 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 @@ -<application> - <component name="SettingsSyncSettings"> - <option name="migrationFromOldStorageChecked" value="true" /> - </component> -</application>
\ 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 @@ -<application> - <component name="UpdatesConfigurable"> - <option name="LAST_BUILD_CHECKED" value="PC-241.18968.29" /> - <option name="LAST_TIME_CHECKED" value="1731435821159" /> - </component> -</application>
\ 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 @@ -<application> - <component name="WindowStateApplicationService"> - <state x="1128" y="768" width="2256" height="1471" key="WELCOME_SCREEN" timestamp="1731435832726"> - <screen x="0" y="0" width="2256" height="1504" /> - </state> - <state x="1128" y="768" width="2256" height="1471" key="WELCOME_SCREEN/0.0.2256.1504" timestamp="1731435832726" /> - </component> -</application>
\ 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 Binary files differdeleted file mode 100644 index 63a47f8..0000000 --- a/dotfiles/system/.config/JetBrains/PyCharmCE2024.1/updatedBrokenPlugins.db +++ /dev/null diff --git a/dotfiles/system/.config/Thunar/accels.scm b/dotfiles/system/.config/Thunar/accels.scm deleted file mode 100644 index 1428351..0000000 --- a/dotfiles/system/.config/Thunar/accels.scm +++ /dev/null @@ -1,138 +0,0 @@ -; thunar GtkAccelMap rc-file -*- scheme -*- -; this file is an automated accelerator map dump -; -; (gtk_accel_path "<Actions>/ThunarDetailsView/expandable-folders" "") -; (gtk_accel_path "<Actions>/ThunarStandardView/sort-by-type" "") -; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-last-modified" "") -; (gtk_accel_path "<Actions>/ThunarBookmarks/d773562babb56e1a529a1bd5d640df62" "") -; (gtk_accel_path "<Actions>/ThunarBookmarks/0210e6411e61004cc4c7c68612c8463b" "") -; (gtk_accel_path "<Actions>/Thunarwindow/menu" "") -; (gtk_accel_path "<Actions>/ThunarBookmarks/f4268bf81222b9956e74a8c7903b31d1" "") -; (gtk_accel_path "<Actions>/ThunarActionManager/cut" "<Primary>x") -; (gtk_accel_path "<Actions>/ThunarStandardView/sort-by-size" "") -; (gtk_accel_path "<Actions>/ThunarWindow/file-menu" "") -; (gtk_accel_path "<Actions>/ThunarWindow/close-tab" "<Primary>w") -; (gtk_accel_path "<Actions>/ThunarWindow/switch-previous-tab-alt" "<Primary><Shift>ISO_Left_Tab") -; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-size" "") -; (gtk_accel_path "<Actions>/ThunarWindow/new-window" "<Primary>n") -; (gtk_accel_path "<Actions>/ThunarWindow/clear-directory-specific-settings" "") -(gtk_accel_path "<Actions>/ThunarWindow/close-window" "q") -; (gtk_accel_path "<Actions>/ThunarWindow/open-parent" "<Alt>Up") -; (gtk_accel_path "<Actions>/ThunarWindow/view-side-pane-menu" "") -; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-size-in-bytes" "") -; (gtk_accel_path "<Actions>/ThunarWindow/switch-previous-tab" "<Primary>Page_Up") -; (gtk_accel_path "<Actions>/ThunarActionManager/open" "<Primary>o") -; (gtk_accel_path "<Actions>/ThunarStandardView/sort-ascending" "") -; (gtk_accel_path "<Actions>/ThunarWindow/toggle-split-view" "F3") -; (gtk_accel_path "<Actions>/ThunarActionManager/copy-2" "<Primary>Insert") -; (gtk_accel_path "<Actions>/ThunarActionManager/trash-delete" "Delete") -; (gtk_accel_path "<Actions>/ThunarBookmarks/fd67aefaf5d114765fe8b24c4c89f7e9" "") -; (gtk_accel_path "<Actions>/ThunarWindow/open-recent" "") -; (gtk_accel_path "<Actions>/ThunarWindow/view-configure-toolbar" "") -; (gtk_accel_path "<Actions>/ThunarStandardView/forward" "<Alt>Right") -; (gtk_accel_path "<Actions>/ThunarActionManager/restore" "") -; (gtk_accel_path "<Actions>/ThunarWindow/open-location-alt" "<Alt>d") -; (gtk_accel_path "<Actions>/ThunarBookmarks/b89949686b39b7851b3f8ca433368c2b" "") -; (gtk_accel_path "<Actions>/ThunarStandardView/select-by-pattern" "<Primary>s") -; (gtk_accel_path "<Actions>/ThunarWindow/zoom-out-alt" "<Primary>KP_Subtract") -; (gtk_accel_path "<Actions>/ThunarWindow/contents" "F1") -; (gtk_accel_path "<Actions>/ThunarWindow/open-file-menu" "F10") -; (gtk_accel_path "<Actions>/ThunarBookmarks/1ac44f6cd07428a163baf754f81a9849" "") -; (gtk_accel_path "<Actions>/ThunarBookmarks/f659214f67b5f81d4695959941c2fe11" "") -; (gtk_accel_path "<Actions>/ThunarWindow/show-highlight" "") -; (gtk_accel_path "<Actions>/ThunarStandardView/sort-descending" "") -; (gtk_accel_path "<Actions>/ThunarStandardView/sort-by-name" "") -; (gtk_accel_path "<Actions>/ThunarStandardView/select-all-files" "<Primary>a") -; (gtk_accel_path "<Actions>/ThunarActionManager/execute" "") -; (gtk_accel_path "<Actions>/ThunarStandardView/properties" "<Alt>Return") -; (gtk_accel_path "<Actions>/ThunarActionManager/cut-2" "") -; (gtk_accel_path "<Actions>/ThunarStandardView/sort-by-dtime" "") -; (gtk_accel_path "<Actions>/ThunarWindow/switch-next-tab" "<Primary>Page_Down") -; (gtk_accel_path "<Actions>/ThunarWindow/open-templates" "") -; (gtk_accel_path "<Actions>/ThunarActionManager/paste-2" "<Shift>Insert") -; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-filetype" "") -; (gtk_accel_path "<Actions>/ThunarWindow/close-all-windows" "<Primary><Shift>w") -; (gtk_accel_path "<Actions>/ThunarStandardView/create-document" "") -; (gtk_accel_path "<Actions>/ThunarWindow/detach-tab" "") -; (gtk_accel_path "<Actions>/ThunarWindow/cancel-search" "Escape") -; (gtk_accel_path "<Actions>/ThunarWindow/zoom-in-alt2" "<Primary>equal") -; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-hidden-count" "") -; (gtk_accel_path "<Actions>/ThunarShortcutsPane/sendto-shortcuts" "<Primary>d") -; (gtk_accel_path "<Actions>/ThunarActionManager/undo" "<Primary>z") -; (gtk_accel_path "<Actions>/ThunarStandardView/toggle-sort-order" "") -; (gtk_accel_path "<Actions>/ThunarWindow/zoom-out" "<Primary>minus") -; (gtk_accel_path "<Actions>/ThunarWindow/view-location-selector-entry" "") -; (gtk_accel_path "<Actions>/ThunarActionManager/paste" "<Primary>v") -; (gtk_accel_path "<Actions>/ThunarWindow/zoom-in-alt1" "<Primary>KP_Add") -; (gtk_accel_path "<Actions>/ThunarWindow/view-menubar" "<Primary>m") -; (gtk_accel_path "<Actions>/ThunarStandardView/back" "<Alt>Left") -; (gtk_accel_path "<Actions>/ThunarWindow/open-desktop" "") -; (gtk_accel_path "<Actions>/ThunarWindow/view-as-detailed-list" "<Primary>2") -; (gtk_accel_path "<Actions>/ThunarActionManager/restore-show" "") -; (gtk_accel_path "<Actions>/ThunarWindow/sendto-menu" "") -; (gtk_accel_path "<Actions>/ThunarStatusBar/toggle-display-name" "") -; (gtk_accel_path "<Actions>/ThunarBookmarks/a15ad706188e797cac4c8dd8aa3b613e" "") -; (gtk_accel_path "<Actions>/ThunarWindow/go-menu" "") -; (gtk_accel_path "<Actions>/ThunarWindow/remove-from-recent" "") -; (gtk_accel_path "<Actions>/ThunarActionManager/open-with-other" "") -; (gtk_accel_path "<Actions>/ThunarStandardView/invert-selection" "<Primary><Shift>i") -; (gtk_accel_path "<Actions>/ThunarBookmarks/8f10b72b429dd160dc70d6f7cc168a28" "") -; (gtk_accel_path "<Actions>/ThunarWindow/view-side-pane-shortcuts" "<Primary>b") -; (gtk_accel_path "<Actions>/ThunarWindow/reload-alt-2" "Reload") -; (gtk_accel_path "<Actions>/ThunarWindow/view-location-selector-menu" "") -; (gtk_accel_path "<Actions>/ThunarStandardView/sort-by-mtime" "") -; (gtk_accel_path "<Actions>/ThunarWindow/edit-menu" "") -; (gtk_accel_path "<Actions>/ThunarActionManager/copy" "<Primary>c") -; (gtk_accel_path "<Actions>/ThunarStandardView/unselect-all-files" "Escape") -; (gtk_accel_path "<Actions>/ThunarStandardView/forward-alt" "Forward") -; (gtk_accel_path "<Actions>/ThunarActionManager/move-to-trash" "") -; (gtk_accel_path "<Actions>/ThunarWindow/reload-alt-1" "F5") -; (gtk_accel_path "<Actions>/ThunarActionManager/delete-3" "<Shift>KP_Delete") -; (gtk_accel_path "<Actions>/ThunarStandardView/arrange-items-menu" "") -; (gtk_accel_path "<Actions>/ThunarWindow/reload" "<Primary>r") -; (gtk_accel_path "<Actions>/ThunarWindow/contents/help-menu" "") -; (gtk_accel_path "<Actions>/ThunarWindow/bookmarks-menu" "") -; (gtk_accel_path "<Actions>/ThunarBookmarks/dd7b2f7f1acb316e06e8de82ceff0f08" "") -; (gtk_accel_path "<Actions>/ThunarWindow/open-computer" "") -; (gtk_accel_path "<Actions>/ThunarWindow/toggle-image-preview" "") -; (gtk_accel_path "<Actions>/ThunarWindow/toggle-side-pane" "F9") -; (gtk_accel_path "<Actions>/ThunarWindow/view-as-icons" "<Primary>1") -; (gtk_accel_path "<Actions>/ThunarActionManager/delete-2" "<Shift>Delete") -; (gtk_accel_path "<Actions>/ThunarWindow/zoom-in" "<Primary>plus") -; (gtk_accel_path "<Actions>/ThunarStandardView/configure-columns" "") -; (gtk_accel_path "<Actions>/ThunarStandardView/rename" "F2") -; (gtk_accel_path "<Actions>/ThunarWindow/open-location" "<Primary>l") -; (gtk_accel_path "<Actions>/ThunarWindow/view-as-compact-list" "<Primary>3") -; (gtk_accel_path "<Actions>/ThunarBookmarks/39adb4b734832c8ccc67032e77081c1f" "") -; (gtk_accel_path "<Actions>/ThunarWindow/view-menu" "") -; (gtk_accel_path "<Actions>/ThunarWindow/search" "<Primary>f") -; (gtk_accel_path "<Actions>/ThunarWindow/new-tab" "<Primary>t") -; (gtk_accel_path "<Actions>/ThunarWindow/zoom-reset" "<Primary>0") -; (gtk_accel_path "<Actions>/ThunarStandardView/back-alt2" "Back") -; (gtk_accel_path "<Actions>/ThunarActionManager/open-in-new-tab" "<Primary><Shift>p") -; (gtk_accel_path "<Actions>/ThunarWindow/view-location-selector-buttons" "") -; (gtk_accel_path "<Actions>/ThunarActionManager/redo" "<Primary><Shift>z") -; (gtk_accel_path "<Actions>/ThunarWindow/open-trash" "") -; (gtk_accel_path "<Actions>/ThunarActionManager/open-in-new-window" "<Primary><Shift>o") -; (gtk_accel_path "<Actions>/ThunarWindow/view-statusbar" "") -; (gtk_accel_path "<Actions>/ThunarActionManager/open-location" "") -; (gtk_accel_path "<Actions>/ThunarStandardView/duplicate" "") -; (gtk_accel_path "<Actions>/ThunarStandardView/back-alt1" "BackSpace") -; (gtk_accel_path "<Actions>/ThunarActionManager/trash-delete-2" "KP_Delete") -; (gtk_accel_path "<Actions>/ThunarStandardView/create-folder" "<Primary><Shift>n") -; (gtk_accel_path "<Actions>/ThunarWindow/open-home" "<Alt>Home") -; (gtk_accel_path "<Actions>/ThunarWindow/switch-focused-split-view-pane" "") -; (gtk_accel_path "<Actions>/ThunarWindow/show-hidden" "<Primary>h") -; (gtk_accel_path "<Actions>/ThunarStandardView/set-default-app" "") -; (gtk_accel_path "<Actions>/ThunarWindow/empty-trash" "") -; (gtk_accel_path "<Actions>/ThunarWindow/preferences" "") -; (gtk_accel_path "<Actions>/ThunarActionManager/delete" "") -; (gtk_accel_path "<Actions>/ThunarWindow/open-network" "") -; (gtk_accel_path "<Actions>/ThunarWindow/view-side-pane-tree" "<Primary>e") -; (gtk_accel_path "<Actions>/ThunarWindow/open-file-system" "") -; (gtk_accel_path "<Actions>/ThunarWindow/search-alt" "Search") -; (gtk_accel_path "<Actions>/ThunarWindow/switch-next-tab-alt" "<Primary>Tab") -; (gtk_accel_path "<Actions>/ThunarActionManager/sendto-desktop" "") -; (gtk_accel_path "<Actions>/ThunarStandardView/make-link" "") -; (gtk_accel_path "<Actions>/ThunarWindow/zoom-reset-alt" "<Primary>KP_0") -; (gtk_accel_path "<Actions>/ThunarWindow/about" "") diff --git a/dotfiles/system/.config/Thunar/uca.xml b/dotfiles/system/.config/Thunar/uca.xml deleted file mode 100644 index 0ade63f..0000000 --- a/dotfiles/system/.config/Thunar/uca.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<actions> -<action> - <icon>utilities-terminal</icon> - <name>Open Terminal Here</name> - <submenu></submenu> - <unique-id>1731361150647694-1</unique-id> - <command>exo-open --working-directory %f --launch TerminalEmulator</command> - <description>Example for a custom action</description> - <range></range> - <patterns>*</patterns> - <startup-notify/> - <directories/> -</action> -</actions> 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 --- a/dotfiles/system/.config/calibre/conversion/azw3_output.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/comic_input.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/debug.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/docx_input.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/docx_output.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/epub_output.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/fb2_input.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/fb2_output.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/heuristics.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/htmlz_output.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/kepub_output.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/look_and_feel.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/lrf_output.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/metadata.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/mobi_output.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/pdb_output.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/pdf_input.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/pdf_output.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/pmlz_output.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/rb_output.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/rtf_input.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/search_and_replace.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/snb_output.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/structure_detection.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/toc.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/txt_input.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/txt_output.py +++ /dev/null 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 --- a/dotfiles/system/.config/calibre/conversion/txtz_output.py +++ /dev/null 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 <kovid at kovidgoyal.net> - -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>{li.get("textHtml")}</li>' - else: - li_html += f'<li>{li.get("text", "")}</li>' - return li_html - - -def process_info_box(bx): - info = '' - for x in safe_dict(bx, 'components'): - info += f'<blockquote>{process_web_node(x)}</blockquote>' - return info - - -def process_web_node(node): - ntype = node.get('type', '') - if ntype == 'CROSSHEAD': - if node.get('textHtml'): - return f'<h4>{node.get("textHtml")}</h4>' - return f'<h4>{node.get("text", "")}</h4>' - elif ntype in ['PARAGRAPH', 'BOOK_INFO']: - if node.get('textHtml'): - return f'<p>{node.get("textHtml")}</p>' - return f'<p>{node.get("text", "")}</p>' - 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'<div><img src="{node["url"]}" title="{alt}"></div><div style="text-align:center; font-size:small;">{cap}</div>' - elif ntype == 'PULL_QUOTE': - if node.get('textHtml'): - return f'<blockquote>{node.get("textHtml")}</blockquote>' - return f'<blockquote>{node.get("text", "")}</blockquote>' - elif ntype == 'DIVIDER': - return '<hr>' - 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'<div style="color: red; font-size:small; font-weight:bold;">{data.get("flyTitle", "")}</div>' - body += f'<h1>{data["headline"]}</h1>' - if data.get('rubric') and data.get('rubric') is not None: - body += f'<div style="font-style: italic; color:#202020;">{data.get("rubric", "")}</div>' - 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'<p style="color: gray; font-size: small;">{dt}</p>' - else: - body += f'<p style="color: gray; font-size: small;">{dt + " | " + (data["dateline"])}</p>' - 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 '<html><body><article>' + body + '</article></body></html>' - - -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 = '<html><body><article></article></body></html>' - root = parse(body) - load_article_from_json(raw, root) - - if '/interactive/' in url: - return ('<html><body><article><h1>' + root.xpath('//h1')[0].text + '</h1><em>' - 'This article is supposed to be read in a browser.' - '</em></article></body></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 <small> 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 ('<html><body><article><h1>' + root_.xpath('//h1')[0].text + '</h1><em>' - 'This article is supposed to be read in a browser' - '</em></article></body></html>') - - 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 <small> 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 <kovid at kovidgoyal.net> - -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<title>.+) - (?P<author>[^_]+)", - "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 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>lineedit_history_choose_library_dialog</key> - <array> - <string>/home/cjennings/sync/books</string> - <string>/home/cjennings/archive/books</string> - <string>/home/cjennings/books</string> - <string>/home/cjennings/Library</string> - </array> - <key>lineedit_history_preferences_setting_auto_add_path</key> - <array> - <string>/home/cjennings/downloads/ebooks</string> - <string>/home/cjennings/</string> - <string>/home/cjennings/Downloads/ebooks</string> - <string>/home/cjennings/Downloads/eBooks</string> - <string>/home/cjennings/Documents/eBooks</string> - </array> - <key>lineedit_history_store_config_chooser_query</key> - <array/> - <key>lineedit_history_tag_browser_search</key> - <array/> -</dict> -</plist> diff --git a/dotfiles/system/.config/calibre/icons-any.rcc b/dotfiles/system/.config/calibre/icons-any.rcc Binary files differdeleted file mode 100644 index 2c2f7d2..0000000 --- a/dotfiles/system/.config/calibre/icons-any.rcc +++ /dev/null diff --git a/dotfiles/system/.config/calibre/icons-dark.rcc b/dotfiles/system/.config/calibre/icons-dark.rcc Binary files differdeleted file mode 100644 index 28b9a51..0000000 --- a/dotfiles/system/.config/calibre/icons-dark.rcc +++ /dev/null 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 <kovid at kovidgoyal.net>\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 <meta> tag\n raw = raw.decode('utf-8')\n raw = xml_to_unicode(raw, strip_encoding_pats=True,\n resolve_entities=True)[0]\n if '<title>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<series>.+?)\\s+ # The series name\n \\((Book)\\s* # Book declaration\n (?P<index>[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)<em>--This text ref.*?</em>', '', 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 '<div>%s</div>' % (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<index>[0-9.]+)\\s*(?:å·»|冊)\\s*:\\s*(?P<series>.+)', raw.strip())\n else:\n m = re.search(r'(?:Book|Libro|Buch)\\s+(?P<index>[0-9.]+)\\s+(?:of|de|von)\\s+([0-9.]+)\\s*:\\s*(?P<series>.+)', 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 = '<title>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 <kovid@kovidgoyal.net>'\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 <kovid at kovidgoyal.net>'\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 <kovid at kovidgoyal.net>\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('.</p>\\n\\n<p>')\n else:\n parts.append(prepare_string_for_xml(x))\n raw = '<p>' + ''.join(parts) + '</p>'\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 <kovid@kovidgoyal.net>'\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 <kovid@kovidgoyal.net>'\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 <kovid at kovidgoyal.net>\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 Binary files differdeleted file mode 100644 index 722e2c7..0000000 --- a/dotfiles/system/.config/calibre/plugins/Apple Books covers.zip +++ /dev/null diff --git a/dotfiles/system/.config/calibre/plugins/Barnes & Noble.zip b/dotfiles/system/.config/calibre/plugins/Barnes & Noble.zip Binary files differdeleted file mode 100644 index 9c3932d..0000000 --- a/dotfiles/system/.config/calibre/plugins/Barnes & Noble.zip +++ /dev/null diff --git a/dotfiles/system/.config/calibre/plugins/Clean Comments.zip b/dotfiles/system/.config/calibre/plugins/Clean Comments.zip Binary files differdeleted file mode 100644 index 224fcd7..0000000 --- a/dotfiles/system/.config/calibre/plugins/Clean Comments.zip +++ /dev/null diff --git a/dotfiles/system/.config/calibre/plugins/Extract ISBN.zip b/dotfiles/system/.config/calibre/plugins/Extract ISBN.zip Binary files differdeleted file mode 100644 index 7214c0e..0000000 --- a/dotfiles/system/.config/calibre/plugins/Extract ISBN.zip +++ /dev/null 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 Binary files differdeleted file mode 100644 index 767f621..0000000 --- a/dotfiles/system/.config/calibre/plugins/Favourites Menu.zip +++ /dev/null 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 Binary files differdeleted file mode 100644 index a6ce77a..0000000 --- a/dotfiles/system/.config/calibre/plugins/Find Duplicates.zip +++ /dev/null diff --git a/dotfiles/system/.config/calibre/plugins/KePub Metadata Reader.zip b/dotfiles/system/.config/calibre/plugins/KePub Metadata Reader.zip Binary files differdeleted file mode 100644 index 13394c9..0000000 --- a/dotfiles/system/.config/calibre/plugins/KePub Metadata Reader.zip +++ /dev/null diff --git a/dotfiles/system/.config/calibre/plugins/KePub Metadata Writer.zip b/dotfiles/system/.config/calibre/plugins/KePub Metadata Writer.zip Binary files differdeleted file mode 100644 index 7ac4e55..0000000 --- a/dotfiles/system/.config/calibre/plugins/KePub Metadata Writer.zip +++ /dev/null diff --git a/dotfiles/system/.config/calibre/plugins/Kindle hi-res covers.zip b/dotfiles/system/.config/calibre/plugins/Kindle hi-res covers.zip Binary files differdeleted file mode 100644 index 40106fe..0000000 --- a/dotfiles/system/.config/calibre/plugins/Kindle hi-res covers.zip +++ /dev/null diff --git a/dotfiles/system/.config/calibre/plugins/Kobo Metadata.zip b/dotfiles/system/.config/calibre/plugins/Kobo Metadata.zip Binary files differdeleted file mode 100644 index aaf91cb..0000000 --- a/dotfiles/system/.config/calibre/plugins/Kobo Metadata.zip +++ /dev/null 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 Binary files differdeleted file mode 100644 index 4d62c4b..0000000 --- a/dotfiles/system/.config/calibre/plugins/Kobo Utilities.zip +++ /dev/null diff --git a/dotfiles/system/.config/calibre/plugins/KoboTouchExtended.zip b/dotfiles/system/.config/calibre/plugins/KoboTouchExtended.zip Binary files differdeleted file mode 100644 index 3640da2..0000000 --- a/dotfiles/system/.config/calibre/plugins/KoboTouchExtended.zip +++ /dev/null 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 Binary files differdeleted file mode 100644 index 548c8ed..0000000 --- a/dotfiles/system/.config/calibre/plugins/Open With.zip +++ /dev/null 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 Binary files differdeleted file mode 100644 index 3a46edf..0000000 --- a/dotfiles/system/.config/calibre/plugins/Reading List.zip +++ /dev/null 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 Binary files differdeleted file mode 100644 index 61f919b..0000000 --- a/dotfiles/system/.config/calibre/plugins/Wikidata.zip +++ /dev/null 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 @@ -<?xml version='1.0' encoding='utf-8'?> -<recipe_collection xmlns="http://calibre-ebook.com/recipe_collection"> - - <recipe_customization keep_issues="0" id="builtin:cracked_com" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:economist_free" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:economist_news" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:howtogeek" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:instapaper" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:nejm" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="7" id="builtin:nytimes" add_title_tag="yes" custom_tags="news" recipe_specific_options="{"web": "yes", "days": "1", "comp": "yes"}"/> - - <recipe_customization keep_issues="0" id="builtin:seattle_times" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:wsj_free" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:wsj" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:wash_post" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:wash_post_print" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:san_fran_chronicle" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:nytfeeds" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:nyt_magazine" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:nytimes_cooking" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:nytimesbook" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:lex_fridman_podcast" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:thenewcriterion" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:the_register" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:bbc_fast" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:american_thinker" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:barrons" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:bloomberg" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:nautilus" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:nymag" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:nypost" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:new_york_review_of_books" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:substack" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:cato" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <scheduled_recipe id="builtin:new_yorker" title="The New Yorker Magazine" last_downloaded="2026-01-11T18:56:25.700603+00:00"><schedule type="days_of_week">6:6:0</schedule></scheduled_recipe> - - <recipe_customization keep_issues="0" id="builtin:new_yorker" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:the_week_magazine_free" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:atlantic_com" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <scheduled_recipe id="builtin:atlantic" title="The Atlantic" last_downloaded="2025-10-02T21:22:05.499182+00:00"><schedule type="days_of_month">24:6:0</schedule></scheduled_recipe> - - <recipe_customization keep_issues="0" id="builtin:atlantic" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <scheduled_recipe id="builtin:harpers" title="Harper’s Magazine" last_downloaded="2025-10-02T21:21:56.402441+00:00"><schedule type="days_of_month">24:6:0</schedule></scheduled_recipe> - - <recipe_customization keep_issues="0" id="builtin:harpers" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:rushisaband" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:prospectmaguk_free" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:oxford_mail" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:lrb" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:interfax" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:ukrinform_en" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:nv_en" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:kyivpost_en" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:gagadget_en" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:google_news" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:moscow_times" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:novaya_gazeta_europe_en" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:coda" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:moscowtimes_en" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:t_invariant_en" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:sputnik" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:russiafeed" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:spiegel_int" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:haaretz_en" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:foreignaffairs" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:new_york_review_of_books_no_sub" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:phillosophy_now" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:scientific_american" add_title_tag="yes" custom_tags="news" recipe_specific_options="{"res": "500"}"/> - - <recipe_customization keep_issues="0" id="builtin:daily_writing_tips" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:economist_world_ahead" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:tls_mag" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:ars_technica" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:motherjones" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:time_magazine" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:wired" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:the_federalist" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:le_monde_en" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:deutsche_welle_en" add_title_tag="yes" custom_tags="" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="7" id="custom:1000" add_title_tag="yes" custom_tags="news" recipe_specific_options="{"web": "yes", "days": "1", "res": "mediumThreeByTwo440", "comp": "yes"}"/> - - <scheduled_recipe id="builtin:newrepublicmag" title="The New Republic Magazine" last_downloaded="2026-01-01T06:00:38.301817+00:00"><schedule type="days_of_month">1:0:0</schedule></scheduled_recipe> - - <recipe_customization keep_issues="0" id="builtin:newrepublicmag" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <recipe_customization keep_issues="0" id="builtin:jacobinmag" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <account_info id="builtin:lemonde_dip" username="craigmartinjennings@gmail.com" password="cmjDase1n"/> - - <scheduled_recipe id="builtin:lemonde_dip" title="Le Monde diplomatique - English edition" last_downloaded="2026-01-13T14:53:10.643908+00:00"><schedule type="interval">30.000000</schedule></scheduled_recipe> - - <recipe_customization keep_issues="0" id="builtin:lemonde_dip" add_title_tag="yes" custom_tags="news" recipe_specific_options="{}"/> - - <scheduled_recipe id="builtin:economist" title="The Economist" last_downloaded="2026-01-17T12:02:39.598845+00:00"><schedule type="days_of_week">5:6:0</schedule></scheduled_recipe> - - <recipe_customization keep_issues="7" id="builtin:economist" add_title_tag="yes" custom_tags="news" recipe_specific_options="{"res": "834"}"/> - - <recipe_customization keep_issues="5" id="builtin:nytimes_sub" add_title_tag="yes" custom_tags="news" recipe_specific_options="{"days": "1", "res": "mediumThreeByTwo440", "comp": "yes"}"/> - -</recipe_collection>
\ 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 --- a/dotfiles/system/.config/calibre/server-config.txt +++ /dev/null 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": [ - "<b>{title}</b> by {authors}", - "{series_index} of <i>{series}</i>|||{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 Binary files differdeleted file mode 100644 index c191559..0000000 --- a/dotfiles/system/.config/calibre/server-users.sqlite +++ /dev/null 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 = "<small>%a</small>\n<b>%s</b>\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 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE fontconfig SYSTEM "fonts.dtd"> -<fontconfig> - <match target="font"> - <edit name="antialias" mode="assign"> - <bool>true</bool> - </edit> - <edit name="hinting" mode="assign"> - <bool>true</bool> - </edit> - <edit name="hintstyle" mode="assign"> - <const>hintslight</const> - </edit> - <edit name="rgba" mode="assign"> - <const>none</const> - </edit> - <edit name="autohint" mode="assign"> - <bool>true</bool> - </edit> - <edit name="lcdfilter" mode="assign"> - <const>lcdnone</const> - </edit> - <edit name="dpi" mode="assign"> - <double>144</double> - </edit> - </match> -</fontconfig> 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 <c@cjennings.net> -# - - -########################################################################## -# 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 <f-5> push :source<space>~/.config/lf/lfrc<enter> - -########################################################################## -# 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<space> - - -# 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 <enter> open - - -# DELETE -# -cmd delete $rm -rf "$fx" -map dd delete - -map <delete> 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 <c-f> :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 --- a/dotfiles/system/.config/mc/panels.ini +++ /dev/null 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 <http://www.replaygain.org> 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 <http://www.replaygain.org> 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": "<empty>", - "name": "Debug Log File", - "type": "text", - "value": "<empty>" - }, - { - "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": "<empty>", - "name": "SyzygyPath", - "type": "text", - "value": "<empty>" - }, - { - "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 @@ -<?xml version="1.0" ?><docks><dock id="main"><v pos="0.9992458521870287"><h pos="0.9995551601423488"><leaf current="board" dockable="False"><panel id="board" visible="True"/></leaf><v pos="0.999245283018868"><leaf current="annotationPanel" dockable="True"><panel id="annotationPanel" visible="True"/><panel id="historyPanel" visible="True"/><panel id="scorePanel" visible="True"/></leaf><leaf current="chatPanel" dockable="True"><panel id="chatPanel" visible="True"/><panel id="commentPanel" visible="False"/></leaf></v></h><leaf current="engineOutputPanel" dockable="True"><panel id="bookPanel" visible="False"/><panel id="engineOutputPanel" visible="True"/></leaf></v></dock></docks>
\ 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 7004d0e..0000000 --- a/dotfiles/system/.config/qalculate/qalculate-gtk.cfg +++ /dev/null @@ -1,329 +0,0 @@ - -[General] -version=5.8.2 -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/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<ENTER>" 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 <filename> - - 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<ENTER>". - 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 <TAB> and -1 for <S-TAB> 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 <TAB> is pressed. -# quick(): called after each keypress. -# -# tab() argument tabnum is 1 for <TAB> and -1 for <S-TAB> 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 <newcommand> <oldcommand> - - 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 <newcommand> <oldcommand>', bad=True) - return - - self.fm.commands.alias(self.arg(1), self.rest(2)) - - -class echo(Command): - """:echo <text> - - Display the text in the statusbar. - """ - - def execute(self): - self.fm.notify(self.rest(1)) - - -class cd(Command): - """:cd [-r] <path> - - 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 <command1>; <command2>; ... - - Calls multiple commands at once, separated by semicolons. - """ - - def execute(self): - if not self.rest(1).strip(): - self.fm.notify('Syntax: chain <command1>; <command2>; ...', 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 <option name>=<python expression> - - Gives an option a new value. - - Use `:set <option>!` 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=<regular expression> <option name>=<python expression> - - 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 <tag or tags> <option name>=<option value> - - 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=<regexp> | tag=<tag(s)>] <linemode>", 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 [<tags>] - - 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 <command> - - 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 [<tags>] - - 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 <dirname> - - Creates a directory with the name <dirname>. - """ - - 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 <fname> - - Creates a file with the name <fname>. - """ - - 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 <filename> - - 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] <python code> - - 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 <newname> - - Changes the name of the currently highlighted file to <newname> - """ - - 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 <newname>', 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 <current file>" 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 <octal number> - - 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 <octal number>", 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 <newpath> - - Changes the linked path of the currently highlighted symlink to <newpath> - """ - - def execute(self): - new_path = self.rest(1) - tfile = self.fm.thisfile - - if not new_path: - return self.fm.notify('Syntax: relink <newpath>', 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 <keys> <newkeys1> [<newkeys2>...] - - Copies a "browser" keybinding from <keys> to <newkeys> - """ - 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 <keys> <newkeys1> [<newkeys2>...] - - Copies a "pager" keybinding from <keys> to <newkeys> - """ - context = 'pager' - - -class copycmap(copymap): - """:copycmap <keys> <newkeys1> [<newkeys2>...] - - Copies a "console" keybinding from <keys> to <newkeys> - """ - context = 'console' - - -class copytmap(copymap): - """:copycmap <keys> <newkeys1> [<newkeys2>...] - - Copies a "taskview" keybinding from <keys> to <newkeys> - """ - context = 'taskview' - - -class unmap(Command): - """:unmap <keys> [<keys2>, ...] - - 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 <keys> [<keys2>, ...] - - Remove the given "console" mappings - """ - context = 'browser' - - -class punmap(unmap): - """:punmap <keys> [<keys2>, ...] - - Remove the given "pager" mappings - """ - context = 'pager' - - -class tunmap(unmap): - """:tunmap <keys> [<keys2>, ...] - - Remove the given "taskview" mappings - """ - context = 'taskview' - - -class map_(Command): - """:map <keysequence> <command> - - 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} <keysequence> <command>".format(self.get_name()), bad=True) - return - - self.fm.ui.keymaps.bind(self.context, self.arg(1), self.rest(2)) - - -class cmap(map_): - """:cmap <keysequence> <command> - - Maps a command to a keysequence in the "console" context. - - Example: - cmap <ESC> console_close - cmap <C-x> console_type test - """ - context = 'console' - - -class tmap(map_): - """:tmap <keysequence> <command> - - Maps a command to a keysequence in the "taskview" context. - """ - context = 'taskview' - - -class pmap(map_): - """:pmap <keysequence> <command> - - Maps a command to a keysequence in the "pager" context. - """ - context = 'pager' - - -class scout(Command): - """:scout [-FLAGS...] <pattern> - - 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 <string> - - 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 <level> - - 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 <level>", 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 <key1> [<key2> [<key3> ...]] - - 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 <key> [<value>] - - 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 <mode> - - 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<tab>" 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 <C-r> reset -map <C-l> redraw_window -map <C-c> abort -map <esc> 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 <C-p> 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 "<any> tag_toggle tag=%any -map <Space> 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 <F1> help -map <F2> rename_append -map <F3> display_file -map <F4> edit -map <F5> copy -map <F6> cut -map <F7> console mkdir%space -map <F8> console delete -map <F10> exit - -# In case you work on a keyboard with dvorak layout -map <UP> move up=1 -map <DOWN> move down=1 -map <LEFT> move left=1 -map <RIGHT> move right=1 -map <HOME> move to=0 -map <END> move to=-1 -map <PAGEDOWN> move down=1 pages=True -map <PAGEUP> move up=1 pages=True -map <CR> move right=1 -#map <DELETE> console delete -map <INSERT> console touch%space - -# VIM-like -copymap <UP> k -copymap <DOWN> j -copymap <LEFT> h -copymap <RIGHT> l -copymap <HOME> gg -copymap <END> G -copymap <PAGEDOWN> <C-F> -copymap <PAGEUP> <C-B> - -map J move down=0.5 pages=True -map K move up=0.5 pages=True -copymap J <C-D> -copymap K <C-U> - -# 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 <C-n> tab_new -map <C-w> tab_close -map <TAB> tab_move 1 -map <S-TAB> tab_move -1 -map <A-Right> tab_move 1 -map <A-Left> 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 <a-1> tab_open 1 -map <a-2> tab_open 2 -map <a-3> tab_open 3 -map <a-4> tab_open 4 -map <a-5> tab_open 5 -map <a-6> tab_open 6 -map <a-7> tab_open 7 -map <a-8> tab_open 8 -map <a-9> tab_open 9 -map <a-r> tab_shift 1 -map <a-l> 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 <C-h> set show_hidden! -copymap <C-h> <backspace> -copymap <backspace> <backspace2> -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 `<any> enter_bookmark %any -map '<any> enter_bookmark %any -map m<any> set_bookmark %any -map um<any> unset_bookmark %any - -map m<bg> draw_bookmarks -copymap m<bg> um<bg> `<bg> '<bg> - -# 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 <tab> eval fm.ui.console.tab() -cmap <s-tab> eval fm.ui.console.tab(-1) -cmap <ESC> eval fm.ui.console.close() -cmap <CR> eval fm.ui.console.execute() -cmap <C-l> redraw_window - -copycmap <ESC> <C-c> -copycmap <CR> <C-j> - -# Move around -cmap <up> eval fm.ui.console.history_move(-1) -cmap <down> eval fm.ui.console.history_move(1) -cmap <left> eval fm.ui.console.move(left=1) -cmap <right> eval fm.ui.console.move(right=1) -cmap <home> eval fm.ui.console.move(right=0, absolute=True) -cmap <end> eval fm.ui.console.move(right=-1, absolute=True) -cmap <a-b> eval fm.ui.console.move_word(left=1) -cmap <a-f> eval fm.ui.console.move_word(right=1) - -copycmap <a-b> <a-left> -copycmap <a-f> <a-right> - -# Line Editing -cmap <backspace> eval fm.ui.console.delete(-1) -cmap <delete> eval fm.ui.console.delete(0) -cmap <C-w> eval fm.ui.console.delete_word() -cmap <A-d> eval fm.ui.console.delete_word(backward=False) -cmap <C-k> eval fm.ui.console.delete_rest(1) -cmap <C-u> eval fm.ui.console.delete_rest(-1) -cmap <C-y> eval fm.ui.console.paste() - -# And of course the emacs way -copycmap <ESC> <C-g> -copycmap <up> <C-p> -copycmap <down> <C-n> -copycmap <left> <C-b> -copycmap <right> <C-f> -copycmap <home> <C-a> -copycmap <end> <C-e> -copycmap <delete> <C-d> -copycmap <backspace> <C-h> - -# Note: There are multiple ways to express backspaces. <backspace> (code 263) -# and <backspace2> (code 127). To be sure, use both. -copycmap <backspace> <backspace2> - -# This special expression allows typing in numerals: -cmap <allow_quantifiers> false - -# =================================================================== -# == Pager Keybindings -# =================================================================== - -# Movement -pmap <down> pager_move down=1 -pmap <up> pager_move up=1 -pmap <left> pager_move left=4 -pmap <right> pager_move right=4 -pmap <home> pager_move to=0 -pmap <end> pager_move to=-1 -pmap <pagedown> pager_move down=1.0 pages=True -pmap <pageup> pager_move up=1.0 pages=True -pmap <C-d> pager_move down=0.5 pages=True -pmap <C-u> pager_move up=0.5 pages=True - -copypmap <UP> k <C-p> -copypmap <DOWN> j <C-n> <CR> -copypmap <LEFT> h -copypmap <RIGHT> l -copypmap <HOME> g -copypmap <END> G -copypmap <C-d> d -copypmap <C-u> u -copypmap <PAGEDOWN> n f <C-F> <Space> -copypmap <PAGEUP> p b <C-B> - -# Basic -pmap <C-l> redraw_window -pmap <ESC> pager_close -copypmap <ESC> q Q i <F3> -pmap E edit_file - -# =================================================================== -# == Taskview Keybindings -# =================================================================== - -# Movement -tmap <up> taskview_move up=1 -tmap <down> taskview_move down=1 -tmap <home> taskview_move to=0 -tmap <end> taskview_move to=-1 -tmap <pagedown> taskview_move down=1.0 pages=True -tmap <pageup> taskview_move up=1.0 pages=True -tmap <C-d> taskview_move down=0.5 pages=True -tmap <C-u> taskview_move up=0.5 pages=True - -copytmap <UP> k <C-p> -copytmap <DOWN> j <C-n> <CR> -copytmap <HOME> g -copytmap <END> G -copytmap <C-u> u -copytmap <PAGEDOWN> n f <C-F> <Space> -copytmap <PAGEUP> p b <C-B> - -# Changing priority and deleting tasks -tmap J eval -q fm.ui.taskview.task_move(-1) -tmap K eval -q fm.ui.taskview.task_move(0) -# tmap dd eval -q fm.ui.taskview.task_remove() -tmap <pagedown> eval -q fm.ui.taskview.task_move(-1) -tmap <pageup> eval -q fm.ui.taskview.task_move(0) -tmap <delete> eval -q fm.ui.taskview.task_remove() - -# Basic -tmap <C-l> redraw_window -tmap <ESC> taskview_close -copytmap <ESC> q Q w <C-c> - -######### cjennings - -## image transformation -map r9 shell convert %s -rotate 90 %s - - -## navigation and file management -map gslr cd /media/remote0/3 -map mslr shell mv /media/remote0/3 -map cslr shell cp /media/remote0/3 - -### MAIN DIRECTORIES -map mdx shell mv %s ~/documents -map cdx shell cp %s ~/documents -map gdx cd ~/documents - -map gdr cd ~/documents/reference -map mdr shell mv %s ~/documents/reference -map cdr shell cp %s ~/documents/reference - -map mdl shell mv %d ~/downloads -map cdl shell cp %d ~/downloads -map gdl cd ~/downloads - -map mpx shell mv %s ~/pictures -map cpx shell cp %s ~/pictures -map gpx cd ~/pictures - -map gps cd ~/pictures/screenshots -map mps shell mv %s ~/pictures/screenshots -map cps shell cp %s ~/pictures/screenshots - -map gpw cd ~/pictures/wallpaper -map mpw shell mv %s ~/pictures/wallpaper -map cpw shell cp %s ~/pictures/wallpaper - -map gmx cd ~/music - -map gvx cd ~/videos -map cvx shell cp %s ~/videos -map mvx shell mv %s ~/videos - -## CONFIG -map grc cd ~/.config/ranger -map crc shell cp %s ~/.config/ranger -map mrc shell mv %s ~/.config/ranger - -### OPEN WITH -# open with alternate video player -map owm shell mpv %s - -# open with gimp -map owg shell gimp %s - -# open with zathura -map owz shell zathura %s - -### MISC ACTIONS -# set background wallpaper using feh -map bg shell feh --bg-fill %s && notify-send "ranger" "wallpaper updated" - -# delete -map dx shell rm -f %s - -# remap cut/uncut -map xx cut -map ux uncut diff --git a/dotfiles/system/.config/ranger/rifle.conf b/dotfiles/system/.config/ranger/rifle.conf deleted file mode 100644 index 8cc0ce7..0000000 --- a/dotfiles/system/.config/ranger/rifle.conf +++ /dev/null @@ -1,257 +0,0 @@ -# vim: ft=cfg -# -# This is the configuration file of "rifle", ranger's file executor/opener. -# Each line consists of conditions and a command. For each line the conditions -# are checked and if they are met, the respective command is run. -# -# Syntax: -# <condition1> , <condition2> , ... = command -# -# The command can contain these environment variables: -# $1-$9 | The n-th selected file -# $@ | All selected files -# -# If you use the special command "ask", rifle will ask you what program to run. -# -# Prefixing a condition with "!" will negate its result. -# These conditions are currently supported: -# match <regexp> | The regexp matches $1 -# ext <regexp> | The regexp matches the extension of $1 -# mime <regexp> | The regexp matches the mime type of $1 -# name <regexp> | The regexp matches the basename of $1 -# path <regexp> | The regexp matches the absolute path of $1 -# has <program> | The program is installed (i.e. located in $PATH) -# env <variable> | The environment variable "variable" is non-empty -# file | $1 is a file -# directory | $1 is a directory -# number <n> | change the number of this command to n -# terminal | stdin, stderr and stdout are connected to a terminal -# X | $DISPLAY is not empty (i.e. Xorg runs) -# -# There are also pseudo-conditions which have a "side effect": -# flag <flags> | Change how the program is run. See below. -# label <label> | Assign a label or name to the command so it can -# | be started with :open_with <label> in ranger -# | or `rifle -p <label>` in the standalone executable. -# else | Always true. -# -# Flags are single characters which slightly transform the command: -# f | Fork the program, make it run in the background. -# | New command = setsid $command >& /dev/null & -# r | Execute the command with root permissions -# | New command = sudo $command -# t | Run the program in a new terminal. If $TERMCMD is not defined, -# | rifle will attempt to extract it from $TERM. -# | New command = $TERMCMD -e $command -# Note: The "New command" serves only as an illustration, the exact -# implementation may differ. -# Note: When using rifle in ranger, there is an additional flag "c" for -# only running the current file even if you have marked multiple files. - -#------------------------------------------- -# Websites -#------------------------------------------- -# Rarely installed browsers get higher priority; It is assumed that if you -# install a rare browser, you probably use it. Firefox/konqueror/w3m on the -# other hand are often only installed as fallback browsers. -ext x?html?, has surf, X, flag f = surf -- file://"$1" -ext x?html?, has vimprobable, X, flag f = vimprobable -- "$@" -ext x?html?, has vimprobable2, X, flag f = vimprobable2 -- "$@" -ext x?html?, has qutebrowser, X, flag f = qutebrowser -- "$@" -ext x?html?, has dwb, X, flag f = dwb -- "$@" -ext x?html?, has jumanji, X, flag f = jumanji -- "$@" -ext x?html?, has luakit, X, flag f = luakit -- "$@" -ext x?html?, has uzbl, X, flag f = uzbl -- "$@" -ext x?html?, has uzbl-tabbed, X, flag f = uzbl-tabbed -- "$@" -ext x?html?, has uzbl-browser, X, flag f = uzbl-browser -- "$@" -ext x?html?, has uzbl-core, X, flag f = uzbl-core -- "$@" -ext x?html?, has midori, X, flag f = midori -- "$@" -ext x?html?, has chromium-browser, X, flag f = chromium-browser -- "$@" -ext x?html?, has chromium, X, flag f = chromium -- "$@" -ext x?html?, has google-chrome, X, flag f = google-chrome -- "$@" -ext x?html?, has opera, X, flag f = opera -- "$@" -ext x?html?, has firefox, X, flag f = firefox -- "$@" -ext x?html?, has seamonkey, X, flag f = seamonkey -- "$@" -ext x?html?, has iceweasel, X, flag f = iceweasel -- "$@" -ext x?html?, has epiphany, X, flag f = epiphany -- "$@" -ext x?html?, has konqueror, X, flag f = konqueror -- "$@" -ext x?html?, has elinks, terminal = elinks "$@" -ext x?html?, has links2, terminal = links2 "$@" -ext x?html?, has links, terminal = links "$@" -ext x?html?, has lynx, terminal = lynx -- "$@" -ext x?html?, has w3m, terminal = w3m "$@" - -#------------------------------------------- -# Misc -#------------------------------------------- -# Define the "editor" for text files as first action -mime ^text, label editor = ${VISUAL:-$EDITOR} -- "$@" -mime ^text, label pager = "$PAGER" -- "$@" -!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|js|sh|php = ${VISUAL:-$EDITOR} -- "$@" -!mime ^text, label pager, ext xml|json|csv|tex|py|pl|rb|js|sh|php = "$PAGER" -- "$@" - -ext 1 = man "$1" -ext s[wmf]c, has zsnes, X = zsnes "$1" -ext s[wmf]c, has snes9x-gtk,X = snes9x-gtk "$1" -ext nes, has fceux, X = fceux "$1" -ext exe = wine "$1" -name ^[mM]akefile$ = make - -#-------------------------------------------- -# Code -#------------------------------------------- -ext py = python3 -- "$1" -ext pl = perl -- "$1" -ext rb = ruby -- "$1" -ext js = node -- "$1" -ext sh = sh -- "$1" -ext php = php -- "$1" - -#-------------------------------------------- -# Audio without X -#------------------------------------------- -mime ^audio|ogg$, terminal, has mpv = mpv -- "$@" -mime ^audio|ogg$, terminal, has mplayer2 = mplayer2 -- "$@" -mime ^audio|ogg$, terminal, has mplayer = mplayer -- "$@" -ext midi?, terminal, has wildmidi = wildmidi -- "$@" - -#-------------------------------------------- -# Video/Audio with a GUI -#------------------------------------------- -mime ^video, has mpv, X, flag f = mpv -- "$@" -mime ^video, has mpv, X, flag f = mpv --fs -- "$@" -mime ^video|audio, has vlc, X, flag f = vlc -- "$@" -mime ^video|audio, has gmplayer, X, flag f = gmplayer -- "$@" -mime ^video|audio, has smplayer, X, flag f = smplayer "$@" -mime ^video, has mplayer2, X, flag f = mplayer2 -- "$@" -mime ^video, has mplayer2, X, flag f = mplayer2 -fs -- "$@" -mime ^video, has mplayer, X, flag f = mplayer -- "$@" -mime ^video, has mplayer, X, flag f = mplayer -fs -- "$@" -mime ^video|audio, has totem, X, flag f = totem -- "$@" -mime ^video|audio, has totem, X, flag f = totem --fullscreen -- "$@" - -#-------------------------------------------- -# Video without X: -#------------------------------------------- -mime ^video, terminal, !X, has mpv = mpv -- "$@" -mime ^video, terminal, !X, has mplayer2 = mplayer2 -- "$@" -mime ^video, terminal, !X, has mplayer = mplayer -- "$@" - -#------------------------------------------- -# Documents -#------------------------------------------- -ext pdf, has llpp, X, flag f = llpp "$@" -ext pdf, has zathura, X, flag f = zathura -- "$@" -ext pdf, has mupdf, X, flag f = mupdf "$@" -ext pdf, has mupdf-x11,X, flag f = mupdf-x11 "$@" -ext pdf, has apvlv, X, flag f = apvlv -- "$@" -ext pdf, has xpdf, X, flag f = xpdf -- "$@" -ext pdf, has evince, X, flag f = evince -- "$@" -ext pdf, has atril, X, flag f = atril -- "$@" -ext pdf, has okular, X, flag f = okular -- "$@" -ext pdf, has epdfview, X, flag f = epdfview -- "$@" -ext pdf, has qpdfview, X, flag f = qpdfview "$@" -ext pdf, has open, X, flag f = open "$@" - -ext docx?, has catdoc, terminal = catdoc -- "$@" | "$PAGER" - -ext sxc|xlsx?|xlt|xlw|gnm|gnumeric, has gnumeric, X, flag f = gnumeric -- "$@" -ext sxc|xlsx?|xlt|xlw|gnm|gnumeric, has kspread, X, flag f = kspread -- "$@" -ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has libreoffice, X, flag f = libreoffice "$@" -ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has soffice, X, flag f = soffice "$@" -ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has ooffice, X, flag f = ooffice "$@" - -ext djvu, has zathura,X, flag f = zathura -- "$@" -ext djvu, has evince, X, flag f = evince -- "$@" -ext djvu, has atril, X, flag f = atril -- "$@" -ext djvu, has djview, X, flag f = djview -- "$@" - -ext epub, has zathura, X, flag f = zathura -- "$@" -ext mobi, has ebook-viewer, X, flag f = ebook-viewer -- "$@" - -#------------------------------------------- -# Image Viewing: -#------------------------------------------- -mime ^image/svg, has inkscape, X, flag f = inkscape -- "$@" -mime ^image/svg, has display, X, flag f = display -- "$@" - -mime ^image, has pqiv, X, flag f = pqiv -- "$@" -mime ^image, has nsxiv, X, flag f = nsxiv -- "$@" -mime ^image, has sxiv, X, flag f = sxiv -- "$@" -mime ^image, has feh, X, flag f = feh -- "$@" -mime ^image, has mirage, X, flag f = mirage -- "$@" -mime ^image, has ristretto, X, flag f = ristretto "$@" -mime ^image, has eog, X, flag f = eog -- "$@" -mime ^image, has eom, X, flag f = eom -- "$@" -mime ^image, has nomacs, X, flag f = nomacs -- "$@" -mime ^image, has geeqie, X, flag f = geeqie -- "$@" -mime ^image, has gwenview, X, flag f = gwenview -- "$@" -mime ^image, has gimp, X, flag f = gimp -- "$@" -ext xcf, X, flag f = gimp -- "$@" - -#------------------------------------------- -# Archives -#------------------------------------------- - -# avoid password prompt by providing empty password -ext 7z, has 7z = 7z -p l "$@" | "$PAGER" -# This requires atool -ext ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has atool = atool --list --each -- "$@" | "$PAGER" -ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has atool = atool --list --each -- "$@" | "$PAGER" -ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has atool = atool --extract --each -- "$@" -ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has atool = atool --extract --each -- "$@" - -# Listing and extracting archives without atool: -ext tar|gz|bz2|xz, has tar = tar vvtf "$1" | "$PAGER" -ext tar|gz|bz2|xz, has tar = for file in "$@"; do tar vvxf "$file"; done -ext bz2, has bzip2 = for file in "$@"; do bzip2 -dk "$file"; done -ext zip, has unzip = unzip -l "$1" | "$PAGER" -ext zip, has unzip = for file in "$@"; do unzip -d "${file%.*}" "$file"; done -ext ace, has unace = unace l "$1" | "$PAGER" -ext ace, has unace = for file in "$@"; do unace e "$file"; done -ext rar, has unrar = unrar l "$1" | "$PAGER" -ext rar, has unrar = for file in "$@"; do unrar x "$file"; done - -#------------------------------------------- -# Flag t fallback terminals -#------------------------------------------- -# Rarely installed terminal emulators get higher priority; It is assumed that -# if you install a rare terminal emulator, you probably use it. -# gnome-terminal/konsole/xterm on the other hand are often installed as part of -# a desktop environment or as fallback terminal emulators. -mime ^ranger/x-terminal-emulator, has terminator = terminator -x "$@" -mime ^ranger/x-terminal-emulator, has st = st -e "$@" -mime ^ranger/x-terminal-emulator, has terminology = terminology -e "$@" -mime ^ranger/x-terminal-emulator, has kitty = kitty -- "$@" -mime ^ranger/x-terminal-emulator, has alacritty = alacritty -e "$@" -mime ^ranger/x-terminal-emulator, has sakura = sakura -e "$@" -mime ^ranger/x-terminal-emulator, has lilyterm = lilyterm -e "$@" -#mime ^ranger/x-terminal-emulator, has cool-retro-term = cool-retro-term -e "$@" -mime ^ranger/x-terminal-emulator, has termite = termite -x '"$@"' -#mime ^ranger/x-terminal-emulator, has yakuake = yakuake -e "$@" -mime ^ranger/x-terminal-emulator, has guake = guake -ne "$@" -mime ^ranger/x-terminal-emulator, has tilda = tilda -c "$@" -mime ^ranger/x-terminal-emulator, has urxvt = urxvt -e "$@" -mime ^ranger/x-terminal-emulator, has pantheon-terminal = pantheon-terminal -e "$@" -mime ^ranger/x-terminal-emulator, has lxterminal = lxterminal -e "$@" -mime ^ranger/x-terminal-emulator, has mate-terminal = mate-terminal -x "$@" -mime ^ranger/x-terminal-emulator, has xfce4-terminal = xfce4-terminal -x "$@" -mime ^ranger/x-terminal-emulator, has konsole = konsole -e "$@" -mime ^ranger/x-terminal-emulator, has gnome-terminal = gnome-terminal -- "$@" -mime ^ranger/x-terminal-emulator, has xterm = xterm -e "$@" - -#------------------------------------------- -# Misc -#------------------------------------------- -label wallpaper, number 11, mime ^image, has feh, X = feh --bg-scale "$1" -label wallpaper, number 12, mime ^image, has feh, X = feh --bg-tile "$1" -label wallpaper, number 13, mime ^image, has feh, X = feh --bg-center "$1" -label wallpaper, number 14, mime ^image, has feh, X = feh --bg-fill "$1" - -# Define the editor for non-text files + pager as last action - !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = ask -label editor, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = ${VISUAL:-$EDITOR} -- "$@" -label pager, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = "$PAGER" -- "$@" - -# The very last action, so that it's never triggered accidentally, is to execute a program: -mime application/x-executable = "$1" diff --git a/dotfiles/system/.config/ranger/scope.sh b/dotfiles/system/.config/ranger/scope.sh deleted file mode 100755 index 13a25b4..0000000 --- a/dotfiles/system/.config/ranger/scope.sh +++ /dev/null @@ -1,216 +0,0 @@ -#!/usr/bin/env bash - -set -o noclobber -o noglob -o nounset -o pipefail -IFS=$'\n' - -# If the option `use_preview_script` is set to `true`, -# then this script will be called and its output will be displayed in ranger. -# ANSI color codes are supported. -# STDIN is disabled, so interactive scripts won't work properly - -# This script is considered a configuration file and must be updated manually. -# It will be left untouched if you upgrade ranger. - -# Meanings of exit codes: -# code | meaning | action of ranger -# -----+------------+------------------------------------------- -# 0 | success | Display stdout as preview -# 1 | no preview | Display no preview at all -# 2 | plain text | Display the plain content of the file -# 3 | fix width | Don't reload when width changes -# 4 | fix height | Don't reload when height changes -# 5 | fix both | Don't ever reload -# 6 | image | Display the image `$IMAGE_CACHE_PATH` points to as an image preview -# 7 | image | Display the file directly as an image - -# Script arguments -FILE_PATH="${1}" # Full path of the highlighted file -PV_WIDTH="${2}" # Width of the preview pane (number of fitting characters) -PV_HEIGHT="${3}" # Height of the preview pane (number of fitting characters) -IMAGE_CACHE_PATH="${4}" # Full path that should be used to cache image preview -PV_IMAGE_ENABLED="${5}" # 'True' if image previews are enabled, 'False' otherwise. - -FILE_EXTENSION="${FILE_PATH##*.}" -FILE_EXTENSION_LOWER=$(echo ${FILE_EXTENSION} | tr '[:upper:]' '[:lower:]') - -# Settings -HIGHLIGHT_SIZE_MAX=262143 # 256KiB -HIGHLIGHT_TABWIDTH=8 -HIGHLIGHT_STYLE='pablo' -PYGMENTIZE_STYLE='autumn' - - -handle_extension() { - case "${FILE_EXTENSION_LOWER}" in - # Archive - a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\ - rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip) - atool --list -- "${FILE_PATH}" && exit 5 - bsdtar --list --file "${FILE_PATH}" && exit 5 - exit 1;; - rar) - # Avoid password prompt by providing empty password - unrar lt -p- -- "${FILE_PATH}" && exit 5 - exit 1;; - 7z) - # Avoid password prompt by providing empty password - 7z l -p -- "${FILE_PATH}" && exit 5 - exit 1;; - - # PDF - pdf) - # Preview as text conversion - pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - | fmt -w ${PV_WIDTH} && exit 5 - mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | fmt -w ${PV_WIDTH} && exit 5 - exiftool "${FILE_PATH}" && exit 5 - exit 1;; - - # BitTorrent - torrent) - transmission-show -- "${FILE_PATH}" && exit 5 - exit 1;; - - # OpenDocument - odt|ods|odp|sxw) - # Preview as text conversion - odt2txt "${FILE_PATH}" && exit 5 - exit 1;; - - # HTML - htm|html|xhtml) - # Preview as text conversion - w3m -dump "${FILE_PATH}" && exit 5 - lynx -dump -- "${FILE_PATH}" && exit 5 - elinks -dump "${FILE_PATH}" && exit 5 - ;; # Continue with next handler on failure - esac -} - -handle_image() { - local mimetype="${1}" - case "${mimetype}" in - # SVG - # image/svg+xml) - # convert "${FILE_PATH}" "${IMAGE_CACHE_PATH}" && exit 6 - # exit 1;; - - # Image - image/*) - local orientation - orientation="$( identify -format '%[EXIF:Orientation]\n' -- "${FILE_PATH}" )" - # If orientation data is present and the image actually - # needs rotating ("1" means no rotation)... - if [[ -n "$orientation" && "$orientation" != 1 ]]; then - # ...auto-rotate the image according to the EXIF data. - convert -- "${FILE_PATH}" -auto-orient "${IMAGE_CACHE_PATH}" && exit 6 - fi - - # `w3mimgdisplay` will be called for all images (unless overriden as above), - # but might fail for unsupported types. - exit 7;; - - # Video - # video/*) - # # Thumbnail - # ffmpegthumbnailer -i "${FILE_PATH}" -o "${IMAGE_CACHE_PATH}" -s 0 && exit 6 - # exit 1;; - # PDF - # application/pdf) - # pdftoppm -f 1 -l 1 \ - # -scale-to-x 1920 \ - # -scale-to-y -1 \ - # -singlefile \ - # -jpeg -tiffcompression jpeg \ - # -- "${FILE_PATH}" "${IMAGE_CACHE_PATH%.*}" \ - # && exit 6 || exit 1;; - - # Preview archives using the first image inside. - # (Very useful for comic book collections for example.) - # application/zip|application/x-rar|application/x-7z-compressed|\ - # application/x-xz|application/x-bzip2|application/x-gzip|application/x-tar) - # local fn=""; local fe="" - # local zip=""; local rar=""; local tar=""; local bsd="" - # case "${mimetype}" in - # application/zip) zip=1 ;; - # application/x-rar) rar=1 ;; - # application/x-7z-compressed) ;; - # *) tar=1 ;; - # esac - # { [ "$tar" ] && fn=$(tar --list --file "${FILE_PATH}"); } || \ - # { fn=$(bsdtar --list --file "${FILE_PATH}") && bsd=1 && tar=""; } || \ - # { [ "$rar" ] && fn=$(unrar lb -p- -- "${FILE_PATH}"); } || \ - # { [ "$zip" ] && fn=$(zipinfo -1 -- "${FILE_PATH}"); } || return - # - # fn=$(echo "$fn" | python -c "import sys; import mimetypes as m; \ - # [ print(l, end='') for l in sys.stdin if \ - # (m.guess_type(l[:-1])[0] or '').startswith('image/') ]" |\ - # sort -V | head -n 1) - # [ "$fn" = "" ] && return - # [ "$bsd" ] && fn=$(printf '%b' "$fn") - # - # [ "$tar" ] && tar --extract --to-stdout \ - # --file "${FILE_PATH}" -- "$fn" > "${IMAGE_CACHE_PATH}" && exit 6 - # fe=$(echo -n "$fn" | sed 's/[][*?\]/\\\0/g') - # [ "$bsd" ] && bsdtar --extract --to-stdout \ - # --file "${FILE_PATH}" -- "$fe" > "${IMAGE_CACHE_PATH}" && exit 6 - # [ "$bsd" ] || [ "$tar" ] && rm -- "${IMAGE_CACHE_PATH}" - # [ "$rar" ] && unrar p -p- -inul -- "${FILE_PATH}" "$fn" > \ - # "${IMAGE_CACHE_PATH}" && exit 6 - # [ "$zip" ] && unzip -pP "" -- "${FILE_PATH}" "$fe" > \ - # "${IMAGE_CACHE_PATH}" && exit 6 - # [ "$rar" ] || [ "$zip" ] && rm -- "${IMAGE_CACHE_PATH}" - # ;; - esac -} - -handle_mime() { - local mimetype="${1}" - case "${mimetype}" in - # Text - text/* | */xml) - # Syntax highlight - if [[ "$( stat --printf='%s' -- "${FILE_PATH}" )" -gt "${HIGHLIGHT_SIZE_MAX}" ]]; then - exit 2 - fi - if [[ "$( tput colors )" -ge 256 ]]; then - local pygmentize_format='terminal256' - local highlight_format='xterm256' - else - local pygmentize_format='terminal' - local highlight_format='ansi' - fi - highlight --replace-tabs="${HIGHLIGHT_TABWIDTH}" --out-format="${highlight_format}" \ - --style="${HIGHLIGHT_STYLE}" --force -- "${FILE_PATH}" && exit 5 - # pygmentize -f "${pygmentize_format}" -O "style=${PYGMENTIZE_STYLE}" -- "${FILE_PATH}" && exit 5 - exit 2;; - - # Image - image/*) - # Preview as text conversion - # img2txt --gamma=0.6 --width="${PV_WIDTH}" -- "${FILE_PATH}" && exit 4 - exiftool "${FILE_PATH}" && exit 5 - exit 1;; - - # Video and audio - video/* | audio/*) - mediainfo "${FILE_PATH}" && exit 5 - exiftool "${FILE_PATH}" && exit 5 - exit 1;; - esac -} - -handle_fallback() { - echo '----- File Type Classification -----' && file --dereference --brief -- "${FILE_PATH}" && exit 5 - exit 1 -} - - -MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )" -if [[ "${PV_IMAGE_ENABLED}" == 'True' ]]; then - handle_image "${MIMETYPE}" -fi -handle_extension -handle_mime "${MIMETYPE}" -handle_fallback - -exit 1 diff --git a/dotfiles/system/.config/redshift.conf b/dotfiles/system/.config/redshift.conf deleted file mode 100644 index 92b61bf..0000000 --- a/dotfiles/system/.config/redshift.conf +++ /dev/null @@ -1,32 +0,0 @@ -[redshift] -; Color temperature in Kelvin -; 6500K = neutral daylight (no filter) -; 5000K = subtle warmth -; 4500K = noticeable but readable warmth (recommended for night) -; 4000K = warm (like incandescent bulb) -; 3500K = very warm/orange (often too much) - -temp-day=6500 -temp-night=4500 - -; Brightness (1.0 = full, 0.8 = 20% dimmed) -; Keeping at 1.0 avoids readability issues -brightness-day=1.0 -brightness-night=1.0 - -; Gamma correction (1.0 = no correction) -gamma=1.0 - -; Fade between day/night (1 = gradual, 0 = instant) -fade=1 - -; Screen adjustment method -adjustment-method=randr - -; Location for sunrise/sunset calculation -location-provider=manual - -[manual] -; New Orleans, LA -lat=29.951065 -lon=-90.071533 diff --git a/dotfiles/system/.config/rofi/config.rasi b/dotfiles/system/.config/rofi/config.rasi deleted file mode 100644 index 3f50cc6..0000000 --- a/dotfiles/system/.config/rofi/config.rasi +++ /dev/null @@ -1,6 +0,0 @@ -configuration { - show-icons: true; - dpi: 1; -} - -@theme "~/.config/rofi/themes/rounded-gray-dark.rasi" diff --git a/dotfiles/system/.config/rofi/themes/rounded-gray-dark.rasi b/dotfiles/system/.config/rofi/themes/rounded-gray-dark.rasi deleted file mode 100644 index de5bbc3..0000000 --- a/dotfiles/system/.config/rofi/themes/rounded-gray-dark.rasi +++ /dev/null @@ -1,106 +0,0 @@ -/* ROFI THEME - Matched to dunst notifications */ -/* Based on: Newman Sanchez (https://github.com/newmanls) */ - -* { - bg0: #383c4af0; - bg1: #2d303c; - bg2: #4a4e5c80; - bg3: #2d303c; - fg0: #cdd1dc; - fg1: #ffffff; - fg2: #969696; - fg3: #4a4e5c; - - font: "FiraCode Nerd Font Mono 10"; - - background-color: transparent; - text-color: @fg0; - - margin: 0px; - padding: 0px; - spacing: 0px; -} - -window { - location: north; - y-offset: calc(50% - 176px); - width: 480; - border-radius: 10px; - border: 1px; - border-color: @bg1; - - background-color: @bg0; -} - -mainbox { - padding: 12px; -} - -inputbar { - background-color: @bg1; - border-color: @bg3; - - border: 1px; - border-radius: 6px; - - padding: 12px 20px; - spacing: 8px; - children: [ prompt, entry ]; -} - -prompt { - text-color: @fg2; -} - -entry { - placeholder: "Search"; - placeholder-color: @fg3; -} - -message { - margin: 12px 0 0; - border-radius: 6px; - border-color: @bg2; - background-color: @bg2; -} - -textbox { - padding: 8px 24px; -} - -listview { - background-color: transparent; - - margin: 12px 0 0; - lines: 8; - columns: 1; - - fixed-height: false; -} - -element { - padding: 8px 16px; - spacing: 8px; - border-radius: 6px; -} - -element normal active { - text-color: @bg3; -} - -element alternate active { - text-color: @bg3; -} - -element selected normal, element selected active { - background-color: @bg3; -} - -element-icon { - size: 1em; - vertical-align: 0.5; -} - -element-text { - text-color: inherit; -} diff --git a/dotfiles/system/.config/sublime-merge/Local/License.sublime_license b/dotfiles/system/.config/sublime-merge/Local/License.sublime_license Binary files differdeleted file mode 100644 index 69d2755..0000000 --- a/dotfiles/system/.config/sublime-merge/Local/License.sublime_license +++ /dev/null diff --git a/dotfiles/system/.config/sxhkd/sxhkdrc b/dotfiles/system/.config/sxhkd/sxhkdrc deleted file mode 100644 index 0a01188..0000000 --- a/dotfiles/system/.config/sxhkd/sxhkdrc +++ /dev/null @@ -1,106 +0,0 @@ -# SXHDRC -# This is the sxhkdrc for the Simple X Hotkey Daemon. -# https://github.com/baskerville/sxhkd - - -super + space - rofi -show drun -super + shift + s - rofi -show ssh - - -# -# Browsers -# - -super + w - $BROWSER -super + shift + w - $ALTBROWSER -ctrl + alt + w - tor-browser - -# -# Applications -# - -# Emacs -super + e - emacsclient -c -a "" || emacs - -# File Manager -control + alt + f - thunar - -# Virtualbox -super + v - virtualbox - - -# Library -super + shift + l - calibre - -# Radio -super + shift + r - shortwave - -# -# Music -# -# super + slash -# st -e ncmpcpp -# ctrl + alt + slash -# easytag ~/music - - -# -# Accessories -# - - -# Colorpicker -super + c - xcolor | xsel -b - -# Screenshots -super + s - file="$(date +%Y.%m.%d-%M%S).png" && maim ~/pictures/screenshots/$file && \ - notify-send "screenshot" "Image saved to ~/Pictures/screenshots/$file" - -# -# System -# - -# Audio Keys -XF86AudioMute - amixer -q -D pulse sset Master toggle && -XF86Audio{Raise,Lower}Volume - pactl -- set-sink-volume 0 {+,-}10% && - -# Brightness Keys -XF86MonBrightnessUp - brightnessctl s +10% && notify-send "Brightness" "Brightness increased" -XF86MonBrightnessDown - brightnessctl s 10%- && notify-send "Brightness" "Brightness decreased" - -# Microphone Toggle -control + alt + space - amixer set Capture toggle && amixer get Capture | grep '\[off\]' && notify-send "Microphone" "Microphone muted" || notify-send "Microphone" "Microphone on" - -# Bluetooth -super + shift + b - blueman-manager - -# Lock Screen -super + Escape - slock & - -# -# Keybinding -# - -super + k - $EDITOR ~/.config/sxhkd/sxhkdrc && notify-send "Keyboard Shortcuts" "Editing shortcuts" -super + shift + k - sudo killall sxhkd && sxhkd && notify-send "Keyboard Shortcuts" "Keyboard shortcuts reloaded" diff --git a/dotfiles/system/.config/systemd/user/emacs.service b/dotfiles/system/.config/systemd/user/emacs.service deleted file mode 100644 index 0e3a102..0000000 --- a/dotfiles/system/.config/systemd/user/emacs.service +++ /dev/null @@ -1,19 +0,0 @@ -[Unit] -Description=Emacs text editor -Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/ - -[Service] -Type=notify -ExecStart=/home/cjennings/.local/bin/emacs --fg-daemon - -# Emacs will exit with status 15 after having received SIGTERM, which -# is the default "KillSignal" value systemd uses to stop services. -SuccessExitStatus=15 - -# The location of the SSH auth socket varies by distribution, and some -# set it from PAM, so don't override by default. -# Environment=SSH_AUTH_SOCK=%t/keyring/ssh -Restart=on-failure - -[Install] -WantedBy=default.target diff --git a/dotfiles/system/.config/systemd/user/geoclue-agent.service b/dotfiles/system/.config/systemd/user/geoclue-agent.service deleted file mode 100644 index 9f2adc0..0000000 --- a/dotfiles/system/.config/systemd/user/geoclue-agent.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=redshift needs to get a (geo)clue - -[Service] -ExecStart=/usr/lib/geoclue-2.0/demos/agent - -[Install] -WantedBy=default.target diff --git a/dotfiles/system/.config/systemd/user/xdg-desktop-portal-gtk.service.d/environment.conf b/dotfiles/system/.config/systemd/user/xdg-desktop-portal-gtk.service.d/environment.conf deleted file mode 100644 index e8c5e8f..0000000 --- a/dotfiles/system/.config/systemd/user/xdg-desktop-portal-gtk.service.d/environment.conf +++ /dev/null @@ -1,3 +0,0 @@ -[Service] -Environment="DISPLAY=:0" -Environment="XAUTHORITY=/home/cjennings/.Xauthority"
\ No newline at end of file diff --git a/dotfiles/system/.config/tickrs/config.yml b/dotfiles/system/.config/tickrs/config.yml deleted file mode 100644 index a9c07c3..0000000 --- a/dotfiles/system/.config/tickrs/config.yml +++ /dev/null @@ -1,95 +0,0 @@ ---- -# List of ticker symbols to start app with -#symbols: -# - SPY -# - AMD - -# Chart type to start app with -# Default is line -# Possible values: line, candle, kagi -#chart_type: candle - -# Use specified time frame when starting program and when new stocks are added -# Default is 1D -# Possible values: 1D, 1W, 1M, 3M, 6M, 1Y, 5Y -#time_frame: 1D - -# Interval to update data from API (seconds) -# Default is 1 -#update_interval: 1 - -# Enable pre / post market hours for graphs -#enable_pre_post: true - -# Hide help icon in top right -#hide_help: true - -# Hide previous close line on 1D chart -#hide_prev_close: true - -# Hide toggle block -#hide_toggle: true - -# Show volumes graph -#show_volumes: true - -# Show x-axis labels -#show_x_labels: true - -# Start in summary mode -#summary: true - -# Truncate pre market graphing to only 30 minutes prior to markets opening -#trunc_pre: true - -# Ticker options for Kagi charts -# -# A map of each ticker with reversal and/or price fields (both optional). If no -# entry is defined for a symbol, a default of 'close' price and 1% for 1D and 4% -# for non-1D timeframes is used. This can be updated in the GUI by pressing 'e' -# -# reversal can be supplied as a single value, or a map on time frame to give each -# time frame a different reversal amount -# -# reversal.type can be 'amount' or 'pct' -# -# price can be 'close' or 'high_low' -# -#kagi_options: -# SPY: -# reversal: -# type: amount -# value: 5.00 -# price: close -# AMD: -# price: high_low -# TSLA: -# reversal: -# type: pct -# value: 0.08 -# NVDA: -# reversal: -# 1D: -# type: pct -# value: 0.02 -# 5Y: -# type: pct -# value: 0.10 - -# Apply a custom theme -# -# All colors are optional. If commented out / omitted, the color will get sourced -# from your terminal color scheme -#theme: -# background: '#403E41' -# gray: '#727072' -# profit: '#ADD977' -# loss: '#FA648A' -# text_normal: '#FCFCFA' -# text_primary: '#FFDA65' -# text_secondary: '#79DBEA' -# border_primary: '#FC9766' -# border_secondary: '#FCFCFA' -# border_axis: '#FC9766' -# highlight_focused: '#FC9766' -# highlight_unfocused: '#727072' diff --git a/dotfiles/system/.config/topgrade.toml b/dotfiles/system/.config/topgrade.toml deleted file mode 100644 index b4434f2..0000000 --- a/dotfiles/system/.config/topgrade.toml +++ /dev/null @@ -1,246 +0,0 @@ -# Include any additional configuration file(s) -# [include] sections are processed in the order you write them -# Files in $CONFIG_DIR/topgrade.d/ are automatically included before this file -[include] -# paths = ["/etc/topgrade.toml"] - - -[misc] -# Run `sudo -v` to cache credentials at the start of the run -# This avoids a blocking password prompt in the middle of an unattended run -# (default: false) -pre_sudo = true - -# Sudo command to be used -sudo_command = "sudo" - -# Disable specific steps - same options as the command line flag -# disable = ["system", "emacs"] -disable = ["emacs", "poetry", "gnome_shell_extensions"] - -# Ignore failures for these steps -# ignore_failures = ["powershell"] - -# List of remote machines with Topgrade installed on them -# remote_topgrades = ["toothless", "pi", "parnas"] - -# Path to Topgrade executable on remote machines -# remote_topgrade_path = ".cargo/bin/topgrade" - -# Arguments to pass to SSH when upgrading remote systems -# ssh_arguments = "-o ConnectTimeout=2" - -# Arguments to pass tmux when pulling Repositories -# tmux_arguments = "-S /var/tmux.sock" - -# Do not set the terminal title (default: true) -# set_title = true - -# Display the time in step titles (default: true) -# display_time = true - -# Don't ask for confirmations (no default value) -assume_yes = true - -# Do not ask to retry failed steps (default: false) -no_retry = true - -# Run inside tmux (default: false) -# run_in_tmux = true - -# Cleanup temporary or old files (default: false) -cleanup = true - -# Send a notification for every step (default: false) -# notify_each_step = false - -# Skip sending a notification at the end of a run (default: false) -# skip_notify = true - -# The Bash-it branch to update (default: "stable") -# bashit_branch = "stable" - -# Run specific steps - same options as the command line flag -# only = ["system", "emacs"] - -# Whether to self update -# -# this will be ignored if the binary is built without self update support -# -# available also via setting the environment variable TOPGRADE_NO_SELF_UPGRADE) -# no_self_update = true - -# Extra tracing filter directives -# These are prepended to the `--log-filter` argument -# See: https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html#directives -# log_filters = ["topgrade::command=debug", "warn"] - - -# Commands to run before anything -[pre_commands] -# "Emacs Snapshot" = "rm -rf ~/.emacs.d/elpa.bak && cp -rl ~/.emacs.d/elpa ~/.emacs.d/elpa.bak" - - -# Commands to run after anything -[post_commands] -# "Emacs Snapshot" = "rm -rf ~/.emacs.d/elpa.bak && cp -rl ~/.emacs.d/elpa ~/.emacs.d/elpa.bak" - - -# Custom commands -[commands] -# "Python Environment" = "~/dev/.env/bin/pip install -i https://pypi.python.org/simple -U --upgrade-strategy eager jupyter" -# "Custom command using interactive shell (unix)" = "-i vim_upgrade" - - -[python] -# enable_pip_review = true ###disabled by default -# enable_pip_review_local = true ###disabled by default -# enable_pipupgrade = true ###disabled by default -# pipupgrade_arguments = "-y -u --pip-path pip" ###disabled by default - - -[composer] -# self_update = true - - -[brew] -# For the BrewCask step -# If `Repo Cask Upgrade` exists, then use the `-a` option. -# Otherwise, use the `--greedy` option. -# greedy_cask = true - -# For the BrewCask step -# If `Repo Cask Upgrade` does not exist, then use the `--greedy_latest` option. -# NOTE: the above entry `greedy_cask` contains this entry, though you can enable -# both of them, they won't clash with each other. -# greedy_latest = true - -# For the BrewFormula step -# Execute `brew autoremove` after the step. -# autoremove = true - -# For the BrewFormula step -# Upgrade formulae built from the HEAD branch; `brew upgrade --fetch-HEAD` -# fetch_head = true - - -[linux] -# Arch Package Manager to use. -# Allowed values: -# autodetect, aura, garuda_update, pacman, pamac, paru, pikaur, trizen, yay -arch_package_manager = "yay" - -# Arguments to pass yay (or paru) when updating packages -# yay_arguments = "--nodevel" - -# Arguments to pass dnf when updating packages -# dnf_arguments = "--refresh" - -# aura_aur_arguments = "-kx" - -# aura_pacman_arguments = "" -# garuda_update_arguments = "" - -show_arch_news = true - -# trizen_arguments = "--devel" - -# pikaur_arguments = "" - -# pamac_arguments = "--no-devel" - -# enable_tlmgr = true - -# emerge_sync_flags = "-q" - -# emerge_update_flags = "-uDNa --with-bdeps=y world" - -# redhat_distro_sync = false - -# suse_dup = false - -# rpm_ostree = false - -# nix_arguments = "--flake" - -# nix_env_arguments = "--prebuilt-only" - -# Extra Home Manager arguments -# home_manager_arguments = ["--flake", "file"] - - -[git] -# How many repos to pull at max in parallel -max_concurrency = 5 - -# Additional git repositories to pull -repos = [ - "~/code/*/" -] - -# Don't pull the predefined git repos -# pull_predefined = false - -# Arguments to pass Git when pulling Repositories -arguments = "--rebase --autostash" - - -[windows] -# Manually select Windows updates -# accept_all_updates = false - -# open_remotes_in_new_terminal = true - -# wsl_update_pre_release = true - -# wsl_update_use_web_download = true - -# Causes Topgrade to rename itself during the run to allow package managers -# to upgrade it. Use this only if you installed Topgrade by using a package -# manager such as Scoop or Cargo -# self_rename = true - - -[npm] -# Use sudo if the NPM directory isn't owned by the current user -# use_sudo = true - - -[yarn] -# Run `yarn global upgrade` with `sudo` -# use_sudo = true - - -[vim] -# For `vim-plug`, execute `PlugUpdate!` instead of `PlugUpdate` -force_plug_update = true - - -[firmware] -# Offer to update firmware; if false just check for and display available updates -upgrade = false - - -[vagrant] -# Vagrant directories -# directories = [] - -# power on vagrant boxes if needed -# power_on = true - -# Always suspend vagrant boxes instead of powering off -# always_suspend = true - - -[flatpak] -# Use sudo for updating the system-wide installation -# use_sudo = true - - -[distrobox] -# use_root = false - -# containers = ["archlinux-latest"] -[containers] -# Specify the containers to ignore while updating (Wildcard supported) -# ignored_containers = ["ghcr.io/rancher-sandbox/rancher-desktop/rdx-proxy:latest", "docker.io*"] diff --git a/dotfiles/system/.config/touchpad-indicator/touchpad-indicator.conf b/dotfiles/system/.config/touchpad-indicator/touchpad-indicator.conf deleted file mode 100644 index 51a9907..0000000 --- a/dotfiles/system/.config/touchpad-indicator/touchpad-indicator.conf +++ /dev/null @@ -1 +0,0 @@ -{"first-time": false, "version": "2.2.3-ubuntu20.04.0", "is_working": false, "autostart": false, "on_mouse_plugged": true, "on_start": -1, "on_end": 1, "disable_on_typing": true, "interval": 3600.0, "start_hidden": false, "show_notifications": false, "theme": "light", "touchpad_enabled": false, "natural_scrolling": false, "speed": 0.0, "tapping": true, "two_finger_scrolling": true, "edge_scrolling": false, "cicular_scrolling": true, "right-top-corner": 0, "right-bottom-corner": 0, "left-top-corner": 0, "left-bottom-corner": 0, "one-finger-tap": 0, "two-finger-tap": 0, "three-finger-tap": 0, "faulty-devices": ["11/2/1/0", "11/2/a/0", "11/2/5/7326", "11/2/6/0", "18/93a/274/100"]}
\ No newline at end of file diff --git a/dotfiles/system/.config/transmission-daemon b/dotfiles/system/.config/transmission-daemon deleted file mode 120000 index e768f74..0000000 --- a/dotfiles/system/.config/transmission-daemon +++ /dev/null @@ -1 +0,0 @@ -transmission
\ No newline at end of file diff --git a/dotfiles/system/.config/transmission/settings.json b/dotfiles/system/.config/transmission/settings.json deleted file mode 100644 index c232f9d..0000000 --- a/dotfiles/system/.config/transmission/settings.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "alt-speed-down": 500, - "alt-speed-enabled": true, - "alt-speed-time-begin": 480, - "alt-speed-time-day": 127, - "alt-speed-time-enabled": true, - "alt-speed-time-end": 1380, - "alt-speed-up": 500, - "announce-ip": "", - "announce-ip-enabled": false, - "anti-brute-force-enabled": false, - "anti-brute-force-threshold": 100, - "bind-address-ipv4": "0.0.0.0", - "bind-address-ipv6": "::", - "blocklist-date": 0, - "blocklist-enabled": false, - "blocklist-updates-enabled": true, - "blocklist-url": "http://www.example.com/blocklist", - "cache-size-mb": 4, - "compact-view": false, - "default-trackers": "", - "details-window-height": 712, - "details-window-width": 831, - "dht-enabled": true, - "download-dir": "/home/cjennings/downloads/torrents/complete", - "download-queue-enabled": true, - "download-queue-size": 5, - "encryption": 1, - "filter-mode": "show-downloading", - "filter-trackers": "", - "idle-seeding-limit": 30, - "idle-seeding-limit-enabled": false, - "incomplete-dir": "/home/cjennings/downloads/torrents/incomplete", - "incomplete-dir-enabled": true, - "inhibit-desktop-hibernation": false, - "lpd-enabled": true, - "main-window-height": 981, - "main-window-is-maximized": false, - "main-window-layout-order": "menu,toolbar,filter,list,statusbar", - "main-window-width": 1504, - "main-window-x": -3016, - "main-window-y": 22, - "message-level": 4, - "open-dialog-dir": "/home/cjennings", - "peer-congestion-algorithm": "", - "peer-limit-global": 200, - "peer-limit-per-torrent": 50, - "peer-port": 51413, - "peer-port-random-high": 65535, - "peer-port-random-low": 49152, - "peer-port-random-on-start": false, - "peer-socket-tos": "le", - "pex-enabled": true, - "port-forwarding-enabled": true, - "preallocation": 1, - "prefetch-enabled": true, - "prompt-before-exit": true, - "queue-stalled-enabled": true, - "queue-stalled-minutes": 30, - "ratio-limit": 2, - "ratio-limit-enabled": false, - "read-clipboard": false, - "remote-session-enabled": false, - "remote-session-host": "localhost", - "remote-session-https": false, - "remote-session-password": "", - "remote-session-port": 9091, - "remote-session-requres-authentication": false, - "remote-session-username": "", - "rename-partial-files": true, - "rpc-authentication-required": true, - "rpc-bind-address": "0.0.0.0", - "rpc-enabled": true, - "rpc-host-whitelist": "", - "rpc-host-whitelist-enabled": true, - "rpc-password": "{bad68dff996a5c90ed8d070ed66477bc49fe9f9fWgWCPwIG", - "rpc-port": 9091, - "rpc-socket-mode": "0750", - "rpc-url": "/transmission/", - "rpc-username": "cjennings", - "rpc-whitelist": "127.0.0.1,::1", - "rpc-whitelist-enabled": true, - "scrape-paused-torrents-enabled": true, - "script-torrent-added-enabled": false, - "script-torrent-added-filename": "", - "script-torrent-done-enabled": false, - "script-torrent-done-filename": "", - "script-torrent-done-seeding-enabled": false, - "script-torrent-done-seeding-filename": "", - "seed-queue-enabled": false, - "seed-queue-size": 10, - "show-backup-trackers": false, - "show-extra-peer-details": false, - "show-filterbar": true, - "show-notification-area-icon": true, - "show-options-window": false, - "show-statusbar": true, - "show-toolbar": true, - "show-tracker-scrapes": false, - "sort-mode": "sort-by-progress", - "sort-reversed": false, - "speed-limit-down": 500, - "speed-limit-down-enabled": false, - "speed-limit-up": 100, - "speed-limit-up-enabled": false, - "start-added-torrents": true, - "start-minimized": true, - "statusbar-stats": "total-ratio", - "tcp-enabled": true, - "torrent-added-notification-enabled": true, - "torrent-added-verify-mode": "fast", - "torrent-complete-notification-enabled": false, - "torrent-complete-sound-command": [ - "canberra-gtk-play", - "-i", - "complete-download", - "-d", - "transmission torrent downloaded" - ], - "torrent-complete-sound-enabled": true, - "trash-can-enabled": true, - "trash-original-torrent-files": true, - "umask": "022", - "upload-slots-per-torrent": 8, - "user-has-given-informed-consent": true, - "utp-enabled": true, - "watch-dir": "/home/cjennings/downloads/torrents/files", - "watch-dir-enabled": true -} diff --git a/dotfiles/system/.config/user-dirs.dirs b/dotfiles/system/.config/user-dirs.dirs deleted file mode 100644 index 0db0cae..0000000 --- a/dotfiles/system/.config/user-dirs.dirs +++ /dev/null @@ -1,15 +0,0 @@ -# This file is written by xdg-user-dirs-update -# If you want to change or add directories, just edit the line you're -# interested in. All local changes will be retained on the next run. -# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped -# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an -# absolute path. No other format is supported. -# -XDG_DESKTOP_DIR="$HOME/" -XDG_DOWNLOAD_DIR="$HOME/downloads" -XDG_TEMPLATES_DIR="$HOME/" -XDG_PUBLICSHARE_DIR="$HOME/" -XDG_DOCUMENTS_DIR="$HOME/documents" -XDG_MUSIC_DIR="$HOME/music" -XDG_PICTURES_DIR="$HOME/pictures" -XDG_VIDEOS_DIR="$HOME/videos" diff --git a/dotfiles/system/.config/user-dirs.locale b/dotfiles/system/.config/user-dirs.locale deleted file mode 100644 index 3e0b419..0000000 --- a/dotfiles/system/.config/user-dirs.locale +++ /dev/null @@ -1 +0,0 @@ -en_US
\ No newline at end of file diff --git a/dotfiles/system/.config/youtube-dl/youtube-dl.conf b/dotfiles/system/.config/youtube-dl/youtube-dl.conf deleted file mode 100644 index 91b4e42..0000000 --- a/dotfiles/system/.config/youtube-dl/youtube-dl.conf +++ /dev/null @@ -1,11 +0,0 @@ -# self explanatory ---add-metadata ---format best ---no-overwrites ---ignore-errors - -# insert a value between 0 (better) and 9 (worse) for VBR or a specific bitrate like 128K (default 5) ---audio-quality 0 - -# save all videos under Videos file with channel, title, and extension --o ~/videos/%(channel)s-%(title)s.%(ext)s diff --git a/dotfiles/system/.config/zathura/zathurarc b/dotfiles/system/.config/zathura/zathurarc deleted file mode 100644 index 7f61084..0000000 --- a/dotfiles/system/.config/zathura/zathurarc +++ /dev/null @@ -1,8 +0,0 @@ -set selection-clipboard clipboard -set recolor true -map [normal] F2 bmark current -map [normal] F2 blist -map [fullscreen] F2 bmark current -map [fullscreen] F3 blist -map [normal] = zoom in -map [fullscreen] = zoom in
\ No newline at end of file |
