add files
This commit is contained in:
commit
bf390a8694
|
@ -0,0 +1,959 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Catppuccin</string>
|
||||
<key>settings</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#c6d0f5</string>
|
||||
<key>background</key>
|
||||
<string>#303446</string>
|
||||
<key>caret</key>
|
||||
<string>#b5bfe2</string>
|
||||
<key>invisibles</key>
|
||||
<string>#a5adce</string>
|
||||
<key>gutterForeground</key>
|
||||
<string>#949cbb</string>
|
||||
<key>gutterForegroundHighlight</key>
|
||||
<string>#a6d189</string>
|
||||
<key>lineHighlight</key>
|
||||
<string>#626880</string>
|
||||
<key>selection</key>
|
||||
<string>#737994</string>
|
||||
<key>selectionBorder</key>
|
||||
<string>#303446</string>
|
||||
<key>activeGuide</key>
|
||||
<string>#ef9f76</string>
|
||||
<key>findHighlightForeground</key>
|
||||
<string>#292c3c</string>
|
||||
<key>findHighlight</key>
|
||||
<string>#e5c890</string>
|
||||
<key>bracketsForeground</key>
|
||||
<string>#949cbb</string>
|
||||
<key>bracketContentsForeground</key>
|
||||
<string>#949cbb</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Comment</string>
|
||||
<key>scope</key>
|
||||
<string>comment</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#737994</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>String</string>
|
||||
<key>scope</key>
|
||||
<string>string</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#a6d189</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>String regex</string>
|
||||
<key>scope</key>
|
||||
<string>string.regexp</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ef9f76</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Number</string>
|
||||
<key>scope</key>
|
||||
<string>constant.numeric</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ef9f76</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Boolean</string>
|
||||
<key>scope</key>
|
||||
<string>constant.language.boolean</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ef9f76</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Built-in constant</string>
|
||||
<key>scope</key>
|
||||
<string>constant.language</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#babbf1</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Built-in function</string>
|
||||
<key>scope</key>
|
||||
<string>support.function.builtin</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ef9f76</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>User-defined constant</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.constant</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ef9f76</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable</string>
|
||||
<key>scope</key>
|
||||
<string>variable</string>
|
||||
<key>settings</key>
|
||||
<dict></dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Keyword</string>
|
||||
<key>scope</key>
|
||||
<string>keyword</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#e78284</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Conditional/loop</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.loop, keyword.control.conditional, keyword.control.c++</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ca9ee6</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Return</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.return, keyword.control.flow.return</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f4b8e4</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Exception</string>
|
||||
<key>scope</key>
|
||||
<string>support.type.exception</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ef9f76</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Operator</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.operator, punctuation.accessor</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#99d1db</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation separator</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.separator</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#81c8be</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation terminator</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.terminator</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#81c8be</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation bracket</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.section</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#949cbb</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Include</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.import.include</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#81c8be</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage</string>
|
||||
<key>scope</key>
|
||||
<string>storage</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#e78284</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage type</string>
|
||||
<key>scope</key>
|
||||
<string>storage.type</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#e5c890</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage modifier</string>
|
||||
<key>scope</key>
|
||||
<string>storage.modifier</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#e78284</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage type namespace</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.namespace, meta.path</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f2d5cf</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage type class</string>
|
||||
<key>scope</key>
|
||||
<string>storage.type.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f2d5cf</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Label</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.label</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8caaee</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Keyword class</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.declaration.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#e78284</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Class name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.class, meta.toc-list.full-identifier</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#99d1db</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Inherited class</string>
|
||||
<key>scope</key>
|
||||
<string>entity.other.inherited-class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#99d1db</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.function, variable.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8caaee</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function macro</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.function.preprocessor</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#e78284</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Macro directive - ifdef</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.import</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#e78284</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Constructor</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.function.constructor, entity.name.function.destructor</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#babbf1</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function argument</string>
|
||||
<key>scope</key>
|
||||
<string>variable.parameter.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f2d5cf</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function declaration</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.declaration.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ea999c</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library function</string>
|
||||
<key>scope</key>
|
||||
<string>support.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#99d1db</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library constant</string>
|
||||
<key>scope</key>
|
||||
<string>support.constant</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8caaee</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library class/type</string>
|
||||
<key>scope</key>
|
||||
<string>support.type, support.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8caaee</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library variable</string>
|
||||
<key>scope</key>
|
||||
<string>support.other.variable</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable function</string>
|
||||
<key>scope</key>
|
||||
<string>variable.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8caaee</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable parameter</string>
|
||||
<key>scope</key>
|
||||
<string>variable.parameter</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f2d5cf</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable other</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#c6d0f5</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable field</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.member</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f2d5cf</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable language</string>
|
||||
<key>scope</key>
|
||||
<string>variable.language</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#81c8be</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.tag</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ef9f76</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag attribute</string>
|
||||
<key>scope</key>
|
||||
<string>entity.other.attribute-name</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ca9ee6</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag delimiter</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.definition.tag</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ea999c</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown URL</string>
|
||||
<key>scope</key>
|
||||
<string>markup.underline.link.markdown</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f2d5cf</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic underline</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown reference</string>
|
||||
<key>scope</key>
|
||||
<string>meta.link.inline.description</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#babbf1</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown literal</string>
|
||||
<key>scope</key>
|
||||
<string>comment.block.markdown, meta.code-fence, markup.raw.code-fence, markup.raw.inline</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#81c8be</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown title</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.definition.heading, entity.name.section</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8caaee</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown emphasis</string>
|
||||
<key>scope</key>
|
||||
<string>markup.italic</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ea999c</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown strong</string>
|
||||
<key>scope</key>
|
||||
<string>markup.bold</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ea999c</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Escape</string>
|
||||
<key>scope</key>
|
||||
<string>constant.character.escape</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f4b8e4</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Bash built-in function</string>
|
||||
<key>scope</key>
|
||||
<string>source.shell.bash meta.function.shell meta.compound.shell meta.function-call.identifier.shell</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f4b8e4</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Bash parameter</string>
|
||||
<key>scope</key>
|
||||
<string>variable.language.shell</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#e78284</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Lua field</string>
|
||||
<key>scope</key>
|
||||
<string>source.lua meta.function.lua meta.block.lua meta.mapping.value.lua meta.mapping.key.lua string.unquoted.key.lua</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#babbf1</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Lua constructor</string>
|
||||
<key>scope</key>
|
||||
<string>source.lua meta.function.lua meta.block.lua meta.mapping.key.lua string.unquoted.key.lua</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#eebebe</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Java constant</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.constant.java</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#81c8be</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS property</string>
|
||||
<key>scope</key>
|
||||
<string>support.type.property-name.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#eebebe</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS constant</string>
|
||||
<key>scope</key>
|
||||
<string>support.constant.property-value.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#c6d0f5</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS suffix</string>
|
||||
<key>scope</key>
|
||||
<string>constant.numeric.suffix.css, keyword.other.unit.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#81c8be</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS variable property</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.custom-property.name.css, support.type.custom-property.name.css, punctuation.definition.custom-property.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#81c8be</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>SCSS tag</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.tag.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#babbf1</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>SASS variable</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.sass</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#81c8be</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Invalid</string>
|
||||
<key>scope</key>
|
||||
<string>invalid</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#c6d0f5</string>
|
||||
<key>background</key>
|
||||
<string>#e78284</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Invalid deprecated</string>
|
||||
<key>scope</key>
|
||||
<string>invalid.deprecated</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#c6d0f5</string>
|
||||
<key>background</key>
|
||||
<string>#ca9ee6</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff header</string>
|
||||
<key>scope</key>
|
||||
<string>meta.diff, meta.diff.header</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#737994</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff deleted</string>
|
||||
<key>scope</key>
|
||||
<string>markup.deleted</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#e78284</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff inserted</string>
|
||||
<key>scope</key>
|
||||
<string>markup.inserted</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#a6d189</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff changed</string>
|
||||
<key>scope</key>
|
||||
<string>markup.changed</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#e5c890</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Message error</string>
|
||||
<key>scope</key>
|
||||
<string>message.error</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#e78284</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
<key>uuid</key>
|
||||
<string>4d0379b5-ef82-467b-b8b8-365889420646</string>
|
||||
<key>colorSpaceName</key>
|
||||
<string>sRGB</string>
|
||||
<key>semanticClass</key>
|
||||
<string>theme.dark.Catppuccin</string>
|
||||
<key>author</key>
|
||||
<string>BrunDerSchwarzmagier</string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,959 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Catppuccin</string>
|
||||
<key>settings</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#4c4f69</string>
|
||||
<key>background</key>
|
||||
<string>#eff1f5</string>
|
||||
<key>caret</key>
|
||||
<string>#5c5f77</string>
|
||||
<key>invisibles</key>
|
||||
<string>#6c6f85</string>
|
||||
<key>gutterForeground</key>
|
||||
<string>#7c7f93</string>
|
||||
<key>gutterForegroundHighlight</key>
|
||||
<string>#40a02b</string>
|
||||
<key>lineHighlight</key>
|
||||
<string>#acb0be</string>
|
||||
<key>selection</key>
|
||||
<string>#9ca0b0</string>
|
||||
<key>selectionBorder</key>
|
||||
<string>#eff1f5</string>
|
||||
<key>activeGuide</key>
|
||||
<string>#fe640b</string>
|
||||
<key>findHighlightForeground</key>
|
||||
<string>#e6e9ef</string>
|
||||
<key>findHighlight</key>
|
||||
<string>#df8e1d</string>
|
||||
<key>bracketsForeground</key>
|
||||
<string>#7c7f93</string>
|
||||
<key>bracketContentsForeground</key>
|
||||
<string>#7c7f93</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Comment</string>
|
||||
<key>scope</key>
|
||||
<string>comment</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#9ca0b0</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>String</string>
|
||||
<key>scope</key>
|
||||
<string>string</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#40a02b</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>String regex</string>
|
||||
<key>scope</key>
|
||||
<string>string.regexp</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#fe640b</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Number</string>
|
||||
<key>scope</key>
|
||||
<string>constant.numeric</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#fe640b</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Boolean</string>
|
||||
<key>scope</key>
|
||||
<string>constant.language.boolean</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#fe640b</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Built-in constant</string>
|
||||
<key>scope</key>
|
||||
<string>constant.language</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#7287fd</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Built-in function</string>
|
||||
<key>scope</key>
|
||||
<string>support.function.builtin</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#fe640b</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>User-defined constant</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.constant</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#fe640b</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable</string>
|
||||
<key>scope</key>
|
||||
<string>variable</string>
|
||||
<key>settings</key>
|
||||
<dict></dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Keyword</string>
|
||||
<key>scope</key>
|
||||
<string>keyword</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#d20f39</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Conditional/loop</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.loop, keyword.control.conditional, keyword.control.c++</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8839ef</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Return</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.return, keyword.control.flow.return</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ea76cb</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Exception</string>
|
||||
<key>scope</key>
|
||||
<string>support.type.exception</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#fe640b</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Operator</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.operator, punctuation.accessor</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#04a5e5</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation separator</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.separator</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#179299</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation terminator</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.terminator</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#179299</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation bracket</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.section</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#7c7f93</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Include</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.import.include</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#179299</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage</string>
|
||||
<key>scope</key>
|
||||
<string>storage</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#d20f39</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage type</string>
|
||||
<key>scope</key>
|
||||
<string>storage.type</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#df8e1d</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage modifier</string>
|
||||
<key>scope</key>
|
||||
<string>storage.modifier</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#d20f39</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage type namespace</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.namespace, meta.path</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#dc8a78</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage type class</string>
|
||||
<key>scope</key>
|
||||
<string>storage.type.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#dc8a78</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Label</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.label</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#1e66f5</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Keyword class</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.declaration.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#d20f39</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Class name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.class, meta.toc-list.full-identifier</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#04a5e5</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Inherited class</string>
|
||||
<key>scope</key>
|
||||
<string>entity.other.inherited-class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#04a5e5</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.function, variable.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#1e66f5</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function macro</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.function.preprocessor</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#d20f39</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Macro directive - ifdef</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.import</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#d20f39</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Constructor</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.function.constructor, entity.name.function.destructor</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#7287fd</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function argument</string>
|
||||
<key>scope</key>
|
||||
<string>variable.parameter.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#dc8a78</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function declaration</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.declaration.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#e64553</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library function</string>
|
||||
<key>scope</key>
|
||||
<string>support.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#04a5e5</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library constant</string>
|
||||
<key>scope</key>
|
||||
<string>support.constant</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#1e66f5</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library class/type</string>
|
||||
<key>scope</key>
|
||||
<string>support.type, support.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#1e66f5</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library variable</string>
|
||||
<key>scope</key>
|
||||
<string>support.other.variable</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable function</string>
|
||||
<key>scope</key>
|
||||
<string>variable.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#1e66f5</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable parameter</string>
|
||||
<key>scope</key>
|
||||
<string>variable.parameter</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#dc8a78</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable other</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#4c4f69</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable field</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.member</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#dc8a78</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable language</string>
|
||||
<key>scope</key>
|
||||
<string>variable.language</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#179299</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.tag</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#fe640b</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag attribute</string>
|
||||
<key>scope</key>
|
||||
<string>entity.other.attribute-name</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8839ef</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag delimiter</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.definition.tag</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#e64553</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown URL</string>
|
||||
<key>scope</key>
|
||||
<string>markup.underline.link.markdown</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#dc8a78</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic underline</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown reference</string>
|
||||
<key>scope</key>
|
||||
<string>meta.link.inline.description</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#7287fd</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown literal</string>
|
||||
<key>scope</key>
|
||||
<string>comment.block.markdown, meta.code-fence, markup.raw.code-fence, markup.raw.inline</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#179299</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown title</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.definition.heading, entity.name.section</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#1e66f5</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown emphasis</string>
|
||||
<key>scope</key>
|
||||
<string>markup.italic</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#e64553</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown strong</string>
|
||||
<key>scope</key>
|
||||
<string>markup.bold</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#e64553</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Escape</string>
|
||||
<key>scope</key>
|
||||
<string>constant.character.escape</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ea76cb</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Bash built-in function</string>
|
||||
<key>scope</key>
|
||||
<string>source.shell.bash meta.function.shell meta.compound.shell meta.function-call.identifier.shell</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ea76cb</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Bash parameter</string>
|
||||
<key>scope</key>
|
||||
<string>variable.language.shell</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#d20f39</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Lua field</string>
|
||||
<key>scope</key>
|
||||
<string>source.lua meta.function.lua meta.block.lua meta.mapping.value.lua meta.mapping.key.lua string.unquoted.key.lua</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#7287fd</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Lua constructor</string>
|
||||
<key>scope</key>
|
||||
<string>source.lua meta.function.lua meta.block.lua meta.mapping.key.lua string.unquoted.key.lua</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#dd7878</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Java constant</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.constant.java</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#179299</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS property</string>
|
||||
<key>scope</key>
|
||||
<string>support.type.property-name.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#dd7878</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS constant</string>
|
||||
<key>scope</key>
|
||||
<string>support.constant.property-value.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#4c4f69</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS suffix</string>
|
||||
<key>scope</key>
|
||||
<string>constant.numeric.suffix.css, keyword.other.unit.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#179299</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS variable property</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.custom-property.name.css, support.type.custom-property.name.css, punctuation.definition.custom-property.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#179299</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>SCSS tag</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.tag.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#7287fd</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>SASS variable</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.sass</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#179299</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Invalid</string>
|
||||
<key>scope</key>
|
||||
<string>invalid</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#4c4f69</string>
|
||||
<key>background</key>
|
||||
<string>#d20f39</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Invalid deprecated</string>
|
||||
<key>scope</key>
|
||||
<string>invalid.deprecated</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#4c4f69</string>
|
||||
<key>background</key>
|
||||
<string>#8839ef</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff header</string>
|
||||
<key>scope</key>
|
||||
<string>meta.diff, meta.diff.header</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#9ca0b0</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff deleted</string>
|
||||
<key>scope</key>
|
||||
<string>markup.deleted</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#d20f39</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff inserted</string>
|
||||
<key>scope</key>
|
||||
<string>markup.inserted</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#40a02b</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff changed</string>
|
||||
<key>scope</key>
|
||||
<string>markup.changed</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#df8e1d</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Message error</string>
|
||||
<key>scope</key>
|
||||
<string>message.error</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#d20f39</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
<key>uuid</key>
|
||||
<string>4d0379b5-ef82-467b-b8b8-365889420646</string>
|
||||
<key>colorSpaceName</key>
|
||||
<string>sRGB</string>
|
||||
<key>semanticClass</key>
|
||||
<string>theme.dark.Catppuccin</string>
|
||||
<key>author</key>
|
||||
<string>BrunDerSchwarzmagier</string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,959 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Catppuccin</string>
|
||||
<key>settings</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#cad3f5</string>
|
||||
<key>background</key>
|
||||
<string>#24273a</string>
|
||||
<key>caret</key>
|
||||
<string>#b8c0e0</string>
|
||||
<key>invisibles</key>
|
||||
<string>#a5adcb</string>
|
||||
<key>gutterForeground</key>
|
||||
<string>#939ab7</string>
|
||||
<key>gutterForegroundHighlight</key>
|
||||
<string>#a6da95</string>
|
||||
<key>lineHighlight</key>
|
||||
<string>#5b6078</string>
|
||||
<key>selection</key>
|
||||
<string>#6e738d</string>
|
||||
<key>selectionBorder</key>
|
||||
<string>#24273a</string>
|
||||
<key>activeGuide</key>
|
||||
<string>#f5a97f</string>
|
||||
<key>findHighlightForeground</key>
|
||||
<string>#1e2030</string>
|
||||
<key>findHighlight</key>
|
||||
<string>#eed49f</string>
|
||||
<key>bracketsForeground</key>
|
||||
<string>#939ab7</string>
|
||||
<key>bracketContentsForeground</key>
|
||||
<string>#939ab7</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Comment</string>
|
||||
<key>scope</key>
|
||||
<string>comment</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#6e738d</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>String</string>
|
||||
<key>scope</key>
|
||||
<string>string</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#a6da95</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>String regex</string>
|
||||
<key>scope</key>
|
||||
<string>string.regexp</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5a97f</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Number</string>
|
||||
<key>scope</key>
|
||||
<string>constant.numeric</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5a97f</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Boolean</string>
|
||||
<key>scope</key>
|
||||
<string>constant.language.boolean</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5a97f</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Built-in constant</string>
|
||||
<key>scope</key>
|
||||
<string>constant.language</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#b7bdf8</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Built-in function</string>
|
||||
<key>scope</key>
|
||||
<string>support.function.builtin</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5a97f</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>User-defined constant</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.constant</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5a97f</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable</string>
|
||||
<key>scope</key>
|
||||
<string>variable</string>
|
||||
<key>settings</key>
|
||||
<dict></dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Keyword</string>
|
||||
<key>scope</key>
|
||||
<string>keyword</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ed8796</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Conditional/loop</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.loop, keyword.control.conditional, keyword.control.c++</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#c6a0f6</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Return</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.return, keyword.control.flow.return</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5bde6</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Exception</string>
|
||||
<key>scope</key>
|
||||
<string>support.type.exception</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5a97f</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Operator</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.operator, punctuation.accessor</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#91d7e3</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation separator</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.separator</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8bd5ca</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation terminator</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.terminator</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8bd5ca</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation bracket</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.section</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#939ab7</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Include</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.import.include</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8bd5ca</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage</string>
|
||||
<key>scope</key>
|
||||
<string>storage</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ed8796</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage type</string>
|
||||
<key>scope</key>
|
||||
<string>storage.type</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#eed49f</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage modifier</string>
|
||||
<key>scope</key>
|
||||
<string>storage.modifier</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ed8796</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage type namespace</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.namespace, meta.path</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f4dbd6</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage type class</string>
|
||||
<key>scope</key>
|
||||
<string>storage.type.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f4dbd6</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Label</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.label</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8aadf4</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Keyword class</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.declaration.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ed8796</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Class name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.class, meta.toc-list.full-identifier</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#91d7e3</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Inherited class</string>
|
||||
<key>scope</key>
|
||||
<string>entity.other.inherited-class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#91d7e3</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.function, variable.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8aadf4</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function macro</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.function.preprocessor</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ed8796</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Macro directive - ifdef</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.import</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ed8796</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Constructor</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.function.constructor, entity.name.function.destructor</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#b7bdf8</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function argument</string>
|
||||
<key>scope</key>
|
||||
<string>variable.parameter.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f4dbd6</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function declaration</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.declaration.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ee99a0</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library function</string>
|
||||
<key>scope</key>
|
||||
<string>support.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#91d7e3</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library constant</string>
|
||||
<key>scope</key>
|
||||
<string>support.constant</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8aadf4</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library class/type</string>
|
||||
<key>scope</key>
|
||||
<string>support.type, support.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8aadf4</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library variable</string>
|
||||
<key>scope</key>
|
||||
<string>support.other.variable</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable function</string>
|
||||
<key>scope</key>
|
||||
<string>variable.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8aadf4</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable parameter</string>
|
||||
<key>scope</key>
|
||||
<string>variable.parameter</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f4dbd6</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable other</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#cad3f5</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable field</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.member</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f4dbd6</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable language</string>
|
||||
<key>scope</key>
|
||||
<string>variable.language</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8bd5ca</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.tag</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5a97f</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag attribute</string>
|
||||
<key>scope</key>
|
||||
<string>entity.other.attribute-name</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#c6a0f6</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag delimiter</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.definition.tag</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ee99a0</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown URL</string>
|
||||
<key>scope</key>
|
||||
<string>markup.underline.link.markdown</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f4dbd6</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic underline</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown reference</string>
|
||||
<key>scope</key>
|
||||
<string>meta.link.inline.description</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#b7bdf8</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown literal</string>
|
||||
<key>scope</key>
|
||||
<string>comment.block.markdown, meta.code-fence, markup.raw.code-fence, markup.raw.inline</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8bd5ca</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown title</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.definition.heading, entity.name.section</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8aadf4</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown emphasis</string>
|
||||
<key>scope</key>
|
||||
<string>markup.italic</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ee99a0</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown strong</string>
|
||||
<key>scope</key>
|
||||
<string>markup.bold</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ee99a0</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Escape</string>
|
||||
<key>scope</key>
|
||||
<string>constant.character.escape</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5bde6</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Bash built-in function</string>
|
||||
<key>scope</key>
|
||||
<string>source.shell.bash meta.function.shell meta.compound.shell meta.function-call.identifier.shell</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5bde6</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Bash parameter</string>
|
||||
<key>scope</key>
|
||||
<string>variable.language.shell</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ed8796</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Lua field</string>
|
||||
<key>scope</key>
|
||||
<string>source.lua meta.function.lua meta.block.lua meta.mapping.value.lua meta.mapping.key.lua string.unquoted.key.lua</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#b7bdf8</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Lua constructor</string>
|
||||
<key>scope</key>
|
||||
<string>source.lua meta.function.lua meta.block.lua meta.mapping.key.lua string.unquoted.key.lua</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f0c6c6</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Java constant</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.constant.java</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8bd5ca</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS property</string>
|
||||
<key>scope</key>
|
||||
<string>support.type.property-name.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f0c6c6</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS constant</string>
|
||||
<key>scope</key>
|
||||
<string>support.constant.property-value.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#cad3f5</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS suffix</string>
|
||||
<key>scope</key>
|
||||
<string>constant.numeric.suffix.css, keyword.other.unit.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8bd5ca</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS variable property</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.custom-property.name.css, support.type.custom-property.name.css, punctuation.definition.custom-property.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8bd5ca</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>SCSS tag</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.tag.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#b7bdf8</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>SASS variable</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.sass</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#8bd5ca</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Invalid</string>
|
||||
<key>scope</key>
|
||||
<string>invalid</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#cad3f5</string>
|
||||
<key>background</key>
|
||||
<string>#ed8796</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Invalid deprecated</string>
|
||||
<key>scope</key>
|
||||
<string>invalid.deprecated</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#cad3f5</string>
|
||||
<key>background</key>
|
||||
<string>#c6a0f6</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff header</string>
|
||||
<key>scope</key>
|
||||
<string>meta.diff, meta.diff.header</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#6e738d</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff deleted</string>
|
||||
<key>scope</key>
|
||||
<string>markup.deleted</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ed8796</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff inserted</string>
|
||||
<key>scope</key>
|
||||
<string>markup.inserted</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#a6da95</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff changed</string>
|
||||
<key>scope</key>
|
||||
<string>markup.changed</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#eed49f</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Message error</string>
|
||||
<key>scope</key>
|
||||
<string>message.error</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ed8796</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
<key>uuid</key>
|
||||
<string>4d0379b5-ef82-467b-b8b8-365889420646</string>
|
||||
<key>colorSpaceName</key>
|
||||
<string>sRGB</string>
|
||||
<key>semanticClass</key>
|
||||
<string>theme.dark.Catppuccin</string>
|
||||
<key>author</key>
|
||||
<string>BrunDerSchwarzmagier</string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,959 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Catppuccin</string>
|
||||
<key>settings</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#cdd6f4</string>
|
||||
<key>background</key>
|
||||
<string>#1e1e2e</string>
|
||||
<key>caret</key>
|
||||
<string>#bac2de</string>
|
||||
<key>invisibles</key>
|
||||
<string>#a6adc8</string>
|
||||
<key>gutterForeground</key>
|
||||
<string>#9399b2</string>
|
||||
<key>gutterForegroundHighlight</key>
|
||||
<string>#a6e3a1</string>
|
||||
<key>lineHighlight</key>
|
||||
<string>#585b70</string>
|
||||
<key>selection</key>
|
||||
<string>#6c7086</string>
|
||||
<key>selectionBorder</key>
|
||||
<string>#1e1e2e</string>
|
||||
<key>activeGuide</key>
|
||||
<string>#fab387</string>
|
||||
<key>findHighlightForeground</key>
|
||||
<string>#181825</string>
|
||||
<key>findHighlight</key>
|
||||
<string>#f9e2af</string>
|
||||
<key>bracketsForeground</key>
|
||||
<string>#9399b2</string>
|
||||
<key>bracketContentsForeground</key>
|
||||
<string>#9399b2</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Comment</string>
|
||||
<key>scope</key>
|
||||
<string>comment</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#6c7086</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>String</string>
|
||||
<key>scope</key>
|
||||
<string>string</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#a6e3a1</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>String regex</string>
|
||||
<key>scope</key>
|
||||
<string>string.regexp</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#fab387</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Number</string>
|
||||
<key>scope</key>
|
||||
<string>constant.numeric</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#fab387</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Boolean</string>
|
||||
<key>scope</key>
|
||||
<string>constant.language.boolean</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#fab387</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Built-in constant</string>
|
||||
<key>scope</key>
|
||||
<string>constant.language</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#b4befe</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Built-in function</string>
|
||||
<key>scope</key>
|
||||
<string>support.function.builtin</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#fab387</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>User-defined constant</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.constant</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#fab387</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable</string>
|
||||
<key>scope</key>
|
||||
<string>variable</string>
|
||||
<key>settings</key>
|
||||
<dict></dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Keyword</string>
|
||||
<key>scope</key>
|
||||
<string>keyword</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f38ba8</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Conditional/loop</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.loop, keyword.control.conditional, keyword.control.c++</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#cba6f7</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Return</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.return, keyword.control.flow.return</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5c2e7</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Exception</string>
|
||||
<key>scope</key>
|
||||
<string>support.type.exception</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#fab387</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Operator</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.operator, punctuation.accessor</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#89dceb</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation separator</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.separator</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#94e2d5</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation terminator</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.terminator</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#94e2d5</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Punctuation bracket</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.section</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#9399b2</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Include</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.import.include</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#94e2d5</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage</string>
|
||||
<key>scope</key>
|
||||
<string>storage</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f38ba8</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage type</string>
|
||||
<key>scope</key>
|
||||
<string>storage.type</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f9e2af</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage modifier</string>
|
||||
<key>scope</key>
|
||||
<string>storage.modifier</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f38ba8</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage type namespace</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.namespace, meta.path</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5e0dc</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage type class</string>
|
||||
<key>scope</key>
|
||||
<string>storage.type.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5e0dc</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Label</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.label</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#89b4fa</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Keyword class</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.declaration.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f38ba8</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Class name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.class, meta.toc-list.full-identifier</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#89dceb</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Inherited class</string>
|
||||
<key>scope</key>
|
||||
<string>entity.other.inherited-class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#89dceb</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.function, variable.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#89b4fa</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function macro</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.function.preprocessor</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f38ba8</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Macro directive - ifdef</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.control.import</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f38ba8</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Constructor</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.function.constructor, entity.name.function.destructor</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#b4befe</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function argument</string>
|
||||
<key>scope</key>
|
||||
<string>variable.parameter.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5e0dc</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function declaration</string>
|
||||
<key>scope</key>
|
||||
<string>keyword.declaration.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#eba0ac</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library function</string>
|
||||
<key>scope</key>
|
||||
<string>support.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#89dceb</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library constant</string>
|
||||
<key>scope</key>
|
||||
<string>support.constant</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#89b4fa</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library class/type</string>
|
||||
<key>scope</key>
|
||||
<string>support.type, support.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#89b4fa</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library variable</string>
|
||||
<key>scope</key>
|
||||
<string>support.other.variable</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable function</string>
|
||||
<key>scope</key>
|
||||
<string>variable.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#89b4fa</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable parameter</string>
|
||||
<key>scope</key>
|
||||
<string>variable.parameter</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5e0dc</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable other</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#cdd6f4</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable field</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.member</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5e0dc</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable language</string>
|
||||
<key>scope</key>
|
||||
<string>variable.language</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#94e2d5</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.tag</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#fab387</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag attribute</string>
|
||||
<key>scope</key>
|
||||
<string>entity.other.attribute-name</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#cba6f7</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag delimiter</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.definition.tag</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#eba0ac</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown URL</string>
|
||||
<key>scope</key>
|
||||
<string>markup.underline.link.markdown</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5e0dc</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic underline</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown reference</string>
|
||||
<key>scope</key>
|
||||
<string>meta.link.inline.description</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#b4befe</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown literal</string>
|
||||
<key>scope</key>
|
||||
<string>comment.block.markdown, meta.code-fence, markup.raw.code-fence, markup.raw.inline</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#94e2d5</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown title</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.definition.heading, entity.name.section</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#89b4fa</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown emphasis</string>
|
||||
<key>scope</key>
|
||||
<string>markup.italic</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#eba0ac</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Markdown strong</string>
|
||||
<key>scope</key>
|
||||
<string>markup.bold</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#eba0ac</string>
|
||||
<key>fontStyle</key>
|
||||
<string>bold</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Escape</string>
|
||||
<key>scope</key>
|
||||
<string>constant.character.escape</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5c2e7</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Bash built-in function</string>
|
||||
<key>scope</key>
|
||||
<string>source.shell.bash meta.function.shell meta.compound.shell meta.function-call.identifier.shell</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f5c2e7</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Bash parameter</string>
|
||||
<key>scope</key>
|
||||
<string>variable.language.shell</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f38ba8</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Lua field</string>
|
||||
<key>scope</key>
|
||||
<string>source.lua meta.function.lua meta.block.lua meta.mapping.value.lua meta.mapping.key.lua string.unquoted.key.lua</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#b4befe</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Lua constructor</string>
|
||||
<key>scope</key>
|
||||
<string>source.lua meta.function.lua meta.block.lua meta.mapping.key.lua string.unquoted.key.lua</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f2cdcd</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Java constant</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.constant.java</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#94e2d5</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS property</string>
|
||||
<key>scope</key>
|
||||
<string>support.type.property-name.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f2cdcd</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS constant</string>
|
||||
<key>scope</key>
|
||||
<string>support.constant.property-value.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#cdd6f4</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS suffix</string>
|
||||
<key>scope</key>
|
||||
<string>constant.numeric.suffix.css, keyword.other.unit.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#94e2d5</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>CSS variable property</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.custom-property.name.css, support.type.custom-property.name.css, punctuation.definition.custom-property.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#94e2d5</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>SCSS tag</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.tag.css</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#b4befe</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>SASS variable</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.sass</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#94e2d5</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Invalid</string>
|
||||
<key>scope</key>
|
||||
<string>invalid</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#cdd6f4</string>
|
||||
<key>background</key>
|
||||
<string>#f38ba8</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Invalid deprecated</string>
|
||||
<key>scope</key>
|
||||
<string>invalid.deprecated</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#cdd6f4</string>
|
||||
<key>background</key>
|
||||
<string>#cba6f7</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff header</string>
|
||||
<key>scope</key>
|
||||
<string>meta.diff, meta.diff.header</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#6c7086</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff deleted</string>
|
||||
<key>scope</key>
|
||||
<string>markup.deleted</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f38ba8</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff inserted</string>
|
||||
<key>scope</key>
|
||||
<string>markup.inserted</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#a6e3a1</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Diff changed</string>
|
||||
<key>scope</key>
|
||||
<string>markup.changed</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f9e2af</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Message error</string>
|
||||
<key>scope</key>
|
||||
<string>message.error</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#f38ba8</string>
|
||||
<key>fontStyle</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
<key>uuid</key>
|
||||
<string>4d0379b5-ef82-467b-b8b8-365889420646</string>
|
||||
<key>colorSpaceName</key>
|
||||
<string>sRGB</string>
|
||||
<key>semanticClass</key>
|
||||
<string>theme.dark.Catppuccin</string>
|
||||
<key>author</key>
|
||||
<string>BrunDerSchwarzmagier</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
|
@ -0,0 +1,16 @@
|
|||
# For details see man 4 crontabs
|
||||
|
||||
# Example of job definition:
|
||||
# .---------------- minute (0 - 59)
|
||||
# | .------------- hour (0 - 23)
|
||||
# | | .---------- day of month (1 - 31)
|
||||
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
|
||||
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
|
||||
# | | | | |
|
||||
# * * * * * user-name command to be executed
|
||||
|
||||
# backup using the rsbu program to the internal 4TB HDD and then 4TB external
|
||||
|
||||
|
||||
*/1 * * * * swww img $(shuf -en1 ~/pics/classic/art/*)
|
||||
*/59 * * * * doas scratch sync &>/dev/null && pkill -SIGRTMIN+8 waybar
|
|
@ -0,0 +1,223 @@
|
|||
# -*- conf -*-
|
||||
|
||||
# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd)
|
||||
# term=foot (or xterm-256color if built with -Dterminfo=disabled)
|
||||
# login-shell=no
|
||||
|
||||
# app-id=foot
|
||||
# title=foot
|
||||
# locked-title=no
|
||||
|
||||
font=IBM Plex Mono:size=14
|
||||
font-bold=IBM Plex Mono:size=14
|
||||
font-italic=IBM Plex Mono:size=14
|
||||
font-bold-italic=IBM Plex Mono:size=14
|
||||
# font-size-adjustment=0.5
|
||||
# line-height=<font metrics>
|
||||
# letter-spacing=0
|
||||
# horizontal-letter-offset=0
|
||||
# vertical-letter-offset=0
|
||||
# underline-offset=<font metrics>
|
||||
# underline-thickness=<font underline thickness>
|
||||
# box-drawings-uses-font-glyphs=no
|
||||
# dpi-aware=auto
|
||||
|
||||
# initial-window-size-pixels=700x500 # Or,
|
||||
# initial-window-size-chars=<COLSxROWS>
|
||||
# initial-window-mode=windowed
|
||||
# pad=0x0 # optionally append 'center'
|
||||
# resize-delay-ms=100
|
||||
|
||||
# notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body}
|
||||
|
||||
# bold-text-in-bright=no
|
||||
# word-delimiters=,│`|:"'()[]{}<>
|
||||
# selection-target=primary
|
||||
# workers=<number of logical CPUs>
|
||||
# utempter=/usr/lib/utempter/utempter
|
||||
|
||||
[environment]
|
||||
# name=value
|
||||
|
||||
[bell]
|
||||
# urgent=no
|
||||
# notify=no
|
||||
# command=
|
||||
# command-focused=no
|
||||
|
||||
[scrollback]
|
||||
lines=1000
|
||||
multiplier=3.0
|
||||
indicator-position=relative
|
||||
# indicator-format=""
|
||||
|
||||
[url]
|
||||
# launch=xdg-open ${url}
|
||||
# label-letters=sadfjklewcmpgh
|
||||
# osc8-underline=url-mode
|
||||
# protocols=http, https, ftp, ftps, file, gemini, gopher
|
||||
# uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[]
|
||||
|
||||
[cursor]
|
||||
# style=block
|
||||
# color=<inverse foreground/background>
|
||||
blink=yes
|
||||
# beam-thickness=1.5
|
||||
# underline-thickness=<font underline thickness>
|
||||
|
||||
[mouse]
|
||||
# hide-when-typing=no
|
||||
# alternate-scroll-mode=yes
|
||||
|
||||
[colors]
|
||||
# alpha=1.0
|
||||
# background=002b36
|
||||
# foreground=839496
|
||||
|
||||
## Normal/regular colors (color palette 0-7)
|
||||
# regular0=073642 # black
|
||||
# regular1=dc322f # red
|
||||
# regular2=859900 # green
|
||||
# regular3=b58900 # yellow
|
||||
# regular4=268bd2 # blue
|
||||
# regular5=d33682 # magenta
|
||||
# regular6=2aa198 # cyan
|
||||
# regular7=eee8d5 # white
|
||||
|
||||
## Bright colors (color palette 8-15)
|
||||
# bright0=08404f # bright black
|
||||
# bright1=e35f5c # bright red
|
||||
# bright2=9fb700 # bright green
|
||||
# bright3=d9a400 # bright yellow
|
||||
# bright4=4ba1de # bright blue
|
||||
# bright5=dc619d # bright magenta
|
||||
# bright6=32c1b6 # bright cyan
|
||||
# bright7=ffffff # bright white
|
||||
|
||||
## dimmed colors (see foot.ini(5) man page)
|
||||
# dim0=<not set>
|
||||
# ...
|
||||
# dim7=<not-set>
|
||||
|
||||
## The remaining 256-color palette
|
||||
# 16 = <256-color palette #16>
|
||||
# ...
|
||||
# 255 = <256-color palette #255>
|
||||
|
||||
## Misc colors
|
||||
# selection-foreground=<inverse foreground/background>
|
||||
# selection-background=<inverse foreground/background>
|
||||
# jump-labels=<regular0> <regular3> # black-on-yellow
|
||||
# scrollback-indicator=<regular0> <bright4> # black-on-bright-blue
|
||||
# search-box-no-match=<regular0> <regular1> # black-on-red
|
||||
# search-box-match=<regular0> <regular3> # black-on-yellow
|
||||
# urls=<regular3>
|
||||
|
||||
[csd]
|
||||
# preferred=server
|
||||
# size=26
|
||||
# font=<primary font>
|
||||
# color=<foreground color>
|
||||
# hide-when-typing=no
|
||||
# border-width=0
|
||||
# border-color=<csd.color>
|
||||
# button-width=26
|
||||
# button-color=<background color>
|
||||
# button-minimize-color=<regular4>
|
||||
# button-maximize-color=<regular2>
|
||||
# button-close-color=<regular1>
|
||||
|
||||
[key-bindings]
|
||||
scrollback-up-page=Control+k
|
||||
# scrollback-up-half-page=none
|
||||
# scrollback-up-line=none
|
||||
scrollback-down-page=Control+j
|
||||
# scrollback-down-half-page=none
|
||||
# scrollback-down-line=none
|
||||
# clipboard-copy=Control+Shift+c XF86Copy
|
||||
# clipboard-paste=Control+Shift+v XF86Paste
|
||||
# primary-paste=Shift+Insert
|
||||
# search-start=Control+Shift+r
|
||||
# font-increase=Control+plus Control+equal Control+KP_Add
|
||||
# font-decrease=Control+minus Control+KP_Subtract
|
||||
# font-reset=Control+0 Control+KP_0
|
||||
# spawn-terminal=Control+Shift+n
|
||||
# minimize=none
|
||||
# maximize=none
|
||||
# fullscreen=none
|
||||
# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none
|
||||
# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none
|
||||
# pipe-selected=[xargs -r firefox] none
|
||||
# show-urls-launch=Control+Shift+u
|
||||
# show-urls-copy=none
|
||||
# show-urls-persistent=none
|
||||
# prompt-prev=Control+Shift+z
|
||||
# prompt-next=Control+Shift+x
|
||||
# unicode-input=none
|
||||
# noop=none
|
||||
|
||||
[search-bindings]
|
||||
# cancel=Control+g Control+c Escape
|
||||
# commit=Return
|
||||
# find-prev=Control+r
|
||||
# find-next=Control+s
|
||||
# cursor-left=Left Control+b
|
||||
# cursor-left-word=Control+Left Mod1+b
|
||||
# cursor-right=Right Control+f
|
||||
# cursor-right-word=Control+Right Mod1+f
|
||||
# cursor-home=Home Control+a
|
||||
# cursor-end=End Control+e
|
||||
# delete-prev=BackSpace
|
||||
# delete-prev-word=Mod1+BackSpace Control+BackSpace
|
||||
# delete-next=Delete
|
||||
# delete-next-word=Mod1+d Control+Delete
|
||||
# extend-to-word-boundary=Control+w
|
||||
# extend-to-next-whitespace=Control+Shift+w
|
||||
# clipboard-paste=Control+v Control+Shift+v Control+y XF86Paste
|
||||
# primary-paste=Shift+Insert
|
||||
# unicode-input=none
|
||||
|
||||
[url-bindings]
|
||||
# cancel=Control+g Control+c Control+d Escape
|
||||
# toggle-url-visible=t
|
||||
|
||||
[text-bindings]
|
||||
# \x03=Mod4+c # Map Super+c -> Ctrl+c
|
||||
|
||||
[mouse-bindings]
|
||||
# selection-override-modifiers=Shift
|
||||
# primary-paste=BTN_MIDDLE
|
||||
# select-begin=BTN_LEFT
|
||||
# select-begin-block=Control+BTN_LEFT
|
||||
# select-extend=BTN_RIGHT
|
||||
# select-extend-character-wise=Control+BTN_RIGHT
|
||||
# select-word=BTN_LEFT-2
|
||||
# select-word-whitespace=Control+BTN_LEFT-2
|
||||
# select-row=BTN_LEFT-3
|
||||
|
||||
# vim: ft=dosini
|
||||
|
||||
[colors]
|
||||
alpha=0.8
|
||||
foreground=dcdccc
|
||||
background=111111
|
||||
|
||||
## Normal/regular colors (color palette 0-7)
|
||||
regular0=222222 # black
|
||||
regular1=cc9393 # red
|
||||
regular2=7f9f7f # green
|
||||
regular3=d0bf8f # yellow
|
||||
regular4=6ca0a3 # blue
|
||||
regular5=dc8cc3 # magenta
|
||||
regular6=93e0e3 # cyan
|
||||
regular7=dcdccc # white
|
||||
|
||||
## Bright colors (color palette 8-15)
|
||||
bright0=666666 # bright black
|
||||
bright1=dca3a3 # bright red
|
||||
bright2=bfebbf # bright green
|
||||
bright3=f0dfaf # bright yellow
|
||||
bright4=8cd0d3 # bright blue
|
||||
bright5=fcace3 # bright magenta
|
||||
bright6=b3ffff # bright cyan
|
||||
bright7=ffffff # bright white
|
|
@ -0,0 +1,42 @@
|
|||
font=IBM Plex Mono:size=10
|
||||
icons-enabled=no
|
||||
fields=filename,name,generic
|
||||
password-character=*
|
||||
filter-desktop=yes
|
||||
fuzzy=yes
|
||||
# show-actions=no
|
||||
# terminal=$TERMINAL -e # Note: you cannot actually use environment variables here
|
||||
# launch-prefix=<not set>
|
||||
# list-executables-in-path=yes
|
||||
|
||||
# anchor=center
|
||||
# lines=15
|
||||
width=50
|
||||
tabs=4
|
||||
# horizontal-pad=40
|
||||
# vertical-pad=8
|
||||
# inner-pad=0
|
||||
|
||||
# image-size-ratio=0.5
|
||||
|
||||
# line-height=<use font metrics>
|
||||
# letter-spacing=0
|
||||
|
||||
# layer = top
|
||||
# exit-on-keyboard-focus-loss = yes
|
||||
|
||||
[colors]
|
||||
background=1e1e1edd
|
||||
text=ffffffff
|
||||
match=458588ff
|
||||
selection=2f2f2fdd
|
||||
selection-text=657b83ff
|
||||
selection-match=458588ff
|
||||
|
||||
[border]
|
||||
width=0
|
||||
radius=0
|
||||
|
||||
[dmenu]
|
||||
# mode=text # text|index
|
||||
# exit-immediately-if-empty=no
|
|
@ -0,0 +1,15 @@
|
|||
[Settings]
|
||||
gtk-theme-name=Graphite-Dark
|
||||
gtk-icon-theme-name=Papirus
|
||||
gtk-font-name=Iosevka JP 10
|
||||
gtk-cursor-theme-name=Breeze_Dark
|
||||
gtk-cursor-theme-size=24
|
||||
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
|
|
@ -0,0 +1,61 @@
|
|||
# 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.3.0
|
||||
config_reader_min_version=3
|
||||
fields=0 48 17 18 38 39 40 2 46 47 49 1
|
||||
hide_kernel_threads=1
|
||||
hide_userland_threads=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=1
|
||||
header_margin=1
|
||||
screen_tabs=0
|
||||
detailed_cpu_time=0
|
||||
cpu_count_from_one=0
|
||||
show_cpu_usage=1
|
||||
show_cpu_frequency=0
|
||||
update_process_names=0
|
||||
account_guest_in_cpu_meter=0
|
||||
color_scheme=6
|
||||
enable_mouse=1
|
||||
delay=15
|
||||
hide_function_bar=0
|
||||
header_layout=two_50_50
|
||||
column_meters_0=AllCPUs MemorySwap
|
||||
column_meter_modes_0=1 1
|
||||
column_meters_1=Tasks LoadAverage Uptime Battery
|
||||
column_meter_modes_1=2 2 4 4
|
||||
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_always_by_pid=0
|
||||
.tree_view=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 Command
|
||||
.sort_key=IO_RATE
|
||||
.tree_sort_key=PID
|
||||
.tree_view_always_by_pid=0
|
||||
.tree_view=0
|
||||
.sort_direction=-1
|
||||
.tree_sort_direction=1
|
||||
.all_branches_collapsed=0
|
|
@ -0,0 +1,8 @@
|
|||
# [[ Javier Hyprland configuration ]]
|
||||
|
||||
source = ~/.config/hypr/src/init.conf
|
||||
source = ~/.config/hypr/src/general.conf
|
||||
source = ~/.config/hypr/src/env.conf
|
||||
source = ~/.config/hypr/src/windowrules.conf
|
||||
source = ~/.config/hypr/src/keybinds.conf
|
||||
source = ~/.config/hypr/src/scratchpads.conf
|
|
@ -0,0 +1,57 @@
|
|||
[pyprland]
|
||||
plugins = [
|
||||
"scratchpads",
|
||||
"shortcuts_menu",
|
||||
"expose"
|
||||
]
|
||||
|
||||
[scratchpads.term]
|
||||
animation = "fromTop"
|
||||
command = "foot -a term"
|
||||
class = "term"
|
||||
size = "75% 60%"
|
||||
max_size = "1920px 100%"
|
||||
margin = 50
|
||||
|
||||
[scratchpads.music_player]
|
||||
animation = "fromRight"
|
||||
command = "foot -a music_player -e ncmpcpp"
|
||||
class = "music_player"
|
||||
size = "75% 60%"
|
||||
max_size = "1920px 100%"
|
||||
margin = 50
|
||||
|
||||
[scratchpads.nnn]
|
||||
animation = "fromLeft"
|
||||
command = "foot -a nnn -e nnn"
|
||||
class = "nnn"
|
||||
size = "50% 40%"
|
||||
position = "5% 10%"
|
||||
max_size = "1920px 100%"
|
||||
margin = 50
|
||||
|
||||
[scratchpads.fetch]
|
||||
animation = "fromLeft"
|
||||
command = "foot -a venom_fetch"
|
||||
class = "venom_fetch"
|
||||
size = "23% 48%"
|
||||
position = "5% 10%"
|
||||
max_size = "1920px 100%"
|
||||
margin = 50
|
||||
|
||||
|
||||
[shortcuts_menu]
|
||||
engine = "fuzzel --dmenu"
|
||||
# parameters = "-p '[prompt] 🍰 ' -dmenu -matching fuzzy -i"
|
||||
command_start = "💀"
|
||||
|
||||
[shortcuts_menu.entries]
|
||||
|
||||
"Restart Waybar" = "pkill -9 waybar ; setsid waybar"
|
||||
"Telegram" = "xdg-open https://web.telegram.org/a/#-1421253041"
|
||||
"Cinny" = "xdg-open https://app.cinny.in/"
|
||||
|
||||
"Scratch" = [
|
||||
{name="action", options=["sync", "sysup" ]},
|
||||
"foot -e doas scratch [action]"
|
||||
]
|
|
@ -0,0 +1,10 @@
|
|||
# hyprland env's
|
||||
|
||||
env = QT_QPA_PLATFORM,wayland
|
||||
env = HYPRCURSOR_THEME,Breeze_Dark
|
||||
env = HYPRCURSOR_SIZE,24
|
||||
|
||||
# Set variables
|
||||
monitor=eDP-1,1920x1080@60,0x0,1
|
||||
$terminal = footclient
|
||||
$menu = fuzzel_run
|
|
@ -0,0 +1,87 @@
|
|||
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
|
||||
input {
|
||||
kb_layout = gb,us
|
||||
kb_options=grp:win_space_toggle
|
||||
kb_variant =
|
||||
kb_model =
|
||||
numlock_by_default = true
|
||||
kb_options = ctrl:nocaps
|
||||
kb_rules =
|
||||
|
||||
follow_mouse = 1
|
||||
|
||||
touchpad {
|
||||
natural_scroll = no
|
||||
}
|
||||
|
||||
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||
}
|
||||
|
||||
general {
|
||||
gaps_in = 5
|
||||
gaps_out = 10
|
||||
border_size = 2
|
||||
no_border_on_floating = 0
|
||||
col.active_border = rgba(999999bb)
|
||||
col.inactive_border = rgba(595959aa)
|
||||
layout = master
|
||||
allow_tearing = false
|
||||
cursor_inactive_timeout = 2
|
||||
resize_corner = 3
|
||||
}
|
||||
|
||||
decoration {
|
||||
rounding = 0
|
||||
blur {
|
||||
size = 1
|
||||
passes = 2
|
||||
new_optimizations = true
|
||||
xray = false
|
||||
ignore_opacity = true
|
||||
}
|
||||
|
||||
drop_shadow = no
|
||||
shadow_range = 4
|
||||
shadow_render_power = 3
|
||||
col.shadow = rgba(1a1a1aee)
|
||||
blurls = waybar
|
||||
}
|
||||
|
||||
animations {
|
||||
enabled = yes
|
||||
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
||||
animation = windows, 1, 7, myBezier
|
||||
animation = windowsOut, 1, 7, default, popin 80%
|
||||
animation = border, 1, 10, default
|
||||
animation = borderangle, 1, 8, default
|
||||
animation = fade, 1, 7, default
|
||||
animation = workspaces, 1, 6, default
|
||||
}
|
||||
|
||||
dwindle {
|
||||
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||
preserve_split = yes # you probably want this
|
||||
}
|
||||
|
||||
master {
|
||||
new_is_master = false
|
||||
drop_at_cursor = false
|
||||
}
|
||||
|
||||
gestures {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
workspace_swipe = 1
|
||||
}
|
||||
|
||||
misc {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
force_default_wallpaper = 0
|
||||
focus_on_activate = 1
|
||||
enable_swallow = 1
|
||||
swallow_regex = ^(Alacritty|foot|footclient)$
|
||||
}
|
||||
|
||||
device:epic-mouse-v1 {
|
||||
#sensitivity = -0.5
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
# Execute your favorite apps at launch
|
||||
|
||||
exec-once = pypr
|
||||
exec-once = swww init
|
||||
exec-once = cron -f ~/.config/cron/cron.conf
|
||||
exec-once = waybar
|
||||
exec-once = mpd --no-daemon "$HOME"/.config/mpd/mpd.conf
|
||||
exec-once = pipewire
|
||||
exec-once = pipewire-pulse
|
||||
exec-once = wireplumber
|
||||
exec-once = foot --server
|
||||
exec-once = swayidle -w timeout 500 'swaylock'
|
||||
exec-once = xrdb ~/.config/.Xdefaults
|
|
@ -0,0 +1,99 @@
|
|||
# [[ Keybinds ]]
|
||||
|
||||
$mainMod = SUPER
|
||||
|
||||
bind = $mainMod, return, exec, $terminal
|
||||
bind = $mainMod, Q, killactive,
|
||||
bind = SUPER_SHIFT, Q, exec, sysact
|
||||
bind = $mainMod, F, exec, hyprctl dispatch togglefloating; pkill -SIGRTMIN+8 waybar # hyprctl dispatch right in your script just so you can exec at the same time
|
||||
bind = $mainMod SHIFT, F, fullscreen,
|
||||
bindr = $mainMod, D, exec, $menu
|
||||
bind = $mainMod, W, exec, chromium
|
||||
bind = $SUPER_SHIFT, f, exec, wbg
|
||||
bind = $SUPER_SHIFT, l, exec, swaylock
|
||||
bind = ,XF86PowerOff, exec, doas zzz -z
|
||||
bind = $mainMod, P, pseudo, # dwindle
|
||||
bind = ,Print, exec, grimblast -n copy screen
|
||||
bind = $mainMod SHIFT,Print, exec, shareurl.sh
|
||||
bind = $mainMod SHIFT, s, exec, grimblast -n copy area
|
||||
$screenrecorder= $HOME/.local/bin/scripts/screencast
|
||||
bind = $mainMod SHIFT, r , exec, $screenrecorder
|
||||
bind = ALT,m , exec, pypr menu
|
||||
bind = ALT SHIFT, Return , exec, pypr expose
|
||||
|
||||
# [[ KeyChords ]]
|
||||
bind = $mainMod, SPACE , submap, menusubmap
|
||||
submap = menusubmap
|
||||
bind = ,i,exec,foot -e nsxiv ~/pics/classic/art -t -g 1500x700
|
||||
bind = ,i,submap,reset
|
||||
bind = ,m,exec,dmenumount
|
||||
bind = ,m,submap,reset
|
||||
bind = ,u,exec,dmenuumount
|
||||
bind = ,u,submap,reset
|
||||
bind = ,q,exec,sysact
|
||||
bind = ,q,submap,reset
|
||||
bind=,escape,submap,reset
|
||||
submap = reset
|
||||
|
||||
# Audio MPC commands
|
||||
bind = ,XF86AudioPlay, exec, mpc toggle
|
||||
bind = ,XF86AudioStop, exec, mpc stop
|
||||
bind = ,XF86AudioNext, exec, mpc next
|
||||
bind = ,XF86AudioPrev, exec, mpc prev
|
||||
binde=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+
|
||||
bindl=, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||
bindl=, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||
|
||||
# Screen Brightness
|
||||
bind=,XF86MonBrightnessUp,exec,doas brightnessctl set +10%
|
||||
bind=,XF86MonBrightnessDown,exec,doas brightnessctl set 10%-
|
||||
|
||||
# [[ Window management ]]
|
||||
# Move focus with mainMod + arrow keys
|
||||
bind = $mainMod, J, layoutmsg,cyclenext
|
||||
bind = $mainMod, K, layoutmsg,cycleprev
|
||||
|
||||
# Swap windows
|
||||
bind = $mainMod SHIFT, J, swapnext, next
|
||||
bind = $mainMod SHIFT, K, swapnext, prev
|
||||
|
||||
# Resize windows
|
||||
bind = $mainMod, l, resizeactive, 40 0
|
||||
bind = $mainMod, h, resizeactive, -40 0
|
||||
|
||||
# Switch workspaces with mainMod + [0-9]
|
||||
bind = $mainMod, 1, workspace, 1
|
||||
bind = $mainMod, 2, workspace, 2
|
||||
bind = $mainMod, 3, workspace, 3
|
||||
bind = $mainMod, 4, workspace, 4
|
||||
bind = $mainMod, 5, workspace, 5
|
||||
bind = $mainMod, 6, workspace, 6
|
||||
bind = $mainMod, 7, workspace, 7
|
||||
bind = $mainMod, 8, workspace, 8
|
||||
bind = $mainMod, 9, workspace, 9
|
||||
bind = $mainMod, 0, workspace, 10
|
||||
|
||||
# Cycle through ocuped workspaces
|
||||
bind = ALT, Tab, workspace, m+1
|
||||
bind = ALT SHIFT, Tab, workspace, m-1
|
||||
|
||||
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||
bind = $mainMod SHIFT, 1, movetoworkspacesilent, 1
|
||||
bind = $mainMod SHIFT, 2, movetoworkspacesilent, 2
|
||||
bind = $mainMod SHIFT, 3, movetoworkspacesilent, 3
|
||||
bind = $mainMod SHIFT, 4, movetoworkspacesilent, 4
|
||||
bind = $mainMod SHIFT, 5, movetoworkspacesilent, 5
|
||||
bind = $mainMod SHIFT, 6, movetoworkspacesilent, 6
|
||||
bind = $mainMod SHIFT, 7, movetoworkspacesilent, 7
|
||||
bind = $mainMod SHIFT, 8, movetoworkspacesilent, 8
|
||||
bind = $mainMod SHIFT, 9, movetoworkspacesilent, 9
|
||||
bind = $mainMod SHIFT, 0, movetoworkspacesilent, 10
|
||||
|
||||
# Scroll through existing workspaces with mainMod + scroll
|
||||
bind = $mainMod, mouse_down, workspace, e+1
|
||||
bind = $mainMod, mouse_up, workspace, e-1
|
||||
|
||||
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
bindm = $mainMod, mouse:272, movewindow
|
||||
bindm = $mainMod, mouse:273, resizewindow
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
# [[ Scratchpads rules ]]
|
||||
# Keydind
|
||||
# window rules
|
||||
|
||||
bind = $mainMod Shift,Return,exec,pypr toggle term
|
||||
$dropterm = (term)$
|
||||
windowrule = float,$dropterm
|
||||
windowrule = workspace special silent,$dropterm
|
||||
windowrule = size 75% 60%,$dropterm
|
||||
|
||||
bind = ALT,Return,exec,pypr toggle fetch
|
||||
$fetch = (venom_fetch)$
|
||||
windowrule = float,$fetch
|
||||
windowrule = workspace special silent,$fetch
|
||||
windowrule = size 75% 60%,$fetch
|
||||
|
||||
bind = $mainMod,m,exec,pypr toggle music_player
|
||||
$music_player = (music_player)$
|
||||
windowrule = float,$music_player
|
||||
windowrule = workspace special silent,$music_player
|
||||
windowrule = size 75% 60%,$music_player
|
||||
|
||||
bind = $mainMod,e,exec,pypr toggle nnn
|
||||
$nnn = (nnn)$
|
||||
windowrule = float,$nnn
|
||||
windowrule = workspace special silent,$nnn
|
||||
windowrule = size 75% 60%,$nnn
|
|
@ -0,0 +1,218 @@
|
|||
#NOTE: config lives in: Linux: ~/.config/lazygit/config.yml
|
||||
gui:
|
||||
# stuff relating to the UI
|
||||
showIcons: true
|
||||
scrollHeight: 2 # how many lines you scroll by
|
||||
scrollPastBottom: true # enable scrolling past the bottom
|
||||
sidePanelWidth: 0.3333 # number from 0 to 1
|
||||
expandFocusedSidePanel: false
|
||||
mainPanelSplitMode: 'flexible' # one of 'horizontal' | 'flexible' | 'vertical'
|
||||
language: 'auto' # one of 'auto' | 'en' | 'zh' | 'pl' | 'nl' | 'ja' | 'ko'
|
||||
timeFormat: '02 Jan 06 15:04 MST' # https://pkg.go.dev/time#Time.Format
|
||||
theme:
|
||||
lightTheme: false # For terminals with a light background
|
||||
activeBorderColor:
|
||||
- "#c678dd"
|
||||
- bold
|
||||
inactiveBorderColor:
|
||||
- "#61afef"
|
||||
optionsTextColor:
|
||||
- "#c678dd"
|
||||
selectedLineBgColor:
|
||||
- "#61afef"
|
||||
selectedRangeBgColor:
|
||||
- "#61afef"
|
||||
cherryPickedCommitBgColor:
|
||||
- "#61afef"
|
||||
cherryPickedCommitFgColor:
|
||||
- "#abb2bf"
|
||||
unstagedChangesColor:
|
||||
- "#c94f6d"
|
||||
stagedChangesColor:
|
||||
- "#61a"
|
||||
commitLength:
|
||||
show: true
|
||||
mouseEvents: true
|
||||
skipDiscardChangeWarning: false
|
||||
skipStashWarning: false
|
||||
showFileTree: true # for rendering changes files in a tree format
|
||||
showListFooter: true # for seeing the '5 of 20' message in list panels
|
||||
showRandomTip: true
|
||||
showBottomLine: true # for hiding the bottom information line (unless it has important information to tell you)
|
||||
showCommandLog: true
|
||||
commandLogSize: 8
|
||||
splitDiff: 'auto' # one of 'auto' | 'always'
|
||||
git:
|
||||
paging:
|
||||
colorArg: always
|
||||
useConfig: false
|
||||
commit:
|
||||
signOff: false
|
||||
merging:
|
||||
# only applicable to unix users
|
||||
manualCommit: false
|
||||
# extra args passed to `git merge`, e.g. --no-ff
|
||||
args: ''
|
||||
log:
|
||||
# one of date-order, author-date-order, topo-order.
|
||||
# topo-order makes it easier to read the git log graph, but commits may not
|
||||
# appear chronologically. See https://git-scm.com/docs/git-log#_commit_ordering
|
||||
order: 'topo-order'
|
||||
# one of always, never, when-maximised
|
||||
# this determines whether the git graph is rendered in the commits panel
|
||||
showGraph: 'when-maximised'
|
||||
# displays the whole git graph by default in the commits panel (equivalent to passing the `--all` argument to `git log`)
|
||||
showWholeGraph: false
|
||||
skipHookPrefix: WIP
|
||||
autoFetch: true
|
||||
autoRefresh: true
|
||||
branchLogCmd: 'git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --'
|
||||
allBranchesLogCmd: 'git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium'
|
||||
overrideGpg: false # prevents lazygit from spawning a separate process when using GPG
|
||||
disableForcePushing: false
|
||||
parseEmoji: true
|
||||
diffContextSize: 3 # how many lines of context are shown around a change in diffs
|
||||
os:
|
||||
editCommand: '' # see 'Configuring File Editing' section
|
||||
editCommandTemplate: ''
|
||||
openCommand: ''
|
||||
refresher:
|
||||
refreshInterval: 10 # File/submodule refresh interval in seconds. Auto-refresh can be disabled via option 'git.autoRefresh'.
|
||||
fetchInterval: 60 # Re-fetch interval in seconds. Auto-fetch can be disabled via option 'git.autoFetch'.
|
||||
update:
|
||||
method: prompt # can be: prompt | background | never
|
||||
days: 14 # how often an update is checked for
|
||||
reporting: 'undetermined' # one of: 'on' | 'off' | 'undetermined'
|
||||
confirmOnQuit: false
|
||||
# determines whether hitting 'esc' will quit the application when there is nothing to cancel/close
|
||||
quitOnTopLevelReturn: false
|
||||
disableStartupPopups: false
|
||||
notARepository: 'prompt' # one of: 'prompt' | 'create' | 'skip' | 'quit'
|
||||
promptToReturnFromSubprocess: true # display confirmation when subprocess terminates
|
||||
keybinding:
|
||||
universal:
|
||||
quit: 'q'
|
||||
quit-alt1: '<c-c>' # alternative/alias of quit
|
||||
return: '<esc>' # return to previous menu, will quit if there's nowhere to return
|
||||
quitWithoutChangingDirectory: 'Q'
|
||||
togglePanel: '<tab>' # goto the next panel
|
||||
prevItem: '<up>' # go one line up
|
||||
nextItem: '<down>' # go one line down
|
||||
prevItem-alt: 'k' # go one line up
|
||||
nextItem-alt: 'j' # go one line down
|
||||
prevPage: ',' # go to next page in list
|
||||
nextPage: '.' # go to previous page in list
|
||||
gotoTop: '<' # go to top of list
|
||||
gotoBottom: '>' # go to bottom of list
|
||||
scrollLeft: 'H' # scroll left within list view
|
||||
scrollRight: 'L' # scroll right within list view
|
||||
prevBlock: '<left>' # goto the previous block / panel
|
||||
nextBlock: '<right>' # goto the next block / panel
|
||||
prevBlock-alt: 'h' # goto the previous block / panel
|
||||
nextBlock-alt: 'l' # goto the next block / panel
|
||||
jumpToBlock: ['1', '2', '3', '4', '5'] # goto the Nth block / panel
|
||||
nextMatch: 'n'
|
||||
prevMatch: 'N'
|
||||
optionMenu: 'x' # show help menu
|
||||
optionMenu-alt1: '?' # show help menu
|
||||
select: '<space>'
|
||||
goInto: '<enter>'
|
||||
openRecentRepos: '<c-r>'
|
||||
confirm: '<enter>'
|
||||
confirm-alt1: 'y'
|
||||
remove: 'd'
|
||||
new: 'n'
|
||||
edit: 'e'
|
||||
openFile: 'o'
|
||||
scrollUpMain: '<pgup>' # main panel scroll up
|
||||
scrollDownMain: '<pgdown>' # main panel scroll down
|
||||
scrollUpMain-alt1: 'K' # main panel scroll up
|
||||
scrollDownMain-alt1: 'J' # main panel scroll down
|
||||
scrollUpMain-alt2: '<c-u>' # main panel scroll up
|
||||
scrollDownMain-alt2: '<c-d>' # main panel scroll down
|
||||
executeCustomCommand: ':'
|
||||
createRebaseOptionsMenu: 'm'
|
||||
pushFiles: 'P'
|
||||
pullFiles: 'p'
|
||||
refresh: 'R'
|
||||
createPatchOptionsMenu: '<c-p>'
|
||||
nextTab: ']'
|
||||
prevTab: '['
|
||||
nextScreenMode: '+'
|
||||
prevScreenMode: '_'
|
||||
undo: 'z'
|
||||
redo: '<c-z>'
|
||||
filteringMenu: '<c-s>'
|
||||
diffingMenu: 'W'
|
||||
diffingMenu-alt: '<c-e>' # deprecated
|
||||
copyToClipboard: '<c-o>'
|
||||
submitEditorText: '<enter>'
|
||||
appendNewline: '<a-enter>'
|
||||
extrasMenu: '@'
|
||||
toggleWhitespaceInDiffView: '<c-w>'
|
||||
increaseContextInDiffView: '}'
|
||||
decreaseContextInDiffView: '{'
|
||||
status:
|
||||
checkForUpdate: 'u'
|
||||
recentRepos: '<enter>'
|
||||
files:
|
||||
commitChanges: 'c'
|
||||
commitChangesWithoutHook: 'w' # commit changes without pre-commit hook
|
||||
amendLastCommit: 'A'
|
||||
commitChangesWithEditor: 'C'
|
||||
ignoreFile: 'i'
|
||||
refreshFiles: 'r'
|
||||
stashAllChanges: 's'
|
||||
viewStashOptions: 'S'
|
||||
toggleStagedAll: 'a' # stage/unstage all
|
||||
viewResetOptions: 'D'
|
||||
fetch: 'f'
|
||||
toggleTreeView: '`'
|
||||
branches:
|
||||
createPullRequest: 'o'
|
||||
viewPullRequestOptions: 'O'
|
||||
checkoutBranchByName: 'c'
|
||||
forceCheckoutBranch: 'F'
|
||||
rebaseBranch: 'r'
|
||||
renameBranch: 'R'
|
||||
mergeIntoCurrentBranch: 'M'
|
||||
viewGitFlowOptions: 'i'
|
||||
fastForward: 'f' # fast-forward this branch from its upstream
|
||||
pushTag: 'P'
|
||||
setUpstream: 'u' # set as upstream of checked-out branch
|
||||
fetchRemote: 'f'
|
||||
commits:
|
||||
squashDown: 's'
|
||||
renameCommit: 'r'
|
||||
renameCommitWithEditor: 'R'
|
||||
viewResetOptions: 'g'
|
||||
markCommitAsFixup: 'f'
|
||||
createFixupCommit: 'F' # create fixup commit for this commit
|
||||
squashAboveCommits: 'S'
|
||||
moveDownCommit: '<c-j>' # move commit down one
|
||||
moveUpCommit: '<c-k>' # move commit up one
|
||||
amendToCommit: 'A'
|
||||
pickCommit: 'p' # pick commit (when mid-rebase)
|
||||
revertCommit: 't'
|
||||
cherryPickCopy: 'c'
|
||||
cherryPickCopyRange: 'C'
|
||||
pasteCommits: 'v'
|
||||
tagCommit: 'T'
|
||||
checkoutCommit: '<space>'
|
||||
resetCherryPick: '<c-R>'
|
||||
copyCommitMessageToClipboard: '<c-y>'
|
||||
openLogMenu: '<c-l>'
|
||||
viewBisectOptions: 'b'
|
||||
stash:
|
||||
popStash: 'g'
|
||||
commitFiles:
|
||||
checkoutCommitFile: 'c'
|
||||
main:
|
||||
toggleDragSelect: 'v'
|
||||
toggleDragSelect-alt: 'V'
|
||||
toggleSelectHunk: 'a'
|
||||
pickBothHunks: 'b'
|
||||
submodules:
|
||||
init: 'i'
|
||||
update: 'u'
|
||||
bulkMenu: 'b'
|
|
@ -0,0 +1,22 @@
|
|||
lastupdatecheck: 0
|
||||
recentrepos:
|
||||
- /home/javier/.emacs.d
|
||||
- /home/javier/.local/src/jpmacs
|
||||
- /home/javier/.local/src/noobemacs
|
||||
- /home/javier/.local/src/dwmblocks/dwmblocks
|
||||
- /home/javier/repos/dwm
|
||||
- /home/javier/notes
|
||||
- /home/javier/.dotfiles
|
||||
- /home/javier/.dotfiles/home/.config/nvim
|
||||
- /home/javier/.config/nvim
|
||||
- /home/javier/.local/src/classic
|
||||
- /home/javier/.dotfiles/home/.local/src/classic
|
||||
- /home/javier/pics/classic
|
||||
- /home/javier/repos/st
|
||||
- /home/javier/.local/src/void-packages
|
||||
- /home/javier/code/rust/d2b
|
||||
startuppopupversion: 5
|
||||
customcommandshistory:
|
||||
- q
|
||||
hidecommandlog: false
|
||||
ignorewhitespaceindiffview: false
|
|
@ -0,0 +1,25 @@
|
|||
# [[ Mako config file - JP ]]
|
||||
|
||||
font=IBM Plex Mono 14
|
||||
background-color=#1e1e1eaa
|
||||
text-color=#ffffff
|
||||
|
||||
# Eyecandy config
|
||||
|
||||
border-size=0
|
||||
border-color=#1e1e1e
|
||||
border-radius=0
|
||||
layer=overlay
|
||||
|
||||
# Size
|
||||
width=300
|
||||
height=110
|
||||
|
||||
# Show icons in notifications.
|
||||
icons=1
|
||||
max-icon-size=64
|
||||
|
||||
# Text alignment
|
||||
text-alignment=left
|
||||
|
||||
default-timeout=3000
|
|
@ -0,0 +1,4 @@
|
|||
[Default Applications]
|
||||
application/pdf=org.pwmt.zathura-pdf-poppler.desktop
|
||||
image/jpeg=nsxiv.desktop
|
||||
image/png=nsxiv.desktop
|
|
@ -0,0 +1,706 @@
|
|||
info_begin
|
||||
format: 2
|
||||
mpd_version: 0.23.14
|
||||
fs_charset: UTF-8
|
||||
tag: Artist
|
||||
tag: ArtistSort
|
||||
tag: Album
|
||||
tag: AlbumSort
|
||||
tag: AlbumArtist
|
||||
tag: AlbumArtistSort
|
||||
tag: Title
|
||||
tag: Track
|
||||
tag: Name
|
||||
tag: Genre
|
||||
tag: Date
|
||||
tag: OriginalDate
|
||||
tag: Composer
|
||||
tag: ComposerSort
|
||||
tag: Performer
|
||||
tag: Conductor
|
||||
tag: Work
|
||||
tag: Movement
|
||||
tag: MovementNumber
|
||||
tag: Ensemble
|
||||
tag: Location
|
||||
tag: Grouping
|
||||
tag: Disc
|
||||
tag: Label
|
||||
tag: MUSICBRAINZ_ARTISTID
|
||||
tag: MUSICBRAINZ_ALBUMID
|
||||
tag: MUSICBRAINZ_ALBUMARTISTID
|
||||
tag: MUSICBRAINZ_TRACKID
|
||||
tag: MUSICBRAINZ_RELEASETRACKID
|
||||
tag: MUSICBRAINZ_WORKID
|
||||
info_end
|
||||
directory: Annihilator - Alice In Hell
|
||||
mtime: 1710237521
|
||||
begin: Annihilator - Alice In Hell
|
||||
song_begin: 01 - Crystal Ann.mp3
|
||||
Time: 100.940000
|
||||
Artist: Annihilator
|
||||
AlbumArtist: Annihilator
|
||||
Title: Crystal Ann
|
||||
Album: Alice In Hell
|
||||
Track: 1
|
||||
Date: 1989
|
||||
Genre: Technical Speed/Thrash Metal
|
||||
Composer: Jeff Waters
|
||||
Disc: 1
|
||||
Label: Roadrunner Records
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237521
|
||||
song_end
|
||||
song_begin: 02 - Alison Hell..mp3
|
||||
Time: 300.803000
|
||||
Artist: Annihilator
|
||||
AlbumArtist: Annihilator
|
||||
Title: Alison Hell
|
||||
Album: Alice In Hell
|
||||
Track: 2
|
||||
Date: 1989
|
||||
Genre: Technical Speed/Thrash Metal
|
||||
Composer: Jeff Waters/Jon Bates
|
||||
Disc: 1
|
||||
Label: Roadrunner Records
|
||||
Format: 44100:24:2
|
||||
mtime: 1710843107
|
||||
song_end
|
||||
song_begin: 03 - W.T.Y.D..mp3
|
||||
Time: 236.228000
|
||||
Artist: Annihilator
|
||||
AlbumArtist: Annihilator
|
||||
Title: W.T.Y.D.
|
||||
Album: Alice In Hell
|
||||
Track: 3
|
||||
Date: 1989
|
||||
Genre: Technical Speed/Thrash Metal
|
||||
Composer: Jeff Waters/Jon Bates
|
||||
Disc: 1
|
||||
Label: Roadrunner Records
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237521
|
||||
song_end
|
||||
song_begin: 04 - Wicked Mystic.mp3
|
||||
Time: 218.047000
|
||||
Artist: Annihilator
|
||||
AlbumArtist: Annihilator
|
||||
Title: Wicked Mystic
|
||||
Album: Alice In Hell
|
||||
Track: 4
|
||||
Date: 1989
|
||||
Genre: Technical Speed/Thrash Metal
|
||||
Composer: Jeff Waters/Jody Weil
|
||||
Disc: 1
|
||||
Label: Roadrunner Records
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237521
|
||||
song_end
|
||||
song_begin: 05 - Burns Like A Buzzsaw Blade.mp3
|
||||
Time: 213.684000
|
||||
Artist: Annihilator
|
||||
AlbumArtist: Annihilator
|
||||
Title: Burns Like A Buzzsaw Blade
|
||||
Album: Alice In Hell
|
||||
Track: 5
|
||||
Date: 1989
|
||||
Genre: Technical Speed/Thrash Metal
|
||||
Composer: Jeff Waters/Jody Weil/Jon Bates
|
||||
Disc: 1
|
||||
Label: Roadrunner Records
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237521
|
||||
song_end
|
||||
song_begin: 06 - Word Salad.mp3
|
||||
Time: 349.417000
|
||||
Artist: Annihilator
|
||||
AlbumArtist: Annihilator
|
||||
Title: Word Salad
|
||||
Album: Alice In Hell
|
||||
Track: 6
|
||||
Date: 1989
|
||||
Genre: Technical Speed/Thrash Metal
|
||||
Composer: Jeff Waters
|
||||
Disc: 1
|
||||
Label: Roadrunner Records
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237521
|
||||
song_end
|
||||
song_begin: 07 - Schizos (Are Never Alone) Parts I & II.mp3
|
||||
Time: 272.460000
|
||||
Artist: Annihilator
|
||||
AlbumArtist: Annihilator
|
||||
Title: Schizos (Are Never Alone) Parts I & II
|
||||
Album: Alice In Hell
|
||||
Track: 7
|
||||
Date: 1989
|
||||
Genre: Technical Speed/Thrash Metal
|
||||
Composer: Jeff Waters
|
||||
Disc: 1
|
||||
Label: Roadrunner Records
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237521
|
||||
song_end
|
||||
song_begin: 08 - Ligeia.mp3
|
||||
Time: 287.480000
|
||||
Artist: Annihilator
|
||||
AlbumArtist: Annihilator
|
||||
Title: Ligeia
|
||||
Album: Alice In Hell
|
||||
Track: 8
|
||||
Date: 1989
|
||||
Genre: Technical Speed/Thrash Metal
|
||||
Composer: Jeff Waters
|
||||
Disc: 1
|
||||
Label: Roadrunner Records
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237521
|
||||
song_end
|
||||
song_begin: 09 - Human Insecticide.mp3
|
||||
Time: 290.850000
|
||||
Artist: Annihilator
|
||||
AlbumArtist: Annihilator
|
||||
Title: Human Insecticide
|
||||
Album: Alice In Hell
|
||||
Track: 9
|
||||
Date: 1989
|
||||
Genre: Technical Speed/Thrash Metal
|
||||
Composer: Jeff Waters/Jon Bates
|
||||
Disc: 1
|
||||
Label: Roadrunner Records
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237521
|
||||
song_end
|
||||
song_begin: 10 - Powerdrain (Demo).mp3
|
||||
Time: 169.381000
|
||||
Artist: Annihilator
|
||||
AlbumArtist: Annihilator
|
||||
Title: Powerdrain (Demo)
|
||||
Album: Alice In Hell
|
||||
Track: 10
|
||||
Date: 1989
|
||||
Genre: Technical Speed/Thrash Metal
|
||||
Composer: Jeff Waters
|
||||
Disc: 1
|
||||
Label: Zebralution
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237521
|
||||
song_end
|
||||
song_begin: 11 - Schizos (Are Never Alone) Parts I & II (Demo).mp3
|
||||
Time: 258.563000
|
||||
Artist: Annihilator
|
||||
AlbumArtist: Annihilator
|
||||
Title: Schizos (Are Never Alone) - Parts I & II (Demo)
|
||||
Album: Alice In Hell
|
||||
Track: 11
|
||||
Date: 1989
|
||||
Genre: Technical Speed/Thrash Metal
|
||||
Composer: Jeff Waters
|
||||
Disc: 1
|
||||
Label: Zebralution
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237521
|
||||
song_end
|
||||
song_begin: 12 - Ligeia (Demo).mp3
|
||||
Time: 296.205000
|
||||
Artist: Annihilator
|
||||
AlbumArtist: Annihilator
|
||||
Title: Ligeia (Demo)
|
||||
Album: Alice In Hell
|
||||
Track: 12
|
||||
Date: 1989
|
||||
Genre: Technical Speed/Thrash Metal
|
||||
Composer: Jeff Waters
|
||||
Disc: 1
|
||||
Label: Zebralution
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
end: Annihilator - Alice In Hell
|
||||
directory: Killemall
|
||||
mtime: 1710237522
|
||||
begin: Killemall
|
||||
song_begin: 01 - Metallica - Hit The Lights.mp3
|
||||
Time: 256.522000
|
||||
Artist: Metallica
|
||||
Title: Hit The Lights
|
||||
Album: Kill 'em All
|
||||
Track: 1
|
||||
Date: 1983
|
||||
Genre: Thrash Metal
|
||||
Composer: Dave Mustaine/James Hetfield/Lars Ulrich/R. McGovney
|
||||
Label: Warner Bros.
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 02 - Metallica - The Four Horsemen.mp3
|
||||
Time: 429.565000
|
||||
Artist: Metallica
|
||||
AlbumArtist: Metallica
|
||||
Title: The Four Horsemen
|
||||
Album: Kill 'em All
|
||||
Track: 2
|
||||
Date: 1983
|
||||
Date: 1983
|
||||
Genre: Thrash Metal
|
||||
Composer: Dave Mustaine/James Hetfield/Lars Ulrich
|
||||
Label: Warner Bros.
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 03 - Metallica - Motorbreath.mp3
|
||||
Time: 183.544000
|
||||
Artist: Metallica
|
||||
AlbumArtist: Metallica
|
||||
Title: Motorbreath
|
||||
Album: Kill 'em All
|
||||
Track: 3
|
||||
Date: 1983
|
||||
Date: 1983
|
||||
Genre: Thrash Metal
|
||||
Composer: James Hetfield
|
||||
Label: Warner Bros.
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 04 - Metallica - Jump In The Fire.mp3
|
||||
Time: 279.544000
|
||||
Artist: Metallica
|
||||
AlbumArtist: Metallica
|
||||
Title: Jump In The Fire
|
||||
Album: Kill 'em All
|
||||
Track: 4
|
||||
Date: 1983
|
||||
Date: 1983
|
||||
Genre: Thrash Metal
|
||||
Composer: Dave Mustaine/James Hetfield/Lars Ulrich
|
||||
Label: Warner Bros.
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 05 - Metallica - (Anesthesia) - Pulling Teeth.mp3
|
||||
Time: 254.545000
|
||||
Artist: Metallica
|
||||
AlbumArtist: Metallica
|
||||
Title: (Anesthesia) - Pulling Teeth
|
||||
Album: Kill 'em All
|
||||
Track: 5
|
||||
Date: 1983
|
||||
Date: 1983
|
||||
Genre: Thrash Metal
|
||||
Composer: Cliff Burton
|
||||
Label: Warner Bros.
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 06 - Metallica - Whiplash.mp3
|
||||
Time: 247.048000
|
||||
Artist: Metallica
|
||||
AlbumArtist: Metallica
|
||||
Title: Whiplash
|
||||
Album: Kill 'em All
|
||||
Track: 6
|
||||
Date: 1983
|
||||
Date: 1983
|
||||
Genre: Thrash Metal
|
||||
Composer: James Hetfield/Lars Ulrich
|
||||
Label: Warner Bros.
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 07 - Metallica - Phantom Lord.mp3
|
||||
Time: 297.542000
|
||||
Artist: Metallica
|
||||
AlbumArtist: Metallica
|
||||
Title: Phantom Lord
|
||||
Album: Kill 'em All
|
||||
Track: 7
|
||||
Date: 1983
|
||||
Date: 1983
|
||||
Genre: Thrash Metal
|
||||
Composer: Dave Mustaine/James Hetfield/Lars Ulrich
|
||||
Label: Warner Bros.
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 08 - Metallica - No Remorse.mp3
|
||||
Time: 383.033000
|
||||
Artist: Metallica
|
||||
Title: No Remorse
|
||||
Album: Kill 'em All
|
||||
Track: 8
|
||||
Date: 1984
|
||||
Genre: Thrash Metal
|
||||
Composer: James Hetfield/Lars Ulrich
|
||||
Label: Warner Bros.
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 09 - Metallica - Seek And Destroy.mp3
|
||||
Time: 415.041000
|
||||
Artist: Metallica
|
||||
AlbumArtist: Metallica
|
||||
Title: Seek And Destroy
|
||||
Album: Kill 'em All
|
||||
Track: 9
|
||||
Date: 1984
|
||||
Date: 1984
|
||||
Genre: Thrash Metal
|
||||
Composer: James Hetfield/Lars Ulrich
|
||||
Label: Warner Bros.
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 10 - Metallica - Metal Militia.mp3
|
||||
Time: 309.062000
|
||||
Artist: Metallica
|
||||
AlbumArtist: Metallica
|
||||
Title: Metal Militia
|
||||
Album: Kill 'em All
|
||||
Track: 10
|
||||
Date: 1983
|
||||
Date: 1983
|
||||
Genre: Thrash Metal
|
||||
Composer: Dave Mustaine/James Hetfield/Lars Ulrich
|
||||
Label: Warner Bros.
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
end: Killemall
|
||||
directory: Revocation
|
||||
mtime: 1710237523
|
||||
begin: Revocation
|
||||
song_begin: 01 - Cretin.mp3
|
||||
Time: 183.431000
|
||||
Artist: Revocation
|
||||
Title: Cretin
|
||||
Album: Chaos of Forms
|
||||
Track: 1
|
||||
Date: 2011
|
||||
Genre: Metal
|
||||
Label: Relapse
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 02 - Cradle Robber.mp3
|
||||
Time: 264.986000
|
||||
Artist: Revocation
|
||||
Title: Cradle Robber
|
||||
Album: Chaos of Forms
|
||||
Track: 2
|
||||
Date: 2011
|
||||
Genre: Metal
|
||||
Label: Relapse
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 03 - Harlot.mp3
|
||||
Time: 171.546000
|
||||
Artist: Revocation
|
||||
Title: Harlot
|
||||
Album: Chaos of Forms
|
||||
Track: 3
|
||||
Date: 2011
|
||||
Genre: Metal
|
||||
Label: Relapse
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 04 - Dissolution Ritual.mp3
|
||||
Time: 277.394000
|
||||
Artist: Revocation
|
||||
Title: Dissolution Ritual
|
||||
Album: Chaos of Forms
|
||||
Track: 4
|
||||
Date: 2011
|
||||
Genre: Metal
|
||||
Label: Relapse
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 05 - Conjuring the Cataclysm.mp3
|
||||
Time: 273.841000
|
||||
Artist: Revocation
|
||||
Title: Conjuring the Cataclysm
|
||||
Album: Chaos of Forms
|
||||
Track: 5
|
||||
Date: 2011
|
||||
Genre: Metal
|
||||
Label: Relapse
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 06 - No Funeral.mp3
|
||||
Time: 235.128000
|
||||
Artist: Revocation
|
||||
Title: No Funeral
|
||||
Album: Chaos of Forms
|
||||
Track: 6
|
||||
Date: 2011
|
||||
Genre: Metal
|
||||
Label: Relapse
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 07 - Fractal Entity.mp3
|
||||
Time: 103.288000
|
||||
Artist: Revocation
|
||||
Title: Fractal Entity
|
||||
Album: Chaos of Forms
|
||||
Track: 7
|
||||
Date: 2011
|
||||
Genre: Metal
|
||||
Label: Relapse
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237522
|
||||
song_end
|
||||
song_begin: 08 - Chaos of Forms.mp3
|
||||
Time: 270.053000
|
||||
Artist: Revocation
|
||||
Title: Chaos of Forms
|
||||
Album: Chaos of Forms
|
||||
Track: 8
|
||||
Date: 2011
|
||||
Genre: Metal
|
||||
Label: Relapse
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237523
|
||||
song_end
|
||||
song_begin: 09 - The Watchers.mp3
|
||||
Time: 252.133000
|
||||
Artist: Revocation
|
||||
Title: The Watchers
|
||||
Album: Chaos of Forms
|
||||
Track: 9
|
||||
Date: 2011
|
||||
Genre: Metal
|
||||
Label: Relapse
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237523
|
||||
song_end
|
||||
song_begin: 10 - Beloved Horrifier.mp3
|
||||
Time: 249.077000
|
||||
Artist: Revocation
|
||||
Title: Beloved Horrifier
|
||||
Album: Chaos of Forms
|
||||
Track: 10
|
||||
Date: 2011
|
||||
Genre: Metal
|
||||
Label: Relapse
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237523
|
||||
song_end
|
||||
song_begin: 11 - Dethroned.mp3
|
||||
Time: 297.769000
|
||||
Artist: Revocation
|
||||
Title: Dethroned
|
||||
Album: Chaos of Forms
|
||||
Track: 11
|
||||
Date: 2011
|
||||
Genre: Metal
|
||||
Label: Relapse
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237523
|
||||
song_end
|
||||
song_begin: 12 - Reprogrammed.mp3
|
||||
Time: 243.226000
|
||||
Artist: Revocation
|
||||
Title: Reprogrammed
|
||||
Album: Chaos of Forms
|
||||
Track: 12
|
||||
Date: 2011
|
||||
Genre: Metal
|
||||
Label: Relapse
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237523
|
||||
song_end
|
||||
end: Revocation
|
||||
directory: Revocation - Teratogenesis (EP) (2012)
|
||||
mtime: 1710237524
|
||||
begin: Revocation - Teratogenesis (EP) (2012)
|
||||
song_begin: 01. The Grip Tightens.mp3
|
||||
Time: 250.935000
|
||||
Artist: Revocation
|
||||
AlbumArtist: Revocation
|
||||
Title: The Grip Tightens
|
||||
Album: Teratogenesis
|
||||
Track: 1
|
||||
Date: 2012
|
||||
Genre: Technical Death | Thrash Meal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237524
|
||||
song_end
|
||||
song_begin: 02. Spurn The Outstretched Hand.mp3
|
||||
Time: 247.539000
|
||||
Artist: Revocation
|
||||
AlbumArtist: Revocation
|
||||
Title: Spurn The Outstreched Hand
|
||||
Album: Teratogenesis
|
||||
Track: 2
|
||||
Date: 2012
|
||||
Genre: Technical Death | Thrash Meal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237524
|
||||
song_end
|
||||
song_begin: 03. Maniacally Unleashed.mp3
|
||||
Time: 221.469000
|
||||
Artist: Revocation
|
||||
AlbumArtist: Revocation
|
||||
Title: Maniacally Unleashed
|
||||
Album: Teratogenesis
|
||||
Track: 3
|
||||
Date: 2012
|
||||
Genre: Technical Death | Thrash Meal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237524
|
||||
song_end
|
||||
song_begin: 04. Teratogenesis.mp3
|
||||
Time: 246.285000
|
||||
Artist: Revocation
|
||||
AlbumArtist: Revocation
|
||||
Title: Teratogenesis
|
||||
Album: Teratogenesis
|
||||
Track: 4
|
||||
Date: 2012
|
||||
Genre: Technical Death | Thrash Meal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237524
|
||||
song_end
|
||||
song_begin: 05. Bound By Desire.mp3
|
||||
Time: 334.631000
|
||||
Artist: Revocation
|
||||
AlbumArtist: Revocation
|
||||
Title: Bound By Desire
|
||||
Album: Teratogenesis
|
||||
Track: 5
|
||||
Date: 2012
|
||||
Genre: Technical Death | Thrash Meal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237524
|
||||
song_end
|
||||
end: Revocation - Teratogenesis (EP) (2012)
|
||||
directory: Revocation - Existence Is Futile (2009)
|
||||
mtime: 1710237524
|
||||
begin: Revocation - Existence Is Futile (2009)
|
||||
song_begin: 01. Enter The Hall.mp3
|
||||
Time: 147.513000
|
||||
Artist: Revocation
|
||||
Title: Enter The Hall
|
||||
Album: Existence Is Futile
|
||||
Track: 1
|
||||
Date: 2009
|
||||
Genre: Technical DeathThrash Metal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237523
|
||||
song_end
|
||||
song_begin: 02. Pestilence Reigns.mp3
|
||||
Time: 273.815000
|
||||
Artist: Revocation
|
||||
Title: Pestilence Reigns
|
||||
Album: Existence Is Futile
|
||||
Track: 2
|
||||
Date: 2009
|
||||
Genre: Technical DeathThrash Metal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237523
|
||||
song_end
|
||||
song_begin: 03. Deathonomics.mp3
|
||||
Time: 222.537000
|
||||
Artist: Revocation
|
||||
Title: Deathonomics
|
||||
Album: Existence Is Futile
|
||||
Track: 3
|
||||
Date: 2009
|
||||
Genre: Technical DeathThrash Metal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237523
|
||||
song_end
|
||||
song_begin: 04. Existence Is Futile.mp3
|
||||
Time: 290.847000
|
||||
Artist: Revocation
|
||||
Title: Existence Is Futile
|
||||
Album: Existence Is Futile
|
||||
Track: 4
|
||||
Date: 2009
|
||||
Genre: Technical DeathThrash Metal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237523
|
||||
song_end
|
||||
song_begin: 05. The Brain Scramblers.mp3
|
||||
Time: 191.712000
|
||||
Artist: Revocation
|
||||
Title: The Brain Scramblers
|
||||
Album: Existence Is Futile
|
||||
Track: 5
|
||||
Date: 2009
|
||||
Genre: Technical DeathThrash Metal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237523
|
||||
song_end
|
||||
song_begin: 06. Across Forests And Fjords.mp3
|
||||
Time: 256.182000
|
||||
Artist: Revocation
|
||||
Title: Across Forests And Fjords
|
||||
Album: Existence Is Futile
|
||||
Track: 6
|
||||
Date: 2009
|
||||
Genre: Technical DeathThrash Metal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237523
|
||||
song_end
|
||||
song_begin: 07. Re-Animaniac.mp3
|
||||
Time: 198.426000
|
||||
Artist: Revocation
|
||||
Title: Re-Animaniac
|
||||
Album: Existence Is Futile
|
||||
Track: 7
|
||||
Date: 2009
|
||||
Genre: Technical DeathThrash Metal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237523
|
||||
song_end
|
||||
song_begin: 08. Dismantle The Dictator.mp3
|
||||
Time: 237.766000
|
||||
Artist: Revocation
|
||||
Title: Dismantle The Dictator
|
||||
Album: Existence Is Futile
|
||||
Track: 8
|
||||
Date: 2009
|
||||
Genre: Technical DeathThrash Metal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237524
|
||||
song_end
|
||||
song_begin: 09. Anthem of the Betrayed.mp3
|
||||
Time: 316.577000
|
||||
Artist: Revocation
|
||||
Title: Anthem Of The Betrayed
|
||||
Album: Existence Is Futile
|
||||
Track: 9
|
||||
Date: 2009
|
||||
Genre: Technical DeathThrash Metal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237524
|
||||
song_end
|
||||
song_begin: 10. Leviathan Awaits.mp3
|
||||
Time: 288.000000
|
||||
Artist: Revocation
|
||||
Title: Leviathan Awaits
|
||||
Album: Existence Is Futile
|
||||
Track: 10
|
||||
Date: 2009
|
||||
Genre: Technical DeathThrash Metal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237524
|
||||
song_end
|
||||
song_begin: 11. The Tragedy Of Modern Ages.mp3
|
||||
Time: 424.228000
|
||||
Artist: Revocation
|
||||
Title: The Tragedy Of Modern Ages
|
||||
Album: Existence Is Futile
|
||||
Track: 11
|
||||
Date: 2009
|
||||
Genre: Technical DeathThrash Metal
|
||||
Format: 44100:24:2
|
||||
mtime: 1710237524
|
||||
song_end
|
||||
end: Revocation - Existence Is Futile (2009)
|
|
@ -0,0 +1,825 @@
|
|||
Feb 11 15:59 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 15:59 : update: added Annihilator - Alice In Hell/01 - Crystal Ann.mp3
|
||||
Feb 11 15:59 : update: added Annihilator - Alice In Hell/02 - Alison Hell..mp3
|
||||
Feb 11 15:59 : update: added Annihilator - Alice In Hell/03 - W.T.Y.D..mp3
|
||||
Feb 11 15:59 : update: added Annihilator - Alice In Hell/04 - Wicked Mystic.mp3
|
||||
Feb 11 15:59 : update: added Annihilator - Alice In Hell/05 - Burns Like A Buzzsaw Blade.mp3
|
||||
Feb 11 15:59 : update: added Annihilator - Alice In Hell/06 - Word Salad.mp3
|
||||
Feb 11 15:59 : update: added Annihilator - Alice In Hell/07 - Schizos (Are Never Alone) Parts I & II.mp3
|
||||
Feb 11 15:59 : update: added Annihilator - Alice In Hell/08 - Ligeia.mp3
|
||||
Feb 11 15:59 : update: added Annihilator - Alice In Hell/09 - Human Insecticide.mp3
|
||||
Feb 11 15:59 : update: added Annihilator - Alice In Hell/10 - Powerdrain (Demo).mp3
|
||||
Feb 11 15:59 : update: added Annihilator - Alice In Hell/11 - Schizos (Are Never Alone) Parts I & II (Demo).mp3
|
||||
Feb 11 15:59 : update: added Annihilator - Alice In Hell/12 - Ligeia (Demo).mp3
|
||||
Feb 11 15:59 : update: added Killemall/01 - Metallica - Hit The Lights.mp3
|
||||
Feb 11 15:59 : update: added Killemall/02 - Metallica - The Four Horsemen.mp3
|
||||
Feb 11 15:59 : update: added Killemall/03 - Metallica - Motorbreath.mp3
|
||||
Feb 11 15:59 : update: added Killemall/04 - Metallica - Jump In The Fire.mp3
|
||||
Feb 11 15:59 : update: added Killemall/05 - Metallica - (Anesthesia) - Pulling Teeth.mp3
|
||||
Feb 11 15:59 : update: added Killemall/06 - Metallica - Whiplash.mp3
|
||||
Feb 11 15:59 : update: added Killemall/07 - Metallica - Phantom Lord.mp3
|
||||
Feb 11 15:59 : update: added Killemall/08 - Metallica - No Remorse.mp3
|
||||
Feb 11 15:59 : update: added Killemall/09 - Metallica - Seek And Destroy.mp3
|
||||
Feb 11 15:59 : update: added Killemall/10 - Metallica - Metal Militia.mp3
|
||||
Feb 11 15:59 : update: added Revocation/01 - Cretin.mp3
|
||||
Feb 11 15:59 : update: added Revocation/02 - Cradle Robber.mp3
|
||||
Feb 11 15:59 : update: added Revocation/03 - Harlot.mp3
|
||||
Feb 11 15:59 : update: added Revocation/04 - Dissolution Ritual.mp3
|
||||
Feb 11 15:59 : update: added Revocation/05 - Conjuring the Cataclysm.mp3
|
||||
Feb 11 15:59 : update: added Revocation/06 - No Funeral.mp3
|
||||
Feb 11 15:59 : update: added Revocation/07 - Fractal Entity.mp3
|
||||
Feb 11 15:59 : update: added Revocation/08 - Chaos of Forms.mp3
|
||||
Feb 11 15:59 : update: added Revocation/09 - The Watchers.mp3
|
||||
Feb 11 15:59 : update: added Revocation/10 - Beloved Horrifier.mp3
|
||||
Feb 11 15:59 : update: added Revocation/11 - Dethroned.mp3
|
||||
Feb 11 15:59 : update: added Revocation/12 - Reprogrammed.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Teratogenesis (EP) (2012)/01. The Grip Tightens.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Teratogenesis (EP) (2012)/02. Spurn The Outstretched Hand.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Teratogenesis (EP) (2012)/05. Bound By Desire.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Existence Is Futile (2009)/01. Enter The Hall.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Existence Is Futile (2009)/02. Pestilence Reigns.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Existence Is Futile (2009)/03. Deathonomics.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Existence Is Futile (2009)/04. Existence Is Futile.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Existence Is Futile (2009)/05. The Brain Scramblers.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Existence Is Futile (2009)/06. Across Forests And Fjords.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Existence Is Futile (2009)/07. Re-Animaniac.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Existence Is Futile (2009)/08. Dismantle The Dictator.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Existence Is Futile (2009)/09. Anthem of the Betrayed.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Existence Is Futile (2009)/10. Leviathan Awaits.mp3
|
||||
Feb 11 15:59 : update: added Revocation - Existence Is Futile (2009)/11. The Tragedy Of Modern Ages.mp3
|
||||
Feb 11 16:00 : mixer: Failed to read mixer for 'Alsa Sound Server': no such mixer control: PCM
|
||||
Feb 11 16:00 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 16:00 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 16:00 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 16:00 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 16:00 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 16:00 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 16:00 : mixer: Failed to read mixer for 'Alsa Sound Server': no such mixer control: PCM
|
||||
Feb 11 16:08 : exception: Failed to open "Alsa Sound Server" (alsa); Failed to open ALSA device "default": Device or resource busy
|
||||
Feb 11 16:10 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 16:30 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 16:30 : player: played "Annihilator - Alice In Hell/01 - Crystal Ann.mp3"
|
||||
Feb 11 16:41 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 16:41 : exception: inotify_add_watch() has failed: No such file or directory
|
||||
Feb 11 16:41 : mixer: Failed to read mixer for 'Alsa Sound Server': no such mixer control: PCM
|
||||
Feb 11 16:41 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 16:43 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 16:43 : mixer: Failed to read mixer for 'Alsa Sound Server': no such mixer control: PCM
|
||||
Feb 11 16:43 : output: Failed to open mixer for 'Alsa Sound Server': no such mixer control: PCM
|
||||
Feb 11 16:43 : mixer: Failed to set mixer for 'Alsa Sound Server': no such mixer control: PCM
|
||||
Feb 11 16:43 : exception: Failed to set mixer for 'Alsa Sound Server'; no such mixer control: PCM
|
||||
Feb 11 16:45 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 16:47 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 16:47 : player: played "Annihilator - Alice In Hell/01 - Crystal Ann.mp3"
|
||||
Feb 11 16:56 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 16:56 : mixer: Failed to read mixer for 'Alsa Sound Server': no such mixer control: PCM
|
||||
Feb 11 16:57 : update: updating Annihilator - Alice In Hell/03 - W.T.Y.D..mp3
|
||||
Feb 11 16:57 : update: updating Annihilator - Alice In Hell/12 - Ligeia (Demo).mp3
|
||||
Feb 11 16:57 : update: updating Annihilator - Alice In Hell/05 - Burns Like A Buzzsaw Blade.mp3
|
||||
Feb 11 16:57 : update: updating Annihilator - Alice In Hell/02 - Alison Hell..mp3
|
||||
Feb 11 16:57 : update: updating Annihilator - Alice In Hell/01 - Crystal Ann.mp3
|
||||
Feb 11 16:57 : update: updating Annihilator - Alice In Hell/06 - Word Salad.mp3
|
||||
Feb 11 16:57 : update: updating Annihilator - Alice In Hell/09 - Human Insecticide.mp3
|
||||
Feb 11 16:57 : update: updating Annihilator - Alice In Hell/11 - Schizos (Are Never Alone) Parts I & II (Demo).mp3
|
||||
Feb 11 16:57 : update: updating Annihilator - Alice In Hell/04 - Wicked Mystic.mp3
|
||||
Feb 11 16:57 : update: updating Annihilator - Alice In Hell/10 - Powerdrain (Demo).mp3
|
||||
Feb 11 16:57 : update: updating Annihilator - Alice In Hell/08 - Ligeia.mp3
|
||||
Feb 11 16:57 : update: updating Annihilator - Alice In Hell/07 - Schizos (Are Never Alone) Parts I & II.mp3
|
||||
Feb 11 16:57 : update: updating Revocation/01 - Cretin.mp3
|
||||
Feb 11 16:57 : update: updating Revocation/08 - Chaos of Forms.mp3
|
||||
Feb 11 16:57 : update: updating Revocation/09 - The Watchers.mp3
|
||||
Feb 11 16:57 : update: updating Revocation/05 - Conjuring the Cataclysm.mp3
|
||||
Feb 11 16:57 : update: updating Revocation/12 - Reprogrammed.mp3
|
||||
Feb 11 16:57 : update: updating Revocation/04 - Dissolution Ritual.mp3
|
||||
Feb 11 16:57 : update: updating Revocation/03 - Harlot.mp3
|
||||
Feb 11 16:57 : update: updating Revocation/11 - Dethroned.mp3
|
||||
Feb 11 16:57 : update: updating Revocation/07 - Fractal Entity.mp3
|
||||
Feb 11 16:57 : update: updating Revocation/10 - Beloved Horrifier.mp3
|
||||
Feb 11 16:57 : update: updating Revocation/06 - No Funeral.mp3
|
||||
Feb 11 16:57 : update: updating Revocation/02 - Cradle Robber.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Existence Is Futile (2009)/08. Dismantle The Dictator.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Existence Is Futile (2009)/06. Across Forests And Fjords.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Existence Is Futile (2009)/05. The Brain Scramblers.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Existence Is Futile (2009)/10. Leviathan Awaits.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Existence Is Futile (2009)/03. Deathonomics.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Existence Is Futile (2009)/04. Existence Is Futile.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Existence Is Futile (2009)/07. Re-Animaniac.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Existence Is Futile (2009)/02. Pestilence Reigns.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Existence Is Futile (2009)/01. Enter The Hall.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Existence Is Futile (2009)/11. The Tragedy Of Modern Ages.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Existence Is Futile (2009)/09. Anthem of the Betrayed.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Teratogenesis (EP) (2012)/01. The Grip Tightens.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Teratogenesis (EP) (2012)/05. Bound By Desire.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3
|
||||
Feb 11 16:57 : update: updating Revocation - Teratogenesis (EP) (2012)/02. Spurn The Outstretched Hand.mp3
|
||||
Feb 11 16:57 : update: updating Killemall/09 - Metallica - Seek And Destroy.mp3
|
||||
Feb 11 16:57 : update: updating Killemall/04 - Metallica - Jump In The Fire.mp3
|
||||
Feb 11 16:57 : update: updating Killemall/03 - Metallica - Motorbreath.mp3
|
||||
Feb 11 16:57 : update: updating Killemall/07 - Metallica - Phantom Lord.mp3
|
||||
Feb 11 16:57 : update: updating Killemall/10 - Metallica - Metal Militia.mp3
|
||||
Feb 11 16:57 : update: updating Killemall/05 - Metallica - (Anesthesia) - Pulling Teeth.mp3
|
||||
Feb 11 16:57 : update: updating Killemall/08 - Metallica - No Remorse.mp3
|
||||
Feb 11 16:57 : update: updating Killemall/01 - Metallica - Hit The Lights.mp3
|
||||
Feb 11 16:57 : update: updating Killemall/06 - Metallica - Whiplash.mp3
|
||||
Feb 11 16:57 : update: updating Killemall/02 - Metallica - The Four Horsemen.mp3
|
||||
Feb 11 16:57 : output: Failed to open mixer for 'Alsa Sound Server': no such mixer control: PCM
|
||||
Feb 11 16:57 : player: played "Revocation - Teratogenesis (EP) (2012)/01. The Grip Tightens.mp3"
|
||||
Feb 11 16:59 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 17:03 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 17:06 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 17:06 : mixer: Failed to read mixer for 'Alsa Sound Server': no such mixer control: PCM
|
||||
Feb 11 17:06 : output: Failed to open mixer for 'Alsa Sound Server': no such mixer control: PCM
|
||||
Feb 11 17:06 : player: played "Annihilator - Alice In Hell/01 - Crystal Ann.mp3"
|
||||
Feb 11 17:07 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 17:07 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 17:09 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 17:11 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 17:11 : player: played "Annihilator - Alice In Hell/02 - Alison Hell..mp3"
|
||||
Feb 11 17:11 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 17:14 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 17:16 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 17:16 : player: played "Revocation/06 - No Funeral.mp3"
|
||||
Feb 11 17:16 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 17:24 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 18:19 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 18:19 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 18:19 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 18:19 : player: played "Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3"
|
||||
Feb 11 18:19 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 18:20 : exception: Failed to enable output "pulse audio" (pulse); pa_context_connect() has failed: Connection refused
|
||||
Feb 11 18:20 : exception: Failed to enable output "pulse audio" (pulse); pa_context_connect() has failed: Connection refused
|
||||
Feb 11 18:20 : exception: Failed to open audio output
|
||||
Feb 11 18:20 : exception: Failed to enable output "pulse audio" (pulse); pa_context_connect() has failed: Connection refused
|
||||
Feb 11 18:20 : exception: Failed to enable output "pulse audio" (pulse); pa_context_connect() has failed: Connection refused
|
||||
Feb 11 18:21 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 18:21 : player: played "Killemall/02 - Metallica - The Four Horsemen.mp3"
|
||||
Feb 11 18:21 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 18:22 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 18:22 : player: played "Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3"
|
||||
Feb 11 18:22 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 18:22 : player: played "Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3"
|
||||
Feb 11 18:23 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 18:23 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 18:25 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 18:26 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 11 18:48 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 11 18:49 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 15:52 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 15:54 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 15:57 : output: Failed to pause "pulse audio" (pulse): failed to connect the stream: Connection terminated
|
||||
Feb 12 15:57 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 15:59 : player: played "Revocation/07 - Fractal Entity.mp3"
|
||||
Feb 12 15:59 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 15:59 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 15:59 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 16:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 16:03 : player: played "Revocation/06 - No Funeral.mp3"
|
||||
Feb 12 16:04 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 16:05 : exception: Failed to open "pipewire audio" (pipewire); Failed to connect stream: Host is down
|
||||
Feb 12 16:05 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 16:05 : player: played "Annihilator - Alice In Hell/01 - Crystal Ann.mp3"
|
||||
Feb 12 16:05 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 16:07 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 16:11 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 16:12 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 17:46 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 17:46 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 17:48 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 17:49 : player: played "Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3"
|
||||
Feb 12 17:50 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 18:17 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 18:17 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 18:20 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 18:22 : player: played "Annihilator - Alice In Hell/03 - W.T.Y.D..mp3"
|
||||
Feb 12 18:24 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 18:24 : player: played "Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3"
|
||||
Feb 12 18:24 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 18:44 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 18:44 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 18:44 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 18:45 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 18:45 : player: played "Revocation/06 - No Funeral.mp3"
|
||||
Feb 12 18:46 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 18:46 : pipewire_output: Decoder is too slow; playing silence to avoid xrun
|
||||
Feb 12 18:48 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 18:49 : output: Failed to play on "pipewire audio" (pipewire): connection error
|
||||
Feb 12 18:49 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 18:49 : player: played "Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3"
|
||||
Feb 12 18:49 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 18:49 : exception: Failed to open "pipewire audio" (pipewire); Failed to connect stream: Host is down
|
||||
Feb 12 18:50 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 18:50 : player: played "Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3"
|
||||
Feb 12 18:50 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 18:51 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 18:51 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 19:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 19:03 : player: played "Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3"
|
||||
Feb 12 19:05 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 19:07 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 19:09 : player: played "Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3"
|
||||
Feb 12 19:11 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 19:16 : pipewire_output: Decoder is too slow; playing silence to avoid xrun
|
||||
Feb 12 19:16 : player: played "Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3"
|
||||
Feb 12 19:16 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 19:25 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 19:27 : player: played "Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3"
|
||||
Feb 12 19:29 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 19:31 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 19:32 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 19:33 : player: played "Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3"
|
||||
Feb 12 19:38 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 19:41 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 19:42 : player: played "Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3"
|
||||
Feb 12 19:44 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 20:30 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 20:30 : player: played "Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3"
|
||||
Feb 12 20:31 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 20:46 : player: played "Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3"
|
||||
Feb 12 20:47 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 20:57 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 20:57 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 20:58 : player: played "Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3"
|
||||
Feb 12 20:58 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 20:58 : player: played "Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3"
|
||||
Feb 12 20:58 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 21:02 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 21:02 : player: played "Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3"
|
||||
Feb 12 21:02 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 21:11 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 21:13 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 21:28 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 21:28 : player: played "Revocation - Teratogenesis (EP) (2012)/02. Spurn The Outstretched Hand.mp3"
|
||||
Feb 12 21:28 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 21:28 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 22:00 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 22:00 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 22:05 : player: played "Annihilator - Alice In Hell/03 - W.T.Y.D..mp3"
|
||||
Feb 12 22:06 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 22:06 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 22:13 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 22:13 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 22:15 : player: played "Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3"
|
||||
Feb 12 22:15 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:16 : exception: Not playing
|
||||
Feb 12 22:21 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 22:43 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 22:43 : player: played "Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3"
|
||||
Feb 12 22:43 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 22:44 : player: played "Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3"
|
||||
Feb 12 22:48 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 22:55 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 22:55 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 12 22:58 : player: played "Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3"
|
||||
Feb 12 22:59 : player: played "Revocation - Teratogenesis (EP) (2012)/01. The Grip Tightens.mp3"
|
||||
Feb 12 23:00 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 12 23:00 : player: played "Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3"
|
||||
Feb 12 23:00 : output: Failed to play on "PipeWire Sound Server" (pipewire): connection error
|
||||
Feb 12 23:00 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 13 04:47 : player: played "Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3"
|
||||
Feb 13 04:49 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 04:54 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 04:54 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 13 04:58 : player: played "Annihilator - Alice In Hell/01 - Crystal Ann.mp3"
|
||||
Feb 13 04:58 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 15:54 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 15:54 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 13 15:57 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 15:59 : player: played "Annihilator - Alice In Hell/03 - W.T.Y.D..mp3"
|
||||
Feb 13 16:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 16:50 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 16:50 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 13 16:51 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 16:52 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 13 20:39 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 20:39 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 13 20:40 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 20:40 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 13 21:18 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 21:19 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 21:19 : output: Failed to play on "PipeWire Sound Server" (pipewire): connection error
|
||||
Feb 13 21:19 : player: played "Annihilator - Alice In Hell/04 - Wicked Mystic.mp3"
|
||||
Feb 13 21:19 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 13 21:20 : player: played "Killemall/03 - Metallica - Motorbreath.mp3"
|
||||
Feb 13 21:22 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 21:23 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 21:24 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 13 21:25 : exception: Failed to open "PipeWire Sound Server" (pipewire); Failed to connect stream: Host is down
|
||||
Feb 13 21:25 : player: played "Killemall/08 - Metallica - No Remorse.mp3"
|
||||
Feb 13 21:26 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 13 21:27 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 22:09 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 22:09 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 22:21 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Feb 13 22:21 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Feb 13 22:22 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 12 03:11 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 12 03:11 : exception: inotify_add_watch() has failed: No such file or directory
|
||||
Mar 12 03:11 : exception: Failed to access /home/javier/music: No such file or directory
|
||||
Mar 12 03:11 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 12 03:11 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 12 03:12 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 12 03:12 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 12 03:12 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 12 04:57 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 12 04:57 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 04:58 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 12 04:58 : update: added Annihilator - Alice In Hell/08 - Ligeia.mp3
|
||||
Mar 12 04:58 : update: added Annihilator - Alice In Hell/05 - Burns Like A Buzzsaw Blade.mp3
|
||||
Mar 12 04:58 : update: added Annihilator - Alice In Hell/01 - Crystal Ann.mp3
|
||||
Mar 12 04:58 : update: added Annihilator - Alice In Hell/06 - Word Salad.mp3
|
||||
Mar 12 04:58 : update: added Annihilator - Alice In Hell/09 - Human Insecticide.mp3
|
||||
Mar 12 04:58 : update: added Annihilator - Alice In Hell/02 - Alison Hell..mp3
|
||||
Mar 12 04:58 : update: added Annihilator - Alice In Hell/07 - Schizos (Are Never Alone) Parts I & II.mp3
|
||||
Mar 12 04:58 : update: added Annihilator - Alice In Hell/12 - Ligeia (Demo).mp3
|
||||
Mar 12 04:58 : update: added Annihilator - Alice In Hell/10 - Powerdrain (Demo).mp3
|
||||
Mar 12 04:58 : update: added Annihilator - Alice In Hell/04 - Wicked Mystic.mp3
|
||||
Mar 12 04:58 : update: added Annihilator - Alice In Hell/03 - W.T.Y.D..mp3
|
||||
Mar 12 04:58 : update: added Annihilator - Alice In Hell/11 - Schizos (Are Never Alone) Parts I & II (Demo).mp3
|
||||
Mar 12 04:58 : update: added Killemall/09 - Metallica - Seek And Destroy.mp3
|
||||
Mar 12 04:58 : update: added Killemall/03 - Metallica - Motorbreath.mp3
|
||||
Mar 12 04:58 : update: added Killemall/04 - Metallica - Jump In The Fire.mp3
|
||||
Mar 12 04:58 : update: added Killemall/05 - Metallica - (Anesthesia) - Pulling Teeth.mp3
|
||||
Mar 12 04:58 : update: added Killemall/02 - Metallica - The Four Horsemen.mp3
|
||||
Mar 12 04:58 : update: added Killemall/06 - Metallica - Whiplash.mp3
|
||||
Mar 12 04:58 : update: added Killemall/01 - Metallica - Hit The Lights.mp3
|
||||
Mar 12 04:58 : update: added Killemall/08 - Metallica - No Remorse.mp3
|
||||
Mar 12 04:58 : update: added Killemall/07 - Metallica - Phantom Lord.mp3
|
||||
Mar 12 04:58 : update: added Killemall/10 - Metallica - Metal Militia.mp3
|
||||
Mar 12 04:58 : update: added Revocation/11 - Dethroned.mp3
|
||||
Mar 12 04:58 : update: added Revocation/04 - Dissolution Ritual.mp3
|
||||
Mar 12 04:58 : update: added Revocation/05 - Conjuring the Cataclysm.mp3
|
||||
Mar 12 04:58 : update: added Revocation/10 - Beloved Horrifier.mp3
|
||||
Mar 12 04:58 : update: added Revocation/07 - Fractal Entity.mp3
|
||||
Mar 12 04:58 : update: added Revocation/03 - Harlot.mp3
|
||||
Mar 12 04:58 : update: added Revocation/08 - Chaos of Forms.mp3
|
||||
Mar 12 04:58 : update: added Revocation/09 - The Watchers.mp3
|
||||
Mar 12 04:58 : update: added Revocation/06 - No Funeral.mp3
|
||||
Mar 12 04:58 : update: added Revocation/12 - Reprogrammed.mp3
|
||||
Mar 12 04:58 : update: added Revocation/02 - Cradle Robber.mp3
|
||||
Mar 12 04:58 : update: added Revocation/01 - Cretin.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Existence Is Futile (2009)/05. The Brain Scramblers.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Existence Is Futile (2009)/11. The Tragedy Of Modern Ages.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Existence Is Futile (2009)/09. Anthem of the Betrayed.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Existence Is Futile (2009)/02. Pestilence Reigns.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Existence Is Futile (2009)/06. Across Forests And Fjords.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Existence Is Futile (2009)/03. Deathonomics.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Existence Is Futile (2009)/04. Existence Is Futile.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Existence Is Futile (2009)/10. Leviathan Awaits.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Existence Is Futile (2009)/01. Enter The Hall.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Existence Is Futile (2009)/07. Re-Animaniac.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Existence Is Futile (2009)/08. Dismantle The Dictator.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Teratogenesis (EP) (2012)/02. Spurn The Outstretched Hand.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Teratogenesis (EP) (2012)/01. The Grip Tightens.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Teratogenesis (EP) (2012)/03. Maniacally Unleashed.mp3
|
||||
Mar 12 04:58 : update: added Revocation - Teratogenesis (EP) (2012)/05. Bound By Desire.mp3
|
||||
Mar 12 04:59 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 04:59 : player: played "Annihilator - Alice In Hell/01 - Crystal Ann.mp3"
|
||||
Mar 12 05:00 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 12 05:03 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 16:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 16:06 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 16:19 : player: played "Revocation - Teratogenesis (EP) (2012)/01. The Grip Tightens.mp3"
|
||||
Mar 12 16:19 : exception: Not playing
|
||||
Mar 12 16:19 : exception: Not playing
|
||||
Mar 12 16:19 : exception: Not playing
|
||||
Mar 12 16:19 : exception: Not playing
|
||||
Mar 12 16:19 : player: played "Revocation - Teratogenesis (EP) (2012)/01. The Grip Tightens.mp3"
|
||||
Mar 12 16:20 : player: played "Revocation - Teratogenesis (EP) (2012)/01. The Grip Tightens.mp3"
|
||||
Mar 12 16:20 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 19:56 : player: played "Revocation - Teratogenesis (EP) (2012)/01. The Grip Tightens.mp3"
|
||||
Mar 12 19:56 : exception: Not playing
|
||||
Mar 12 19:56 : exception: Not playing
|
||||
Mar 12 19:58 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 20:00 : exception: Not playing
|
||||
Mar 12 20:00 : exception: Not playing
|
||||
Mar 12 20:00 : exception: Not playing
|
||||
Mar 12 20:00 : exception: Not playing
|
||||
Mar 12 20:01 : exception: Not playing
|
||||
Mar 12 20:01 : exception: Not playing
|
||||
Mar 12 20:03 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 20:16 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 20:19 : player: played "Revocation - Existence Is Futile (2009)/08. Dismantle The Dictator.mp3"
|
||||
Mar 12 20:19 : exception: Not playing
|
||||
Mar 12 20:19 : player: played "Revocation - Teratogenesis (EP) (2012)/01. The Grip Tightens.mp3"
|
||||
Mar 12 20:20 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 20:24 : player: played "Killemall/06 - Metallica - Whiplash.mp3"
|
||||
Mar 12 20:26 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 20:30 : player: played "Killemall/07 - Metallica - Phantom Lord.mp3"
|
||||
Mar 12 20:32 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 20:35 : player: played "Killemall/10 - Metallica - Metal Militia.mp3"
|
||||
Mar 12 20:37 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 20:41 : player: played "Killemall/08 - Metallica - No Remorse.mp3"
|
||||
Mar 12 20:43 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 20:48 : player: played "Killemall/09 - Metallica - Seek And Destroy.mp3"
|
||||
Mar 12 20:50 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 21:02 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 21:04 : player: played "Killemall/01 - Metallica - Hit The Lights.mp3"
|
||||
Mar 12 21:04 : player: played "Killemall/01 - Metallica - Hit The Lights.mp3"
|
||||
Mar 12 21:06 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 21:08 : player: played "Killemall/01 - Metallica - Hit The Lights.mp3"
|
||||
Mar 12 21:10 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 21:15 : player: played "Killemall/02 - Metallica - The Four Horsemen.mp3"
|
||||
Mar 12 21:17 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 21:18 : player: played "Killemall/03 - Metallica - Motorbreath.mp3"
|
||||
Mar 12 21:20 : player: played "Killemall/04 - Metallica - Jump In The Fire.mp3"
|
||||
Mar 12 21:20 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 21:26 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 21:30 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 21:32 : player: played "Killemall/04 - Metallica - Jump In The Fire.mp3"
|
||||
Mar 12 21:32 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 21:50 : player: played "Killemall/04 - Metallica - Jump In The Fire.mp3"
|
||||
Mar 12 21:52 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 22:00 : pipewire_output: Decoder is too slow; playing silence to avoid xrun
|
||||
Mar 12 22:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 22:04 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 22:05 : player: played "Killemall/04 - Metallica - Jump In The Fire.mp3"
|
||||
Mar 12 22:07 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 22:13 : player: played "Killemall/04 - Metallica - Jump In The Fire.mp3"
|
||||
Mar 12 22:15 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 22:19 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 22:54 : player: played "Killemall/04 - Metallica - Jump In The Fire.mp3"
|
||||
Mar 12 22:54 : player: played "Killemall/04 - Metallica - Jump In The Fire.mp3"
|
||||
Mar 12 22:55 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 22:56 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 12 22:59 : player: played "Annihilator - Alice In Hell/02 - Alison Hell..mp3"
|
||||
Mar 12 23:00 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 12 23:00 : exception: Bad song index
|
||||
Mar 12 23:00 : player: played "Annihilator - Alice In Hell/02 - Alison Hell..mp3"
|
||||
Mar 13 05:06 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 16:00 : pipewire_output: Decoder is too slow; playing silence to avoid xrun
|
||||
Mar 13 16:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 18:33 : pipewire_output: Decoder is too slow; playing silence to avoid xrun
|
||||
Mar 13 18:35 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 18:35 : player: played "Annihilator - Alice In Hell/03 - W.T.Y.D..mp3"
|
||||
Mar 13 18:37 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 18:38 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 18:38 : player: played "Annihilator - Alice In Hell/04 - Wicked Mystic.mp3"
|
||||
Mar 13 18:38 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 13 19:23 : exception: Bad song index
|
||||
Mar 13 19:24 : exception: Bad song index
|
||||
Mar 13 19:26 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 19:34 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 19:35 : player: played "Revocation - Existence Is Futile (2009)/08. Dismantle The Dictator.mp3"
|
||||
Mar 13 19:36 : exception: Not playing
|
||||
Mar 13 19:36 : exception: Not playing
|
||||
Mar 13 19:36 : exception: Bad song index
|
||||
Mar 13 19:37 : exception: Bad song index
|
||||
Mar 13 19:37 : exception: Bad song index
|
||||
Mar 13 19:37 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 19:38 : exception: Bad song index
|
||||
Mar 13 19:38 : exception: Bad song index
|
||||
Mar 13 19:38 : exception: Bad song index
|
||||
Mar 13 19:39 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 19:40 : player: played "Revocation - Existence Is Futile (2009)/08. Dismantle The Dictator.mp3"
|
||||
Mar 13 19:42 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 19:44 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 19:46 : player: played "Annihilator - Alice In Hell/03 - W.T.Y.D..mp3"
|
||||
Mar 13 19:48 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 19:50 : player: played "Annihilator - Alice In Hell/04 - Wicked Mystic.mp3"
|
||||
Mar 13 19:52 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 19:54 : player: played "Annihilator - Alice In Hell/09 - Human Insecticide.mp3"
|
||||
Mar 13 19:56 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 19:59 : player: played "Killemall/01 - Metallica - Hit The Lights.mp3"
|
||||
Mar 13 20:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 20:04 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 21:51 : player: played "Killemall/02 - Metallica - The Four Horsemen.mp3"
|
||||
Mar 13 21:53 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 21:54 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 13 21:54 : output: Failed to play on "PipeWire Sound Server" (pipewire): connection error
|
||||
Mar 13 21:54 : player: played "Killemall/02 - Metallica - The Four Horsemen.mp3"
|
||||
Mar 13 21:55 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 14 18:33 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 15 20:33 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 15 20:38 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 15 21:32 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 15 22:08 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 15 22:08 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 15 22:08 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 15 22:09 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 15 22:09 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 15 22:10 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 15 22:11 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 16 21:50 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 03:21 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 17 05:41 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 05:42 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 17 16:55 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 17 17:03 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 17 17:53 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 17:53 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 17:53 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 17 19:10 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 17 19:10 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 17 19:15 : player: played "Annihilator - Alice In Hell/01 - Crystal Ann.mp3"
|
||||
Mar 17 19:15 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 19:19 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 19:20 : player: played "Annihilator - Alice In Hell/02 - Alison Hell..mp3"
|
||||
Mar 17 19:22 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 19:24 : player: played "Annihilator - Alice In Hell/03 - W.T.Y.D..mp3"
|
||||
Mar 17 19:26 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 19:28 : player: played "Annihilator - Alice In Hell/04 - Wicked Mystic.mp3"
|
||||
Mar 17 19:30 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 19:32 : player: played "Annihilator - Alice In Hell/09 - Human Insecticide.mp3"
|
||||
Mar 17 19:34 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 19:37 : player: played "Killemall/01 - Metallica - Hit The Lights.mp3"
|
||||
Mar 17 19:39 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 19:44 : player: played "Killemall/02 - Metallica - The Four Horsemen.mp3"
|
||||
Mar 17 19:46 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 19:49 : player: played "Killemall/04 - Metallica - Jump In The Fire.mp3"
|
||||
Mar 17 19:51 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 19:55 : player: played "Killemall/08 - Metallica - No Remorse.mp3"
|
||||
Mar 17 19:57 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 19:59 : player: played "Revocation/02 - Cradle Robber.mp3"
|
||||
Mar 17 20:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 20:03 : player: played "Revocation/06 - No Funeral.mp3"
|
||||
Mar 17 20:05 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 20:07 : player: played "Revocation - Teratogenesis (EP) (2012)/01. The Grip Tightens.mp3"
|
||||
Mar 17 20:09 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 20:12 : player: played "Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3"
|
||||
Mar 17 20:14 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 20:17 : player: played "Revocation - Teratogenesis (EP) (2012)/05. Bound By Desire.mp3"
|
||||
Mar 17 20:19 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 20:21 : player: played "Revocation - Existence Is Futile (2009)/08. Dismantle The Dictator.mp3"
|
||||
Mar 17 20:23 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 20:26 : player: played "Revocation - Existence Is Futile (2009)/10. Leviathan Awaits.mp3"
|
||||
Mar 17 20:28 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 21:46 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 21:46 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 21:46 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 17 21:47 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 18 00:20 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 18 21:57 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 18 21:57 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 18 21:58 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 18 22:22 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 18 22:46 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 18 22:49 : player: played "Killemall/04 - Metallica - Jump In The Fire.mp3"
|
||||
Mar 18 22:49 : player: played "Killemall/04 - Metallica - Jump In The Fire.mp3"
|
||||
Mar 18 22:51 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 19 05:10 : player: played "Annihilator - Alice In Hell/01 - Crystal Ann.mp3"
|
||||
Mar 19 05:10 : player: played "Annihilator - Alice In Hell/02 - Alison Hell..mp3"
|
||||
Mar 19 05:10 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 19 05:11 : update: updating Annihilator - Alice In Hell/02 - Alison Hell..mp3
|
||||
Mar 19 05:11 : update: updating Annihilator - Alice In Hell/02 - Alison Hell..mp3
|
||||
Mar 19 05:11 : pipewire_output: Decoder is too slow; playing silence to avoid xrun
|
||||
Mar 19 05:12 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 19 05:15 : player: played "Annihilator - Alice In Hell/02 - Alison Hell..mp3"
|
||||
Mar 19 05:16 : player: played "Revocation/06 - No Funeral.mp3"
|
||||
Mar 19 18:49 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 19 19:38 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 19 19:38 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 19 19:38 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 19 19:41 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 19 19:42 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 19 20:22 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 19 20:22 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 19 21:19 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 19 21:20 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 20 15:51 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 20 15:51 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 21 11:04 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 21 11:21 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 21 12:00 : player: played "Annihilator - Alice In Hell/01 - Crystal Ann.mp3"
|
||||
Mar 21 12:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 21 12:05 : player: played "Annihilator - Alice In Hell/02 - Alison Hell..mp3"
|
||||
Mar 21 12:07 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 21 12:09 : player: played "Annihilator - Alice In Hell/03 - W.T.Y.D..mp3"
|
||||
Mar 21 12:11 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 21 12:13 : player: played "Annihilator - Alice In Hell/04 - Wicked Mystic.mp3"
|
||||
Mar 21 12:15 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 21 12:18 : player: played "Annihilator - Alice In Hell/09 - Human Insecticide.mp3"
|
||||
Mar 21 12:20 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 21 12:22 : player: played "Killemall/01 - Metallica - Hit The Lights.mp3"
|
||||
Mar 21 12:24 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 21 12:29 : player: played "Killemall/02 - Metallica - The Four Horsemen.mp3"
|
||||
Mar 21 12:31 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 21 12:34 : player: played "Killemall/04 - Metallica - Jump In The Fire.mp3"
|
||||
Mar 21 12:36 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 21 12:40 : player: played "Killemall/08 - Metallica - No Remorse.mp3"
|
||||
Mar 21 12:40 : player: played "Revocation/02 - Cradle Robber.mp3"
|
||||
Mar 21 12:42 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 21 12:54 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 21 12:54 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 21 12:54 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 21 12:54 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 21 12:54 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 21 12:54 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 21 21:15 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 21 21:15 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 22 05:06 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 22 21:51 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 22 21:51 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 22 22:40 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 22 22:41 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 23 13:40 : exception: Not playing
|
||||
Mar 23 14:20 : player: played "Annihilator - Alice In Hell/01 - Crystal Ann.mp3"
|
||||
Mar 23 14:20 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 23 14:25 : player: played "Annihilator - Alice In Hell/02 - Alison Hell..mp3"
|
||||
Mar 23 14:27 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 23 14:44 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 23 14:45 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 23 14:46 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 23 14:47 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 24 18:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 24 18:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 24 18:02 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 24 21:45 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 24 21:45 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 24 22:18 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 25 15:05 : exception: Not playing
|
||||
Mar 25 16:05 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 25 16:05 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 25 16:05 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 25 17:15 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 25 21:02 : exception: Not playing
|
||||
Mar 25 21:02 : exception: Not playing
|
||||
Mar 25 21:02 : exception: Not playing
|
||||
Mar 25 21:03 : exception: Not playing
|
||||
Mar 25 21:03 : exception: Not playing
|
||||
Mar 26 20:15 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 26 20:28 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 26 20:28 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 26 20:28 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 27 17:52 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 27 18:08 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 27 20:29 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 28 05:13 : pipewire_output: Decoder is too slow; playing silence to avoid xrun
|
||||
Mar 28 05:13 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 28 05:14 : player: played "Annihilator - Alice In Hell/01 - Crystal Ann.mp3"
|
||||
Mar 28 05:16 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 28 18:58 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 28 19:07 : pipewire_output: Decoder is too slow; playing silence to avoid xrun
|
||||
Mar 28 19:09 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 28 19:19 : pipewire_output: Decoder is too slow; playing silence to avoid xrun
|
||||
Mar 28 19:20 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 28 19:22 : pipewire_output: Decoder is too slow; playing silence to avoid xrun
|
||||
Mar 28 19:23 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 28 19:28 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 28 20:02 : pipewire_output: Decoder is too slow; playing silence to avoid xrun
|
||||
Mar 28 20:02 : player: played "Annihilator - Alice In Hell/01 - Crystal Ann.mp3"
|
||||
Mar 28 20:02 : player: played "Annihilator - Alice In Hell/02 - Alison Hell..mp3"
|
||||
Mar 28 20:04 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 28 20:09 : pipewire_output: Decoder is too slow; playing silence to avoid xrun
|
||||
Mar 28 20:11 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 28 20:49 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 28 21:00 : player: played "Annihilator - Alice In Hell/02 - Alison Hell..mp3"
|
||||
Mar 28 21:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 09:11 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 09:11 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 29 12:20 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 29 12:41 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 12:46 : player: played "Killemall/08 - Metallica - No Remorse.mp3"
|
||||
Mar 29 12:48 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 12:51 : player: played "Revocation - Teratogenesis (EP) (2012)/01. The Grip Tightens.mp3"
|
||||
Mar 29 12:52 : pipewire_output: Decoder is too slow; playing silence to avoid xrun
|
||||
Mar 29 12:53 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 12:55 : player: played "Annihilator - Alice In Hell/03 - W.T.Y.D..mp3"
|
||||
Mar 29 12:57 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 12:59 : player: played "Annihilator - Alice In Hell/04 - Wicked Mystic.mp3"
|
||||
Mar 29 13:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 13:04 : player: played "Annihilator - Alice In Hell/09 - Human Insecticide.mp3"
|
||||
Mar 29 13:06 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 13:09 : player: played "Killemall/01 - Metallica - Hit The Lights.mp3"
|
||||
Mar 29 13:10 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 13:16 : player: played "Killemall/02 - Metallica - The Four Horsemen.mp3"
|
||||
Mar 29 13:18 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 13:21 : player: played "Killemall/04 - Metallica - Jump In The Fire.mp3"
|
||||
Mar 29 13:23 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 13:26 : player: played "Killemall/08 - Metallica - No Remorse.mp3"
|
||||
Mar 29 13:28 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 15:59 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 16:59 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 20:03 : player: played "Killemall/08 - Metallica - No Remorse.mp3"
|
||||
Mar 29 20:05 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 20:31 : player: played "Killemall/08 - Metallica - No Remorse.mp3"
|
||||
Mar 29 20:33 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 20:59 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 20:59 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 29 20:59 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 29 21:51 : exception: Not playing
|
||||
Mar 29 21:51 : exception: Not playing
|
||||
Mar 29 22:01 : exception: Not playing
|
||||
Mar 29 22:01 : exception: Not playing
|
||||
Mar 29 22:01 : exception: Not playing
|
||||
Mar 29 22:01 : exception: Not playing
|
||||
Mar 30 00:11 : exception: Not playing
|
||||
Mar 30 00:11 : exception: Not playing
|
||||
Mar 30 00:18 : exception: Not playing
|
||||
Mar 30 00:18 : exception: Not playing
|
||||
Mar 30 00:18 : exception: Not playing
|
||||
Mar 30 12:55 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 30 12:56 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 30 13:06 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 30 13:07 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 30 13:07 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 30 13:08 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 30 13:30 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 30 18:20 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 30 18:54 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 30 18:54 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 30 18:54 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 30 18:55 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 30 22:16 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 30 22:19 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 30 23:00 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 30 23:35 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 30 23:35 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 30 23:35 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 30 23:35 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 30 23:36 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 30 23:45 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 30 23:52 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 30 23:54 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 00:00 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 12:03 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 15:46 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 16:01 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 16:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 16:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 16:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 16:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 16:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 16:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 16:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 16:01 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 16:01 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 16:02 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 16:02 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 16:33 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 16:34 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 17:49 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 18:05 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 18:12 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 18:12 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 18:12 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 18:12 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 18:12 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 18:13 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 18:23 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 18:23 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 18:46 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 19:00 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 19:12 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 19:12 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 19:12 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 19:14 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Mar 31 19:21 : player: played "Annihilator - Alice In Hell/01 - Crystal Ann.mp3"
|
||||
Mar 31 19:22 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 19:27 : player: played "Annihilator - Alice In Hell/02 - Alison Hell..mp3"
|
||||
Mar 31 19:29 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 19:30 : player: played "Annihilator - Alice In Hell/03 - W.T.Y.D..mp3"
|
||||
Mar 31 19:32 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 19:34 : player: played "Annihilator - Alice In Hell/04 - Wicked Mystic.mp3"
|
||||
Mar 31 19:36 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 19:39 : player: played "Annihilator - Alice In Hell/09 - Human Insecticide.mp3"
|
||||
Mar 31 19:39 : player: played "Killemall/01 - Metallica - Hit The Lights.mp3"
|
||||
Mar 31 19:41 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Mar 31 22:13 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Apr 01 01:27 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Apr 01 01:27 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Apr 01 01:27 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Apr 01 05:34 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
||||
Apr 01 16:55 : exception: Failed to open "PipeWire Sound Server" (pipewire); Failed to connect stream: Host is down
|
||||
Apr 01 16:56 : player: played "Annihilator - Alice In Hell/01 - Crystal Ann.mp3"
|
||||
Apr 01 16:56 : exception: Failed to open "PipeWire Sound Server" (pipewire); Failed to connect stream: Host is down
|
||||
Apr 01 16:57 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Apr 01 16:57 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Apr 01 16:58 : exception: Failed to create /home/javier/.local/state/mpd/state: No such file or directory
|
||||
Apr 01 16:58 : player: played "Annihilator - Alice In Hell/02 - Alison Hell..mp3"
|
||||
Apr 01 16:58 : exception: Failed to open '/home/javier/.local/state/mpd/state': No such file or directory
|
|
@ -0,0 +1,33 @@
|
|||
# Recommended location for database
|
||||
db_file "~/.config/mpd/database"
|
||||
|
||||
# Music directory is by default the XDG directory, uncomment to amend and choose a different directory
|
||||
music_directory "~/music"
|
||||
|
||||
# Refresh the database whenever files in the music_directory are changed
|
||||
auto_update "yes"
|
||||
|
||||
playlist_directory "~/.config/mpd/playlists"
|
||||
pid_file "~/.config/mpd/pid"
|
||||
log_file "~/.config//mpd/log"
|
||||
sticker_file "~/.config/mpd/sticker.sql"
|
||||
state_file "~/.local/state/mpd/state"
|
||||
|
||||
mixer_type "software"
|
||||
|
||||
# audio_output {
|
||||
# type "alsa"
|
||||
# name "Alsa Sound Server"
|
||||
# }
|
||||
|
||||
audio_output {
|
||||
type "fifo"
|
||||
name "Visualizer feed"
|
||||
path "/tmp/mpd.fifo"
|
||||
format "44100:16:2"
|
||||
}
|
||||
|
||||
audio_output {
|
||||
type "pipewire"
|
||||
name "PipeWire Sound Server"
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
507
|
|
@ -0,0 +1,16 @@
|
|||
Annihilator - Alice In Hell/01 - Crystal Ann.mp3
|
||||
Annihilator - Alice In Hell/02 - Alison Hell..mp3
|
||||
Annihilator - Alice In Hell/03 - W.T.Y.D..mp3
|
||||
Annihilator - Alice In Hell/04 - Wicked Mystic.mp3
|
||||
Annihilator - Alice In Hell/09 - Human Insecticide.mp3
|
||||
Killemall/01 - Metallica - Hit The Lights.mp3
|
||||
Killemall/02 - Metallica - The Four Horsemen.mp3
|
||||
Killemall/04 - Metallica - Jump In The Fire.mp3
|
||||
Killemall/08 - Metallica - No Remorse.mp3
|
||||
Revocation/02 - Cradle Robber.mp3
|
||||
Revocation/06 - No Funeral.mp3
|
||||
Revocation - Teratogenesis (EP) (2012)/01. The Grip Tightens.mp3
|
||||
Revocation - Teratogenesis (EP) (2012)/04. Teratogenesis.mp3
|
||||
Revocation - Teratogenesis (EP) (2012)/05. Bound By Desire.mp3
|
||||
Revocation - Existence Is Futile (2009)/08. Dismantle The Dictator.mp3
|
||||
Revocation - Existence Is Futile (2009)/10. Leviathan Awaits.mp3
|
Binary file not shown.
|
@ -0,0 +1,5 @@
|
|||
l seek 5
|
||||
h seek -5
|
||||
j seek -60
|
||||
k seek 60
|
||||
S cycle sub
|
|
@ -0,0 +1,265 @@
|
|||
# Example mpv configuration file
|
||||
#
|
||||
# Warning:
|
||||
#
|
||||
# The commented example options usually do _not_ set the default values. Call
|
||||
# mpv with --list-options to see the default values for most options. There is
|
||||
# no builtin or example mpv.conf with all the defaults.
|
||||
#
|
||||
#
|
||||
# Configuration files are read system-wide from /usr/local/etc/mpv.conf
|
||||
# and per-user from ~/.config/mpv/mpv.conf, where per-user settings override
|
||||
# system-wide settings, all of which are overridden by the command line.
|
||||
#
|
||||
# Configuration file settings and the command line options use the same
|
||||
# underlying mechanisms. Most options can be put into the configuration file
|
||||
# by dropping the preceding '--'. See the man page for a complete list of
|
||||
# options.
|
||||
#
|
||||
# Lines starting with '#' are comments and are ignored.
|
||||
#
|
||||
# See the CONFIGURATION FILES section in the man page
|
||||
# for a detailed description of the syntax.
|
||||
#
|
||||
# Profiles should be placed at the bottom of the configuration file to ensure
|
||||
# that settings wanted as defaults are not restricted to specific profiles.
|
||||
|
||||
##################
|
||||
# video settings #
|
||||
##################
|
||||
|
||||
# Start in fullscreen mode by default.
|
||||
# fs=yes
|
||||
|
||||
# force starting with centered window
|
||||
# geometry=50%:50%
|
||||
|
||||
# don't allow a new window to have a size larger than 90% of the screen size
|
||||
#autofit-larger=90%x90%
|
||||
|
||||
# Do not close the window on exit.
|
||||
#keep-open=yes
|
||||
|
||||
# Do not wait with showing the video window until it has loaded. (This will
|
||||
# resize the window once video is loaded. Also always shows a window with
|
||||
# audio.)
|
||||
#force-window=immediate
|
||||
|
||||
# Disable the On Screen Controller (OSC).
|
||||
#osc=no
|
||||
|
||||
# Keep the player window on top of all other windows.
|
||||
#ontop=yes
|
||||
|
||||
# Specify high quality video rendering preset (for --vo=gpu only)
|
||||
# Can cause performance problems with some drivers and GPUs.
|
||||
profile=gpu-hq
|
||||
#scale=ewa_lanczossharp
|
||||
#cscale=ewa_lanczossharp
|
||||
|
||||
# Force video to lock on the display's refresh rate, and change video and audio
|
||||
# speed to some degree to ensure synchronous playback - can cause problems
|
||||
# with some drivers and desktop environments.
|
||||
# video-sync=display-resample
|
||||
|
||||
# Enable hardware decoding if available. Often, this does not work with all
|
||||
# video outputs, but should work well with default settings on most systems.
|
||||
# If performance or energy usage is an issue, forcing the vdpau or vaapi VOs
|
||||
# may or may not help.
|
||||
hwdec=vaapi
|
||||
# hwdec=gpu
|
||||
# vo=xv
|
||||
# ao=pulse
|
||||
# sid=no
|
||||
# dscale=bilinear
|
||||
|
||||
##################
|
||||
# audio settings #
|
||||
##################
|
||||
|
||||
# Specify default audio device. You can list devices with: --audio-device=help
|
||||
# The option takes the device string (the stuff between the '...').
|
||||
# audio-device=alsa/default
|
||||
|
||||
# Do not filter audio to keep pitch when changing playback speed.
|
||||
#audio-pitch-correction=no
|
||||
|
||||
# Output 5.1 audio natively, and upmix/downmix audio with a different format.
|
||||
#audio-channels=5.1
|
||||
# Disable any automatic remix, _if_ the audio output accepts the audio format.
|
||||
# of the currently played file. See caveats mentioned in the manpage.
|
||||
# (The default is "auto-safe", see manpage.)
|
||||
audio-channels=auto
|
||||
|
||||
##################
|
||||
# other settings #
|
||||
##################
|
||||
|
||||
# Pretend to be a web browser. Might fix playback with some streaming sites,
|
||||
# but also will break with shoutcast streams.
|
||||
#user-agent="Mozilla/5.0"
|
||||
|
||||
# cache settings
|
||||
#
|
||||
# Use a large seekable RAM cache even for local input.
|
||||
#cache=yes
|
||||
#
|
||||
# Use extra large RAM cache (needs cache=yes to make it useful).
|
||||
#demuxer-max-bytes=500M
|
||||
#demuxer-max-back-bytes=100M
|
||||
#
|
||||
# Disable the behavior that the player will pause if the cache goes below a
|
||||
# certain fill size.
|
||||
#cache-pause=no
|
||||
#
|
||||
# Store cache payload on the hard disk instead of in RAM. (This may negatively
|
||||
# impact performance unless used for slow input such as network.)
|
||||
#cache-dir=~/.cache/
|
||||
#cache-on-disk=yes
|
||||
|
||||
# Display English subtitles if available.
|
||||
#slang=en
|
||||
|
||||
# Play Finnish audio if available, fall back to English otherwise.
|
||||
#alang=fi,en
|
||||
|
||||
# Change subtitle encoding. For Arabic subtitles use 'cp1256'.
|
||||
# If the file seems to be valid UTF-8, prefer UTF-8.
|
||||
# (You can add '+' in front of the codepage to force it.)
|
||||
#sub-codepage=cp1256
|
||||
|
||||
# You can also include other configuration files.
|
||||
#include=/path/to/the/file/you/want/to/include
|
||||
|
||||
############
|
||||
# Profiles #
|
||||
############
|
||||
|
||||
# The options declared as part of profiles override global default settings,
|
||||
# but only take effect when the profile is active.
|
||||
|
||||
# The following profile can be enabled on the command line with: --profile=eye-cancer
|
||||
|
||||
#[eye-cancer]
|
||||
#sharpen=5
|
||||
|
||||
###########
|
||||
# General #
|
||||
###########
|
||||
|
||||
input-ipc-server=/tmp/mpvsocket # listen for IPC on this socket
|
||||
# save-position-on-quit=yes # handled by a script
|
||||
|
||||
#no-border # no window title bar
|
||||
msg-module # prepend module name to log messages
|
||||
msg-color # color log messages on terminal
|
||||
term-osd-bar # display a progress bar on the terminal
|
||||
use-filedir-conf # look for additional config files in the directory of the opened file
|
||||
#pause # no autoplay
|
||||
keep-open # keep the player open when a file's end is reached
|
||||
autofit-larger=90%x90% # resize window in case it's larger than W%xH% of the screen
|
||||
cursor-autohide-fs-only # don't autohide the cursor in window mode, only fullscreen
|
||||
input-media-keys=no # enable/disable OSX media keys
|
||||
cursor-autohide=1000 # autohide the curser after 1s
|
||||
prefetch-playlist=yes
|
||||
force-seekable=yes
|
||||
|
||||
screenshot-format=png
|
||||
screenshot-png-compression=8
|
||||
screenshot-template='~/pics/MPV/%F (%P) %n'
|
||||
|
||||
hls-bitrate=max # use max quality for HLS streams
|
||||
|
||||
ytdl-format=best
|
||||
[ytdl-desktop]
|
||||
profile-desc=cond:is_desktop()
|
||||
ytdl-format=bestvideo[height<=?720]+bestaudio/best
|
||||
# ytdl-format=best
|
||||
|
||||
[ytdl-laptop]
|
||||
profile-desc=cond:is_laptop()
|
||||
ytdl-format=bestvideo[height<=?720][fps<=?30][vcodec!=?vp9][protocol!=http_dash_segments]+bestaudio/best
|
||||
# ytdl-format=best
|
||||
|
||||
[default]
|
||||
|
||||
|
||||
#########
|
||||
# Cache #
|
||||
#########
|
||||
|
||||
# Configure the cache to be really big (multiple GBs)
|
||||
# We have a lot of memory, so why not use it for something
|
||||
|
||||
cache=no
|
||||
#cache-default=4000000 # size in KB
|
||||
#cache-backbuffer=250000 # size in KB
|
||||
#demuxer-max-bytes=1147483647 # ~1 GiB in bytes
|
||||
|
||||
|
||||
#############
|
||||
# OSD / OSC #
|
||||
#############
|
||||
|
||||
osd-level=1 # enable osd and display --osd-status-msg on interaction
|
||||
osd-duration=2500 # hide the osd after x ms
|
||||
osd-status-msg='${time-pos} / ${duration}${?percent-pos: (${percent-pos}%)}${?frame-drop-count:${!frame-drop-count==0: Dropped: ${frame-drop-count}}}\n${?chapter:Chapter: ${chapter}}'
|
||||
|
||||
osd-font='monospace'
|
||||
osd-font-size=32
|
||||
osd-color='#CCFFFFFF' # ARGB format
|
||||
osd-border-color='#DD322640' # ARGB format
|
||||
#osd-shadow-offset=1 # pixel width for osd text and progress bar
|
||||
osd-bar-align-y=0 # progress bar y alignment (-1 top, 0 centered, 1 bottom)
|
||||
osd-border-size=2 # size for osd text and progress bar
|
||||
osd-bar-h=2 # height of osd bar as a fractional percentage of your screen height
|
||||
osd-bar-w=60 # width of " " "
|
||||
|
||||
|
||||
#############
|
||||
# Subtitles #
|
||||
#############
|
||||
|
||||
sub-auto=all # detect all subtitle
|
||||
#no-sub-visibility # hidden as default
|
||||
#sub-auto=fuzzy # external subs don't have to match the file name exactly to autoload
|
||||
sub-file-paths-append=ass # search for external subs in these relative subdirectories
|
||||
sub-file-paths-append=srt
|
||||
sub-file-paths-append=sub
|
||||
sub-file-paths-append=subs
|
||||
sub-file-paths-append=subtitles
|
||||
|
||||
demuxer-mkv-subtitle-preroll # try to correctly show embedded subs when seeking
|
||||
embeddedfonts=yes # use embedded fonts for SSA/ASS subs
|
||||
sub-fix-timing=no # do not try to fix gaps (which might make it worse in some cases)
|
||||
sub-ass-force-style=Kerning=yes # allows you to override style parameters of ASS scripts
|
||||
sub-use-margins
|
||||
sub-ass-force-margins
|
||||
|
||||
# the following options only apply to subtitles without own styling (i.e. not ASS but e.g. SRT)
|
||||
sub-font="JetBrainsMono Nerd Font"
|
||||
sub-font-size=36
|
||||
sub-color="#FFFFFFFF"
|
||||
sub-border-color="#FF262626"
|
||||
sub-border-size=3.2
|
||||
sub-shadow-offset=1
|
||||
sub-shadow-color="#33000000"
|
||||
sub-spacing=0.5
|
||||
|
||||
|
||||
#############
|
||||
# Languages #
|
||||
#############
|
||||
|
||||
slang=enm,en,eng,de,deu,ger # automatically select these subtitles (decreasing priority)
|
||||
alang=ja,jp,jpn,en,eng,de,deu,ger # automatically select these audio tracks (decreasing priority)
|
||||
|
||||
|
||||
#########
|
||||
# Audio #
|
||||
#########
|
||||
|
||||
audio-file-auto=fuzzy # external audio doesn't has to match the file name exactly to autoload
|
||||
audio-pitch-correction=yes # automatically insert scaletempo when playing with higher speed
|
||||
volume-max=200 # maximum volume in %, everything above 100 results in amplification
|
||||
volume=100 # default volume, 100 = unchanged
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2019 Wis
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1,76 @@
|
|||
# mpvSockets
|
||||
create one sockets per mpv instance (with the instance's process **ID** (PID), (**unique**)), instead of one socket for the last started instance
|
||||
|
||||
dangling sockets for crashed or killed instances is an issue,
|
||||
not sure if this script should handle/remove them or the clients/users, or both.
|
||||
|
||||
# Installation
|
||||
Download the single script file to your mpv-scripts-directory
|
||||
## Linux / unixes:
|
||||
``` bash
|
||||
curl "https://raw.githubusercontent.com/wis/mpvSockets/master/mpvSockets.lua" --create-dirs -o "$Your_Mpv_Scripts_Directory_Location/mpvSockets.lua"
|
||||
```
|
||||
if you're on Linux, most likely the location is `~/.config/mpv/scripts`, so run this before:
|
||||
``` bash
|
||||
$Your_Mpv_Scripts_Directory_Location=$HOME/config/mpv/scripts
|
||||
```
|
||||
## Windows (untested)
|
||||
powershell:
|
||||
``` powershell
|
||||
Invoke-WebRequest -OutFile "$env:LOCALAPPDATA\mpv\scripts\mpvSockets.lua" "https://raw.githubusercontent.com/wis/mpvSockets/master/mpvSockets.lua"
|
||||
```
|
||||
|
||||
# Usage, with Mpv's [JSON IPC](https://github.com/mpv-player/mpv/blob/master/DOCS/man/ipc.rst)
|
||||
## Linux / unixes (unix sockets):
|
||||
a script that pauses all running mpv instances:
|
||||
bash:
|
||||
``` bash
|
||||
#!/bin/bash
|
||||
for i in $(ls /tmp/mpvSockets/*); do
|
||||
echo '{ "command": ["set_property", "pause", true] }' | socat - "$i";
|
||||
done
|
||||
# Socat is a command line based utility that establishes two bidirec-tional byte streams and transfers data between them.
|
||||
# available on Linux and FreeBSD, propably most unixes. you can also use
|
||||
```
|
||||
|
||||
## Windows (named pipes):
|
||||
quote from https://mpv.io/manual/stable/#command-prompt-example
|
||||
> Unfortunately, it's not as easy to test the IPC protocol on Windows, since Windows ports of socat (in Cygwin and MSYS2) don't understand named pipes. In the absence of a simple tool to send and receive from bidirectional pipes, the echo command can be used to send commands, but not receive replies from the command prompt.
|
||||
>
|
||||
> Assuming mpv was started with:
|
||||
>
|
||||
> `mpv file.mkv --input-ipc-server=\\.\pipe\mpvsocket`
|
||||
> You can send commands from a command prompt:
|
||||
>
|
||||
> `echo show-text ${playback-time} >\\.\pipe\mpvsocket`
|
||||
To be able to simultaneously read and write from the IPC pipe, like on Linux, it's necessary to write an external program that uses overlapped file I/O (or some wrapper like .NET's NamedPipeClientStream.)
|
||||
|
||||
powershell client writer and reader (untested):
|
||||
``` powershell
|
||||
# socat.ps1
|
||||
# usage: socat.ps1 <Pipe-name> <Message>
|
||||
$sockedName = args[0]
|
||||
$message = args[1]
|
||||
|
||||
$npipeClient = new-object System.IO.Pipes.NamedPipeClientStream('.', $socketName, [System.IO.Pipes.PipeDirection]::InOut, [System.IO.Pipes.PipeOptions]::None, [System.Security.Principal.TokenImpersonationLevel]::Impersonation)
|
||||
|
||||
$pipeReader = $pipeWriter = $null
|
||||
try {
|
||||
$npipeClient.Connect()
|
||||
$pipeReader = new-object System.IO.StreamReader($npipeClient)
|
||||
$pipeWriter = new-object System.IO.StreamWriter($npipeClient)
|
||||
$pipeWriter.AutoFlush = $true
|
||||
|
||||
$pipeWriter.WriteLine($message)
|
||||
|
||||
while (($data = $pipeReader.ReadLine()) -ne $null) {
|
||||
$data
|
||||
}
|
||||
}
|
||||
catch {
|
||||
"An error occurred that could not be resolved."
|
||||
}
|
||||
finally {
|
||||
$npipeClient.Dispose()
|
||||
}
|
||||
```
|
|
@ -0,0 +1,36 @@
|
|||
-- mpvSockets, one socket per instance, removes socket on exit
|
||||
|
||||
local utils = require 'mp.utils'
|
||||
|
||||
local function get_temp_path()
|
||||
local directory_seperator = package.config:match("([^\n]*)\n?")
|
||||
local example_temp_file_path = os.tmpname()
|
||||
|
||||
-- remove generated temp file
|
||||
pcall(os.remove, example_temp_file_path)
|
||||
|
||||
local seperator_idx = example_temp_file_path:reverse():find(directory_seperator)
|
||||
local temp_path_length = #example_temp_file_path - seperator_idx
|
||||
|
||||
return example_temp_file_path:sub(1, temp_path_length)
|
||||
end
|
||||
|
||||
tempDir = get_temp_path()
|
||||
|
||||
function join_paths(...)
|
||||
local arg={...}
|
||||
path = ""
|
||||
for i,v in ipairs(arg) do
|
||||
path = utils.join_path(path, tostring(v))
|
||||
end
|
||||
return path;
|
||||
end
|
||||
|
||||
ppid = utils.getpid()
|
||||
os.execute("mkdir " .. join_paths(tempDir, "mpvSockets") .. " 2>/dev/null")
|
||||
mp.set_property("options/input-ipc-server", join_paths(tempDir, "mpvSockets", ppid))
|
||||
|
||||
function shutdown_handler()
|
||||
os.remove(join_paths(tempDir, "mpvSockets", ppid))
|
||||
end
|
||||
mp.register_event("shutdown", shutdown_handler)
|
|
@ -0,0 +1,3 @@
|
|||
local mpv_config_dir_path = require("mp").command_native({"expand-path", "~~/"})
|
||||
function load(relative_path) dofile(mpv_config_dir_path .. "/script_modules/" .. relative_path) end
|
||||
load("mpvSockets/mpvSockets.lua")
|
|
@ -0,0 +1,2 @@
|
|||
start=248.824809
|
||||
pause=yes
|
|
@ -0,0 +1 @@
|
|||
# redirect entry
|
|
@ -0,0 +1,2 @@
|
|||
start=560.713000
|
||||
fullscreen=no
|
|
@ -0,0 +1,19 @@
|
|||
host mail.cock.li
|
||||
port 587
|
||||
from jpacheco@cock.li
|
||||
user jpacheco@cock.li
|
||||
passwordeval "pass show muw/jpacheco@cock.li"
|
||||
|
||||
# End profile
|
||||
|
||||
account jpacheco@cock.li
|
||||
host mail.cock.li
|
||||
port 465
|
||||
from jpacheco@cock.li
|
||||
user jpacheco@cock.li
|
||||
passwordeval "pass jpacheco@cock.li"
|
||||
auth on
|
||||
tls on
|
||||
tls_trust_file /etc/ssl/certs/ca-certificates.crt
|
||||
logfile /home/javier/.local/state/msmtp/msmtp.log
|
||||
tls_starttls off
|
|
@ -0,0 +1,71 @@
|
|||
# Files
|
||||
mpd_music_dir = "~/music"
|
||||
ncmpcpp_directory = ~/.config/ncmpcpp
|
||||
mpd_host = "localhost"
|
||||
mpd_port = "6600"
|
||||
mpd_connection_timeout = "5"
|
||||
mpd_crossfade_time = "5"
|
||||
|
||||
# Playlist
|
||||
playlist_disable_highlight_delay = "0"
|
||||
playlist_display_mode = "columns"
|
||||
playlist_show_remaining_time = "yes"
|
||||
browser_display_mode = "columns"
|
||||
autocenter_mode = "yes"
|
||||
follow_now_playing_lyrics = "yes"
|
||||
allow_for_physical_item_deletion = yes
|
||||
colors_enabled = "yes"
|
||||
header_window_color = "white"
|
||||
volume_color = "red"
|
||||
progressbar_color = "white"
|
||||
statusbar_color = "white"
|
||||
active_window_border = "black"
|
||||
alternative_header_first_line_format = "$0$aqqu$/a {$7%a - $9}{$5%t$9}|{$8%f$9} $0$atqq$/a$9"
|
||||
alternative_header_second_line_format = "{{$6%b$9}{ [$6%y$9]}}|{%D}"
|
||||
song_list_format = "{$3%n │ $9}{$7%a - $9}{$5%t$9}|{$8%f$9}$R{$6 │ %b$9}{$3 │ %l$9}"
|
||||
user_interface = "classic"
|
||||
default_place_to_search_in = "database"
|
||||
|
||||
# visualizer
|
||||
visualizer_data_source = "/tmp/mpd.fifo"
|
||||
visualizer_output_name = "my_fifo"
|
||||
visualizer_type = "spectrum" (spectrum/wave)
|
||||
visualizer_in_stereo = "yes"
|
||||
visualizer_look = "+|"
|
||||
|
||||
## Navigation ##
|
||||
cyclic_scrolling = "yes"
|
||||
header_text_scrolling = "yes"
|
||||
jump_to_now_playing_song_at_start = "yes"
|
||||
lines_scrolled = "2"
|
||||
|
||||
## Other ##
|
||||
system_encoding = "utf-8"
|
||||
regular_expressions = "extended"
|
||||
ask_before_clearing_playlists = yes
|
||||
|
||||
## Selected tracks ##
|
||||
selected_item_prefix = "* "
|
||||
discard_colors_if_item_is_selected = "no"
|
||||
|
||||
## Seeking ##
|
||||
incremental_seeking = "yes"
|
||||
seek_time = "1"
|
||||
|
||||
## Visivility ##
|
||||
header_visibility = "yes"
|
||||
statusbar_visibility = "yes"
|
||||
titles_visibility = "yes"
|
||||
progressbar_look = "=>"
|
||||
locked_screen_width_part = 30
|
||||
ask_for_locked_screen_width_part = no
|
||||
progressbar_elapsed_color = "white"
|
||||
now_playing_prefix = "> "
|
||||
song_status_format = " $2%a $4⟫$3⟫ $8%t $4⟫$3⟫ $5%b "
|
||||
centered_cursor = "yes"
|
||||
display_bitrate = "no"
|
||||
enable_window_title = "yes"
|
||||
ignore_leading_the = "yes"
|
||||
empty_tag_marker = ""
|
||||
startup_screen = playlist
|
||||
startup_slave_screen = "visualizer"
|
Binary file not shown.
|
@ -0,0 +1,51 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Copy selection to system clipboard as newline-separated entries
|
||||
# Dependencies:
|
||||
# - tr
|
||||
# - xclip/xsel (Linux)
|
||||
# - pbcopy (macOS)
|
||||
# - termux-clipboard-set (Termux)
|
||||
# - clip.exe (WSL)
|
||||
# - clip (Cygwin)
|
||||
# - wl-copy (Wayland)
|
||||
# - clipboard (Haiku)
|
||||
#
|
||||
# Limitation: breaks if a filename has newline in it
|
||||
#
|
||||
# Note: For a space-separated list:
|
||||
# xargs -0 < "$SELECTION"
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}" # protect trailing \n
|
||||
|
||||
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
[ -s "$selection" ] || { echo "plugin .cbcp error: empty selection" >&2 ; exit 1; }
|
||||
|
||||
if [ "$XDG_SESSION_TYPE" = "wayland" ]; then
|
||||
# Wayland
|
||||
tr '\0' '\n' < "$selection" | wl-copy
|
||||
elif type xsel >/dev/null 2>&1; then
|
||||
# Linux
|
||||
tr '\0' '\n' < "$selection" | xsel -bi
|
||||
elif type xclip >/dev/null 2>&1; then
|
||||
# Linux
|
||||
tr '\0' '\n' < "$selection" | xclip -sel clip
|
||||
elif type pbcopy >/dev/null 2>&1; then
|
||||
# macOS
|
||||
tr '\0' '\n' < "$selection" | pbcopy
|
||||
elif type termux-clipboard-set >/dev/null 2>&1; then
|
||||
# Termux
|
||||
tr '\0' '\n' < "$selection" | termux-clipboard-set
|
||||
elif type clip.exe >/dev/null 2>&1; then
|
||||
# WSL
|
||||
tr '\0' '\n' < "$selection" | clip.exe
|
||||
elif type clip >/dev/null 2>&1; then
|
||||
# Cygwin
|
||||
tr '\0' '\n' < "$selection" | clip
|
||||
elif type clipboard >/dev/null 2>&1; then
|
||||
# Haiku
|
||||
tr '\0' '\n' < "$selection" | clipboard --stdin
|
||||
fi
|
|
@ -0,0 +1,428 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Print icons in front of list of directories/files
|
||||
|
||||
# Dependencies: awk
|
||||
|
||||
# Usage
|
||||
# 1. Set colors and/or icons to your liking
|
||||
# 2. Pipe any directory listing to iconlookup and it will output prepended icons
|
||||
# 3. preview-tui uses the script to prepend icon to directory listings
|
||||
# 4. Aditionally you can consider adding it to your PATH and/or FZF_DEFAULT_COMMAND to
|
||||
# make it work with various fzf plugins (make sure you also add --ansi to your FZF_DEFAULT_OPTS)
|
||||
|
||||
# Shell: POSIX compliant
|
||||
|
||||
# Author: Luuk van Baal (https://github.com/luukvbaal/iconlookup)
|
||||
|
||||
icon_lookup() {
|
||||
awk 'BEGIN {
|
||||
# Set your ANSI colorscheme below (https://en.wikipedia.org/wiki/ANSI_escape_code#Colors).
|
||||
# Default uses standard nnn icon colors, 8 and 24-bit nord themes are commented out.
|
||||
colordepth=8 #colordepth=8 #colordepth=24
|
||||
color_dirtxt=39 #color_dirtxt=111 #color_dirtxt="129;161;193"
|
||||
color_filetxt=15 #color_filetxt=111 #color_filetxt="129;161;193"
|
||||
color_default=39 #color_default=111 #color_default="129;161;193"
|
||||
color_video=93 #color_video=110 #color_video="136;192;208"
|
||||
color_audio=220 #color_audio=150 #color_audio="163;190;140"
|
||||
color_image=82 #color_image=150 #color_image="163;190;140"
|
||||
color_docs=202 #color_docs=173 #color_docs="208;135;112"
|
||||
color_archive=209 #color_archive=179 #color_archive="235;203;139"
|
||||
color_c=81 #color_c=150 #color_c="163;190;140"
|
||||
color_java=32 #color_java=139 #color_java="180;142;173"
|
||||
color_js=47 #color_js=109 #color_js="143;188;187"
|
||||
color_react=39 #color_react=111 #color_react="129;161;193"
|
||||
color_css=199 #color_css=110 #color_css="136;192;208"
|
||||
color_python=227 #color_python=68 #color_python="94;129;172"
|
||||
color_lua=19 #color_lua=167 #color_lua="191;97;106"
|
||||
color_document=15 #color_document=173 #color_document="208;135;112"
|
||||
color_fsharp=31 #color_fsharp=179 #color_fsharp="180;142;173"
|
||||
color_ruby=160 #color_ruby=150 #color_ruby="163;190;140"
|
||||
color_scala=196 #color_scala=139 #color_scala="143;188;187"
|
||||
color_shell=47 #color_shell=109 #color_shell="143;188;187"
|
||||
color_vim=28 #color_vim=109 #color_vim="143;188;187"
|
||||
|
||||
# icons[][1] contains icon and icons[][2] contains color
|
||||
icons["directory"][1] = ""; icons["directory"][2] = color_default
|
||||
icons["file"][1] = ""; icons["file"][2] = color_default
|
||||
icons["exec"][1] = ""; icons["exec"][2] = color_default
|
||||
icons["manual"][1] = ""; icons["manual"][2] = color_docs
|
||||
icons["pipe"][1] = "ﳣ"; icons["pipe"][2] = color_default
|
||||
icons["socket"][1] = "ﳧ"; icons["socket"][2] = color_default
|
||||
icons["door"][1] = "➡"; icons["door"][2] = color_default
|
||||
|
||||
# top level and common icons
|
||||
icons[".git"][1] = ""; icons[".git"][2] = color_default
|
||||
icons["desktop"][1] = "ﲾ"; icons["desktop"][2] = color_default
|
||||
icons["briefcase"][1] = ""; icons["briefcase"][2] = color_default
|
||||
icons["document"][1] = ""; icons["document"][2] = color_default
|
||||
icons["downloads"][1] = ""; icons["downloads"][2] = color_default
|
||||
icons["music"][1] = ""; icons["music"][2] = color_default
|
||||
icons["musicfile"][1] = ""; icons["musicfile"][2] = color_audio
|
||||
icons["pictures"][1] = ""; icons["pictures"][2] = color_default
|
||||
icons["picturefile"][1] = ""; icons["picturefile"][2] = color_image
|
||||
icons["public"][1] = ""; icons["public"][2] = color_default
|
||||
icons["templates"][1] = "陼"; icons["templates"][2] = color_default
|
||||
icons["videos"][1] = ""; icons["videos"][2] = color_default
|
||||
icons["videofile"][1] = "ﳜ"; icons["videofile"][2] = color_video
|
||||
icons["changelog"][1] = ""; icons["changelog"][2] = color_docs
|
||||
icons["configure"][1] = ""; icons["configure"][2] = color_default
|
||||
icons["license"][1] = ""; icons["license"][2] = color_docs
|
||||
icons["makefile"][1] = ""; icons["makefile"][2] = color_default
|
||||
icons["archive"][1] = ""; icons["archive"][2] = color_archive
|
||||
icons["script"][1] = ""; icons["script"][2] = color_shell
|
||||
icons["cplusplus"][1] = ""; icons["cplusplus"][2] = color_c
|
||||
icons["java"][1] = ""; icons["java"][2] = color_java
|
||||
icons["clojure"][1] = ""; icons["clojure"][2] = color_default
|
||||
icons["js"][1] = ""; icons["js"][2] = color_js
|
||||
icons["linux"][1] = ""; icons["linux"][2] = color_default
|
||||
icons["fsharp"][1] = ""; icons["fsharp"][2] = color_fsharp
|
||||
icons["ruby"][1] = ""; icons["ruby"][2] = color_ruby
|
||||
icons["c"][1] = ""; icons["c"][2] = color_c
|
||||
icons["chess"][1] = ""; icons["chess"][2] = color_default
|
||||
icons["haskell"][1] = ""; icons["haskell"][2] = color_vim
|
||||
icons["html"][1] = ""; icons["html"][2] = color_default
|
||||
icons["react"][1] = ""; icons["react"][2] = color_react
|
||||
icons["python"][1] = ""; icons["python"][2] = color_python
|
||||
icons["database"][1] = ""; icons["database"][2] = color_default
|
||||
icons["worddoc"][1] = ""; icons["worddoc"][2] = color_document
|
||||
icons["playlist"][1] = "蘿"; icons["playlist"][2] = color_audio
|
||||
icons["opticaldisk"][1] = ""; icons["opticaldisk"][2] = color_archive
|
||||
|
||||
# numbers
|
||||
icons["1"][1] = icons["manual"][1]; icons["1"][2] = icons["manual"][2]
|
||||
icons["7z"][1] = icons["archive"][1]; icons["7z"][2] = icons["archive"][2]
|
||||
|
||||
# a
|
||||
icons["a"][1] = icons["manual"][1]; icons["a"][2] = icons["manual"][2]
|
||||
icons["apk"][1] = icons["archive"][1]; icons["apk"][2] = icons["archive"][2]
|
||||
icons["asm"][1] = icons["file"][1]; icons["asm"][2] = icons["file"][2]
|
||||
icons["aup"][1] = icons["musicfile"][1]; icons["aup"][2] = icons["musicfile"][2]
|
||||
icons["avi"][1] = icons["videofile"][1]; icons["avi"][2] = icons["videofile"][2]
|
||||
|
||||
# b
|
||||
icons["bat"][1] = icons["script"][1]; icons["bat"][2] = icons["script"][2]
|
||||
icons["bin"][1] = ""; icons["bin"][2] = color_default
|
||||
icons["bmp"][1] = icons["picturefile"][1]; icons["bmp"][2] = icons["picturefile"][2]
|
||||
icons["bz2"][1] = icons["archive"][1]; icons["bz2"][2] = icons["archive"][2]
|
||||
|
||||
# c
|
||||
icons["cplusplus"][1] = icons["cplusplus"][1]; icons["cplusplus"][2] = icons["cplusplus"][2]
|
||||
icons["cabal"][1] = icons["haskell"][1]; icons["cab"][2] = icons["haskell"][2]
|
||||
icons["cab"][1] = icons["archive"][1]; icons["cab"][2] = icons["archive"][2]
|
||||
icons["cbr"][1] = icons["archive"][1]; icons["cbr"][2] = icons["archive"][2]
|
||||
icons["cbz"][1] = icons["archive"][1]; icons["cbz"][2] = icons["archive"][2]
|
||||
icons["cc"][1] = icons["cplusplus"][1]; icons["cc"][2] = icons["cplusplus"][2]
|
||||
icons["class"][1] = icons["java"][1]; icons["class"][2] = icons["java"][2]
|
||||
icons["clj"][1] = icons["clojure"][1]; icons["clj"][2] = icons["clojure"][2]
|
||||
icons["cljc"][1] = icons["clojure"][1]; icons["cljc"][2] = icons["clojure"][2]
|
||||
icons["cljs"][1] = icons["clojure"][1]; icons["cljs"][2] = icons["clojure"][2]
|
||||
icons["cmake"][1] = icons["makefile"][1]; icons["cmake"][2] = icons["makefile"][2]
|
||||
icons["coffee"][1] = ""; icons["coffee"][2] = color_default
|
||||
icons["conf"][1] = icons["configure"][1]; icons["conf"][2] = icons["configure"][2]
|
||||
icons["cpio"][1] = icons["archive"][1]; icons["cpio"][2] = icons["archive"][2]
|
||||
icons["cpp"][1] = icons["cplusplus"][1]; icons["cpp"][2] = icons["cplusplus"][2]
|
||||
icons["css"][1] = ""; icons["css"][2] = color_css
|
||||
icons["cue"][1] = icons["playlist"][1]; icons["cue"][2] = icons["playlist"][2]
|
||||
icons["cvs"][1] = icons["configure"][1]; icons["cvs"][2] = icons["configure"][2]
|
||||
icons["cxx"][1] = icons["cplusplus"][1]; icons["cxx"][2] = icons["cplusplus"][2]
|
||||
|
||||
# d
|
||||
icons["db"][1] = icons["database"][1]; icons["db"][2] = icons["database"][2]
|
||||
icons["deb"][1] = ""; icons["deb"][2] = color_archive
|
||||
icons["diff"][1] = ""; icons["diff"][2] = color_default
|
||||
icons["dll"][1] = icons["script"][1]; icons["dll"][2] = icons["script"][2]
|
||||
icons["doc"][1] = icons["worddoc"][1]; icons["doc"][2] = icons["worddoc"][2]
|
||||
icons["docx"][1] = icons["worddoc"][1]; icons["docx"][2] = icons["worddoc"][2]
|
||||
|
||||
# e
|
||||
icons["ejs"][1] = icons["js"][1]; icons["ejs"][2] = icons["js"][2]
|
||||
icons["elf"][1] = icons["linux"][1]; icons["elf"][2] = icons["linux"][2]
|
||||
icons["epub"][1] = icons["manual"][1]; icons["epub"][2] = icons["manual"][2]
|
||||
icons["exe"][1] = icons["exec"][1]; icons["exe"][2] = icons["exec"][2]
|
||||
|
||||
# f
|
||||
icons["fsharp"][1] = icons["fsharp"][1]; icons["fsharp"][2] = icons["fsharp"][2]
|
||||
icons["flac"][1] = icons["musicfile"][1]; icons["flac"][2] = icons["musicfile"][2]
|
||||
icons["fen"][1] = icons["chess"][1]; icons["fen"][2] = icons["chess"][2]
|
||||
icons["flv"][1] = icons["videofile"][1]; icons["flv"][2] = icons["videofile"][2]
|
||||
icons["fs"][1] = icons["fsharp"][1]; icons["fs"][2] = icons["fsharp"][2]
|
||||
icons["fsi"][1] = icons["fsharp"][1]; icons["fsi"][2] = icons["fsharp"][2]
|
||||
icons["fsscript"][1] = icons["fsharp"][1]; icons["fsscript"][2] = icons["fsharp"][2]
|
||||
icons["fsx"][1] = icons["fsharp"][1]; icons["fsx"][2] = icons["fsharp"][2]
|
||||
|
||||
# g
|
||||
icons["gem"][1] = icons["ruby"][1]; icons["gem"][2] = icons["ruby"][2]
|
||||
icons["gif"][1] = icons["picturefile"][1]; icons["gif"][2] = icons["picturefile"][2]
|
||||
icons["go"][1] = "ﳑ"; icons["go"][2] = color_default
|
||||
icons["gz"][1] = icons["archive"][1]; icons["gz"][2] = icons["archive"][2]
|
||||
icons["gzip"][1] = icons["archive"][1]; icons["gzip"][2] = icons["archive"][2]
|
||||
|
||||
# h
|
||||
icons["h"][1] = icons["c"][1]; icons["h"][2] = icons["c"][2]
|
||||
icons["hh"][1] = icons["cplusplus"][1]; icons["hh"][2] = icons["cplusplus"][2]
|
||||
icons["hpp"][1] = icons["cplusplus"][1]; icons["hpp"][2] = icons["cplusplus"][2]
|
||||
icons["hs"][1] = icons["haskell"][1]; icons["hs"][2] = icons["haskell"][2]
|
||||
icons["htaccess"][1] = icons["configure"][1]; icons["htaccess"][2] = icons["configure"][2]
|
||||
icons["htpasswd"][1] = icons["configure"][1]; icons["htpasswd"][2] = icons["configure"][2]
|
||||
icons["htm"][1] = icons["html"][1]; icons["htm"][2] = icons["html"][2]
|
||||
icons["hxx"][1] = icons["cplusplus"][1]; icons["hxx"][2] = icons["cplusplus"][2]
|
||||
|
||||
# i
|
||||
icons["ico"][1] = icons["picturefile"][1]; icons["ico"][2] = icons["picturefile"][2]
|
||||
icons["img"][1] = icons["opticaldisk"][1]; icons["img"][2] = icons["opticaldisk"][2]
|
||||
icons["ini"][1] = icons["configure"][1]; icons["ini"][2] = icons["configure"][2]
|
||||
icons["iso"][1] = icons["opticaldisk"][1]; icons["iso"][2] = icons["opticaldisk"][2]
|
||||
|
||||
# j
|
||||
icons["jar"][1] = icons["java"][1]; icons["jar"][2] = icons["java"][2]
|
||||
icons["java"][1] = icons["java"][1]; icons["java"][2] = icons["java"][2]
|
||||
icons["jl"][1] = icons["configure"][1]; icons["jl"][2] = icons["configure"][2]
|
||||
icons["jpeg"][1] = icons["picturefile"][1]; icons["jpeg"][2] = icons["picturefile"][2]
|
||||
icons["jpg"][1] = icons["picturefile"][1]; icons["jpg"][2] = icons["picturefile"][2]
|
||||
icons["json"][1] = "ﬥ"; icons["json"][2] = color_js
|
||||
icons["jsx"][1] = icons["react"][1]; icons["jsx"][2] = icons["react"][2]
|
||||
|
||||
# k
|
||||
|
||||
# l
|
||||
icons["lha"][1] = icons["archive"][1]; icons["lha"][2] = icons["archive"][2]
|
||||
icons["lhs"][1] = icons["haskell"][1]; icons["lhs"][2] = icons["haskell"][2]
|
||||
icons["ilog"][1] = icons["document"][1]; icons["ilog"][2] = icons["document"][2]
|
||||
icons["lua"][1] = ""; icons["lua"][2] = color_lua
|
||||
icons["lzh"][1] = icons["archive"][1]; icons["lzh"][2] = icons["archive"][2]
|
||||
icons["lzma"][1] = icons["archive"][1]; icons["lzma"][2] = icons["archive"][2]
|
||||
|
||||
# m
|
||||
icons["m"][1] = "ﴜ"; icons["mat"][2] = color_c
|
||||
icons["m4a"][1] = icons["musicfile"][1]; icons["m4a"][2] = icons["musicfile"][2]
|
||||
icons["m4v"][1] = icons["videofile"][1]; icons["m4v"][2] = icons["videofile"][2]
|
||||
icons["mat"][1] = ""; icons["mat"][2] = color_c
|
||||
icons["markdown"][1] = ""; icons["markdown"][2] = color_docs
|
||||
icons["md"][1] = ""; icons["md"][2] = color_docs
|
||||
icons["mk"][1] = icons["makefile"][1]; icons["mk"][2] = icons["makefile"][2]
|
||||
icons["mkv"][1] = icons["videofile"][1]; icons["mkv"][2] = icons["videofile"][2]
|
||||
icons["mov"][1] = icons["videofile"][1]; icons["mov"][2] = icons["videofile"][2]
|
||||
icons["mp3"][1] = icons["musicfile"][1]; icons["mp3"][2] = icons["musicfile"][2]
|
||||
icons["mp4"][1] = icons["videofile"][1]; icons["mp4"][2] = icons["videofile"][2]
|
||||
icons["mpeg"][1] = icons["videofile"][1]; icons["mpeg"][2] = icons["videofile"][2]
|
||||
icons["mpg"][1] = icons["videofile"][1]; icons["mpg"][2] = icons["videofile"][2]
|
||||
icons["msi"][1] = ""; icons["msi"][2] = color_default
|
||||
|
||||
# n
|
||||
icons["nix"][1] = ""; icons["nix"][2] = color_fsharp
|
||||
|
||||
# o
|
||||
icons["o"][1] = icons["manual"][1]; icons["o"][2] = icons["manual"][2]
|
||||
icons["ogg"][1] = icons["musicfile"][1]; icons["ogg"][2] = icons["musicfile"][2]
|
||||
icons["odownload"][1] = icons["download"][1]; icons["odownload"][2] = icons["download"][2]
|
||||
icons["out"][1] = icons["linux"][1]; icons["out"][2] = icons["linux"][2]
|
||||
|
||||
# p
|
||||
icons["part"][1] = icons["download"][1]; icons["part"][2] = icons["download"][2]
|
||||
icons["patch"][1] = icons["diff"][1]; icons["patch"][2] = icons["diff"][2]
|
||||
icons["pdf"][1] = ""; icons["pdf"][2] = color_docs
|
||||
icons["pgn"][1] = icons["chess"][1]; icons["pgn"][2] = icons["chess"][2]
|
||||
icons["php"][1] = ""; icons["php"][2] = color_default
|
||||
icons["png"][1] = icons["picturefile"][1]; icons["png"][2] = icons["picturefile"][2]
|
||||
icons["ppt"][1] = ""; icons["ppt"][2] = color_default
|
||||
icons["pptx"][1] = ""; icons["pptx"][2] = color_default
|
||||
icons["psb"][1] = ""; icons["psb"][2] = color_default
|
||||
icons["psd"][1] = ""; icons["psd"][2] = color_default
|
||||
icons["py"][1] = icons["python"][1]; icons["py"][2] = icons["python"][2]
|
||||
icons["pyc"][1] = icons["python"][1]; icons["pyc"][2] = icons["python"][2]
|
||||
icons["pyd"][1] = icons["python"][1]; icons["pyd"][2] = icons["python"][2]
|
||||
icons["pyo"][1] = icons["python"][1]; icons["pyo"][2] = icons["python"][2]
|
||||
|
||||
# q
|
||||
|
||||
# r
|
||||
icons["rar"][1] = icons["archive"][1]; icons["rar"][2] = icons["archive"][2]
|
||||
icons["rc"][1] = icons["configure"][1]; icons["rc"][2] = icons["configure"][2]
|
||||
icons["rom"][1] = ""; icons["rom"][2] = color_default
|
||||
icons["rpm"][1] = icons["archive"][1]; icons["rpm"][2] = icons["archive"][2]
|
||||
icons["rss"][1] = "參"; icons["rss"][2] = color_default
|
||||
icons["rtf"][1] = ""; icons["rtf"][2] = color_default
|
||||
|
||||
# s
|
||||
icons["sass"][1] = ""; icons["sass"][2] = color_css
|
||||
icons["scss"][1] = ""; icons["scss"][2] = color_css
|
||||
icons["so"][1] = icons["manual"][1]; icons["so"][2] = icons["manual"][2]
|
||||
icons["scala"][1] = ""; icons["scala"][2] = color_scala
|
||||
icons["sh"][1] = icons["script"][1]; icons["sh"][2] = icons["script"][2]
|
||||
icons["slim"][1] = icons["script"][1]; icons["slim"][2] = icons["script"][2]
|
||||
icons["sln"][1] = ""; icons["sln"][2] = color_default
|
||||
icons["sql"][1] = icons["database"][1]; icons["sql"][2] = icons["database"][2]
|
||||
icons["srt"][1] = ""; icons["srt"][2] = color_default
|
||||
icons["isub"][1] = ""; icons["isub"][2] = color_default
|
||||
icons["svg"][1] = icons["picturefile"][1]; icons["svg"][2] = icons["picturefile"][2]
|
||||
|
||||
# t
|
||||
icons["tar"][1] = icons["archive"][1]; icons["tar"][2] = icons["archive"][2]
|
||||
icons["tex"][1] = ""; icons["tex"][2] = color_default
|
||||
icons["tgz"][1] = icons["archive"][1]; icons["tgz"][2] = icons["archive"][2]
|
||||
icons["ts"][1] = ""; icons["ts"][2] = color_js
|
||||
icons["tsx"][1] = icons["react"][1]; icons["tsx"][2] = icons["react"][2]
|
||||
icons["txt"][1] = icons["document"][1]; icons["txt"][2] = icons["document"][2]
|
||||
icons["txz"][1] = icons["archive"][1]; icons["txz"][2] = icons["archive"][2]
|
||||
|
||||
# u
|
||||
|
||||
# v
|
||||
icons["vid"][1] = icons["videofile"][1]; icons["vid"][2] = icons["videofile"][2]
|
||||
icons["vim"][1] = ""; icons["vim"][2] = color_vim
|
||||
icons["vimrc"][1] = ""; icons["vimrc"][2] = color_vim
|
||||
icons["vtt"][1] = ""; icons["vtt"][2] = color_default
|
||||
# w
|
||||
icons["wav"][1] = icons["musicfile"][1]; icons["wav"][2] = icons["musicfile"][2]
|
||||
icons["webm"][1] = icons["videofile"][1]; icons["webm"][2] = icons["videofile"][2]
|
||||
icons["wma"][1] = icons["videofile"][1]; icons["wma"][2] = icons["videofile"][2]
|
||||
icons["wmv"][1] = icons["videofile"][1]; icons["wmv"][2] = icons["videofile"][2]
|
||||
|
||||
# x
|
||||
icons["xbps"][1] = icons["archive"][1]; icons["xbps"][2] = color_archive
|
||||
icons["xcf"][1] = icons["picturefile"][1]; icons["xcf"][2] = color_image
|
||||
icons["xhtml"][1] = icons["html"][1]; icons["xhtml"][2] = icons["html"][2]
|
||||
icons["xls"][1] = ""; icons["xls"][2] = color_default
|
||||
icons["xlsx"][1] = ""; icons["xlsx"][2] = color_default
|
||||
icons["xml"][1] = icons["html"][1]; icons["xml"][2] = icons["html"][2]
|
||||
icons["xz"][1] = icons["archive"][1]; icons["xz"][2] = icons["archive"][2]
|
||||
|
||||
# y
|
||||
icons["yaml"][1] = icons["configure"][1]; icons["yaml"][2] = icons["configure"][2]
|
||||
icons["yml"][1] = icons["configure"][1]; icons["yml"][2] = icons["configure"][2]
|
||||
# z
|
||||
icons["zip"][1] = icons["archive"][1]; icons["zip"][2] = icons["archive"][2]
|
||||
icons["zsh"][1] = icons["script"][1]; icons["zsh"][2] = icons["script"][2]
|
||||
icons["zst"][1] = icons["archive"][1]; icons["zst"][2] = icons["archive"][2]
|
||||
|
||||
FS = "."
|
||||
limit = ENVIRON["limit"]
|
||||
switch (colordepth) {
|
||||
case "4":
|
||||
escape="\033["
|
||||
break;
|
||||
case "8":
|
||||
escape="\033[38;5;"
|
||||
break;
|
||||
case "24":
|
||||
escape="\033[38;2;"
|
||||
break;
|
||||
}
|
||||
bstr = ENVIRON["beforestr"]
|
||||
}
|
||||
{
|
||||
# dont print cwd . and leading ./ from tree -f
|
||||
if ($0 ~/^\.$/)
|
||||
next
|
||||
ent = ($0 ~/^\.\//) ? substr($0, 3, length($0) - 2) : $0
|
||||
ext = $NF
|
||||
|
||||
# Print icons, set color and bold directories by using ansi escape codes
|
||||
if (ext in icons)
|
||||
printcolor(icons[ext][1], icons[ext][2], color_filetxt, ent, "10")
|
||||
else
|
||||
switch (substr(ent, length(ent), 1)) {
|
||||
case "/":
|
||||
printcolor(icons["directory"][1], color_default, color_dirtxt, ent, "1")
|
||||
break;
|
||||
case "*":
|
||||
printcolor(icons["exe"][1], color_default, color_filetxt, ent, "10")
|
||||
break;
|
||||
case "|":
|
||||
printcolor(icons["pipe"][1], color_default, color_filetxt, ent, "10")
|
||||
break;
|
||||
case "=":
|
||||
printcolor(icons["socket"][1], color_default, color_filetxt, ent, "10")
|
||||
break;
|
||||
case ">":
|
||||
printcolor(icons["door"][1], color_default, color_filetxt, ent, "10")
|
||||
break;
|
||||
default:
|
||||
printcolor(icons["file"][1], color_default, color_filetxt, ent, "10")
|
||||
}
|
||||
}
|
||||
function printcolor(i, c, d, n, b) {
|
||||
if (limit != "" && length(n) + 2 > limit)
|
||||
n = substr(n, 1, limit - 2)
|
||||
printf "\033[0m"
|
||||
printf "%s%s%s;%sm%s %s%sm%s\n", bstr, escape, c, b, i, escape, d, n
|
||||
}'
|
||||
printf '\033[0m'
|
||||
}
|
||||
|
||||
print_begin() {
|
||||
printf '%s\n' "$1" | sed 's/\\n/\n/g'
|
||||
}
|
||||
|
||||
print_end() {
|
||||
printf '%s\n' "$1" | sed 's/\\n/\n/g'
|
||||
}
|
||||
|
||||
print_help() {
|
||||
printf 'Icon Lookup\n
|
||||
Usage:
|
||||
iconlookup [options]
|
||||
iconlookup [-bBe] [string]
|
||||
iconlookup -l [number]
|
||||
iconlookup (-h | --help)
|
||||
|
||||
Prepend icons to list of files based on extension or appended indicator by ls/tree "-F" flag ("/" for directory, "*" for executable etc.)
|
||||
|
||||
Options:
|
||||
-h --help -? Show this screen.
|
||||
-b --before Prepend str before icon.
|
||||
-B --begin Prepend str before output.
|
||||
-e --end Append str after output.
|
||||
-l --limit Limit line length to [number] characters.'
|
||||
}
|
||||
|
||||
while :; do
|
||||
case $1 in
|
||||
-h|-\?|--help)
|
||||
print_help
|
||||
exit ;;
|
||||
-B|--begin)
|
||||
if [ -n "$2" ]; then
|
||||
print_begin "$2"
|
||||
fi
|
||||
shift ;;
|
||||
-e|--end)
|
||||
if [ -n "$2" ]; then
|
||||
end=1
|
||||
endstr="$2"
|
||||
fi
|
||||
shift ;;
|
||||
-b|--before)
|
||||
if [ -n "$2" ]; then
|
||||
export beforestr="$2"
|
||||
fi
|
||||
shift ;;
|
||||
-l|--limit)
|
||||
if [ -n "$2" ]; then
|
||||
export limit="$2"
|
||||
shift
|
||||
else
|
||||
printf 'ERROR: "--limit" requires a non-empty option argument.\n'
|
||||
exit
|
||||
fi ;;
|
||||
--)
|
||||
shift
|
||||
break ;;
|
||||
-?*)
|
||||
printf 'WARNING: Unknown option ignored: %s\n' "$1" ;;
|
||||
*) break ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ ! -t 0 ]; then
|
||||
[ -n "$beforestr" ] && limit="$((limit - ${#beforestr}))"
|
||||
icon_lookup
|
||||
else
|
||||
printf 'ERROR: no data provided...\nExpecting a directory listing in stdin\n'
|
||||
fi
|
||||
|
||||
if [ -n "$end" ]; then
|
||||
print_end "$endstr"
|
||||
fi
|
|
@ -0,0 +1,174 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Description: An almost fully POSIX compliant batch file renamer
|
||||
#
|
||||
# Note: nnn auto-detects and invokes this plugin if available
|
||||
# Whitespace is used as delimiter for read.
|
||||
# The plugin doesn't support filenames with leading or trailing whitespace
|
||||
# To use NNN_LIST your shell must support readlink(1)
|
||||
#
|
||||
# Capabilities:
|
||||
# 1. Basic file rename
|
||||
# 2. Detects order change
|
||||
# 3. Can move files
|
||||
# 4. Can remove files
|
||||
# 5. Switch number pairs to swap filenames
|
||||
#
|
||||
# Shell: bash
|
||||
# Author: KlzXS
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
. "$(dirname "$0")"/.nnn-plugin-helper
|
||||
|
||||
EDITOR="${EDITOR:-vi}"
|
||||
TMPDIR="${TMPDIR:-/tmp}"
|
||||
NNN_INCLUDE_HIDDEN="${NNN_INCLUDE_HIDDEN:-0}"
|
||||
VERBOSE="${VERBOSE:-0}"
|
||||
RECURSIVE="${RECURSIVE:-0}"
|
||||
|
||||
case "$NNN_TRASH" in
|
||||
1)
|
||||
RM_UTIL="trash-put" ;;
|
||||
2)
|
||||
RM_UTIL="gio trash" ;;
|
||||
*)
|
||||
RM_UTIL="rm -ri" ;;
|
||||
esac
|
||||
|
||||
exit_status=0
|
||||
|
||||
if nnn_use_selection "Rename"; then
|
||||
# shellcheck disable=SC2154
|
||||
arr=$(tr '\0' '\n' < "$selection")
|
||||
else
|
||||
findcmd="find . ! -name ."
|
||||
|
||||
if [ "$RECURSIVE" -eq 0 ]; then
|
||||
findcmd="$findcmd -prune"
|
||||
fi
|
||||
|
||||
if [ "$NNN_INCLUDE_HIDDEN" -eq 0 ]; then
|
||||
findcmd="$findcmd ! -name \".*\""
|
||||
fi
|
||||
|
||||
if [ -z "$NNN_LIST" ]; then
|
||||
findcmd="$findcmd -print"
|
||||
else
|
||||
findcmd="$findcmd -printf "'"'"$NNN_LIST/%P\n"'"'
|
||||
fi
|
||||
|
||||
arr=$(eval "$findcmd" | sort)
|
||||
fi
|
||||
|
||||
lines=$(printf "%s\n" "$arr" | wc -l)
|
||||
width=${#lines}
|
||||
|
||||
dst_file=$(mktemp "$TMPDIR/.nnnXXXXXX")
|
||||
trap 'rm -f "$dst_file"' EXIT
|
||||
|
||||
printf "%s" "$arr" | awk '{printf("%'"${width}"'d %s\n", NR, $0)}' > "$dst_file"
|
||||
|
||||
items=("~")
|
||||
while IFS='' read -r line; do
|
||||
if [ -n "$NNN_LIST" ]; then
|
||||
line=$(readlink "$line" || printf "%s" "$line")
|
||||
fi
|
||||
|
||||
items+=("$line");
|
||||
done < <(printf "%s\n" "$arr")
|
||||
|
||||
$EDITOR "$dst_file"
|
||||
|
||||
while read -r num name; do
|
||||
if [ -z "$name" ]; then
|
||||
if [ -z "$num" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
printf "%s: unable to parse line, aborting\n" "$0"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# check if $num is an integer
|
||||
if [ ! "$num" -eq "$num" ] 2> /dev/null; then
|
||||
printf "%s: unable to parse line, aborting\n" "$0"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
src=${items[$num]}
|
||||
|
||||
if [ -z "$src" ]; then
|
||||
printf "%s: unknown item number %s\n" "$0" "$num" > /dev/stderr
|
||||
continue
|
||||
elif [ "$name" != "$src" ]; then
|
||||
if [ -z "$name" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ ! -e "$src" ] && [ ! -L "$src" ]; then
|
||||
printf "%s: %s does not exit\n" "$0" "$src" > /dev/stderr
|
||||
|
||||
unset "items[$num]"
|
||||
continue
|
||||
fi
|
||||
|
||||
# handle swaps
|
||||
if [ -e "$name" ] || [ -L "$name" ]; then
|
||||
tmp="$name~"
|
||||
c=0
|
||||
|
||||
while [ -e "$tmp" ] || [ -L "$tmp" ]; do
|
||||
c=$((c+1))
|
||||
tmp="$tmp~$c"
|
||||
done
|
||||
|
||||
if mv "$name" "$tmp"; then
|
||||
if [ "$VERBOSE" -ne 0 ]; then
|
||||
printf "'%s' -> '%s'\n" "$name" "$tmp"
|
||||
fi
|
||||
else
|
||||
printf "%s: failed to rename %s to %s: %s\n" "$0" "$name" "$tmp" "$!" > /dev/stderr
|
||||
exit_status=1
|
||||
fi
|
||||
|
||||
for key in "${!items[@]}"; do
|
||||
if [ "${items[$key]}" = "$name" ]; then
|
||||
items[$key]="$tmp"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
dir=$(dirname "$name")
|
||||
if [ ! -d "$dir" ] && ! mkdir -p "$dir"; then
|
||||
printf "%s: failed to create directory tree %s\n" "$0" "$dir" > /dev/stderr
|
||||
exit_status=1
|
||||
elif ! mv -i "$src" "$name"; then
|
||||
printf "%s: failed to rename %s to %s: %s\n" "$0" "$name" "$tmp" "$!" > /dev/stderr
|
||||
exit_status=1
|
||||
else
|
||||
if [ -d "$name" ]; then
|
||||
for key in "${!items[@]}"; do
|
||||
items[$key]=$(printf "%s" "${items[$key]}" | sed "s|^$src\(\$\|\/\)|$name\1|")
|
||||
done
|
||||
|
||||
if [ "$VERBOSE" -ne 0 ]; then
|
||||
printf "'%s' => '%s'\n" "$src" "$name"
|
||||
fi
|
||||
else
|
||||
true
|
||||
if [ "$VERBOSE" -ne 0 ]; then
|
||||
printf "'%s' -> '%s'\n" "$src" "$name"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
unset "items[$num]"
|
||||
done <"$dst_file"
|
||||
|
||||
unset "items[0]"
|
||||
for item in "${items[@]}"; do
|
||||
$RM_UTIL "$item"
|
||||
done
|
||||
|
||||
exit $exit_status
|
|
@ -0,0 +1,61 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Helper script for plugins
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Anna Arad
|
||||
|
||||
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
export selection
|
||||
|
||||
## Set CUR_CTX to 1 to open directory in current context
|
||||
CUR_CTX=0
|
||||
export CUR_CTX
|
||||
|
||||
NNN_PREFER_SELECTION="${NNN_PREFER_SELECTION:-0}"
|
||||
export NNN_PREFER_SELECTION
|
||||
|
||||
## Ask nnn to switch to directory $1 in context $2.
|
||||
## If $2 is not provided, the function asks explicitly.
|
||||
nnn_cd () {
|
||||
dir="$1"
|
||||
|
||||
if [ -z "$NNN_PIPE" ]; then
|
||||
echo "No pipe file found" 1>&2
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -n "$2" ]; then
|
||||
context=$2
|
||||
elif [ $CUR_CTX -ne 1 ]; then
|
||||
printf "Choose context 1-4 (blank for current): "
|
||||
read -r context
|
||||
fi
|
||||
|
||||
printf "%s" "${context:-0}c$dir" > "$NNN_PIPE"
|
||||
}
|
||||
|
||||
cmd_exists () {
|
||||
type "$1" > /dev/null 2>&1
|
||||
echo $?
|
||||
}
|
||||
|
||||
nnn_use_selection() {
|
||||
if ! [ -s "$selection" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ "$NNN_PREFER_SELECTION" -eq 1 ]; then
|
||||
return 0
|
||||
else
|
||||
[ -n "$1" ] && printf "%s " "$1"
|
||||
printf "(s)election/(c)urrent? [default=c] "
|
||||
read -r resp__
|
||||
|
||||
if [ "$resp__" = "s" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Show a notification
|
||||
#
|
||||
# Details: nnn invokes this plugin to show notification when a cp/mv/rm operation is complete.
|
||||
#
|
||||
# Dependencies: notify-send (Ubuntu)/ntfy (https://github.com/dschep/ntfy)/osascript (macOS)/notify (Haiku)
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Anna Arad
|
||||
|
||||
OS="$(uname)"
|
||||
|
||||
if type notify-send >/dev/null 2>&1; then
|
||||
notify-send nnn "Done!"
|
||||
elif [ "$OS" = "Darwin" ]; then
|
||||
osascript -e 'display notification "Done!" with title "nnn"'
|
||||
elif type ntfy >/dev/null 2>&1; then
|
||||
ntfy -t nnn send "Done!"
|
||||
elif [ "$OS" = "Haiku" ]; then
|
||||
notify --title "nnn" "Done!"
|
||||
fi
|
|
@ -0,0 +1,74 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Navigate to directory using jump/autojump/zoxide/z
|
||||
#
|
||||
# Dependencies:
|
||||
# - jump - https://github.com/gsamokovarov/jump
|
||||
# - OR autojump - https://github.com/wting/autojump
|
||||
# - OR zoxide - https://github.com/ajeetdsouza/zoxide
|
||||
# - OR z - https://github.com/rupa/z (z requires fzf)
|
||||
# - OR z (fish) - https://github.com/jethrokuan/z (z requires fzf)
|
||||
# - OR z.lua - https://github.com/skywind3000/z.lua (z.lua can enhanced with fzf)
|
||||
#
|
||||
# Note: The dependencies STORE NAVIGATION PATTERNS
|
||||
#
|
||||
# to make z.lua work, you need to set $NNN_ZLUA to the path of script z.lua
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Authors: Marty Buchaus, Dave Snider, Tim Adler, Nick Waywood
|
||||
|
||||
if [ ! -p "$NNN_PIPE" ]; then
|
||||
printf 'ERROR: NNN_PIPE is not set!'
|
||||
read -r _
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if type jump >/dev/null 2>&1; then
|
||||
printf "jump to : "
|
||||
IFS= read -r line
|
||||
# shellcheck disable=SC2086
|
||||
odir="$(jump cd ${line})"
|
||||
printf "%s" "0c$odir" > "$NNN_PIPE"
|
||||
elif type autojump >/dev/null 2>&1; then
|
||||
printf "jump to : "
|
||||
read -r dir
|
||||
odir="$(autojump "$dir")"
|
||||
printf "%s" "0c$odir" > "$NNN_PIPE"
|
||||
elif type zoxide >/dev/null 2>&1; then
|
||||
if type fzf >/dev/null 2>&1; then
|
||||
odir="$(zoxide query -i --)"
|
||||
printf "%s" "0c$odir" > "$NNN_PIPE"
|
||||
else
|
||||
printf "jump to : "
|
||||
read -r dir
|
||||
odir="$(zoxide query -- "$dir")"
|
||||
printf "%s" "0c$odir" > "$NNN_PIPE"
|
||||
fi
|
||||
elif type lua >/dev/null 2>&1 && [ -n "$NNN_ZLUA" ]; then
|
||||
printf "jump to : "
|
||||
read -r line
|
||||
if type fzf >/dev/null 2>&1; then
|
||||
odir="$(lua "$NNN_ZLUA" -l "$line" | fzf --nth 2.. --reverse --inline-info --tac +s -e --height 35%)"
|
||||
printf "%s" "0c$(echo "$odir" | awk '{print $2}')" > "$NNN_PIPE"
|
||||
else
|
||||
odir="$(lua "$NNN_ZLUA" -e "$line")"
|
||||
printf "%s" "0c$odir" > "$NNN_PIPE"
|
||||
fi
|
||||
else
|
||||
# rupa/z uses $_Z_DATA, jethrokuan/z (=port of z for fish) uses $Z_DATA
|
||||
datafile="${_Z_DATA:-${Z_DATA:-$HOME/.z}}"
|
||||
if type fzf >/dev/null 2>&1 && [ -f "$datafile" ]; then
|
||||
# Read the data from z's file instead of calling
|
||||
# z so the data doesn't need to be processed twice
|
||||
sel=$(awk -F "|" '{print $1}' "$datafile" | fzf | awk '{$1=$1};1')
|
||||
|
||||
# NOTE: Uncomment this line and comment out the line above if
|
||||
# you want to see the weightings of the dir's in the fzf pane
|
||||
# sel=$(awk -F "|" '{printf "%s %s\n", $2, $1}' "$datafile" | fzf | sed 's/^[0-9,.]* *//' | awk '{$1=$1};1')
|
||||
|
||||
printf "%s" "0c$sel" > "$NNN_PIPE"
|
||||
else
|
||||
printf "No supported autojump script [jump/autojump/zoxide/z (needs fzf)] found"
|
||||
read -r _
|
||||
fi
|
||||
fi
|
|
@ -0,0 +1,50 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Play random music (MP3, FLAC, M4A, WEBM, WMA) from current dir.
|
||||
#
|
||||
# Dependencies: mocp (or custom)
|
||||
#
|
||||
# Note: You may want to set GUIPLAYER.
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
GUIPLAYER="${GUIPLAYER:-""}"
|
||||
NUMTRACKS="${NUMTRACKS:-100}"
|
||||
|
||||
if [ -n "$GUIPLAYER" ]; then
|
||||
find . -type f \( -iname "*.mp3" -o -iname "*.flac" -o -iname "*.m4a" -o -iname "*.webm" -o -iname "*.wma" \) | shuf -n "$NUMTRACKS" | xargs -d "\n" "$GUIPLAYER" > /dev/null 2>&1 &
|
||||
|
||||
# detach the player
|
||||
sleep 1
|
||||
elif type mocp >/dev/null 2>&1; then
|
||||
cmd=$(pgrep -x mocp 2>/dev/null)
|
||||
ret=$cmd
|
||||
|
||||
if [ -z "$ret" ]; then
|
||||
# start MOC server
|
||||
mocp -S
|
||||
mocp -o shuffle
|
||||
else
|
||||
# mocp running, check if it's playing
|
||||
state=$(mocp -i | grep "State:" | cut -d' ' -f2)
|
||||
if [ "$state" = 'PLAY' ]; then
|
||||
# add up to 100 random audio files
|
||||
find . -type f \( -iname "*.mp3" -o -iname "*.flac" -o -iname "*.m4a" -o -iname "*.webm" -o -iname "*.wma" \) | head -n "$NUMTRACKS" | xargs -d "\n" mocp -a
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
# clear MOC playlist
|
||||
mocp -c
|
||||
mocp -o shuffle
|
||||
|
||||
# add up to 100 random audio files
|
||||
find . -type f \( -iname "*.mp3" -o -iname "*.flac" -o -iname "*.m4a" -o -iname "*.webm" -o -iname "*.wma" \) | head -n "$NUMTRACKS" | xargs -d "\n" mocp -a
|
||||
|
||||
# start playing
|
||||
mocp -p
|
||||
else
|
||||
printf "moc missing"
|
||||
read -r _
|
||||
fi
|
|
@ -0,0 +1,32 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Allows for creation of multiple files/dirs simultaneously
|
||||
# Creates a tmp file to write each entry in a separate line
|
||||
#
|
||||
# Note: Only relative paths are supported. Absolute paths are ignored
|
||||
# Leading and trailing whitespace in path names is also ignored
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: KlzXS
|
||||
|
||||
EDITOR="${EDITOR:-vi}"
|
||||
TMPDIR="${TMPDIR:-/tmp}"
|
||||
|
||||
printf "'f'ile / 'd'ir? "
|
||||
read -r resp
|
||||
|
||||
if [ "$resp" = "f" ]; then
|
||||
#shellcheck disable=SC2016
|
||||
cmd='mkdir -p "$(dirname "{}")" && touch "{}"'
|
||||
elif [ "$resp" = "d" ]; then
|
||||
cmd='mkdir -p {}'
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
tmpfile=$(mktemp "$TMPDIR/.nnnXXXXXX")
|
||||
$EDITOR "$tmpfile"
|
||||
|
||||
sed "/^\//d" "$tmpfile" | xargs -n1 -I{} sh -c "$cmd"
|
||||
|
||||
rm "$tmpfile"
|
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: 'cd' to the directory from CDPATH
|
||||
#
|
||||
# Details: If the CDPATH environment variable is not set, the default value of
|
||||
# ${XDG_CONFIG_HOME:-$HOME/.config}/nnn/bookmarks will be used.
|
||||
# You can create this directory and fill it with symbolic links to your
|
||||
# favorite directories. It's a good idea to add it to CDPATH so that it
|
||||
# could also be used from the command line outside of nnn.
|
||||
# The fzf search is done on the directory basename (the first column).
|
||||
#
|
||||
# This plugin is an extended version of the bookmarks plugin.
|
||||
# If you set your CDPATH to ${XDG_CACHE_HOME:-$HOME/.cache}/nnn/bookmarks
|
||||
# or to the value of BOOKMARKS_DIR, you can use it as a bookmarks replacement.
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Yuri Kloubakov
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
. "$(dirname "$0")"/.nnn-plugin-helper
|
||||
|
||||
# Get a list of (symbolic links to) directories for every element of CDPATH
|
||||
get_dirs() {
|
||||
IFS=':'
|
||||
for path in $CDPATH; do
|
||||
for entry in "$path"/*; do
|
||||
if [ -d "$entry" ]; then
|
||||
name=$(basename "$entry" | grep -o '^.\{1,24\}')
|
||||
if [ -h "$entry" ]; then
|
||||
slink=$(ls -dl -- "$entry")
|
||||
entry=${slink#*" $entry -> "}
|
||||
fi
|
||||
printf "%-24s :%s\n" "${name}" "$entry"
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
abort() {
|
||||
echo "$1"
|
||||
read -r _
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ -z "$CDPATH" ]; then
|
||||
CDPATH="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/bookmarks"
|
||||
[ -d "$CDPATH" ] || abort "CDPATH is not set and there is no \"$CDPATH\" directory"
|
||||
fi
|
||||
|
||||
dir_list=$(get_dirs)
|
||||
[ -n "$dir_list" ] || abort "There are no directories to choose from. Check your \"$CDPATH\"."
|
||||
|
||||
dir=$(echo "$dir_list" | fzf --nth=1 --delimiter=':' | awk -F: 'END { print $2 }')
|
||||
if [ -n "$dir" ]; then
|
||||
nnn_cd "$dir" 0
|
||||
fi
|
|
@ -0,0 +1,75 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Create and verify checksums
|
||||
#
|
||||
# Note: On macOS, install the relevant checksum packages from Homebrew with:
|
||||
# brew install coreutils
|
||||
#
|
||||
# Details:
|
||||
# - selection: it will generate one file with the checksums and filenames
|
||||
# (and with paths if they are in another directory)
|
||||
# output checksum filename format: checksum_timestamp.checksum_type
|
||||
# - file: if the file is a checksum, the plugin does the verification
|
||||
# if the file is not a checksum, checksum will be generated for it
|
||||
# the output checksum filename will be filename.checksum_type
|
||||
# - directory: recursively calculates checksum for all the files in the dir
|
||||
# the output checksum filename will be directory.checksum_type
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Authors: ath3, Arun Prakash Jana
|
||||
|
||||
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
resp=f
|
||||
chsum=md5
|
||||
|
||||
checksum_type()
|
||||
{
|
||||
echo "possible checksums: md5, sha1, sha224, sha256, sha384, sha512"
|
||||
printf "create md5 (m), sha256 (s), sha512 (S) (or type one of the above checksums) [default=m]: "
|
||||
read -r chsum_resp
|
||||
for chks in md5 sha1 sha224 sha256 sha384 sha512
|
||||
do
|
||||
if [ "$chsum_resp" = "$chks" ]; then
|
||||
chsum=$chsum_resp
|
||||
return
|
||||
fi
|
||||
done
|
||||
if [ "$chsum_resp" = "s" ]; then
|
||||
chsum=sha256
|
||||
elif [ "$chsum_resp" = "S" ]; then
|
||||
chsum=sha512
|
||||
fi
|
||||
}
|
||||
|
||||
if [ -s "$selection" ]; then
|
||||
printf "work with selection (s) or current file (f) [default=f]: "
|
||||
read -r resp
|
||||
fi
|
||||
|
||||
if [ "$resp" = "s" ]; then
|
||||
checksum_type
|
||||
sed 's|'"$PWD/"'||g' < "$selection" | xargs -0 -I{} ${chsum}sum {} > "checksum_$(date '+%Y%m%d%H%M').$chsum"
|
||||
|
||||
# Clear selection
|
||||
if [ -p "$NNN_PIPE" ]; then
|
||||
printf "-" > "$NNN_PIPE"
|
||||
fi
|
||||
elif [ -n "$1" ]; then
|
||||
if [ -f "$1" ]; then
|
||||
for chks in md5 sha1 sha224 sha256 sha384 sha512
|
||||
do
|
||||
if echo "$1" | grep -q \.${chks}$; then
|
||||
${chks}sum -c < "$1"
|
||||
read -r _
|
||||
exit
|
||||
fi
|
||||
done
|
||||
checksum_type
|
||||
file=$(basename "$1").$chsum
|
||||
${chsum}sum "$1" > "$file"
|
||||
elif [ -d "$1" ]; then
|
||||
checksum_type
|
||||
file=$(basename "$1").$chsum
|
||||
find "$1" -type f -exec ${chsum}sum "{}" + > "$file"
|
||||
fi
|
||||
fi
|
|
@ -0,0 +1,80 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Add selection or hovered file/directory to cmus queue
|
||||
#
|
||||
# Dependencies: cmus, pgrep, xdotool (optional)
|
||||
#
|
||||
# Notes:
|
||||
# 1. If adding selection, files/dirs are added in the same order they were selected in nnn
|
||||
# 2. A new window will be opened if cmus is not running already, playback will start immediately
|
||||
# 3. If cmus is already running, files will be appended to the queue with no forced playback
|
||||
#
|
||||
# TODO:
|
||||
# 1. Add cava and cmus-lyrics as optional dependencies
|
||||
# 2. Start cava and/or cmus-lyrics in tmux or kitty panes next to cmus
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Kabouik
|
||||
|
||||
# (Optional) Set preferred terminal emulator for cmus if not set in your env,
|
||||
# or leave commented out to use OS default
|
||||
#TERMINAL="kitty"
|
||||
|
||||
if ! type cmus >/dev/null; then
|
||||
printf "cmus missing"
|
||||
read -r _
|
||||
exit 1
|
||||
fi
|
||||
|
||||
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
|
||||
start_cmus() {
|
||||
type xdotool >/dev/null && nnnwindow="$(xdotool getactivewindow)"
|
||||
case "$TERMINAL" in
|
||||
kitty | gnome-terminal | st)
|
||||
nohup "$TERMINAL" -- cmus & ;;
|
||||
havoc)
|
||||
nohup "$TERMINAL" cmus & ;;
|
||||
"")
|
||||
nohup x-terminal-emulator -e cmus & ;;
|
||||
*)
|
||||
nohup "$TERMINAL" -e cmus & ;;
|
||||
esac
|
||||
# Give the new terminal some time to open
|
||||
until cmus-remote -C; do sleep 0.1; done
|
||||
[ -n "$nnnwindow" ] && xdotool windowactivate "$nnnwindow"
|
||||
} >/dev/null 2>&1
|
||||
|
||||
fill_queue() {
|
||||
if [ "$REPLY" = "s" ]; then
|
||||
xargs < "$selection" -0 cmus-remote -q
|
||||
elif [ -n "$1" ]; then
|
||||
cmus-remote -q "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
# If active selection,then ask what to do
|
||||
if [ -s "$selection" ]; then
|
||||
printf "Queue [s]election or [c]urrently hovered? [default=c]: "
|
||||
read -r REPLY
|
||||
fi
|
||||
|
||||
# If cmus is not running, start and play queue
|
||||
if ! pgrep cmus >/dev/null; then
|
||||
printf "cmus is not running, starting it in a new %s window.\n" "$TERMINAL"
|
||||
start_cmus
|
||||
fill_queue "$1"
|
||||
cmus-remote -p
|
||||
printf "Files added to cmus queue.\n"
|
||||
else # Append to existing queue if cmus is already running
|
||||
fill_queue "$1"
|
||||
printf "Files appended to current cmus queue.\n"
|
||||
fi
|
||||
|
||||
# Change view
|
||||
cmus-remote -C "view 4"
|
||||
|
||||
# Clear selection
|
||||
if [ -p "$NNN_PIPE" ]; then
|
||||
printf "-" > "$NNN_PIPE"
|
||||
fi
|
|
@ -0,0 +1,62 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Show diff of 2 directories or multiple files in vimdiff
|
||||
#
|
||||
# Notes:
|
||||
# 1. vim may show the warning: 'Vim: Warning: Input is not from a terminal'
|
||||
# press 'Enter' to ignore and proceed.
|
||||
# 2. if only one file is in selection, the hovered file is considered as the
|
||||
# second file to diff with
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Authors: Arun Prakash Jana, ath3
|
||||
|
||||
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
|
||||
if type nvim >/dev/null 2>&1; then
|
||||
diffcmd="nvim -d"
|
||||
else
|
||||
diffcmd="vimdiff +0"
|
||||
fi
|
||||
|
||||
dirdiff() {
|
||||
dir1=$(mktemp "${TMPDIR:-/tmp}"/nnn-"$(basename "$1")".XXXXXXXX)
|
||||
dir2=$(mktemp "${TMPDIR:-/tmp}"/nnn-"$(basename "$2")".XXXXXXXX)
|
||||
ls -A1 "$1" > "$dir1"
|
||||
ls -A1 "$2" > "$dir2"
|
||||
$diffcmd "$dir1" "$dir2"
|
||||
rm "$dir1" "$dir2"
|
||||
}
|
||||
|
||||
if [ -s "$selection" ]; then
|
||||
arr=$(tr '\0' '\n' < "$selection")
|
||||
if [ "$(echo "$arr" | wc -l)" -gt 1 ]; then
|
||||
f1="$(echo "$arr" | sed -n '1p')"
|
||||
f2="$(echo "$arr" | sed -n '2p')"
|
||||
if [ -d "$f1" ] && [ -d "$f2" ]; then
|
||||
dirdiff "$f1" "$f2"
|
||||
else
|
||||
# If xargs supports the -o option, use it to get rid of:
|
||||
# Vim: Warning: Input is not from a terminal
|
||||
# xargs -0 -o vimdiff < $selection
|
||||
|
||||
eval xargs -0 "$diffcmd" < "$selection"
|
||||
fi
|
||||
elif [ -n "$1" ]; then
|
||||
f1="$(echo "$arr" | sed -n '1p')"
|
||||
if [ -d "$f1" ] && [ -d "$1" ]; then
|
||||
dirdiff "$f1" "$1"
|
||||
elif [ -f "$f1" ] && [ -f "$1" ]; then
|
||||
$diffcmd "$f1" "$1"
|
||||
else
|
||||
echo "cannot compare file with directory"
|
||||
fi
|
||||
else
|
||||
echo "needs at least 2 files or directories selected for comparison"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Clear selection
|
||||
if [ -p "$NNN_PIPE" ]; then
|
||||
printf "-" > "$NNN_PIPE"
|
||||
fi
|
|
@ -0,0 +1,77 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Open a Drag and drop window, to drop files onto other programs.
|
||||
# Also provides drag and drop window for files.
|
||||
#
|
||||
# Dependencies: dragon - https://github.com/mwh/dragon
|
||||
#
|
||||
# Notes:
|
||||
# 1. Files that are dropped will be added to nnn's selection
|
||||
# Some web-based files will be downloaded to current dir
|
||||
# with curl and it may overwrite some existing files
|
||||
# 2. The user has to mm to clear nnn's selection first
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: 0xACE
|
||||
|
||||
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
resp=f
|
||||
all=
|
||||
if type dragon-drag-and-drop >/dev/null 2>&1; then
|
||||
dnd="dragon-drag-and-drop"
|
||||
elif type dragon-drop >/dev/null 2>&1; then
|
||||
dnd="dragon-drop"
|
||||
else
|
||||
dnd="dragon"
|
||||
fi
|
||||
|
||||
add_file ()
|
||||
{
|
||||
printf '%s\0' "$@" >> "$selection"
|
||||
}
|
||||
|
||||
use_all ()
|
||||
{
|
||||
printf "mark --all (a) [default=none]: "
|
||||
read -r resp
|
||||
if [ "$resp" = "a" ]; then
|
||||
all="--all"
|
||||
else
|
||||
all=""
|
||||
fi
|
||||
}
|
||||
|
||||
if [ -s "$selection" ]; then
|
||||
printf "Drop file (r). Drag selection (s), Drag current directory (d) or drag current file (f) [default=f]: "
|
||||
read -r resp
|
||||
else
|
||||
printf "Drop file (r). Drag current directory (d) or drag current file (f) [default=f]: "
|
||||
read -r resp
|
||||
if [ "$resp" = "s" ]; then
|
||||
resp=f
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$resp" = "s" ]; then
|
||||
use_all
|
||||
sed -z 's|'"$PWD/"'||g' < "$selection" | xargs -0 "$dnd" "$all" &
|
||||
elif [ "$resp" = "d" ]; then
|
||||
use_all
|
||||
"$dnd" "$all" "$PWD/"* &
|
||||
elif [ "$resp" = "r" ]; then
|
||||
true > "$selection"
|
||||
"$dnd" --print-path --target | while read -r f
|
||||
do
|
||||
if printf "%s" "$f" | grep '^\(https\?\|ftps\?\|s\?ftp\):\/\/' ; then
|
||||
curl -LJO "$f"
|
||||
add_file "$PWD/$(basename "$f")"
|
||||
elif [ -e "$f" ]; then
|
||||
add_file "$f"
|
||||
fi
|
||||
done &
|
||||
else
|
||||
if [ -n "$1" ] && [ -e "$1" ]; then
|
||||
"$dnd" "$1" &
|
||||
fi
|
||||
fi
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: List non-empty duplicates in the current dir (based on size followed by MD5)
|
||||
#
|
||||
# Source: https://www.commandlinefu.com/commands/view/3555/find-duplicate-files-based-on-size-first-then-md5-hash
|
||||
#
|
||||
# Dependencies: find md5sum sort uniq xargs gsed
|
||||
#
|
||||
# Notes:
|
||||
# 1. If the file size exceeds $size_digits digits the file will be misplaced
|
||||
# 12 digits fit files up to 931GiB
|
||||
# 2. Bash compatible required for mktemp
|
||||
#
|
||||
# Shell: Bash
|
||||
# Authors: syssyphus, KlzXS
|
||||
|
||||
EDITOR="${EDITOR:-vi}"
|
||||
TMPDIR="${TMPDIR:-/tmp}"
|
||||
|
||||
size_digits=12
|
||||
tmpfile=$(mktemp "$TMPDIR/.nnnXXXXXX")
|
||||
|
||||
printf "\
|
||||
## This is an overview of all duplicate files found.
|
||||
## Comment out the files you wish to remove. You will be given an option to cancel.
|
||||
## Lines with double comments (##) are ignored.
|
||||
## You will have the option to remove the files with force or interactively.\n
|
||||
" > "$tmpfile"
|
||||
|
||||
# shellcheck disable=SC2016
|
||||
find . -size +0 -type f -printf "%${size_digits}s %p\n" | sort -rn | uniq -w"${size_digits}" -D | sed -e '
|
||||
s/^ \{0,12\}\([0-9]\{0,12\}\) \(.*\)$/printf "%s %s\\n" "$(md5sum "\2")" "d\1"/
|
||||
' | tr '\n' '\0' | xargs -0 -n1 sh -c | sort | { uniq -w32 --all-repeated=separate; echo; } | sed -ne '
|
||||
h
|
||||
s/^\(.\{32\}\).* d\([0-9]*\)$/## md5sum: \1 size: \2 bytes/p
|
||||
g
|
||||
|
||||
:loop
|
||||
N
|
||||
/.*\n$/!b loop
|
||||
p' | sed -e 's/^.\{32\} \(.*\) d[0-9]*$/\1/' >> "$tmpfile"
|
||||
|
||||
"$EDITOR" "$tmpfile"
|
||||
|
||||
printf "Remove commented files? (yes/no) [default=n]: "
|
||||
read -r commented
|
||||
|
||||
if [ "$commented" = "y" ]; then
|
||||
sedcmd="/^##.*/d; /^[^#].*/d; /^$/d; s/^# *\(.*\)$/\1/"
|
||||
else
|
||||
printf "Press any key to exit"
|
||||
read -r _
|
||||
exit
|
||||
fi
|
||||
|
||||
printf "Remove with force or interactive? (f/i) [default=i]: "
|
||||
read -r force
|
||||
|
||||
if [ "$force" = "f" ]; then
|
||||
#shellcheck disable=SC2016
|
||||
sed -e "$sedcmd" "$tmpfile" | tr '\n' '\0' | xargs -0 -r sh -c 'rm -f "$0" "$@" </dev/tty'
|
||||
else
|
||||
#shellcheck disable=SC2016
|
||||
sed -e "$sedcmd" "$tmpfile" | tr '\n' '\0' | xargs -0 -r sh -c 'rm -i "$0" "$@" </dev/tty'
|
||||
fi
|
||||
|
||||
rm "$tmpfile"
|
||||
|
||||
printf "Press any key to exit"
|
||||
read -r _
|
|
@ -0,0 +1,89 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Description: Run custom search and list results in smart context
|
||||
#
|
||||
# Note: This plugin retains search history
|
||||
#
|
||||
# Usage:
|
||||
# Run plugin and enter e.g. "-size +10M" to list files in current
|
||||
# directory larger than 10M. By default entered expressions are
|
||||
# interpreted as arguments to find. Results have to be NUL
|
||||
# terminated which is done by default for find. Alternatively one
|
||||
# can prepend a '$' to run a custom search program such as fd or
|
||||
# ripgrep. Entered expressions will be saved in history file to
|
||||
# be listed as bookmarks and and can be entered by index and edited.
|
||||
#
|
||||
# Shell: Bash
|
||||
# Author: Arun Prakash Jana, Luuk van Baal
|
||||
TMPDIR="${TMPDIR:-/tmp}"
|
||||
NNN_FINDHIST="${NNN_FINDHIST:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/finderbms}"
|
||||
NNN_FINDHISTLEN="${NNN_FINDHISTLEN:-10000}"
|
||||
|
||||
printexamples() {
|
||||
printf -- "-maxdepth 1 -name pattern
|
||||
-maxdepth 1 -size +100M
|
||||
\$fd -0 pattern
|
||||
\$fd -0 -d 2 -S +100M
|
||||
\$grep -rlZ pattern
|
||||
\$rg -l0 pattern
|
||||
\$fzf -m | tr '\\\n' '\\\0'\n"
|
||||
}
|
||||
|
||||
printexprs() {
|
||||
for ((i = "$1"; i < ${#fexprs[@]}; i++)); do
|
||||
printf '%s\t%s\n' "$((i + 1))" "${fexprs[$i]}"
|
||||
done
|
||||
}
|
||||
|
||||
mapexpr() {
|
||||
if [ "$fexpr" -eq "$fexpr" ] 2>/dev/null; then
|
||||
fexpr=${fexprs[$((fexpr - 1))]}
|
||||
read -r -e -p "Search expression: " -i "$fexpr" fexpr
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
readexpr() {
|
||||
case "$fexpr" in
|
||||
h) clear
|
||||
printf "Examples:\n"
|
||||
mapfile -t fexprs < <(printexamples)
|
||||
printexprs 0
|
||||
read -r -p "Search expression or index: " fexpr
|
||||
mapexpr
|
||||
[ -n "$fexpr" ] && readexpr ;;
|
||||
\$*) cmd="${fexpr:1}" ;;
|
||||
*) mapexpr && readexpr
|
||||
cmd="find $fexpr -print0" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
clear
|
||||
[ -f "$NNN_FINDHIST" ] || printexamples > "$NNN_FINDHIST"
|
||||
|
||||
mapfile -t fexprs < <(sort "$NNN_FINDHIST" | uniq -c | sort -nr | head -n5 |\
|
||||
awk '{for (i=2; i<NF; i++) printf $i " "; print $NF}')
|
||||
printf "Most used search expressions:\n"
|
||||
printexprs 0
|
||||
|
||||
mapfile -t -O"$i" fexprs < <(tac "$NNN_FINDHIST" | awk '!a[$0]++' | head -n5)
|
||||
printf "Most recently used search expressions:\n"
|
||||
printexprs "$i"
|
||||
read -r -p "Search expression or index (h for help): " fexpr
|
||||
|
||||
mapexpr
|
||||
|
||||
if [ -n "$fexpr" ]; then
|
||||
printf "+l" > "$NNN_PIPE"
|
||||
while :; do
|
||||
readexpr
|
||||
eval "$cmd" > "$NNN_PIPE" && break
|
||||
read -r -e -p "Search expression: " -i "$fexpr" fexpr
|
||||
done
|
||||
if [ -n "$fexpr" ]; then
|
||||
tail -n"$NNN_FINDHISTLEN" "$NNN_FINDHIST" > "$TMPDIR/finderbms"
|
||||
printf "%s\n" "$fexpr" >> "$TMPDIR/finderbms"
|
||||
mv "$TMPDIR/finderbms" "$NNN_FINDHIST"
|
||||
fi
|
||||
fi
|
|
@ -0,0 +1,75 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Description: Clean filename or dirname (either hovered or selections)
|
||||
# to be more shell-friendly. This script cleans
|
||||
# non A-Za-z0-9._- characters.
|
||||
# and replaces it with underscore (_).
|
||||
#
|
||||
# It supports cleaning single/double quote, newline,
|
||||
# leading, trailing spaces.
|
||||
#
|
||||
# eg.
|
||||
# to be continued (つづく).mp4 -> to_be_continued______.mp4
|
||||
# [work] stuff.txt -> _work__stuff.txt
|
||||
# home's server -> home_s_server
|
||||
# qwe\trty -> __qwe_rty
|
||||
#
|
||||
# And if there are two almost similar filenames
|
||||
# like: 'asd]f' and 'asd f' both will be renamed to 'asd_f',
|
||||
# to avoid overwriting, the last file will be prepended by _.
|
||||
# So they will be: 'asd_f' and '_asd_f'
|
||||
#
|
||||
# Dependencies: sed
|
||||
#
|
||||
# Shell: Bash
|
||||
# Author: Benawi Adha
|
||||
|
||||
prompt=true
|
||||
sel=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
|
||||
cleanup() {
|
||||
# printf "%s" "$1" | sed -e 's/[^A-Za-z0-9._-]/_/g'
|
||||
printf "%s" "$1" | sed 's/[^A-Za-z0-9._-]/_/g' | sed ':a;N;$!ba;s/\n/_/g'
|
||||
}
|
||||
|
||||
if [ -s "$sel" ]; then
|
||||
targets=()
|
||||
while IFS= read -r -d '' i || [ -n "$i" ]; do
|
||||
targets+=( "$(basename "$i")" )
|
||||
done < "$sel"
|
||||
else
|
||||
targets=("$1")
|
||||
fi
|
||||
|
||||
for i in "${targets[@]}"; do
|
||||
printf "%s -> %s\n" "$i" "$(cleanup "$i")";
|
||||
done
|
||||
|
||||
if $prompt; then
|
||||
echo
|
||||
printf "Proceed [Yn]? "
|
||||
read -r input
|
||||
case "$input" in
|
||||
y|Y|'')
|
||||
;;
|
||||
*)
|
||||
echo "Canceled"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
for i in "${targets[@]}"; do
|
||||
if [ "$i" != "$(cleanup "$i")" ]; then
|
||||
tmp=''
|
||||
if [ -e "$(cleanup "$i")" ]; then
|
||||
tmp='_'
|
||||
fi
|
||||
mv "$i" "$tmp$(cleanup "$i")";
|
||||
fi
|
||||
done
|
||||
|
||||
# Clear selection
|
||||
if [ -s "$sel" ] && [ -p "$NNN_PIPE" ]; then
|
||||
printf "-" > "$NNN_PIPE"
|
||||
fi
|
|
@ -0,0 +1,89 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Fuzzy search multiple locations read-in from a path-list file
|
||||
# (or $PWD) and open the selected file's dir in a smart context.
|
||||
# Dependencies: fzf, find (only for multi-location search)
|
||||
#
|
||||
# Details: Paths in list file should be newline-separated absolute paths.
|
||||
# Paths can be file paths; the script will scan the parent dirs.
|
||||
#
|
||||
# The path-list file precedence is:
|
||||
# - "$1" (the hovered file) if it exists, is plain-text and the
|
||||
# first line points to an existing file
|
||||
# - "$LIST" if set below
|
||||
# - "$2" (the current directory) [mimics plugin fzcd behaviour]
|
||||
#
|
||||
# The path-list file can be generated easily:
|
||||
# - pick the (file)paths in picker mode to path-list file
|
||||
# - OR, edit selection in nnn and save as path-list file
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Anna Arad, Arun Prakash Jana, KlzXS
|
||||
|
||||
IFS="$(printf '\n\r')"
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
. "$(dirname "$0")"/.nnn-plugin-helper
|
||||
|
||||
CTX=+
|
||||
LIST="${LIST:-""}"
|
||||
|
||||
if ! type fzf >/dev/null 2>&1; then
|
||||
printf "fzf missing"
|
||||
read -r _
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -n "$1" ] && [ "$(file -b --mime-type "$1")" = 'text/plain' ] && [ -e "$(head -1 "$1")" ]; then
|
||||
LIST="$1"
|
||||
elif ! [ -s "$LIST" ]; then
|
||||
sel=$(fzf)
|
||||
# Show only the file and parent dir
|
||||
# sel=$(fzf --delimiter / --with-nth=-2,-1 --tiebreak=begin --info=hidden)
|
||||
|
||||
LIST=''
|
||||
fi
|
||||
|
||||
if [ -n "$LIST" ]; then
|
||||
if type find >/dev/null 2>&1; then
|
||||
tmpfile=$(mktemp /tmp/abc-script.XXXXXX)
|
||||
|
||||
while IFS= read -r path; do
|
||||
if [ -d "$path" ]; then
|
||||
printf "%s\n" "$path" >> "$tmpfile"
|
||||
elif [ -f "$path" ]; then
|
||||
printf "%s\n" "$(dirname "$path")" >> "$tmpfile"
|
||||
fi
|
||||
done < "$LIST"
|
||||
|
||||
sel=$(xargs -d '\n' < "$tmpfile" -I{} find {} -type f -printf "%H//%P\n" | sed '/.*\/\/\(\..*\|.*\/\..*\)/d; s:/\+:/:g' | fzf --delimiter / --tiebreak=begin --info=hidden)
|
||||
# Alternative for 'fd'
|
||||
# sel=$(xargs -d '\n' < "$tmpfile" fd . | fzf --delimiter / --tiebreak=begin --info=hidden)
|
||||
|
||||
rm "$tmpfile"
|
||||
else
|
||||
printf "find missing"
|
||||
read -r _
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$sel" ]; then
|
||||
if [ "$sel" = "." ] || { ! [ -d "$sel" ] && ! [ -f "$sel" ]; }; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Check if the selected path returned by fzf command is absolute
|
||||
case $sel in
|
||||
/*) nnn_cd "$sel" "$CTX" ;;
|
||||
*)
|
||||
# Remove "./" prefix if it exists
|
||||
sel="${sel#./}"
|
||||
|
||||
if [ "$PWD" = "/" ]; then
|
||||
nnn_cd "/$sel" "$CTX"
|
||||
else
|
||||
nnn_cd "$PWD/$sel" "$CTX"
|
||||
fi;;
|
||||
esac
|
||||
fi
|
|
@ -0,0 +1,40 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Fuzzy find a command from history,
|
||||
# edit in $EDITOR and run as a command
|
||||
#
|
||||
# Note: Supports only bash and fish history
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
if type fzf >/dev/null 2>&1; then
|
||||
fuzzy=fzf
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
shellname="$(basename "$SHELL")"
|
||||
|
||||
if [ "$shellname" = "bash" ]; then
|
||||
hist_file="$HOME/.bash_history"
|
||||
entry="$("$fuzzy" < "$hist_file")"
|
||||
elif [ "$shellname" = "fish" ]; then
|
||||
hist_file="$HOME/.local/share/fish/fish_history"
|
||||
entry="$(grep "\- cmd: " "$hist_file" | cut -c 8- | "$fuzzy")"
|
||||
fi
|
||||
|
||||
if [ -n "$entry" ]; then
|
||||
tmpfile=$(mktemp)
|
||||
echo "$entry" >> "$tmpfile"
|
||||
$EDITOR "$tmpfile"
|
||||
|
||||
if [ -s "$tmpfile" ]; then
|
||||
$SHELL -c "$(cat "$tmpfile")"
|
||||
fi
|
||||
|
||||
rm "$tmpfile"
|
||||
|
||||
printf "Press any key to exit"
|
||||
read -r _
|
||||
fi
|
|
@ -0,0 +1,83 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Regular mode:
|
||||
# Fuzzy find a file in directory subtree.
|
||||
# Opens in $VISUAL or $EDITOR if text.
|
||||
# Opens other type of files with xdg-open.
|
||||
# Work only with a single file selected.
|
||||
#
|
||||
# Picker mode:
|
||||
# If picker mode output file is passed, it
|
||||
# will be overwritten with any picked files.
|
||||
# Leaves untouched if no file is picked.
|
||||
# Works with single/multiple files selected.
|
||||
#
|
||||
# Dependencies: fd/find, fzf/skim, xdg-open/open (on macOS)
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
NUKE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/nuke"
|
||||
USE_NUKE=0
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
. "$(dirname "$0")"/.nnn-plugin-helper
|
||||
|
||||
if type fzf >/dev/null 2>&1; then
|
||||
cmd="$FZF_DEFAULT_COMMAND"
|
||||
if type fd >/dev/null 2>&1; then
|
||||
[ -z "$cmd" ] && cmd="fd -t f 2>/dev/null"
|
||||
else
|
||||
[ -z "$cmd" ] && cmd="find . -type f 2>/dev/null"
|
||||
fi
|
||||
entry="$(eval "$cmd" | fzf -m)"
|
||||
# To show only the file name
|
||||
# entry=$(find . -type f 2>/dev/null | fzf --delimiter / --with-nth=-1 --tiebreak=begin --info=hidden)
|
||||
elif type sk >/dev/null 2>&1; then
|
||||
entry=$(find . -type f 2>/dev/null | sk)
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check for picker mode
|
||||
if [ "$3" ]; then
|
||||
if [ "$entry" ]; then
|
||||
case "$entry" in
|
||||
/*) fullpath="$entry" ;;
|
||||
*) fullpath="$PWD/$entry" ;;
|
||||
esac
|
||||
if [ "-" = "$3" ]; then
|
||||
printf "%s\n" "$fullpath"
|
||||
else
|
||||
printf "%s\n" "$fullpath" > "$3"
|
||||
fi
|
||||
|
||||
# Tell `nnn` to clear its internal selection
|
||||
printf "%s" "0p" > "$NNN_PIPE"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$USE_NUKE" -ne 0 ]; then
|
||||
"$NUKE" "$entry"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Open the file (works for a single file only)
|
||||
cmd_file=""
|
||||
cmd_open=""
|
||||
if uname | grep -q "Darwin"; then
|
||||
cmd_file="file -bIL"
|
||||
cmd_open="open"
|
||||
else
|
||||
cmd_file="file -biL"
|
||||
cmd_open="xdg-open"
|
||||
fi
|
||||
|
||||
case "$($cmd_file "$entry")" in
|
||||
*text*)
|
||||
"${VISUAL:-$EDITOR}" "$entry" ;;
|
||||
*)
|
||||
$cmd_open "$entry" >/dev/null 2>&1 ;;
|
||||
esac
|
|
@ -0,0 +1,59 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Fuzzy find and execute nnn plugins (and optionally,
|
||||
# custom scripts located elsewhere).
|
||||
# Description and details of plugins can be previewed
|
||||
# from the fzf interface. Use `?` to toggle preview
|
||||
# pane on and off, ^Up/^Dn to scroll.
|
||||
#
|
||||
# Dependencies: find, fzf, cat (or bat, if installed)
|
||||
#
|
||||
# Note: For better compatibility with as many nnn plugins as possible,
|
||||
# fzplug will first execute the chosen script on the file hovered
|
||||
# in nnn, and upon failure, try to run it with no target (i.e on
|
||||
# an active selection, if present).
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Kabouik
|
||||
|
||||
# Optional scripts sources
|
||||
|
||||
# Leave blank or fill with the absolute path of a folder containing executable
|
||||
# scripts other than nnn plugins (e.g., "$HOME/.local/share/nautilus/scripts",
|
||||
# since there are numerous Nautilus script git repositories).
|
||||
# Add extra variables if needed, make sure you call them in the find command.
|
||||
|
||||
#CUSTOMDIR1="$HOME/.local/share/nautilus/scripts"
|
||||
CUSTOMDIR1=""
|
||||
CUSTOMDIR2=""
|
||||
|
||||
nnnpluginsdir="$HOME/.config/nnn/plugins"
|
||||
|
||||
# Preview with bat if installed
|
||||
if type bat >/dev/null; then
|
||||
BAT="bat --terminal-width='$(tput cols)' --decorations=always --color=always --style='${BAT_STYLE:-header,numbers}'"
|
||||
fi
|
||||
|
||||
plugin=$(find "$nnnpluginsdir" "$CUSTOMDIR1" "$CUSTOMDIR2" \
|
||||
-maxdepth 3 -perm -111 -type f 2>/dev/null | fzf --ansi --preview \
|
||||
"${BAT:-cat} {}" --preview-window="right:66%:wrap" --delimiter / \
|
||||
--with-nth -1 --bind="?:toggle-preview")
|
||||
|
||||
# Try running the script on the hovered file, and abort
|
||||
# abort if no plugin was selected (ESC or ^C pressed).
|
||||
err=0
|
||||
if ! [ "$plugin" = "" ]; then
|
||||
"$plugin" "$1" || err=1
|
||||
fi
|
||||
|
||||
# If attempt with hovered file fails, try without any target
|
||||
# (nnn selections should still be passed to the script in that case)
|
||||
if [ "$err" -eq "1" ]; then
|
||||
clear && "$plugin" || err=2
|
||||
fi
|
||||
|
||||
# Abort and show error if both fail
|
||||
if [ "$err" -eq "2" ]; then
|
||||
sep="\n---\n"
|
||||
printf "$sep""Failed to execute '%s'. See error above or try without fzfplug. Press return to continue. " "$plugin" && read -r _ && clear
|
||||
fi
|
|
@ -0,0 +1,70 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Update nnn plugins to installed nnn version
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Authors: Arun Prakash Jana, KlzXS
|
||||
|
||||
CONFIG_DIR=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/
|
||||
PLUGIN_DIR=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins
|
||||
|
||||
merge () {
|
||||
if type nvim >/dev/null 2>&1; then
|
||||
nvim -d "$1" "$2"
|
||||
else
|
||||
vimdiff +0 "$1" "$2"
|
||||
fi
|
||||
}
|
||||
|
||||
prompt () {
|
||||
printf "%s\n" "Plugin $1 already exists and is different."
|
||||
printf "Keep (k), merge (m), overwrite (o) [default: k]? "
|
||||
read -r operation
|
||||
|
||||
if [ "$operation" = "m" ]; then
|
||||
op="merge"
|
||||
elif [ "$operation" = "o" ]; then
|
||||
op="cp -vRf"
|
||||
else
|
||||
op="true"
|
||||
fi
|
||||
}
|
||||
|
||||
if [ "$1" = "master" ] ; then
|
||||
VER="master"
|
||||
ARCHIVE_URL=https://github.com/jarun/nnn/archive/master.tar.gz
|
||||
elif type nnn >/dev/null 2>&1; then
|
||||
VER=$(nnn -V)
|
||||
ARCHIVE_URL=https://github.com/jarun/nnn/releases/download/v"$VER"/nnn-v"$VER".tar.gz
|
||||
else
|
||||
echo "nnn is not installed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# backup any earlier plugins
|
||||
if [ -d "$PLUGIN_DIR" ]; then
|
||||
tar -C "$CONFIG_DIR" -czf "$CONFIG_DIR""plugins-$(date '+%Y%m%d%H%M').tar.gz" plugins/
|
||||
fi
|
||||
|
||||
mkdir -p "$PLUGIN_DIR"
|
||||
cd "$CONFIG_DIR" || exit 1
|
||||
curl -Ls "$ARCHIVE_URL" -o nnn-"$VER".tar.gz
|
||||
tar -zxf nnn-"$VER".tar.gz
|
||||
|
||||
cd nnn-"$VER"/plugins || exit 1
|
||||
|
||||
# shellcheck disable=SC2044
|
||||
# We do not use obnoxious names for plugins
|
||||
for f in $(find . -maxdepth 1 \( ! -iname "." ! -iname "*.md" \)); do
|
||||
if [ -f ../../plugins/"$f" ]; then
|
||||
if [ "$(diff --brief "$f" ../../plugins/"$f")" ]; then
|
||||
prompt "$f"
|
||||
$op "$f" ../../plugins/
|
||||
fi
|
||||
else
|
||||
cp -vRf "$f" ../../plugins/
|
||||
fi
|
||||
done
|
||||
cd ../.. || exit 1
|
||||
|
||||
rm -rf nnn-"$VER"/ nnn-"$VER".tar.gz
|
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: cd to the top level of the current git repository in the current context
|
||||
# Dependencies: git
|
||||
# Shell: sh
|
||||
# Author: https://github.com/PatrickF1
|
||||
|
||||
root="$(git rev-parse --show-toplevel 2>/dev/null)"
|
||||
if [ -n "$root" ]; then
|
||||
printf "%s" "0c$root" > "$NNN_PIPE"
|
||||
else
|
||||
printf "Not in a git repository"
|
||||
read -r _
|
||||
exit 1
|
||||
fi
|
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Decrypts selected files using gpg. The contents of the
|
||||
# decrypted file are stored in a file with extension .dec
|
||||
#
|
||||
# Note: If an appropriate private key cannot be found gpg silently
|
||||
# prints a message in the background and no files are written.
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: KlzXS
|
||||
|
||||
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
|
||||
printf "(s)election/(c)urrent? [default=c] "
|
||||
read -r resp
|
||||
|
||||
if [ "$resp" = "s" ]; then
|
||||
files=$(tr '\0' '\n' < "$selection")
|
||||
else
|
||||
files=$1
|
||||
fi
|
||||
|
||||
printf "%s" "$files" | xargs -n1 -I{} gpg --decrypt --output "{}.dec" {}
|
||||
|
||||
# Clear selection
|
||||
if [ "$resp" = "s" ] && [ -p "$NNN_PIPE" ]; then
|
||||
printf "-" > "$NNN_PIPE"
|
||||
fi
|
|
@ -0,0 +1,45 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Encrypts selected files using gpg. Can encrypt
|
||||
# asymmetrically (key) or symmetrically (passphrase).
|
||||
# If asymmetric encryption is chosen a key can be
|
||||
# chosen from the list of capable public keys using fzf.
|
||||
#
|
||||
# Note: Symmetric encryption only works for a single (current) file as per gpg limitations
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: KlzXS
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
. "$(dirname "$0")"/.nnn-plugin-helper
|
||||
|
||||
printf "(s)ymmetric, (a)symmetric? [default=a] "
|
||||
read -r symmetry
|
||||
|
||||
if [ "$symmetry" = "s" ]; then
|
||||
gpg --symmetric "$1"
|
||||
else
|
||||
if nnn_use_selection; then
|
||||
clear_sel=1
|
||||
# shellcheck disable=SC2154
|
||||
files=$(tr '\0' '\n' < "$selection")
|
||||
else
|
||||
clear_sel=0
|
||||
files=$1
|
||||
fi
|
||||
|
||||
keyids=$(gpg --list-public-keys --with-colons | grep -E "pub:(.*:){10}.*[eE].*:" | awk -F ":" '{print $5}')
|
||||
|
||||
#awk needs literal $10
|
||||
#shellcheck disable=SC2016
|
||||
keyuids=$(printf "%s" "$keyids" | xargs -n1 -I{} sh -c 'gpg --list-key --with-colons "{}" | grep "uid" | awk -F ":" '\''{printf "%s %s\n", "{}", $10}'\''')
|
||||
|
||||
recipient=$(printf "%s" "$keyuids" | fzf | awk '{print $1}')
|
||||
|
||||
printf "%s" "$files" | xargs -n1 gpg --encrypt --recipient "$recipient"
|
||||
|
||||
# Clear selection
|
||||
if [ "$clear_sel" -eq 1 ] && [ -p "$NNN_PIPE" ]; then
|
||||
printf "-" > "$NNN_PIPE"
|
||||
fi
|
||||
fi
|
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
#set -x
|
||||
# Description: Send the selected (or hovered) files to your Android device using gsconnect daemon.js.
|
||||
# GSConnect must be configured on the Android device and the PC.
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Darukutsu
|
||||
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
gsconnect=$HOME/.local/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/daemon.js
|
||||
ids=$($gsconnect -l)
|
||||
|
||||
for id in $ids; do
|
||||
if [ -s "$selection" ]; then
|
||||
xargs -0 < "$selection" -I{} "$gsconnect" -d "$id" --share-file="{}"
|
||||
# Clear selection
|
||||
printf "-" > "$NNN_PIPE"
|
||||
else
|
||||
"$gsconnect" -d "$id" --share-file="$2/$1"
|
||||
fi
|
||||
done
|
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Browse Project Gutenberg catalogue by popularity, then download
|
||||
# and read a book of your choice.
|
||||
#
|
||||
# Details: Set the variable EBOOK_ID to download in html format and read in w3m.
|
||||
# Clear EBOOK_ID to browse available ebooks by popularity and set it to
|
||||
# the ID once you find an interesting one.
|
||||
# To download and read in epub format set READER to an epub reader like
|
||||
# epr: https://github.com/wustho/epr
|
||||
#
|
||||
# More on EBOOK_ID:
|
||||
# Wuthering Heights by Emily Brontë is at https://www.gutenberg.org/ebooks/768
|
||||
# So EBOOK_ID would be 768
|
||||
#
|
||||
# Downloaded ebooks are at ${XDG_CACHE_HOME:-$HOME/.cache}/nnn/gutenbooks/
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
EBOOK_ID="${EBOOK_ID:-""}"
|
||||
DIR="${XDG_CACHE_HOME:-$HOME/.cache}/nnn/gutenbooks/$EBOOK_ID"
|
||||
BROWSE_LINK="https://www.gutenberg.org/ebooks/search/?sort_order=downloads"
|
||||
BROWSER="${BROWSER:-w3m}"
|
||||
READER="${READER:-""}"
|
||||
|
||||
if [ -n "$EBOOK_ID" ]; then
|
||||
if [ ! -e "$DIR" ]; then
|
||||
mkdir -p "$DIR"
|
||||
cd "$DIR" || exit 1
|
||||
|
||||
if [ -z "$READER" ]; then
|
||||
curl -L -O "https://www.gutenberg.org/files/$EBOOK_ID/$EBOOK_ID-h.zip"
|
||||
unzip "$EBOOK_ID"-h.zip
|
||||
else
|
||||
curl -L -o "$EBOOK_ID".epub "https://www.gutenberg.org/ebooks/$EBOOK_ID.epub.noimages"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -d "$DIR" ]; then
|
||||
if [ -z "$READER" ]; then
|
||||
"$BROWSER" "$DIR/$EBOOK_ID-h/$EBOOK_ID-h.htm"
|
||||
else
|
||||
"$READER" "$DIR/$EBOOK_ID.epub"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
"$BROWSER" "$BROWSE_LINK"
|
||||
fi
|
|
@ -0,0 +1,31 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Resize images in a directory to screen resolution with imgp
|
||||
#
|
||||
# Dependencipes: imgp - https://github.com/jarun/imgp
|
||||
#
|
||||
# Notes:
|
||||
# 1. Set res to avoid the desktop resolution prompt each time
|
||||
# 2. MINSIZE is set to 1MB by default, adjust it if you want
|
||||
# 3. imgp options used:
|
||||
# a - adaptive mode
|
||||
# c - convert PNG to JPG
|
||||
# k - skip images matching specified hres/vres
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
# set resolution (e.g. 1920x1080)
|
||||
res="${RESOLUTION}"
|
||||
|
||||
# set minimum image size (in bytes) to resize (default: 1MB)
|
||||
MINSIZE="${MINSIZE:-1048576}"
|
||||
|
||||
if [ -z "$res" ]; then
|
||||
printf "desktop resolution (hxv): "
|
||||
read -r res
|
||||
fi
|
||||
|
||||
if [ -n "$res" ] && [ -n "$MINSIZE" ]; then
|
||||
imgp -ackx "$res" -s "$MINSIZE"
|
||||
fi
|
|
@ -0,0 +1,597 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
##########################################################################
|
||||
# The MIT License
|
||||
#
|
||||
# Copyright (c) jomo
|
||||
#
|
||||
# Permission is hereby granted, free of charge,
|
||||
# to any person obtaining a copy of this software and
|
||||
# associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including
|
||||
# without limitation the rights to use, copy, modify,
|
||||
# merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom
|
||||
# the Software is furnished to do so,
|
||||
# subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice
|
||||
# shall be included in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
||||
# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
##########################################################################
|
||||
|
||||
# https://github.com/jomo/imgur-screenshot
|
||||
# https://help.imgur.com/hc/en-us/articles/209592766-Tools-for-Imgur
|
||||
#
|
||||
# Slightly modified for `nnn` integration
|
||||
#
|
||||
# Shell: Bash
|
||||
# Description: Upload an image file to imgur
|
||||
|
||||
if [ "${1}" = "--debug" ]; then
|
||||
echo "########################################"
|
||||
echo "Enabling debug mode"
|
||||
echo "Please remove credentials before pasting"
|
||||
echo "########################################"
|
||||
echo ""
|
||||
uname -a
|
||||
for arg in ${0} "${@}"; do
|
||||
echo -n "'${arg}' "
|
||||
done
|
||||
echo -e "\n"
|
||||
shift
|
||||
set -x
|
||||
fi
|
||||
|
||||
current_version="v1.7.4"
|
||||
|
||||
function is_mac() {
|
||||
uname | grep -q "Darwin"
|
||||
}
|
||||
|
||||
### IMGUR-SCREENSHOT DEFAULT CONFIG ####
|
||||
|
||||
# You can override the config in ~/.config/imgur-screenshot/settings.conf
|
||||
|
||||
imgur_anon_id="ea6c0ef2987808e"
|
||||
imgur_icon_path="${HOME}/Pictures/imgur.png"
|
||||
|
||||
imgur_acct_key=""
|
||||
imgur_secret=""
|
||||
login="false"
|
||||
album_title=""
|
||||
album_id=""
|
||||
credentials_file="${HOME}/.config/imgur-screenshot/credentials.conf"
|
||||
|
||||
file_name_format="imgur-%Y_%m_%d-%H:%M:%S.png" # when using scrot, must end with .png!
|
||||
file_dir="${HOME}/Pictures"
|
||||
|
||||
upload_connect_timeout="5"
|
||||
upload_timeout="120"
|
||||
upload_retries="1"
|
||||
|
||||
# shellcheck disable=SC2034
|
||||
if is_mac; then
|
||||
screenshot_select_command="screencapture -i %img"
|
||||
screenshot_window_command="screencapture -iWa %img"
|
||||
screenshot_full_command="screencapture %img"
|
||||
open_command="open %url"
|
||||
else
|
||||
screenshot_select_command="scrot -s %img"
|
||||
screenshot_window_command="scrot %img"
|
||||
screenshot_full_command="scrot %img"
|
||||
open_command="xdg-open %url"
|
||||
fi
|
||||
open="true"
|
||||
|
||||
mode="select"
|
||||
edit_command="gimp %img"
|
||||
edit="false"
|
||||
exit_on_album_creation_fail="true"
|
||||
|
||||
log_file="${HOME}/.imgur-screenshot.log"
|
||||
|
||||
auto_delete=""
|
||||
copy_url="true"
|
||||
keep_file="true"
|
||||
check_update="true"
|
||||
|
||||
# NOTICE: if you make changes here, also edit the docs at
|
||||
# https://github.com/jomo/imgur-screenshot/wiki/Config
|
||||
|
||||
# You can override the config in ~/.config/imgur-screenshot/settings.conf
|
||||
|
||||
############## END CONFIG ##############
|
||||
|
||||
settings_path="${HOME}/.config/imgur-screenshot/settings.conf"
|
||||
if [ -f "${settings_path}" ]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "${settings_path}"
|
||||
fi
|
||||
|
||||
# dependency check
|
||||
if [ "${1}" = "--check" ]; then
|
||||
(type grep &>/dev/null && echo "OK: found grep") || echo "ERROR: grep not found"
|
||||
if is_mac; then
|
||||
if type growlnotify &>/dev/null; then
|
||||
echo "OK: found growlnotify"
|
||||
elif type terminal-notifier &>/dev/null; then
|
||||
echo "OK: found terminal-notifier"
|
||||
else
|
||||
echo "ERROR: growlnotify nor terminal-notifier found"
|
||||
fi
|
||||
(type screencapture &>/dev/null && echo "OK: found screencapture") || echo "ERROR: screencapture not found"
|
||||
(type pbcopy &>/dev/null && echo "OK: found pbcopy") || echo "ERROR: pbcopy not found"
|
||||
else
|
||||
(type notify-send &>/dev/null && echo "OK: found notify-send") || echo "ERROR: notify-send (from libnotify-bin) not found"
|
||||
(type scrot &>/dev/null && echo "OK: found scrot") || echo "ERROR: scrot not found"
|
||||
(type xclip &>/dev/null && echo "OK: found xclip") || echo "ERROR: xclip not found"
|
||||
fi
|
||||
(type curl &>/dev/null && echo "OK: found curl") || echo "ERROR: curl not found"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
||||
# notify <'ok'|'error'> <title> <text>
|
||||
function notify() {
|
||||
if is_mac; then
|
||||
if type growlnotify &>/dev/null; then
|
||||
growlnotify --icon "${imgur_icon_path}" --iconpath "${imgur_icon_path}" --title "${2}" --message "${3}"
|
||||
else
|
||||
terminal-notifier -appIcon "${imgur_icon_path}" -contentImage "${imgur_icon_path}" -title "imgur: ${2}" -message "${3}"
|
||||
fi
|
||||
else
|
||||
if [ "${1}" = "error" ]; then
|
||||
notify-send -a ImgurScreenshot -u critical -c "im.error" -i "${imgur_icon_path}" -t 500 "imgur: ${2}" "${3}"
|
||||
else
|
||||
notify-send -a ImgurScreenshot -u low -c "transfer.complete" -i "${imgur_icon_path}" -t 500 "imgur: ${2}" "${3}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function take_screenshot() {
|
||||
echo "Please select area"
|
||||
is_mac || sleep 0.1 # https://bbs.archlinux.org/viewtopic.php?pid=1246173#p1246173
|
||||
|
||||
cmd="screenshot_${mode}_command"
|
||||
cmd=${!cmd//\%img/${1}}
|
||||
|
||||
if ! shot_err="$(${cmd} &>/dev/null)"; then #takes a screenshot with selection
|
||||
echo "Failed to take screenshot '${1}': '${shot_err}'. For more information visit https://github.com/jomo/imgur-screenshot/wiki/Troubleshooting" | tee -a "${log_file}"
|
||||
notify error "Something went wrong :(" "Information has been logged"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function check_for_update() {
|
||||
# exit non-zero on HTTP error, output only the body (no stats) but output errors, follow redirects, output everything to stdout
|
||||
remote_version="$(curl --compressed -fsSL --stderr - "https://api.github.com/repos/jomo/imgur-screenshot/releases" | grep -Em 1 --color 'tag_name":\s*".*"' | cut -d '"' -f 4)"
|
||||
if [ -n "$remote_version" ]; then
|
||||
if [ ! "${current_version}" = "${remote_version}" ] && [ -n "${current_version}" ] && [ -n "${remote_version}" ]; then
|
||||
echo "Update found!"
|
||||
echo "Version ${remote_version} is available (You have ${current_version})"
|
||||
notify ok "Update found" "Version ${remote_version} is available (You have ${current_version}). https://github.com/jomo/imgur-screenshot"
|
||||
echo "Check https://github.com/jomo/imgur-screenshot/releases/${remote_version} for more info."
|
||||
elif [ -z "${current_version}" ] || [ -z "${remote_version}" ]; then
|
||||
echo "Invalid empty version string"
|
||||
echo "Current (local) version: '${current_version}'"
|
||||
echo "Latest (remote) version: '${remote_version}'"
|
||||
else
|
||||
echo "Version ${current_version} is up to date."
|
||||
fi
|
||||
else
|
||||
echo "Failed to check for latest version: ${remote_version}"
|
||||
fi
|
||||
}
|
||||
|
||||
function check_oauth2_client_secrets() {
|
||||
if [ -z "${imgur_acct_key}" ] || [ -z "${imgur_secret}" ]; then
|
||||
echo "In order to upload to your account, register a new application at:"
|
||||
echo "https://api.imgur.com/oauth2/addclient"
|
||||
echo "Select 'OAuth 2 authorization without a callback URL'"
|
||||
echo "Then, set the imgur_acct_key (Client ID) and imgur_secret in your config."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function load_access_token() {
|
||||
token_expire_time=0
|
||||
# check for saved access_token and its expiration date
|
||||
if [ -f "${credentials_file}" ]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "${credentials_file}"
|
||||
fi
|
||||
current_time="$(date +%s)"
|
||||
preemptive_refresh_time="$((10*60))"
|
||||
expired="$((current_time > (token_expire_time - preemptive_refresh_time)))"
|
||||
if [ -n "${refresh_token}" ]; then
|
||||
# token already set
|
||||
if [ "${expired}" -eq "0" ]; then
|
||||
# token expired
|
||||
refresh_access_token "${credentials_file}"
|
||||
fi
|
||||
else
|
||||
acquire_access_token "${credentials_file}"
|
||||
fi
|
||||
}
|
||||
|
||||
function acquire_access_token() {
|
||||
check_oauth2_client_secrets
|
||||
# prompt for a PIN
|
||||
authorize_url="https://api.imgur.com/oauth2/authorize?client_id=${imgur_acct_key}&response_type=pin"
|
||||
echo "Go to"
|
||||
echo "${authorize_url}"
|
||||
echo "and grant access to this application."
|
||||
read -rp "Enter the PIN: " imgur_pin
|
||||
|
||||
if [ -z "${imgur_pin}" ]; then
|
||||
echo "PIN not entered, exiting"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# exchange the PIN for access token and refresh token
|
||||
response="$(curl --compressed -fsSL --stderr - \
|
||||
-F "client_id=${imgur_acct_key}" \
|
||||
-F "client_secret=${imgur_secret}" \
|
||||
-F "grant_type=pin" \
|
||||
-F "pin=${imgur_pin}" \
|
||||
https://api.imgur.com/oauth2/token)"
|
||||
save_access_token "${response}" "${1}"
|
||||
}
|
||||
|
||||
function refresh_access_token() {
|
||||
check_oauth2_client_secrets
|
||||
token_url="https://api.imgur.com/oauth2/token"
|
||||
# exchange the refresh token for access_token and refresh_token
|
||||
if ! response="$(curl --compressed -fsSL --stderr - \
|
||||
-F "client_id=${imgur_acct_key}" \
|
||||
-F "client_secret=${imgur_secret}" \
|
||||
-F "grant_type=refresh_token" \
|
||||
-F "refresh_token=${refresh_token}" \
|
||||
"${token_url}"
|
||||
)"; then
|
||||
# curl failed
|
||||
handle_upload_error "${response}" "${token_url}"
|
||||
exit 1
|
||||
fi
|
||||
save_access_token "${response}" "${1}"
|
||||
}
|
||||
|
||||
function save_access_token() {
|
||||
if ! grep -q "access_token" <<<"${1}"; then
|
||||
# server did not send access_token
|
||||
echo "Error: Something is wrong with your credentials:"
|
||||
echo "${1}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
access_token="$(grep -Eo 'access_token":".*"' <<<"${1}" | cut -d '"' -f 3)"
|
||||
refresh_token="$(grep -Eo 'refresh_token":".*"' <<<"${1}" | cut -d '"' -f 3)"
|
||||
expires_in="$(grep -Eo 'expires_in":[0-9]*' <<<"${1}" | cut -d ':' -f 2)"
|
||||
token_expire_time="$(( $(date +%s) + expires_in ))"
|
||||
|
||||
# create dir if not exist
|
||||
mkdir -p "$(dirname "${2}")" 2>/dev/null
|
||||
touch "${2}" && chmod 600 "${2}"
|
||||
cat <<EOF > "${2}"
|
||||
access_token="${access_token}"
|
||||
refresh_token="${refresh_token}"
|
||||
token_expire_time="${token_expire_time}"
|
||||
EOF
|
||||
}
|
||||
|
||||
function fetch_account_info() {
|
||||
response="$(curl --compressed --connect-timeout "${upload_connect_timeout}" -m "${upload_timeout}" --retry "${upload_retries}" -fsSL --stderr - -H "Authorization: Bearer ${access_token}" https://api.imgur.com/3/account/me)"
|
||||
if grep -Eq '"success":\s*true' <<<"${response}"; then
|
||||
username="$(grep -Eo '"url":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)"
|
||||
echo "Logged in as ${username}."
|
||||
echo "https://${username}.imgur.com"
|
||||
else
|
||||
echo "Failed to fetch info: ${response}"
|
||||
fi
|
||||
}
|
||||
|
||||
function delete_image() {
|
||||
response="$(curl --compressed -X DELETE -fsSL --stderr - -H "Authorization: Client-ID ${1}" "https://api.imgur.com/3/image/${2}")"
|
||||
if grep -Eq '"success":\s*true' <<<"${response}"; then
|
||||
echo "Image successfully deleted (delete hash: ${2})." >> "${3}"
|
||||
else
|
||||
echo "The Image could not be deleted: ${response}." >> "${3}"
|
||||
fi
|
||||
}
|
||||
|
||||
function upload_authenticated_image() {
|
||||
echo "Uploading '${1}'..."
|
||||
title="$(echo "${1}" | rev | cut -d "/" -f 1 | cut -d "." -f 2- | rev)"
|
||||
if [ -n "${album_id}" ]; then
|
||||
response="$(curl --compressed --connect-timeout "${upload_connect_timeout}" -m "${upload_timeout}" --retry "${upload_retries}" -fsSL --stderr - -F "title=${title}" -F "image=@\"${1}\"" -F "album=${album_id}" -H "Authorization: Bearer ${access_token}" https://api.imgur.com/3/image)"
|
||||
else
|
||||
response="$(curl --compressed --connect-timeout "${upload_connect_timeout}" -m "${upload_timeout}" --retry "${upload_retries}" -fsSL --stderr - -F "title=${title}" -F "image=@\"${1}\"" -H "Authorization: Bearer ${access_token}" https://api.imgur.com/3/image)"
|
||||
fi
|
||||
|
||||
# JSON parser premium edition (not really)
|
||||
if grep -Eq '"success":\s*true' <<<"${response}"; then
|
||||
img_id="$(grep -Eo '"id":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)"
|
||||
img_ext="$(grep -Eo '"link":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4 | rev | cut -d "." -f 1 | rev)" # "link" itself has ugly '\/' escaping and no https!
|
||||
del_id="$(grep -Eo '"deletehash":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)"
|
||||
|
||||
if [ -n "${auto_delete}" ]; then
|
||||
export -f delete_image
|
||||
echo "Deleting image in ${auto_delete} seconds."
|
||||
nohup /bin/bash -c "sleep ${auto_delete} && delete_image ${imgur_anon_id} ${del_id} ${log_file}" &
|
||||
fi
|
||||
|
||||
handle_upload_success "https://i.imgur.com/${img_id}.${img_ext}" "https://imgur.com/delete/${del_id}" "${1}"
|
||||
else # upload failed
|
||||
err_msg="$(grep -Eo '"error":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)"
|
||||
test -z "${err_msg}" && err_msg="${response}"
|
||||
handle_upload_error "${err_msg}" "${1}"
|
||||
fi
|
||||
}
|
||||
|
||||
function upload_anonymous_image() {
|
||||
echo "Uploading '${1}'..."
|
||||
title="$(echo "${1}" | rev | cut -d "/" -f 1 | cut -d "." -f 2- | rev)"
|
||||
if [ -n "${album_id}" ]; then
|
||||
response="$(curl --compressed --connect-timeout "${upload_connect_timeout}" -m "${upload_timeout}" --retry "${upload_retries}" -fsSL --stderr - -H "Authorization: Client-ID ${imgur_anon_id}" -F "title=${title}" -F "image=@\"${1}\"" -F "album=${album_id}" https://api.imgur.com/3/image)"
|
||||
else
|
||||
response="$(curl --compressed --connect-timeout "${upload_connect_timeout}" -m "${upload_timeout}" --retry "${upload_retries}" -fsSL --stderr - -H "Authorization: Client-ID ${imgur_anon_id}" -F "title=${title}" -F "image=@\"${1}\"" https://api.imgur.com/3/image)"
|
||||
fi
|
||||
# JSON parser premium edition (not really)
|
||||
if grep -Eq '"success":\s*true' <<<"${response}"; then
|
||||
img_id="$(grep -Eo '"id":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)"
|
||||
img_ext="$(grep -Eo '"link":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4 | rev | cut -d "." -f 1 | rev)" # "link" itself has ugly '\/' escaping and no https!
|
||||
del_id="$(grep -Eo '"deletehash":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)"
|
||||
|
||||
if [ -n "${auto_delete}" ]; then
|
||||
export -f delete_image
|
||||
echo "Deleting image in ${auto_delete} seconds."
|
||||
nohup /bin/bash -c "sleep ${auto_delete} && delete_image ${imgur_anon_id} ${del_id} ${log_file}" &
|
||||
fi
|
||||
|
||||
handle_upload_success "https://i.imgur.com/${img_id}.${img_ext}" "https://imgur.com/delete/${del_id}" "${1}"
|
||||
else # upload failed
|
||||
err_msg="$(grep -Eo '"error":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)"
|
||||
test -z "${err_msg}" && err_msg="${response}"
|
||||
handle_upload_error "${err_msg}" "${1}"
|
||||
fi
|
||||
}
|
||||
|
||||
function handle_upload_success() {
|
||||
echo ""
|
||||
echo "image link: ${1}"
|
||||
echo "delete link: ${2}"
|
||||
|
||||
if [ "${copy_url}" = "true" ] && [ -z "${album_title}" ]; then
|
||||
if is_mac; then
|
||||
echo -n "${1}" | pbcopy
|
||||
else
|
||||
echo -n "${1}" | xclip -selection clipboard
|
||||
fi
|
||||
echo "URL copied to clipboard"
|
||||
fi
|
||||
|
||||
# print to log file: image link, image location, delete link
|
||||
echo -e "${1}\t${3}\t${2}" >> "${log_file}"
|
||||
|
||||
notify ok "Upload done!" "${1}"
|
||||
|
||||
# if [ ! -z "${open_command}" ] && [ "${open}" = "true" ]; then
|
||||
# open_cmd=${open_command//\%url/${1}}
|
||||
# open_cmd=${open_cmd//\%img/${2}}
|
||||
# echo "Opening '${open_cmd}'"
|
||||
# eval "${open_cmd}"
|
||||
# fi
|
||||
}
|
||||
|
||||
function handle_upload_error() {
|
||||
error="Upload failed: \"${1}\""
|
||||
echo "${error}"
|
||||
echo -e "Error\t${2}\t${error}" >> "${log_file}"
|
||||
notify error "Upload failed :(" "${1}"
|
||||
}
|
||||
|
||||
function handle_album_creation_success() {
|
||||
echo ""
|
||||
echo "Album link: ${1}"
|
||||
echo "Delete hash: ${2}"
|
||||
echo ""
|
||||
|
||||
notify ok "Album created!" "${1}"
|
||||
|
||||
if [ "${copy_url}" = "true" ]; then
|
||||
if is_mac; then
|
||||
echo -n "${1}" | pbcopy
|
||||
else
|
||||
echo -n "${1}" | xclip -selection clipboard
|
||||
fi
|
||||
echo "URL copied to clipboard"
|
||||
fi
|
||||
|
||||
# print to log file: album link, album title, delete hash
|
||||
echo -e "${1}\t\"${3}\"\t${2}" >> "${log_file}"
|
||||
}
|
||||
|
||||
function handle_album_creation_error() {
|
||||
error="Album creation failed: \"${1}\""
|
||||
echo -e "Error\t${2}\t${error}" >> "${log_file}"
|
||||
notify error "Album creation failed :(" "${1}"
|
||||
if [ ${exit_on_album_creation_fail} ]; then
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
while [ ${#} != 0 ]; do
|
||||
case "${1}" in
|
||||
-h | --help)
|
||||
echo "usage: ${0} [--debug] [-c | --check | -v | -h | -u]"
|
||||
echo " ${0} [--debug] [option]... [file]..."
|
||||
echo ""
|
||||
echo " --debug Enable debugging, must be first option"
|
||||
echo " -h, --help Show this help, exit"
|
||||
echo " -v, --version Show current version, exit"
|
||||
echo " --check Check if all dependencies are installed, exit"
|
||||
echo " -c, --connect Show connected imgur account, exit"
|
||||
echo " -o, --open <true|false> Override 'open' config"
|
||||
echo " -e, --edit <true|false> Override 'edit' config"
|
||||
echo " -i, --edit-command <command> Override 'edit_command' config (include '%img'), sets --edit 'true'"
|
||||
echo " -l, --login <true|false> Override 'login' config"
|
||||
echo " -a, --album <album_title> Create new album and upload there"
|
||||
echo " -A, --album-id <album_id> Override 'album_id' config"
|
||||
echo " -k, --keep-file <true|false> Override 'keep_file' config"
|
||||
echo " -d, --auto-delete <s> Automatically delete image after <s> seconds"
|
||||
echo " -u, --update Check for updates, exit"
|
||||
echo " file Upload file instead of taking a screenshot"
|
||||
exit 0;;
|
||||
-v | --version)
|
||||
echo "${current_version}"
|
||||
exit 0;;
|
||||
-s | --select)
|
||||
mode="select"
|
||||
shift;;
|
||||
-w | --window)
|
||||
mode="window"
|
||||
shift;;
|
||||
-f | --full)
|
||||
mode="full"
|
||||
shift;;
|
||||
-o | --open)
|
||||
# shellcheck disable=SC2034
|
||||
open="${2}"
|
||||
shift 2;;
|
||||
-e | --edit)
|
||||
edit="${2}"
|
||||
shift 2;;
|
||||
-i | --edit-command)
|
||||
edit_command="${2}"
|
||||
edit="true"
|
||||
shift 2;;
|
||||
-l | --login)
|
||||
login="${2}"
|
||||
shift 2;;
|
||||
-c | --connect)
|
||||
load_access_token
|
||||
fetch_account_info
|
||||
exit 0;;
|
||||
-a | --album)
|
||||
album_title="${2}"
|
||||
shift 2;;
|
||||
-A | --album-id)
|
||||
album_id="${2}"
|
||||
shift 2;;
|
||||
-k | --keep-file)
|
||||
keep_file="${2}"
|
||||
shift 2;;
|
||||
-d | --auto-delete)
|
||||
auto_delete="${2}"
|
||||
shift 2;;
|
||||
-u | --update)
|
||||
check_for_update
|
||||
exit 0;;
|
||||
*)
|
||||
upload_files=("${@}")
|
||||
break;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "${login}" = "true" ]; then
|
||||
# load before changing directory
|
||||
load_access_token
|
||||
fi
|
||||
|
||||
|
||||
if [ -n "${album_title}" ]; then
|
||||
if [ "${login}" = "true" ]; then
|
||||
response="$(curl -fsSL --stderr - \
|
||||
-F "title=${album_title}" \
|
||||
-H "Authorization: Bearer ${access_token}" \
|
||||
https://api.imgur.com/3/album)"
|
||||
else
|
||||
response="$(curl -fsSL --stderr - \
|
||||
-F "title=${album_title}" \
|
||||
-H "Authorization: Client-ID ${imgur_anon_id}" \
|
||||
https://api.imgur.com/3/album)"
|
||||
fi
|
||||
if grep -Eq '"success":\s*true' <<<"${response}"; then # Album creation successful
|
||||
echo "Album '${album_title}' successfully created"
|
||||
album_id="$(grep -Eo '"id":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)"
|
||||
del_id="$(grep -Eo '"deletehash":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)"
|
||||
handle_album_creation_success "https://imgur.com/a/${album_id}" "${del_id}" "${album_title}"
|
||||
|
||||
if [ "${login}" = "false" ]; then
|
||||
album_id="${del_id}"
|
||||
fi
|
||||
else # Album creation failed
|
||||
err_msg="$(grep -Eo '"error":\s*"[^"]+"' <<<"${response}" | cut -d "\"" -f 4)"
|
||||
test -z "${err_msg}" && err_msg="${response}"
|
||||
handle_album_creation_error "${err_msg}" "${album_title}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "${upload_files[*]}" ]; then
|
||||
upload_files[0]=""
|
||||
fi
|
||||
|
||||
for upload_file in "${upload_files[@]}"; do
|
||||
|
||||
if [ -z "${upload_file}" ]; then
|
||||
cd "${file_dir}" || exit 1
|
||||
|
||||
# new filename with date
|
||||
img_file="$(date +"${file_name_format}")"
|
||||
take_screenshot "${img_file}"
|
||||
else
|
||||
# upload file instead of screenshot
|
||||
img_file="${upload_file}"
|
||||
fi
|
||||
|
||||
# get full path
|
||||
#cd "$(dirname "$(realpath "${img_file}")")"
|
||||
#img_file="$(realpath "${img_file}")"
|
||||
|
||||
# check if file exists
|
||||
if ! [ -f "${img_file}" ]; then
|
||||
echo "file '${img_file}' doesn't exist !"
|
||||
read -r _
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# open image in editor if configured
|
||||
if [ "${edit}" = "true" ]; then
|
||||
edit_cmd=${edit_command//\%img/${img_file}}
|
||||
echo "Opening editor '${edit_cmd}'"
|
||||
if ! (eval "${edit_cmd}"); then
|
||||
echo "Error for image '${img_file}': command '${edit_cmd}' failed, not uploading. For more information visit https://github.com/jomo/imgur-screenshot/wiki/Troubleshooting" | tee -a "${log_file}"
|
||||
notify error "Something went wrong :(" "Information has been logged"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "${login}" = "true" ]; then
|
||||
upload_authenticated_image "${img_file}"
|
||||
else
|
||||
upload_anonymous_image "${img_file}"
|
||||
fi
|
||||
|
||||
# delete file if configured
|
||||
if [ "${keep_file}" = "false" ] && [ -z "${1}" ]; then
|
||||
echo "Deleting temp file ${file_dir}/${img_file}"
|
||||
rm -rf "${img_file}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
done
|
||||
|
||||
|
||||
if [ "${check_update}" = "true" ]; then
|
||||
check_for_update
|
||||
fi
|
||||
|
||||
read -r _
|
|
@ -0,0 +1,113 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Open hovered or current directory in image viewer.
|
||||
# Generates media thumbnails with optional dependencies.
|
||||
#
|
||||
# Dependencies:
|
||||
# - imv (https://github.com/eXeC64/imv) or,
|
||||
# - sxiv (https://github.com/muennich/sxiv) or,
|
||||
# - nsxiv (https://codeberg.org/nsxiv/nsxiv) or,
|
||||
# - ucollage (https://github.com/ckardaris/ucollage) or,
|
||||
# - lsix (https://github.com/hackerb9/lsix), or
|
||||
# - viu (https://github.com/atanunq/viu), or
|
||||
# - catimg (https://github.com/posva/catimg), or
|
||||
# - optional: ffmpeg for audio thumbnails (album art)
|
||||
# - optional: ffmpegthumbnailer for video thumbnails
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana, Luuk van Baal
|
||||
#
|
||||
# Consider setting NNN_PREVIEWDIR to $XDG_CACHE_HOME/nnn/previews
|
||||
# if you want to keep media thumbnails on disk between reboots.
|
||||
NNN_PREVIEWDIR="${NNN_PREVIEWDIR:-${TMPDIR:-/tmp}/nnn/previews}"
|
||||
|
||||
exit_prompt() {
|
||||
[ -n "$1" ] && printf "%s\n" "$1"
|
||||
printf "%s" "Press any key to exit..."
|
||||
cfg=$(stty -g); stty raw -echo; head -c 1; stty "$cfg"
|
||||
clear
|
||||
exit
|
||||
}
|
||||
|
||||
make_thumbs() {
|
||||
mkdir -p "$NNN_PREVIEWDIR$dir" || return
|
||||
if [ "$1" = "viu" ] || [ "$1" = "catimg" ]; then
|
||||
[ -d "$target" ] && exit_prompt "$1 can only display a single image"
|
||||
mime="$(file -bL --mime-type -- "$target")"
|
||||
case "$mime" in
|
||||
audio/*) ffmpeg -i "$target" "$NNN_PREVIEWDIR$target.jpg" -y >/dev/null 2>&1
|
||||
ret="$NNN_PREVIEWDIR/$target.jpg" ;;
|
||||
video/*) ffmpegthumbnailer -i "$target" -o "$NNN_PREVIEWDIR$target.jpg" 2> /dev/null
|
||||
ret="$NNN_PREVIEWDIR/$target.jpg" ;;
|
||||
*) ret="$target" ;;
|
||||
esac
|
||||
fi
|
||||
for file in "$dir"/*; do
|
||||
if [ ! -f "$NNN_PREVIEWDIR$file.jpg" ]; then
|
||||
case "$(file -bL --mime-type -- "$file")" in
|
||||
audio/*) [ "$1" != "sxiv" ] &&
|
||||
ffmpeg -i "$file" "$NNN_PREVIEWDIR$file.jpg" -y >/dev/null 2>&1 ;;
|
||||
video/*) [ "$1" != "ucollage" ] &&
|
||||
ffmpegthumbnailer -i "$file" -o "$NNN_PREVIEWDIR$file.jpg" 2> /dev/null ;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
for file in "$NNN_PREVIEWDIR$dir"/*; do
|
||||
filename="$(basename "$file" .jpg)"
|
||||
[ ! -e "$dir/$filename" ] && rm "$file" 2>/dev/null
|
||||
done
|
||||
}
|
||||
|
||||
listimages() {
|
||||
find -L "$dir" "$NNN_PREVIEWDIR$dir" -maxdepth 1 -type f -print0 2>/dev/null | sort -z
|
||||
}
|
||||
|
||||
view_files() {
|
||||
[ -f "$target" ] && count="-n $(listimages | grep -a -m 1 -ZznF "$target" | cut -d: -f1)"
|
||||
case "$1" in
|
||||
nsxiv) listimages | xargs -0 nsxiv -a "${count:--t}" -- ;;
|
||||
sxiv) listimages | xargs -0 sxiv -a "${count:--t}" -- ;;
|
||||
imv*) listimages | xargs -0 "$1" "${count:-}" -- ;;
|
||||
esac
|
||||
}
|
||||
|
||||
target="$(readlink -f "$1")"
|
||||
[ -d "$target" ] && dir="$target" || dir="${target%/*}"
|
||||
if uname | grep -q "Darwin"; then
|
||||
[ -f "$1" ] && open "$1" >/dev/null 2>&1 &
|
||||
elif type lsix >/dev/null 2>&1; then
|
||||
if [ -d "$target" ]; then
|
||||
cd "$target" || exit_prompt
|
||||
fi
|
||||
make_thumbs lsix
|
||||
clear
|
||||
lsix
|
||||
cd "$NNN_PREVIEWDIR$dir" && lsix
|
||||
exit_prompt
|
||||
elif type ucollage >/dev/null 2>&1; then
|
||||
type ffmpeg >/dev/null 2>&1 && make_thumbs ucollage
|
||||
UCOLLAGE_EXPAND_DIRS=1 ucollage "$dir" "$NNN_PREVIEWDIR$dir" || exit_prompt
|
||||
elif type sxiv >/dev/null 2>&1; then
|
||||
type ffmpegthumbnailer >/dev/null 2>&1 && make_thumbs sxiv
|
||||
view_files sxiv >/dev/null 2>&1 &
|
||||
elif type nsxiv >/dev/null 2>&1; then
|
||||
type ffmpegthumbnailer >/dev/null 2>&1 && make_thumbs sxiv
|
||||
view_files nsxiv >/dev/null 2>&1 &
|
||||
elif type imv >/dev/null 2>&1; then
|
||||
make_thumbs imv
|
||||
view_files imv >/dev/null 2>&1 &
|
||||
elif type imvr >/dev/null 2>&1; then
|
||||
make_thumbs imv
|
||||
view_files imvr >/dev/null 2>&1 &
|
||||
elif type viu >/dev/null 2>&1; then
|
||||
clear
|
||||
make_thumbs viu
|
||||
viu -n "$ret"
|
||||
exit_prompt
|
||||
elif type catimg >/dev/null 2>&1; then
|
||||
make_thumbs catimg
|
||||
catimg "$ret"
|
||||
exit_prompt
|
||||
else
|
||||
exit_prompt "Please install sxiv/nsxiv/imv/viu/catimg/lsix."
|
||||
fi
|
|
@ -0,0 +1,13 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Shows the external IP address and whois information. Useful over VPNs.
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
IP=$(curl -s ifconfig.me)
|
||||
|
||||
whois "$IP"
|
||||
echo your external IP address is "$IP"
|
||||
|
||||
read -r _
|
|
@ -0,0 +1,66 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Send files or folders to your Android device using kdeconnect-cli.
|
||||
# kdeconnect must be configured on the Android device and the PC.
|
||||
#
|
||||
# Usage:
|
||||
# - Hover over a file or a folder and call the plugin.
|
||||
# - Alternatively, select the files and folders you would like to send, and activate the plugin.
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: juacq97, raffaem, N-R-K
|
||||
|
||||
# If you want system notification, put this equal to 1
|
||||
notify=0
|
||||
|
||||
note() {
|
||||
if [ $notify = 1 ]; then
|
||||
notify-send -a "Kdeconnect" "$1"
|
||||
else
|
||||
echo "[Kdeconnect] $1"
|
||||
fi
|
||||
}
|
||||
|
||||
# kdeconnect doesn't cope with non-files
|
||||
filter_files() {
|
||||
xargs -0 -I{} sh -c '
|
||||
if [ -f "{}" ]; then
|
||||
printf "%s\0" "{}";
|
||||
else
|
||||
printf "Error: not a regular file: %s\n" "{}" >&2;
|
||||
fi;'
|
||||
}
|
||||
|
||||
send() {
|
||||
filter_files | xargs -0 -I{} kdeconnect-cli --name "$devname" --share {}
|
||||
note "Files sent"
|
||||
}
|
||||
|
||||
# Select paired device
|
||||
names=$(kdeconnect-cli --list-available --name-only 2>/dev/null)
|
||||
if [ -z "$names" ]; then
|
||||
note "No devices paired and available"
|
||||
exit
|
||||
fi
|
||||
|
||||
ndevs=$(printf "%s" "$names" | awk 'END{print NR}')
|
||||
if [ "$ndevs" -eq 1 ]; then
|
||||
devname="$names"
|
||||
else
|
||||
printf "%s" "$names" | awk '{ print NR ". " $0 }'
|
||||
printf "Pick a device: "
|
||||
read -r pick
|
||||
if [ -n "$pick" ] && [ "$pick" -eq "$pick" ]; then
|
||||
devname=$(printf '%s' "$names" | awk "NR==$pick")
|
||||
fi
|
||||
fi
|
||||
|
||||
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
if [ -s "$selection" ]; then
|
||||
send < "$selection"
|
||||
[ -p "$NNN_PIPE" ] && printf "-" > "$NNN_PIPE" # clear selection
|
||||
elif [ -n "$1" ]; then
|
||||
printf "%s" "$1" | send
|
||||
else
|
||||
note "No selection and no hovered file"
|
||||
fi
|
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Independent POSIX-compliant GUI application launcher.
|
||||
# Fuzzy find executables in $PATH and launch an application.
|
||||
# stdin, stdout, stderr are suppressed so CLI tools exit silently.
|
||||
#
|
||||
# To configure launch as an independent app launcher add a keybind
|
||||
# to open launch in a terminal e.g.,
|
||||
#
|
||||
# xfce4-terminal -e "${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/launch
|
||||
#
|
||||
# Dependencies: fzf
|
||||
#
|
||||
# Usage: launch [delay]
|
||||
# delay is in seconds, if omitted launch waits for 1 sec
|
||||
#
|
||||
# Integration with nnn: launch is installed with other plugins, nnn picks it up.
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
|
||||
IFS=':'
|
||||
|
||||
get_selection() {
|
||||
if type fzf >/dev/null 2>&1; then
|
||||
{ IFS=':'; ls -H $PATH; } | sort | fzf
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
if selection=$( get_selection ); then
|
||||
setsid "$selection" 2>/dev/null 1>/dev/null &
|
||||
|
||||
if [ -n "$1" ]; then
|
||||
sleep "$1"
|
||||
else
|
||||
sleep 1
|
||||
fi
|
||||
fi
|
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Find and list files by mime type in smart context
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
. "$(dirname "$0")"/.nnn-plugin-helper
|
||||
|
||||
printf "mime (e.g., video/audio/image): "
|
||||
read -r mime
|
||||
|
||||
printf "%s" "+l" > "$NNN_PIPE"
|
||||
find . | file -if- | grep "$mime" | awk -F: '{printf "%s\0", $1}' > "$NNN_PIPE"
|
|
@ -0,0 +1,40 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Fetches the lyrics of the track currently playing in MOC
|
||||
#
|
||||
# Dependencies: ddgr (https://github.com/jarun/ddgr)
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
# Check if MOC server is running
|
||||
cmd=$(pgrep -x mocp 2>/dev/null)
|
||||
ret=$cmd
|
||||
if [ -z "$ret" ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
# Grab the output
|
||||
out="$(mocp -i)"
|
||||
|
||||
# Check if anything is playing
|
||||
state=$(echo "$out" | grep "State:" | cut -d' ' -f2)
|
||||
if ! [ "$state" = 'PLAY' ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
# Try by Artist and Song Title first
|
||||
ARTIST="$(echo "$out" | grep 'Artist:' | cut -d':' -f2 | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//')"
|
||||
TITLE="$(echo "$out" | grep 'SongTitle:' | cut -d':' -f2 | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//')"
|
||||
|
||||
if [ -n "$ARTIST" ] && [ -n "$TITLE" ]; then
|
||||
ddgr -w azlyrics.com --ducky "$ARTIST" "$TITLE"
|
||||
else
|
||||
# Try by file name
|
||||
FILENAME="$(basename "$(echo "$out" | grep 'File:' | cut -d':' -f2)")"
|
||||
FILENAME="$(echo "${FILENAME%%.*}" | tr -d -)"
|
||||
|
||||
if [ -n "$FILENAME" ]; then
|
||||
ddgr -w azlyrics.com --ducky "$FILENAME"
|
||||
fi
|
||||
fi
|
|
@ -0,0 +1,89 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Appends and optionally plays music in MOC
|
||||
#
|
||||
# Notes:
|
||||
# - if selection is available, plays it, else plays the current file or directory
|
||||
# - appends tracks and exits is MOC is running, else clears playlist and adds tracks
|
||||
# - to let mocp shuffle tracks, set SHUFFLE=1
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Authors: Arun Prakash Jana, ath3
|
||||
|
||||
IFS="$(printf '\n\r')"
|
||||
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
cmd=$(pgrep -x mocp 2>/dev/null)
|
||||
ret=$cmd
|
||||
|
||||
SHUFFLE="${SHUFFLE:-0}"
|
||||
|
||||
mocp_add ()
|
||||
{
|
||||
if [ "$SHUFFLE" = 1 ]; then
|
||||
if [ "$resp" = "y" ]; then
|
||||
arr=$(tr '\0' '\n' < "$selection")
|
||||
elif [ -n "$1" ]; then
|
||||
arr="$1"
|
||||
fi
|
||||
|
||||
for entry in $arr
|
||||
do
|
||||
if [ -d "$entry" ]; then
|
||||
arr2=$arr2$(find "$entry" -type f \( ! -iname "*.m3u" ! -iname "*.pls" \))
|
||||
elif echo "$entry" | grep -qv '\.m3u$\|\.pls$' ; then
|
||||
arr2=$(printf "%s\n%s" "$entry" "$arr2")
|
||||
fi
|
||||
done
|
||||
|
||||
mocp -o shuffle
|
||||
echo "$arr2" | xargs -d "\n" mocp -a
|
||||
else
|
||||
if [ "$resp" = "y" ]; then
|
||||
xargs < "$selection" -0 mocp -a
|
||||
else
|
||||
mocp -a "$1"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
if [ ! -s "$selection" ] && [ -z "$1" ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ "$2" = "opener" ]; then
|
||||
:
|
||||
elif [ -s "$selection" ]; then
|
||||
printf "Work with selection? Enter 'y' to confirm: "
|
||||
read -r resp
|
||||
fi
|
||||
|
||||
if [ -z "$ret" ]; then
|
||||
# mocp not running
|
||||
mocp -S
|
||||
else
|
||||
# mocp running, check if it's playing
|
||||
state=$(mocp -i | grep "State:" | cut -d' ' -f2)
|
||||
|
||||
if [ "$state" = 'PLAY' ]; then
|
||||
# add to playlist and exit
|
||||
mocp_add "$1"
|
||||
|
||||
# uncomment the line below to show mocp interface after appending
|
||||
# mocp
|
||||
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
# clear selection and play
|
||||
mocp -c
|
||||
mocp_add "$1" "$resp"
|
||||
mocp -p
|
||||
|
||||
# uncomment the line below to show mocp interface after appending
|
||||
# mocp
|
||||
|
||||
# Clear selection
|
||||
if [ "$resp" = "y" ] && [ -p "$NNN_PIPE" ]; then
|
||||
printf "-" > "$NNN_PIPE"
|
||||
fi
|
|
@ -0,0 +1,41 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Extract audio from multimedia files and convert to mp3
|
||||
#
|
||||
# Dependencies: ffmpeg compiled with libmp3lame audio codec support
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
outdir=_mp3files
|
||||
|
||||
handle_multimedia() {
|
||||
mime="${1}"
|
||||
file="${2}"
|
||||
|
||||
case "${mime}" in
|
||||
audio/* | video/*)
|
||||
ffmpeg -i "${file}" -vn -codec:a libmp3lame -q:a 2 "${outdir}/${file%.*}.mp3"
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
printf "Process 'a'll in directory or 'c'urrent? "
|
||||
read -r resp
|
||||
|
||||
if [ "$resp" = "a" ]; then
|
||||
if ! [ -e "${outdir}" ]; then
|
||||
mkdir "${outdir}"
|
||||
fi
|
||||
|
||||
for f in *; do
|
||||
if [ -f "${f}" ]; then
|
||||
mimestr="$( file --dereference --brief --mime-type -- "${f}" )"
|
||||
handle_multimedia "${mimestr}" "${f}"
|
||||
fi
|
||||
done
|
||||
elif [ "$resp" = "c" ] && [ -f "$1" ]; then
|
||||
ffmpeg -i "${1}" -vn -codec:a libmp3lame -q:a 2 "${1%.*}.mp3"
|
||||
fi
|
|
@ -0,0 +1,76 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Toggle mount of MTP device (eg. Android device)
|
||||
# 'l' to list mountable devices
|
||||
# 'n' integer associated to device to mount
|
||||
# 'q'/'Return' exit
|
||||
#
|
||||
# Dependencies: gvfs-mtp
|
||||
#
|
||||
# Notes: The MTP device should be mounted at /run/user/$UID/gvfs.
|
||||
# Put /run/user/$UID/gvfs to bookmark entries (NNN_BMS) for faster access.
|
||||
# Make sure the device is unlocked when mounting.
|
||||
#
|
||||
# When doing copy-paste into MTP device, you will get an error like this:
|
||||
# cp: preserving times for './gambar1.png': Operation not supported
|
||||
# That just means the file is copied but timestamp won't be preserved.
|
||||
# It's like doing `cp -p localfile.txt file-to-SMB.txt`.
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Benawi Adha
|
||||
|
||||
prompt="Device number ('l' to list): "
|
||||
|
||||
IFS='
|
||||
'
|
||||
|
||||
lsmtp () {
|
||||
devs=$(gio mount -li | grep -e 'activation_root' | sed 's/\s*activation_root=//g')
|
||||
c=1
|
||||
printf "Devices list:\n"
|
||||
for i in $devs; do
|
||||
printf "%s %s\\n" "$c" "$i"
|
||||
c=$(( c + 1 ))
|
||||
done
|
||||
echo
|
||||
}
|
||||
|
||||
lsmtp
|
||||
printf "%s" "$prompt"
|
||||
read -r input
|
||||
|
||||
while [ -n "$input" ]
|
||||
do
|
||||
if [ "$input" = "l" ]; then
|
||||
lsmtp
|
||||
elif [ "$input" = "q" ] || [ "$input" -eq 0 ]; then
|
||||
exit
|
||||
elif [ "$input" -le "$(printf '%s\n' "${devs}" | grep -c '^')" ]; then
|
||||
# dev=$(printf "%s\n" "$devs" | cut -d$'\n' -f${input})
|
||||
c=1
|
||||
for i in $devs; do
|
||||
dev=$i
|
||||
if [ "$input" -eq $c ]; then
|
||||
break
|
||||
fi
|
||||
c=$(( c + 1 ))
|
||||
done
|
||||
|
||||
if (gio mount -l | grep '^Mount([1-9]).*'"$dev" ) 1>/dev/null; then
|
||||
if gio mount -u "${dev}"; then
|
||||
printf "%s unmounted\n" "$dev"
|
||||
fi
|
||||
else
|
||||
if gio mount "${dev}"; then
|
||||
printf "%s mounted to /run/user/\$UID/gvfs\n" "$dev"
|
||||
fi
|
||||
fi
|
||||
echo
|
||||
else
|
||||
printf "Invalid input\n"
|
||||
fi
|
||||
|
||||
printf "%s" "$prompt"
|
||||
read -r input
|
||||
done
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Backup nnn configuration
|
||||
# - config dir content
|
||||
# - environment config
|
||||
# - shell functions and aliases
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Léo Villeveygoux
|
||||
|
||||
nnn_aliases="n nnn"
|
||||
|
||||
outdir="nnn-$(whoami)@$(hostname)"
|
||||
|
||||
outfile="${outdir}.tar.bz2"
|
||||
|
||||
shellname="$(basename "$SHELL")"
|
||||
|
||||
conffile="config.txt"
|
||||
|
||||
configdir="${XDG_CONFIG_HOME:-$HOME/.config}/nnn"
|
||||
|
||||
workdir="$PWD"
|
||||
|
||||
tempdir="$(mktemp -d)"
|
||||
|
||||
mkdir "$tempdir/$outdir"
|
||||
|
||||
if [ ! -d "$tempdir" ]; then
|
||||
echo "Can't create work directory." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "$tempdir/$outdir" || exit 1
|
||||
|
||||
# Backing up config dir content
|
||||
cp -r "$configdir" . || exit 1
|
||||
|
||||
# Environment config
|
||||
env | sed "s/'/'\\\\''/" |\
|
||||
awk '/^NNN_/{print "export '\''"$0"'\''"}' > "$conffile"
|
||||
|
||||
# Shell functions/aliases
|
||||
case "$shellname" in
|
||||
bash)
|
||||
for name in $nnn_aliases ; do
|
||||
if [ "$(bash -ic "type -t $name")" = "function" ] ; then
|
||||
bash -ic "type $name" | tail -n+2 >> "$conffile"
|
||||
elif bash -ic "alias $name" >/dev/null 2>&1 ; then
|
||||
bash -ic "alias $name" >> "$conffile"
|
||||
fi
|
||||
done
|
||||
;;
|
||||
zsh)
|
||||
for name in $nnn_aliases ; do
|
||||
if zsh -ic "functions $name" ; then
|
||||
zsh -ic "functions $name" >> "$conffile"
|
||||
elif zsh -ic "alias $name" ; then
|
||||
echo alias "$(zsh -ic "alias $name")" >> "$conffile"
|
||||
fi
|
||||
done
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown shell, skipping alias/function checking." >&2
|
||||
;;
|
||||
esac
|
||||
|
||||
cd .. || exit 1
|
||||
|
||||
printf "Saving as '%s' ... " "$workdir/$outfile"
|
||||
|
||||
tar caf "$workdir/$outfile" "$outdir" && echo "Done" || echo "Failed"
|
||||
|
||||
cd "$workdir" && rm -rf "$tempdir"
|
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Toggle mount status of a device using pmount
|
||||
# If the device is not mounted, it will be mounted.
|
||||
# If the device is mounted, it will be unmounted and powered down.
|
||||
#
|
||||
# Dependencies: lsblk, pmount
|
||||
#
|
||||
# Usage: Runs `lsblk` on 'l', exits on 'Return`.
|
||||
#
|
||||
# Notes:
|
||||
# - The script uses Linux-specific lsblk to list block devices. Alternatives:
|
||||
# macOS: "diskutil list"
|
||||
# BSD: "geom disk list"
|
||||
# - The script uses udisksctl (from udisks2) to power down devices. This is also Linux-specific.
|
||||
# Users on non-Linux platforms can comment it and use an alterntive to power-down disks.
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
prompt="device name [e.g. sdXn] ('l'ist, 'q'uit): "
|
||||
|
||||
lsblk
|
||||
|
||||
printf "\nEnsure you aren't still in the mounted device.\n"
|
||||
printf "%s" "$prompt"
|
||||
read -r dev
|
||||
|
||||
while [ -n "$dev" ]; do
|
||||
if [ "$dev" = "l" ]; then
|
||||
lsblk
|
||||
elif [ "$dev" = "q" ]; then
|
||||
exit
|
||||
else
|
||||
if grep -qs "$dev " /proc/mounts; then
|
||||
sync "$(lsblk -n "/dev/$dev" -o MOUNTPOINT | sed "/^$/d")"
|
||||
if pumount "/dev/$dev"; then
|
||||
echo "/dev/$dev unmounted."
|
||||
if udisksctl power-off -b "/dev/$dev" --no-user-interaction; then
|
||||
echo "/dev/$dev ejected."
|
||||
fi
|
||||
fi
|
||||
elif [ -b "/dev/$dev" ]; then
|
||||
if pmount "/dev/$dev"; then
|
||||
sleep 1
|
||||
echo "/dev/$dev mounted to $(lsblk -n "/dev/$dev" -o MOUNTPOINT | sed "/^$/d")."
|
||||
fi
|
||||
else
|
||||
echo "/dev/$dev does not exist or is not a block device."
|
||||
fi
|
||||
fi
|
||||
|
||||
echo
|
||||
printf "%s" "$prompt"
|
||||
read -r dev
|
||||
done
|
|
@ -0,0 +1,79 @@
|
|||
#! /bin/sh
|
||||
|
||||
FALLBACK_OPENER=xdg-open
|
||||
entry="$1"
|
||||
mime="$(file -ibL "$entry" )"
|
||||
FNAME=$(basename "$entry")
|
||||
ext="${FNAME##*.}"
|
||||
if [ -n "$ext" ]; then
|
||||
ext="$(printf "%s" "${ext}" | tr '[:upper:]' '[:lower:]')"
|
||||
fi
|
||||
|
||||
case "${ext}" 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|zst|zip|rar|7z)
|
||||
extract "$entry"
|
||||
exit 0;;
|
||||
|
||||
## PDF
|
||||
pdf)
|
||||
devour zathura "$entry"
|
||||
exit 1;;
|
||||
|
||||
## Audio
|
||||
aac|flac|m4a|mid|midi|mpa|mp2|mp3|ogg|wav|wma)
|
||||
mpv --no-video --quiet "$entry"
|
||||
exit 1;;
|
||||
|
||||
## Video
|
||||
avi|mkv|mp4|gif)
|
||||
devour mpv "$entry"
|
||||
exit 1;;
|
||||
|
||||
## Image
|
||||
png|jpg|jpeg|PNG|JPG|JPEG|svg)
|
||||
devour nsxiv "$entry"
|
||||
exit 1;;
|
||||
|
||||
## Log files
|
||||
log)
|
||||
"$EDITOR" "$entry"
|
||||
exit 0;;
|
||||
|
||||
## BitTorrent
|
||||
torrenti|magnet)
|
||||
aria2c -i "$entry"
|
||||
exit 0;;
|
||||
|
||||
## OpenDocument
|
||||
odt|ods|odp|sxw)
|
||||
"$BROWSER" "$entry"
|
||||
exit 0;;
|
||||
|
||||
## Markdown
|
||||
md)
|
||||
"$EDITOR" "$entry"
|
||||
exit 0;;
|
||||
|
||||
## HTML
|
||||
htm|html|xhtml)
|
||||
## Preview as text conversion
|
||||
"$BROWSER" "$entry"
|
||||
exit 0;;
|
||||
|
||||
## JSON
|
||||
json)
|
||||
jq --color-output . "$entry"
|
||||
exit 0 ;;
|
||||
|
||||
esac
|
||||
|
||||
|
||||
case "$mime" in
|
||||
*text*)
|
||||
"$EDITOR" "$entry"
|
||||
exit 0 ;;
|
||||
esac
|
||||
|
||||
$FALLBACK_OPENER "$entry"
|
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: List files bigger than input size by ascending access date.
|
||||
#
|
||||
# Dependencies: find sort
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
printf "Min file size (MB): "
|
||||
read -r size
|
||||
|
||||
find . -size +"$size"M -type f -printf '%A+ %s %p\n' | sort
|
||||
|
||||
echo "Press any key to exit"
|
||||
read -r _
|
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Description: Open selected files in nuke one by one or in oneshot
|
||||
#
|
||||
# Notes: 1. Opens the hovered file if the selection is empty
|
||||
# 2. nuke is the default, set OPENER below for custom
|
||||
# 3. Opener is invoked once for each file in a loop
|
||||
# 4. Keep pressing "Enter" to open files one by one
|
||||
#
|
||||
# Shell: bash
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
sel=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
OPENER="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/nuke"
|
||||
|
||||
if [ -s "$sel" ]; then
|
||||
targets=()
|
||||
while IFS= read -r -d '' entry || [ -n "$entry" ]; do
|
||||
targets+=( "$entry" )
|
||||
done < "$sel"
|
||||
|
||||
elements=${#targets[@]}
|
||||
|
||||
if (( elements == 1 )); then
|
||||
# If there's only one file selected, open without prompts
|
||||
"$OPENER" "${targets[0]}"
|
||||
else
|
||||
printf "open [A]ll? "
|
||||
read -r all
|
||||
|
||||
for ((index=0; index <= ${#targets[@]}; index++)); do
|
||||
"$OPENER" "${targets[index]}"
|
||||
if [ "$all" != "A" ] && (( index+1 < elements )); then
|
||||
printf "press Enter to open '%s'\n" "${targets[index+1]}"
|
||||
read -r -s -n 1 key
|
||||
if [[ $key != "" ]]; then
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# Clear selection
|
||||
if [ -s "$sel" ] && [ -p "$NNN_PIPE" ]; then
|
||||
printf "-" > "$NNN_PIPE"
|
||||
fi
|
||||
elif [ -n "$1" ]; then
|
||||
"$OPENER" "$1"
|
||||
fi
|
|
@ -0,0 +1,62 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Organize files in directories by category
|
||||
#
|
||||
# Note: This plugin clears the selection as it changes the contents of the current dir
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: th3lusive
|
||||
|
||||
sel=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
|
||||
organize() {
|
||||
case "$(file -biL "$1")" in
|
||||
*video*)
|
||||
[ ! -d "Videos" ] && mkdir "Videos"
|
||||
mv "$1" "Videos/$1"
|
||||
printf "Moved %s to Videos\n" "$1" ;;
|
||||
|
||||
*audio*) [ ! -d "Audio" ] && mkdir "Audio"
|
||||
mv "$1" "Audio/$1"
|
||||
printf "Moved %s to Audio\n" "$1" ;;
|
||||
|
||||
*image*)
|
||||
[ ! -d "Images" ] && mkdir "Images"
|
||||
mv "$1" "Images/$1"
|
||||
printf "Moved %s to Images\n" "$1" ;;
|
||||
|
||||
*pdf*|*document*|*epub*|*djvu*|*cb*)
|
||||
[ ! -d "Documents" ] && mkdir "Documents"
|
||||
mv "$1" "Documents/$1"
|
||||
printf "Moved %s to Documents\n" "$1" ;;
|
||||
|
||||
*text*)
|
||||
[ ! -d "Plaintext" ] && mkdir "Plaintext"
|
||||
mv "$1" "Plaintext/$1"
|
||||
printf "Moved %s to Plaintext\n" "$1" ;;
|
||||
|
||||
*tar*|*xz*|*compress*|*7z*|*rar*|*zip*)
|
||||
[ ! -d "Archives" ] && mkdir "Archives"
|
||||
mv "$1" "Archives/$1"
|
||||
printf "Moved %s to Archives\n" "$1" ;;
|
||||
|
||||
*binary*)
|
||||
[ ! -d "Binaries" ] && mkdir "Binaries"
|
||||
mv "$1" "Binaries/$1"
|
||||
printf "Moved %s to Binaries\n" "$1" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
main() {
|
||||
for file in *
|
||||
do
|
||||
[ -f "$file" ] && organize "$file"
|
||||
done
|
||||
|
||||
# Clear selection
|
||||
if [ -s "$sel" ] && [ -p "$NNN_PIPE" ]; then
|
||||
printf "-" > "$NNN_PIPE"
|
||||
fi
|
||||
}
|
||||
|
||||
main "$@"
|
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Read a text or PDF file in British English
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
if [ -n "$1" ]; then
|
||||
tmpf="$(basename "$1")"
|
||||
tmpf="${TMPDIR:-/tmp}"/"${tmpf%.*}"
|
||||
|
||||
if [ "$(head -c 4 "$1")" = "%PDF" ]; then
|
||||
# Convert using pdftotext
|
||||
pdftotext -nopgbrk -layout "$1" - | sed 's/\xe2\x80\x8b//g' > "$tmpf".txt
|
||||
|
||||
pico2wave -w "$tmpf".wav -l en-GB "$(tr '\n' ' ' < "$tmpf".txt)"
|
||||
|
||||
rm "$tmpf".txt
|
||||
else
|
||||
pico2wave -w "$tmpf".wav -l en-GB "$(tr '\n' ' ' < "$1")"
|
||||
fi
|
||||
|
||||
# to jump around and note the time
|
||||
mpv "$tmpf".wav
|
||||
|
||||
# flat read but better quality
|
||||
# play -qV0 "$tmpf".wav treble 2 gain -l 2
|
||||
|
||||
rm "$tmpf".wav
|
||||
fi
|
|
@ -0,0 +1,216 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Description: tabbed/xembed based file previewer
|
||||
#
|
||||
# Dependencies:
|
||||
# - tabbed (https://tools.suckless.org/tabbed): xembed host
|
||||
# - xterm (or urxvt or st) : xembed client for text-based preview
|
||||
# - mpv (https://mpv.io): xembed client for video/audio
|
||||
# - sxiv (https://github.com/muennich/sxiv) or,
|
||||
# - nsxiv (https://codeberg.org/nsxiv/nsxiv) : xembed client for images
|
||||
# - zathura (https://pwmt.org/projects/zathura): xembed client for PDF
|
||||
# - nnn's nuke plugin for text preview and fallback
|
||||
# nuke is a fallback for 'mpv', 'sxiv'/'nsxiv', and 'zathura', but has its
|
||||
# own dependencies, see the script for more information
|
||||
# - vim (or any editor/pager really)
|
||||
# - file
|
||||
# - mktemp
|
||||
# - xdotool (optional, to keep main window focused)
|
||||
#
|
||||
# Usage:
|
||||
# - Install the dependencies. Then set a NNN_FIFO
|
||||
# and set a key for the plugin, then start `nnn`:
|
||||
# $ NNN_FIFO=/tmp/nnn.fifo nnn
|
||||
# - Launch the plugin with the designated key from nnn
|
||||
#
|
||||
# Notes:
|
||||
# 1. This plugin needs a "NNN_FIFO" to work. See man.
|
||||
# 2. If the same NNN_FIFO is used in multiple nnn instances, there will be one
|
||||
# common preview window. With different FIFO paths, they will be independent.
|
||||
# 3. This plugin only works on X, not on Wayland.
|
||||
#
|
||||
# How it works:
|
||||
# We use `tabbed` [1] as a xembed [2] host, to have a single window
|
||||
# owning each previewer window. So each previewer must be a xembed client.
|
||||
# For text previewers, this is not an issue, as there are a lot of
|
||||
# xembed-able terminal emulator (we default to `xterm`, but examples are
|
||||
# provided for `urxvt` and `st`). For graphic preview this can be trickier,
|
||||
# but a few popular viewers are xembed-able, we use:
|
||||
# - `mpv`: multimedia player, for video/audio preview
|
||||
# - `sxiv`/`nsxiv`: image viewer
|
||||
# - `zathura`: PDF viewer
|
||||
# - but we always fallback to `nuke` plugin
|
||||
#
|
||||
# [1]: https://tools.suckless.org/tabbed/
|
||||
# [2]: https://specifications.freedesktop.org/xembed-spec/xembed-spec-latest.html
|
||||
#
|
||||
# Shell: Bash (job control is weakly specified in POSIX)
|
||||
# Author: Léo Villeveygoux
|
||||
|
||||
|
||||
XDOTOOL_TIMEOUT=2
|
||||
PAGER=${PAGER:-"vim -R"}
|
||||
NUKE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins/nuke"
|
||||
|
||||
if [ -n "$WAYLAND_DISPLAY" ] ; then
|
||||
echo "Wayland is not supported in preview-tabbed, this plugin could freeze your session!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if type xterm >/dev/null 2>&1 ; then
|
||||
TERMINAL="xterm -into"
|
||||
elif type urxvt >/dev/null 2>&1 ; then
|
||||
TERMINAL="urxvt -embed"
|
||||
elif type st >/dev/null 2>&1 ; then
|
||||
TERMINAL="st -w"
|
||||
else
|
||||
echo "No xembed term found" >&2
|
||||
fi
|
||||
|
||||
|
||||
term_nuke () {
|
||||
# $1 -> $XID, $2 -> $FILE
|
||||
$TERMINAL "$1" -e "$NUKE" "$2" &
|
||||
}
|
||||
|
||||
start_tabbed () {
|
||||
FIFO="$(mktemp -u)"
|
||||
mkfifo "$FIFO"
|
||||
|
||||
tabbed > "$FIFO" &
|
||||
|
||||
jobs # Get rid of the "Completed" entries
|
||||
|
||||
TABBEDPID="$(jobs -p %%)"
|
||||
|
||||
if [ -z "$TABBEDPID" ] ; then
|
||||
echo "Can't start tabbed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
read -r XID < "$FIFO"
|
||||
|
||||
rm "$FIFO"
|
||||
}
|
||||
|
||||
get_viewer_pid () {
|
||||
VIEWERPID="$(jobs -p %%)"
|
||||
}
|
||||
|
||||
kill_viewer () {
|
||||
if [ -n "$VIEWERPID" ] && jobs -p | grep "$VIEWERPID" ; then
|
||||
kill "$VIEWERPID"
|
||||
fi
|
||||
}
|
||||
|
||||
sigint_kill () {
|
||||
kill_viewer
|
||||
kill "$TABBEDPID"
|
||||
exit 0
|
||||
}
|
||||
|
||||
previewer_loop () {
|
||||
unset -v NNN_FIFO
|
||||
# mute from now
|
||||
exec >/dev/null 2>&1
|
||||
|
||||
MAINWINDOW="$(xdotool getactivewindow)"
|
||||
|
||||
start_tabbed
|
||||
trap sigint_kill SIGINT
|
||||
|
||||
xdotool windowactivate "$MAINWINDOW"
|
||||
|
||||
# Bruteforce focus stealing prevention method,
|
||||
# works well in floating window managers like XFCE
|
||||
# but make interaction with the preview window harder
|
||||
# (uncomment to use):
|
||||
#xdotool behave "$XID" focus windowactivate "$MAINWINDOW" &
|
||||
|
||||
while read -r FILE ; do
|
||||
|
||||
jobs # Get rid of the "Completed" entries
|
||||
|
||||
if ! jobs | grep tabbed ; then
|
||||
break
|
||||
fi
|
||||
|
||||
if [ ! -e "$FILE" ] ; then
|
||||
continue
|
||||
fi
|
||||
|
||||
kill_viewer
|
||||
|
||||
MIME="$(file -bL --mime-type "$FILE")"
|
||||
|
||||
case "$MIME" in
|
||||
video/*)
|
||||
if type mpv >/dev/null 2>&1 ; then
|
||||
mpv --force-window=immediate --loop-file --wid="$XID" "$FILE" &
|
||||
else
|
||||
term_nuke "$XID" "$FILE"
|
||||
fi
|
||||
;;
|
||||
audio/*)
|
||||
if type mpv >/dev/null 2>&1 ; then
|
||||
mpv --force-window=immediate --loop-file --wid="$XID" "$FILE" &
|
||||
else
|
||||
term_nuke "$XID" "$FILE"
|
||||
fi
|
||||
;;
|
||||
image/*)
|
||||
if type sxiv >/dev/null 2>&1 ; then
|
||||
sxiv -ae "$XID" "$FILE" &
|
||||
elif type nsxiv >/dev/null 2>&1 ; then
|
||||
nsxiv -ae "$XID" "$FILE" &
|
||||
else
|
||||
term_nuke "$XID" "$FILE"
|
||||
fi
|
||||
;;
|
||||
application/pdf)
|
||||
if type zathura >/dev/null 2>&1 ; then
|
||||
zathura -e "$XID" "$FILE" &
|
||||
else
|
||||
term_nuke "$XID" "$FILE"
|
||||
fi
|
||||
;;
|
||||
inode/directory)
|
||||
$TERMINAL "$XID" -e nnn "$FILE" &
|
||||
;;
|
||||
text/*)
|
||||
if [ -x "$NUKE" ] ; then
|
||||
term_nuke "$XID" "$FILE"
|
||||
else
|
||||
# shellcheck disable=SC2086
|
||||
$TERMINAL "$XID" -e $PAGER "$FILE" &
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if [ -x "$NUKE" ] ; then
|
||||
term_nuke "$XID" "$FILE"
|
||||
else
|
||||
$TERMINAL "$XID" -e sh -c "file '$FILE' | $PAGER -" &
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
get_viewer_pid
|
||||
|
||||
# following lines are not needed with the bruteforce xdotool method
|
||||
ACTIVE_XID="$(xdotool getactivewindow)"
|
||||
if [ $((ACTIVE_XID == XID)) -ne 0 ] ; then
|
||||
xdotool windowactivate "$MAINWINDOW"
|
||||
else
|
||||
timeout "$XDOTOOL_TIMEOUT" xdotool behave "$XID" focus windowactivate "$MAINWINDOW" &
|
||||
fi
|
||||
done
|
||||
kill "$TABBEDPID"
|
||||
kill_viewer
|
||||
}
|
||||
|
||||
if [ ! -r "$NNN_FIFO" ] ; then
|
||||
echo "Can't read \$NNN_FIFO ('$NNN_FIFO')"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
previewer_loop < "$NNN_FIFO" &
|
||||
disown
|
|
@ -0,0 +1,495 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Terminal based file previewer
|
||||
#
|
||||
# Note: This plugin needs a "NNN_FIFO" to work. See man.
|
||||
#
|
||||
# Dependencies:
|
||||
# - Supports 6 independent methods to preview with:
|
||||
# - tmux (>=3.0), or
|
||||
# - kitty with allow_remote_control and listen_on set in kitty.conf, or
|
||||
# - wezterm (https://wezfurlong.org/wezterm), or
|
||||
# - QuickLook on WSL (https://github.com/QL-Win/QuickLook), or
|
||||
# - Windows Terminal (https://github.com/Microsoft/Terminal | https://aka.ms/terminal) with WSL, or
|
||||
# - $NNN_TERMINAL set to a terminal (it's xterm by default).
|
||||
# - less or $NNN_PAGER
|
||||
# - tree or exa or ls
|
||||
# - mediainfo or file
|
||||
# - mktemp
|
||||
# - unzip
|
||||
# - tar
|
||||
# - man
|
||||
# - optional: bsdtar or atool for additional archive preview
|
||||
# - optional: bat for code syntax highlighting
|
||||
# - optional: ueberzug, kitty terminal, wezterm terminal, viu, catimg or chafa for images
|
||||
# - optional: convert(ImageMagick) for playing gif preview (required for kitty image previews)
|
||||
# - optional: ffmpegthumbnailer for video thumbnails (https://github.com/dirkvdb/ffmpegthumbnailer)
|
||||
# - optional: ffmpeg for audio thumbnails
|
||||
# - optional: libreoffce for opendocument/officedocument preview
|
||||
# - optional: pdftoppm(poppler) for pdf thumbnails
|
||||
# - optional: gnome-epub-thumbnailer for epub thumbnails (https://gitlab.gnome.org/GNOME/gnome-epub-thumbnailer)
|
||||
# - optional: fontpreview for font preview (https://github.com/sdushantha/fontpreview)
|
||||
# - optional: djvulibre for djvu
|
||||
# - optional: glow or lowdown for markdown
|
||||
# - optional: w3m or lynx or elinks for html
|
||||
# - optional: set/export NNN_ICONLOOKUP as 1 to enable file icons in front of directory previews with .iconlookup
|
||||
# Icons and colors are configurable in .iconlookup
|
||||
# - optional: scope.sh file viewer from ranger.
|
||||
# 1. drop scope.sh executable in $PATH
|
||||
# 2. set/export $NNN_SCOPE as 1
|
||||
# - optional: pistol file viewer (https://github.com/doronbehar/pistol).
|
||||
# 1. install pistol
|
||||
# 2. set/export $NNN_PISTOL as 1
|
||||
#
|
||||
# Usage:
|
||||
# You need to set a NNN_FIFO path and a key for the plugin with NNN_PLUG,
|
||||
# then start `nnn`:
|
||||
#
|
||||
# $ nnn -a
|
||||
#
|
||||
# or
|
||||
#
|
||||
# $ NNN_FIFO=/tmp/nnn.fifo nnn
|
||||
#
|
||||
# Then launch the `preview-tui` plugin in `nnn`.
|
||||
#
|
||||
# If you provide the same NNN_FIFO to all nnn instances, there will be a
|
||||
# single common preview window. If you provide different FIFO path (e.g.
|
||||
# with -a), they will be independent.
|
||||
#
|
||||
# The previews will be shown in a tmux split. If that isn't possible, it
|
||||
# will try to use a kitty terminal split. And as a final fallback, a
|
||||
# different terminal window will be used ($NNN_TERMINAL).
|
||||
#
|
||||
# Tmux, wezterm and kitty users can configure $NNN_SPLIT to either "h" or "v" to set a
|
||||
# 'h'orizontal split or a 'v'ertical split (as in, the line that splits the
|
||||
# windows will be horizontal or vertical).
|
||||
#
|
||||
# Kitty users need something similar to the following in their kitty.conf:
|
||||
# - `allow_remote_control yes`
|
||||
# - `listen_on unix:$TMPDIR/kitty`
|
||||
# - `enabled_layouts splits` (optional)
|
||||
# With ImageMagick installed, this terminal can use the icat kitten to display images.
|
||||
# Refer to kitty documentation for further details.
|
||||
#
|
||||
# Wezterm should work out of the box. If `NNN_PREVIEWIMGPROG` is not specified it will use
|
||||
# built in iTerm2 image protocol.
|
||||
#
|
||||
# Iterm2 users are recommended to use viu to view images without getting pixelated.
|
||||
#
|
||||
# Windows Terminal users can set "Profile termination behavior" under "Profile > Advanced" settings
|
||||
# to automatically close pane on quit when exit code is 0.
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Authors: Todd Yamakawa, Léo Villeveygoux, @Recidiviste, Mario Ortiz Manero, Luuk van Baal, @WanderLanz
|
||||
|
||||
NNN_SPLIT=${NNN_SPLIT:-} # Set permanent split direction
|
||||
NNN_TERMINAL=${NNN_TERMINAL:-} # Set external terminal to be used
|
||||
NNN_SPLITSIZE=${NNN_SPLITSIZE:-50} # Set previewer split size percentage
|
||||
TMPDIR=${TMPDIR:-/tmp}
|
||||
NNN_PARENT=${NNN_FIFO#*.}
|
||||
[ "$NNN_PARENT" -eq "$NNN_PARENT" ] 2>/dev/null || NNN_PARENT="" # Make empty if non-numeric
|
||||
ENVVARS="
|
||||
PWD=$PWD
|
||||
PATH=$PATH
|
||||
PREVIEW_MODE=$2
|
||||
NNN_FIFO=$NNN_FIFO
|
||||
NNN_SCOPE=${NNN_SCOPE:-0}
|
||||
NNN_PISTOL=${NNN_PISTOL:-0}
|
||||
NNN_ICONLOOKUP=${NNN_ICONLOOKUP:-0}
|
||||
NNN_PAGER=${NNN_PAGER:-less -P?n -R}
|
||||
NNN_BATTHEME=${NNN_BATTHEME:-ansi}
|
||||
NNN_BATSTYLE=${NNN_BATSTYLE:-numbers}
|
||||
NNN_PREVIEWWIDTH=${NNN_PREVIEWWIDTH:-1920}
|
||||
NNN_PREVIEWHEIGHT=${NNN_PREVIEWHEIGHT:-1080}
|
||||
NNN_PREVIEWDIR=${NNN_PREVIEWDIR:-$TMPDIR/nnn/previews}
|
||||
NNN_PREVIEWIMGPROG=${NNN_PREVIEWIMGPROG:-}
|
||||
FIFOPID=$TMPDIR/nnn-preview-tui-fifopid.$NNN_PARENT
|
||||
FIFOPATH=$TMPDIR/nnn-preview-tui-fifo.$NNN_PARENT
|
||||
PREVIEWPID=$TMPDIR/nnn-preview-tui-previewpid.$NNN_PARENT
|
||||
CURSEL=$TMPDIR/nnn-preview-tui-selection.$NNN_PARENT
|
||||
FIFO_UEBERZUG=$TMPDIR/nnn-preview-tui-ueberzug-fifo.$NNN_PARENT
|
||||
POSOFFSET=$TMPDIR/nnn-preview-tui-posoffset"
|
||||
|
||||
if [ -e "${TMUX%%,*}" ] && tmux -V | grep -q '[ -][3456789]\.'; then
|
||||
NNN_TERMINAL=tmux
|
||||
elif [ -n "$KITTY_LISTEN_ON" ]; then
|
||||
NNN_TERMINAL=kitty
|
||||
elif [ -n "$WEZTERM_PANE" ]; then
|
||||
NNN_TERMINAL=wezterm
|
||||
elif [ -z "$NNN_TERMINAL" ] && [ "$TERM_PROGRAM" = "iTerm.app" ]; then
|
||||
NNN_TERMINAL=iterm
|
||||
elif [ -n "$WT_SESSION" ]; then
|
||||
NNN_TERMINAL=winterm
|
||||
else
|
||||
NNN_TERMINAL="${NNN_TERMINAL:-xterm}"
|
||||
fi
|
||||
|
||||
if [ -z "$NNN_SPLIT" ] && [ $(($(tput lines) * 2)) -gt "$(tput cols)" ]; then
|
||||
NNN_SPLIT='h'
|
||||
elif [ "$NNN_SPLIT" != 'h' ]; then
|
||||
NNN_SPLIT='v'
|
||||
fi
|
||||
|
||||
ENVVARS="$ENVVARS
|
||||
NNN_SPLIT=$NNN_SPLIT
|
||||
NNN_TERMINAL=$NNN_TERMINAL"
|
||||
IFS='
|
||||
'
|
||||
for env in $ENVVARS; do
|
||||
export "${env?}"
|
||||
case "$NNN_TERMINAL" in
|
||||
tmux) ENVSTRING="$ENVSTRING -e '$env'" ;;
|
||||
kitty) ENVSTRING="$ENVSTRING --env '$env'" ;;
|
||||
winterm|iterm) ENVSTRING="$ENVSTRING \\\"$env\\\"" ;;
|
||||
*) ENVSTRING="$ENVSTRING $env";;
|
||||
esac
|
||||
done; unset IFS
|
||||
|
||||
trap '' PIPE
|
||||
exists() { type "$1" >/dev/null 2>&1 ;}
|
||||
pkill() { command pkill "$@" >/dev/null 2>&1 ;}
|
||||
prompt() { printf "%b" "$@"; cfg=$(stty -g); stty raw -echo; head -c 1; stty "$cfg" ;}
|
||||
pidkill() {
|
||||
if [ -f "$1" ]; then
|
||||
PID="$(cat "$1" 2>/dev/null)" || return 1
|
||||
kill "$PID" >/dev/null 2>&1
|
||||
RET=$?
|
||||
wait "$PID" 2>/dev/null
|
||||
return $RET
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
start_preview() {
|
||||
case "$NNN_TERMINAL" in
|
||||
tmux) # tmux splits are inverted
|
||||
if [ "$NNN_SPLIT" = "v" ]; then split="h"; else split="v"; fi
|
||||
eval tmux split-window "$ENVSTRING" -d"$split" -p"$NNN_SPLITSIZE" "$0" "$1" 1 ;;
|
||||
kitty) # Setting the layout for the new window. It will be restored after the script ends.
|
||||
kitty @ goto-layout splits
|
||||
# Trying to use kitty's integrated window management as the split window.
|
||||
eval kitty @ launch --no-response --title "preview-tui" --keep-focus \
|
||||
--cwd "$PWD" "$ENVSTRING" --location "${NNN_SPLIT}split" "$0" "$1" 1 ;;
|
||||
wezterm)
|
||||
if [ "$NNN_SPLIT" = "v" ]; then split="--horizontal"; else split="--bottom"; fi
|
||||
wezterm cli split-pane --cwd "$PWD" $split "$0" "$1" 1 >/dev/null
|
||||
wezterm cli activate-pane-direction Prev ;;
|
||||
iterm)
|
||||
command="$SHELL -c 'cd $PWD; env $ENVSTRING $0 $1 1'"
|
||||
if [ "$NNN_SPLIT" = "h" ]; then split="horizontally"; else split="vertically"; fi
|
||||
osascript <<-EOF
|
||||
tell application "iTerm"
|
||||
tell current session of current window
|
||||
split $split with default profile command "$command"
|
||||
end tell
|
||||
end tell
|
||||
EOF
|
||||
;;
|
||||
winterm)
|
||||
if [ "$NNN_SPLIT" = "h" ]; then split="H"; else split="V"; fi
|
||||
cmd.exe /c wt -w 0 sp -$split -s"0.$NNN_SPLITSIZE" bash -c "cd $PWD \; \
|
||||
env $ENVSTRING QLPATH=$2 $0 $1 1" \; -w 0 mf previous 2>/dev/null ;;
|
||||
*) if [ -n "$2" ]; then
|
||||
env "$ENVSTRING" QUICKLOOK=1 QLPATH="$2" "$0" "$1" 1 &
|
||||
else
|
||||
env "$ENVSTRING" "$NNN_TERMINAL" -e "$0" "$1" 1 &
|
||||
fi ;;
|
||||
esac
|
||||
}
|
||||
|
||||
toggle_preview() {
|
||||
if exists QuickLook.exe; then
|
||||
QLPATH="QuickLook.exe"
|
||||
elif exists Bridge.exe; then
|
||||
QLPATH="Bridge.exe"
|
||||
fi
|
||||
if pidkill "$FIFOPID"; then
|
||||
[ -p "$NNN_PPIPE" ] && printf "0" > "$NNN_PPIPE"
|
||||
pidkill "$PREVIEWPID"
|
||||
pkill -f "tail --follow $FIFO_UEBERZUG"
|
||||
if [ -n "$QLPATH" ] && stat "$1"; then
|
||||
f="$(wslpath -w "$1")" && "$QLPATH" "$f" &
|
||||
fi
|
||||
else
|
||||
[ -p "$NNN_PPIPE" ] && printf "1" > "$NNN_PPIPE"
|
||||
start_preview "$1" "$QLPATH"
|
||||
fi
|
||||
}
|
||||
|
||||
fifo_pager() {
|
||||
cmd="$1"
|
||||
shift
|
||||
|
||||
# We use a FIFO to access $NNN_PAGER PID in jobs control
|
||||
mkfifo "$FIFOPATH" || return
|
||||
|
||||
$NNN_PAGER < "$FIFOPATH" &
|
||||
printf "%s" "$!" > "$PREVIEWPID"
|
||||
|
||||
(
|
||||
exec > "$FIFOPATH"
|
||||
if [ "$cmd" = "pager" ]; then
|
||||
if exists bat; then
|
||||
bat --terminal-width="$cols" --decorations=always --color=always \
|
||||
--paging=never --style="$NNN_BATSTYLE" --theme="$NNN_BATTHEME" "$@" &
|
||||
else
|
||||
$NNN_PAGER "$@" &
|
||||
fi
|
||||
else
|
||||
"$cmd" "$@" &
|
||||
fi
|
||||
)
|
||||
|
||||
rm "$FIFOPATH"
|
||||
}
|
||||
|
||||
# Binary file: show file info inside the pager
|
||||
print_bin_info() {
|
||||
printf -- "-------- \033[1;31mBinary file\033[0m --------\n"
|
||||
if exists mediainfo; then
|
||||
mediainfo "$1"
|
||||
else
|
||||
file -b "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
handle_mime() {
|
||||
case "$2" in
|
||||
image/jpeg) image_preview "$cols" "$lines" "$1" ;;
|
||||
image/gif) generate_preview "$cols" "$lines" "$1" "gif" ;;
|
||||
image/vnd.djvu) generate_preview "$cols" "$lines" "$1" "djvu" ;;
|
||||
image/*) generate_preview "$cols" "$lines" "$1" "image" ;;
|
||||
video/*) generate_preview "$cols" "$lines" "$1" "video" ;;
|
||||
audio/*) generate_preview "$cols" "$lines" "$1" "audio" ;;
|
||||
application/font*|application/*opentype|font/*) generate_preview "$cols" "$lines" "$1" "font" ;;
|
||||
*/*office*|*/*document*|*/*msword|*/*ms-excel) generate_preview "$cols" "$lines" "$1" "office" ;;
|
||||
application/zip) fifo_pager unzip -l "$1" ;;
|
||||
text/troff)
|
||||
if exists man; then
|
||||
fifo_pager man -Pcat -l "$1"
|
||||
else
|
||||
fifo_pager pager "$1"
|
||||
fi ;;
|
||||
*) handle_ext "$1" "$3" "$4" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
handle_ext() {
|
||||
case "$2" in
|
||||
epub) generate_preview "$cols" "$lines" "$1" "epub" ;;
|
||||
pdf) generate_preview "$cols" "$lines" "$1" "pdf" ;;
|
||||
gz|bz2) fifo_pager tar -tvf "$1" ;;
|
||||
md) if exists glow; then
|
||||
fifo_pager glow -s dark "$1"
|
||||
elif exists lowdown; then
|
||||
fifo_pager lowdown -Tterm "$1"
|
||||
else
|
||||
fifo_pager pager "$1"
|
||||
fi ;;
|
||||
htm|html|xhtml)
|
||||
if exists w3m; then
|
||||
fifo_pager w3m "$1"
|
||||
elif exists lynx; then
|
||||
fifo_pager lynx "$1"
|
||||
elif exists elinks; then
|
||||
fifo_pager elinks "$1"
|
||||
else
|
||||
fifo_pager pager "$1"
|
||||
fi ;;
|
||||
7z|a|ace|alz|arc|arj|bz|cab|cpio|deb|jar|lha|lz|lzh|lzma|lzo\
|
||||
|rar|rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z)
|
||||
if exists atool; then
|
||||
fifo_pager atool -l "$1"
|
||||
elif exists bsdtar; then
|
||||
fifo_pager bsdtar -tvf "$1"
|
||||
fi ;;
|
||||
*) if [ "$3" = "bin" ]; then
|
||||
fifo_pager print_bin_info "$1"
|
||||
else
|
||||
fifo_pager pager "$1"
|
||||
fi ;;
|
||||
esac
|
||||
}
|
||||
|
||||
preview_file() {
|
||||
clear
|
||||
# Trying to use pistol if it's available.
|
||||
if [ "$NNN_PISTOL" -ne 0 ] && exists pistol; then
|
||||
fifo_pager pistol "$1"
|
||||
return
|
||||
fi
|
||||
|
||||
# Trying to use scope.sh if it's available.
|
||||
if [ "$NNN_SCOPE" -ne 0 ] && exists scope.sh; then
|
||||
fifo_pager scope.sh "$1" "$cols" "$lines" "$(mktemp -d)" "True"
|
||||
return
|
||||
fi
|
||||
|
||||
# Use QuickLook if it's available.
|
||||
if [ -n "$QUICKLOOK" ]; then
|
||||
stat "$1" && f="$(wslpath -w "$1")" && "$QLPATH" "$f" &
|
||||
return
|
||||
fi
|
||||
|
||||
# Detecting the exact type of the file: the encoding, mime type, and extension in lowercase.
|
||||
encoding="$(file -bL --mime-encoding -- "$1")"
|
||||
mimetype="$(file -bL --mime-type -- "$1")"
|
||||
ext="${1##*.}"
|
||||
[ -n "$ext" ] && ext="$(printf "%s" "${ext}" | tr '[:upper:]' '[:lower:]')"
|
||||
lines=$(tput lines)
|
||||
cols=$(tput cols)
|
||||
|
||||
# Otherwise, falling back to the defaults.
|
||||
if [ -d "$1" ]; then
|
||||
cd "$1" || return
|
||||
if [ "$NNN_ICONLOOKUP" -ne 0 ] && [ -f "$(dirname "$0")"/.iconlookup ]; then
|
||||
[ "$NNN_SPLIT" = v ] && BSTR="\n"
|
||||
# shellcheck disable=SC2012
|
||||
ls -F --group-directories-first | head -n "$((lines - 3))" | "$(dirname "$0")"/.iconlookup -l "$cols" -B "$BSTR" -b " "
|
||||
elif exists tree; then
|
||||
fifo_pager tree --filelimit "$(find . -maxdepth 1 | wc -l)" -L 3 -C -F --dirsfirst --noreport
|
||||
elif exists exa; then
|
||||
exa -G --group-directories-first --colour=always
|
||||
else
|
||||
fifo_pager ls -F --group-directories-first --color=always
|
||||
fi
|
||||
cd ..
|
||||
elif [ "${encoding#*)}" = "binary" ]; then
|
||||
handle_mime "$1" "$mimetype" "$ext" "bin"
|
||||
else
|
||||
handle_mime "$1" "$mimetype" "$ext"
|
||||
fi
|
||||
}
|
||||
|
||||
generate_preview() {
|
||||
if [ -n "$QLPATH" ] && stat "$3"; then
|
||||
f="$(wslpath -w "$3")" && "$QLPATH" "$f" &
|
||||
elif [ ! -f "$NNN_PREVIEWDIR/$3.jpg" ] || [ -n "$(find -L "$3" -newer "$NNN_PREVIEWDIR/$3.jpg")" ]; then
|
||||
mkdir -p "$NNN_PREVIEWDIR/${3%/*}"
|
||||
case $4 in
|
||||
audio) ffmpeg -i "$3" -filter_complex "scale=iw*min(1\,min($NNN_PREVIEWWIDTH/iw\,ih)):-1" "$NNN_PREVIEWDIR/$3.jpg" -y ;;
|
||||
epub) gnome-epub-thumbnailer "$3" "$NNN_PREVIEWDIR/$3.jpg" ;;
|
||||
font) fontpreview -i "$3" -o "$NNN_PREVIEWDIR/$3.jpg" ;;
|
||||
gif) if [ -p "$FIFO_UEBERZUG" ] && exists convert; then
|
||||
frameprefix="$NNN_PREVIEWDIR/$3/${3##*/}"
|
||||
if [ ! -d "$NNN_PREVIEWDIR/$3" ]; then
|
||||
mkdir -p "$NNN_PREVIEWDIR/$3"
|
||||
convert -coalesce -resize "$NNN_PREVIEWWIDTH"x"$NNN_PREVIEWHEIGHT"\> "$3" "$frameprefix.jpg" ||
|
||||
MAGICK_TMPDIR="/tmp" convert -coalesce -resize "$NNN_PREVIEWWIDTH"x"$NNN_PREVIEWHEIGHT"\> "$3" "$frameprefix.jpg"
|
||||
fi
|
||||
frames=$(($(find "$NNN_PREVIEWDIR/$3" | wc -l) - 2))
|
||||
[ $frames -lt 0 ] && return
|
||||
while true; do
|
||||
for i in $(seq 0 $frames); do
|
||||
image_preview "$1" "$2" "$frameprefix-$i.jpg"
|
||||
sleep 0.1
|
||||
done
|
||||
done &
|
||||
printf "%s" "$!" > "$PREVIEWPID"
|
||||
return
|
||||
else
|
||||
image_preview "$1" "$2" "$3"
|
||||
return
|
||||
fi ;;
|
||||
image) if exists convert; then
|
||||
convert "$3" -flatten -resize "$NNN_PREVIEWWIDTH"x"$NNN_PREVIEWHEIGHT"\> "$NNN_PREVIEWDIR/$3.jpg"
|
||||
else
|
||||
image_preview "$1" "$2" "$3" && return
|
||||
fi ;;
|
||||
office) libreoffice --convert-to jpg "$3" --outdir "$NNN_PREVIEWDIR/${3%/*}"
|
||||
filename="$(printf "%s" "${3##*/}" | cut -d. -f1)"
|
||||
mv "$NNN_PREVIEWDIR/${3%/*}/$filename.jpg" "$NNN_PREVIEWDIR/$3.jpg" ;;
|
||||
pdf) pdftoppm -jpeg -f 1 -singlefile "$3" "$NNN_PREVIEWDIR/$3" ;;
|
||||
djvu) ddjvu -format=ppm -page=1 "$3" "$NNN_PREVIEWDIR/$3.jpg" ;;
|
||||
video) ffmpegthumbnailer -m -s0 -i "$3" -o "$NNN_PREVIEWDIR/$3.jpg" || rm "$NNN_PREVIEWDIR/$3.jpg" ;;
|
||||
esac
|
||||
fi
|
||||
if [ -f "$NNN_PREVIEWDIR/$3.jpg" ]; then
|
||||
image_preview "$1" "$2" "$NNN_PREVIEWDIR/$3.jpg"
|
||||
else
|
||||
fifo_pager print_bin_info "$3"
|
||||
fi
|
||||
} >/dev/null 2>&1
|
||||
|
||||
image_preview() {
|
||||
clear
|
||||
exec >/dev/tty
|
||||
if [ "$NNN_TERMINAL" = "kitty" ]; then
|
||||
# Kitty terminal users can use the native image preview method
|
||||
kitty +kitten icat --silent --scale-up --place "$1"x"$2"@0x0 --transfer-mode=stream --stdin=no "$3" &
|
||||
elif [ "$NNN_TERMINAL" = "wezterm" ] && [ -z "$NNN_PREVIEWIMGPROG" ]; then
|
||||
wezterm imgcat "$3" &
|
||||
elif exists ueberzug && { [ -z "$NNN_PREVIEWIMGPROG" ] || [ "$NNN_PREVIEWIMGPROG" = "ueberzug" ] ;}; then
|
||||
ueberzug_layer "$1" "$2" "$3" && return
|
||||
elif exists catimg && { [ -z "$NNN_PREVIEWIMGPROG" ] || [ "$NNN_PREVIEWIMGPROG" = "catimg" ] ;}; then
|
||||
catimg "$3" &
|
||||
elif exists viu && { [ -z "$NNN_PREVIEWIMGPROG" ] || [ "$NNN_PREVIEWIMGPROG" = "viu" ] ;}; then
|
||||
viu -t "$3" &
|
||||
elif exists chafa && { [ -z "$NNN_PREVIEWIMGPROG" ] || [ "$NNN_PREVIEWIMGPROG" = "chafa" ] ;}; then
|
||||
chafa "$3" &
|
||||
else
|
||||
fifo_pager print_bin_info "$3" && return
|
||||
fi
|
||||
printf "%s" "$!" > "$PREVIEWPID"
|
||||
}
|
||||
|
||||
ueberzug_layer() {
|
||||
[ -f "$POSOFFSET" ] && read -r x y < "$POSOFFSET"
|
||||
printf '{"action": "add", "identifier": "nnn_ueberzug", "x": %d, "y": %d, "width": "%d", "height": "%d", "scaler": "fit_contain", "path": "%s"}\n'\
|
||||
"${x:-0}" "${y:-0}" "$1" "$2" "$3" > "$FIFO_UEBERZUG"
|
||||
}
|
||||
|
||||
ueberzug_remove() {
|
||||
printf '{"action": "remove", "identifier": "nnn_ueberzug"}\n' > "$FIFO_UEBERZUG"
|
||||
}
|
||||
|
||||
winch_handler() {
|
||||
clear
|
||||
pidkill "$PREVIEWPID"
|
||||
if [ -p "$FIFO_UEBERZUG" ]; then
|
||||
pkill -f "tail --follow $FIFO_UEBERZUG"
|
||||
tail --follow "$FIFO_UEBERZUG" | ueberzug layer --silent --parser json &
|
||||
fi
|
||||
preview_file "$(cat "$CURSEL")"
|
||||
}
|
||||
|
||||
preview_fifo() {
|
||||
while read -r selection; do
|
||||
if [ -n "$selection" ]; then
|
||||
pidkill "$PREVIEWPID"
|
||||
[ -p "$FIFO_UEBERZUG" ] && ueberzug_remove
|
||||
[ "$selection" = "close" ] && break
|
||||
preview_file "$selection"
|
||||
printf "%s" "$selection" > "$CURSEL"
|
||||
fi
|
||||
done < "$NNN_FIFO"
|
||||
sleep 0.1 # make sure potential preview by winch_handler is killed
|
||||
pkill -P "$$"
|
||||
}
|
||||
|
||||
if [ "$PREVIEW_MODE" -eq 1 ] 2>/dev/null; then
|
||||
if [ "$NNN_TERMINAL" != "kitty" ] && exists ueberzug; then
|
||||
mkfifo "$FIFO_UEBERZUG"
|
||||
tail --follow "$FIFO_UEBERZUG" | ueberzug layer --silent --parser json &
|
||||
fi
|
||||
|
||||
preview_file "$PWD/$1"
|
||||
preview_fifo &
|
||||
printf "%s" "$!" > "$FIFOPID"
|
||||
printf "%s" "$PWD/$1" > "$CURSEL"
|
||||
trap 'winch_handler; wait' WINCH
|
||||
trap 'rm "$PREVIEWPID" "$CURSEL" "$FIFO_UEBERZUG" "$FIFOPID" "$POSOFFSET" 2>/dev/null' INT HUP EXIT
|
||||
wait "$!" 2>/dev/null
|
||||
exit 0
|
||||
else
|
||||
if [ ! -r "$NNN_FIFO" ]; then
|
||||
clear
|
||||
prompt "No FIFO available! (\$NNN_FIFO='$NNN_FIFO')\nPlease read Usage in '$0'."
|
||||
elif [ "$KITTY_WINDOW_ID" ] && [ -z "$TMUX" ] && [ -z "$KITTY_LISTEN_ON" ]; then
|
||||
clear
|
||||
prompt "\$KITTY_LISTEN_ON not set!\nPlease read Usage in '$0'."
|
||||
else
|
||||
toggle_preview "$1" &
|
||||
fi
|
||||
fi
|
|
@ -0,0 +1,35 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Fuzzy list and kill a (zombie) process by name
|
||||
#
|
||||
# Dependencies: fzf, ps
|
||||
#
|
||||
# Note: To kill a zombie process enter "zombie"
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
printf "Enter process name ['defunct' for zombies]: "
|
||||
read -r psname
|
||||
|
||||
# shellcheck disable=SC2009
|
||||
if [ -n "$psname" ]; then
|
||||
if type sudo >/dev/null 2>&1; then
|
||||
sucmd=sudo
|
||||
elif type doas >/dev/null 2>&1; then
|
||||
sucmd=doas
|
||||
else
|
||||
sucmd=: # noop
|
||||
fi
|
||||
|
||||
if type fzf >/dev/null 2>&1; then
|
||||
fuzzy=fzf
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cmd="$(ps -ax | grep -iw "$psname" | "$fuzzy" | sed -e 's/^[ \t]*//' | cut -d' ' -f1)"
|
||||
if [ -n "$cmd" ]; then
|
||||
$sucmd kill -9 "$cmd"
|
||||
fi
|
||||
fi
|
|
@ -0,0 +1,45 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Batch rename selection or current directory with qmv or vidir
|
||||
#
|
||||
# Notes:
|
||||
# - Try to mimic current batch rename functionality but with correct
|
||||
# handling of edge cases by qmv or vidir.
|
||||
# - Qmv opens with hidden files if no selection is used. Selected
|
||||
# directories are shown.
|
||||
# - Vidir don't show directories nor hidden files.
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: José Neder
|
||||
|
||||
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
|
||||
if type qmv >/dev/null 2>&1; then
|
||||
batchrenamesel="qmv -fdo -da"
|
||||
batchrename="qmv -fdo -a"
|
||||
elif type vidir >/dev/null 2>&1; then
|
||||
batchrenamesel="vidir"
|
||||
batchrename="vidir"
|
||||
else
|
||||
printf "there is not batchrename program installed."
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ -s "$selection" ]; then
|
||||
printf "rename selection? "
|
||||
read -r resp
|
||||
fi
|
||||
|
||||
if [ "$resp" = "y" ]; then
|
||||
# -o flag is necessary for interactive editors
|
||||
xargs -o -0 $batchrenamesel < "$selection"
|
||||
|
||||
# Clear selection
|
||||
if [ -p "$NNN_PIPE" ]; then
|
||||
printf "-" > "$NNN_PIPE"
|
||||
fi
|
||||
elif [ ! "$(LC_ALL=C ls -a)" = ".
|
||||
.." ]; then
|
||||
# On older systems that don't have ls -A
|
||||
$batchrename
|
||||
fi
|
|
@ -0,0 +1,36 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Create an mp3 ringtone out of an audio file in any format
|
||||
# Needs user to provide start and end where to cut the file
|
||||
# Input file audio.ext results in audio_ringtone.mp3
|
||||
#
|
||||
# Tip: To convert a complete media file, set start as 0 and
|
||||
# the runtime of the file as end.
|
||||
#
|
||||
# Dependencies: date, ffmpeg
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
if [ -n "$1" ]; then
|
||||
printf "start (hh:mm:ss): "
|
||||
read -r start
|
||||
st=$(date -d "$start" +%s) || exit 1
|
||||
|
||||
printf "end (hh:mm:ss): "
|
||||
read -r end
|
||||
et=$(date -d "$end" +%s) || exit 1
|
||||
|
||||
if [ "$st" -ge "$et" ]; then
|
||||
printf "error: start >= end "
|
||||
read -r _
|
||||
exit 1
|
||||
fi
|
||||
|
||||
interval=$(( et - st ))
|
||||
|
||||
outfile=$(basename "$1")
|
||||
outfile="${outfile%.*}"_ringtone.mp3
|
||||
|
||||
ffmpeg -i "$1" -ss "$start" -t "$interval" -vn -sn -acodec libmp3lame -q:a 2 "$outfile"
|
||||
fi
|
|
@ -0,0 +1,26 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Simple script to give copy-paste a progress percentage
|
||||
# by utilizing rsync.
|
||||
#
|
||||
# LIMITATION: this won't work when pasting to MTP device.
|
||||
#
|
||||
# Dependencies: rsync
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Benawi Adha
|
||||
|
||||
sel=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
|
||||
# Choose one of these two schemes by commenting
|
||||
|
||||
# more verbose
|
||||
xargs -0 -I % rsync -ah --progress % "$PWD" < "$sel"
|
||||
|
||||
# less verbose
|
||||
# xargs -0 -I % rsync -ah --info=progress2 % "$PWD" < "$sel"
|
||||
|
||||
# Clear selection
|
||||
if [ -p "$NNN_PIPE" ]; then
|
||||
printf "-" > "$NNN_PIPE"
|
||||
fi
|
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Splits the file passed as argument or joins selection
|
||||
#
|
||||
# Note: Adds numeric suffix to split files
|
||||
# Adds '.out suffix to the first file to be joined and saves as output file for join
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Authors: Arun Prakash Jana, ath3
|
||||
|
||||
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
resp=s
|
||||
|
||||
if [ -s "$selection" ]; then
|
||||
printf "press 's' (split current file) or 'j' (join selection): "
|
||||
read -r resp
|
||||
fi
|
||||
|
||||
if [ "$resp" = "j" ]; then
|
||||
if [ -s "$selection" ]; then
|
||||
arr=$(tr '\0' '\n' < "$selection")
|
||||
if [ "$(echo "$arr" | wc -l)" -lt 2 ]; then
|
||||
echo "joining needs at least 2 files"
|
||||
exit
|
||||
fi
|
||||
for entry in $arr
|
||||
do
|
||||
if [ -d "$entry" ]; then
|
||||
echo "can't join directories"
|
||||
exit
|
||||
fi
|
||||
done
|
||||
|
||||
file="$(basename "$(echo "$arr" | sed -n '1p' | sed -e 's/[0-9][0-9]$//')")"
|
||||
sort -z < "$selection" | xargs -0 -I{} cat {} > "${file}.out"
|
||||
|
||||
# Clear selection
|
||||
if [ -p "$NNN_PIPE" ]; then
|
||||
printf "-" > "$NNN_PIPE"
|
||||
fi
|
||||
fi
|
||||
elif [ "$resp" = "s" ]; then
|
||||
if [ -n "$1" ] && [ -f "$1" ]; then
|
||||
# a single file is passed
|
||||
printf "split size in MB: "
|
||||
read -r size
|
||||
|
||||
if [ -n "$size" ]; then
|
||||
split -d -b "$size"M "$1" "$1"
|
||||
fi
|
||||
fi
|
||||
fi
|
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Edit file as superuser
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Anna Arad
|
||||
|
||||
EDITOR="${EDITOR:-vim}"
|
||||
|
||||
if type sudo >/dev/null 2>&1; then
|
||||
sudo -E "$EDITOR" "$1"
|
||||
elif type sudoedit >/dev/null 2>&1; then
|
||||
sudoedit -E "$1"
|
||||
elif type doas >/dev/null 2>&1; then
|
||||
doas "$EDITOR" "$1"
|
||||
fi
|
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Toggles executable mode for selection
|
||||
#
|
||||
# Dependencies: chmod
|
||||
#
|
||||
# Note: Works _only_ with selection (nnn can toggle the mode for the hovered file)
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
|
||||
if [ -s "$selection" ]; then
|
||||
xargs -0 -I {} sh -c 'if [ -x "{}" ] ; then chmod -x "{}" ; else chmod +x "{}" ; fi' < "$selection"
|
||||
|
||||
# Clear selection
|
||||
if [ -p "$NNN_PIPE" ]; then
|
||||
printf "-" > "$NNN_PIPE"
|
||||
fi
|
||||
fi
|
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Autodetects a nnn remote mountpoint (mounted with `c`)
|
||||
# from any of its subfolders and allows unmounting it
|
||||
# from the subdir without navigating to the mountppoint
|
||||
# or entering the remote name. Also works when hovering
|
||||
# the mountpoint directly like vanilla `u`.
|
||||
#
|
||||
# Dependencies: fusermount
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Authors: Kabouik & 0xACE
|
||||
#
|
||||
# TODO:
|
||||
# - Avoid lazy unmount by forcing nnn context to leave the subfolder before fusermount.
|
||||
# Tried `printf "%s" "0c$m" > "$NNN_PIPE"` but it breaks the nnn interface, see #854.
|
||||
|
||||
err=0
|
||||
m=$HOME/.config/nnn/mounts
|
||||
if [ "$PWD" = "$m" ]; then
|
||||
# Allow running the script on hovered directory if user is in ~/.config/nnn/mounts
|
||||
d="$1"
|
||||
else
|
||||
d=$(dirname "$(readlink -f "$1")" | grep -oP "^$m\K.*" | cut -d"/" -f2)
|
||||
fi
|
||||
|
||||
# Test if user is within $m or a subdir, abort if not
|
||||
if [ "$d" = "" ]; then
|
||||
clear && printf "You are not in a remote folder mounted with nnn. Press return to continue. " && read -r _
|
||||
else
|
||||
# Test if $m/$d is a mountpoint and try unmounting if it is
|
||||
mountpoint -q -- "$m/$d"
|
||||
if [ "$?" -eq "1" ]; then
|
||||
clear && printf "Parent '%s' is not a mountpoint. Press return to continue. " "$d" && read -r _
|
||||
else
|
||||
cd "$m" && fusermount -uq "$m/$d" || err=1
|
||||
if [ "$err" -eq "0" ]; then
|
||||
rmdir "$m/$d" && clear && printf "Parent '%s' unmounted." "$d"
|
||||
else
|
||||
clear && printf "Failed to unmount. Try lazy unmount? [Yy/Nn] " && read -r
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# If unmount fails, offer lazy unmount
|
||||
if [ "$REPLY" = "y" ] || [ "$REPLY" = "Y" ]; then
|
||||
err=0
|
||||
cd "$m" && fusermount -uqz "$m/$d" || err=1
|
||||
if [ "$err" -eq "0" ]; then
|
||||
rmdir "$m/$d" && clear && printf "Parent '%s' unmounted with lazy unmount. " "$d"
|
||||
fi
|
||||
fi
|
|
@ -0,0 +1,45 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Selections are uploaded using Firefox Send
|
||||
# For single files:
|
||||
# Upload to Firefox Send if ffsend is found, else
|
||||
# Paste contents of a text a file http://ix.io
|
||||
# Upload a binary file to file.io
|
||||
#
|
||||
# Dependencies: ffsend (https://github.com/timvisee/ffsend), curl, jq, tr
|
||||
#
|
||||
# Note: Binary file set to expire after a week
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Arun Prakash Jana
|
||||
|
||||
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
if [ -s "$selection" ]; then
|
||||
if type ffsend >/dev/null 2>&1; then
|
||||
# File name will be randomized foo.tar
|
||||
xargs -0 < "$selection" ffsend u
|
||||
else
|
||||
printf "ffsend is required to upload selection."
|
||||
fi
|
||||
|
||||
# Clear selection
|
||||
printf "-" > "$NNN_PIPE"
|
||||
else
|
||||
if [ -n "$1" ] && [ -s "$1" ]; then
|
||||
if type ffsend >/dev/null 2>&1; then
|
||||
ffsend -fiq u "$1"
|
||||
elif [ "$(mimetype --output-format %m "$1" | awk -F '/' '{print $1}')" = "text" ]; then
|
||||
curl -F "f:1=@$1" ix.io
|
||||
else
|
||||
# Upload the file, show the download link and wait till user presses any key
|
||||
curl -s -F "file=@$1" https://file.io/?expires=1w | jq '.link' | tr -d '"'
|
||||
|
||||
# To write download link to "$1".loc and exit
|
||||
# curl -s -F "file=@$1" https://file.io/?expires=1w -o `basename "$1"`.loc
|
||||
fi
|
||||
else
|
||||
printf "empty file!"
|
||||
fi
|
||||
fi
|
||||
|
||||
read -r _
|
|
@ -0,0 +1,37 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Set the selected image as wallpaper.
|
||||
# Uses nitrogen or pywal on X11, swww on wayland.
|
||||
#
|
||||
# Usage: Hover on an image and run the script to set it as wallpaper.
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: juacq97
|
||||
|
||||
if [ -n "$1" ]; then
|
||||
if [ "$(file --mime-type "$1" | awk '{print $NF}' | awk -F '/' '{print $1}')" = "image" ]; then
|
||||
if [ "$XDG_SESSION_TYPE" = "x11" ]; then
|
||||
if type nitrogen >/dev/null 2>&1; then
|
||||
nitrogen --set-zoom-fill --save "$1"
|
||||
elif type wal >/dev/null 2>&1; then
|
||||
wal -i "$1"
|
||||
else
|
||||
printf "nitrogen or pywal missing"
|
||||
read -r _
|
||||
fi
|
||||
else
|
||||
if type swww >/dev/null 2>&1; then
|
||||
swww img "$1"
|
||||
else
|
||||
printf "swww missing"
|
||||
read -r _
|
||||
fi
|
||||
fi
|
||||
|
||||
# If you want a system notification, uncomment the next 3 lines.
|
||||
# notify-send -a "nnn" "Wallpaper changed!"
|
||||
# else
|
||||
# notify-send -a "nnn" "No image selected"
|
||||
|
||||
fi
|
||||
fi
|
|
@ -0,0 +1,62 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Copy system clipboard newline-separated file list to selection
|
||||
#
|
||||
# Dependencies:
|
||||
# - tr
|
||||
# - xclip/xsel (Linux)
|
||||
# - pbpaste (macOS)
|
||||
# - termux-clipboard-get (Termux)
|
||||
# - powershell (WSL)
|
||||
# - cygwim's /dev/clipboard (Cygwin)
|
||||
# - wl-paste (Wayland)
|
||||
# - clipboard (Haiku)
|
||||
#
|
||||
# Note:
|
||||
# - Limitation: breaks if a filename has newline in it
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: Léo Villeveygoux, after Arun Prakash Jana's .cbcp
|
||||
|
||||
IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}" # protect trailing \n
|
||||
|
||||
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
||||
|
||||
getclip () {
|
||||
if [ "$XDG_SESSION_TYPE" = "wayland" ]; then
|
||||
# Wayland
|
||||
wl-paste
|
||||
elif type xsel >/dev/null 2>&1; then
|
||||
# Linux
|
||||
xsel -bo
|
||||
elif type xclip >/dev/null 2>&1; then
|
||||
# Linux
|
||||
xclip -sel clip -o
|
||||
elif type pbpaste >/dev/null 2>&1; then
|
||||
# macOS
|
||||
pbpaste
|
||||
elif type termux-clipboard-get >/dev/null 2>&1; then
|
||||
# Termux
|
||||
termux-clipboard-get
|
||||
elif type powershell.exe >/dev/null 2>&1; then
|
||||
# WSL
|
||||
powershell.exe Get-Clipboard
|
||||
elif [ -r /dev/clipboard ] ; then
|
||||
# Cygwin
|
||||
cat /dev/clipboard
|
||||
elif type clipboard >/dev/null 2>&1; then
|
||||
# Haiku
|
||||
clipboard --print
|
||||
fi
|
||||
}
|
||||
|
||||
CLIPBOARD=$(getclip)
|
||||
|
||||
# Check if clipboard actually contains a file list
|
||||
for file in $CLIPBOARD ; do
|
||||
if [ ! -e "$file" ] ; then
|
||||
exit 1;
|
||||
fi
|
||||
done
|
||||
|
||||
printf "%s" "$CLIPBOARD" | tr '\n' '\0' > "$selection"
|
|
@ -0,0 +1,53 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Sets the xdg-open's default application for the current entry's file
|
||||
# type. ${XDG_DATA_DIRS} and ${XDG_DATA_HOME} are set to the recommended
|
||||
# defaults if unset, as specified in XDG Base Directory Specification
|
||||
# - http://specifications.freedesktop.org/basedir-spec/.
|
||||
#
|
||||
# Dependencies: xdg-utils, fzf or dmenu (GUI)
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Author: lwnctd
|
||||
|
||||
# set to 1 to enable GUI apps
|
||||
GUI="${GUI:-0}"
|
||||
|
||||
if [ "$GUI" -ne 0 ] && command -v dmenu > /dev/null 2>& 1; then
|
||||
menu="dmenu -i -l 7"
|
||||
elif command -v fzf > /dev/null 2>& 1; then
|
||||
menu="fzf -e --tiebreak=begin"
|
||||
fi
|
||||
|
||||
if [ -z "$1" ] || [ -z "$menu" ] > /dev/null 2>& 1; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ftype=$(xdg-mime query filetype "$2/$1")
|
||||
|
||||
if [ -z "$ftype" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dirs=${XDG_DATA_DIRS:-/usr/local/share:/usr/share}
|
||||
dirs=${dirs}:${XDG_DATA_HOME:-$HOME/.local/share}:
|
||||
|
||||
while [ -n "$dirs" ]; do
|
||||
d=${dirs%%:*}
|
||||
if [ -n "$d" ] && [ -d "$d"/applications ]; then
|
||||
set -- "$@" "$d"/applications
|
||||
fi
|
||||
dirs=${dirs#*:}
|
||||
done
|
||||
|
||||
app=$(find "$@" -iname '*.desktop' -exec grep '^Name=' {} + \
|
||||
| sort -u -t ':' -k 1,1 \
|
||||
| sed -e 's;..*/\(..*desktop\):Name=\(..*\);\2:\1;' \
|
||||
| sort -t ':' -k 1,1 \
|
||||
| column -t -s ':' -o "$(printf '\t')" \
|
||||
| $menu \
|
||||
| cut -f 2)
|
||||
|
||||
if [ -n "$app" ]; then
|
||||
xdg-mime default "${app%%[[:blank:]]*}" "$ftype"
|
||||
fi
|
|
@ -0,0 +1,14 @@
|
|||
[database]
|
||||
path=/home/javier/.local/share/mail
|
||||
[user]
|
||||
name=jpacheco
|
||||
primary_email=jpacheco@cock.li
|
||||
[new]
|
||||
tags=unread;inbox;
|
||||
ignore=.mbsyncstate;.uidvalidity
|
||||
[search]
|
||||
exclude_tags=deleted;spam;
|
||||
[maildir]
|
||||
synchronize_flags=true
|
||||
[crypto]
|
||||
gpg_path=gpg
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue