From eda1b5c9d0ad7c397ea34c838d7211a0f6b9d61f Mon Sep 17 00:00:00 2001 From: Jeffrey Serio Date: Sat, 26 Oct 2024 13:30:45 -0500 Subject: [PATCH] Update --- config/.config/bat/config | 3 + .../bat/themes/Catppuccin-mocha.tmTheme | 2048 +++++++++++++++++ config/.config/git/config | 16 +- config/.config/starship.toml | 202 +- .../systemd/user/sync_to_remotes.service | 9 + .../systemd/user/sync_to_remotes.timer | 10 + .../timers.target.wants/sync_to_remotes.timer | 1 + config/.config/zellij/config.kdl | 329 +-- doom/.doom.d/config.el | 296 +++ doom/.doom.d/init.el | 191 ++ doom/.doom.d/packages.el | 27 + just/.justfile | 74 +- zsh/.zshenv | 24 +- zsh/.zshrc | 103 +- zsh/.zshrc.d/aliases.zsh | 48 +- zsh/.zshrc.d/bindings.zsh | 6 +- zsh/.zshrc.d/functions.zsh | 47 +- 17 files changed, 2831 insertions(+), 603 deletions(-) create mode 100644 config/.config/bat/config create mode 100644 config/.config/bat/themes/Catppuccin-mocha.tmTheme create mode 100644 config/.config/systemd/user/sync_to_remotes.service create mode 100644 config/.config/systemd/user/sync_to_remotes.timer create mode 120000 config/.config/systemd/user/timers.target.wants/sync_to_remotes.timer create mode 100644 doom/.doom.d/config.el create mode 100644 doom/.doom.d/init.el create mode 100644 doom/.doom.d/packages.el 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 &amp; + 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 "${@:-.}")" +}