diff --git a/config/.config/bat/config b/config/.config/bat/config
new file mode 100644
index 0000000..e8ef475
--- /dev/null
+++ b/config/.config/bat/config
@@ -0,0 +1,3 @@
+--theme=Catppuccin-mocha
+--style=plain
+--pager="less -FRX"
diff --git a/config/.config/bat/themes/Catppuccin-mocha.tmTheme b/config/.config/bat/themes/Catppuccin-mocha.tmTheme
new file mode 100644
index 0000000..ff135ab
--- /dev/null
+++ b/config/.config/bat/themes/Catppuccin-mocha.tmTheme
@@ -0,0 +1,2048 @@
+
+
+
+
+ name
+ Catppuccin Mocha
+ semanticClass
+ theme.dark.catppuccin-mocha
+ uuid
+ 627ce890-fabb-4d39-9819-7be71f4bdca7
+ author
+ Catppuccin Org
+ colorSpaceName
+ sRGB
+ settings
+
+
+ settings
+
+ background
+ #1e1e2e
+ foreground
+ #cdd6f4
+ caret
+ #f5e0dc
+ lineHighlight
+ #313244
+ misspelling
+ #f38ba8
+ accent
+ #cba6f7
+ selection
+ #9399b240
+ activeGuide
+ #45475a
+ findHighlight
+ #3e5767
+ gutterForeground
+ #7f849c
+
+
+
+ name
+ Basic text & variable names (incl. leading punctuation)
+ scope
+ text, source, variable.other.readwrite, punctuation.definition.variable
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ name
+ Parentheses, Brackets, Braces
+ scope
+ punctuation
+ settings
+
+ foreground
+ #9399b2
+ fontStyle
+
+
+
+
+ name
+ Comments
+ scope
+ comment, punctuation.definition.comment
+ settings
+
+ foreground
+ #6c7086
+ fontStyle
+ italic
+
+
+
+ scope
+ string, punctuation.definition.string
+ settings
+
+ foreground
+ #a6e3a1
+
+
+
+ scope
+ constant.character.escape
+ settings
+
+ foreground
+ #f5c2e7
+
+
+
+ name
+ Booleans, constants, numbers
+ scope
+ constant.numeric, variable.other.constant, entity.name.constant, constant.language.boolean, constant.language.false, constant.language.true, keyword.other.unit.user-defined, keyword.other.unit.suffix.floating-point
+ settings
+
+ foreground
+ #fab387
+
+
+
+ scope
+ keyword, keyword.operator.word, keyword.operator.new, variable.language.super, support.type.primitive, storage.type, storage.modifier, punctuation.definition.keyword
+ settings
+
+ foreground
+ #cba6f7
+ fontStyle
+
+
+
+
+ scope
+ entity.name.tag.documentation
+ settings
+
+ foreground
+ #cba6f7
+
+
+
+ name
+ Punctuation
+ scope
+ keyword.operator, punctuation.accessor, punctuation.definition.generic, meta.function.closure punctuation.section.parameters, punctuation.definition.tag, punctuation.separator.key-value
+ settings
+
+ foreground
+ #94e2d5
+
+
+
+ scope
+ entity.name.function, meta.function-call.method, support.function, support.function.misc, variable.function
+ settings
+
+ foreground
+ #89b4fa
+ fontStyle
+ italic
+
+
+
+ name
+ Classes
+ scope
+ entity.name.class, entity.other.inherited-class, support.class, meta.function-call.constructor, entity.name.struct
+ settings
+
+ foreground
+ #f9e2af
+ fontStyle
+ italic
+
+
+
+ name
+ Enum
+ scope
+ entity.name.enum
+ settings
+
+ foreground
+ #f9e2af
+ fontStyle
+ italic
+
+
+
+ name
+ Enum member
+ scope
+ meta.enum variable.other.readwrite, variable.other.enummember
+ settings
+
+ foreground
+ #94e2d5
+
+
+
+ name
+ Object properties
+ scope
+ meta.property.object
+ settings
+
+ foreground
+ #94e2d5
+
+
+
+ name
+ Types
+ scope
+ meta.type, meta.type-alias, support.type, entity.name.type
+ settings
+
+ foreground
+ #f9e2af
+ fontStyle
+ italic
+
+
+
+ name
+ Decorators
+ scope
+ meta.annotation variable.function, meta.annotation variable.annotation.function, meta.annotation punctuation.definition.annotation, meta.decorator, punctuation.decorator
+ settings
+
+ foreground
+ #fab387
+
+
+
+ scope
+ variable.parameter, meta.function.parameters
+ settings
+
+ foreground
+ #eba0ac
+ fontStyle
+ italic
+
+
+
+ name
+ Built-ins
+ scope
+ constant.language, support.function.builtin
+ settings
+
+ foreground
+ #f38ba8
+
+
+
+ scope
+ entity.other.attribute-name.documentation
+ settings
+
+ foreground
+ #f38ba8
+
+
+
+ name
+ Preprocessor directives
+ scope
+ keyword.control.directive, punctuation.definition.directive
+ settings
+
+ foreground
+ #f9e2af
+
+
+
+ name
+ Type parameters
+ scope
+ punctuation.definition.typeparameters
+ settings
+
+ foreground
+ #89dceb
+
+
+
+ name
+ Namespaces
+ scope
+ entity.name.namespace
+ settings
+
+ foreground
+ #f9e2af
+
+
+
+ name
+ Property names (left hand assignments in json/yaml/css)
+ scope
+ support.type.property-name.css
+ settings
+
+ foreground
+ #89b4fa
+ fontStyle
+
+
+
+
+ name
+ This/Self keyword
+ scope
+ variable.language.this, variable.language.this punctuation.definition.variable
+ settings
+
+ foreground
+ #f38ba8
+
+
+
+ name
+ Object properties
+ scope
+ variable.object.property
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ name
+ String template interpolation
+ scope
+ string.template variable, string variable
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ name
+ `new` as bold
+ scope
+ keyword.operator.new
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ C++ extern keyword
+ scope
+ storage.modifier.specifier.extern.cpp
+ settings
+
+ foreground
+ #cba6f7
+
+
+
+ name
+ C++ scope resolution
+ scope
+ entity.name.scope-resolution.template.call.cpp, entity.name.scope-resolution.parameter.cpp, entity.name.scope-resolution.cpp, entity.name.scope-resolution.function.definition.cpp
+ settings
+
+ foreground
+ #f9e2af
+
+
+
+ name
+ C++ doc keywords
+ scope
+ storage.type.class.doxygen
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ C++ operators
+ scope
+ storage.modifier.reference.cpp
+ settings
+
+ foreground
+ #94e2d5
+
+
+
+ name
+ C# Interpolated Strings
+ scope
+ meta.interpolation.cs
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ name
+ C# xml-style docs
+ scope
+ comment.block.documentation.cs
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ name
+ Classes, reflecting the className color in JSX
+ scope
+ source.css entity.other.attribute-name.class.css, entity.other.attribute-name.parent-selector.css punctuation.definition.entity.css
+ settings
+
+ foreground
+ #f9e2af
+
+
+
+ name
+ Operators
+ scope
+ punctuation.separator.operator.css
+ settings
+
+ foreground
+ #94e2d5
+
+
+
+ name
+ Pseudo classes
+ scope
+ source.css entity.other.attribute-name.pseudo-class
+ settings
+
+ foreground
+ #94e2d5
+
+
+
+ scope
+ source.css constant.other.unicode-range
+ settings
+
+ foreground
+ #fab387
+
+
+
+ scope
+ source.css variable.parameter.url
+ settings
+
+ foreground
+ #a6e3a1
+ fontStyle
+
+
+
+
+ name
+ CSS vendored property names
+ scope
+ support.type.vendored.property-name
+ settings
+
+ foreground
+ #89dceb
+
+
+
+ name
+ Less/SCSS right-hand variables (@/$-prefixed)
+ scope
+ source.css meta.property-value variable, source.css meta.property-value variable.other.less, source.css meta.property-value variable.other.less punctuation.definition.variable.less, meta.definition.variable.scss
+ settings
+
+ foreground
+ #eba0ac
+
+
+
+ name
+ CSS variables (--prefixed)
+ scope
+ source.css meta.property-list variable, meta.property-list variable.other.less, meta.property-list variable.other.less punctuation.definition.variable.less
+ settings
+
+ foreground
+ #89b4fa
+
+
+
+ name
+ CSS Percentage values, styled the same as numbers
+ scope
+ keyword.other.unit.percentage.css
+ settings
+
+ foreground
+ #fab387
+
+
+
+ name
+ CSS Attribute selectors, styled the same as strings
+ scope
+ source.css meta.attribute-selector
+ settings
+
+ foreground
+ #a6e3a1
+
+
+
+ name
+ JSON/YAML keys, other left-hand assignments
+ scope
+ keyword.other.definition.ini, punctuation.support.type.property-name.json, support.type.property-name.json, punctuation.support.type.property-name.toml, support.type.property-name.toml, entity.name.tag.yaml, punctuation.support.type.property-name.yaml, support.type.property-name.yaml
+ settings
+
+ foreground
+ #89b4fa
+ fontStyle
+
+
+
+
+ name
+ JSON/YAML constants
+ scope
+ constant.language.json, constant.language.yaml
+ settings
+
+ foreground
+ #fab387
+
+
+
+ name
+ YAML anchors
+ scope
+ entity.name.type.anchor.yaml, variable.other.alias.yaml
+ settings
+
+ foreground
+ #f9e2af
+ fontStyle
+
+
+
+
+ name
+ TOML tables / ini groups
+ scope
+ support.type.property-name.table, entity.name.section.group-title.ini
+ settings
+
+ foreground
+ #f9e2af
+
+
+
+ name
+ TOML dates
+ scope
+ constant.other.time.datetime.offset.toml
+ settings
+
+ foreground
+ #f5c2e7
+
+
+
+ name
+ YAML anchor puctuation
+ scope
+ punctuation.definition.anchor.yaml, punctuation.definition.alias.yaml
+ settings
+
+ foreground
+ #f5c2e7
+
+
+
+ name
+ YAML triple dashes
+ scope
+ entity.other.document.begin.yaml
+ settings
+
+ foreground
+ #f5c2e7
+
+
+
+ name
+ Markup Diff
+ scope
+ markup.changed.diff
+ settings
+
+ foreground
+ #fab387
+
+
+
+ name
+ Diff
+ scope
+ meta.diff.header.from-file, meta.diff.header.to-file, punctuation.definition.from-file.diff, punctuation.definition.to-file.diff
+ settings
+
+ foreground
+ #89b4fa
+
+
+
+ name
+ Diff Inserted
+ scope
+ markup.inserted.diff
+ settings
+
+ foreground
+ #a6e3a1
+
+
+
+ name
+ Diff Deleted
+ scope
+ markup.deleted.diff
+ settings
+
+ foreground
+ #f38ba8
+
+
+
+ name
+ dotenv left-hand side assignments
+ scope
+ variable.other.env
+ settings
+
+ foreground
+ #89b4fa
+
+
+
+ name
+ dotenv reference to existing env variable
+ scope
+ string.quoted variable.other.env
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ name
+ GDScript functions
+ scope
+ support.function.builtin.gdscript
+ settings
+
+ foreground
+ #89b4fa
+
+
+
+ name
+ GDScript constants
+ scope
+ constant.language.gdscript
+ settings
+
+ foreground
+ #fab387
+
+
+
+ name
+ Comment keywords
+ scope
+ comment meta.annotation.go
+ settings
+
+ foreground
+ #eba0ac
+
+
+
+ name
+ go:embed, go:build, etc.
+ scope
+ comment meta.annotation.parameters.go
+ settings
+
+ foreground
+ #fab387
+
+
+
+ name
+ Go constants (nil, true, false)
+ scope
+ constant.language.go
+ settings
+
+ foreground
+ #fab387
+
+
+
+ name
+ GraphQL variables
+ scope
+ variable.graphql
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ name
+ GraphQL aliases
+ scope
+ string.unquoted.alias.graphql
+ settings
+
+ foreground
+ #f2cdcd
+
+
+
+ name
+ GraphQL enum members
+ scope
+ constant.character.enum.graphql
+ settings
+
+ foreground
+ #94e2d5
+
+
+
+ name
+ GraphQL field in types
+ scope
+ meta.objectvalues.graphql constant.object.key.graphql string.unquoted.graphql
+ settings
+
+ foreground
+ #f2cdcd
+
+
+
+ name
+ HTML/XML DOCTYPE as keyword
+ scope
+ keyword.other.doctype, meta.tag.sgml.doctype punctuation.definition.tag, meta.tag.metadata.doctype entity.name.tag, meta.tag.metadata.doctype punctuation.definition.tag
+ settings
+
+ foreground
+ #cba6f7
+
+
+
+ name
+ HTML/XML-like <tags/>
+ scope
+ entity.name.tag
+ settings
+
+ foreground
+ #89b4fa
+ fontStyle
+
+
+
+
+ name
+ Special characters like &
+ scope
+ text.html constant.character.entity, text.html constant.character.entity punctuation, constant.character.entity.xml, constant.character.entity.xml punctuation, constant.character.entity.js.jsx, constant.charactger.entity.js.jsx punctuation, constant.character.entity.tsx, constant.character.entity.tsx punctuation
+ settings
+
+ foreground
+ #f38ba8
+
+
+
+ name
+ HTML/XML tag attribute values
+ scope
+ entity.other.attribute-name
+ settings
+
+ foreground
+ #f9e2af
+
+
+
+ name
+ Components
+ scope
+ support.class.component, support.class.component.jsx, support.class.component.tsx, support.class.component.vue
+ settings
+
+ foreground
+ #f5c2e7
+ fontStyle
+
+
+
+
+ name
+ Annotations
+ scope
+ punctuation.definition.annotation, storage.type.annotation
+ settings
+
+ foreground
+ #fab387
+
+
+
+ name
+ Java enums
+ scope
+ constant.other.enum.java
+ settings
+
+ foreground
+ #94e2d5
+
+
+
+ name
+ Java imports
+ scope
+ storage.modifier.import.java
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ name
+ Javadoc
+ scope
+ comment.block.javadoc.java keyword.other.documentation.javadoc.java
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Exported Variable
+ scope
+ meta.export variable.other.readwrite.js
+ settings
+
+ foreground
+ #eba0ac
+
+
+
+ name
+ JS/TS constants & properties
+ scope
+ variable.other.constant.js, variable.other.constant.ts, variable.other.property.js, variable.other.property.ts
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ name
+ JSDoc; these are mainly params, so styled as such
+ scope
+ variable.other.jsdoc, comment.block.documentation variable.other
+ settings
+
+ foreground
+ #eba0ac
+ fontStyle
+
+
+
+
+ name
+ JSDoc keywords
+ scope
+ storage.type.class.jsdoc
+ settings
+
+ fontStyle
+
+
+
+
+ scope
+ support.type.object.console.js
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ name
+ Node constants as keywords (module, etc.)
+ scope
+ support.constant.node, support.type.object.module.js
+ settings
+
+ foreground
+ #cba6f7
+
+
+
+ name
+ implements as keyword
+ scope
+ storage.modifier.implements
+ settings
+
+ foreground
+ #cba6f7
+
+
+
+ name
+ Builtin types
+ scope
+ constant.language.null.js, constant.language.null.ts, constant.language.undefined.js, constant.language.undefined.ts, support.type.builtin.ts
+ settings
+
+ foreground
+ #cba6f7
+
+
+
+ scope
+ variable.parameter.generic
+ settings
+
+ foreground
+ #f9e2af
+
+
+
+ name
+ Arrow functions
+ scope
+ keyword.declaration.function.arrow.js, storage.type.function.arrow.ts
+ settings
+
+ foreground
+ #94e2d5
+
+
+
+ name
+ Decorator punctuations (decorators inherit from blue functions, instead of styleguide peach)
+ scope
+ punctuation.decorator.ts
+ settings
+
+ foreground
+ #89b4fa
+ fontStyle
+ italic
+
+
+
+ name
+ Extra JS/TS keywords
+ scope
+ keyword.operator.expression.in.js, keyword.operator.expression.in.ts, keyword.operator.expression.infer.ts, keyword.operator.expression.instanceof.js, keyword.operator.expression.instanceof.ts, keyword.operator.expression.is, keyword.operator.expression.keyof.ts, keyword.operator.expression.of.js, keyword.operator.expression.of.ts, keyword.operator.expression.typeof.ts
+ settings
+
+ foreground
+ #cba6f7
+
+
+
+ name
+ Julia macros
+ scope
+ support.function.macro.julia
+ settings
+
+ foreground
+ #94e2d5
+ fontStyle
+ italic
+
+
+
+ name
+ Julia language constants (true, false)
+ scope
+ constant.language.julia
+ settings
+
+ foreground
+ #fab387
+
+
+
+ name
+ Julia other constants (these seem to be arguments inside arrays)
+ scope
+ constant.other.symbol.julia
+ settings
+
+ foreground
+ #eba0ac
+
+
+
+ name
+ LaTeX preamble
+ scope
+ text.tex keyword.control.preamble
+ settings
+
+ foreground
+ #94e2d5
+
+
+
+ name
+ LaTeX be functions
+ scope
+ text.tex support.function.be
+ settings
+
+ foreground
+ #89dceb
+
+
+
+ name
+ LaTeX math
+ scope
+ constant.other.general.math.tex
+ settings
+
+ foreground
+ #f2cdcd
+
+
+
+ name
+ Lua docstring keywords
+ scope
+ comment.line.double-dash.documentation.lua storage.type.annotation.lua
+ settings
+
+ foreground
+ #cba6f7
+ fontStyle
+
+
+
+
+ name
+ Lua docstring variables
+ scope
+ comment.line.double-dash.documentation.lua entity.name.variable.lua, comment.line.double-dash.documentation.lua variable.lua
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ scope
+ heading.1.markdown punctuation.definition.heading.markdown, heading.1.markdown, markup.heading.atx.1.mdx, markup.heading.atx.1.mdx punctuation.definition.heading.mdx, markup.heading.setext.1.markdown, markup.heading.heading-0.asciidoc
+ settings
+
+ foreground
+ #f38ba8
+
+
+
+ scope
+ heading.2.markdown punctuation.definition.heading.markdown, heading.2.markdown, markup.heading.atx.2.mdx, markup.heading.atx.2.mdx punctuation.definition.heading.mdx, markup.heading.setext.2.markdown, markup.heading.heading-1.asciidoc
+ settings
+
+ foreground
+ #fab387
+
+
+
+ scope
+ heading.3.markdown punctuation.definition.heading.markdown, heading.3.markdown, markup.heading.atx.3.mdx, markup.heading.atx.3.mdx punctuation.definition.heading.mdx, markup.heading.heading-2.asciidoc
+ settings
+
+ foreground
+ #f9e2af
+
+
+
+ scope
+ heading.4.markdown punctuation.definition.heading.markdown, heading.4.markdown, markup.heading.atx.4.mdx, markup.heading.atx.4.mdx punctuation.definition.heading.mdx, markup.heading.heading-3.asciidoc
+ settings
+
+ foreground
+ #a6e3a1
+
+
+
+ scope
+ heading.5.markdown punctuation.definition.heading.markdown, heading.5.markdown, markup.heading.atx.5.mdx, markup.heading.atx.5.mdx punctuation.definition.heading.mdx, markup.heading.heading-4.asciidoc
+ settings
+
+ foreground
+ #89b4fa
+
+
+
+ scope
+ heading.6.markdown punctuation.definition.heading.markdown, heading.6.markdown, markup.heading.atx.6.mdx, markup.heading.atx.6.mdx punctuation.definition.heading.mdx, markup.heading.heading-5.asciidoc
+ settings
+
+ foreground
+ #cba6f7
+
+
+
+ scope
+ markup.bold
+ settings
+
+ foreground
+ #f38ba8
+ fontStyle
+ bold
+
+
+
+ scope
+ markup.italic
+ settings
+
+ foreground
+ #f38ba8
+ fontStyle
+ italic
+
+
+
+ scope
+ markup.strikethrough
+ settings
+
+ foreground
+ #a6adc8
+ fontStyle
+ strikethrough
+
+
+
+ name
+ Markdown auto links
+ scope
+ punctuation.definition.link, markup.underline.link
+ settings
+
+ foreground
+ #89b4fa
+
+
+
+ name
+ Markdown links
+ scope
+ text.html.markdown punctuation.definition.link.title, string.other.link.title.markdown, markup.link, punctuation.definition.constant.markdown, constant.other.reference.link.markdown, markup.substitution.attribute-reference
+ settings
+
+ foreground
+ #b4befe
+
+
+
+ name
+ Markdown code spans
+ scope
+ punctuation.definition.raw.markdown, markup.inline.raw.string.markdown, markup.raw.block.markdown
+ settings
+
+ foreground
+ #a6e3a1
+
+
+
+ name
+ Markdown triple backtick language identifier
+ scope
+ fenced_code.block.language
+ settings
+
+ foreground
+ #89dceb
+
+
+
+ name
+ Markdown triple backticks
+ scope
+ markup.fenced_code.block punctuation.definition, markup.raw support.asciidoc
+ settings
+
+ foreground
+ #9399b2
+
+
+
+ name
+ Markdown quotes
+ scope
+ markup.quote, punctuation.definition.quote.begin
+ settings
+
+ foreground
+ #f5c2e7
+
+
+
+ name
+ Markdown separators
+ scope
+ meta.separator.markdown
+ settings
+
+ foreground
+ #94e2d5
+
+
+
+ name
+ Markdown list bullets
+ scope
+ punctuation.definition.list.begin.markdown, markup.list.bullet
+ settings
+
+ foreground
+ #94e2d5
+
+
+
+ name
+ Nix attribute names
+ scope
+ entity.other.attribute-name.multipart.nix, entity.other.attribute-name.single.nix
+ settings
+
+ foreground
+ #89b4fa
+
+
+
+ name
+ Nix parameter names
+ scope
+ variable.parameter.name.nix
+ settings
+
+ foreground
+ #cdd6f4
+ fontStyle
+
+
+
+
+ name
+ Nix interpolated parameter names
+ scope
+ meta.embedded variable.parameter.name.nix
+ settings
+
+ foreground
+ #b4befe
+ fontStyle
+
+
+
+
+ name
+ Nix paths
+ scope
+ string.unquoted.path.nix
+ settings
+
+ foreground
+ #f5c2e7
+ fontStyle
+
+
+
+
+ name
+ PHP Attributes
+ scope
+ support.attribute.builtin, meta.attribute.php
+ settings
+
+ foreground
+ #f9e2af
+
+
+
+ name
+ PHP Parameters (needed for the leading dollar sign)
+ scope
+ meta.function.parameters.php punctuation.definition.variable.php
+ settings
+
+ foreground
+ #eba0ac
+
+
+
+ name
+ PHP Constants (null, __FILE__, etc.)
+ scope
+ constant.language.php
+ settings
+
+ foreground
+ #cba6f7
+
+
+
+ name
+ PHP functions
+ scope
+ text.html.php support.function
+ settings
+
+ foreground
+ #89dceb
+
+
+
+ name
+ PHPdoc keywords
+ scope
+ keyword.other.phpdoc.php
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Python argument functions reset to text, otherwise they inherit blue from function-call
+ scope
+ support.variable.magic.python, meta.function-call.arguments.python
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ name
+ Python double underscore functions
+ scope
+ support.function.magic.python
+ settings
+
+ foreground
+ #89dceb
+ fontStyle
+ italic
+
+
+
+ name
+ Python `self` keyword
+ scope
+ variable.parameter.function.language.special.self.python, variable.language.special.self.python
+ settings
+
+ foreground
+ #f38ba8
+ fontStyle
+ italic
+
+
+
+ name
+ python keyword flow/logical (for ... in)
+ scope
+ keyword.control.flow.python, keyword.operator.logical.python
+ settings
+
+ foreground
+ #cba6f7
+
+
+
+ name
+ python storage type
+ scope
+ storage.type.function.python
+ settings
+
+ foreground
+ #cba6f7
+
+
+
+ name
+ python function support
+ scope
+ support.token.decorator.python, meta.function.decorator.identifier.python
+ settings
+
+ foreground
+ #89dceb
+
+
+
+ name
+ python function calls
+ scope
+ meta.function-call.python
+ settings
+
+ foreground
+ #89b4fa
+
+
+
+ name
+ python function decorators
+ scope
+ entity.name.function.decorator.python, punctuation.definition.decorator.python
+ settings
+
+ foreground
+ #fab387
+ fontStyle
+ italic
+
+
+
+ name
+ python placeholder reset to normal string
+ scope
+ constant.character.format.placeholder.other.python
+ settings
+
+ foreground
+ #f5c2e7
+
+
+
+ name
+ Python exception & builtins such as exit()
+ scope
+ support.type.exception.python, support.function.builtin.python
+ settings
+
+ foreground
+ #fab387
+
+
+
+ name
+ entity.name.type
+ scope
+ support.type.python
+ settings
+
+ foreground
+ #fab387
+
+
+
+ name
+ python constants (True/False)
+ scope
+ constant.language.python
+ settings
+
+ foreground
+ #cba6f7
+
+
+
+ name
+ Arguments accessed later in the function body
+ scope
+ meta.indexed-name.python, meta.item-access.python
+ settings
+
+ foreground
+ #eba0ac
+ fontStyle
+ italic
+
+
+
+ name
+ Python f-strings/binary/unicode storage types
+ scope
+ storage.type.string.python
+ settings
+
+ foreground
+ #a6e3a1
+ fontStyle
+ italic
+
+
+
+ name
+ Python type hints
+ scope
+ meta.function.parameters.python
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Regex string begin/end in JS/TS
+ scope
+ string.regexp punctuation.definition.string.begin, string.regexp punctuation.definition.string.end
+ settings
+
+ foreground
+ #f5c2e7
+
+
+
+ name
+ Regex anchors (^, $)
+ scope
+ keyword.control.anchor.regexp
+ settings
+
+ foreground
+ #cba6f7
+
+
+
+ name
+ Regex regular string match
+ scope
+ string.regexp.ts
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ name
+ Regex group parenthesis & backreference (\1, \2, \3, ...)
+ scope
+ punctuation.definition.group.regexp, keyword.other.back-reference.regexp
+ settings
+
+ foreground
+ #a6e3a1
+
+
+
+ name
+ Regex character class []
+ scope
+ punctuation.definition.character-class.regexp
+ settings
+
+ foreground
+ #f9e2af
+
+
+
+ name
+ Regex character classes (\d, \w, \s)
+ scope
+ constant.other.character-class.regexp
+ settings
+
+ foreground
+ #f5c2e7
+
+
+
+ name
+ Regex range
+ scope
+ constant.other.character-class.range.regexp
+ settings
+
+ foreground
+ #f5e0dc
+
+
+
+ name
+ Regex quantifier
+ scope
+ keyword.operator.quantifier.regexp
+ settings
+
+ foreground
+ #94e2d5
+
+
+
+ name
+ Regex constant/numeric
+ scope
+ constant.character.numeric.regexp
+ settings
+
+ foreground
+ #fab387
+
+
+
+ name
+ Regex lookaheads, negative lookaheads, lookbehinds, negative lookbehinds
+ scope
+ punctuation.definition.group.no-capture.regexp, meta.assertion.look-ahead.regexp, meta.assertion.negative-look-ahead.regexp
+ settings
+
+ foreground
+ #89b4fa
+
+
+
+ name
+ Rust attribute
+ scope
+ meta.annotation.rust, meta.annotation.rust punctuation, meta.attribute.rust, punctuation.definition.attribute.rust
+ settings
+
+ foreground
+ #f9e2af
+ fontStyle
+ italic
+
+
+
+ name
+ Rust attribute strings
+ scope
+ meta.attribute.rust string.quoted.double.rust, meta.attribute.rust string.quoted.single.char.rust
+ settings
+
+ fontStyle
+
+
+
+
+ name
+ Rust keyword
+ scope
+ entity.name.function.macro.rules.rust, storage.type.module.rust, storage.modifier.rust, storage.type.struct.rust, storage.type.enum.rust, storage.type.trait.rust, storage.type.union.rust, storage.type.impl.rust, storage.type.rust, storage.type.function.rust, storage.type.type.rust
+ settings
+
+ foreground
+ #cba6f7
+ fontStyle
+
+
+
+
+ name
+ Rust u/i32, u/i64, etc.
+ scope
+ entity.name.type.numeric.rust
+ settings
+
+ foreground
+ #cba6f7
+ fontStyle
+
+
+
+
+ name
+ Rust generic
+ scope
+ meta.generic.rust
+ settings
+
+ foreground
+ #fab387
+
+
+
+ name
+ Rust impl
+ scope
+ entity.name.impl.rust
+ settings
+
+ foreground
+ #f9e2af
+ fontStyle
+ italic
+
+
+
+ name
+ Rust module
+ scope
+ entity.name.module.rust
+ settings
+
+ foreground
+ #fab387
+
+
+
+ name
+ Rust trait
+ scope
+ entity.name.trait.rust
+ settings
+
+ foreground
+ #f9e2af
+ fontStyle
+ italic
+
+
+
+ name
+ Rust struct
+ scope
+ storage.type.source.rust
+ settings
+
+ foreground
+ #f9e2af
+
+
+
+ name
+ Rust union
+ scope
+ entity.name.union.rust
+ settings
+
+ foreground
+ #f9e2af
+
+
+
+ name
+ Rust enum member
+ scope
+ meta.enum.rust storage.type.source.rust
+ settings
+
+ foreground
+ #94e2d5
+
+
+
+ name
+ Rust macro
+ scope
+ support.macro.rust, meta.macro.rust support.function.rust, entity.name.function.macro.rust
+ settings
+
+ foreground
+ #89b4fa
+ fontStyle
+ italic
+
+
+
+ name
+ Rust lifetime
+ scope
+ storage.modifier.lifetime.rust, entity.name.type.lifetime
+ settings
+
+ foreground
+ #89b4fa
+ fontStyle
+ italic
+
+
+
+ name
+ Rust string formatting
+ scope
+ string.quoted.double.rust constant.other.placeholder.rust
+ settings
+
+ foreground
+ #f5c2e7
+
+
+
+ name
+ Rust return type generic
+ scope
+ meta.function.return-type.rust meta.generic.rust storage.type.rust
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ name
+ Rust functions
+ scope
+ meta.function.call.rust
+ settings
+
+ foreground
+ #89b4fa
+
+
+
+ name
+ Rust angle brackets
+ scope
+ punctuation.brackets.angle.rust
+ settings
+
+ foreground
+ #89dceb
+
+
+
+ name
+ Rust constants
+ scope
+ constant.other.caps.rust
+ settings
+
+ foreground
+ #fab387
+
+
+
+ name
+ Rust function parameters
+ scope
+ meta.function.definition.rust variable.other.rust
+ settings
+
+ foreground
+ #eba0ac
+
+
+
+ name
+ Rust closure variables
+ scope
+ meta.function.call.rust variable.other.rust
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ name
+ Rust self
+ scope
+ variable.language.self.rust
+ settings
+
+ foreground
+ #f38ba8
+
+
+
+ name
+ Rust metavariable names
+ scope
+ variable.other.metavariable.name.rust, meta.macro.metavariable.rust keyword.operator.macro.dollar.rust
+ settings
+
+ foreground
+ #f5c2e7
+
+
+
+ name
+ Shell shebang
+ scope
+ comment.line.shebang, comment.line.shebang punctuation.definition.comment, comment.line.shebang, punctuation.definition.comment.shebang.shell, meta.shebang.shell
+ settings
+
+ foreground
+ #f5c2e7
+ fontStyle
+ italic
+
+
+
+ name
+ Shell shebang command
+ scope
+ comment.line.shebang constant.language
+ settings
+
+ foreground
+ #94e2d5
+ fontStyle
+ italic
+
+
+
+ name
+ Shell interpolated command
+ scope
+ meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation, meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation
+ settings
+
+ foreground
+ #f38ba8
+
+
+
+ name
+ Shell interpolated command variable
+ scope
+ meta.string meta.interpolation.parameter.shell variable.other.readwrite
+ settings
+
+ foreground
+ #fab387
+ fontStyle
+ italic
+
+
+
+ scope
+ source.shell punctuation.section.interpolation, punctuation.definition.evaluation.backticks.shell
+ settings
+
+ foreground
+ #94e2d5
+
+
+
+ name
+ Shell EOF
+ scope
+ entity.name.tag.heredoc.shell
+ settings
+
+ foreground
+ #cba6f7
+
+
+
+ name
+ Shell quoted variable
+ scope
+ string.quoted.double.shell variable.other.normal.shell
+ settings
+
+ foreground
+ #cdd6f4
+
+
+
+ scope
+ markup.heading.synopsis.man, markup.heading.title.man, markup.heading.other.man, markup.heading.env.man
+ settings
+
+ foreground
+ #cba6f7
+
+
+
+ scope
+ markup.heading.commands.man
+ settings
+
+ foreground
+ #89b4fa
+
+
+
+ scope
+ markup.heading.env.man
+ settings
+
+ foreground
+ #f5c2e7
+
+
+
+ scope
+ markup.heading.1.markdown
+ settings
+
+ foreground
+ #f38ba8
+
+
+
+ scope
+ markup.heading.2.markdown
+ settings
+
+ foreground
+ #fab387
+
+
+
+ scope
+ markup.heading.markdown
+ settings
+
+ foreground
+ #f9e2af
+
+
+
+
+
\ No newline at end of file
diff --git a/config/.config/git/config b/config/.config/git/config
index 774886a..b2e96b9 100644
--- a/config/.config/git/config
+++ b/config/.config/git/config
@@ -1,10 +1,22 @@
[core]
editor = "emacsclient"
- pager = "diff-so-fancy | less --tabs=4 -RFX"
+ pager = "diff-so-fancy | less '--tabs=4' -RFX"
+
+[diff-so-fancy]
+ changeHunkIndicators = true
+ markEmptyLines = true
+ stripLeadingSymbols = true
+ useUnicodeRuler = true
+
[init]
defaultBranch = "main"
+
+[interactive]
+ diffFilter = "diff-so-fancy --patch"
+
[pull]
rebase = true
+
[user]
- email = "23226432+hyperreal64@users.noreply.github.com"
+ email = "hyperreal@moonshadow.dev"
name = "Jeffrey Serio"
diff --git a/config/.config/starship.toml b/config/.config/starship.toml
index a4b6d5d..f4ad09d 100644
--- a/config/.config/starship.toml
+++ b/config/.config/starship.toml
@@ -1,113 +1,115 @@
-# Sets user-defined palette
-palette = "catppuccin_mocha"
+"$schema" = 'https://starship.rs/config-schema.json'
-format = """$time$container$directory$all$line_break$username$hostname$character"""
-right_format = """$cmd_duration $jobs $status"""
+## PROMPT FORMAT
+format = """$time$container$directory$all$cmd_duration$jobs$status$line_break$username$hostname$character"""
+# # PALETTE
+palette = 'catppuccin_mocha'
+
+[palettes.catppuccin_mocha]
+rosewater = '#f5e0dc'
+flamingo = '#f2cdcd'
+pink = '#f5c2e7'
+mauve = '#cba6f7'
+red = '#f38ba8'
+maroon = '#eba0ac'
+peach = '#fab387'
+yellow = '#f9e2af'
+green = '#a6e3a1'
+teal = '#94e2d5'
+sky = '#89dceb'
+sapphire = '#74c7ec'
+blue = '#89b4fa'
+lavender = '#b4befe'
+text = '#cdd6f4'
+subtext1 = '#bac2de'
+subtext0 = '#a6adc8'
+overlay2 = '#9399b2'
+overlay1 = '#7f849c'
+overlay0 = '#6c7086'
+surface2 = '#585b70'
+surface1 = '#45475a'
+surface0 = '#313244'
+base = '#1e1e2e'
+mantle = '#181825'
+crust = '#11111b'
+
+## LEFT SIDE - FIRST LINE
[time]
disabled = false
-format = '[\[ $time \]]($style) '
-time_format = "%T"
-style = "bold peach"
+format = '[$time]($style) '
+time_format = '%T'
+style = 'bold peach'
+[directory]
+style = 'subtext0'
+truncation_length = 8
+truncate_to_repo = true
+truncation_symbol = 'repo: '
+
+[docker_context]
+symbol = 'docker: '
+format = '[$symbol$context]($style)'
+
+[git_branch]
+symbol = ' '
+
+[git_status]
+style = 'text'
+ahead = '⇡${count}'
+diverged = '⇕⇡${ahead_count}⇣${behind_count}'
+behind = '⇣${count}'
+deleted = 'x'
+
+[golang]
+symbol = 'go: '
+format = '[$symbol($version )($style)'
+
+[nix_shell]
+symbol = 'nix: '
+format = '[$symbol$state(\($name\))]($style)'
+
+[nodejs]
+symbol = 'node: '
+format = '[$symbol($version)]($style)'
+
+[python]
+symbol = 'py: '
+format = '[${symbol}${pyenv_prefix}(${version} )(\($virtualenv\) )]($style)'
+
+[rust]
+symbol = 'rust: '
+format = '[$symbol($version)]($style)'
+
+[cmd_duration]
+min_time = 1
+style = 'yellow'
+format = 'duration: [$duration]($style) '
+disabled = false
+
+[status]
+format = 'exit status: [$status = $common_meaning]($style) '
+disabled = false
+style = 'bold red'
+recognize_signal_code = true
+map_symbol = true
+
+## LEFT SIDE - SECOND LINE
[username]
-format = "[$user]($style)@"
-style_user = "red"
-style_root = "bold red"
+format = '[$user]($style)@'
+style_user = 'red'
+style_root = 'bold red'
show_always = true
-# Second param
[hostname]
-format = "[$hostname]($style)"
-style = "lavender"
-trim_at = ".local"
+format = '[$hostname]($style)'
+style = 'lavender'
+trim_at = '.local'
ssh_only = false
disabled = false
-# Third param
-[directory]
-style = "subtext0"
-truncation_length = 8
-truncate_to_repo = true
-truncation_symbol = "repo: "
-
-# Before all the version info (python, nodejs, php, etc.)
-[git_status]
-style = "text"
-ahead = "⇡${count}"
-diverged = "⇕⇡${ahead_count}⇣${behind_count}"
-behind = "⇣${count}"
-deleted = "x"
-
-[container]
-style = "bold pink"
-format = "[$symbol \\[ $name \\]]($style) "
-
-# Last param in the first line/row
-[cmd_duration]
-min_time = 1
-style = "yellow"
-format = "duration: [$duration]($style)"
-disabled = false
-
-# Prompt: param 2
[character]
-format = "$symbol "
-success_symbol = ' [%](teal)'
-error_symbol = ' [%](red)'
-vicmd_symbol = " [<](teal)"
-
-# SYMBOLS
-[status]
-format = 'exit status: [$status_common_meaning$status_signal_name$status]($style)'
-disabled = false
-style = "bold red"
-
-[docker_context]
-symbol = " "
-
-[git_branch]
-symbol = " "
-
-[golang]
-symbol = " "
-
-[nodejs]
-symbol = " "
-
-[package]
-symbol = " "
-
-[python]
-symbol = " "
-
-[rust]
-symbol = " "
-
-[palettes.catppuccin_mocha]
-rosewater = "#f5e0dc"
-flamingo = "#f2cdcd"
-pink = "#f5c2e7"
-mauve = "#cba6f7"
-red = "#f38ba8"
-maroon = "#eba0ac"
-peach = "#fab387"
-yellow = "#f9e2af"
-green = "#a6e3a1"
-teal = "#94e2d5"
-sky = "#89dceb"
-sapphire = "#74c7ec"
-blue = "#89b4fa"
-lavender = "#b4befe"
-text = "#cdd6f4"
-subtext1 = "#bac2de"
-subtext0 = "#a6adc8"
-overlay2 = "#9399b2"
-overlay1 = "#7f849c"
-overlay0 = "#6c7086"
-surface2 = "#585b70"
-surface1 = "#45475a"
-surface0 = "#313244"
-base = "#1e1e2e"
-mantle = "#181825"
-crust = "#11111b"
+format = ' [$symbol]($style) '
+success_symbol = '[➜](bold teal)'
+error_symbol = '[➜](bold red)'
+vimcmd_symbol = '[V](bold green)'
diff --git a/config/.config/systemd/user/sync_to_remotes.service b/config/.config/systemd/user/sync_to_remotes.service
new file mode 100644
index 0000000..0e29821
--- /dev/null
+++ b/config/.config/systemd/user/sync_to_remotes.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Daily sync_to_remotes.py
+
+[Service]
+Type=oneshot
+ExecStart=/home/jas/repos/codeberg.org/hyperreal/admin-scripts/sync_to_remotes.py
+
+[Install]
+WantedBy=default.target
diff --git a/config/.config/systemd/user/sync_to_remotes.timer b/config/.config/systemd/user/sync_to_remotes.timer
new file mode 100644
index 0000000..ea89728
--- /dev/null
+++ b/config/.config/systemd/user/sync_to_remotes.timer
@@ -0,0 +1,10 @@
+[Unit]
+Description=Daily sync_to_remotes.py
+DefaultDependencies=yes
+
+[Timer]
+OnCalendar=*-*-* 00:00:00
+Persistent=true
+
+[Install]
+WantedBy=timers.target
diff --git a/config/.config/systemd/user/timers.target.wants/sync_to_remotes.timer b/config/.config/systemd/user/timers.target.wants/sync_to_remotes.timer
new file mode 120000
index 0000000..b8a7d91
--- /dev/null
+++ b/config/.config/systemd/user/timers.target.wants/sync_to_remotes.timer
@@ -0,0 +1 @@
+/home/jas/.config/systemd/user/sync_to_remotes.timer
\ No newline at end of file
diff --git a/config/.config/zellij/config.kdl b/config/.config/zellij/config.kdl
index 312f028..2d70b83 100644
--- a/config/.config/zellij/config.kdl
+++ b/config/.config/zellij/config.kdl
@@ -1,328 +1,19 @@
-// If you'd like to override the default keybindings completely, be sure to change "keybinds" to "keybinds clear-defaults=true"
-keybinds {
- normal {
- // uncomment this and adjust key if using copy_on_select=false
- // bind "Alt c" { Copy; }
- }
- locked {
- bind "Ctrl g" { SwitchToMode "Normal"; }
- }
- resize {
- bind "Ctrl n" { SwitchToMode "Normal"; }
- bind "h" "Left" { Resize "Increase Left"; }
- bind "j" "Down" { Resize "Increase Down"; }
- bind "k" "Up" { Resize "Increase Up"; }
- bind "l" "Right" { Resize "Increase Right"; }
- bind "H" { Resize "Decrease Left"; }
- bind "J" { Resize "Decrease Down"; }
- bind "K" { Resize "Decrease Up"; }
- bind "L" { Resize "Decrease Right"; }
- bind "=" "+" { Resize "Increase"; }
- bind "-" { Resize "Decrease"; }
- }
- pane {
- bind "Ctrl p" { SwitchToMode "Normal"; }
- bind "h" "Left" { MoveFocus "Left"; }
- bind "l" "Right" { MoveFocus "Right"; }
- bind "j" "Down" { MoveFocus "Down"; }
- bind "k" "Up" { MoveFocus "Up"; }
- bind "p" { SwitchFocus; }
- bind "n" { NewPane; SwitchToMode "Normal"; }
- bind "d" { NewPane "Down"; SwitchToMode "Normal"; }
- bind "r" { NewPane "Right"; SwitchToMode "Normal"; }
- bind "x" { CloseFocus; SwitchToMode "Normal"; }
- bind "f" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
- bind "z" { TogglePaneFrames; SwitchToMode "Normal"; }
- bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; }
- bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }
- bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;}
- }
- move {
- bind "Ctrl h" { SwitchToMode "Normal"; }
- bind "n" "Tab" { MovePane; }
- bind "h" "Left" { MovePane "Left"; }
- bind "j" "Down" { MovePane "Down"; }
- bind "k" "Up" { MovePane "Up"; }
- bind "l" "Right" { MovePane "Right"; }
- }
- tab {
- bind "Ctrl t" { SwitchToMode "Normal"; }
- bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
- bind "h" "Left" "Up" "k" { GoToPreviousTab; }
- bind "l" "Right" "Down" "j" { GoToNextTab; }
- bind "n" { NewTab; SwitchToMode "Normal"; }
- bind "x" { CloseTab; SwitchToMode "Normal"; }
- bind "s" { ToggleActiveSyncTab; SwitchToMode "Normal"; }
- bind "1" { GoToTab 1; SwitchToMode "Normal"; }
- bind "2" { GoToTab 2; SwitchToMode "Normal"; }
- bind "3" { GoToTab 3; SwitchToMode "Normal"; }
- bind "4" { GoToTab 4; SwitchToMode "Normal"; }
- bind "5" { GoToTab 5; SwitchToMode "Normal"; }
- bind "6" { GoToTab 6; SwitchToMode "Normal"; }
- bind "7" { GoToTab 7; SwitchToMode "Normal"; }
- bind "8" { GoToTab 8; SwitchToMode "Normal"; }
- bind "9" { GoToTab 9; SwitchToMode "Normal"; }
- bind "Tab" { ToggleTab; }
- }
- scroll {
- bind "Ctrl s" { SwitchToMode "Normal"; }
- bind "e" { EditScrollback; SwitchToMode "Normal"; }
- bind "s" { SwitchToMode "EnterSearch"; SearchInput 0; }
- bind "Ctrl c" { ScrollToBottom; SwitchToMode "Normal"; }
- bind "j" "Down" { ScrollDown; }
- bind "k" "Up" { ScrollUp; }
- bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
- bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
- bind "d" { HalfPageScrollDown; }
- bind "u" { HalfPageScrollUp; }
- // uncomment this and adjust key if using copy_on_select=false
- // bind "Alt c" { Copy; }
- }
- search {
- bind "Ctrl s" { SwitchToMode "Normal"; }
- bind "Ctrl c" { ScrollToBottom; SwitchToMode "Normal"; }
- bind "j" "Down" { ScrollDown; }
- bind "k" "Up" { ScrollUp; }
- bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
- bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
- bind "d" { HalfPageScrollDown; }
- bind "u" { HalfPageScrollUp; }
- bind "n" { Search "down"; }
- bind "p" { Search "up"; }
- bind "c" { SearchToggleOption "CaseSensitivity"; }
- bind "w" { SearchToggleOption "Wrap"; }
- bind "o" { SearchToggleOption "WholeWord"; }
- }
- entersearch {
- bind "Ctrl c" "Esc" { SwitchToMode "Scroll"; }
- bind "Enter" { SwitchToMode "Search"; }
- }
- renametab {
- bind "Ctrl c" { SwitchToMode "Normal"; }
- bind "Esc" { UndoRenameTab; SwitchToMode "Tab"; }
- }
- renamepane {
- bind "Ctrl c" { SwitchToMode "Normal"; }
- bind "Esc" { UndoRenamePane; SwitchToMode "Pane"; }
- }
- session {
- bind "Ctrl o" { SwitchToMode "Normal"; }
- bind "Ctrl s" { SwitchToMode "Scroll"; }
- bind "d" { Detach; }
- }
- tmux {
- bind "[" { SwitchToMode "Scroll"; }
- bind "Ctrl b" { Write 2; SwitchToMode "Normal"; }
- bind "\"" { NewPane "Down"; SwitchToMode "Normal"; }
- bind "%" { NewPane "Right"; SwitchToMode "Normal"; }
- bind "z" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
- bind "c" { NewTab; SwitchToMode "Normal"; }
- bind "," { SwitchToMode "RenameTab"; }
- bind "p" { GoToPreviousTab; SwitchToMode "Normal"; }
- bind "n" { GoToNextTab; SwitchToMode "Normal"; }
- bind "Left" { MoveFocus "Left"; SwitchToMode "Normal"; }
- bind "Right" { MoveFocus "Right"; SwitchToMode "Normal"; }
- bind "Down" { MoveFocus "Down"; SwitchToMode "Normal"; }
- bind "Up" { MoveFocus "Up"; SwitchToMode "Normal"; }
- bind "h" { MoveFocus "Left"; SwitchToMode "Normal"; }
- bind "l" { MoveFocus "Right"; SwitchToMode "Normal"; }
- bind "j" { MoveFocus "Down"; SwitchToMode "Normal"; }
- bind "k" { MoveFocus "Up"; SwitchToMode "Normal"; }
- bind "o" { FocusNextPane; }
- bind "d" { Detach; }
- }
- shared_except "locked" {
- bind "Ctrl g" { SwitchToMode "Locked"; }
- bind "Ctrl q" { Quit; }
- bind "Alt n" { NewPane; }
- bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
- bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
- bind "Alt j" "Alt Down" { MoveFocus "Down"; }
- bind "Alt k" "Alt Up" { MoveFocus "Up"; }
- bind "Alt =" "Alt +" { Resize "Increase"; }
- bind "Alt -" { Resize "Decrease"; }
- }
- shared_except "normal" "locked" {
- bind "Enter" "Esc" { SwitchToMode "Normal"; }
- }
- shared_except "pane" "locked" {
- bind "Ctrl p" { SwitchToMode "Pane"; }
- }
- shared_except "resize" "locked" {
- bind "Ctrl n" { SwitchToMode "Resize"; }
- }
- shared_except "scroll" "locked" {
- bind "Ctrl s" { SwitchToMode "Scroll"; }
- }
- shared_except "session" "locked" {
- bind "Ctrl o" { SwitchToMode "Session"; }
- }
- shared_except "tab" "locked" {
- bind "Ctrl t" { SwitchToMode "Tab"; }
- }
- shared_except "move" "locked" {
- bind "Ctrl h" { SwitchToMode "Move"; }
- }
- shared_except "tmux" "locked" {
- bind "Ctrl b" { SwitchToMode "Tmux"; }
- }
-}
-
-plugins {
- tab-bar { path "tab-bar"; }
- status-bar { path "status-bar"; }
- strider { path "strider"; }
-// compact-bar { path "compact-bar"; }
-}
-
-// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
-// eg. when terminal window with an active zellij session is closed
-// Options:
-// - detach (Default)
-// - quit
-//
-// on_force_close "quit"
-
-// Send a request for a simplified ui (without arrow fonts) to plugins
-// Options:
-// - true
-// - false (Default)
-//
-// simplified_ui true
-
-// Choose the path to the default shell that zellij will use for opening new panes
-// Default: $SHELL
-//
-// default_shell "fish"
-
-// Toggle between having pane frames around the panes
-// Options:
-// - true (default)
-// - false
-//
-// pane_frames true
-
-// Define color themes for Zellij
-// For more examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
-// Once these themes are defined, one of them should to be selected in the "theme" section of this file
-//
-// themes {
-// dracula {
-// fg 248 248 242
-// bg 40 42 54
-// red 255 85 85
-// green 80 250 123
-// yellow 241 250 140
-// blue 98 114 164
-// magenta 255 121 198
-// orange 255 184 108
-// cyan 139 233 253
-// black 0 0 0
-// white 255 255 255
-// }
-// }
+copy_clipboard "system"
+copy_command "wl-copy"
+copy_on_select true
+theme "catppuccin-mocha"
themes {
catppuccin-mocha {
bg "#585b70"
- fg "#cdd6f4"
- red "#f38ba8"
- green "#a6e3a1"
+ black "#181825"
blue "#89b4fa"
- yellow "#f9e2af"
+ cyan "#89dceb"
+ fg "#cdd6f4"
+ green "#a6e3a1"
magenta "#f5c2e7"
orange "#fab387"
- cyan "#89dceb"
- black "#181825"
+ red "#f38ba8"
white "#cdd6f4"
- }
- rose-pine {
- bg "#191724"
- fg "#e0def4"
- red "#eb6f92"
- green "#31748f"
- blue "#9ccfd8"
- yellow "#f6c177"
- magenta "#c4a7e7"
- orange "#fe640b"
- cyan "#ebbcba"
- black "#26233a"
- white "#e0def4"
+ yellow "#f9e2af"
}
}
-
-
-// Choose the theme that is specified in the themes section.
-// Default: default
-//
-theme "catppuccin-mocha"
-
-// The name of the default layout to load on startup
-// Default: "default"
-//
-default_layout "default"
-
-// Choose the mode that zellij uses when starting up.
-// Default: normal
-//
-// default_mode "locked"
-
-// Toggle enabling the mouse mode.
-// On certain configurations, or terminals this could
-// potentially interfere with copying text.
-// Options:
-// - true (default)
-// - false
-//
-// mouse_mode false
-
-// Configure the scroll back buffer size
-// This is the number of lines zellij stores for each pane in the scroll back
-// buffer. Excess number of lines are discarded in a FIFO fashion.
-// Valid values: positive integers
-// Default value: 10000
-//
-// scroll_buffer_size 10000
-
-// Provide a command to execute when copying text. The text will be piped to
-// the stdin of the program to perform the copy. This can be used with
-// terminal emulators which do not support the OSC 52 ANSI control sequence
-// that will be used by default if this option is not set.
-// Examples:
-//
-//copy_command "xclip -selection clipboard" // x11
-copy_command "wl-copy" // wayland
-// copy_command "pbcopy" // osx
-
-// Choose the destination for copied text
-// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
-// Does not apply when using copy_command.
-// Options:
-// - system (default)
-// - primary
-//
-copy_clipboard "system"
-
-// Enable or disable automatic copy (and clear) of selection when releasing mouse
-// Default: true
-//
-copy_on_select true
-
-// Path to the default editor to use to edit pane scrollbuffer
-// Default: $EDITOR or $VISUAL
-//
-scrollback_editor "/bin/emacs -nw"
-
-// When attaching to an existing session with other users,
-// should the session be mirrored (true)
-// or should each user have their own cursor (false)
-// Default: false
-//
-// mirror_session true
-
-// The folder in which Zellij will look for layouts
-//
-layout_dir "/home/jas/.config/zellij/layouts"
-
-// The folder in which Zellij will look for themes
-//
-// theme_dir "/path/to/my/theme_dir"
diff --git a/doom/.doom.d/config.el b/doom/.doom.d/config.el
new file mode 100644
index 0000000..778e0f2
--- /dev/null
+++ b/doom/.doom.d/config.el
@@ -0,0 +1,296 @@
+;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
+
+;;;; Misc settings
+
+;; start Emacs as a server process
+(server-start)
+
+(setq doom-user-dir "~/.doom.d/")
+
+;; package-archives
+(setq package-archives
+ '(("gnu" . "https://elpa.gnu.org/packages/")
+ ("melpa" . "https://melpa.org/packages/")))
+
+(after! projectile
+ (setq projectile-project-root-files-bottom-up
+ (remove ".git" projectile-project-root-files-bottom-up)))
+
+;; Set fonts
+(setq fontsize 18)
+(setq monofontfam "JetBrainsMono Nerd Font Mono")
+(setq doom-font (font-spec :family monofontfam :size fontsize)
+ doom-variable-pitch-font (font-spec :family monofontfam :size fontsize)
+ doom-symbol-font (font-spec :family monofontfam :size fontsize)
+ doom-big-font (font-spec :family monofontfam :size fontsize))
+
+;; Use catppuccin-mocha theme
+(setq doom-theme 'catppuccin)
+(setq catppuccin-flavor 'mocha)
+
+;; History
+(setq savehist-file "~/.local/share/emacs/savehist")
+(savehist-mode 1)
+(setq history-length t)
+(setq history-delete-duplicates t)
+(setq savehist-save-minibuffer-history 1)
+(setq savehist-additional-variables
+ '(kill-ring
+ search-ring
+ regexp-search-ring))
+
+;; Display time in the modeline
+(display-time-mode 1)
+
+;; Enable blink cursor
+(blink-cursor-mode 1)
+
+;; Sentences end with a single space because it's right and proper
+(setq sentence-end-double-space nil)
+
+;; This determines the style of line numbers in effect. If set to `nil', line
+;; numbers are disabled. For relative line numbers, set this to `relative'.
+(setq display-line-numbers-type 'relative)
+
+;; Keybinding to kill-whole-line
+(global-set-key (kbd "M-9") 'kill-whole-line)
+
+;; trim newline from string output
+(defun string-trim-final-newline (string)
+ "Trim the last newline character from string.
+Used with `shell-command-to-string'.
+Source: https://emacs.stackexchange.com/a/21906"
+ (let ((len (length string)))
+ (cond
+ ((and (> len 0) (eql (aref string (- len 1)) ?\n))
+ (substring string 0 (- len 1)))
+ (t string))))
+
+;; wrapper around `shell-command-to-string' to remove newline
+(defun shell-command-output-string (command)
+ (string-trim-final-newline (shell-command-to-string command)))
+
+;; Copy all or text selection
+(defun xah-copy-all-or-region ()
+ "Put the whole buffer content to `kill-ring', or text selection if there's one.
+Respects `narrow-to-region'.
+URL `https://ergomacs.org/emacs/emacs_copy_cut_all_or_region.html'
+Version 2015-08-22"
+ (interactive)
+ (if (use-region-p)
+ (progn
+ (kill-new (buffer-substring (region-beginning) (region-end)))
+ (message "Text selection copied."))
+ (progn
+ (kill-new (buffer-string))
+ (message "Buffer content copied."))))
+
+;; Cut all or text selection
+(defun xah-cut-all-or-region ()
+ "Cut the whole buffer content to `kill-ring', or text selection if there's one.
+Respects `narrow-to-region'.
+URL `https://ergomacs.org/emacs/emacs_copy_cut_all_or_region.html'
+Version 2015-08-22"
+ (interactive)
+ (if (use-region-p)
+ (progn
+ (kill-new (buffer-substring (region-beginning) (region-end)))
+ (delete-region (region-beginning) (region-end)))
+ (progn
+ (kill-new (buffer-string))
+ (delete-region (point-min) (point-max)))))
+
+;; open URL in Firefox/LibreWolf
+(defun browse-host-web (url)
+ "Browse URL with Firefox/LibreWolf/IceCat"
+ (interactive "sURL: ")
+ (shell-command (concat "librewolf" url)))
+
+(setq browse-url-browser-function 'browse-host-web)
+
+;; after copy Ctrl+c in Linux X11, you can paste by `yank' in emacs
+(setq select-enable-clipboard t)
+
+;; after mouse selection copy in X11, you can paste by `yank' in emacs
+(setq select-enable-primary t)
+
+;; set keybinding for paste
+(global-set-key (kbd "C-S-V") #'clipboard-yank)
+
+;; Smart home key
+(defun smart-beginning-of-line ()
+ "Move point to first non-whitespace character or beginning-of-line.
+
+Move point to the first non-whitespace character on this line.
+If point was already at that position, move point to beginning of line."
+ (interactive "^")
+ (let ((oldpos (point)))
+ (back-to-indentation)
+ (and (= oldpos (point))
+ (beginning-of-line))))
+
+(global-set-key (kbd "") 'smart-beginning-of-line)
+(global-set-key (kbd "") 'end-of-line)
+
+;; Autoformat on save
+(setq +format-on-save-enabled-modes
+ '(emacs-lisp-mode))
+
+;; UTF-8
+(prefer-coding-system 'utf-8)
+(when (display-graphic-p)
+ (setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))
+
+
+;;;; undo-tree-mode - visualize undos and branches
+
+(global-undo-tree-mode)
+(setq undo-tree-visualizer-timestamps t)
+(setq undo-tree-visualizer-diff t)
+(setq undo-tree-history-directory-alist '(("." . "~/.local/share/emacs/backups/undo-tree")))
+
+
+;;;; evil-nerd-commenter
+
+(global-set-key (kbd "M-;") 'evilnc-comment-or-uncomment-lines)
+(global-set-key (kbd "C-c l") 'evilnc-quick-comment-or-uncomment-to-the-line)
+(global-set-key (kbd "C-c c") 'evilnc-copy-and-comment-lines)
+(global-set-key (kbd "C-c p") 'evilnc-comment-or-uncomment-paragraphs)
+
+
+;;;; org-mode
+
+(add-hook 'org-mode-hook (lambda () (org-superstar-mode 1)))
+(require 'org-protocol)
+
+(setq org-modules '(org-agenda
+ org-choose
+ org-collector
+ ))
+(eval-after-load 'org
+ '(org-load-modules-maybe t))
+
+(setq org-directory "~/org/")
+(setq org-default-notes-file "~/org/inbox.org")
+(setq org-agenda-files '("~/org/inbox.org"))
+
+;; support selecting lines by using shift
+(setq org-support-shift-select t)
+
+;; org-mode tags
+;; I hardly use these but whatever
+(setq org-tag-alist (quote (("@archiving" .?a)
+ ("@blog" .?b)
+ ("@homelab" . ?l)
+ ("@hyperreal.coffee" .?h)
+ ("@nirn.quest" .?n)
+ ("@reading" . ?r)
+ ("@selfcare" . ?s))))
+
+;; org-mode keybindings
+(with-eval-after-load 'org
+ (bind-key "C-c $" 'org-archive-subtree)
+ (bind-key "C-c r" 'org-capture)
+ (bind-key "C-c R" 'org-roam-capture)
+ (bind-key "C-c a" 'org-agenda)
+ (bind-key "C-c l" 'org-store-link)
+ (bind-key "C-c L" 'org-insert-link-global)
+ (bind-key "C-c O" 'org-open-at-point-global))
+
+(setq org-use-effective-time t)
+
+;; org-refile
+(setq org-reverse-note-order nil) ; new notes prepended
+(setq org-refile-use-outline-path 'full-file-path)
+(setq org-outline-path-complete-in-steps nil)
+(setq org-refile-allow-creating-parent-nodes nil)
+(setq org-refile-use-cache nil)
+(setq org-blank-before-new-entry '((heading . t) (plain-list-item . t)))
+
+(setq org-refile-targets
+ `((("~/org/inbox.org"
+ "~/org/computing.org"
+ "~/org/todos.org")
+ . (:maxlevel . 5))))
+
+;; org-todo-keywords
+(with-eval-after-load 'org
+ (setq org-todo-keywords
+ '((sequence
+ "STARTED(s)"
+ "TODO(t)"
+ "WAITING(w@/!)"
+ "IDEA(i)"
+ "SOMEDAY(.)"
+ "BLOCKED(k@/!)"
+ "|"
+ "DONE(x!)"
+ "CANCELLED(c)")
+ (sequence "PROJECT" "|" "DONE(x)")
+ (sequence "MAYBE(,0)" "CHOSEN(c,+)" "|" "REJECTED")))
+
+ ;; catppuccin palette
+ (setq org-todo-keyword-faces
+ '(("STARTED" . (:foreground "#a6d189" :weight bold))
+ ("TODO" . (:foreground "#a6e3a1" :weight bold))
+ ("WAITING" . (:foreground "#f9e2af" :weight bold))
+ ("IDEA" . (:foreground "#74c7ec" :weight bold))
+ ("SOMEDAY" . (:foreground "#f2cdcd" :weight bold))
+ ("BLOCKED" . (:foreground "#c6d0f5" :weight bold))
+ ("DONE" . (:foreground "#f38ba8" :weight bold))
+ ("CANCELLED" . (:foreground "#e78284" :weight bold))
+ ("MAYBE" . (:foreground "#c6d0f5" :weight bold))
+ ("CHOSEN" . (:foreground "#89b4fa" :weight bold))
+ ("REJECTED" . (:foreground "#d20f39" :weight bold)))))
+
+(setq org-log-done 'time)
+
+;; ox-hugo
+(with-eval-after-load 'ox
+ (require 'ox-hugo))
+
+;; colorize compilation buffer
+;; from https://sachachua.com/dotemacs/index.html#orga33bac5
+(require 'ansi-color)
+(defun colorize-compilation-buffer ()
+ (when (eq major-mode 'compilation-mode)
+ (let ((inhibit-read-only t))
+ (ansi-color-apply-on-region compilation-filter-start (point-max)))))
+(add-hook 'compilation-filter-hook 'colorize-compilation-buffer)
+
+
+;;;; helpful
+
+(global-set-key (kbd "C-h f") #'helpful-callable)
+(global-set-key (kbd "C-h v") #'helpful-variable)
+(global-set-key (kbd "C-h k") #'helpful-key)
+(global-set-key (kbd "C-h x") #'helpful-command)
+(global-set-key (kbd "C-c C-d") #'helpful-at-point)
+
+
+;;;; dictionary
+
+(global-set-key (kbd "C-c l") #'dictionary-lookup-definition)
+(setq dictionary-server "dict.org")
+
+
+;;;; dired
+
+(map! :after dired
+ :map dired-mode-map
+ "C-o" #'casual-dired-tmenu)
+
+
+;;;; elpher
+
+(setq elpher-default-url-type "gemini")
+
+
+;;;; vterm
+
+(setq vterm-kill-buffer-on-exit t)
+(setq vterm-always-compile-module t)
+(setq vterm-other-window t)
+(setq vterm-buffer-name-string "vterm %s")
+(setq vterm-copy-exclude-prompt t)
+(setq vterm-ignore-blink-cursor nil)
diff --git a/doom/.doom.d/init.el b/doom/.doom.d/init.el
new file mode 100644
index 0000000..831dede
--- /dev/null
+++ b/doom/.doom.d/init.el
@@ -0,0 +1,191 @@
+;;; init.el -*- lexical-binding: t; -*-
+
+;; This file controls what Doom modules are enabled and what order they load
+;; in. Remember to run 'doom sync' after modifying it!
+
+;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
+;; documentation. There you'll find a link to Doom's Module Index where all
+;; of our modules are listed, including what flags they support.
+
+;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
+;; 'C-c c k' for non-vim users) to view its documentation. This works on
+;; flags as well (those symbols that start with a plus).
+;;
+;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
+;; directory (for easy access to its source code).
+
+(doom! :input
+ ;;bidi ; (tfel ot) thgir etirw uoy gnipleh
+ ;;chinese
+ ;;japanese
+ ;;layout ; auie,ctsrnm is the superior home row
+
+ :completion
+ company ; the ultimate code completion backend
+ ;; (corfu +orderless) ; complete with cap(f), cape and a flying feather!
+ ;;helm ; the *other* search engine for love and life
+ ;;ido ; the other *other* search engine...
+ ;;ivy ; a search engine for love and life
+ vertico ; the search engine of the future
+
+ :ui
+ ;;deft ; notational velocity for Emacs
+ doom ; what makes DOOM look the way it does
+ doom-dashboard ; a nifty splash screen for Emacs
+ ;;doom-quit ; DOOM quit-message prompts when you quit Emacs
+ (emoji +unicode) ; 🙂
+ hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
+ ;;indent-guides ; highlighted indent columns
+ ligatures ; ligatures and symbols to make your code pretty again
+ ;;minimap ; show a map of the code on the side
+ modeline ; snazzy, Atom-inspired modeline, plus API
+ ;;nav-flash ; blink cursor line after big motions
+ ;;neotree ; a project drawer, like NERDTree for vim
+ ophints ; highlight the region an operation acts on
+ (popup +defaults) ; tame sudden yet inevitable temporary windows
+ ;;tabs ; a tab bar for Emacs
+ ;;treemacs ; a project drawer, like neotree but cooler
+ ;;unicode ; extended unicode support for various languages
+ (vc-gutter +pretty) ; vcs diff in the fringe
+ vi-tilde-fringe ; fringe tildes to mark beyond EOB
+ ;;window-select ; visually switch windows
+ workspaces ; tab emulation, persistence & separate workspaces
+ ;;zen ; distraction-free coding or writing
+
+ :editor
+ ;;(evil +everywhere); come to the dark side, we have cookies
+ file-templates ; auto-snippets for empty files
+ fold ; (nigh) universal code folding
+ (format +onsave) ; automated prettiness
+ ;;god ; run Emacs commands without modifier keys
+ ;;lispy ; vim for lisp, for people who don't like vim
+ ;;multiple-cursors ; editing in many places at once
+ ;;objed ; text object editing for the innocent
+ ;;parinfer ; turn lisp into python, sort of
+ ;;rotate-text ; cycle region at point between text candidates
+ snippets ; my elves. They type so I don't have to
+ ;;word-wrap ; soft wrapping with language-aware indent
+
+ :emacs
+ dired ; making dired pretty [functional]
+ electric ; smarter, keyword-based electric-indent
+ ibuffer ; interactive buffer management
+ undo ; persistent, smarter undo for your inevitable mistakes
+ vc ; version-control and Emacs, sitting in a tree
+
+ :term
+ ;;eshell ; the elisp shell that works everywhere
+ ;;shell ; simple shell REPL for Emacs
+ ;;term ; basic terminal emulator for Emacs
+ vterm ; the best terminal emulation in Emacs
+
+ :checkers
+ syntax ; tasing you for every semicolon you forget
+ ;; (spell +flyspell) ; tasing you for misspelling mispelling
+ ;; grammar ; tasing grammar mistake every you make
+
+ :tools
+ ansible
+ ;;biblio ; Writes a PhD for you (citation needed)
+ ;;collab ; buffers with friends
+ ;;debugger ; FIXME stepping through code, to help you add bugs
+ direnv
+ ;;docker
+ ;;editorconfig ; let someone else argue about tabs vs spaces
+ ;;ein ; tame Jupyter notebooks with emacs
+ (eval +overlay) ; run code, run (also, repls)
+ ;; lookup ; navigate your code and its documentation
+ lsp ; M-x vscode
+ magit ; a git porcelain for Emacs
+ make ; run make tasks from Emacs
+ ;;pass ; password manager for nerds
+ ;; pdf ; pdf enhancements
+ ;;prodigy ; FIXME managing external services & code builders
+ ;;terraform ; infrastructure as code
+ ;;tmux ; an API for interacting with tmux
+ tree-sitter ; syntax and parsing, sitting in a tree...
+ ;;upload ; map local to remote projects via ssh/ftp
+
+ :os
+ (:if (featurep :system 'macos) macos) ; improve compatibility with macOS
+ ;;tty ; improve the terminal Emacs experience
+
+ :lang
+ ;;agda ; types of types of types of types...
+ ;;beancount ; mind the GAAP
+ ;;(cc +lsp) ; C > C++ == 1
+ ;;clojure ; java with a lisp
+ ;;common-lisp ; if you've seen one lisp, you've seen them all
+ ;;coq ; proofs-as-programs
+ ;;crystal ; ruby at the speed of c
+ ;;csharp ; unity, .NET, and mono shenanigans
+ data ; config/data formats
+ ;;(dart +flutter) ; paint ui and not much else
+ ;;dhall
+ ;;elixir ; erlang done right
+ ;;elm ; care for a cup of TEA?
+ emacs-lisp ; drown in parentheses
+ ;;erlang ; an elegant language for a more civilized age
+ ;;ess ; emacs speaks statistics
+ ;;factor
+ ;;faust ; dsp, but you get to keep your soul
+ ;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
+ ;;fsharp ; ML stands for Microsoft's Language
+ ;;fstar ; (dependent) types and (monadic) effects and Z3
+ ;;gdscript ; the language you waited for
+ (go +lsp) ; the hipster dialect
+ ;;(graphql +lsp) ; Give queries a REST
+ ;;(haskell +lsp) ; a language that's lazier than I am
+ ;;hy ; readability of scheme w/ speed of python
+ ;;idris ; a language you can depend on
+ json ; At least it ain't XML
+ ;;(java +lsp) ; the poster child for carpal tunnel syndrome
+ ;;javascript ; all(hope(abandon(ye(who(enter(here))))))
+ ;;julia ; a better, faster MATLAB
+ ;;kotlin ; a better, slicker Java(Script)
+ ;;latex ; writing papers in Emacs has never been so fun
+ ;;lean ; for folks with too much to prove
+ ;;ledger ; be audit you can be
+ ;;lua ; one-based indices? one-based indices
+ markdown ; writing docs for people to ignore
+ ;;nim ; python + lisp at the speed of c
+ nix ; I hereby declare "nix geht mehr!"
+ ;;ocaml ; an objective camel
+ org ; organize your plain life in plain text
+ ;;php ; perl's insecure younger brother
+ ;;plantuml ; diagrams for confusing people more
+ ;;purescript ; javascript, but functional
+ (python +lsp +pyright) ; beautiful is better than ugly
+ ;;qt ; the 'cutest' gui framework ever
+ ;;racket ; a DSL for DSLs
+ ;;raku ; the artist formerly known as perl6
+ ;;rest ; Emacs as a REST client
+ ;;rst ; ReST in peace
+ ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
+ ;;(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
+ ;;scala ; java, but good
+ ;;(scheme +guile) ; a fully conniving family of lisps
+ sh ; she sells {ba,z,fi}sh shells on the C xor
+ ;; sml
+ ;;solidity ; do you need a blockchain? No.
+ ;;swift ; who asked for emoji variables?
+ ;;terra ; Earth and Moon in alignment for performance.
+ web ; the tubes
+ yaml ; JSON, but readable
+ ;;zig ; C, but simpler
+
+ :email
+ ;;(mu4e +org +gmail)
+ ;;notmuch
+ ;;(wanderlust +gmail)
+
+ :app
+ ;;calendar
+ ;;emms
+ ;;everywhere ; *leave* Emacs!? You must be joking
+ ;;irc ; how neckbeards socialize
+ ;;(rss +org) ; emacs as an RSS reader
+
+ :config
+ ;;literate
+ (default +bindings +smartparens))
diff --git a/doom/.doom.d/packages.el b/doom/.doom.d/packages.el
new file mode 100644
index 0000000..bb67fee
--- /dev/null
+++ b/doom/.doom.d/packages.el
@@ -0,0 +1,27 @@
+;; -*- no-byte-compile: t; -*-
+;;; $DOOMDIR/packages.el
+
+;; To install a package with Doom you must declare them here and run 'doom sync'
+;; on the command line, then restart Emacs for the changes to take effect -- or
+;; use 'M-x doom/reload'.
+
+;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
+ ;(package! some-package)
+(package! apheleia)
+(package! autothemer)
+(package! casual-dired)
+(package! catppuccin-theme)
+(package! dockerfile-mode)
+(package! elpher)
+(package! evil-nerd-commenter)
+(package! gemini :recipe
+ (:host nil :repo "https://git.carcosa.net/jmcbray/gemini.el"))
+(package! helpful)
+(package! just-mode)
+(package! license-templates)
+(package! org-superstar)
+(package! ox-hugo)
+(package! pdf-tools)
+(package! shell-pop)
+(package! systemd)
+(package! undo-tree)
diff --git a/just/.justfile b/just/.justfile
index 9ef9640..a0d9837 100644
--- a/just/.justfile
+++ b/just/.justfile
@@ -1,39 +1,47 @@
# justfile for common household tasks
set shell := ["zsh", "-cu"]
-
-go-tools:
- go install golang.org/x/tools/gpls@latest
- go install github.com/fatih/gomodifytags@latest
- go install github.com/cweill/gotests/...@latest
- go install github.com/x-motemen/gore/cmd/gore@latest
- go install golang.org/x/tools/cmd/guru@latest
-
-python-tools:
- pipx install --include-deps ansible
- pipx install black
- pipx install nose
- pipx install pytest
- pipx install hyfetch
- pip install --user pyright
-
-webdev-tools:
- sudo npm install -g @catppuccin/inkcat
- sudo npm install -g prettier
- sudo npm install -g js-beautify
- sudo npm install -g stylelint
- sudo dnf install -y tidy
-
-rust-tools:
- source "${HOME}/.cargo/env"
- cargo install cargo-binstall
- cargo_pkgs=(arp-scan bandwhich bat diskonaut du-dust fblog fd hyperfine procs ripgrep skim vivid wthrr)
- for pkg in "${cargo_pkgs[@]}"; do cargo-binstall -y "$pkg"; done
+dotfiles_repo := "/home/jas/repos/codeberg.org/hyperreal/dotfiles"
+homedir := "/home/jas/"
+configdir := "/home/jas/.config/"
refresh-doom-emacs:
- rm -rf "${HOME}/.config/emacs"
- git clone --depth 1 https://github.com/doomemacs/doomemacs "${HOME}/.config/emacs"
- "${HOME}/.config/emacs/bin/doom" install --force --verbose
+ rm -rf {{configdir}}/emacs
+ git clone --depth 1 https://github.com/doomemacs/doomemacs {{configdir}}/emacs
+ {{configdir}}/emacs/bin/doom install --force --verbose
-rustup:
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+deploy-dotfiles:
+ cp -rfv {{dotfiles_repo}}/just/.justfile {{homedir}}
+ cp -rfv {{dotfiles_repo}}/doom/.doom.d {{homedir}}
+ cp -fv {{dotfiles_repo}}/zsh/.zshrc {{homedir}}
+ cp -rfv {{dotfiles_repo}}/zsh/.zshrc.d {{homedir}}
+ cp -fv {{dotfiles_repo}}/zsh/.zshenv {{homedir}}
+ cp -rfv {{dotfiles_repo}}/config/.config/bat {{configdir}}
+ cp -rfv {{dotfiles_repo}}/config/.config/git {{configdir}}
+ cp -fv {{dotfiles_repo}}/config/.config/starship.toml {{configdir}}
+ cp -rfv {{dotfiles_repo}}/config/.config/zellij {{configdir}}
+ cp -rfv {{dotfiles_repo}}/config/.config/systemd {{configdir}}
+
+save-dotfiles:
+ cp -fv {{homedir}}/.justfile {{dotfiles_repo}}/just/
+ cp -rfv {{homedir}}/.doom.d {{dotfiles_repo}}/doom/
+ cp -fv {{homedir}}/.zshrc {{dotfiles_repo}}/zsh/
+ cp -rfv {{homedir}}/.zshrc.d {{dotfiles_repo}}/zsh/
+ cp -fv {{homedir}}/.zshenv {{dotfiles_repo}}/zsh/
+ cp -rfv {{configdir}}/bat {{dotfiles_repo}}/config/.config/
+ cp -rfv {{configdir}}/git {{dotfiles_repo}}/config/.config/
+ cp -fv {{configdir}}/starship.toml {{dotfiles_repo}}/config/.config/
+ cp -rfv {{configdir}}/zellij {{dotfiles_repo}}/config/.config/
+ cp -rfv {{configdir}}/systemd {{dotfiles_repo}}/config/.config/
+
+clean-dotfiles:
+ rm -fv {{homedir}}/.justfile
+ rm -rfv {{homedir}}/.doom.d
+ rm -fv {{homedir}}/.zshrc
+ rm -rfv {{homedir}}/.zshrc.d
+ rm -fv {{homedir}}/.zshenv
+ rm -rfv {{configdir}}/bat
+ rm -rfv {{configdir}}/git
+ rm -fv {{configdir}}/starship.toml
+ rm -rfv {{configdir}}/zellij
+ rm -rfv {{configdir}}/systemd
diff --git a/zsh/.zshenv b/zsh/.zshenv
index 0868542..af75929 100644
--- a/zsh/.zshenv
+++ b/zsh/.zshenv
@@ -1,23 +1 @@
-#
-# Generic .zshenv file for zsh
-#
-# .zshenv is sourced on ALL invocations of the shell, unless the -f option is
-# set. It should NOT normally contain commands to set the command search path,
-# or other common environment variables unless you really know what you're
-# doing. E.g. running "PATH=/custom/path gdb program" sources this file (when
-# gdb runs the program via $SHELL), so you want to be sure not to override a
-# custom environment in such cases. Note also that .zshenv should not contain
-# commands that produce output or assume the shell is attached to a tty.
-#
-
-# Some people insist on setting their PATH here to affect things like ssh.
-# Those that do should probably use $SHLVL to ensure that this only happens
-# the first time the shell is started (to avoid overriding a customized
-# environment). Also, the various profile/rc/login files all get sourced
-# *after* this file, so they will override this value. One solution is to
-# put your path-setting code into a file named .zpath, and source it from
-# both here (if we're not a login shell) and from the .zprofile file (which
-# is only sourced if we are a login shell).
-if [[ $SHLVL == 1 ]]; then
- source ~/.zpath
-fi
+eval "$(starship init zsh)"
diff --git a/zsh/.zshrc b/zsh/.zshrc
index 6eb074d..7597316 100644
--- a/zsh/.zshrc
+++ b/zsh/.zshrc
@@ -5,51 +5,14 @@
#
# Zsh Manual - https://zsh-manual.netlify.app
# Zsh Guide - https://zsh-guide.netlify.app
-#
-# ,----[ man -k zsh ]
-# |
-# | zsh (1) - the Z shell
-# | zshall (1) - the Z shell meta-man page
-# | zshbuiltins (1) - zsh builtin commands
-# | zshcalsys (1) - zsh calendar system
-# | zshcompctl (1) - zsh programmable completion
-# | zshcompsys (1) - zsh completion system
-# | zshcompwid (1) - zsh completion widgets
-# | zshcontrib (1) - user contributions to zsh
-# | zshexpn (1) - zsh expansion and substitution
-# | zshmisc (1) - everything and then some
-# | zshmodules (1) - zsh loadable modules
-# | zshoptions (1) - zsh options
-# | zshparam (1) - zsh parameters
-# | zshroadmap (1) - informal introduction to the zsh manual
-# | zshtcpsys (1) - zsh tcp system
-# | zshzftpsys (1) - zftp function front-end
-# | zshzle (1) - zsh command line editor
-# `----
-#
-# Zsh startup sequence
-# 1) /etc/zshenv -> Always run for every zsh. (login + interactive + other)
-# 2) ~/.zshenv -> Usually run for every zsh. (login + interactive + other)
-# 3) /etc/zprofile -> Run for login shells. (login)
-# 4) ~/.zprofile -> Run for login shells. (login)
-# 5) /etc/zshrc -> Run for interactive shells. (login + interactive)
-# 6) ~/.zshrc -> Run for interactive shells. (login + interactive)
-# 7) /etc/zlogin -> Run for login shells. (login)
-# 8) ~/.zlogin -> Run for login shells. (login)
-#
-# This file is based on Christian Schneider's zsh configuration
-# https://www.strcat.de/dotfiles
-
-# Load Homebrew
-eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
# Plugins
-if ! test -f ~/.zplug/init.zsh; then
- export ZPLUG_HOME=~/.zplug
+if ! test -f "${HOME}/.zplug/init.zsh"; then
+ export ZPLUG_HOME="${HOME}/.zplug"
git clone https://github.com/zplug/zplug $ZPLUG_HOME
fi
-source ~/.zplug/init.zsh
+source "${HOME}/.zplug/init.zsh"
# Use autosuggestions when typing commands
zplug "zsh-users/zsh-autosuggestions"
@@ -70,7 +33,7 @@ zplug "plugins/extract", from:oh-my-zsh
zplug "plugins/systemd", from:oh-my-zsh
# Load file from ~/.zshrc.d
-zplug "~/.zshrc.d", from:local, use:'*'
+zplug "${HOME}/.zshrc.d", from:local, use:'*'
if ! zplug check; then
zplug install;
@@ -82,18 +45,18 @@ zplug load
# -----------------------------------------------------------------------------
# ENVIRONMENT VARS
# -----------------------------------------------------------------------------
-export SHELL=/usr/bin/zsh
-export DOOMDIR="${HOME}/nextcloud/doom"
-export LS_COLORS=$(vivid generate catppuccin-mocha)
-export PAGER="less -X"
+export PATH="${HOME}/.config/emacs/bin:${PATH}"
+export PAGER="less -FRX"
export MANWIDTH="88"
export MANROFFOPT="-c"
-export MANPAGER="less -X"
+export MANPAGER="less -FRX"
+export BAT_PAGER="less -FRX"
+export BAT_STYLE="plain"
if test -x "$(command -v emacs)"; then
- EDITOR="emacs"
+ EDITOR="emacsclient"
else
- EDITOR="nvim"
+ EDITOR="vim"
fi
export EDITOR
@@ -108,23 +71,6 @@ export LESS_TERMCAP_se=$'\e[0m' # reset reverse video
export LESS_TERMCAP_ue=$'\e[0m' # reset underline
export GROFF_NO_SGR=1 # for konsole and gnome-terminal
-# Format of process time reports with 'time'
-# %% A '%'
-# %U CPU seconds spent in user mode
-# %S CPU seconds spent in kernel mode
-# %E Elapsed time in seconds
-# %P CPU percentage, computed as (%U+%S)/%E
-# %J The name of this job
-# Default is:
-# %E real %U user %S system %P %J
-TIMEFMT="\
-
- The name of this job : %J
- CPU seconds spent in user mode : %U
- CPU seconds spent in kernel mode : %S
- Elapsed time in seconds : %E
- CPU percentage : %P"
-
# HISTSIZE is the number of lines of history that is kept within any given
# running zsh instance. SAVEHIST is the number of lines of history that is
# written out to the HISTFILE when that event occurs. If you use the
@@ -135,12 +81,7 @@ HISTSIZE=100000
SAVEHIST=65536
# Name of the file used to store command history
-HISTFILE=~/.zsh_history
-
-# If nonnegative, commands whose combined user and system execution times
-# (measured in seconds) are greater than this value have timing stats printed
-# for them.
-REPORTTIME=10
+HISTFILE="${HOME}/.zsh_history"
# Language
export LANG="en_US.UTF-8"
@@ -148,12 +89,11 @@ export LANG="en_US.UTF-8"
# Manpages
export MANPATH="${MANPATH:-/usr/share/man:/usr/local/share/man}"
-if [ -d "${HOME}/.fzf/man" ]; then
- export MANPATH="${MANPATH}:${HOME}/.fzf/man"
-fi
+# Add ~/.local/bin to PATH
+export PATH="${HOME}/.local/bin:${PATH}"
-# Bat theme
-export BAT_THEME="Catppuccin Mocha"
+# Add ~/bin to PATH
+export PATH="${HOME}/bin:${PATH}"
# Automatically remove duplicates from these arrays
typeset -gU path cdpath manpath fpath
@@ -162,5 +102,12 @@ typeset -gU path cdpath manpath fpath
autoload -U add-zsh-hook
add-zsh-hook -Uz chpwd() { print -Pn "\e]2;%m:%2~\a" }
-# starship.rs
-eval "$(starship init zsh)"
+# direnv
+eval "$(direnv hook zsh)"
+
+# Ensure always loading the latest version of the emacs-vterm-zsh.sh file
+if [[ "$INSIDE_EMACS" = 'vterm' ]] \
+ && [[ -n ${EMACS_VTERM_PATH} ]] \
+ && [[ -f ${EMACS_VTERM_PATH}/etc/emacs-vterm-zsh.sh ]]; then
+ source ${EMACS_VTERM_PATH}/etc/emacs-vterm-zsh.sh
+fi
diff --git a/zsh/.zshrc.d/aliases.zsh b/zsh/.zshrc.d/aliases.zsh
index 5e7a583..28a2f68 100644
--- a/zsh/.zshrc.d/aliases.zsh
+++ b/zsh/.zshrc.d/aliases.zsh
@@ -1,9 +1,3 @@
-# Get top 10 shell commands
-alias top10='print -l ${(o)history%% *} | uniq -c | sort -nr | head -n 10'
-
-# history mechanism
-alias h='history'
-
# Aliases for APT
if [ -e "/etc/debian_version" ]; then
alias acs="sudo apt-cache search"
@@ -36,32 +30,21 @@ if [ -e "/etc/redhat-release" ]; then
alias dnfu='sudo dnf update'
fi
-# Convert UPPER to lower (or back)
-alias UP2low='for i in *(.); mv $i ${i:l}'
-alias low2UP='for i in *(.); mv $i ${i:u}'
-
# The ls family
if test -x "$(command -v lsd)"; then
alias ls='lsd'
+ alias la='lsd -a'
+ alias ll='lsd -l'
+ alias lal='lsd -al'
else
alias ls='ls --color=auto'
+ alias la='ls -a'
+ alias ll='ls -l'
+ alias lal='ls -al'
fi
-alias l='ls -lFhg'
-alias la='ls -a'
-alias ll='ls -l'
-alias lal='ls -al'
-alias ldot='ls -gld .*'
-alias lse='ls -lZ'
-
-# greps
+# grep
alias grep='grep --color'
-alias sgrep='grep -R -n -H -C 5 --exclude-dir={.git,.svn,CVS}'
-
-# Copy SSH public key to clipboard (requires xclip or xsel)
-if test -x "$(command -v xclip)"; then
- alias pubkey='printf "$(cat ~/.ssh/id_ed25519.pub)" | xclip -selection clipboard | echo "SSH public key copied"'
-fi
# Prompt user before overwriting files
alias cp='cp -i'
@@ -76,10 +59,10 @@ alias zfun='functions | bat -l zsh'
alias -g H='| head'
alias -g T='| tail'
alias -g G='| grep'
-alias -g L='| less -X'
+alias -g L='| less -FRX'
alias -g B='| bat'
alias -g J='| jq'
-alias -g CC='| xclip -selection clipboard'
+alias -g CC='| wl-copy'
alias -g C='| wc -l'
# Get public IP address
@@ -110,10 +93,6 @@ alias lsocku='sudo lsof -nP | grep UDP'
# List TCP sockets in use
alias lsockt='sudo lsof -nP | grep TCP'
-# Reboot / Poweroff
-alias rbt='sudo systemctl reboot'
-alias shut='sudo systemctl poweroff'
-
# firewalld
if test -x "$(command -v firewall-cmd)"; then
alias fw='sudo firewall-cmd'
@@ -134,12 +113,3 @@ alias grbi='git rebase -i'
alias grm='git rm'
alias grv='git remote -v'
alias gst='git status'
-
-# doom emacs
-alias doomdoc="~/.config/emacs/bin/doom doctor"
-alias dsync="~/.config/emacs/bin/doom sync"
-alias dclean="~/.config/emacs/bin/doom clean"
-alias dcomp="~/.config/emacs/bin/doom compile"
-alias dpurge="~/.config/emacs/bin/doom purge"
-alias denv="~/.config/emacs/bin/doom env"
-alias dupgrade="~/.config/emacs/bin/doom upgrade"
diff --git a/zsh/.zshrc.d/bindings.zsh b/zsh/.zshrc.d/bindings.zsh
index a716406..c04d060 100644
--- a/zsh/.zshrc.d/bindings.zsh
+++ b/zsh/.zshrc.d/bindings.zsh
@@ -27,9 +27,9 @@ if test -x "$(command -v gumssh)"; then
bindkey -s '^[s' 'gumssh^M'
fi
-## ranger
-if test -x "$(command -v ranger)"; then
- bindkey -s '^[f' 'ranger^M'
+## yazi
+if test -x "$(command -v yazi)"; then
+ bindkey -s '^[f' 'yazi^M'
fi
## history substring search
diff --git a/zsh/.zshrc.d/functions.zsh b/zsh/.zshrc.d/functions.zsh
index 212f130..a36962c 100644
--- a/zsh/.zshrc.d/functions.zsh
+++ b/zsh/.zshrc.d/functions.zsh
@@ -58,12 +58,18 @@ function rmknownhosts() {
}
# Empty trash
-function rubbish() {
+function trsh() {
if check_cmd trash-empty; then
- trash-empty -f -v
+ trash-empty -f
fi
}
+# Copy SSH public key to clipboard (requires wl-copy)
+function pubkey() {
+ cat "${HOME}/.ssh/id_ed25519.pub" | tr -d '\n' | wl-copy
+ echo "--> SSH public key copied to clipboard"
+}
+
# Compatibility with emacs-libvterm
function vterm_printf() {
if [ -n "$TMUX" ] && ([ "${TERM%%-*}" = "tmux" ] || [ "${TERM%%-*}" = "screen" ]); then
@@ -77,12 +83,12 @@ function vterm_printf() {
fi
}
-# Remove all .jpeg .jpg .png .svg files from downloads
+# Remove all .jpeg .jpg .png .svg .webp files from downloads
function rmpics() {
find "${HOME}/downloads" \
-maxdepth 1 \
-type f \
- \( -name "*.jpg" -o -name "*.jpg_original" -o -name "*.jpeg" -o -name "*.svg" -o -name "*.png" \) \
+ \( -name "*.jpg" -o -name "*.jpg_original" -o -name "*.jpeg" -o -name "*.svg" -o -name "*.png" -o -name "*.webp" \) \
-delete
}
@@ -117,6 +123,8 @@ function mark() {
"${mark_to_add} added to shellmarks file"
fi
+ cat "${HOME}/.shellmarks" | sort | tee "${HOME}/.shellmarks" >/dev/null
+
return 0
}
@@ -177,13 +185,13 @@ function dstack() {
# Print timestamp as %Y-%m-%d %H:%M:%S.
function tstamp() {
emulate -L zsh
- date '+%Y-%m-%d %H:%M:%S'
+ date '+%Y-%m-%d %H:%M:%S' | tr -d '\n'
}
# Print timestamp as %Y-%m-%dT%H:%M:%S%:z
function tstampz() {
emulate -L zsh
- date '+%Y-%m-%dT%H:%M:%S%:z'
+ date '+%Y-%m-%dT%H:%M:%S%:z' | tr -d '\n'
}
# Create a /overview/ of all available function()'s; the description for
@@ -231,3 +239,30 @@ function restart() { exec $SHELL $SHELL_ARGS "$@"; }
# cd to ~, clear screen, and restart zsh.
function rsrc() { cd && clear && restart; }
+
+# Set hostname:pwd for vterm buffer title
+autoload -U add-zsh-hook
+add-zsh-hook -Uz chpwd() { print -Pn "\e]2;%m:%2~\a" }
+
+# For directory tracking and prompt tracking in Emacs Vterm
+function vterm_prompt_end() {
+ vterm_printf "51;A$(whoami)@$(hostname):$(pwd)"
+}
+setopt PROMPT_SUBST
+PROMPT=$PROMPT'%{$(vterm_prompt_end)%}'
+
+# To read and execute Emacs commands in Vterm
+function vterm_cmd() {
+ local vterm_elisp
+ vterm_elisp=""
+ while [ $# -gt 0 ]; do
+ vterm_elisp="$vterm_elisp""$(printf '"%s" ' "$(printf "%s" "$1" | sed -e 's|\\|\\\\|g' -e 's|"|\\"|g')")"
+ shift
+ done
+ vterm_printf "51;E$vterm_elisp"
+}
+
+# find-file in Emacs
+function find_file() {
+ vterm_cmd find-file "$(realpath "${@:-.}")"
+}