diff options
84 files changed, 3192 insertions, 1973 deletions
diff --git a/.bashrc b/.bashrc new file mode 100644 index 0000000..b1d2c7b --- /dev/null +++ b/.bashrc @@ -0,0 +1,95 @@ +# Source Default /etc/bashrc +if [ -f /etc/bashrc ]; then + . /etc/bashrc +fi + +# Add .local/bin to PATH +if ! [[ "$PATH" =~ "$HOME/.local/bin:" ]]; then + PATH="$HOME/.local/bin:$PATH" +fi +export PATH + +# Custom Shell variables, aliases, and functions +[ -f "$HOME/.config/shell/alias" ] && source "$HOME/.config/shell/alias" +[ -f "$HOME/.config/shell/vars" ] && source "$HOME/.config/shell/vars" +[ -f "$HOME/.config/shell/functions" ] && source "$HOME/.config/shell/functions" + +# Custom Prompt +USER_COLOR="\[\e[35m\]" # magenta +VENV_COLOR="\[\e[33m\]" # yellow +DIR_COLOR="\[\e[32m\]" # green +GIT_COLOR="\[\e[34m\]" # blue +GIT_DIRTY_COLOR="\[\e[31m\]" # red +PROMPT_SYMBOL_COLOR="\[\e[33m\]" # yellow +RESET_COLOR="\[\e[0m\]" # blank +WHITE_COLOR="\[\e[37m\]" # white +TOOLBOX_COLOR="\[\e[36m\]" # cyan + +shorten_path() { + if [[ "$PWD" == "$HOME" ]]; then + echo "~" + return + fi + + if [[ "$PWD" == "$HOME/"* ]]; then + local rel="${PWD#$HOME/}" + local depth + IFS='/' read -ra parts <<< "$rel" + depth=${#parts[@]} + + if (( depth == 1 )); then + echo "~/${parts[0]}" + elif (( depth == 2 )); then + echo ".../${parts[0]}/${parts[1]}" + else + echo ".../${parts[-2]}/${parts[-1]}" + fi + return + fi + + IFS='/' read -ra parts <<< "$PWD" + if (( ${#parts[@]} > 3 )); then + echo ".../${parts[-2]}/${parts[-1]}" + else + echo "$PWD" + fi +} + +git_branch() { + git symbolic-ref --short HEAD 2>/dev/null \ + || git rev-parse --short HEAD 2>/dev/null +} + +git_dirty() { + if [[ -n "$(git status --porcelain 2>/dev/null)" ]]; then + echo " ✗" + else + echo " ✓" + fi +} + +set_prompt() { + local user="${USER_COLOR}\u${RESET_COLOR}" + + local toolbox="" + if [[ -n "$TOOLBOX_PATH" ]]; then + toolbox="${TOOLBOX_COLOR}(tlbx)${RESET_COLOR}" + fi + + local venv="" + if [[ -n "$VIRTUAL_ENV" ]]; then + venv="${VENV_COLOR}($(basename "$VIRTUAL_ENV"))${RESET_COLOR} " + fi + + local path="${DIR_COLOR}$(shorten_path)${RESET_COLOR}" + local git_info="" + local branch="$(git_branch)" + + if [[ -n "$branch" ]]; then + git_info=" ${WHITE_COLOR}on${RESET_COLOR} ${GIT_COLOR}${branch}${RESET_COLOR}${GIT_DIRTY_COLOR}$(git_dirty)${RESET_COLOR}" + fi + + PS1="${user}${toolbox} ${WHITE_COLOR}in${RESET_COLOR} ${venv}${path}${git_info}\n${PROMPT_SYMBOL_COLOR}λ${RESET_COLOR} " +} + +PROMPT_COMMAND="set_prompt${PROMPT_COMMAND:+; $PROMPT_COMMAND}" diff --git a/.config/bat/config b/.config/bat/config new file mode 100644 index 0000000..2d65ccf --- /dev/null +++ b/.config/bat/config @@ -0,0 +1 @@ +--theme="modus_vivendi" diff --git a/.config/bat/themes/modus_vivendi.tmTheme b/.config/bat/themes/modus_vivendi.tmTheme new file mode 100644 index 0000000..15d2429 --- /dev/null +++ b/.config/bat/themes/modus_vivendi.tmTheme @@ -0,0 +1,439 @@ +<!-- Modus Themes for Bat --> +<!-- Auto generated with https://github.com/miikanissi/modus-themes.nvim/blob/master/lua/modus-themes/extras/bat.lua --> + +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> + <dict> + <key>name</key> + <string>modus_vivendi</string> + <key>settings</key> + <array> + <dict> + <key>settings</key> + <dict> + <key>background</key> + <string>#000000</string> + <key>caret</key> + <string>#989898</string> + <key>foreground</key> + <string>#ffffff</string> + <key>invisibles</key> + <string>#989898</string> + <key>lineHighlight</key> + <string>#2f3849</string> + <key>selection</key> + <string>#7030af</string> + <key>findHighlight</key> + <string>#7a6100</string> + <key>selectionBorder</key> + <string>#646464</string> + <key>gutterForeground</key> + <string>#989898</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Comment</string> + <key>scope</key> + <string>comment</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#989898</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>String</string> + <key>scope</key> + <string>string</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#79a8ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Number</string> + <key>scope</key> + <string>constant.numeric</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#82b0ec</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Built-in constant</string> + <key>scope</key> + <string>constant.language</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#6ae4b9</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>User-defined constant</string> + <key>scope</key> + <string>constant.character, constant.other</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Variable</string> + <key>scope</key> + <string>variable</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>#00d3d0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Ruby's @variable</string> + <key>scope</key> + <string>variable.other.readwrite.instance</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#00d3d0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>String interpolation</string> + <key>scope</key> + <string>constant.character.escaped, constant.character.escape, string source, string source.ruby</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#d2b580</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Keyword</string> + <key>scope</key> + <string>keyword</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#b6a0ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Storage</string> + <key>scope</key> + <string>storage</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#b6a0ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Storage type</string> + <key>scope</key> + <string>storage.type</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#b6a0ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Class name</string> + <key>scope</key> + <string>entity.name.class</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#b6a0ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Inherited class</string> + <key>scope</key> + <string>entity.other.inherited-class</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#b6a0ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Function name</string> + <key>scope</key> + <string>entity.name.function</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#feacd0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Function argument</string> + <key>scope</key> + <string>variable.parameter</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#00d3d0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Tag name</string> + <key>scope</key> + <string>entity.name.tag</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#00d3d0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Tag attribute</string> + <key>scope</key> + <string>entity.other.attribute-name</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#00d3d0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Library function</string> + <key>scope</key> + <string>support.function</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#feacd0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Library constant</string> + <key>scope</key> + <string>support.constant</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#6ae4b9</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Library class/type</string> + <key>scope</key> + <string>support.type, support.class</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#6ae4b9</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Library variable</string> + <key>scope</key> + <string>support.other.variable</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#00d3d0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Invalid</string> + <key>scope</key> + <string>invalid</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#989898</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Invalid deprecated</string> + <key>scope</key> + <string>invalid.deprecated</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#989898</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON String</string> + <key>scope</key> + <string>meta.structure.dictionary.json string.quoted.double.json</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#79a8ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>diff.header</string> + <key>scope</key> + <string>meta.diff, meta.diff.header</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#feacd0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>diff.deleted</string> + <key>scope</key> + <string>markup.deleted</string> + <key>settings</key> + <dict> + <key>background</key> + <string>#4f1119</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>diff.inserted</string> + <key>scope</key> + <string>markup.inserted</string> + <key>settings</key> + <dict> + <key>background</key> + <string>#00381f</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>diff.changed</string> + <key>scope</key> + <string>markup.changed</string> + <key>settings</key> + <dict> + <key>background</key> + <string>#363300</string> + </dict> + </dict> + <dict> + <key>scope</key> + <string>constant.numeric.line-number.find-in-files - match</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#82b0ec</string> + </dict> + </dict> + <dict> + <key>scope</key> + <string>entity.name.filename</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#2fafff</string> + </dict> + </dict> + <dict> + <key>scope</key> + <string>message.error</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>bold</string> + <key>foreground</key> + <string>#ff7f9f</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON Punctuation</string> + <key>scope</key> + <string>punctuation.definition.string.begin.json - meta.structure.dictionary.value.json, punctuation.definition.string.end.json - meta.structure.dictionary.value.json</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON Structure</string> + <key>scope</key> + <string>meta.structure.dictionary.json string.quoted.double.json</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#79a8ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON String</string> + <key>scope</key> + <string>meta.structure.dictionary.value.json string.quoted.double.json</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#79a8ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Escape Characters</string> + <key>scope</key> + <string>constant.character.escape</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#d2b580</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Regular Expressions</string> + <key>scope</key> + <string>string.regexp</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#00c06f</string> + </dict> + </dict> + </array> + <key>uuid</key> + <string>09CE9B40-0137-442C-8512-7CEAFC78C153</string> + <key>colorSpaceName</key> + <string>sRGB</string> + <key>semanticClass</key> + <string>Modus Vivendi</string> + </dict> +</plist> diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc new file mode 100644 index 0000000..7f94795 --- /dev/null +++ b/.config/dunst/dunstrc @@ -0,0 +1,39 @@ +[global] + width = (200,600) + offset = (24,24) + + progress_bar_min_width = 380 + progress_bar_max_width = 380 + progress_bar_corner_radius = 0 + + padding = 10 + horizontal_padding = 10 + frame_width = 2 + gap_size = 3 + origin = "top-right" + font = "Google Sans 12" + + enable_recursive_icon_lookup = true + corner_radius = 0 + + background = "#000000" + foreground = "#ffffff" + +[urgency_low] + background = "#000000" + highlight = "#ffffff" + frame_color = "#ffffff" + format = "<b><span foreground='#31748f'>%s</span></b>\n%b" + +[urgency_normal] + background = "#000000" + highlight = "#ffffff" + frame_color = "#ffffff" + format = "<b><span foreground='#e0def4'>%s</span></b>\n%b" + +[urgency_critical] + background = "#000000" + highlight = "#ffffff" + frame_color = "#ffffff" + default_icon = "dialog-error" + format = "<b><span foreground='#36263d'>%s</span></b>\n%b" diff --git a/.config/eza/theme.yml b/.config/eza/theme.yml new file mode 100644 index 0000000..f74a128 --- /dev/null +++ b/.config/eza/theme.yml @@ -0,0 +1,147 @@ +# Modus Themes for eza +# Auto generated with https://github.com/miikanissi/modus-themes.nvim/blob/master/lua/modus-themes/extras/eza.lua +colourful: true + +# base colors +define: &bg_main "#000000" +define: &bg_dim = "#1e1e1e" +define: &bg_alt = "#0f0f0f" +define: &fg_main = "#ffffff" +define: &fg_dim = "#989898" +define: &fg_alt = "#c6daff" +define: &border = "#646464" +define: &border_highlight = "#C4C4C4" + +# foreground colors +define: &red "#ff5f59" +define: &red_warmer "#ff6b55" +define: &red_cooler "#ff7f9f" +define: &red_faint "#ff9580" +define: &green "#44bc44" +define: &green_warmer "#70b900" +define: &green_cooler "#00c06f" +define: &green_faint "#88ca9f" +define: &yellow "#d0bc00" +define: &yellow_warmer "#fec43f" +define: &yellow_cooler "#dfaf7a" +define: &yellow_faint "#d2b580" +define: &blue "#2fafff" +define: &blue_warmer "#79a8ff" +define: &blue_cooler "#00bcff" +define: &blue_faint "#82b0ec" +define: &magenta "#feacd0" +define: &magenta_warmer "#f78fe7" +define: &magenta_cooler "#b6a0ff" +define: &magenta_faint "#caa6df" +define: &cyan "#00d3d0" +define: &cyan_warmer "#4ae2f0" +define: &cyan_cooler "#6ae4b9" +define: &cyan_faint "#9ac8e0" +define: &rust "#db7b5f" +define: &gold "#c0965b" +define: &olive "#9cbd6f" +define: &slate "#76afbf" +define: &indigo "#9099d9" +define: &maroon "#cf7fa7" +define: &pink "#d09dc0" + +filekinds: + normal: {foreground: *fg_main} + directory: {foreground: *blue_warmer} + symlink: {foreground: *blue} + pipe: {foreground: *fg_dim} + block_device: {foreground: *magenta_cooler} + char_device: {foreground: *yellow_warmer} + socket: {foreground: *magenta} + special: {foreground: *pink} + executable: {foreground: *green} + mount_point: {foreground: *cyan} + +perms: + user_read: {foreground: *fg_dim} + user_write: {foreground: *red} + user_execute_file: {foreground: *green} + user_execute_other: {foreground: *green} + group_read: {foreground: *fg_dim} + group_write: {foreground: *red} + group_execute: {foreground: *green} + other_read: {foreground: *fg_dim} + other_write: {foreground: *red} + other_execute: {foreground: *green} + special_user_file: {foreground: *magenta_cooler} + special_other: {foreground: *red} + attribute: {foreground: *pink} + +size: + major: {foreground: *fg_dim} + minor: {foreground: *blue_warmer} + number_byte: {foreground: *pink} + number_kilo: {foreground: *rust} + number_mega: {foreground: *blue_warmer} + number_giga: {foreground: *magenta_cooler} + number_huge: {foreground: *magenta} + unit_byte: {foreground: *pink} + unit_kilo: {foreground: *rust} + unit_mega: {foreground: *blue_warmer} + unit_giga: {foreground: *magenta_cooler} + unit_huge: {foreground: *magenta} + +users: + user_you: {foreground: *yellow_warmer} + user_root: {foreground: *red} + user_other: {foreground: *magenta_cooler} + group_yours: {foreground: *pink} + group_other: {foreground: *fg_dim} + group_root: {foreground: *red} + +links: + normal: {foreground: *blue} + multi_link_file: {foreground: *cyan} + +git: + new: {foreground: *green} + modified: {foreground: *yellow_warmer} + deleted: {foreground: *red} + renamed: {foreground: *cyan} + typechange: {foreground: *magenta_cooler} + ignored: {foreground: *pink} + conflicted: {foreground: *magenta} + +git_repo: + branch_main: {foreground: *fg_dim} + branch_other: {foreground: *magenta_cooler} + git_clean: {foreground: *green} + git_dirty: {foreground: *red} + +security_context: + colon: {foreground: *fg_dim} + user: {foreground: *blue_warmer} + role: {foreground: *magenta_cooler} + typ: {foreground: *pink} + range: {foreground: *magenta_cooler} + +file_type: + image: {foreground: *yellow_warmer} + video: {foreground: *magenta} + music: {foreground: *blue_warmer} + lossless: {foreground: *cyan} + crypto: {foreground: *pink} + document: {foreground: *fg_dim} + compressed: {foreground: *magenta_cooler} + temp: {foreground: *yellow_warmer} + compiled: {foreground: *cyan} + build: {foreground: *pink} + source: {foreground: *green} + +punctuation: {foreground: *pink} +date: {foreground: *cyan} +inode: {foreground: *fg_dim} +blocks: {foreground: *pink} +header: {foreground: *fg_dim} +octal: {foreground: *blue_warmer} +flags: {foreground: *magenta_cooler} + +symlink_path: {foreground: *blue} +control_char: {foreground: *cyan} +broken_symlink: {foreground: *red} +broken_path_overlay: {foreground: *pink} diff --git a/.config/foot/foot.ini b/.config/foot/foot.ini new file mode 100644 index 0000000..be335dc --- /dev/null +++ b/.config/foot/foot.ini @@ -0,0 +1,6 @@ +[main] +include=/usr/share/foot/themes/modus-vivendi +font=GoogleSansCodeNF:size=12 + +[cursor] +style=beam diff --git a/.config/jellyfin-tui/config.yaml b/.config/jellyfin-tui/config.yaml new file mode 100644 index 0000000..30322e0 --- /dev/null +++ b/.config/jellyfin-tui/config.yaml @@ -0,0 +1,6 @@ +servers: +- name: NAS + quick_connect: true + url: https://iv.venomade.com + +rounded_corners: false diff --git a/.config/kanata/config.kbd b/.config/kanata/config.kbd new file mode 100644 index 0000000..a805cf7 --- /dev/null +++ b/.config/kanata/config.kbd @@ -0,0 +1,39 @@ +#| +This minimal config changes Caps Lock to act as Caps Lock on quick tap, but +if held, it will act as Left Ctrl. It also changes the backtick/grave key to +act as backtick/grave on quick tap, but change ijkl keys to arrow keys on hold. + +This text between the two pipe+octothorpe sequences is a multi-line comment. +|# + +;; Text after double-semicolons are single-line comments. + +#| +One defcfg entry may be added, which is used for configuration key-pairs. These +configurations change kanata's behaviour at a more global level than the other +configuration entries. +|# + +(defcfg + #| + This configuration will process all keys pressed inside of kanata, even if + they are not mapped in defsrc. This is so that certain actions can activate + at the right time for certain input sequences. By default, unmapped keys are + not processed through kanata due to a Windows issue related to AltGr. If you + use AltGr in your keyboard, you will likely want to follow the simple.kbd + file while unmapping lctl and ralt from defsrc. + |# + process-unmapped-keys yes +) + +(defsrc + caps +) + +(deflayer default + @cap +) + +(defalias + cap (tap-hold 200 200 esc lctl) +) diff --git a/.config/kxkbrc b/.config/kxkbrc deleted file mode 100644 index e5674f4..0000000 --- a/.config/kxkbrc +++ /dev/null @@ -1,9 +0,0 @@ -[$Version] -update_info=kxkb.upd:remove-empty-lists,kxkb.upd:add-back-resetoptions,kxkb_variants.upd:split-variants - -[Layout] -LayoutList=us_colemak_pt_mac -Options=ctrl:nocaps,lv3:switch -ResetOldOptions=true -Use=true -VariantList=basic diff --git a/.config/lazygit/config.yml b/.config/lazygit/config.yml new file mode 100644 index 0000000..0151f13 --- /dev/null +++ b/.config/lazygit/config.yml @@ -0,0 +1,182 @@ +gui: + border: single + +keybinding: + universal: + quit: q + quit-alt1: <c-c> + suspendApp: <c-z> + return: <esc> + quitWithoutChangingDirectory: Q + togglePanel: <tab> + prevItem: <up> + nextItem: <down> + prevItem-alt: e + nextItem-alt: n + prevPage: ',' + nextPage: . + scrollLeft: H + scrollRight: I + gotoTop: < + gotoBottom: '>' + gotoTop-alt: <home> + gotoBottom-alt: <end> + toggleRangeSelect: v + rangeSelectDown: <s-down> + rangeSelectUp: <s-up> + prevBlock: <left> + nextBlock: <right> + prevBlock-alt: h + nextBlock-alt: i + nextBlock-alt2: <tab> + prevBlock-alt2: <backtab> + jumpToBlock: + - "1" + - "2" + - "3" + - "4" + - "5" + focusMainView: "0" + nextMatch: "k" + prevMatch: "K" + startSearch: / + optionMenu: <disabled> + optionMenu-alt1: '?' + select: <space> + goInto: <enter> + confirm: <enter> + confirmMenu: <enter> + confirmSuggestion: <enter> + confirmInEditor: <a-enter> + confirmInEditor-alt: <c-s> + remove: d + new: "n" + edit: j + openFile: o + scrollUpMain: <pgup> + scrollDownMain: <pgdown> + scrollUpMain-alt1: E + scrollDownMain-alt1: N + scrollUpMain-alt2: <c-u> + scrollDownMain-alt2: <c-d> + executeShellCommand: ':' + createRebaseOptionsMenu: m + + # 'Files' appended for legacy reasons + pushFiles: P + + # 'Files' appended for legacy reasons + pullFiles: p + refresh: R + createPatchOptionsMenu: <c-p> + nextTab: ']' + prevTab: '[' + nextScreenMode: + + prevScreenMode: _ + cyclePagers: '|' + undo: z + redo: Z + filteringMenu: <c-s> + diffingMenu: W + diffingMenu-alt: <c-j> + copyToClipboard: <c-o> + openRecentRepos: <c-r> + submitEditorText: <enter> + extrasMenu: '@' + toggleWhitespaceInDiffView: <c-w> + increaseContextInDiffView: '}' + decreaseContextInDiffView: '{' + increaseRenameSimilarityThreshold: ) + decreaseRenameSimilarityThreshold: ( + openDiffTool: <c-t> + status: + checkForUpdate: u + recentRepos: <enter> + allBranchesLogGraph: a + files: + commitChanges: c + commitChangesWithoutHook: w + amendLastCommit: A + commitChangesWithEditor: C + findBaseCommitForFixup: <c-f> + confirmDiscard: x + ignoreFile: l + refreshFiles: r + stashAllChanges: s + viewStashOptions: S + toggleStagedAll: a + viewResetOptions: D + fetch: f + toggleTreeView: '`' + openMergeOptions: M + openStatusFilter: <c-b> + copyFileInfoToClipboard: "y" + collapseAll: '-' + expandAll: = + branches: + createPullRequest: o + viewPullRequestOptions: O + copyPullRequestURL: <c-y> + checkoutBranchByName: c + forceCheckoutBranch: F + checkoutPreviousBranch: '-' + rebaseBranch: r + renameBranch: R + mergeIntoCurrentBranch: M + moveCommitsToNewBranch: "K" + viewGitFlowOptions: l + fastForward: f + createTag: T + pushTag: P + setUpstream: u + fetchRemote: f + addForkRemote: F + sortOrder: s + worktrees: + viewWorktreeOptions: w + commits: + squashDown: s + renameCommit: r + renameCommitWithEditor: R + viewResetOptions: g + markCommitAsFixup: f + setFixupMessage: c + createFixupCommit: F + squashAboveCommits: S + moveDownCommit: <c-n> + moveUpCommit: <c-e> + amendToCommit: A + resetCommitAuthor: a + pickCommit: p + revertCommit: t + cherryPickCopy: C + pasteCommits: V + markCommitAsBaseForRebase: B + tagCommit: T + checkoutCommit: <space> + resetCherryPick: <c-R> + copyCommitAttributeToClipboard: "y" + openLogMenu: <c-l> + openInBrowser: o + viewBisectOptions: b + startInteractiveRebase: l + selectCommitsOfCurrentBranch: '*' + amendAttribute: + resetAuthor: a + setAuthor: A + addCoAuthor: c + stash: + popStash: g + renameStash: r + commitFiles: + checkoutCommitFile: c + main: + toggleSelectHunk: a + pickBothHunks: b + editSelectHunk: J + submodules: + init: l + update: u + bulkMenu: b + commitMessage: + commitMenu: <c-o> diff --git a/.config/luastatus/alsa.lua b/.config/luastatus/alsa.lua new file mode 100644 index 0000000..fb97270 --- /dev/null +++ b/.config/luastatus/alsa.lua @@ -0,0 +1,23 @@ +widget = { + plugin = 'alsa', + cb = function(t) + local symbol = '' + if t.mute then + return { full_text = ' ', color = '#ed8796' } + else + local percent = (t.vol.cur - t.vol.min) / (t.vol.max - t.vol.min) * 100 + if percent <= 30 then + symbol = '' + elseif percent >= 70 then + symbol = '' + end + return { full_text = string.format('%s%3d%%', symbol, math.floor(0.5 + percent)), color = '#b7bdf8' } + end + end, + event = [[ + local t = ... + if t.button == 1 then + os.execute('pactl set-sink-mute @DEFAULT_SINK@ toggle &') + end + ]], +} diff --git a/.config/luastatus/battery.lua b/.config/luastatus/battery.lua new file mode 100644 index 0000000..459599e --- /dev/null +++ b/.config/luastatus/battery.lua @@ -0,0 +1,57 @@ +local function read(path) + local f = io.open(path) + if not f then return nil end + local v = tonumber(f:read('*l')) + f:close() + return v +end + +widget = { + plugin = 'timer', + opts = { period = 2 }, + cb = function() + local base = '/sys/class/power_supply/macsmc-battery/' + + local energy_now = read(base .. 'energy_now') + local energy_full = read(base .. 'energy_full') + local status_f = io.open(base .. 'status') + + if not energy_now or not energy_full or not status_f then + return { { full_text = 'bat ?' } } + end + + local status = status_f:read('*l') + status_f:close() + + local capacity = math.floor(energy_now / energy_full * 100 + 0.5) + + local text_color = '#ffffff' + local battery_symbol = ' ' + + if capacity < 30 then + text_color = '#ed8796' + battery_symbol = '' + elseif capacity > 70 then + text_color = '#a6da95' + battery_symbol = '' + else + text_color = '#eed49f' + battery_symbol = '' + end + + local symbol = ({ + Charging = '', + Discharging = battery_symbol, + })[status] or ' ' + + return { + { full_text = string.format('%s %2d%%', symbol, capacity), color = text_color } + } + end, + event = [[ + local t = ... + if t.button == 1 then + os.execute('~/.local/bin/rofi-ppd &') + end + ]], +} diff --git a/.config/luastatus/playerctl.lua b/.config/luastatus/playerctl.lua new file mode 100644 index 0000000..a3e743c --- /dev/null +++ b/.config/luastatus/playerctl.lua @@ -0,0 +1,43 @@ +local player = 'jellyfin-tui' + +widget = { + plugin = 'timer', + opts = { period = 2 }, + cb = function() + + local handle = io.popen('playerctl -p ' .. player .. ' status') + local playerctl_status = string.sub(handle:read("*a"), 1, -2) + handle:close() + + local symbol = '' + + if (playerctl_status == 'Playing') or (playerctl_status == 'Paused') then + local handle = io.popen('playerctl -p ' .. player ..' metadata title') + local playerctl_title = string.sub(handle:read("*a"), 1, -2) + handle:close() + + local handle = io.popen('playerctl -p ' .. player .. ' metadata artist') + local playerctl_artist = string.sub(handle:read("*a"), 1, -2) + handle:close() + + if playerctl_status == 'Playing' then + symbol = '' + end + + return { + { full_text = string.format('%s - %s %s', playerctl_artist, playerctl_title, symbol), color = "#f2cdcd" } + } + end + + return { + { full_text = " "} + } + end, + -- TODO: Figure out if this can stop being hardcoded + event = [[ + local t = ... + if t.button == 1 then + os.execute('playerctl -p jellyfin-tui play-pause') + end + ]], +} diff --git a/.config/luastatus/separator.lua b/.config/luastatus/separator.lua new file mode 100644 index 0000000..1a3ef01 --- /dev/null +++ b/.config/luastatus/separator.lua @@ -0,0 +1,6 @@ +widget = { + plugin = 'fs', + cb = function() + return { full_text = "|", color = "#333333" } + end, +} diff --git a/.config/luastatus/time-date.lua b/.config/luastatus/time-date.lua new file mode 100644 index 0000000..8d5bfe7 --- /dev/null +++ b/.config/luastatus/time-date.lua @@ -0,0 +1,13 @@ +local months = {'Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Sep', 'Out', 'Nov', 'Dez'} +local days = {'Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', ''} + +widget = { + plugin = 'timer', + cb = function() + local d = os.date('*t') + return { + {full_text = string.format('%s %d %s', days[d.wday] , d.day, months[d.month])}, + {full_text = string.format('%02d:%02d ', d.hour, d.min)}, + } + end, +} diff --git a/.config/luastatus/wireless.lua b/.config/luastatus/wireless.lua new file mode 100644 index 0000000..e3d53d7 --- /dev/null +++ b/.config/luastatus/wireless.lua @@ -0,0 +1,70 @@ +local MIN_DBM, MAX_DBM = -90, -20 +local COLOR_DIM = '#709080' + +local function clamp(x, lo, hi) + if x < lo then return lo end + if x > hi then return hi end + return x +end + +local function make_wifi_level(dbm) + dbm = clamp(dbm, MIN_DBM, MAX_DBM) + + -- Normalize to [0, 1] + local t = (dbm - MIN_DBM) / (MAX_DBM - MIN_DBM) + + local level + if t < 0.25 then + level = '' + elseif t < 0.50 then + level = '' + elseif t < 0.75 then + level = '' + else + level = '' + end + + return { + full_text = level, + color = COLOR_DIM, + } +end + +widget = { + plugin = 'network-linux', + opts = { + wireless = true, + timeout = 10, + }, + cb = function(t) + if not t then + return nil + end + local r = {} + for iface, params in pairs(t) do + if params.wireless then + if params.wireless.ssid then + r[#r + 1] = { + full_text = params.wireless.ssid, + color = COLOR_DIM, + } + end + if params.wireless.signal_dbm then + r[#r + 1] = make_wifi_level(params.wireless.signal_dbm) + end + elseif iface ~= 'lo' and (params.ipv4 or params.ipv6) then + r[#r + 1] = { + full_text = string.format('[%s]', iface), + color = COLOR_DIM, + } + end + end + return r + end, + event = [[ + local t = ... + if t.button == 1 then + os.execute('~/.local/bin/rofi-wifimenu &') + end + ]], +} diff --git a/.config/ly/config.ini b/.config/ly/config.ini new file mode 100644 index 0000000..f70ca36 --- /dev/null +++ b/.config/ly/config.ini @@ -0,0 +1,265 @@ +# Allow empty password or not when authenticating +allow_empty_password = false + +# The active animation +animation = none + +# Stop the animation after some time +animation_timeout_sec = 0 + +# The character used to mask the password +asterisk = * + +# The number of failed authentications before a special animation is played... ;) +auth_fails = 10 + +# Identifier for battery whose charge to display at top left +battery_id = macsmc-battery + +# Automatic login configuration +# PAM service name to use for automatic login +auto_login_service = ly-autologin + +# Session name to launch automatically +auto_login_session = null + +# Username to automatically log in +auto_login_user = null + +# Background color id +bg = 0x00000000 + +# Change the state and language of the big clock +bigclock = en + +# Set bigclock to 12-hour notation. +bigclock_12hr = false + +# Set bigclock to show the seconds. +bigclock_seconds = false + +# Blank main box background +blank_box = true + +# Border foreground color id +border_fg = 0x00FFFFFF + +# Title to show at the top of the main box +box_title = null + +# Brightness decrease command +brightness_down_cmd = /usr/bin/brightnessctl -q -n s 10%- + +# Brightness decrease key, or null to disable +brightness_down_key = F5 + +# Brightness increase command +brightness_up_cmd = /usr/bin/brightnessctl -q -n s +10% + +# Brightness increase key, or null to disable +brightness_up_key = F6 + +# Erase password input on failure +clear_password = true + +# Format string for clock in top right corner (see strftime specification). Example: %c +clock = null + +# CMatrix animation foreground color id +cmatrix_fg = 0x0000FF00 + +# CMatrix animation character string head color id +cmatrix_head_col = 0x01FFFFFF + +# CMatrix animation minimum codepoint. It uses a 16-bit integer +cmatrix_min_codepoint = 0x21 + +# CMatrix animation maximum codepoint. It uses a 16-bit integer +cmatrix_max_codepoint = 0x7B + +# Color mixing animation first color id +colormix_col1 = 0x00FF0000 + +# Color mixing animation second color id +colormix_col2 = 0x000000FF + +# Color mixing animation third color id +colormix_col3 = 0x20000000 + +# Custom sessions directory +custom_sessions = /etc/ly/custom-sessions + +# Input box active by default on startup +default_input = password + +# DOOM animation fire height (1 thru 9) +doom_fire_height = 6 + +# DOOM animation fire spread (0 thru 4) +doom_fire_spread = 2 + +# DOOM animation custom top color (low intensity flames) +doom_top_color = 0x009F2707 + +# DOOM animation custom middle color (medium intensity flames) +doom_middle_color = 0x00C78F17 + +# DOOM animation custom bottom color (high intensity flames) +doom_bottom_color = 0x00FFFFFF + +# Dur file path +dur_file_path = /etc/ly/example.dur + +# Dur offset x direction +dur_x_offset = 0 + +# Dur offset y direction +dur_y_offset = 0 + +# Set margin to the edges of the DM (useful for curved monitors) +edge_margin = 0 + +# Error background color id +error_bg = 0x00000000 + +# Error foreground color id +error_fg = 0x01FF0000 + +# Foreground color id +fg = 0x00FFFFFF + +# Render true colors (if supported) +full_color = true + +# Game of Life entropy interval (0 = disabled, >0 = add entropy every N generations) +gameoflife_entropy_interval = 10 + +# Game of Life animation foreground color id +gameoflife_fg = 0x0000FF00 + +# Game of Life frame delay (lower = faster animation, higher = slower) +gameoflife_frame_delay = 6 + +# Game of Life initial cell density (0.0 to 1.0) +gameoflife_initial_density = 0.4 + +# Command executed when pressing hibernate key (can be null) +hibernate_cmd = null + +# Specifies the key used for hibernate (F1-F12) +hibernate_key = F4 + +# Remove main box borders +hide_borders = false + +# Remove power management command hints +hide_key_hints = false + +# Remove keyboard lock states from the top right corner +hide_keyboard_locks = false + +# Remove version number from the top left corner +hide_version_string = false + +# Command executed when no input is detected for a certain time +inactivity_cmd = null + +# Executes a command after a certain amount of seconds +inactivity_delay = 0 + +# Initial text to show on the info line +initial_info_text = null + +# Input boxes length +input_len = 34 + +# Active language +lang = en + +# Command executed when logging in +login_cmd = null + +# Path for login.defs file (used for listing all local users on the system on +# Linux) +login_defs_path = /etc/login.defs + +# Command executed when logging out +logout_cmd = null + +# General log file path +ly_log = /var/log/ly.log + +# Main box horizontal margin +margin_box_h = 2 + +# Main box vertical margin +margin_box_v = 1 + +# Event timeout in milliseconds +min_refresh_delta = 5 + +# Set numlock on/off at startup +numlock = false + +# Default path +path = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +# Command executed when pressing restart_key +restart_cmd = /sbin/shutdown -r now + +# Specifies the key used for restart (F1-F12) +restart_key = F2 + +# Save the current desktop and login as defaults, and load them on startup +save = true + +# Service name (set to ly to use the provided pam config file) +service_name = ly + +# Session log file path +session_log = .local/state/ly-session.log + +# Setup command +setup_cmd = /etc/ly/setup.sh + +# Command executed when pressing shutdown_key +shutdown_cmd = /sbin/shutdown -a now + +# Specifies the key used for shutdown (F1-F12) +shutdown_key = F1 + +# Command executed when pressing sleep key (can be null) +sleep_cmd = null + +# Specifies the key used for sleep (F1-F12) +sleep_key = F3 + +# Command executed when starting Ly (before the TTY is taken control of) +start_cmd = null + +# Center the session name. +text_in_center = false + +# Default vi mode +vi_default_mode = normal + +# Enable vi keybindings +vi_mode = false + +# Wayland desktop environments +waylandsessions = /usr/share/wayland-sessions + +# Xorg server command +x_cmd = /usr/bin/X + +# Xorg virtual terminal number +x_vt = null + +# Xorg xauthority edition tool +xauth_cmd = /usr/bin/xauth + +# xinitrc +xinitrc = ~/.xinitrc + +# Xorg desktop environments +xsessions = /usr/share/xsessions diff --git a/.config/mc/hotlist b/.config/mc/hotlist deleted file mode 100644 index 47b50be..0000000 --- a/.config/mc/hotlist +++ /dev/null @@ -1,2 +0,0 @@ -ENTRY "/home/venomade/.build/suckless" URL "/home/venomade/.build/suckless" -ENTRY "/home/venomade/Documents" URL "/home/venomade/Documents" diff --git a/.config/mc/hotlist.bak b/.config/mc/hotlist.bak deleted file mode 100644 index 4dbffb7..0000000 --- a/.config/mc/hotlist.bak +++ /dev/null @@ -1 +0,0 @@ -ENTRY "/home/venomade/.build/suckless" URL "/home/venomade/.build/suckless" diff --git a/.config/mc/ini b/.config/mc/ini deleted file mode 100644 index b3a7bb1..0000000 --- a/.config/mc/ini +++ /dev/null @@ -1,167 +0,0 @@ -[Midnight-Commander] -verbose=true -shell_patterns=true -auto_save_setup=true -preallocate_space=false -auto_menu=false -use_internal_view=false -use_internal_edit=false -clear_before_exec=true -confirm_delete=true -confirm_overwrite=true -confirm_execute=false -confirm_history_cleanup=true -confirm_exit=false -confirm_directory_hotlist_delete=false -confirm_view_dir=false -safe_delete=false -safe_overwrite=false -use_8th_bit_as_meta=false -mouse_move_pages_viewer=true -mouse_close_dialog=false -fast_refresh=false -drop_menus=false -wrap_mode=true -old_esc_mode=true -cd_symlinks=true -show_all_if_ambiguous=false -alternate_plus_minus=false -only_leading_plus_minus=true -show_output_starts_shell=false -xtree_mode=false -file_op_compute_totals=true -classic_progressbar=true -use_netrc=true -ftpfs_always_use_proxy=false -ftpfs_use_passive_connections=true -ftpfs_use_passive_connections_over_proxy=false -ftpfs_use_unix_list_options=true -ftpfs_first_cd_then_ls=true -ignore_ftp_chattr_errors=true -editor_fill_tabs_with_spaces=false -editor_return_does_auto_indent=true -editor_backspace_through_tabs=false -editor_fake_half_tabs=true -editor_option_save_position=true -editor_option_auto_para_formatting=false -editor_option_typewriter_wrap=false -editor_edit_confirm_save=true -editor_syntax_highlighting=true -editor_persistent_selections=true -editor_drop_selection_on_copy=true -editor_cursor_beyond_eol=false -editor_cursor_after_inserted_block=false -editor_visible_tabs=true -editor_visible_spaces=true -editor_line_state=false -editor_simple_statusbar=false -editor_check_new_line=false -editor_show_right_margin=false -editor_group_undo=false -editor_state_full_filename=false -editor_ask_filename_before_edit=false -nice_rotating_dash=true -shadows=true -mcview_remember_file_position=false -auto_fill_mkdir_name=true -copymove_persistent_attr=true -pause_after_run=1 -mouse_repeat_rate=100 -double_click_speed=250 -old_esc_mode_timeout=1000000 -max_dirt_limit=10 -num_history_items_recorded=60 -vfs_timeout=60 -ftpfs_directory_timeout=900 -ftpfs_retry_seconds=30 -shell_directory_timeout=900 -editor_tab_spacing=8 -editor_word_wrap_line_length=72 -editor_option_save_mode=0 -editor_backup_extension=~ -editor_filesize_threshold=64M -editor_stop_format_chars=-+*\\,.;:&> -mcview_eof= -skin=seasons-winter16M -filepos_max_saved_entries=1024 - -use_file_to_guess_type=true -fish_directory_timeout=900 - -[Layout] -output_lines=0 -left_panel_size=160 -top_panel_size=0 -message_visible=true -keybar_visible=false -xterm_title=true -command_prompt=true -menubar_visible=false -free_space=false -horizontal_split=false -vertical_equal=true -horizontal_equal=true - -[Misc] -timeformat_recent=%b %e %H:%M -timeformat_old=%b %e %Y -ftp_proxy_host=gate -ftpfs_password=anonymous@ -display_codepage=UTF-8 -source_codepage=Other_8_bit -autodetect_codeset= -clipboard_store= -clipboard_paste= - -spell_language=en - -[Colors] -base_color= -xterm-kitty= -color_terminals= - -xterm-256color= -linux= - -[Panels] -simple_swap=false -show_mini_info=true -kilobyte_si=false -mix_all_files=false -show_backups=true -show_dot_files=true -fast_reload=false -fast_reload_msg_shown=false -mark_moves_down=true -reverse_files_only=true -auto_save_setup_panels=false -navigate_with_arrows=false -panel_scroll_pages=true -panel_scroll_center=false -mouse_move_pages=true -filetype_mode=true -permission_mode=false -torben_fj_mode=false -quick_search_mode=0 -select_flags=6 - -[FindFile] -file_case_sens=true -file_shell_pattern=true -file_find_recurs=true -follow_symlinks=false -file_skip_hidden=false -file_all_charsets=false -content_case_sens=true -content_regexp=false -content_first_hit=false -content_whole_words=false -content_all_charsets=false -ignore_dirs_enable=true -ignore_dirs= - -[Panelize] -Find *.orig after patching=find . -name \\*.orig -print -Find rejects after patching=find . -name \\*.rej -print -Modified git files=git ls-files --modified -Find SUID and SGID programs=find . \\( \\( -perm -04000 -a -perm /011 \\) -o \\( -perm -02000 -a -perm /01 \\) \\) -print diff --git a/.config/mc/panels.ini b/.config/mc/panels.ini deleted file mode 100644 index d22858b..0000000 --- a/.config/mc/panels.ini +++ /dev/null @@ -1,37 +0,0 @@ -[New Left Panel] -display=listing -reverse=false -case_sensitive=true -exec_first=false -sort_order=name -list_mode=full -brief_cols=2 -user_format=half type name | size | perm -user_status0=half type name | size | perm -user_status1=half type name | size | perm -user_status2=half type name | size | perm -user_status3=half type name | size | perm -user_mini_status=false -filter_flags=7 -list_format=full - -[New Right Panel] -display=listing -reverse=false -case_sensitive=true -exec_first=false -sort_order=name -list_mode=full -brief_cols=2 -user_format=half type name | size | perm -user_status0=half type name | size | perm -user_status1=half type name | size | perm -user_status2=half type name | size | perm -user_status3=half type name | size | perm -user_mini_status=false -filter_flags=7 -list_format=full - -[Dirs] -current_is_left=true -other_dir=/home/venomade/.build/suckless/patches/st diff --git a/.config/mimeapps.list b/.config/mimeapps.list new file mode 100644 index 0000000..f31391c --- /dev/null +++ b/.config/mimeapps.list @@ -0,0 +1,21 @@ + +[Default Applications] +inode/directory=yazi.desktop +image/bmp=imv.desktop +image/gif=imv.desktop +image/jpeg=imv.desktop +image/jpg=imv.desktop +image/pjpeg=imv.desktop +image/png=imv.desktop +image/tiff=imv.desktop +image/heif=imv.desktop +image/avif=imv.desktop +image/x-bmp=imv.desktop +image/x-pcx=imv.desktop +image/x-png=imv.desktop +image/x-portable-anymap=imv.desktop +image/x-portable-bitmap=imv.desktop +image/x-portable-graymap=imv.desktop +image/x-portable-pixmap=imv.desktop +image/x-tga=imv.desktop +image/x-xbitmap=imv.desktop diff --git a/.config/nvim/.luarc.json b/.config/nvim/.luarc.json index c5a6ffc..bd8a14b 100644 --- a/.config/nvim/.luarc.json +++ b/.config/nvim/.luarc.json @@ -1,21 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/LuaLS/vscode-lua/master/setting/schema.json", "Lua.runtime.version": "LuaJIT", - "Lua.runtime.path": [ - "?.lua", - "?/init.lua", - "/Users/venomade/.luarocks/share/lua/5.4/?.lua", - "/Users/venomade/.luarocks/share/lua/5.4/?/init.lua", - "/opt/homebrew/share/lua/5.4/?.lua", - "/opt/homebrew/share/lua/5.4/?/init.lua", - "./stubs/?.lua", - "./stubs/?/init.lua" - ], - "Lua.workspace.library": [ - "/Users/venomade/.luarocks/share/lua/5.4", - "/opt/homebrew/share/lua/5.4", - "./stubs" - ], "diagnostics.globals": ["vim"], "workspace.checkThirdParty": false, "workspace.library": [ diff --git a/.config/nvim/lua/config/options.lua b/.config/nvim/lua/config/options.lua index fd1de92..559f4c7 100644 --- a/.config/nvim/lua/config/options.lua +++ b/.config/nvim/lua/config/options.lua @@ -30,7 +30,7 @@ vim.opt.splitright = true vim.opt.encoding = "utf-8" -vim.opt.shell = "zsh" +vim.opt.shell = "bash" vim.opt.mouse = "a" @@ -55,7 +55,7 @@ vim.wo.fillchars='eob: ' vim.opt.conceallevel = 3 -- Window Borders -vim.o.winborder = 'rounded' +vim.o.winborder = 'single' -- Remove Whitespaces on File Save vim.api.nvim_create_autocmd({ "BufWritePre" }, { @@ -105,6 +105,3 @@ vim.fn.sign_define("LineNrDiagnosticHint", { text = "", texthl = "LineNrDiagnos vim.api.nvim_create_autocmd({ "DiagnosticChanged", "BufEnter", "CursorHold" }, { callback = set_line_number_highlight, }) - --- TODO: Put somewhere else (for llm.nvim) -vim.fn.setenv("LLM_KEY", "NONE") diff --git a/.config/nvim/lua/manager.lua b/.config/nvim/lua/manager.lua index da5a221..f450d31 100644 --- a/.config/nvim/lua/manager.lua +++ b/.config/nvim/lua/manager.lua @@ -21,6 +21,6 @@ require("lazy").setup({ spec = { { import = "plugins" }, }, - install = { colorscheme = { "habamax" } }, + install = { colorscheme = { "modus" } }, checker = { enabled = true, notify = false }, }) diff --git a/.config/nvim/lua/plugins/cmp.lua b/.config/nvim/lua/plugins/cmp.lua index 79bf9ac..541e62c 100644 --- a/.config/nvim/lua/plugins/cmp.lua +++ b/.config/nvim/lua/plugins/cmp.lua @@ -12,7 +12,10 @@ return { local cmp = require('cmp') local lspkind = require('lspkind') cmp.setup({ - preselect = 'none', + -- preselect = cmp.PreselectMode.None, + completion = { + completeopt = "menu,menuone,noinsert", + }, window = { completion = cmp.config.window.bordered({}), documentation = cmp.config.window.bordered({}), @@ -23,11 +26,10 @@ return { end }, mapping = cmp.mapping.preset.insert({ - -- ['<CR>'] = cmp.mapping.confirm({ select = true }), - ['<C-t>'] = cmp.mapping.complete(), - ['<CR>'] = cmp.mapping.confirm(), - ['<Tab>'] = cmp.mapping.select_next_item(), - ['<S-Tab>'] = cmp.mapping.select_prev_item(), + ['<Tab>'] = cmp.mapping.confirm({ select = true }), + ['<C-n>'] = cmp.mapping.select_next_item(), + ['<C-p>'] = cmp.mapping.select_prev_item(), + ['<C-g>'] = cmp.mapping.abort(), }), sources = cmp.config.sources( { @@ -53,8 +55,43 @@ return { local capabilities = require('cmp_nvim_lsp').default_capabilities() vim.lsp.config('lua_ls', { - capabilities = capabilities + cmd = { '/home/venomade/.local/share/lua-language-server/bin/lua-language-server' }, + capabilities = capabilities, + root_markers = { + ".luarc.json", + ".luarc.jsonc", + ".git", + }, + settings = { + Lua = { + runtime = { + version = 'Lua 5.4', + -- luarocks path --lr-path | tr ';' '\n' | sed 's/?.*//' | sort -u + path = { + '?.lua', + '?/init.lua', + '/home/venomade/.luarocks/share/lua/5.4/?.lua', + '/home/venomade/.luarocks/share/lua/5.4/?/init.lua', + '/usr/share/lua/5.4/?.lua', + '/usr/share/lua/5.4/?/init.lua', + './stubs/?.lua', + './stubs/?/init.lua' + }, + }, + workspace = { + library = { + '/home/venomade/.luarocks/share/lua/5.4', + '/usr/share/lua/5.4', + './stubs' + }, + }, + diagnostics = { + enable = true, + }, + }, + }, }) + vim.lsp.enable('lua_ls') vim.lsp.config('clangd', { capabilities = capabilities diff --git a/.config/nvim/lua/plugins/flutter.lua b/.config/nvim/lua/plugins/flutter.lua deleted file mode 100644 index a6d3506..0000000 --- a/.config/nvim/lua/plugins/flutter.lua +++ /dev/null @@ -1,11 +0,0 @@ -return { - 'nvim-flutter/flutter-tools.nvim', - lazy = false, - dependencies = { - 'nvim-lua/plenary.nvim', - -- 'stevearc/dressing.nvim', -- optional for vim.ui.select - }, - config = function () - require('flutter-tools').setup({}) - end, -} diff --git a/.config/nvim/lua/plugins/fterm.lua b/.config/nvim/lua/plugins/fterm.lua deleted file mode 100644 index dfc9375..0000000 --- a/.config/nvim/lua/plugins/fterm.lua +++ /dev/null @@ -1,14 +0,0 @@ -return { - "numToStr/FTerm.nvim", - config = function() - require("FTerm").setup({ - border = "bold", - dimensions = { - height = 0.9, - width = 0.9, - }, - }) - vim.keymap.set('n', '<A-i>', '<CMD>lua require("FTerm").toggle()<CR>') - vim.keymap.set('t', '<A-i>', '<C-\\><C-n><CMD>lua require("FTerm").toggle()<CR>') - end, -} diff --git a/.config/nvim/lua/plugins/init.lua b/.config/nvim/lua/plugins/init.lua deleted file mode 100644 index 4c12912..0000000 --- a/.config/nvim/lua/plugins/init.lua +++ /dev/null @@ -1,14 +0,0 @@ -return { - require('plugins.theme'), - require('plugins.autopairs'), - require('plugins.treesitter'), - require('plugins.rainbow-delimiters'), - require('plugins.telescope'), - require('plugins.lualine'), - require('plugins.statuscol'), - require('plugins.oil'), - require('plugins.cmp'), - require('plugins.lastplace'), - require('plugins.orgmode'), - require('plugins.which-key'), -} diff --git a/.config/nvim/lua/plugins/lastplace.lua b/.config/nvim/lua/plugins/lastplace.lua index 6c9f074..a393a90 100644 --- a/.config/nvim/lua/plugins/lastplace.lua +++ b/.config/nvim/lua/plugins/lastplace.lua @@ -4,3 +4,4 @@ return { require'nvim-lastplace'.setup({}) end } + diff --git a/.config/nvim/lua/plugins/lualine.lua b/.config/nvim/lua/plugins/lualine.lua index cd3d6f1..5412061 100644 --- a/.config/nvim/lua/plugins/lualine.lua +++ b/.config/nvim/lua/plugins/lualine.lua @@ -7,6 +7,18 @@ return { icons_enabled = true, component_separators = { left = '|', right = '|'}, section_separators = { left = '', right = ''}, + theme = { + normal = { + a = { bg = '#000000' }, + b = { bg = '#000000' }, + c = { bg = '#000000' }, + }, + inactive = { + a = { bg = '#000000' }, + b = { bg = '#000000' }, + c = { bg = '#000000' }, + } + }, }, sections = { lualine_a = {"mode", { diff --git a/.config/nvim/lua/plugins/modus-themes.lua b/.config/nvim/lua/plugins/modus-themes.lua new file mode 100644 index 0000000..3058078 --- /dev/null +++ b/.config/nvim/lua/plugins/modus-themes.lua @@ -0,0 +1,13 @@ +return { + "miikanissi/modus-themes.nvim", + priority = 1000, + config = function () + require("modus-themes").setup({ + style = "modus_vivendi", + sign_column_background = false, + line_nr_column_background = false, + }) + vim.cmd.colorscheme("modus") + end +} + diff --git a/.config/nvim/lua/plugins/orgmode.lua b/.config/nvim/lua/plugins/orgmode.lua deleted file mode 100644 index f35d7b4..0000000 --- a/.config/nvim/lua/plugins/orgmode.lua +++ /dev/null @@ -1,31 +0,0 @@ -return { - 'nvim-orgmode/orgmode', - event = 'VeryLazy', - ft = { 'org' }, - config = function() - -- Setup orgmode - require('orgmode').setup({ - org_agenda_files = '~/orgfiles/**/*', - org_default_notes_file = '~/orgfiles/refile.org', - org_hide_emphasis_markers = true, - }) - - -- Enable line wrapping and line breaking for Org files - vim.api.nvim_create_augroup("OrgMode", { clear = true }) - vim.api.nvim_create_autocmd("FileType", { - pattern = "org", - callback = function() - vim.opt_local.wrap = true - vim.opt_local.linebreak = true - vim.opt_local.textwidth = 80 - end, - }) - - -- AUTHORS_NOTE: If you are using nvim-treesitter with ~ensure_installed = "all"~ option - -- add ~org~ to ignore_install - -- require('nvim-treesitter.configs').setup({ - -- ensure_installed = 'all', - -- ignore_install = { 'org' }, - -- }) - end, -} diff --git a/.config/nvim/lua/plugins/markdown.lua b/.config/nvim/lua/plugins/render-markdown.lua index b003495..65408bc 100644 --- a/.config/nvim/lua/plugins/markdown.lua +++ b/.config/nvim/lua/plugins/render-markdown.lua @@ -1,6 +1,6 @@ return { 'MeanderingProgrammer/render-markdown.nvim', - dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' }, + dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' }, -- if you prefer nvim-web-devicons ---@module 'render-markdown' ---@type render.md.UserConfig opts = {}, diff --git a/.config/nvim/lua/plugins/statuscol.lua b/.config/nvim/lua/plugins/statuscol.lua deleted file mode 100644 index 15ccef9..0000000 --- a/.config/nvim/lua/plugins/statuscol.lua +++ /dev/null @@ -1,6 +0,0 @@ -return { - "luukvbaal/statuscol.nvim", - config = function() - require("statuscol").setup({relculright = true}) - end, -} diff --git a/.config/nvim/lua/plugins/telescope.lua b/.config/nvim/lua/plugins/telescope.lua index f942dc8..e761994 100644 --- a/.config/nvim/lua/plugins/telescope.lua +++ b/.config/nvim/lua/plugins/telescope.lua @@ -2,13 +2,16 @@ return { "nvim-telescope/telescope.nvim", dependencies = { "nvim-lua/plenary.nvim" }, config = function() - require("telescope").setup({}) + require("telescope").setup({ + defaults = { + borderchars = { "─", "│", "─", "│", "┌", "┐", "┘", "└" }, + }, + }) local tscope = require('telescope.builtin') vim.keymap.set("n", "<leader>ff", function() local cwd if vim.bo.filetype == "oil" then - -- For Oil buffers cwd = require("oil").get_current_dir() else cwd = vim.fn.expand("%:p:h") @@ -25,11 +28,6 @@ return { { desc = "Find Buffer" }) vim.keymap.set('n', '<leader>fh', tscope.help_tags, { desc = "Find Help" }) - -- vim.keymap.set('n', '<leader>fg', function() - -- tscope.grep_string( - -- { search = vim.fn.input("Grep > "), - -- desc = "Find by Grep" }); - -- end) vim.keymap.set('n', '<leader>fg', tscope.live_grep, { desc = "Find by Grep" }) vim.keymap.set('n', '<leader>fr', tscope.oldfiles, diff --git a/.config/nvim/lua/plugins/theme.lua b/.config/nvim/lua/plugins/theme.lua deleted file mode 100644 index 995c3dc..0000000 --- a/.config/nvim/lua/plugins/theme.lua +++ /dev/null @@ -1,29 +0,0 @@ --- return { --- "rose-pine/neovim", --- as = "rose-pine", --- config = function() --- require("rose-pine").setup({ --- variant = "main", --- palette = { --- main = { --- base = "#000000", --- surface = "#000000", --- } --- } --- }) --- vim.opt.termguicolors = true --- vim.cmd.colorscheme("rose-pine") --- end, --- } - -return { - "catppuccin/nvim", - priority = 1000, - config = function () - require("catppuccin").setup({ - flavour = "mocha" - }) - vim.cmd.colorscheme("catppuccin") - end, - opts = {} -} diff --git a/.config/nvim/lua/plugins/todo-comments.lua b/.config/nvim/lua/plugins/todo-comments.lua index 64f12b7..69f907e 100644 --- a/.config/nvim/lua/plugins/todo-comments.lua +++ b/.config/nvim/lua/plugins/todo-comments.lua @@ -2,6 +2,13 @@ return { "folke/todo-comments.nvim", dependencies = { "nvim-lua/plenary.nvim" }, opts = { - } + + }, + config = function() + require('todo-comments').setup({}) + vim.keymap.set('n', '<leader>ft', function() + vim.cmd('TodoTelescope') + end, + { desc = "Find Buffer" }) + end, } --- TODO: Add a bind to :TodoTelescope at '<leader>ft' diff --git a/.config/nvim/lua/plugins/treesitter.lua b/.config/nvim/lua/plugins/treesitter.lua deleted file mode 100644 index 88b699b..0000000 --- a/.config/nvim/lua/plugins/treesitter.lua +++ /dev/null @@ -1,53 +0,0 @@ --- return { --- "nvim-treesitter/nvim-treesitter", --- config = function() --- require("nvim-treesitter.configs").setup({ --- ensure_installed = {"c", "vimdoc", "markdown", "jsonc", "lua"}, --- sync_install = false, --- highlight = { enable = true }, --- indent = { enable = true }, --- }) --- end, --- } - -return { - "nvim-treesitter/nvim-treesitter", - opts = { - highlight = { enable = true }, - indent = { enable = true }, - ensure_installed = { - "bash", - "c", - "dart", - "diff", - "go", - "html", - "javascript", - "jsdoc", - "json", - "jsonc", - "lua", - "luadoc", - "luap", - "make", - "markdown", - "markdown_inline", - "printf", - "python", - "query", - "regex", - "rust", - "toml", - "tsx", - "typescript", - "vim", - "vimdoc", - "xml", - "yaml", - }, - }, - ---@param opts TSConfig - config = function(_, opts) - require("nvim-treesitter.configs").setup(opts) - end, -} diff --git a/.config/nvim/lua/plugins/which-key.lua b/.config/nvim/lua/plugins/which-key.lua deleted file mode 100644 index 746b399..0000000 --- a/.config/nvim/lua/plugins/which-key.lua +++ /dev/null @@ -1,17 +0,0 @@ -return { - "folke/which-key.nvim", - event = "VeryLazy", - opts = { - icons = { mappings = false }, - delay = 1000 - }, - keys = { - { - "<leader>?", - function() - require("which-key").show({ global = false }) - end, - desc = "Buffer Local Keymaps", - }, - }, -} diff --git a/.config/nvim/lua/plugins/zen.lua b/.config/nvim/lua/plugins/zen.lua deleted file mode 100644 index 004aa8c..0000000 --- a/.config/nvim/lua/plugins/zen.lua +++ /dev/null @@ -1,24 +0,0 @@ -return { - "Pocco81/true-zen.nvim", - config = function() - require('true-zen').setup({ - modes = { - ataraxis = { - padding = { - left = 100, - right = 100, - } - }, - minimalist = { - options = { - -- Some weird bug fix :/ - cmdheight = 1 - } - } - } - }) - - vim.keymap.set('n', '<leader>z', require('true-zen.ataraxis').toggle, - { desc = "Toggle Zen Mode" }) - end, -} diff --git a/.config/rofi/config.rasi b/.config/rofi/config.rasi new file mode 100644 index 0000000..c80fd01 --- /dev/null +++ b/.config/rofi/config.rasi @@ -0,0 +1,10 @@ +configuration { + display-drun: "Applications:"; + display-windows: "Windows:"; + drun-display-format: "{icon} {name}"; + font: "Google Sans 12"; + modi: "window,run,drun"; + show-icons: false; +} + +@theme "/home/venomade/.config/rofi/theme.rasi" diff --git a/.config/rofi/theme.rasi b/.config/rofi/theme.rasi new file mode 100644 index 0000000..6cac4e6 --- /dev/null +++ b/.config/rofi/theme.rasi @@ -0,0 +1,111 @@ +* { + font: "Google Sans 11"; + + bg0 : #000000; + bg1 : #000000; + bg2 : #ffffff; + bg3 : #ffffff; + fg0 : #ffffff; + fg1 : #a9b1d6; + fg2 : #737aa2; + red : #f7768e; + green : #9ece6a; + yellow : #e0af68; + blue : #7aa2f7; + magenta : #9a7ecc; + cyan : #4abaaf; + purple : #b6a2e9; + + accent: @purple; + urgent: @yellow; + + background-color : transparent; + text-color : @fg0; + + margin : 0; + padding : 0; + spacing : 0; +} + +element-icon, element-text, scrollbar { + cursor: pointer; +} + +window { + width : 280px; + background-color: @bg1; + border: 1px; + border-color: @bg3; + border-radius: 0px; +} + +inputbar { + spacing : 8px; + padding : 4px 8px; + + background-color: @bg0; +} + +icon-search, entry, element-icon, element-text { + vertical-align: 0.5; +} + +icon-search { + expand : false; + filename : "search-symbolic"; + size : 14px; +} + +textbox { + padding : 4px 8px; + background-color : @bg2; +} + +listview { + padding : 4px 0px; + lines : 12; + columns : 1; + scrollbar : false; + fixed-height : false; + dynamic : true; +} + +element { + padding : 4px 8px; + spacing : 8px; +} + +element normal urgent { + text-color: @urgent; +} + +element normal active { + text-color: @accent; +} + +element alternate active { + text-color: @accent; +} + +element selected { + text-color : @bg1; + background-color : @accent; +} + +element selected urgent { + background-color: @urgent; +} + +element-icon { + size: 0.8em; +} + +element-text { + text-color: inherit; +} + +scrollbar { + handle-width : 4px; + handle-color : @fg2; + padding : 0 4px; +} diff --git a/.config/shell/alias b/.config/shell/alias index 29a7333..627e915 100644 --- a/.config/shell/alias +++ b/.config/shell/alias @@ -1,6 +1,9 @@ -alias gvc="ssh git@git.venomade.com" alias rgf='rg --files | rg' -alias ls='ls --color=auto' +alias ls='eza --icons=auto' alias md='mkdir' alias ec='emacsclient -nw' -alias cat='bat -p' +alias cat='bat -pp' +alias man='batman' +alias diff='batdiff' +alias fzf="fzf --preview 'bat --style=numbers --color=always {}'" +alias tlbx="toolbox enter" diff --git a/.config/shell/functions b/.config/shell/functions new file mode 100644 index 0000000..a300316 --- /dev/null +++ b/.config/shell/functions @@ -0,0 +1,16 @@ +gvc() { + if [[ $1 == "clone" ]]; then + shift + git clone git@git.venomade.com:"$@" + else + ssh git@git.venomade.com "$@" + fi +} + +function y() { + local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd + command yazi "$@" --cwd-file="$tmp" + IFS= read -r -d '' cwd < "$tmp" + [ "$cwd" != "$PWD" ] && [ -d "$cwd" ] && builtin cd -- "$cwd" + rm -f -- "$tmp" +} diff --git a/.config/shell/vars b/.config/shell/vars index a68dea2..2f9c223 100644 --- a/.config/shell/vars +++ b/.config/shell/vars @@ -1,12 +1 @@ -export GOPATH="$HOME/.go" - -export PATH="$PATH:$GOPATH/bin" -export PATH="$PATH:$HOME/.local/bin" -export PATH="$PATH:$HOME/.config/emacs/bin" - -export EDITOR=emacs - -# export LDFLAGS="-L/opt/homebrew/opt/llvm/lib" -# export CPPFLAGS="-I/opt/homebrew/opt/llvm/include" - -# export CMAKE_PREFIX_PATH="/opt/homebrew/opt/llvm" +export EDITOR=nvim diff --git a/.config/sway/config b/.config/sway/config new file mode 100644 index 0000000..6747a42 --- /dev/null +++ b/.config/sway/config @@ -0,0 +1,278 @@ +# Venomade's Sway Config + +# Logo key. Use Mod1 for Alt. +set $mod Mod4 +# Home row direction keys, like vim but colemak +set $left h +set $down n +set $up e +set $right i +# Your preferred terminal emulator +set $term foot +# Your preferred application launcher +set $rofi_run rofi -show run +set $rofi_drun rofi -show drun -show-icons +# This is a little hacky but I don't know if +# any other way is possible on wayland. +set $rofi_cliphist cliphist list \ + | rofi -dmenu -p "" \ + | cliphist decode \ + | wl-copy \ + && wtype -M ctrl -M shift -k v -m shift -m ctrl + +# Set the Music Player to Control +set $player jellyfin-tui + +# Applications +set $web_browser brave-browser +set $file_manager foot -a=floating_foot yazi +set $music_player foot jellyfin-tui + +# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/) +output * bg /home/venomade/Pictures/Papes/PurplePhoneLines.jpg fill + +# Set Monitor Resolution and Scale +output eDP-1 resolution 2560x1600 position 0,0 scale 1.66 + +# Input Configuration +input * { + xkb_layout us + xkb_variant colemak + # xkb_options caps:ctrl_modifier + xkb_options caps:escape + + # tap enabled + natural_scroll enabled +} + +### Key bindings +# +# Basics: +# + # Start a terminal + bindsym $mod+Return exec $term + + # Kill focused window + bindsym $mod+q kill + + # Applications + bindsym $mod+w exec $web_browser + bindsym $mod+y exec $file_manager + bindsym $mod+m exec $music_player + + # Start your launcher + bindsym $mod+d exec $rofi_drun + bindsym $mod+Shift+d exec $rofi_run + + bindsym $mod+v exec $rofi_cliphist + + bindsym $mod+Shift+t exec ~/.local/bin/rofi-translate + + bindsym $mod+Shift+w exec ~/.local/bin/rofi-wifimenu + + bindsym $mod+Shift+s exec ~/.local/bin/take-slurpshot + bindsym $mod+s exec sh -c 'grim /tmp/grimshot.png && imv -f /tmp/grimshot.png && rm /tmp/grimshot.png' + + bindsym $mod+Shift+return exec ~/.local/bin/rofi-notes + bindsym $mod+Ctrl+Shift+return exec ~/.local/bin/rofi-notes --delete + + # Drag floating windows by holding down $mod and left mouse button. + # Resize them with right mouse button + $mod. + # Despite the name, also works for non-floating windows. + # Change normal to inverse to use left mouse button for resizing and right + # mouse button for dragging. + floating_modifier $mod normal + + # Reload the configuration file + bindsym $mod+Shift+r reload + + # Exit sway (logs you out of your Wayland session) + # bindsym $mod+Shift+x exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit' + bindsym $mod+Shift+x exec ~/.local/bin/rofi-powermenu + + # Lock Screen + bindsym $mod+l exec ~/.local/bin/lock-screen + bindsym $mod+Shift+l exec ~/.local/bin/lock-screen 0 +# +# Moving around: +# + # Move your focus around + bindsym $mod+$left focus left + bindsym $mod+$down focus down + bindsym $mod+$up focus up + bindsym $mod+$right focus right + # Or use $mod+[up|down|left|right] + bindsym $mod+Left focus left + bindsym $mod+Down focus down + bindsym $mod+Up focus up + bindsym $mod+Right focus right + + # Move the focused window with the same, but add Shift + bindsym $mod+Shift+$left move left + bindsym $mod+Shift+$down move down + bindsym $mod+Shift+$up move up + bindsym $mod+Shift+$right move right + # Ditto, with arrow keys + bindsym $mod+Shift+Left move left + bindsym $mod+Shift+Down move down + bindsym $mod+Shift+Up move up + bindsym $mod+Shift+Right move right +# +# Workspaces: +# + # Switch to workspace + bindsym $mod+1 workspace number 1 + bindsym $mod+2 workspace number 2 + bindsym $mod+3 workspace number 3 + bindsym $mod+4 workspace number 4 + bindsym $mod+5 workspace number 5 + bindsym $mod+6 workspace number 6 + bindsym $mod+7 workspace number 7 + bindsym $mod+8 workspace number 8 + bindsym $mod+9 workspace number 9 + bindsym $mod+0 workspace number 10 + # Move focused container to workspace + bindsym $mod+Shift+1 move container to workspace number 1 + bindsym $mod+Shift+2 move container to workspace number 2 + bindsym $mod+Shift+3 move container to workspace number 3 + bindsym $mod+Shift+4 move container to workspace number 4 + bindsym $mod+Shift+5 move container to workspace number 5 + bindsym $mod+Shift+6 move container to workspace number 6 + bindsym $mod+Shift+7 move container to workspace number 7 + bindsym $mod+Shift+8 move container to workspace number 8 + bindsym $mod+Shift+9 move container to workspace number 9 + bindsym $mod+Shift+0 move container to workspace number 10 + # Note: workspaces can have any name you want, not just numbers. + # We just use 1-10 as the default. +# Gestures +bindgesture swipe:right workspace prev +bindgesture swipe:left workspace next +# +# Layout stuff: +# + # You can "split" the current object of your focus with + # $mod+b or $mod+v, for horizontal and vertical splits + # respectively. + # bindsym $mod+Shift+b splith + # bindsym $mod+Shift+v splitv + + # Switch the current container between different layout styles + # bindsym $mod+s layout stacking + # bindsym $mod+w layout tabbed + # bindsym $mod+f layout toggle split + + # Make the current focus fullscreen + bindsym $mod+Shift+f fullscreen + + # Toggle the current focus between tiling and floating mode + bindsym $mod+Shift+space floating toggle + + # Swap focus between the tiling area and the floating area + bindsym $mod+space focus mode_toggle + + # Move focus to the parent container + bindsym $mod+a focus parent +# +# Scratchpad: +# + # Sway has a "scratchpad", which is a bag of holding for windows. + # You can send windows there and get them back later. + + # Move the currently focused window to the scratchpad + bindsym $mod+Shift+minus move scratchpad + + # Show the next scratchpad window or hide the focused scratchpad window. + # If there are multiple scratchpad windows, this command cycles through them. + bindsym $mod+minus scratchpad show +# +# Resizing containers: +# +mode "resize" { + # left will shrink the containers width + # right will grow the containers width + # up will shrink the containers height + # down will grow the containers height + bindsym $left resize shrink width 10px + bindsym $down resize grow height 10px + bindsym $up resize shrink height 10px + bindsym $right resize grow width 10px + + # Ditto, with arrow keys + bindsym Left resize shrink width 10px + bindsym Down resize grow height 10px + bindsym Up resize shrink height 10px + bindsym Right resize grow width 10px + + # Return to default mode + bindsym Return mode "default" + bindsym Escape mode "default" +} +bindsym $mod+r mode "resize" +# +# Utilities: +# + # Special keys to adjust volume via PulseAudio + bindsym --locked XF86AudioMute exec pactl set-sink-mute \@DEFAULT_SINK@ toggle + bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume \@DEFAULT_SINK@ -5% + bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume \@DEFAULT_SINK@ +5% + bindsym --locked XF86AudioMicMute exec pactl set-source-mute \@DEFAULT_SOURCE@ toggle + # Special keys to affect playing audio via PlayerCTL + bindsym --locked XF86AudioPlay exec playerctl -p $player play-pause + bindsym --locked XF86AudioNext exec playerctl -p $player next + bindsym --locked XF86AudioPrev exec playerctl -p $player previous + # Special keys to adjust brightness via brightnessctl + bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%- + bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+ + bindsym --locked XF86KbdBrightnessDown exec brightnessctl --device='kbd_backlight' set 10%- + bindsym --locked XF86KbdBrightnessUp exec brightnessctl --device='kbd_backlight' set 10%+ + + # Special key to take a screenshot with grim + bindsym Print exec grim + +# Disable Titlebars +gaps inner 4 +default_border pixel 2 +default_floating_border pixel 2 +titlebar_padding 1 +titlebar_border_thickness 0 + +# Floating Terminal +for_window [app_id = "floating_foot"] floating enable + +# Set Font +font pango:Google Sans Code 12 +# +# Status Bar: +# +# Read `man 5 sway-bar` for more information about this section. +bar { + status_command cd ~/.config/luastatus && exec luastatus-i3-wrapper -B no_separators\ + playerctl.lua \ + separator.lua \ + wireless.lua \ + separator.lua \ + alsa.lua \ + separator.lua \ + battery.lua \ + separator.lua \ + time-date.lua + + position top + + colors { + statusline #ffffff + background #000000 + inactive_workspace #00000000 #00000000 #000000ff + focused_workspace #00000000 #000000ff #ffffffaa + } +} + +# class border bground text indicator child_border +client.focused #000000 #000000 #F8F8F2 #000000 #000000 +client.focused_inactive #000000 #000000 #F8F8F2 #000000 #000000 +client.unfocused #000000 #000000 #F8F8F2 #000000 #000000 +client.urgent #000000 #000000 #F8F8F2 #000000 #000000 +client.placeholder #000000 #000000 #F8F8F2 #000000 #000000 +client.background #000000 #000000 #FFFFFF #000000 #000000 + +include /etc/sway/config.d/* diff --git a/.config/swaylock/config b/.config/swaylock/config new file mode 100644 index 0000000..9e82dc5 --- /dev/null +++ b/.config/swaylock/config @@ -0,0 +1,39 @@ +font=Google Sans +font-size=28 + +color=#000000 + +layout-bg-color=#00000000 +layout-border-color=#00000000 +layout-text-color=#ffffff + +text-color=#f4f4f4 +text-clear-color=#00c06f +text-caps-lock-color=#d0bc00 +text-ver-color=#9099d9 +text-wrong-color=#ff5f59 + +bs-hl-color=#30303066 +key-hl-color=#9099d9 +caps-lock-bs-hl-color=#30303066 +caps-lock-key-hl-color=#d0bc00 + +separator-color=#00000000 + +inside-color=#9099d955 +inside-clear-color=#00c06f55 +inside-caps-lock-color=#d0bc0055 +inside-ver-color=#9099d955 +inside-wrong-color=#ff5f5955 + +line-color=#9099d911 +line-clear-color=#00c06f11 +line-caps-lock-color=#d0bc0011 +line-ver-color=#9099d911 +line-wrong-color=#ff5f5911 + +ring-color=#9099d9aa +ring-clear-color=#00c06faa +ring-caps-lock-color=#d0bc00aa +ring-ver-color=#9099d9aa +ring-wrong-color=#ff5f59aa diff --git a/.config/systemd/user/.gitignore b/.config/systemd/user/.gitignore new file mode 100644 index 0000000..419e6be --- /dev/null +++ b/.config/systemd/user/.gitignore @@ -0,0 +1 @@ +default.target.wants diff --git a/.config/systemd/user/cliphist.service b/.config/systemd/user/cliphist.service new file mode 100644 index 0000000..91ad51f --- /dev/null +++ b/.config/systemd/user/cliphist.service @@ -0,0 +1,13 @@ +[Unit] +Description=Cliphist clipboard watcher +After=graphical-session.target +PartOf=graphical-session.target + +[Service] +Type=simple +ExecStart=/usr/bin/wl-paste --watch /usr/local/bin/cliphist store +Restart=always +RestartSec=1 + +[Install] +WantedBy=default.target diff --git a/.config/systemd/user/kanata.service b/.config/systemd/user/kanata.service new file mode 100644 index 0000000..771cfed --- /dev/null +++ b/.config/systemd/user/kanata.service @@ -0,0 +1,22 @@ +[Unit] +Description=Kanata keyboard remapper +Documentation=https://github.com/jtroo/kanata + +[Service] +Environment=PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/bin +# Uncomment the 4 lines beneath this to increase process priority +# of Kanata in case you encounter lagginess when resource constrained. +# WARNING: doing so will require the service to run as an elevated user such as root. +# Implementing least privilege access is an exercise left to the reader. +# +# CPUSchedulingPolicy=rr +# CPUSchedulingPriority=99 +# IOSchedulingClass=realtime +# Nice=-20 +Type=simple +ExecStart=/usr/local/bin/kanata --cfg /home/venomade/.config/kanata/config.kbd +Restart=on-failure +RestartSec=3 + +[Install] +WantedBy=default.target diff --git a/.config/xkb/symbols/us_colemak_pt_mac b/.config/xkb/symbols/us_colemak_pt_mac deleted file mode 100644 index db2394f..0000000 --- a/.config/xkb/symbols/us_colemak_pt_mac +++ /dev/null @@ -1,13 +0,0 @@ -default partial alphanumeric_keys -xkb_symbols "basic" { - - include "us(colemak)" - - key <AC06> { [ h, H, dead_circumflex, dead_circumflex ] }; - key <AC07> { [ n, N, dead_tilde, dead_tilde ] }; - key <AC08> { [ e, E, dead_acute, dead_acute ] }; - key <AC09> { [ i, I, dead_grave, dead_grave ] }; - key <AD08> { [ u, U, dead_diaeresis, dead_diaeresis ] }; - - name[Group1] = "English (US, Colemak, macOS PT accents)"; -}; diff --git a/.config/yazi/keymap.toml b/.config/yazi/keymap.toml new file mode 100644 index 0000000..27da4fc --- /dev/null +++ b/.config/yazi/keymap.toml @@ -0,0 +1,164 @@ +"$schema" = "https://yazi-rs.github.io/schemas/keymap.json" + +# Manager / File list layer +[[mgr.prepend_keymap]] +on = [ "e" ] +run = "arrow -1" + +[[mgr.prepend_keymap]] +on = [ "n" ] +run = "arrow 1" + +[[mgr.prepend_keymap]] +on = [ "E" ] +run = "arrow -5" + +[[mgr.prepend_keymap]] +on = [ "N" ] +run = "arrow 5" + +[[mgr.prepend_keymap]] +on = [ "h" ] +run = "leave" + +[[mgr.prepend_keymap]] +on = [ "i" ] +run = "enter" + +[[mgr.prepend_keymap]] +on = [ "H" ] +run = "back" + +[[mgr.prepend_keymap]] +on = [ "I" ] +run = "forward" + +[[mgr.prepend_keymap]] +on = [ "<C-e>" ] +run = "seek -5" + +[[mgr.prepend_keymap]] +on = [ "<C-n>" ] +run = "seek 5" + +[[mgr.prepend_keymap]] +on = [ "k" ] +run = "link" + +[[mgr.prepend_keymap]] +on = [ "K" ] +run = "link --relative" + +[[mgr.prepend_keymap]] +on = [ "j" ] +run = "find_arrow" + +[[mgr.prepend_keymap]] +on = [ "J" ] +run = "find_arrow --previous" + + +# Tasks layer +[[tasks.prepend_keymap]] +on = [ "W" ] +run = "close" + +[[tasks.prepend_keymap]] +on = [ "e" ] +run = "arrow -1" + +[[tasks.prepend_keymap]] +on = [ "n" ] +run = "arrow 1" + + +# Select layer (spot/picker remnants) +[[spot.prepend_keymap]] +on = [ "e" ] +run = "arrow -1" + +[[spot.prepend_keymap]] +on = [ "n" ] +run = "arrow 1" + +[[spot.prepend_keymap]] +on = [ "E" ] +run = "arrow -5" + +[[spot.prepend_keymap]] +on = [ "N" ] +run = "arrow 5" + + +# Input layer +[[input.prepend_keymap]] +on = [ "l" ] +run = "insert" + +[[input.prepend_keymap]] +on = [ "<C-h>" ] +run = [ "move -999", "insert" ] + +[[input.prepend_keymap]] +on = [ "<C-i>" ] +run = [ "move 999", "insert --append" ] + +[[input.prepend_keymap]] +on = [ "h" ] +run = "move -1" + +[[input.prepend_keymap]] +on = [ "i" ] +run = "move 1" + +[[input.prepend_keymap]] +on = [ "=" ] +run = "forward --end-of-word" + +[[input.prepend_keymap]] +on = [ "H" ] +run = "move -999" + +[[input.prepend_keymap]] +on = [ "I" ] +run = "move 999" + +[[input.prepend_keymap]] +on = [ "x" ] +run = [ "delete", "move 1 --in-operating" ] + +[[input.prepend_keymap]] +on = [ "u" ] +run = "undo" + +[[input.prepend_keymap]] +on = [ "U" ] +run = "redo" + + +# Completion layer +[[cmp.prepend_keymap]] +on = [ "<C-e>" ] +run = "arrow -1" + +[[cmp.prepend_keymap]] +on = [ "<C-n>" ] +run = "arrow 1" + + +# Help layer +[[help.prepend_keymap]] +on = [ "e" ] +run = "arrow -1" + +[[help.prepend_keymap]] +on = [ "n" ] +run = "arrow 1" + +[[help.prepend_keymap]] +on = [ "E" ] +run = "arrow -5" + +[[help.prepend_keymap]] +on = [ "N" ] +run = "arrow 5" diff --git a/.config/yazi/modus_vivendi.tmTheme b/.config/yazi/modus_vivendi.tmTheme new file mode 100644 index 0000000..15d2429 --- /dev/null +++ b/.config/yazi/modus_vivendi.tmTheme @@ -0,0 +1,439 @@ +<!-- Modus Themes for Bat --> +<!-- Auto generated with https://github.com/miikanissi/modus-themes.nvim/blob/master/lua/modus-themes/extras/bat.lua --> + +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> + <dict> + <key>name</key> + <string>modus_vivendi</string> + <key>settings</key> + <array> + <dict> + <key>settings</key> + <dict> + <key>background</key> + <string>#000000</string> + <key>caret</key> + <string>#989898</string> + <key>foreground</key> + <string>#ffffff</string> + <key>invisibles</key> + <string>#989898</string> + <key>lineHighlight</key> + <string>#2f3849</string> + <key>selection</key> + <string>#7030af</string> + <key>findHighlight</key> + <string>#7a6100</string> + <key>selectionBorder</key> + <string>#646464</string> + <key>gutterForeground</key> + <string>#989898</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Comment</string> + <key>scope</key> + <string>comment</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#989898</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>String</string> + <key>scope</key> + <string>string</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#79a8ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Number</string> + <key>scope</key> + <string>constant.numeric</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#82b0ec</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Built-in constant</string> + <key>scope</key> + <string>constant.language</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#6ae4b9</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>User-defined constant</string> + <key>scope</key> + <string>constant.character, constant.other</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Variable</string> + <key>scope</key> + <string>variable</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>#00d3d0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Ruby's @variable</string> + <key>scope</key> + <string>variable.other.readwrite.instance</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#00d3d0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>String interpolation</string> + <key>scope</key> + <string>constant.character.escaped, constant.character.escape, string source, string source.ruby</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#d2b580</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Keyword</string> + <key>scope</key> + <string>keyword</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#b6a0ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Storage</string> + <key>scope</key> + <string>storage</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#b6a0ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Storage type</string> + <key>scope</key> + <string>storage.type</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#b6a0ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Class name</string> + <key>scope</key> + <string>entity.name.class</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#b6a0ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Inherited class</string> + <key>scope</key> + <string>entity.other.inherited-class</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#b6a0ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Function name</string> + <key>scope</key> + <string>entity.name.function</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#feacd0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Function argument</string> + <key>scope</key> + <string>variable.parameter</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#00d3d0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Tag name</string> + <key>scope</key> + <string>entity.name.tag</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#00d3d0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Tag attribute</string> + <key>scope</key> + <string>entity.other.attribute-name</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#00d3d0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Library function</string> + <key>scope</key> + <string>support.function</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#feacd0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Library constant</string> + <key>scope</key> + <string>support.constant</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#6ae4b9</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Library class/type</string> + <key>scope</key> + <string>support.type, support.class</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#6ae4b9</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Library variable</string> + <key>scope</key> + <string>support.other.variable</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#00d3d0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Invalid</string> + <key>scope</key> + <string>invalid</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#989898</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Invalid deprecated</string> + <key>scope</key> + <string>invalid.deprecated</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#989898</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON String</string> + <key>scope</key> + <string>meta.structure.dictionary.json string.quoted.double.json</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#79a8ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>diff.header</string> + <key>scope</key> + <string>meta.diff, meta.diff.header</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#feacd0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>diff.deleted</string> + <key>scope</key> + <string>markup.deleted</string> + <key>settings</key> + <dict> + <key>background</key> + <string>#4f1119</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>diff.inserted</string> + <key>scope</key> + <string>markup.inserted</string> + <key>settings</key> + <dict> + <key>background</key> + <string>#00381f</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>diff.changed</string> + <key>scope</key> + <string>markup.changed</string> + <key>settings</key> + <dict> + <key>background</key> + <string>#363300</string> + </dict> + </dict> + <dict> + <key>scope</key> + <string>constant.numeric.line-number.find-in-files - match</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#82b0ec</string> + </dict> + </dict> + <dict> + <key>scope</key> + <string>entity.name.filename</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#2fafff</string> + </dict> + </dict> + <dict> + <key>scope</key> + <string>message.error</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>bold</string> + <key>foreground</key> + <string>#ff7f9f</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON Punctuation</string> + <key>scope</key> + <string>punctuation.definition.string.begin.json - meta.structure.dictionary.value.json, punctuation.definition.string.end.json - meta.structure.dictionary.value.json</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON Structure</string> + <key>scope</key> + <string>meta.structure.dictionary.json string.quoted.double.json</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#79a8ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON String</string> + <key>scope</key> + <string>meta.structure.dictionary.value.json string.quoted.double.json</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#79a8ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Escape Characters</string> + <key>scope</key> + <string>constant.character.escape</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#d2b580</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Regular Expressions</string> + <key>scope</key> + <string>string.regexp</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#00c06f</string> + </dict> + </dict> + </array> + <key>uuid</key> + <string>09CE9B40-0137-442C-8512-7CEAFC78C153</string> + <key>colorSpaceName</key> + <string>sRGB</string> + <key>semanticClass</key> + <string>Modus Vivendi</string> + </dict> +</plist> diff --git a/.config/yazi/theme.toml b/.config/yazi/theme.toml new file mode 100644 index 0000000..7e83248 --- /dev/null +++ b/.config/yazi/theme.toml @@ -0,0 +1,135 @@ +# Modus Themes for Yazi +# Auto generated with https://github.com/miikanissi/modus-themes.nvim/blob/master/lua/modus-themes/extras/yazi.lua + +[manager] +# NOTE: can combined with tmTheme (sublime colorshceme file) for preview code highlight +highlight = "~/.config/yazi/modus_vivendi.tmTheme" + +cwd = { fg = "#00d3d0", italic = true } + +# Hovered +hovered = { bg = "#2f3849" } +preview_hovered = { bg = "#2f3849" } + +# Find +find_keyword = { fg = "#ffffff", bg = "#7030af", bold = true } +find_position = { fg = "#79a8ff", bg = "#1e1e1e", bold = true } + +# Marker +marker_copied = { fg = "#70b900", bg = "#70b900" } +marker_cut = { fg = "#ff5f59", bg = "#ff5f59" } +marker_marked = { fg = "#feacd0", bg = "#feacd0" } +marker_selected = { fg = "#2fafff", bg = "#2fafff" } + +# Tab +tab_active = { fg = "#000000", bg = "#2fafff" } +tab_inactive = { fg = "#989898", bg = "#000000" } +tab_width = 1 + +# Count +count_copied = { fg = "#000000", bg = "#70b900" } +count_cut = { fg = "#000000", bg = "#ff6b55" } +count_selected = { fg = "#000000", bg = "#79a8ff" } + +# Border +border_symbol = "│" +border_style = { fg = "#C4C4C4" } + +[status] +separator_open = "" +separator_close = "" +separator_style = { fg = "#0f0f0f", bg = "#0f0f0f" } + +# Mode +mode_normal = { fg = "#000000", bg = "#2fafff", bold = true } +mode_select = { fg = "#000000", bg = "#f78fe7", bold = true } +mode_unset = { fg = "#000000", bg = "#db7b5f", bold = true } + +# Progress +progress_label = { fg = "#989898", bold = true } +progress_normal = { fg = "#000000" } +progress_error = { fg = "#ff5f59" } + +# Permissions +permissions_t = { fg = "#2fafff" } +permissions_r = { fg = "#d0bc00" } +permissions_w = { fg = "#ff5f59" } +permissions_x = { fg = "#44bc44" } +permissions_s = { fg = "#989898" } + +[select] +border = { fg = "#C4C4C4" } +active = { fg = "#ffffff", bg = "#646464" } +inactive = { fg = "#ffffff" } + +# Input +[input] +border = { fg = "#00bcff" } +title = {} +value = { fg = "#f78fe7" } +selected = { bg = "#646464" } + +# Completion +[completion] +border = { fg = "#00bcff" } +active = { fg = "#ffffff", bg = "#646464" } +inactive = { fg = "#ffffff" } + +# Tasks +[tasks] +border = { fg = "#C4C4C4" } +title = {} +hovered = { fg = "#ffffff", bg="#646464" } + +# Which +[which] +cols = 3 +mask = { bg = "#0f0f0f" } +cand = { fg = "#00d3d0" } +rest = { fg = "#2fafff" } +desc = { fg = "#feacd0" } +separator = " " +separator_style = { fg = "#989898" } + +# Notify +[notify] +title_info = { fg = "#00bcff" } +title_warn = { fg = "#d0bc00" } +title_error = { fg = "#ff5f59" } + +# Help +[help] +on = { fg = "#44bc44" } +run = { fg = "#feacd0" } +hovered = { bg = "#646464" } +footer = { fg = "#ffffff", bg = "#0f0f0f" } + +[filetype] + +rules = [ + # Images + { mime = "image/*", fg = "#00d3d0" }, + + # Media + { mime = "{audio,video}/*", fg = "#fec43f" }, + + # Archives + { mime = "application/*zip", fg = "#feacd0" }, + { mime = "application/x-{tar,bzip*,7z-compressed,xz,rar}", fg = "#feacd0" }, + + # Documents + { mime = "application/{pdf,doc,rtf,vnd.*}", fg = "#00d3d0" }, + + # Empty files + # { mime = "inode/x-empty", fg = "#ff5f59" }, + + # Special files + { name = "*", is = "orphan", bg = "#ff5f59" }, + { name = "*", is = "exec" , fg = "#44bc44" }, + + { name = "*.rs", fg = "#db7b5f" }, + + # Fallback + { name = "*/", fg = "#2fafff" } +] + diff --git a/.config/yazi/yazi.toml b/.config/yazi/yazi.toml new file mode 100644 index 0000000..4f05c94 --- /dev/null +++ b/.config/yazi/yazi.toml @@ -0,0 +1,7 @@ +[mgr] +sort_by = "mtime" +sort_reverse = true +show_hidden = true +linemode = "size" +scrolloff = 12 +ratio = [1,2,0] diff --git a/.emacs.d/.gitignore b/.emacs.d/.gitignore deleted file mode 100644 index 44ac41e..0000000 --- a/.emacs.d/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -#* -.cache -auto-save-list -autosaves -backups -eln-cache -elpa -eshell -history -lock -places -projects -recentf \ No newline at end of file diff --git a/.emacs.d/custom.el b/.emacs.d/custom.el deleted file mode 100644 index 1bca6e5..0000000 --- a/.emacs.d/custom.el +++ /dev/null @@ -1,39 +0,0 @@ - -(custom-set-variables - ;; custom-set-variables was added by Custom. - ;; If you edit it by hand, you could mess it up, so be careful. - ;; Your init file should contain only one such instance. - ;; If there is more than one, they won't work right. - '(custom-safe-themes - '("a59d0dbcbdfc57a14bc3fa28cb5a8367bc7ede82d848f517b4979b4a03c09da9" - "3538194fff1b928df280dc08f041518a8d51ac3ff704c5e46d1517f5c4d8a0e0" - default)) - '(package-selected-packages nil) - '(package-vc-selected-packages - '((eglot-booster :url "https://github.com/jdtsmith/eglot-booster.git"))) - '(safe-local-variable-directories '("/Users/venomade/Projects/Learning/C/GeneticsProject/"))) -(custom-set-faces - ;; custom-set-faces was added by Custom. - ;; If you edit it by hand, you could mess it up, so be careful. - ;; Your init file should contain only one such instance. - ;; If there is more than one, they won't work right. - '(org-block ((t (:inherit fixed-pitch)))) - '(org-code ((t (:inherit (shadow fixed-pitch))))) - '(org-document-info-keyword ((t (:inherit (shadow fixed-pitch))))) - '(org-document-title ((t (:inherit default :weight bold :foreground "#cdd6f4" :font "Google Sans" :height 2.0 :underline nil)))) - '(org-indent ((t (:inherit (org-hide fixed-pitch))))) - '(org-level-1 ((t (:inherit default :weight bold :foreground "#cdd6f4" :font "Google Sans" :height 1.75)))) - '(org-level-2 ((t (:inherit default :weight bold :foreground "#cdd6f4" :font "Google Sans" :height 1.5)))) - '(org-level-3 ((t (:inherit default :weight bold :foreground "#cdd6f4" :font "Google Sans" :height 1.25)))) - '(org-level-4 ((t (:inherit default :weight bold :foreground "#cdd6f4" :font "Google Sans" :height 1.1)))) - '(org-level-5 ((t (:inherit default :weight bold :foreground "#cdd6f4" :font "Google Sans")))) - '(org-level-6 ((t (:inherit default :weight bold :foreground "#cdd6f4" :font "Google Sans")))) - '(org-level-7 ((t (:inherit default :weight bold :foreground "#cdd6f4" :font "Google Sans")))) - '(org-level-8 ((t (:inherit default :weight bold :foreground "#cdd6f4" :font "Google Sans")))) - '(org-link ((t (:foreground "royal blue" :underline t)))) - '(org-meta-line ((t (:inherit (font-lock-comment-face fixed-pitch))))) - '(org-property-value ((t (:inherit fixed-pitch)))) - '(org-special-keyword ((t (:inherit (font-lock-comment-face fixed-pitch))))) - '(org-table ((t (:inherit fixed-pitch)))) - '(org-tag ((t (:inherit (shadow fixed-pitch) :weight bold :height 0.8)))) - '(org-verbatim ((t (:inherit (shadow fixed-pitch)))))) diff --git a/.emacs.d/early-init.el b/.emacs.d/early-init.el deleted file mode 100644 index 8ba547e..0000000 --- a/.emacs.d/early-init.el +++ /dev/null @@ -1,9 +0,0 @@ -;; GC Perfomance Tweaks from DOOM Emacs -(setq gc-cons-threshold most-positive-fixnum - gc-cons-percentage 1.0) -(add-hook 'emacs-startup-hook - (lambda () - (setq gc-cons-threshold (* 128 1024 1024) ;; 128MB - gc-cons-percentage 1.0))) - -(setenv "LSP_USE_PLISTS" "true") diff --git a/.emacs.d/init.el b/.emacs.d/init.el deleted file mode 100644 index 25db606..0000000 --- a/.emacs.d/init.el +++ /dev/null @@ -1,915 +0,0 @@ -;;; init.el --- Venomade's Emacs Config -*- lexical-binding: t; -*- - -;;; Commentary: -;;; -;;; This is my Emacs config which I rewrote from the ground up in October 2025. -;;; It is built around these rules: -;;; - Performance as a Focus -;;; - Don't do with a package what should be done without -;;; - Don't replicate functionality of built-in packages -;;; - When using a package, take advantage of most of it's features - -;;; Code: - -;; Package Setup -(require 'package) -(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) -(package-initialize) - -(if (native-comp-available-p) - (setq package-native-compile t)) - -;; Core Functionality -(setq mac-command-modifier nil) ; disable super on mac - -; (add-to-list 'default-frame-alist '(undecorated . t)) ; disable titlebar - -(setq custom-file (expand-file-name "custom.el" user-emacs-directory)) -(when (file-exists-p custom-file) - (load custom-file)) - -(use-package gcmh ; Improved Garbage Collection - :ensure t - :hook (after-init . gcmh-mode) - :config - (setq gcmh-high-cons-threshold (* 128 1024 1024) ; 128MB - gcmh-idle-delay 10 - gcmh-verbose nil)) - -(use-package exec-path-from-shell ; FIXME: Doesn't work with Daemonex - :ensure t - :config - (setq exec-path-from-shell-shell-name "/bin/zsh" - exec-path-from-shell-arguments nil) - (when (memq window-system '(mac ns x)) - (exec-path-from-shell-initialize))) - -(let* ((backup-dir (expand-file-name "backups/" user-emacs-directory)) - (autosave-dir (expand-file-name "autosaves/" user-emacs-directory)) - (lock-dir (expand-file-name "lock/" user-emacs-directory))) - (make-directory backup-dir t) - (make-directory autosave-dir t) - (make-directory lock-dir t) - - (setq backup-directory-alist `((".*" . ,(directory-file-name backup-dir))) - auto-save-file-name-transforms `((".*" ,(directory-file-name autosave-dir) t)) - lock-file-name-transforms `((".*" ,(directory-file-name lock-dir) t)))) - -(add-to-list 'display-buffer-alist - '("\\`\\*\\(Warnings\\|Compile-Log\\)\\*\\'" - (display-buffer-no-window) - (allow-no-window . t))) - -(progn - (setq trash-directory "~/.Trash") - (defun system-move-file-to-trash (file) - "Use \"trash\" to move FILE to the system trash." - (cl-assert (executable-find "trash") nil "'trash' must be installed. Needs \"brew install trash\"") - (call-process "trash" nil 0 nil "-F" file))) - -;; User Interface -(setq frame-resize-pixelwise t - display-line-numbers-width-start t - display-line-numbers-width 4 - display-line-numbers-grow-only t - ring-bell-function 'ignore - ns-confirm-quit t) - -(setq-default truncate-lines t) - -; Replace the $ signs for truncation with spaces -(set-display-table-slot standard-display-table 'truncation 32) - -(tool-bar-mode -1) -(scroll-bar-mode -1) -(menu-bar-mode -1) - -(add-hook 'emacs-startup-hook #'global-display-line-numbers-mode) - -(add-hook 'after-make-frame-functions - (lambda (f) - (select-frame-set-input-focus f))) - -; (use-package kaolin-themes -; :ensure t -; :config -; ; (add-hook 'emacs-startup-hook -; ; (lambda () -; ; (load-theme 'kaolin-dark t))) -; (load-theme 'kaolin-dark t) - -; (defun theme-toggle () -; "Toggle between two Emacs themes." -; (interactive) -; (let ((theme-a 'kaolin-dark) -; (theme-b 'kaolin-light)) -; (cond -; ((member theme-a custom-enabled-themes) -; (disable-theme theme-a) -; (load-theme theme-b t)) -; ((member theme-b custom-enabled-themes) -; (disable-theme theme-b) -; (load-theme theme-a t)) -; (t -; (load-theme theme-a t)))))) - -; TODO: Redo to be less hacky -; (defun set-mode-line-box () -; (set-face-attribute -; 'mode-line-active nil -; :box '(:line-width 1 :color "#B4BEFE" :style nil))) - -; (with-eval-after-load 'spacious-padding -; (add-hook 'spacious-padding-mode-hook #'set-mode-line-box)) - -(use-package catppuccin-theme - :ensure t - :config - (setq catppuccin-flavor 'mocha) - ; (add-hook 'emacs-startup-hook - ; (lambda () - ; (load-theme 'kaolin-dark t))) - (load-theme 'catppuccin t) - ; (set-mode-line-box) - - (defun theme-toggle () - "Toggle between two Emacs themes." - (interactive) - (let ((theme-a 'kaolin-dark) - (theme-b 'kaolin-light)) - (cond - ((eq catppuccin-flavor 'latte) - (disable-theme 'catppuccin) - (setq catppuccin-flavor 'mocha) - (load-theme 'catppuccin t)) - ; (set-mode-line-box)) - ((eq catppuccin-flavor 'mocha) - (disable-theme 'catppuccin) - (setq catppuccin-flavor 'latte) - (load-theme 'catppuccin t)) - ; (set-mode-line-box)) - (t - (load-theme theme-a t)))))) - -(use-package ns-auto-titlebar - :ensure t - :config - (when (eq system-type 'darwin) (ns-auto-titlebar-mode))) - -(use-package hide-mode-line - :ensure t) - -; TEMPORARILY DISABLED WHILE FIGURING OUT STIPPLES -; ------------------------ -;(use-package indent-bars -; :ensure t -; :hook (prog-mode . indent-bars-mode) -; :config -; (setq indent-bars-width-frac 0.15 -; indent-bars-starting-column 0 -; indent-bars-prefer-character t -; indent-bars-color '(font-lock-comment-face :face-bg nil :blend 0.425) -; indent-bars-color-by-depth nil)) -; -;(face-attribute 'default :stipple nil t) - -(use-package olivetti - :ensure t - :after hide-mode-line - :config - (keymap-global-set "C-c z" 'olivetti-mode) - (which-key-add-key-based-replacements "C-c z" "zen-mode") - (setq olivetti-minimum-body-width 100) - - (defun zen-toggle-minor-modes () - "Toggle minor modes with `olivetti-mode`." - (if olivetti-mode - (progn - (hide-mode-line-mode 1) - (display-line-numbers-mode 0)) - (progn - (setq olivetti-body-width 100) ; HACK: Fixes default being set below minimum - (hide-mode-line-mode 0) - (unless (eq major-mode 'fundamental-mode) - (display-line-numbers-mode 1))))) - - (add-hook 'olivetti-mode-hook #'zen-toggle-minor-modes)) - -(let ((no-numbers-modes '(fundamental-mode-hook))) - (dolist (hk no-numbers-modes) - (add-hook hk (lambda () (display-line-numbers-mode 0))))) - -(use-package doom-modeline - :ensure t - :hook (after-init . doom-modeline-mode) - :config - (setq doom-modeline-height 0 ; minimum - doom-modeline-bar-width 0 ; disabled - doom-modeline-project-detection 'project ; use project.el - doom-modeline-buffer-state-icon nil - doom-modeline-highlight-modified-buffer-name nil - doom-modeline-percent-position nil - line-number-mode nil - doom-modeline-buffer-encoding nil - doom-modeline-time-live-icon nil - doom-modeline-time-icon nil - display-time-default-load-average nil - display-time-format "%a %d %b | %R" - helm-ag-show-status-function nil)) ;HACK: Doom Modeline asks for this but I don't use helm - ;(display-battery-mode 1) - ;(display-time-mode 1)) - -(use-package spacious-padding - :ensure t - :hook (after-init . spacious-padding-mode) - :config - (setq spacious-padding-widths - '( :internal-border-width 8 - :header-line-width 4 - :mode-line-width 6 - :custom-button-width 3 - :tab-width 4 - :right-divider-width 30 - :scroll-bar-width 8 - :fringe-width 0)) - (setq spacious-padding-subtle-frame-lines - '( :mode-line-active spacious-padding-line-active - :mode-line-inactive spacious-padding-line-inactive - :header-line-active spacious-padding-line-active - :header-line-inactive spacious-padding-line-inactive))) - -(use-package nerd-icons - :ensure t - :if (display-graphic-p)) - -(use-package nerd-icons-dired - :ensure t - :after nerd-icons - :hook - (dired-mode . nerd-icons-dired-mode)) - -(use-package nerd-icons-ibuffer - :ensure t - :after nerd-icons - :hook (ibuffer-mode . nerd-icons-ibuffer-mode)) - -(use-package rainbow-delimiters - :ensure t - :hook (prog-mode . rainbow-delimiters-mode)) - -(use-package hl-todo - :ensure t - :hook ((org-mode . hl-todo-mode) - (prog-mode . hl-todo-mode)) - :config - (add-to-list 'hl-todo-keyword-faces '("ERROR" . "#8c5353"))) - -(let* ((quit-messages - `(; from Doom 1 - ,(format "I wouldn't leave if I were you. %s is much worse." - (if (featurep 'windows-nt) "DOS" "UNIX")) - "Ya know, next time you come in here I'm gonna toast ya." - "Go ahead and leave. See if I care." - "Are you sure you want to quit this great editor?" - ; from Doom Emacs - "(setq nothing t everything 'permitted)" - "Emacs will remember that." - "Emacs, Emacs never changes." - "Hey! Hey, M-x listen!" - "Wake up, Mr. Stallman. Wake up and smell the ashes." - "You are *not* prepared!" - "Please don't go. The drones need you. They look up to you."))) - (progn - (defun random-quit-message () - "Return a randomly chosen quit message from `quit-messages'." - (nth (random (length quit-messages)) quit-messages)) - - (defun message-confirm-kill-emacs (&rest _) - "Prompt the user with a random message before quitting. -Returns t to allow kill if the user answers yes; nil otherwise." - (let* ((msg (random-quit-message)) - (prompt (format "%s Really quit Emacs? " msg))) - (yes-or-no-p (propertize prompt 'face '(italic default))))) - - (setq confirm-kill-emacs #'message-confirm-kill-emacs))) - -(use-package goggles - :ensure t - :hook ((prog-mode text-mode) . goggles-mode) - :config - (setq-default goggles-pulse t)) - -(add-hook 'emacs-startup-hook #'which-key-mode) - -;; Text Editing -(setq-default indent-tabs-mode nil - tab-width 2 - tab-stop-list (number-sequence 2 100 2) - c-basic-offset 2) - -(keymap-global-set "C-c r" 'replace-regexp) - -(cl-labels - ((vi-open-line-above () - "Open line above the current line." - (interactive) - (unless (bolp) (beginning-of-line)) - (newline) - (forward-line -1) - (indent-according-to-mode)) - (vi-open-line-below () - "Open line below the current line." - (interactive) - (unless (eolp) (end-of-line)) - (newline-and-indent))) - (define-key (current-global-map) (kbd "C-c o") #'vi-open-line-above) - (define-key (current-global-map) (kbd "C-c O") #'vi-open-line-below) - (which-key-add-key-based-replacements "C-c o" "open-line-above") - (which-key-add-key-based-replacements "C-c O" "open-line-below")) - -(use-package move-text - :ensure t - :config - (keymap-global-set "M-p" 'move-text-up) - (keymap-global-set "M-n" 'move-text-down) - (defun indent-region-advice (&rest ignored) - (let ((deactivate deactivate-mark)) - (if (region-active-p) - (indent-region (region-beginning) (region-end)) - (indent-region (line-beginning-position) (line-end-position))) - (setq deactivate-mark deactivate))) - - (advice-add 'move-text-up :after 'indent-region-advice) - (advice-add 'move-text-down :after 'indent-region-advice)) - -(progn - (defun smart-beginning-of-line () - "Move the cursor to the beginning of text on the line." - (interactive) - (let ((initial-point (point))) - (back-to-indentation) - (when (eq initial-point (point)) - (move-beginning-of-line 1)))) - (defun setup-prog-mode-c-a () - (local-set-key (kbd "C-a") 'smart-beginning-of-line)) - (add-hook 'prog-mode-hook 'setup-prog-mode-c-a) - (add-hook 'conf-mode-hook 'setup-prog-mode-c-a)) - -(progn - (defun prog-nuke-trailing-whitespace () - "Removes trailing whitespace at the end of the line." - (when (or (derived-mode-p 'prog-mode) (derived-mode-p 'conf-mode)) - (delete-trailing-whitespace))) - (add-hook 'before-save-hook 'prog-nuke-trailing-whitespace)) - -(use-package smartparens - :ensure t - :hook (prog-mode text-mode markdown-mode) - :config - (require 'smartparens-config) - (sp-use-paredit-bindings)) - -(use-package undo-tree - :ensure t - :init - (global-undo-tree-mode 1) - :config - (setq undo-tree-auto-save-history t - undo-tree-history-directory-alist '(("." . "~/.emacs.d/.cache")))) - -(use-package gptel - :ensure t - :config - (setq - gptel-model 'qwen2.5-coder:7b-instruct-q4_K_M - gptel-backend (gptel-make-ollama "Ollama" - :host "localhost:11434" - :stream t - :models '(qwen2.5-coder:7b-instruct-q4_K_M))) - (keymap-global-set "C-c g" 'gptel-menu) - (which-key-add-key-based-replacements "C-c g" "gptel")) - -(use-package delsel - :hook (after-init . delete-selection-mode)) - -(use-package accent - :ensure t - :bind* (("C-'" . accent-menu)) - :config - (setq accent-diacritics '((a (á ã â à)) ; só para Português - (e (é ê)) - (i (í)) - (o (ó õ ô)) - (u (ú)) - (c (ç)) - (A (Á Ã Â À)) - (E (É Ê)) - (I (Í)) - (O (Ó Õ Ô)) - (U (Ú))))) - -;; Emacsing -(setq scroll-margin 10 ; Doesn't work with smooth-scrolling - scroll-conservatively 100 - scroll-step 1) - -(setopt use-short-answers t) - -(use-package dired - :commands (dired) - :hook - ((dired-mode . dired-hide-details-mode) - (dired-mode . hl-line-mode)) - :config - (setq dired-recursive-copies 'always - dired-recursive-deletes 'always - ; delete-by-moving-to-trash t ; FIXME: Currently Broken, need to find why - dired-dwim-target t - dired-listing-switches "-lah")) - -(use-package dired-subtree - :ensure t - :after dired - :bind - (:map dired-mode-map - ("TAB" . dired-subtree-toggle) - ("<backtab>" . dired-subtree-remove)) - :config - (setq dired-subtree-use-backgrounds nil)) - -(add-hook 'emacs-startup-hook #'save-place-mode) - -(progn - (dolist (spec - '((eshell-prompt-user-face font-lock-keyword-face "Face for the username in the eshell prompt.") - (eshell-prompt-venv-face font-lock-string-face "Face for the virtualenv name in the eshell prompt.") - (eshell-prompt-dir-face dired-directory "Face for the directory path in the eshell prompt.") - (eshell-prompt-git-face magit-tag "Face for the git branch in the eshell prompt.") - (eshell-prompt-git-dirty-face eshell-prompt-git-face "Face for the git dirty status in the eshell prompt.") - (eshell-prompt-symbol-face font-lock-builtin-face "Face for the prompt symbol in the eshell prompt."))) - (cl-destructuring-bind (name inherit doc) spec - (defface name - `((t (:inherit ,inherit))) - doc - :group 'eshell-prompt))) - - (defun eshell-abbreviate-dir (dir) - "Abbreviate directory to show only the first and the last two components." - (let* ((abbrev (abbreviate-file-name dir)) - (components (split-string abbrev "/" t)) - (num-components (length components))) - (if (>= num-components 4) - (concat (car components) "/.../" - (mapconcat #'identity (last components 2) "/")) - abbrev))) - - (defun eshell-prompt-git-branch () - "Return the current git branch or short commit hash, if available." - (when (and (executable-find "git") - (locate-dominating-file default-directory ".git")) - (with-temp-buffer - (let ((ret (call-process "git" nil t nil "symbolic-ref" "--short" "HEAD"))) - (if (zerop ret) - (string-trim (buffer-string)) - (when (zerop (call-process "git" nil t nil "rev-parse" "--short" "HEAD")) - (string-trim (buffer-string)))))))) - - (defun eshell-prompt-git-dirty () - "Return a dirty flag (✗ if dirty, ✓ if clean) for the git repository." - (when (eshell-prompt-git-branch) - (with-temp-buffer - (call-process "git" nil t nil "status" "--porcelain") - (if (> (buffer-size) 0) "✗" "✓")))) - - (defun eshell-prompt () - "Custom eshell prompt." - (let* ((user (propertize (user-login-name) 'face 'eshell-prompt-user-face)) - (venv (when-let ((venv (getenv "VIRTUAL_ENV"))) - (concat (propertize "(" 'face 'eshell-prompt-venv-face) - (propertize (file-name-nondirectory venv) 'face 'eshell-prompt-venv-face) - (propertize ")" 'face 'eshell-prompt-venv-face)))) - (path (propertize (eshell-abbreviate-dir (eshell/pwd)) 'face 'eshell-prompt-dir-face)) - (git-branch (eshell-prompt-git-branch)) - (git-info (when git-branch - (concat " " (propertize "on" 'face 'font-lock-number-face) " " - (propertize git-branch 'face 'eshell-prompt-git-face) - (propertize (eshell-prompt-git-dirty) 'face 'eshell-prompt-git-dirty-face)))) - (prompt (concat user " " (propertize "in" 'face 'font-lock-number-face) " " - (if venv (concat venv " ") "") - path git-info "\n" - (propertize "λ" 'face 'eshell-prompt-symbol-face) " "))) - prompt)) - - (setq eshell-prompt-function 'eshell-prompt - eshell-prompt-regexp "^[^λ\n]*λ ")) - -(use-package disproject - :ensure t - :after project - :bind (:map ctl-x-map - ("p" . disproject-dispatch))) - -(use-package ibuffer-project - :ensure t - :after project - :config - (add-hook - 'ibuffer-hook - (lambda () - (setq ibuffer-filter-groups (ibuffer-project-generate-filter-groups)) - (unless (eq ibuffer-sorting-mode 'project-file-relative) - (ibuffer-do-sort-by-project-file-relative)))) - (keymap-global-set "C-x C-b" 'ibuffer)) - -(progn - (add-hook 'emacs-startup-hook #'recentf-mode) - (keymap-global-set "C-x C-r" 'recentf-open) - (which-key-add-key-based-replacements "C-x C-r" "Recent Files") - (put 'compile-command 'safe-local-variable #'stringp)) - -(use-package savehist - :hook (after-init . savehist-mode)) - -(add-to-list 'Info-directory-list "/Users/venomade/Documents/Info/") - -;; Org Mode -(setq org-src-window-setup 'current-window - org-confirm-babel-evaluate nil - org-hide-emphasis-markers t) - -(font-lock-add-keywords 'org-mode - '(("^ *\\([-]\\) " - (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•")))))) - -; (use-package org-bullets -; :ensure t -; :config -; (setq org-bullets-bullet-list -; '("◉" "○" "◎" "◈" "◆" "▶")) -; (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))) - -(use-package org-superstar - :ensure t - :hook (org-mode . org-superstar-mode) - :custom - (org-superstar-remove-leading-stars nil) - (org-superstar-headline-bullets-list - '("◉" "○" "◎" "◈" "◆" "▶"))) - -(let* ((variable-tuple - (cond ((x-list-fonts "Google Sans") '(:font "Google Sans")) - ((x-family-fonts "Sans Serif") '(:family "Sans Serif")) - (nil (warn "Cannot find a Sans Serif Font. Install Google Sans.")))) - (base-font-color (face-foreground 'default nil 'default)) - (headline `(:inherit default :weight bold :foreground ,base-font-color))) - - (custom-theme-set-faces - 'user - `(org-level-8 ((t (,@headline ,@variable-tuple)))) - `(org-level-7 ((t (,@headline ,@variable-tuple)))) - `(org-level-6 ((t (,@headline ,@variable-tuple)))) - `(org-level-5 ((t (,@headline ,@variable-tuple)))) - `(org-level-4 ((t (,@headline ,@variable-tuple :height 1.1)))) - `(org-level-3 ((t (,@headline ,@variable-tuple :height 1.2)))) - `(org-level-2 ((t (,@headline ,@variable-tuple :height 1.3)))) - `(org-level-1 ((t (,@headline ,@variable-tuple :height 1.4)))) - `(org-document-title ((t (,@headline ,@variable-tuple :height 1.6 :underline nil)))))) - -(add-hook 'org-mode-hook 'variable-pitch-mode) -(add-hook 'org-mode-hook 'visual-line-mode) -(add-hook 'org-mode-hook (lambda () (display-line-numbers-mode -1))) - -(custom-theme-set-faces - 'user - '(org-block ((t (:inherit fixed-pitch)))) - '(org-code ((t (:inherit (shadow fixed-pitch))))) - '(org-document-info-keyword ((t (:inherit (shadow fixed-pitch))))) - '(org-indent ((t (:inherit (org-hide fixed-pitch))))) - '(org-link ((t (:foreground "royal blue" :underline t)))) - '(org-meta-line ((t (:inherit (font-lock-comment-face fixed-pitch))))) - '(org-property-value ((t (:inherit fixed-pitch))) t) - '(org-special-keyword ((t (:inherit (font-lock-comment-face fixed-pitch))))) - '(org-table ((t (:inherit fixed-pitch)))) - '(org-tag ((t (:inherit (shadow fixed-pitch) :weight bold :height 0.8)))) - '(org-verbatim ((t (:inherit (shadow fixed-pitch)))))) - -(require 'org-tempo) - -(use-package pdf-tools - :ensure t - :config - (pdf-tools-install) - (add-hook 'pdf-view-mode-hook (lambda () (display-line-numbers-mode -1)))) - -; Open Org Mode links in current window -(setq org-link-frame-setup - '((file . find-file) - (wl . wl-other-frame) - (vm . vm-visit-folder-other-frame) - (gnus . gnus))) - -(use-package denote - :ensure t - :hook (dired-mode . denote-dired-mode) - :bind - (("C-c n n" . denote) - ("C-c n r" . denote-rename-file) - ("C-c n l f" . denote-link) - ("C-c n b" . denote-backlinks) - ("C-c n g" . denote-grep)) - :config - (setq denote-directory (expand-file-name "~/Documents/Denotes/") - denote-known-keywords '("politics" "history" "united kingdom")) - (denote-rename-buffer-mode 1)) - -(use-package consult-denote - :ensure t - :bind - (("C-c n f" . consult-denote-find) - ("C-c n g" . consult-denote-grep)) - :config - (consult-denote-mode 1)) - -; TODO: Denote Explore https://lucidmanager.org/productivity/denote-explore/ - -(use-package denote-menu - :ensure t - :bind - (("C-c n d" . list-denotes)) - :config - (add-hook 'denote-menu-mode-hook (lambda () (display-line-numbers-mode -1)))) - -(use-package denote-org - :ensure t - :bind - (("C-c n l h" . denote-org-link-to-heading))) - -;; Completion -(use-package orderless - :ensure t - :config - (setq completion-styles '(orderless basic) - completion-category-defaults nil - completion-category-overrides '((file (styles . (partial-completion)))))) - -(use-package yasnippet - :ensure t - :hook (prog-mode . yas-minor-mode) - :bind - (("C-c y n" . yas-new-snippet) - ("C-c y v" . yas-visit-snippet-file) - ("C-c y i" . yas-insert-snippet)) - :config - (yas-reload-all)) - -(use-package yasnippet-snippets - :after yasnippet - :ensure t) - -(use-package cape - :ensure t) - -(defun eglot-capf-with-yasnippet () - (setq-local completion-at-point-functions - (list - (cape-capf-super - #'eglot-completion-at-point - #'yasnippet-capf)))) -(with-eval-after-load 'eglot - (add-hook 'eglot-managed-mode-hook #'eglot-capf-with-yasnippet)) - -(use-package corfu - :ensure t - :hook (after-init . global-corfu-mode) - :bind (:map corfu-map ("<tab>" . corfu-complete) - ("RET" . nil)) - :config - (setq corfu-cycle t - corfu-auto t - corfu-auto-delay 0.2 - corfu-preview-current nil - corfu-quit-at-boundary t - corfu-quit-no-match t - corfu-scroll-margin 5 - corfu-tab-always-indent 'complete - corfu-preview-current nil - corfu-min-width 20 - corfu-popupinfo-delay '(1.25 . 0.5)) - (corfu-popupinfo-mode 1) - (with-eval-after-load 'savehist - (corfu-history-mode 1) - (add-to-list 'savehist-additional-variables 'corfu-history))) - -(use-package nerd-icons-corfu - :ensure t - :after nerd-icons corfu - :config - (add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter)) - -(use-package vertico - :ensure t - :hook (after-init . vertico-mode) - :bind (:map vertico-map - ("DEL" . vertico-directory-delete-char))) - -(use-package consult - :ensure t - :bind (("M-g g" . consult-goto-line) - ("M-g M-g" . consult-goto-line) - ("C-c s" . consult-line)) - - :config - (which-key-add-key-based-replacements "C-c s" "search-lines")) - -(use-package affe - :ensure t - :after consult - :bind (("C-c f f" . affe-find) - ("C-c f g" . affe-grep)) - :init - (which-key-add-key-based-replacements "C-c f" "find-file") - (which-key-add-key-based-replacements "C-c f f" "find-fuzzy") - (which-key-add-key-based-replacements "C-c f g" "find-greppy")) - -(use-package marginalia - :ensure t - :after vertico - :config (marginalia-mode 1)) - -(use-package nerd-icons-completion - :ensure t - :after vertico marginalia - :hook - (marginalia-mode . nerd-icons-completion-marginalia-setup) - (after-init . nerd-icons-completion-mode)) - -;; Version Control -(setq vc-follow-symlinks t) - -(use-package magit - :ensure t - :after nerd-icons - :custom - (magit-format-file-function #'magit-format-file-nerd-icons)) - -(use-package magit-todos - :ensure t - :after magit hl-todo - :config - (add-hook 'magit-log-wash-summary-hook - #'hl-todo-search-and-highlight t) - (add-hook 'magit-revision-wash-message-hook - #'hl-todo-search-and-highlight t) - (magit-todos-mode 1)) - -;; Programming -(use-package eglot - :ensure t - :after cape - :config - (setq eglot-report-progress nil) - (advice-add 'eglot-completion-at-point :around #'cape-wrap-buster) - (add-hook 'c-mode-hook #'eglot-ensure)) - -(use-package eglot-booster - :vc (:url "https://github.com/jdtsmith/eglot-booster.git") - :ensure t - :after eglot - :config - (setq eglot-booster-io-only t) - (eglot-booster-mode)) - -(use-package consult-eglot - :ensure t - :after eglot) - -(progn - (use-package eldoc-box - :ensure t) - - (defun markdown-follow-help-or-link-at-point-advice (orig-fun &rest args) - "Prefer to use the help-echo property as `browse-url' target." - (let* ((event-win (posn-window (event-start last-input-event))) - (help-echo (with-selected-frame (window-frame event-win) - (with-current-buffer (window-buffer event-win) - (get-text-property (point) 'help-echo)))) - (help-is-url (url-type (url-generic-parse-url help-echo)))) - (message "if %s (browse-url %S)" help-is-url help-echo) - (if help-is-url - (browse-url help-echo) - (apply orig-fun args)))) - - (advice-add 'markdown-follow-link-at-point :around #'markdown-follow-help-or-link-at-point-advice)) - -(transient-define-prefix eglot-transient () - "Transient menu for Eglot." - [["Server" - ("c" "Reconnect" eglot-reconnect) - ("q" "Shutdown" eglot-shutdown) - ("I" "Server Info" eglot-show-workspace-configuration)] - ["Navigation" - ("g" "Go to Definition" xref-find-definitions) - ("d" "Describe Thing at Point" eldoc-box-help-at-point) - ("D" "Go to Declaration" eglot-find-declaration) - ("i" "Go to Implementation" eglot-find-implementation) - ("f" "Find References" xref-find-references) - ("t" "Type Definition" eglot-find-typeDefinition) - ("s" "Search Symbols" - (lambda () - (interactive) - (if (eq major-mode 'java-mode) - (call-interactively 'consult-eglot-jdt-symbols) - (call-interactively 'consult-eglot-symbols))))] - ["Code Actions" - ("a" "Code Actions" eglot-code-actions) - ("q" "Quick Fix" eglot-code-action-quickfix) - ("=" "Format Buffer" eglot-format-buffer) - ("o" "Organize Imports" eglot-code-action-organize-imports) - ("r" "Rename Symbol" eglot-rename)] - ["Diagnostics" - ("l" "List Diagnostics" flycheck-list-errors) - ("L" "Project Diagnostics" flymake-show-project-diagnostics)]] - (interactive) - (transient-setup 'eglot-transient)) - -(define-key eglot-mode-map (kbd "C-c l") #'eglot-transient) - -(use-package flycheck - :ensure t - :config - (global-flycheck-mode 1)) - -(use-package flycheck-eglot - :ensure t - :after (flycheck eglot) - :custom (flycheck-eglot-exclusive nil) - :config - (global-flycheck-eglot-mode 1)) - -(setq-default flycheck-disabled-checkers '(c/c++-clang)) - -(progn - (setq compilation-scroll-output t) - (keymap-global-set "C-c m c" 'compile) - (keymap-global-set "C-c m r" 'recompile) - (which-key-add-key-based-replacements "C-c m" "make")) - -(require 'ansi-color) -(defun colorize-compilation-buffer () - (ansi-color-apply-on-region compilation-filter-start (point))) -(add-hook 'compilation-filter-hook 'colorize-compilation-buffer) - -(global-prettify-symbols-mode 1) - -;; Languages - -; (load-file -; (expand-file-name -; "lang/java.el" -; user-emacs-directory)) - -(load-file - (expand-file-name - "lang/lua.el" - user-emacs-directory)) - -; (load-file -; (expand-file-name -; "lang/lisp.el" -; user-emacs-directory)) - -; (load-file -; (expand-file-name -; "lang/clojure.el" -; user-emacs-directory)) - -;; Font -; Putting at the end to test if it fixes this: -; https://github.com/d12frosted/homebrew-emacs-plus/issues/898 - -(let* ((fontconf '((fixed-font . "Google Sans Code") - (variable-font . "Google Sans") - (size . 12))) - (fixed-font (cdr (assoc 'fixed-font fontconf))) - (variable-font (cdr (assoc 'variable-font fontconf))) - (pt-size (cdr (assoc 'size fontconf))) - (height (* pt-size 10)) - (frame-font (concat fixed-font "-" (number-to-string pt-size)))) - ; Fixed-width faces - (dolist (face '(default fixed-pitch)) - (set-face-attribute face nil - :font fixed-font - :height height - :weight 'regular)) - ; Variable-pitch face - (set-face-attribute 'variable-pitch nil - :font variable-font - :height height - :weight 'regular) - - ; Syntax styling - (set-face-attribute 'font-lock-comment-face nil :slant 'italic) - (set-face-attribute 'font-lock-keyword-face nil :slant 'italic) - - ; Frame font - (add-to-list 'default-frame-alist `(font . ,frame-font))) diff --git a/.emacs.d/lang/clojure.el b/.emacs.d/lang/clojure.el deleted file mode 100644 index 804fcc7..0000000 --- a/.emacs.d/lang/clojure.el +++ /dev/null @@ -1,26 +0,0 @@ -(use-package cider - :ensure t) - -(add-hook 'cider-repl-mode-hook (lambda () (display-line-numbers-mode -1))) -(add-hook 'cider-repl-mode-hook #'smartparens-mode) -(add-hook 'clojure-mode #'eglot-ensure t) - -(setq-default cider-eldoc-display-for-symbol-at-point nil) - -(defun mu-cider-disable-eldoc () - "Let LSP handle ElDoc instead of CIDER." - (remove-hook 'eldoc-documentation-functions #'cider-eldoc t)) - -(add-hook 'cider-mode-hook #'mu-cider-disable-eldoc) - -(defun mu-cider-disable-eldoc () - "Let LSP handle ElDoc instead of CIDER." - (remove-hook 'eldoc-documentation-functions #'cider-eldoc t)) - -(add-hook 'cider-mode-hook #'mu-cider-disable-eldoc) - -(defun mu-cider-disable-completion () - "Let LSP handle completion instead of CIDER." - (remove-hook 'completion-at-point-functions #'cider-complete-at-point t)) - -(add-hook 'cider-mode-hook #'mu-cider-disable-completion) diff --git a/.emacs.d/lang/java.el b/.emacs.d/lang/java.el deleted file mode 100644 index 5d41a0c..0000000 --- a/.emacs.d/lang/java.el +++ /dev/null @@ -1,38 +0,0 @@ -;; Emacs Configuration for Java - -; JDT URI fix for JDTLS from https://www.reddit.com/r/emacs/comments/1ibkh2h/comment/m9slw00/ -(with-eval-after-load 'eglot - (add-to-list 'eglot-server-programs - `((java-mode java-ts-mode) . - ("jdtls" - :initializationOptions - (:extendedClientCapabilities (:classFileContentsSupport t)))))) - -(defun jdt-file-name-handler (operation &rest args) - "Support Eclipse jdtls `jdt://' uri scheme." - (let* ((uri (car args)) - (cache-dir "/tmp/.eglot") - (source-file - (expand-file-name - (file-name-concat - cache-dir - (save-match-data - (when (string-match "jdt://contents/\\(.*?\\)/\\(.*\\)\.class\\?" uri) - (format "%s.java" (replace-regexp-in-string "/" "." (match-string 2 uri) t t)))))))) - (unless (file-readable-p source-file) - (let ((content (jsonrpc-request (eglot-current-server) :java/classFileContents (list :uri uri))) - (metadata-file (format "%s.%s.metadata" - (file-name-directory source-file) - (file-name-base source-file)))) - (unless (file-directory-p cache-dir) (make-directory cache-dir t)) - (with-temp-file source-file (insert content)) - (with-temp-file metadata-file (insert uri)))) - source-file)) -(add-to-list 'file-name-handler-alist '("\\`jdt://" . jdt-file-name-handler)) - -(add-hook 'java-mode-hook #'eglot-ensure t) - -(load-file - (expand-file-name - "pkg/consult-jdt.el" - user-emacs-directory)) diff --git a/.emacs.d/lang/lisp.el b/.emacs.d/lang/lisp.el deleted file mode 100644 index b0aebd3..0000000 --- a/.emacs.d/lang/lisp.el +++ /dev/null @@ -1,9 +0,0 @@ -(use-package sly - :ensure t - :config - (setq inferior-lisp-program "ros -L sbcl -Q run" - browse-url-browser-function '(("hyperspec" . eww-browse-url) ("." . browse-url-default-browser))) - (add-hook 'sly-mrepl-mode-hook 'smartparens-mode) - (add-hook 'lisp-mode-hook - (lambda () - (define-key lisp-mode-map (kbd "C-c d") 'sly-documentation)))) diff --git a/.emacs.d/lang/lua.el b/.emacs.d/lang/lua.el deleted file mode 100644 index dfc1b19..0000000 --- a/.emacs.d/lang/lua.el +++ /dev/null @@ -1,11 +0,0 @@ -;; Emacs Configuration for Lua - -(use-package lua-mode - :ensure t - :config - (add-hook 'lua-mode-hook #'eglot-ensure t) - (setq lua-indent-level 2 - lua-documentation-url "https://www.lua.org/manual/5.4/manual.html")) - -; TODO Try fix this only for lua-mode as that is where the bug is -(setq eglot-ignored-server-capabilities '(:documentOnTypeFormattingProvider)) diff --git a/.emacs.d/pkg/consult-jdt.el b/.emacs.d/pkg/consult-jdt.el deleted file mode 100644 index 6959f72..0000000 --- a/.emacs.d/pkg/consult-jdt.el +++ /dev/null @@ -1,105 +0,0 @@ -(require 'consult) -(require 'eglot) -(require 'jsonrpc) -(require 'subr-x) - -(defvar eglot-jdt--symbolkind-map - '((1 . "File") (2 . "Module") (3 . "Namespace") (4 . "Package") - (5 . "Class") (6 . "Method") (7 . "Property") (8 . "Field") - (9 . "Constructor") (10 . "Enum") (11 . "Interface") (12 . "Function") - (13 . "Variable") (14 . "Constant") (15 . "String") (16 . "Number") - (17 . "Boolean") (18 . "Array") (19 . "Object") (20 . "Key") - (21 . "Null") (22 . "EnumMember") (23 . "Struct") (24 . "Event") - (25 . "Operator") (26 . "TypeParameter")) - "Mapping of LSP SymbolKind integers to human-readable names.") - -(defun eglot-jdt--get (obj key) - "Robustly retrieve KEY from LSP OBJ (plist/alist)." - (let* ((kname (substring (symbol-name key) 1)) - (sym-key (intern kname))) - (or (plist-get obj key) - (alist-get key obj) - (alist-get sym-key obj) - (alist-get kname obj)))) - -(defun eglot-jdt--fetch-symbols (&optional query) - "Synchronously fetch workspace symbols for QUERY from Eglot/JDTLS." - (unless (eglot-managed-p) - (user-error "Eglot is not managing this buffer")) - (let* ((server (eglot-current-server)) - (symbols (jsonrpc-request server :workspace/symbol `(:query ,(or query ""))))) - (when (vectorp symbols) - (setq symbols (append symbols nil))) - symbols)) - -;; Helper to pad strings -(defun eglot-jdt--pad-right (str width) - "Pad STR on the right with spaces to WIDTH." - (let ((len (length str))) - (if (< len width) - (concat str (make-string (- width len) ?\s)) - str))) - -;; Main formatting function with faces -(defun eglot-jdt--format-symbols-table (symbols) - "Format SYMBOLS into a table with faces for Consult, showing Kind first." - (let* ((rows (mapcar (lambda (sym) - (let ((kind-num (eglot-jdt--get sym :kind))) - (list (or (alist-get kind-num eglot-jdt--symbolkind-map) - (format "Kind %s" kind-num)) - (eglot-jdt--get sym :name) - (or (eglot-jdt--get sym :containerName) "<no-package>") - (let ((location (eglot-jdt--get sym :location))) - (eglot-jdt--get location :uri))))) - symbols)) - ;; compute max width for each column - (max-kind (apply #'max (mapcar (lambda (r) (length (nth 0 r))) rows))) - (max-name (apply #'max (mapcar (lambda (r) (length (nth 1 r))) rows))) - (max-package (apply #'max (mapcar (lambda (r) (length (nth 2 r))) rows))) - ;; faces - (divider-face 'shadow) ;; low opacity / dim for dividers - (kind-face 'font-lock-function-name-face) - (name-face 'font-lock-variable-name-face) - (package-face 'font-lock-keyword-face)) - ;; create table rows with faces - (mapcar (lambda (r) - (let* ((kind (propertize (eglot-jdt--pad-right (nth 0 r) max-kind) 'face kind-face)) - (name (propertize (eglot-jdt--pad-right (nth 1 r) max-name) 'face name-face)) - (package (propertize (eglot-jdt--pad-right (nth 2 r) max-package) 'face package-face)) - (divider (propertize "|" 'face divider-face))) - (cons (format "%s %s %s %s %s" - kind divider name divider package) - (nth 3 r)))) - rows))) - -(defun eglot-jdt--open-uri (uri) - "Open a URI returned by the language server, handling jdt:// URIs." - (if (and uri (string-prefix-p "jdt://" uri)) - (find-file (expand-file-name uri)) ; your jdt-file-name-handler takes care of this - (find-file (eglot-uri-to-path uri)))) - -(defun eglot-jdt--sort-by-query (symbols query) - "Sort SYMBOLS by how closely their names match QUERY." - (let ((query (or query ""))) - (sort symbols - (lambda (a b) - (< (string-distance (eglot-jdt--get a :name) query) - (string-distance (eglot-jdt--get b :name) query)))))) - -(defun consult-eglot-jdt-symbols (&optional query) - "Consult interface for Java workspace symbols via Eglot/JDTLS. -Sorts results based on closeness to QUERY." - (interactive "sSymbol query (blank for all): ") - (let* ((symbols (eglot-jdt--fetch-symbols query)) - (sorted-symbols (eglot-jdt--sort-by-query symbols query)) - (candidates (eglot-jdt--format-symbols-table sorted-symbols)) - (selection (consult--read - (mapcar #'car candidates) - :prompt "Symbol: " - :sort nil - :require-match t - :category 'symbol))) - (when selection - (let ((uri (cdr (assoc selection candidates)))) - (when uri - (eglot-jdt--open-uri uri)))))) diff --git a/.emacs.d/pkg/flymake-cppcheck.el b/.emacs.d/pkg/flymake-cppcheck.el deleted file mode 100644 index 92a78de..0000000 --- a/.emacs.d/pkg/flymake-cppcheck.el +++ /dev/null @@ -1,84 +0,0 @@ -;;; flymake-cppcheck.el --- Flymake work with Cppcheck for C/C++ - -;; Copyright 2014 Akiha Senda - -;; Author: Akiha Senda <senda.akiha@gmail.com> -;; URL: https://github.com/senda-akiha/flymake-cppcheck/ -;; Created: 13 January 2014 -;; Version: 1.0.0 -;; Keywords: flymake, cppcheck, C, C++ -;; Package-Requires: ((flymake-easy "0.9")) - -;; This file is not part of GNU Emacs. -;; However, it is distributed under the same license. - -;; GNU Emacs is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 3, or (at your option) -;; any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Commentary: - -;; Please check the GitHub -;; (https://github.com/senda-akiha/flymake-cppcheck/) -;; for more information. - -;;; Code: - -(require 'flymake-easy) - -(defconst flymake-cppcheck-err-line-patterns - '(("\\(.*\\)::\\([[:digit:]]+\\)::\\(.*\\)\r?\n" - 1 2 nil 3))) - -(defconst flymake-cppcheck-template "{file}::{line}::{message}" - "Output format template.") - -(defcustom flymake-cppcheck-enable "error" - "By default only error messages are shown. -Through the --enable command more checks can be enabled." - :type 'string - :group 'flymake-cppcheck) - -(defcustom flymake-cppcheck-command (or (executable-find "cppcheck") "") - "The name of the cppcheck executable." - :type 'string - :group 'flymake-cppcheck) - -(defcustom flymake-cppcheck-location 'inplace - "Where to create the temporary copy: one of 'tempdir or 'inplace (default)." - :type `(choice - (const :tag "In place" inplace) - (const :tag "Temporary location" tempdir)) - :group 'flymake-cppcheck) - -(defun flymake-cppcheck-build-command-line (filename) - "Construct a command that flymake can use to check C/C++ source." - (list flymake-cppcheck-command "--quiet" - (concat "--template=" flymake-cppcheck-template) - (if (string-match "error" flymake-cppcheck-enable) - "" (concat "--enable=" flymake-cppcheck-enable)) - filename)) - -;;;###autoload -(defun flymake-cppcheck-load () - "Configure flymake mode to check the current buffer's C/C++ source." - (interactive) - (flymake-easy-load 'flymake-cppcheck-build-command-line - flymake-cppcheck-err-line-patterns - flymake-cppcheck-location - "cpp")) - -(provide 'flymake-cppcheck) - -;;; flymake-cppcheck.el ends here diff --git a/.kxkbrc b/.kxkbrc deleted file mode 100644 index 18ee6ab..0000000 --- a/.kxkbrc +++ /dev/null @@ -1,10 +0,0 @@ -[$Version] -update_info=kxkb.upd:remove-empty-lists,kxkb.upd:add-back-resetoptions,kxkb_variants.upd:split-variants - -[Layout] -DisplayNames=, -LayoutList=us_colemak_pt_mac -Use=true -VariantList=basic -Options=ctrl:nocaps,lv3:alt_switch -ResetOldOptions=true diff --git a/.local/bin/battery-screen b/.local/bin/battery-screen new file mode 100755 index 0000000..26ac78a --- /dev/null +++ b/.local/bin/battery-screen @@ -0,0 +1,70 @@ +#!/usr/bin/env lua + +local function read(path) + local f = io.open(path) + if not f then return nil end + local v = tonumber(f:read('*l')) + f:close() + return v +end + +local function batterytext() + local base = '/sys/class/power_supply/macsmc-battery/' + + local energy_now = read(base .. 'energy_now') + local energy_full = read(base .. 'energy_full') + local status_f = io.open(base .. 'status') + + if not energy_now or not energy_full or not status_f then + return { { full_text = 'bat ?' } } + end + + local status = status_f:read('*l') + status_f:close() + + local capacity = math.floor(energy_now / energy_full * 100 + 0.5) + + local text_color = '#ffffff' + local battery_symbol = ' ' + + if capacity < 30 then + text_color = '#ed8796' + battery_symbol = '' + elseif capacity > 70 then + text_color = '#a6da95' + battery_symbol = '' + else + text_color = '#eed49f' + battery_symbol = '' + end + + local symbol = ({ + Charging = '', + Discharging = battery_symbol, + })[status] or ' ' + + return string.format('%s %2d%%', symbol, capacity), text_color +end + +function hexToRgb(hex) + hex = hex:gsub("#", "") + + local r = tonumber(hex:sub(1, 2), 16) + local g = tonumber(hex:sub(3, 4), 16) + local b = tonumber(hex:sub(5, 6), 16) + + return r, g, b +end + +function printHexColor(text, hex) + local r, g, b = hexToRgb(hex) + local colorCode = string.format("\27[38;2;%d;%d;%dm", r, g, b) + local resetCode = "\27[0m" + + print(colorCode .. text .. resetCode) +end + +while true do + printHexColor(batterytext()) + os.execute("sleep 1") -- Wait for 1 second +end diff --git a/.local/bin/lock-screen b/.local/bin/lock-screen new file mode 100755 index 0000000..4307c9a --- /dev/null +++ b/.local/bin/lock-screen @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +if [[ $1 =~ ^[0-9]+$ ]]; then + SLEEP_DURATION=$1 +else + SLEEP_DURATION=10 +fi + +grim /tmp/lockscreen-0.png +magick /tmp/lockscreen-0.png -scale 10% -blur 0x1 -resize 1000% /tmp/lockscreen.png +swaylock -i /tmp/lockscreen.png & +sleep $SLEEP_DURATION +systemctl sleep diff --git a/.local/bin/rofi-notes b/.local/bin/rofi-notes new file mode 100755 index 0000000..876bc66 --- /dev/null +++ b/.local/bin/rofi-notes @@ -0,0 +1,101 @@ +#!/usr/bin/env lua + +local HOME = os.getenv("HOME") +local NOTES = HOME .. "/Documents/Notes" +local TERM = "foot -a=floating_foot" +local EDITOR = "nvim" + +local MODE = arg[1] -- nil | "--delete" | "-d" + +local function rofi(prompt, lines) + local cmd = string.format( + 'printf "%s" | rofi -dmenu -i -p "%s"', + table.concat(lines, "\n"), + prompt + ) + local handle = io.popen(cmd) + local selection = handle:read("*a") + handle:close() + selection = selection:gsub("%s+$", "") + if selection == "" then return nil end + return selection +end + +local function list_notes() + local display = {} + local lookup = {} + + local cmd = string.format('find "%s" -type f', NOTES) + local pipe = assert(io.popen(cmd, "r")) + + for fullPath in pipe:lines() do + local relPath = fullPath:gsub("^" .. NOTES .. "/", "") + local noteName = relPath:gsub("%.[^./]*$", "") + + table.insert(display, noteName) + lookup[noteName] = fullPath + end + + pipe:close() + return display, lookup +end + +local function normalize_path(input) + input = input:gsub("^/", "") + if not input:match("%.md$") then + input = input .. ".md" + end + return NOTES .. "/" .. input +end + +local function ensure_parent_dir(path) + local dir = path:match("(.+)/[^/]+$") + if dir then + os.execute(string.format('mkdir -p "%s"', dir)) + end +end + +local function open_in_nvim(path) + local cmd = string.format( + '%s -e %s "%s"', + TERM, + EDITOR, + path + ) + os.execute(cmd) +end + +local function delete_note(path, name) + local confirm = rofi("Delete " .. name .. "?", { "No", "Yes" }) + if confirm == "Yes" then + os.execute(string.format('rm -- "%s"', path)) + end +end + +-- ---- main ---- + +local notes, paths = list_notes() + +if MODE == "--delete" or MODE == "-d" then + local choice = rofi(" ", notes) + if not choice then os.exit(0) end + + local path = paths[choice] + if path then + delete_note(path, choice) + end + + os.exit(0) +end + +-- default: open / create +local choice = rofi(" ", notes) +if not choice then os.exit(0) end + +local path = paths[choice] +if not path then + path = normalize_path(choice) + ensure_parent_dir(path) +end + +open_in_nvim(path) diff --git a/.local/bin/rofi-powermenu b/.local/bin/rofi-powermenu new file mode 100755 index 0000000..0ff3f9c --- /dev/null +++ b/.local/bin/rofi-powermenu @@ -0,0 +1,49 @@ +#!/usr/bin/env lua + +local function rofi(prompt, lines) + local cmd = string.format( + 'printf "%s" | rofi -dmenu -i -p "%s"', + table.concat(lines, "\n"), + prompt + ) + local handle = io.popen(cmd) + local selection = handle:read("*a") + handle:close() + selection = selection:gsub("%s+$", "") + if selection == "" then return nil end + return selection +end + +local function contains(tbl, val) + for _, v in pairs(tbl) do + if v == val then + return true + end + end + return false +end + +-- TODO: Deduplicate This +local options = { + "Log Out", + "Shutdown", + "Restart" +} + +local option_pair = { + ["Log Out"] = "swaymsg exit", + ["Shutdown"] = "systemctl poweroff", + ["Restart"] = "systemctl reboot" +} + +local choice = rofi("Action:", options) +if (not choice) or (not contains(options,choice)) then os.exit() end + +if choice == "Log Out" then + io.popen(option_pair[choice]) +else + local confirm = rofi("Are you sure?:", {"Yes", "No"}) + if confirm == "Yes" then + io.popen(option_pair[choice]) + end +end diff --git a/.local/bin/rofi-ppd b/.local/bin/rofi-ppd new file mode 100755 index 0000000..5a4f13b --- /dev/null +++ b/.local/bin/rofi-ppd @@ -0,0 +1,48 @@ +#!/usr/bin/env lua + +local function trim(s) + return s:gsub("^%s+", ""):gsub("%s+$", "") +end + +local function rofi(prompt, lines) + local cmd = string.format( + 'printf "%s" | rofi -dmenu -i -p "%s"', + table.concat(lines, "\n"), + prompt + ) + local handle = io.popen(cmd) + local selection = handle:read("*a") + handle:close() + selection = trim(selection or "") + if selection == "" then return nil end + return selection +end + +local modes = {} + +local handle = io.popen('powerprofilesctl list') +local profile_list = handle:read("*a") +handle:close() + +local handle = io.popen('powerprofilesctl get') +local current_profile = trim(handle:read("*a") or "") +handle:close() + +for line in profile_list:gmatch("[^\r\n]+") do + line = trim(line) + local mode = line:match("^%*?%s*([%w%-_]+)%s*:$") + if mode then + if mode == current_profile then + table.insert(modes, "* " .. mode) + else + table.insert(modes, " " .. mode) + end + end +end + +local selected_profile = rofi('', modes) +if not selected_profile then os.exit() end + +selected_profile = selected_profile:gsub("^%*%s*", ""):gsub("^%s+", "") + +io.popen('powerprofilesctl set ' .. selected_profile) diff --git a/.local/bin/rofi-translate b/.local/bin/rofi-translate new file mode 100755 index 0000000..f71557d --- /dev/null +++ b/.local/bin/rofi-translate @@ -0,0 +1,60 @@ +#!/usr/bin/env lua + +local function rofi(prompt, lines) + local cmd = string.format( + 'printf "%s" | rofi -dmenu -i -p "%s"', + table.concat(lines, "\n"), + prompt + ) + local handle = io.popen(cmd) + local selection = handle:read("*a") + handle:close() + selection = selection:gsub("%s+$", "") + if selection == "" then return nil end + return selection +end + +local function contains(tbl, val) + for _, v in pairs(tbl) do + if v == val then + return true + end + end + return false +end + +local directions = { + "English → Portuguese", + "Portuguese → English" +} + +local choice = rofi("Translate:", directions) +if (not choice) or (not contains(directions,choice)) then os.exit() end + +local lang_pair = { + ["English → Portuguese"] = "en:pt", + ["Portuguese → English"] = "pt:en" +} +local pair = lang_pair[choice] + +local text = rofi("", { "" }) +if not text then os.exit() end + +local trans_cmd = string.format('trans -b %s "%s"', pair, text:gsub('"', '\\"')) +local trans_handle = io.popen(trans_cmd) +local translation = trans_handle:read("*a") +trans_handle:close() +translation = translation:gsub("%s+$", "") + +if translation == "" then + translation = "(no translation returned)" +else + io.popen("wl-copy " .. translation) +end + +local notify_cmd = string.format( + 'notify-send -- "Translation (%s)" "%s"', + choice, + translation:gsub('"', '\\"') +) +os.execute(notify_cmd) diff --git a/.local/bin/rofi-wifimenu b/.local/bin/rofi-wifimenu new file mode 100755 index 0000000..fb45671 --- /dev/null +++ b/.local/bin/rofi-wifimenu @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +notify-send "Getting list of available Wi-Fi networks..." +# Get a list of available wifi connections and morph it into a nice-looking list +wifi_list=$(nmcli --fields "SECURITY,SSID" device wifi list | sed 1d | sed 's/ */ /g' | sed -E "s/WPA*.?\S/ /g" | sed "s/^--/ /g" | sed "s/ //g" | sed "/--/d") + +connected=$(nmcli -fields WIFI g) +if [[ "$connected" =~ "enabled" ]]; then + toggle=" Disable Wi-Fi" +elif [[ "$connected" =~ "disabled" ]]; then + toggle=" Enable Wi-Fi" +fi + +# Use rofi to select wifi network +chosen_network=$(echo -e "$toggle\n$wifi_list" | uniq -u | rofi -dmenu -i -selected-row 1 -p "Wi-Fi SSID: " ) +# Get name of connection +read -r chosen_id <<< "${chosen_network:3}" + +if [ "$chosen_network" = "" ]; then + exit +elif [ "$chosen_network" = " Enable Wi-Fi" ]; then + nmcli radio wifi on +elif [ "$chosen_network" = " Disable Wi-Fi" ]; then + nmcli radio wifi off +else + # Message to show when connection is activated successfully + success_message="You are now connected to the Wi-Fi network \"$chosen_id\"." + # Get saved connections + saved_connections=$(nmcli -g NAME connection) + if [[ $(echo "$saved_connections" | grep -w "$chosen_id") = "$chosen_id" ]]; then + nmcli connection up id "$chosen_id" | grep "successfully" && notify-send "Connection Established" "$success_message" + else + if [[ "$chosen_network" =~ "" ]]; then + wifi_password=$(rofi -dmenu -p "Password: " ) + fi + nmcli device wifi connect "$chosen_id" password "$wifi_password" | grep "successfully" && notify-send "Connection Established" "$success_message" + fi +fi diff --git a/.local/bin/take-slurpshot b/.local/bin/take-slurpshot new file mode 100755 index 0000000..f30fabe --- /dev/null +++ b/.local/bin/take-slurpshot @@ -0,0 +1,18 @@ +#!/bin/bash + +# Generate base filename with timestamp +base_filename=$(date +"%m-%d-%Y_%H-%M-%S") +extension=".png" + +# Initialize full filename +filename="${base_filename}${extension}" +counter=1 + +# Check if file exists and append incremental suffix if needed +while [[ -e "$filename" ]]; do + filename="${base_filename}-${counter}${extension}" + ((counter++)) +done + +# Output the available filename +grim -g "$(slurp)" "$HOME/Pictures/Screenshots/$filename" diff --git a/.local/share/applications/jellyfin-tui.desktop b/.local/share/applications/jellyfin-tui.desktop new file mode 100644 index 0000000..3ac887a --- /dev/null +++ b/.local/share/applications/jellyfin-tui.desktop @@ -0,0 +1,5 @@ +[Desktop Entry] +Name=Jellyfin TUI +Exec=foot jellyfin-tui +Type=Application +Terminal=false diff --git a/.local/share/applications/yazi.desktop b/.local/share/applications/yazi.desktop new file mode 100644 index 0000000..24580fa --- /dev/null +++ b/.local/share/applications/yazi.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Name=Yazi +Exec=foot yazi %U +Type=Application +Terminal=false +MimeType=inode/directory; diff --git a/.mg b/.mg deleted file mode 100644 index 5b00b1b..0000000 --- a/.mg +++ /dev/null @@ -1,2 +0,0 @@ -backup-to-home-directory -auto-execute *.c c-mode diff --git a/.tmux.conf b/.tmux.conf deleted file mode 100644 index 8f3db13..0000000 --- a/.tmux.conf +++ /dev/null @@ -1,107 +0,0 @@ -# Set Shell to ZSH -set-option -g default-shell /bin/zsh - -# Use C-t and C-n for the prefix -set-option -g prefix C-space - -# Easy Config Reload -bind-key r source-file ~/.tmux.conf \; display-message "Config reloaded" - -# Mouse Mode -set -g mouse on - -# Fix Colors -set -g default-terminal "tmux-256color" -set -ga terminal-overrides ",*col*:Tc" - -# Fix Pane Numbers -set -g base-index 1 -setw -g pane-base-index 1 - -# Switch Pane Keys -bind-key h select-pane -L -bind-key i select-pane -R -bind-key e select-pane -U -bind-key n select-pane -D - -# Easier Splitting -bind-key v split-window -h -c "#{pane_current_path}" -bind-key s split-window -v -c "#{pane_current_path}" - -# Quick Create and tab through windows -# bind-key -n C-Tab next-window -# bind-key -n C-S-Tab previous-window -bind-key Tab next-window -bind-key k confirm-before -p "kill window #W? (y/n)" kill-window -bind-key c new-window - -# Bind Popup Window -bind-key t display-popup - -bind-key g display-popup \ - -d "#{pane_current_path}" \ - -w 80% \ - -h 80% \ - -E "lazygit" - -bind-key f display-popup \ - -w 80% \ - -h 80% \ - -E "nvim -c \"Oil\"" - -bind-key l display-popup \ - -d "#{pane_current_path}" \ - -w 80% \ - -h 80% \ - -E "elia" - -# Fix delay on vim escape -set -s escape-time 0 - -# Change background color of a tab when activity occurs -setw -g monitor-activity on - -# Do NOT reset the color of the tab after activity stops occuring -setw -g monitor-silence 0 - -# Disable bell -setw -g monitor-bell off - -# Disable visual text box when activity occurs -set -g visual-activity off - -# Images in TMUX -set -g allow-passthrough all -set -ga update-environment TERM -set -ga update-environment TERM_PROGRAM - -# Set Terminal Title -set-option -g set-titles on -set-option -g set-titles-string "#T" - -# Bind Toggle Status Bar -bind m set-option status - -# tmux2k -set -g @tmux2k-start-icon "λ" -set -g @tmux2k-theme 'duo' -# Rose Pine -# set -g @tmux2k-duo-bg '#191724' -# Pinheiro Preto -set -g @tmux2k-duo-bg '#1d2021' -set -g @tmux2k-duo-fg '#98a18c' -set -g @tmux2k-icons-only true -set -g @tmux2k-left-plugins "git cwd" -set -g @tmux2k-right-plugins "cpu cpu-temp battery time" -set -g @tmux2k-refresh-rate 5 -set -g @tmux2k-window-list-alignment "left" -set -g @tmux2k-cpu-temp-round true -set -g @tmux2k-time-format "%a %H:%M" - -# TMUX Packages - -set -g @plugin 'tmux-plugins/tpm' -set -g @plugin 'tmux-plugins/tmux-sensible' -set -g @plugin '2kabhishek/tmux2k' - -run '~/.tmux/plugins/tpm/tpm' diff --git a/.xkbmap b/.xkbmap deleted file mode 100644 index 3a5a677..0000000 --- a/.xkbmap +++ /dev/null @@ -1,3 +0,0 @@ -xkb_symbols { - include "us_colemak_pt_mac(basic)" -}; diff --git a/.zprofile b/.zprofile deleted file mode 100644 index bd8da72..0000000 --- a/.zprofile +++ /dev/null @@ -1,6 +0,0 @@ - -eval "$(/opt/homebrew/bin/brew shellenv)" - -# Added by OrbStack: command-line tools and integration -# This won't be added again if you remove it. -source ~/.orbstack/shell/init.zsh 2>/dev/null || : diff --git a/.zshenv b/.zshenv deleted file mode 100644 index 97f7a5a..0000000 --- a/.zshenv +++ /dev/null @@ -1,12 +0,0 @@ -# Rust -# . "$HOME/.cargo/env" - -# Custom -[ -f "$HOME/.config/shell/vars" ] && source "$HOME/.config/shell/vars" - -# Brew -# eval "$(/opt/homebrew/bin/brew shellenv)" - -# bun -# export BUN_INSTALL="$HOME/.bun" -# export PATH="$BUN_INSTALL/bin:$PATH" diff --git a/.zshrc b/.zshrc deleted file mode 100644 index a22919e..0000000 --- a/.zshrc +++ /dev/null @@ -1,103 +0,0 @@ -# Venomade's zshrc - -# source global variables and aliases -[ -f "$HOME/.config/shell/alias" ] && source "$HOME/.config/shell/alias" -[ -f "$HOME/.config/shell/vars" ] && source "$HOME/.config/shell/vars" - -# load modules -zmodload zsh/complist -autoload -U compinit && compinit -autoload -U colors && colors - -# completion -zstyle ':completion:*' menu select -zstyle ':completion:*' special-dirs true -zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} ma=0\;33 - -# options -setopt append_history inc_append_history share_history -setopt auto_menu menu_complete -setopt auto_param_slash -setopt no_case_glob no_case_match -setopt globdots -setopt extended_glob - -# history -HISTCONTROL=ignoreboth - - -# prompt -USER_COLOR="%F{magenta}" -VENV_COLOR="%F{yellow}" -DIR_COLOR="%F{green}" -GIT_COLOR="%F{blue}" -GIT_DIRTY_COLOR="%F{red}" -PROMPT_SYMBOL_COLOR="%F{yellow}" -RESET_COLOR="%f" - -shorten_path() { - local path="${PWD/#$HOME/~}" - local parts=("${(@s:/:)path}") - - if (( ${#parts} > 3 )); then - echo "${parts[1]}/.../${parts[-2]}/${parts[-1]}" - else - echo "$path" - fi -} - -git_branch() { - local branch - branch=$(git symbolic-ref --short HEAD 2>/dev/null || git rev-parse --short HEAD 2>/dev/null) - [[ -n "$branch" ]] && echo "$branch" -} - -git_dirty() { - [[ -n "$(git status --porcelain 2>/dev/null)" ]] && echo "✗" || echo "✓" -} - -set_prompt() { - if [ "$DEVBOX_SHELL_ENABLED" -ne 1 ]; then - local user="${USER_COLOR}%n${RESET_COLOR}" - local venv="" - [[ -n "$VIRTUAL_ENV" ]] && venv="${VENV_COLOR}($(basename $VIRTUAL_ENV))${RESET_COLOR} " - - local path="${DIR_COLOR}$(shorten_path)${RESET_COLOR}" - local git_info="" - local branch="$(git_branch)" - - if [[ -n "$branch" ]]; then - git_info=" %F{white}on%f ${GIT_COLOR}${branch}${RESET_COLOR}${GIT_DIRTY_COLOR}$(git_dirty)${RESET_COLOR}" - fi - - PROMPT="${user} %F{white}in%f ${venv}${path}${git_info} -${PROMPT_SYMBOL_COLOR}λ${RESET_COLOR} " - fi -} - -autoload -Uz add-zsh-hook -add-zsh-hook precmd set_prompt - -# plugins - -source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh - -# GHCUP for Haskell -# [ -f "/home/venomade/.ghcup/env" ] && . "/home/venomade/.ghcup/env" # ghcup-env - -# OPAM for OCaml -# [[ ! -r '/home/venomade/.opam/opam-init/init.zsh' ]] || source '/home/venomade/.opam/opam-init/init.zsh' > /dev/null 2> /dev/null -# bun completions -# [ -s "/home/venomade/.bun/_bun" ] && source "/home/venomade/.bun/_bun" - -# bun -# export BUN_INSTALL="$HOME/.bun" -# export PATH="$BUN_INSTALL/bin:$PATH" - -# Devbox -# eval "$(devbox global shellenv)" - -# Homebrew -# eval "$(/opt/homebrew/bin/brew shellenv)" - -# export PATH="/opt/homebrew/opt/llvm/bin:$PATH" diff --git a/README.md b/README.md index 7a22cbf..2fe72b5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ # Venomade's Dotfiles These are my dotfiles managed with [GNU Stow](https://www.gnu.org/software/stow/). + +These dotfiles are fairly hardcoded, so take them as inspiration. They are made specifically for me (*/home/venomade*), in a mix of Portuguese and English and are for Asahi Linux on an M1 Macbook. |
