From e25d845bbf5ee8c448f36608c70806126d7ee968 Mon Sep 17 00:00:00 2001 From: Corey Smith Date: Wed, 23 Jul 2025 00:26:25 -0700 Subject: [PATCH] Cleanup dotfiles --- .../aerospace/aerospace.toml | 0 dot_config/bat/config | 5 + dot_config/broot/conf.hjson | 300 +++++++++ dot_config/broot/launcher/bash/symlink_br | 1 + dot_config/broot/launcher/installed-v4 | 4 + .../broot/skins/catppuccin-macchiato.hjson | 171 +++++ dot_config/broot/skins/catppuccin-mocha.hjson | 171 +++++ dot_config/broot/skins/dark-blue.hjson | 115 ++++ dot_config/broot/skins/dark-gruvbox.hjson | 88 +++ dot_config/broot/skins/dark-orange.hjson | 110 ++++ dot_config/broot/skins/native-16.hjson | 132 ++++ dot_config/broot/skins/solarized-dark.hjson | 66 ++ dot_config/broot/skins/solarized-light.hjson | 118 ++++ dot_config/broot/skins/white.hjson | 84 +++ dot_config/broot/verbs.hjson | 161 +++++ dot_config/fd/ignore | 186 ++++++ .../gitmux/dot_gitmux.conf | 0 .../hammerspoon}/Spoons/.keep | 0 .../hammerspoon}/init.lua | 0 .../nvim/after/queries/blade/highlights.scm | 9 + .../nvim/after/queries/blade/injections.scm | 4 + dot_config/nvim/colors/lpcstudio.lua | 571 +++++++++++++++++ dot_config/nvim/init.lua | 587 ++++++++++++++++++ dot_config/nvim/lua/plugins/conform.lua | 8 + dot_config/nvim/spell/en.utf-8.add | 2 + dot_config/nvim/spell/en.utf-8.add.spl | Bin 0 -> 113 bytes dot_config/nvim/testinit.lua | 16 + dot_config/tmux/dot_DS_Store | Bin 0 -> 6148 bytes .../scripts/executable_get_git_hosting.sh | 48 ++ .../scripts/executable_ssh_aware_directory.sh | 26 + dot_config/tmux/tmux.conf | 267 ++++++++ dot_config/vim/dot_vimrc | 71 +++ dot_config/wezterm/wezterm.lua | 73 +++ 33 files changed, 3394 insertions(+) rename dot_aerospace.toml => dot_config/aerospace/aerospace.toml (100%) create mode 100644 dot_config/bat/config create mode 100644 dot_config/broot/conf.hjson create mode 100644 dot_config/broot/launcher/bash/symlink_br create mode 100644 dot_config/broot/launcher/installed-v4 create mode 100644 dot_config/broot/skins/catppuccin-macchiato.hjson create mode 100644 dot_config/broot/skins/catppuccin-mocha.hjson create mode 100644 dot_config/broot/skins/dark-blue.hjson create mode 100644 dot_config/broot/skins/dark-gruvbox.hjson create mode 100644 dot_config/broot/skins/dark-orange.hjson create mode 100644 dot_config/broot/skins/native-16.hjson create mode 100644 dot_config/broot/skins/solarized-dark.hjson create mode 100644 dot_config/broot/skins/solarized-light.hjson create mode 100644 dot_config/broot/skins/white.hjson create mode 100644 dot_config/broot/verbs.hjson create mode 100644 dot_config/fd/ignore rename dot_gitmux.conf => dot_config/gitmux/dot_gitmux.conf (100%) rename {dot_hammerspoon => dot_config/hammerspoon}/Spoons/.keep (100%) rename {dot_hammerspoon => dot_config/hammerspoon}/init.lua (100%) create mode 100644 dot_config/nvim/after/queries/blade/highlights.scm create mode 100644 dot_config/nvim/after/queries/blade/injections.scm create mode 100644 dot_config/nvim/colors/lpcstudio.lua create mode 100644 dot_config/nvim/init.lua create mode 100644 dot_config/nvim/lua/plugins/conform.lua create mode 100644 dot_config/nvim/spell/en.utf-8.add create mode 100644 dot_config/nvim/spell/en.utf-8.add.spl create mode 100644 dot_config/nvim/testinit.lua create mode 100644 dot_config/tmux/dot_DS_Store create mode 100644 dot_config/tmux/scripts/executable_get_git_hosting.sh create mode 100644 dot_config/tmux/scripts/executable_ssh_aware_directory.sh create mode 100644 dot_config/tmux/tmux.conf create mode 100644 dot_config/vim/dot_vimrc create mode 100644 dot_config/wezterm/wezterm.lua diff --git a/dot_aerospace.toml b/dot_config/aerospace/aerospace.toml similarity index 100% rename from dot_aerospace.toml rename to dot_config/aerospace/aerospace.toml diff --git a/dot_config/bat/config b/dot_config/bat/config new file mode 100644 index 0000000..ebc12cc --- /dev/null +++ b/dot_config/bat/config @@ -0,0 +1,5 @@ +# Keep line numbers but disable syntax highlighting +--style=numbers + +# Use a plain theme (no syntax colors) +--color=never diff --git a/dot_config/broot/conf.hjson b/dot_config/broot/conf.hjson new file mode 100644 index 0000000..e11f1be --- /dev/null +++ b/dot_config/broot/conf.hjson @@ -0,0 +1,300 @@ +############################################################### +# This configuration file lets you +# - define new commands +# - change the shortcut or triggering keys of built-in verbs +# - change the colors +# - set default values for flags +# - set special behaviors on specific paths +# - and more... +# +# Configuration documentation is available at +# https://dystroy.org/broot +# +# This file's format is Hjson ( https://hjson.github.io/ ). Some +# properties are commented out. To enable them, remove the `#`. +# +############################################################### + +############################################################### +# Default flags +# You can set up flags you want broot to start with by +# default, for example `default_flags="-ihp"` if you usually want +# to see hidden and gitignored files and the permissions (then +# if you don't want the hidden files at a specific launch, +# you can launch broot with `br -H`). +# A popular flag is the `g` one which displays git related info. +# +# default_flags: + +############################################################### +# Terminal's title +# If you want the terminal's title to be updated when you change +# directory, set a terminal_title pattern by uncommenting one of +# the examples below and tuning it to your taste. +# +# terminal_title: "[broot] {git-name}" +# terminal_title: "{file} 🐄" +# terminal_title: "-= {file-name} =-" +# reset_terminal_title_on_exit: false + +############################################################### +# Date/Time format +# If you want to change the format for date/time, uncomment the +# following line and change it according to +# https://docs.rs/chrono/0.4.11/chrono/format/strftime/index.html +# +# date_time_format: %Y/%m/%d %R + +############################################################### +# uncomment to activate modal mode +# +# (you really should read https://dystroy.org/broot/modal/ +# before as it may not suit everybody even among vim users) +# +# You may start either in 'command' mode, or in 'input' mode +# +# modal: true +# initial_mode: command + +############################################################### +# Whether to mark the selected line with a triangle +# +show_selection_mark: true + +############################################################### +# Column order +# cols_order, if specified, must be a permutation of the following +# array. You should keep the name column at the end as it has a +# variable length. +# +# cols_order: [ +# mark +# git +# size +# permission +# date +# count +# branch +# name +# ] + +############################################################### +# True Colors +# If this parameter isn't set, broot tries to automatically +# determine whether true colors (24 bits) are available. +# As this process is unreliable, you may uncomment this setting +# and set it to false or true if you notice the colors in +# previewed images are too off. +# +# true_colors: false + +############################################################### +# Icons +# If you want to display icons in broot, uncomment this line +# (see https://dystroy.org/broot/icons for installation and +# troubleshooting) +# +# icon_theme: vscode + +############################################################### +# Special paths +# If some paths must be handled specially, uncomment (and change +# this section as per the examples) +# Setting "list":"never" on a dir prevents broot from looking at its +# children when searching, unless the dir is the selected root. +# Setting "sum":"never" on a dir prevents broot from looking at its +# children when computing the total size and count of files. +# Setting "show":"always" makes a file visible even if its name +# starts with a dot. +# Setting "list":"always" may be useful on a link to a directory +# (they're otherwise not entered by broot unless selected) +# +special_paths: { + "/media" : { + list: "never" + sum: "never" + } + "~/.config": { "show": "always" } + "trav": { + show: always + list: "always", + sum: "never" + } + # "~/useless": { "show": "never" } + # "~/my-link-I-want-to-explore": { "list": "always" } +} + +############################################################### +# Quit on last cancel +# You can usually cancel the last state change on escape. +# If you want the escape key to quit broot when there's nothing +# to cancel (for example when you just opened broot), uncomment +# this parameter +# +# quit_on_last_cancel: true + +############################################################### +# Search modes +# +# broot allows many search modes. +# A search mode is defined by +# - the way to search: 'fuzzy', 'exact', 'regex', or 'tokens'. +# - where to search: file 'name', 'path', or file 'content' +# A search pattern may for example be "fuzzy path" (default), +# "regex content" or "exact path". +# +# The search mode is selected from its prefix. For example, if +# you type "abc", the default mode is "fuzzy path". If you type +# "/abc", the mode is "regex path". If you type "rn/abc", the mode +# is "regex name". +# +# This mapping may be modified. You may want to dedicate the +# empty prefix (the one which doesn't need a '/') to the +# search mode you use most often. The example below makes it +# easy to search on name rather than on the subpath. +# +# More information on +# https://dystroy.org/broot/input/#the-filtering-pattern +# +# search_modes: { +# : fuzzy name +# /: regex name +# } + +############################################################### +# File Extension Colors +# +# uncomment and modify the next section if you want to color +# file name depending on their extension +# +# ext_colors: { +# png: rgb(255, 128, 75) +# rs: yellow +# } + +############################################################### +# Max file size for content search +# +# Bigger files are ignored when searching their content. You +# can specify this size either in ISO units (eg 5GB) or in +# the old binary units (eg 44Kib) +content_search_max_file_size: 10MB + +############################################################### +# Max Panels Count +# +# Change this if you sometimes want to have more than 2 panels +# open +# max_panels_count: 2 + +############################################################### +# Update work dir +# +# By default, broot process' work dir is kept in sync with the +# current's panel root. If you want to keep it unchanged, +# uncomment this setting +# +# update_work_dir: false + +############################################################### +# Kitty Keyboard extension +# +# If you want to use advanced keyboard shortcuts in Kitty +# compatible terminals (Kitty, Wezterm), set this to true. +# +# This makes it possible to use shortcuts like 'space-n', +# 'ctrl-alt-a-b', 'shift-space', etc. +# +enable_kitty_keyboard: false + +############################################################### +# lines around matching line in filtered preview +# +# When searching the content of a file, you can have either +# only the matching lines displayed, or some of the surrounding +# ones too. +# +lines_before_match_in_preview: 1 +lines_after_match_in_preview: 1 + +############################################################### +# transformations before preview +# +# It's possible to define transformations to apply to some files +# before calling one of the default preview renderers in broot. +# Below are two examples that you may uncomment and adapt: +# +preview_transformers: [ + // # Use mutool to render any PDF file as an image + // # In this example we use placeholders for the input and output files + // { + // input_extensions: [ "pdf" ] // case doesn't matter + // output_extension: png + // mode: image + // command: [ "mutool", "draw", "-w", "1000", "-o", "{output-path}", "{input-path}" ] + // } + + // # Use LibreOffice to render Office files as images + // # In this example, {output-dir} is used to specify where LibreOffice must write the result + // { + // input_extensions: [ "xls", "xlsx", "doc", "docx", "ppt", "pptx", "ods", "odt", "odp" ] + // output_extension: png + // mode: image + // command: [ + // "libreoffice", "--headless", + // "--convert-to", "png", + // "--outdir", "{output-dir}", + // "{input-path}" + // ] + // } + + // # Use jq to beautify JSON + // # In this example, the command refers to neither the input nor the output, + // # so broot pipes them to the stdin and stdout of the jq process + // { + // input_extensions: [ "json" ] + // output_extension: json + // mode: text + // command: [ "jq" ] + // } +] + +############################################################### +# Imports +# +# While it's possible to have all configuration in one file, +# it's more convenient to split it in several ones. +# Importing also allows to set a condition on the terminal's +# color, which makes it possible to have a different skin +# chosen when your terminal has a light background and when +# it has a light one. +imports: [ + + # Verbs are better configured in verbs.hjson. But you + # can also add another files for your personal verbs + verbs.hjson + + # This file contains the skin to use when the terminal + # is dark (or when this couldn't be determined) + { + luma: [ + dark + unknown + ] + # (un)comment to choose your preferred skin + file: skins/dark-blue.hjson + //file: skins/catppuccin-macchiato.hjson + //file: skins/catppuccin-mocha.hjson + //file: skins/dark-gruvbox.hjson + //file: skins/dark-orange.hjson + //file: skins/solarized-dark.hjson + } + + # This skin is imported when your terminal is light + { + luma: light + # (un)comment to choose your preferred skin + //file: skins/solarized-light.hjson + file: skins/white.hjson + } +] diff --git a/dot_config/broot/launcher/bash/symlink_br b/dot_config/broot/launcher/bash/symlink_br new file mode 100644 index 0000000..4490449 --- /dev/null +++ b/dot_config/broot/launcher/bash/symlink_br @@ -0,0 +1 @@ +/Users/corey/Library/Application Support/org.dystroy.broot/launcher/bash/1 diff --git a/dot_config/broot/launcher/installed-v4 b/dot_config/broot/launcher/installed-v4 new file mode 100644 index 0000000..3f026af --- /dev/null +++ b/dot_config/broot/launcher/installed-v4 @@ -0,0 +1,4 @@ + +This file tells broot the installation of the br function was done. +If there's a problem and you want to install it again run + broot -- install diff --git a/dot_config/broot/skins/catppuccin-macchiato.hjson b/dot_config/broot/skins/catppuccin-macchiato.hjson new file mode 100644 index 0000000..21a3bf1 --- /dev/null +++ b/dot_config/broot/skins/catppuccin-macchiato.hjson @@ -0,0 +1,171 @@ +############################################################### +# A skin for a terminal with a dark background +# This skin uses RGB values so won't work for some +# terminals. +# +# Created by Majixed +# Based on the catppuccin-mocha theme by A. Taha Baki +# +# Doc at https://dystroy.org/broot/skins/ +############################################################### + +skin: { + input: rgb(202, 211, 245) none + # fg:none bg:$surface2 + selected_line: none rgb(91, 96, 120) + # fg:$text bg:none + default: rgb(202, 211, 245) none + # fg:$overlay0 bg:none + tree: rgb(110, 115, 141) none + # fg:$sapphire bg:none + parent: rgb(125, 196, 228) none + file: none none +# +### PERMISSIONS +# + perm__: rgb(184, 192, 224) none + # $peach + perm_r: rgb(245, 169, 127) none + # $maroon + perm_w: rgb(238, 153, 160) none + # $green + perm_x: rgb(166, 218, 149) none + # $teal + owner: rgb(139, 213, 202) none + # $sky + group: rgb(145, 215, 227) none +# +### DATE +# + # $subtext1 + dates: rgb(184, 192, 224) none +# +### DIRECTORY +# + # $lavender + directory: rgb(183, 189, 248) none Bold + # $green + exe: rgb(166, 218, 149) none + # $yellow + link: rgb(238, 212, 159) none + # $subtext0 + pruning: rgb(165, 173, 203) none Italic +# +### PREVIEW +# + # fg:$text bg:$mantle + preview_title: rgb(202, 211, 245) rgb(30, 32, 48) + # fg:$text bg:$mantle + preview: rgb(202, 211, 245) rgb(30, 32, 48) + # fg:$overlay0 + preview_line_number: rgb(110, 115, 141) none + # fg:$overlay0 + preview_separator: rgb(110, 115, 141) none +# +### MATCH +# + char_match: rgb(238, 212, 159) rgb(73, 77, 100) Bold Italic + content_match: rgb(238, 212, 159) rgb(73, 77, 100) Bold Italic + preview_match: rgb(238, 212, 159) rgb(73, 77, 100) Bold Italic + + # children count + # fg:$yellow bg:none + count: rgb(238, 212, 159) none + sparse: rgb(237, 135, 150) none + content_extract: rgb(237, 135, 150) none Italic +# +### GIT +# + git_branch: rgb(245, 169, 127) none + git_insertions: rgb(245, 169, 127) none + git_deletions: rgb(245, 169, 127) none + git_status_current: rgb(245, 169, 127) none + git_status_modified: rgb(245, 169, 127) none + git_status_new: rgb(245, 169, 127) none Bold + git_status_ignored: rgb(245, 169, 127) none + git_status_conflicted: rgb(245, 169, 127) none + git_status_other: rgb(245, 169, 127) none + staging_area_title: rgb(245, 169, 127) none +# +### FLAG +# + flag_label: rgb(237, 135, 150) none + flag_value: rgb(237, 135, 150) none Bold +# +### STATUS +# + # fg:none #bg:$mantle + status_normal: none rgb(30, 32, 48) + # fg:$red bg:$mantle + status_italic: rgb(237, 135, 150) rgb(30, 32, 48) Italic + # fg:$maroon bg:$mantle + status_bold: rgb(238, 153, 160) rgb(30, 32, 48) Bold + # fg:$maroon bg:$mantle + status_ellipsis: rgb(238, 153, 160) rgb(30, 32, 48) Bold + # fg:$text bg:$red + status_error: rgb(202, 211, 245) rgb(237, 135, 150) + # fg:$maroon bg:$mantle + status_job: rgb(238, 153, 160) rgb(40, 38, 37) + # fg:$maroon bg:$mantle + status_code: rgb(238, 153, 160) rgb(30, 32, 48) Italic + # fg:$maroon bg:$mantle + mode_command_mark: rgb(238, 153, 160) rgb(30, 32, 48) Bold +# +### HELP +# + # fg:$text + help_paragraph: rgb(202, 211, 245) none + # fg:$red + help_headers: rgb(237, 135, 150) none Bold + # fg:$peach + help_bold: rgb(245, 169, 127) none Bold + # fg:$yellow + help_italic: rgb(238, 212, 159) none Italic + # fg:green bg:$surface0 + help_code: rgb(166, 218, 149) rgb(54, 58, 79) + # fg:$overlay0 + help_table_border: rgb(110, 115, 141) none +# +### HEX +# + # fg:$text + hex_null: rgb(202, 211, 245) none + # fg:$peach + hex_ascii_graphic: rgb(245, 169, 127) none + # fg:$green + hex_ascii_whitespace: rgb(166, 218, 149) none + # fg: teal + hex_ascii_other: rgb(139, 213, 202) none + # fg: red + hex_non_ascii: rgb(237, 135, 150) none + + # fg:$text bg:$red + file_error: rgb(243, 60, 44) none +# +### PURPOSE +# + purpose_normal: none none + purpose_italic: rgb(169, 90, 127) none Italic + purpose_bold: rgb(169, 90, 127) none Bold + purpose_ellipsis: none none +# +### SCROLLBAR +# + # fg:$surface0 + scrollbar_track: rgb(54, 58, 79) none + # fg:$surface1 + scrollbar_thumb: rgb(91, 96, 120) none +# +### GOODTOBAD +# + good_to_bad_0: rgb(166, 218, 149) none + good_to_bad_1: rgb(139, 213, 202) none + good_to_bad_2: rgb(145, 215, 227) none + good_to_bad_3: rgb(125, 196, 228) none + good_to_bad_4: rgb(138, 173, 244) none + good_to_bad_5: rgb(183, 189, 248) none + good_to_bad_6: rgb(198, 160, 246) none + good_to_bad_7: rgb(245, 169, 127) none + good_to_bad_8: rgb(238, 153, 160) none + good_to_bad_9: rgb(237, 135, 150) none +} diff --git a/dot_config/broot/skins/catppuccin-mocha.hjson b/dot_config/broot/skins/catppuccin-mocha.hjson new file mode 100644 index 0000000..6ac1b92 --- /dev/null +++ b/dot_config/broot/skins/catppuccin-mocha.hjson @@ -0,0 +1,171 @@ +############################################################### +# A skin for a terminal with a dark background +# This skin uses RGB values so won't work for some +# terminals. +# +# Created by A. Taha Baki +# Based on the built-in gruvbox theme. +# +# Doc at https://dystroy.org/broot/skins/ +############################################################### + +skin: { + input: rgb(205, 214, 244) none + # fg:none bg:$surface2 + selected_line: none rgb(88, 91, 112) + # fg:$text bg:none + default: rgb(205, 214, 244) none + # fg:$overlay0 bg:none + tree: rgb(108, 112, 134) none + # fg:$sapphire bg:none + parent: rgb(116, 199, 236) none + file: none none +# +### PERMISSIONS +# + perm__: rgb(186, 194, 222) none + # $peach + perm_r: rgb(250, 179, 135) none + # $maroon + perm_w: rgb(235, 160, 172) none + # $green + perm_x: rgb(166, 227, 161) none + # $teal + owner: rgb(148, 226, 213) none + # $sky + group: rgb(137, 220, 235) none +# +### DATE +# + # $subtext1 + dates: rgb(186, 194, 222) none +# +### DIRECTORY +# + # $lavender + directory: rgb(180, 190, 254) none Bold + # $green + exe: rgb(166, 227, 161) none + # $yellow + link: rgb(249, 226, 175) none + # $subtext0 + pruning: rgb(166, 173, 200) none Italic +# +### PREVIEW +# + # fg:$text bg:$mantle + preview_title: rgb(205, 214, 244) rgb(24, 24, 37) + # fg:$text bg:$mantle + preview: rgb(205, 214, 244) rgb(24, 24, 37) + # fg:$overlay0 + preview_line_number: rgb(108, 112, 134) none + # fg:$overlay0 + preview_separator: rgb(108, 112, 134) none +# +### MATCH +# + char_match: rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic + content_match: rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic + preview_match: rgb(249, 226, 175) rgb(69, 71, 90) Bold Italic + + # children count + # fg:$yellow bg:none + count: rgb(249, 226, 175) none + sparse: rgb(243, 139, 168) none + content_extract: rgb(243, 139, 168) none Italic +# +### GIT +# + git_branch: rgb(250, 179, 135) none + git_insertions: rgb(250, 179, 135) none + git_deletions: rgb(250, 179, 135) none + git_status_current: rgb(250, 179, 135) none + git_status_modified: rgb(250, 179, 135) none + git_status_new: rgb(250, 179, 135) none Bold + git_status_ignored: rgb(250, 179, 135) none + git_status_conflicted: rgb(250, 179, 135) none + git_status_other: rgb(250, 179, 135) none + staging_area_title: rgb(250, 179, 135) none +# +### FLAG +# + flag_label: rgb(243, 139, 168) none + flag_value: rgb(243, 139, 168) none Bold +# +### STATUS +# + # fg:none #bg:$mantle + status_normal: none rgb(24, 24, 37) + # fg:$red bg:$mantle + status_italic: rgb(243, 139, 168) rgb(24, 24, 37) Italic + # fg:$maroon bg:$mantle + status_bold: rgb(235, 160, 172) rgb(24, 24, 37) Bold + # fg:$maroon bg:$mantle + status_ellipsis: rgb(235, 160, 172) rgb(24, 24, 37) Bold + # fg:$text bg:$red + status_error: rgb(205, 214, 244) rgb(243, 139, 168) + # fg:$maroon bg:$mantle + status_job: rgb(235, 160, 172) rgb(40, 38, 37) + # fg:$maroon bg:$mantle + status_code: rgb(235, 160, 172) rgb(24, 24, 37) Italic + # fg:$maroon bg:$mantle + mode_command_mark: rgb(235, 160, 172) rgb(24, 24, 37) Bold +# +### HELP +# + # fg:$text + help_paragraph: rgb(205, 214, 244) none + # fg:$red + help_headers: rgb(243, 139, 168) none Bold + # fg:$peach + help_bold: rgb(250, 179, 135) none Bold + # fg:$yellow + help_italic: rgb(249, 226, 175) none Italic + # fg:green bg:$surface0 + help_code: rgb(166, 227, 161) rgb(49, 50, 68) + # fg:$overlay0 + help_table_border: rgb(108, 112, 134) none +# +### HEX +# + # fg:$text + hex_null: rgb(205, 214, 244) none + # fg:$peach + hex_ascii_graphic: rgb(250, 179, 135) none + # fg:$green + hex_ascii_whitespace: rgb(166, 227, 161) none + # fg: teal + hex_ascii_other: rgb(148, 226, 213) none + # fg: red + hex_non_ascii: rgb(243, 139, 168) none + + # fg:$text bg:$red + file_error: rgb(251, 73, 52) none +# +### PURPOSE +# + purpose_normal: none none + purpose_italic: rgb(177, 98, 134) none Italic + purpose_bold: rgb(177, 98, 134) none Bold + purpose_ellipsis: none none +# +### SCROLLBAR +# + # fg:$surface0 + scrollbar_track: rgb(49, 50, 68) none + # fg:$surface1 + scrollbar_thumb: rgb(88, 91, 112) none +# +### GOODTOBAD +# + good_to_bad_0: rgb(166, 227, 161) none + good_to_bad_1: rgb(148, 226, 213) none + good_to_bad_2: rgb(137, 220, 235) none + good_to_bad_3: rgb(116, 199, 236) none + good_to_bad_4: rgb(137, 180, 250) none + good_to_bad_5: rgb(180, 190, 254) none + good_to_bad_6: rgb(203, 166, 247) none + good_to_bad_7: rgb(250, 179, 135) none + good_to_bad_8: rgb(235, 160, 172) none + good_to_bad_9: rgb(243, 139, 168) none +} diff --git a/dot_config/broot/skins/dark-blue.hjson b/dot_config/broot/skins/dark-blue.hjson new file mode 100644 index 0000000..6516a6e --- /dev/null +++ b/dot_config/broot/skins/dark-blue.hjson @@ -0,0 +1,115 @@ +############################################################### +# A skin for a terminal with a dark background +# +# To create your own skin, copy this file, change the entries +# and import your skin file from the main conf file (look +# for "imports") +# +# Doc at https://dystroy.org/broot/skins/ +############################################################### + +############################################################### +# Skin +# If you want to change the colors of broot, +# uncomment the following block and start messing +# with the various values. +# A skin entry value is made of two parts separated with a '/': +# The first one is the skin for the active panel. +# The second one, optional, is the skin for non active panels. +# You may find explanations and other skins on +# https://dystroy.org/broot/skins +############################################################### +skin: { + default: gray(22) none / gray(20) none + tree: gray(8) None / gray(4) None + parent: gray(18) None / gray(13) None + file: gray(22) None / gray(15) None + directory: ansi(110) None bold / ansi(110) None + exe: Cyan None + link: Magenta None + pruning: gray(12) None Italic + perm__: gray(5) None + perm_r: ansi(94) None + perm_w: ansi(132) None + perm_x: ansi(65) None + owner: ansi(138) None + group: ansi(131) None + count: ansi(138) gray(4) + dates: ansi(66) None + sparse: ansi(214) None + content_extract: ansi(29) None + content_match: ansi(34) None + device_id_major: ansi(138) None + device_id_sep: ansi(102) None + device_id_minor: ansi(138) None + git_branch: ansi(178) None + git_insertions: ansi(28) None + git_deletions: ansi(160) None + git_status_current: gray(5) None + git_status_modified: ansi(28) None + git_status_new: ansi(94) None bold + git_status_ignored: gray(17) None + git_status_conflicted: ansi(88) None + git_status_other: ansi(88) None + selected_line: None gray(6) / None gray(4) + char_match: Green None + file_error: Red None + flag_label: gray(15) gray(2) + flag_value: ansi(178) gray(2) bold + input: White gray(2) / gray(15) None + status_error: gray(22) ansi(124) + status_job: ansi(220) gray(5) + status_normal: gray(20) gray(4) / gray(2) gray(2) + status_italic: ansi(178) gray(4) / gray(2) gray(2) + status_bold: ansi(178) gray(4) bold / gray(2) gray(2) + status_code: ansi(229) gray(4) / gray(2) gray(2) + status_ellipsis: gray(19) gray(1) / gray(2) gray(2) + purpose_normal: gray(20) gray(2) + purpose_italic: ansi(178) gray(2) + purpose_bold: ansi(178) gray(2) bold + purpose_ellipsis: gray(20) gray(2) + scrollbar_track: gray(7) None / gray(4) None + scrollbar_thumb: gray(22) None / gray(14) None + help_paragraph: gray(20) None + help_bold: ansi(178) None bold + help_italic: ansi(229) None + help_code: gray(21) gray(3) + help_headers: ansi(178) None + help_table_border: ansi(239) None + preview: gray(20) gray(1) / gray(18) gray(2) + preview_title: gray(23) gray(2) / gray(21) gray(2) + preview_line_number: gray(12) gray(3) + preview_separator: gray(5) None + preview_match: None ansi(29) + hex_null: gray(8) None + hex_ascii_graphic: gray(18) None + hex_ascii_whitespace: ansi(143) None + hex_ascii_other: ansi(215) None + hex_non_ascii: ansi(167) None + staging_area_title: gray(22) gray(2) / gray(20) gray(3) + mode_command_mark: gray(5) ansi(204) bold + good_to_bad_0: ansi(28) + good_to_bad_1: ansi(29) + good_to_bad_2: ansi(29) + good_to_bad_3: ansi(29) + good_to_bad_4: ansi(29) + good_to_bad_5: ansi(100) + good_to_bad_6: ansi(136) + good_to_bad_7: ansi(172) + good_to_bad_8: ansi(166) + good_to_bad_9: ansi(196) +} + +############################################################### +# Syntax Theme +# +# If you want to choose the theme used for preview, uncomment +# one of the following lines: +# +# syntax_theme: GitHub +# syntax_theme: SolarizedDark +# syntax_theme: SolarizedLight +syntax_theme: MochaDark +# syntax_theme: OceanDark +# syntax_theme: OceanLight + diff --git a/dot_config/broot/skins/dark-gruvbox.hjson b/dot_config/broot/skins/dark-gruvbox.hjson new file mode 100644 index 0000000..e62d583 --- /dev/null +++ b/dot_config/broot/skins/dark-gruvbox.hjson @@ -0,0 +1,88 @@ +############################################################### +# A skin for a terminal with a dark background +# This skin uses RGB values so won't work for some +# terminals. +# +# +# (initially contributed by @basbebe) +# +# Doc at https://dystroy.org/broot/skins/ +############################################################### + +skin: { + default: rgb(235, 219, 178) none / rgb(189, 174, 147) none + tree: rgb(70, 70, 80) None / rgb(60, 60, 60) None + parent: rgb(235, 219, 178) none / rgb(189, 174, 147) none Italic + file: None None / None None Italic + directory: rgb(131, 165, 152) None Bold / rgb(131, 165, 152) None + exe: rgb(184, 187, 38) None + link: rgb(104, 157, 106) None + pruning: rgb(124, 111, 100) None Italic + perm__: None None + perm_r: rgb(215, 153, 33) None + perm_w: rgb(204, 36, 29) None + perm_x: rgb(152, 151, 26) None + owner: rgb(215, 153, 33) None Bold + group: rgb(215, 153, 33) None + count: rgb(69, 133, 136) rgb(50, 48, 47) + dates: rgb(168, 153, 132) None + sparse: rgb(250, 189,47) None + content_extract: ansi(29) None Italic + content_match: ansi(34) None Bold + git_branch: rgb(251, 241, 199) None + git_insertions: rgb(152, 151, 26) None + git_deletions: rgb(190, 15, 23) None + git_status_current: rgb(60, 56, 54) None + git_status_modified: rgb(152, 151, 26) None + git_status_new: rgb(104, 187, 38) None Bold + git_status_ignored: rgb(213, 196, 161) None + git_status_conflicted: rgb(204, 36, 29) None + git_status_other: rgb(204, 36, 29) None + selected_line: None rgb(60, 56, 54) / None rgb(50, 48, 47) + char_match: rgb(250, 189, 47) None + file_error: rgb(251, 73, 52) None + flag_label: rgb(189, 174, 147) None + flag_value: rgb(211, 134, 155) None Bold + input: rgb(251, 241, 199) None / rgb(189, 174, 147) None Italic + status_error: rgb(213, 196, 161) rgb(204, 36, 29) + status_job: rgb(250, 189, 47) rgb(60, 56, 54) + status_normal: None rgb(40, 38, 37) / None None + status_italic: rgb(211, 134, 155) rgb(40, 38, 37) Italic / None None + status_bold: rgb(211, 134, 155) rgb(40, 38, 37) Bold / None None + status_code: rgb(251, 241, 199) rgb(40, 38, 37) / None None + status_ellipsis: rgb(251, 241, 199) rgb(40, 38, 37) Bold / None None + purpose_normal: None None + purpose_italic: rgb(177, 98, 134) None Italic + purpose_bold: rgb(177, 98, 134) None Bold + purpose_ellipsis: None None + scrollbar_track: rgb(80, 73, 69) None / rgb(50, 48, 47) None + scrollbar_thumb: rgb(213, 196, 161) None / rgb(102, 92, 84) None + help_paragraph: None None + help_bold: rgb(214, 93, 14) None Bold + help_italic: rgb(211, 134, 155) None Italic + help_code: rgb(142, 192, 124) rgb(50, 48, 47) + help_headers: rgb(254, 128, 25) None Bold + help_table_border: rgb(80, 73, 69) None + preview_title: rgb(235, 219, 178) rgb(40, 40, 40) / rgb(189, 174, 147) rgb(40, 40, 40) + preview: rgb(235, 219, 178) rgb(40, 40, 40) / rgb(235, 219, 178) rgb(40, 40, 40) + preview_line_number: rgb(124, 111, 100) None / rgb(124, 111, 100) rgb(40, 40, 40) + preview_separator: rgb(70, 70, 80) None / rgb(60, 60, 60) None + preview_match: None ansi(29) Bold + hex_null: rgb(189, 174, 147) None + hex_ascii_graphic: rgb(213, 196, 161) None + hex_ascii_whitespace: rgb(152, 151, 26) None + hex_ascii_other: rgb(254, 128, 25) None + hex_non_ascii: rgb(214, 93, 14) None + staging_area_title: rgb(235, 219, 178) rgb(40, 40, 40) / rgb(189, 174, 147) rgb(40, 40, 40) + mode_command_mark: gray(5) ansi(204) Bold + good_to_bad_0: ansi(28) + good_to_bad_1: ansi(29) + good_to_bad_2: ansi(29) + good_to_bad_3: ansi(29) + good_to_bad_4: ansi(29) + good_to_bad_5: ansi(100) + good_to_bad_6: ansi(136) + good_to_bad_7: ansi(172) + good_to_bad_8: ansi(166) + good_to_bad_9: ansi(196) +} diff --git a/dot_config/broot/skins/dark-orange.hjson b/dot_config/broot/skins/dark-orange.hjson new file mode 100644 index 0000000..f56f5a9 --- /dev/null +++ b/dot_config/broot/skins/dark-orange.hjson @@ -0,0 +1,110 @@ +############################################################### +# A skin for a terminal with a dark background +# +# To create your own skin, copy this file, change the entries +# and import your skin file from the main conf file (look +# for "imports") +# +# Doc at https://dystroy.org/broot/skins/ +############################################################### + +############################################################### +# Skin +# If you want to change the colors of broot, +# uncomment the following bloc and start messing +# with the various values. +# A skin entry value is made of two parts separated with a '/': +# The first one is the skin for the active panel. +# The second one, optional, is the skin for non active panels. +# You may find explanations and other skins on +# https://dystroy.org/broot/skins +############################################################### +skin: { + default: none none / gray(20) none + tree: ansi(94) None / gray(3) None + parent: gray(18) None / gray(13) None + file: gray(20) None / gray(15) None + directory: ansi(208) None Bold / ansi(172) None bold + exe: Cyan None + link: Magenta None + pruning: gray(12) None Italic + perm__: gray(5) None + perm_r: ansi(94) None + perm_w: ansi(132) None + perm_x: ansi(65) None + owner: ansi(138) None + group: ansi(131) None + count: ansi(136) gray(3) + dates: ansi(66) None + sparse: ansi(214) None + content_extract: ansi(29) None + content_match: ansi(34) None + git_branch: ansi(229) None + git_insertions: ansi(28) None + git_deletions: ansi(160) None + git_status_current: gray(5) None + git_status_modified: ansi(28) None + git_status_new: ansi(94) None Bold + git_status_ignored: gray(17) None + git_status_conflicted: ansi(88) None + git_status_other: ansi(88) None + selected_line: None gray(5) / None gray(4) + char_match: Yellow None + file_error: Red None + flag_label: gray(15) None + flag_value: ansi(208) None Bold + input: White None / gray(15) gray(2) + status_error: gray(22) ansi(124) + status_job: ansi(220) gray(5) + status_normal: gray(20) gray(3) / gray(2) gray(2) + status_italic: ansi(208) gray(3) / gray(2) gray(2) + status_bold: ansi(208) gray(3) Bold / gray(2) gray(2) + status_code: ansi(229) gray(3) / gray(2) gray(2) + status_ellipsis: gray(19) gray(1) / gray(2) gray(2) + purpose_normal: gray(20) gray(2) + purpose_italic: ansi(178) gray(2) + purpose_bold: ansi(178) gray(2) Bold + purpose_ellipsis: gray(20) gray(2) + scrollbar_track: gray(7) None / gray(4) None + scrollbar_thumb: gray(22) None / gray(14) None + help_paragraph: gray(20) None + help_bold: ansi(208) None Bold + help_italic: ansi(166) None + help_code: gray(21) gray(3) + help_headers: ansi(208) None + help_table_border: ansi(239) None + preview: gray(20) gray(1) / gray(18) gray(2) + preview_line_number: gray(12) gray(3) + preview_separator: ansi(94) None / gray(3) None + preview_match: None ansi(29) + hex_null: gray(11) None + hex_ascii_graphic: gray(18) None + hex_ascii_whitespace: ansi(143) None + hex_ascii_other: ansi(215) None + hex_non_ascii: ansi(167) None + good_to_bad_0: ansi(28) + good_to_bad_1: ansi(29) + good_to_bad_2: ansi(29) + good_to_bad_3: ansi(29) + good_to_bad_4: ansi(29) + good_to_bad_5: ansi(100) + good_to_bad_6: ansi(136) + good_to_bad_7: ansi(172) + good_to_bad_8: ansi(166) + good_to_bad_9: ansi(196) +} + + +############################################################### +# Syntax Theme +# +# If you want to choose the theme used for preview, uncomment +# one of the following lines: +# +# syntax_theme: GitHub +syntax_theme: SolarizedDark +# syntax_theme: SolarizedLight +# syntax_theme: MochaDark +# syntax_theme: OceanDark +# syntax_theme: OceanLight + diff --git a/dot_config/broot/skins/native-16.hjson b/dot_config/broot/skins/native-16.hjson new file mode 100644 index 0000000..a220c10 --- /dev/null +++ b/dot_config/broot/skins/native-16.hjson @@ -0,0 +1,132 @@ +############################################################### +# 16 ANSI color theme. Colors in this theme are restricted from +# ANSI color 0 - 15. This will allow the theme to adapt to your +# terminal emulator's theme. Note that, for now, the preview +# mode does not yet support this theme because of syntect not +# having a 16 ansi color theme. +# +# More info at https://jeffkreeftmeijer.com/vim-16-color/ +# Doc at https://dystroy.org/broot/skins/ +############################################################### + +skin: { + directory: ansi(12) + file: ansi(7) + pruning: ansi(8) none italic + selected_line: none ansi(0) + tree: ansi(8) + + # Search + char_match: ansi(3) none underlined + parent: ansi(4) none bold + + # File properties + exe: ansi(2) + link: ansi(13) + sparse: ansi(12) + + # Prompt + input: ansi(6) + + # Status bar + status_bold: ansi(7) ansi(8) bold + status_code: ansi(10) ansi(8) + status_ellipsis: ansi(7) ansi(8) + status_error: ansi(7) ansi(8) + status_italic: ansi(7) ansi(8) italic + status_job: ansi(7) ansi(8) + status_normal: ansi(7) ansi(8) + + # Flag status + flag_label: ansi(6) + flag_value: ansi(14) none bold + + # Background + default: none none + + # Scrollbar + scrollbar_track: ansi(0) + scrollbar_thumb: ansi(3) + + # Git + git_branch: ansi(13) + git_deletions: ansi(1) + git_insertions: ansi(2) + git_status_conflicted: ansi(1) + git_status_current: ansi(6) + git_status_ignored: ansi(8) + git_status_modified: ansi(3) + git_status_new: ansi(2) none bold + git_status_other: ansi(5) + + # Staging area + staging_area_title: ansi(3) + + # Documentation + help_bold: ansi(7) none bold + help_code: ansi(4) + help_headers: ansi(3) + help_italic: ansi(7) none italic + help_paragraph: ansi(7) + help_table_border: ansi(8) + + # Device column + device_id_major: ansi(5) + device_id_minor: ansi(5) + device_id_sep: ansi(5) + + # Counts column + count: ansi(13) + + # Dates column + dates: ansi(6) + + # Permissions column + group: ansi(3) + owner: ansi(3) + perm__: ansi(8) + perm_r: ansi(3) + perm_w: ansi(1) + perm_x: ansi(2) + + # Hex preview + hex_null: ansi(8) + hex_ascii_graphic: ansi(2) + hex_ascii_whitespace: ansi(3) + hex_ascii_other: ansi(4) + hex_non_ascii: ansi(5) + + # Preview + # preview: none + # preview_line_number: none + # preview_match: none + # preview_title: none + + # Used for displaying errors + file_error: ansi(1) + + # Content searches + content_extract: ansi(7) + content_match: ansi(3) none underlined + + # Used in status line + purpose_bold: ansi(0) ansi(7) bold + purpose_ellipsis: ansi(0) + purpose_italic: ansi(0) ansi(7) italic + purpose_normal: ansi(0) + + # Modal indicator + mode_command_mark: ansi(7) ansi(4) + + # File system occupation + good_to_bad_0: ansi(2) + good_to_bad_1: ansi(2) + good_to_bad_2: ansi(2) + good_to_bad_3: ansi(2) + good_to_bad_4: ansi(2) + good_to_bad_5: ansi(1) + good_to_bad_6: ansi(1) + good_to_bad_7: ansi(1) + good_to_bad_8: ansi(1) + good_to_bad_9: ansi(1) +} diff --git a/dot_config/broot/skins/solarized-dark.hjson b/dot_config/broot/skins/solarized-dark.hjson new file mode 100644 index 0000000..fdea579 --- /dev/null +++ b/dot_config/broot/skins/solarized-dark.hjson @@ -0,0 +1,66 @@ +// contributed by [@danieltrautmann](https://github.com/danieltrautmann) +// +// +// The Solarized Dark skin uses RGB values, so it might not work well with some +// terminals +// +// Doc at https://dystroy.org/broot/skins/ + +skin: { + default: "rgb(131, 148, 150) rgb(0, 43, 54) / rgb(131, 148, 150) rgb(7, 54, 66)" // base0 base03 / base01 base02 + tree: "rgb(88, 110, 117) none" // base01 default + file: "none none" // default default + directory: "rgb(38, 139, 210) none bold" // blue default bold + exe: "rgb(211, 1, 2) none" // red default + link: "rgb(211, 54, 130) none" // magenta default + pruning: "rgb(88, 110, 117) none italic" // base01 default italic + perm__: "rgb(88, 110, 117) none" // base01 default + perm_r: "none none" // default default + perm_w: "none none" // default default + perm_x: "none none" // default default + owner: "rgb(88, 110, 117) none" // base01 default + group: "rgb(88, 110, 117) none" // base01 default + sparse: "none none" // default default + git_branch: "rgb(147, 161, 161) none" // base1 default + git_insertions: "rgb(133, 153, 0) none" // green default + git_deletions: "rgb(211, 1, 2) none" // red default + git_status_current: "none none" // default default + git_status_modified: "rgb(181, 137, 0) none" // yellow default + git_status_new: "rgb(133, 153, 0) none" // green default + git_status_ignored: "rgb(88, 110, 117) none" // base01 default + git_status_conflicted: "rgb(211, 1, 2) none" // red default + git_status_other: "rgb(211, 1, 2) none" // red default + selected_line: "none rgb(7, 54, 66)" // default base02 + char_match: "rgb(133, 153, 0) none underlined" // green default underlined + file_error: "rgb(203, 75, 22) none italic" // orange default italic + flag_label: "none none" // default default + flag_value: "rgb(181, 137, 0) none bold" // yellow default bold + input: "none none" // default default + status_error: "rgb(203, 75, 22) rgb(7, 54, 66)" // orange base02 + status_job: "rgb(108, 113, 196) rgb(7, 54, 66) bold" // violet base02 bold + status_normal: "none rgb(7, 54, 66)" // default base02 + status_italic: "rgb(181, 137, 0) rgb(7, 54, 66)" // yellow base02 + status_bold: "rgb(147, 161, 161) rgb(7, 54, 66) bold" // base1 base02 bold + status_code: "rgb(108, 113, 196) rgb(7, 54, 66)" // violet base02 + status_ellipsis: "none rgb(7, 54, 66)" // default base02 + scrollbar_track: "rgb(7, 54, 66) none" // base02 default + scrollbar_thumb: "none none" // default default + help_paragraph: "none none" // default default + help_bold: "rgb(147, 161, 161) none bold" // base1 default bold + help_italic: "rgb(147, 161, 161) none italic" // base1 default italic + help_code: "rgb(147, 161, 161) rgb(7, 54, 66)" // base1 base02 + help_headers: "rgb(181, 137, 0) none" // yellow default + help_table_border: "none none" // default default + preview_title: "gray(20) rgb(0, 43, 54)" + staging_area_title: "gray(22) rgb(0, 43, 54)" + good_to_bad_0: "ansi(28)" // green + good_to_bad_1: "ansi(29)" + good_to_bad_2: "ansi(29)" + good_to_bad_3: "ansi(29)" + good_to_bad_4: "ansi(29)" + good_to_bad_5: "ansi(100)" + good_to_bad_6: "ansi(136)" + good_to_bad_7: "ansi(172)" + good_to_bad_8: "ansi(166)" + good_to_bad_9: "ansi(196)" // red +} diff --git a/dot_config/broot/skins/solarized-light.hjson b/dot_config/broot/skins/solarized-light.hjson new file mode 100644 index 0000000..6e19275 --- /dev/null +++ b/dot_config/broot/skins/solarized-light.hjson @@ -0,0 +1,118 @@ +// contributed by [@danieltrautmann](https://github.com/danieltrautmann) +// +// +// The Solarized Light skin uses RGB values, so it might not work well with some +// terminals +// +// If you prefer to keep the background the same as your terminal background, change +// the "default" entry to +// default: "none none / rgb(147, 161, 161) none" +// +// Doc at https://dystroy.org/broot/skins/ + +skin: { + // base00 default / base1 base2 + default: "rgb(101, 123, 131) none / rgb(147, 161, 161) none" + // base1 default + tree: "rgb(147, 161, 161) none" + // default default + file: "none none" + // blue default bold + directory: "rgb(38, 139, 210) none bold" + // red default + exe: "rgb(211, 1, 2) none" + // magenta default + link: "rgb(211, 54, 130) none" + // base1 default italic + pruning: "rgb(147, 161, 161) none italic" + // base1 default + perm__: "rgb(147, 161, 161) none" + // default default + perm_r: "none none" + // default default + perm_w: "none none" + // default default + perm_x: "none none" + // base1 default + owner: "rgb(147, 161, 161) none" + // base1 default + group: "rgb(147, 161, 161) none" + // default default + sparse: "none none" + // base01 default + git_branch: "rgb(88, 110, 117) none" + // green default + git_insertions: "rgb(133, 153, 0) none" + // red default + git_deletions: "rgb(211, 1, 2) none" + // default default + git_status_current: "none none" + // yellow default + git_status_modified: "rgb(181, 137, 0) none" + // green default + git_status_new: "rgb(133, 153, 0) none" + // base1 default + git_status_ignored: "rgb(147, 161, 161) none" + // red default + git_status_conflicted: "rgb(211, 1, 2) none" + // red default + git_status_other: "rgb(211, 1, 2) none" + // default base2 + selected_line: "none rgb(238, 232, 213)" + // green default underlined + char_match: "rgb(133, 153, 0) none underlined" + // orange default italic + file_error: "rgb(203, 75, 22) none italic" + // default default + flag_label: "none none" + // yellow default bold + flag_value: "rgb(181, 137, 0) none bold" + // default default + input: "none none" + // orange base2 + status_error: "rgb(203, 75, 22) rgb(238, 232, 213)" + // violet base2 bold + status_job: "rgb(108, 113, 196) rgb(238, 232, 213) bold" + // default base2 + status_normal: "none rgb(238, 232, 213)" + // yellow base2 + status_italic: "rgb(181, 137, 0) rgb(238, 232, 213)" + // base01 base2 bold + status_bold: "rgb(88, 110, 117) rgb(238, 232, 213) bold" + // violet base2 + status_code: "rgb(108, 113, 196) rgb(238, 232, 213)" + // default base2 + status_ellipsis: "none rgb(238, 232, 213)" + // base2 default + scrollbar_track: "rgb(238, 232, 213) none" + // default default + scrollbar_thumb: "none none" + // default default + help_paragraph: "none none" + // base01 default bold + help_bold: "rgb(88, 110, 117) none bold" + // base01 default italic + help_italic: "rgb(88, 110, 117) none italic" + // base01 base2 + help_code: "rgb(88, 110, 117) rgb(238, 232, 213)" + // yellow default + help_headers: "rgb(181, 137, 0) none" + // default default + help_table_border: "none none" + preview_title: "rgb(147, 161, 161) rgb(238, 232, 213)" + preview: "rgb(101, 123, 131) rgb(253, 246, 227) / rgb(147, 161, 161) rgb(238, 232, 213)" + preview_line_number: "rgb(147, 161, 161) rgb(238, 232, 213)" + preview_separator: "rgb(147, 161, 161) rgb(238, 232, 213)" + preview_match: "None ansi(29)" + staging_area_title: "gray(22) rgb(253, 246, 227)" + good_to_bad_0: ansi(28) + good_to_bad_1: ansi(29) + good_to_bad_2: ansi(29) + good_to_bad_3: ansi(29) + good_to_bad_4: ansi(29) + good_to_bad_5: ansi(100) + good_to_bad_6: ansi(136) + good_to_bad_7: ansi(172) + good_to_bad_8: ansi(166) + good_to_bad_9: ansi(196) +} diff --git a/dot_config/broot/skins/white.hjson b/dot_config/broot/skins/white.hjson new file mode 100644 index 0000000..908e648 --- /dev/null +++ b/dot_config/broot/skins/white.hjson @@ -0,0 +1,84 @@ +############################################################### +# A skin for a terminal with a white background +# +# To create your own skin, copy this file, change the entries +# and import your skin file from the main conf file (look +# for "imports") +# +# Doc at https://dystroy.org/broot/skins/ +############################################################### +syntax_theme: base16-ocean.light + +skin: { + default: gray(1) None + tree: gray(7) None / gray(18) None + file: gray(3) None / gray(8) None + directory: ansi(25) None Bold / ansi(25) None + exe: ansi(130) None + link: Magenta None + pruning: gray(12) None Italic + perm__: gray(5) None + perm_r: ansi(94) None + perm_w: ansi(132) None + perm_x: ansi(65) None + owner: ansi(138) None + group: ansi(131) None + dates: ansi(66) None + sparse: ansi(214) None + git_branch: ansi(229) None + git_insertions: ansi(28) None + git_deletions: ansi(160) None + git_status_current: gray(5) None + git_status_modified: ansi(28) None + git_status_new: ansi(94) None Bold + git_status_ignored: gray(17) None + git_status_conflicted: ansi(88) None + git_status_other: ansi(88) None + selected_line: None gray(19) / None gray(21) + char_match: ansi(22) None + file_error: Red None + flag_label: gray(9) None + flag_value: ansi(166) None Bold + input: gray(1) None / gray(4) gray(20) + status_error: gray(22) ansi(124) + status_normal: gray(2) gray(20) + status_job: ansi(220) gray(5) + status_italic: ansi(166) gray(20) + status_bold: ansi(166) gray(20) + status_code: ansi(17) gray(20) + status_ellipsis: gray(19) gray(15) + purpose_normal: gray(20) gray(2) + purpose_italic: ansi(178) gray(2) + purpose_bold: ansi(178) gray(2) Bold + purpose_ellipsis: gray(20) gray(2) + scrollbar_track: gray(20) none + scrollbar_thumb: ansi(238) none + help_paragraph: gray(2) none + help_bold: ansi(202) none bold + help_italic: ansi(202) none italic + help_code: gray(5) gray(22) + help_headers: ansi(202) none + help_table_border: ansi(239) None + preview_title: gray(3) None / gray(5) None + preview: gray(5) gray(23) / gray(7) gray(23) + preview_line_number: gray(6) gray(20) + preview_separator: gray(7) None / gray(18) None + preview_match: None ansi(29) Underlined + hex_null: gray(15) None + hex_ascii_graphic: gray(2) None + hex_ascii_whitespace: ansi(143) None + hex_ascii_other: ansi(215) None + hex_non_ascii: ansi(167) None + staging_area_title: gray(8) None / gray(13) None + mode_command_mark: gray(15) ansi(204) Bold + good_to_bad_0: ansi(28) + good_to_bad_1: ansi(29) + good_to_bad_2: ansi(29) + good_to_bad_3: ansi(29) + good_to_bad_4: ansi(29) + good_to_bad_5: ansi(100) + good_to_bad_6: ansi(136) + good_to_bad_7: ansi(172) + good_to_bad_8: ansi(166) + good_to_bad_9: ansi(196) +} diff --git a/dot_config/broot/verbs.hjson b/dot_config/broot/verbs.hjson new file mode 100644 index 0000000..17d1f9e --- /dev/null +++ b/dot_config/broot/verbs.hjson @@ -0,0 +1,161 @@ +############################################################### +# This file contains the verb definitions for broot +# +# Some verbs here are examples and not enabled by default: you +# need to uncomment them if you want to use them. +# +# Documentation at https://dystroy.org/broot/verbs/ +############################################################### + +verbs: [ + + # You should customize this standard opening of text files. + # If you edit text files in your terminal (vi, emacs, helix, eg.), then + # you'll find it convenient to change the 'key' from 'ctrl-e' to 'enter'. + # + # If $EDITOR isn't set on your computer, you should either set it using + # something similar to + # export EDITOR=/usr/local/bin/nvim + # or just replace it with your editor of choice in the 'execution' + # pattern. + # If your editor is able to open a file on a specific line, use {line} + # so that you may jump directly at the right line from a preview or + # a content search. + # Examples depending on your favourite editor: + # execution: "nvim +{line} {file}" + # execution: "helix {file}:{line}" + { + invocation: edit + shortcut: e + key: enter + apply_to: text_file + execution: "$EDITOR {file}" + leave_broot: true + } + + # Example 1: launching `tail -n` on the selected file (leaving broot) + # { + # name: tail_lines + # invocation: tl {lines_count} + # execution: "tail -f -n {lines_count} {file}" + # } + + # Example 2: creating a new file without leaving broot + # { + # name: touch + # invocation: touch {new_file} + # execution: "touch {directory}/{new_file}" + # leave_broot: false + # } + + # A convenient shortcut to create new text files in + # the current directory or below + { + invocation: create {subpath} + execution: "$EDITOR {directory}/{subpath}" + leave_broot: false + } + + { + invocation: git_diff + shortcut: gd + leave_broot: false + execution: "git difftool -y {file}" + } + + # On ctrl-b, propose the creation of a copy of the selection. + # While this might occasionally be useful, this verb is mostly here + # as an example to demonstrate rare standard groups like {file-stem} + # and {file-dot-extension} and the auto_exec verb property which + # allows verbs to stay unexecuted until you hit enter + { + invocation: "backup {version}" + key: ctrl-b + leave_broot: false + auto_exec: false + execution: "cp -r {file} {parent}/{file-stem}-{version}{file-dot-extension}" + } + + # By default, `rm` does the system rm, and completely removes + # the file. If you prefer to have the file moved to the system + # trash, you may use the ':trash' internal with the verb below: + # { + # invocation: "rm" + # internal: "trash" + # leave_broot: false + # } + + # This verb lets you launch a terminal on ctrl-T + # (on exit you'll be back in broot) + { + invocation: terminal + key: ctrl-t + execution: "$SHELL" + set_working_dir: true + leave_broot: false + } + + # Here's an example of a verb needing the shell capabilities. + # It copies all children of the currently selected directory + # to a destination you type. + # It uses a star, which needs the shell for expansion. That's + # why such verb must have the `from_shell: true` parameter. + # { + # invocation: "cpa {dest}" + # external: "cp -r {directory}/* {dest}" + # from_shell: true + # } + + # Here's an example of a shortcut bringing you to your home directory + # { + # invocation: home + # key: ctrl-home + # execution: ":focus ~" + # } + + # Here's going to the work-dir root of the current git repository + # { + # invocation: gtr + # execution: ":focus {git-root}" + # } + + # A popular set of shortcuts for going up and down: + # + # { + # key: ctrl-k + # execution: ":line_up" + # } + # { + # key: ctrl-j + # execution: ":line_down" + # } + # { + # key: ctrl-u + # execution: ":page_up" + # } + # { + # key: ctrl-d + # execution: ":page_down" + # } + + # If you develop using git, you might like to often switch + # to the git status filter: + # { + # key: alt-g + # execution: ":toggle_git_status" + # } + + # You can reproduce the bindings of Norton Commander + # on copying or moving to the other panel: + # { + # key: F5 + # external: "cp -r {file} {other-panel-directory}" + # leave_broot: false + # } + # { + # key: F6 + # external: "mv {file} {other-panel-directory}" + # leave_broot: false + # } +] + diff --git a/dot_config/fd/ignore b/dot_config/fd/ignore new file mode 100644 index 0000000..2b6de71 --- /dev/null +++ b/dot_config/fd/ignore @@ -0,0 +1,186 @@ +# Version control +.git/ +.svn/ +.hg/ +.bzr/ + +# macOS +.DS_Store +.AppleDouble +.LSOverride +Icon\r +._* +.Spotlight-V100 +.Trashes + +# Dependencies +node_modules/ +vendor/ +bower_components/ +jspm_packages/ +.npm/ +.yarn/ + +# Build outputs +dist/ +build/ +out/ +target/ +*.o +*.so +*.dylib +*.dll +*.exe + +# IDE and editors +.idea/ +.vscode/ +*.swp +*.swo +*~ +.project +.classpath +.settings/ + +# Python +__pycache__/ +*.py[cod] +*$py.class +.Python +venv/ +env/ +.virtualenv/ +.tox/ +.pytest_cache/ + +# Ruby +.bundle/ +.vendor/ +Gemfile.lock + +# Logs and databases +*.log +*.sqlite +*.sqlite3 +*.db + +# Temporary files +tmp/ +temp/ +cache/ +.cache/ +.tmp/ + +# Coverage reports +coverage/ +.coverage +htmlcov/ +.nyc_output/ + +# Environment files +.env +.env.local +.env.*.local + +# Rust +Cargo.lock +target/ + +# Go +go.sum +vendor/ + +# Video +*.mp4 +*.avi +*.mov +*.mkv +*.flv +*.wmv +*.webm +*.m4v +*.mpg +*.mpeg +*.3gp + +# Audio +*.mp3 +*.wav +*.flac +*.aac +*.ogg +*.wma +*.m4a +*.opus +*.aiff +*.ape + +# Images +*.png +*.jpg +*.jpeg +*.gif +*.bmp +*.svg +*.ico +*.tiff +*.tif +*.webp +*.psd +*.raw +*.heif +*.heic +*.HEIC + +# Documents +*.pdf +*.doc +*.docx +*.xls +*.xlsx +*.ppt +*.pptx +*.odt +*.ods +*.odp + +# Archives +*.zip +*.tar +*.gz +*.bz2 +*.7z +*.rar +*.xz +*.Z +*.deb +*.rpm +*.dmg +*.pkg +*.iso + +# Fonts +*.ttf +*.otf +*.woff +*.woff2 +*.eot + +# Adobe/Design +*.afphoto +*.afdesign +*.ai +*.eps +*.sketch +*.fig +*.xd + +# Game files +*.mcpack +*.pak +*.unity3d + +# Binary/Compiled +*.bin +*.dat +*.data diff --git a/dot_gitmux.conf b/dot_config/gitmux/dot_gitmux.conf similarity index 100% rename from dot_gitmux.conf rename to dot_config/gitmux/dot_gitmux.conf diff --git a/dot_hammerspoon/Spoons/.keep b/dot_config/hammerspoon/Spoons/.keep similarity index 100% rename from dot_hammerspoon/Spoons/.keep rename to dot_config/hammerspoon/Spoons/.keep diff --git a/dot_hammerspoon/init.lua b/dot_config/hammerspoon/init.lua similarity index 100% rename from dot_hammerspoon/init.lua rename to dot_config/hammerspoon/init.lua diff --git a/dot_config/nvim/after/queries/blade/highlights.scm b/dot_config/nvim/after/queries/blade/highlights.scm new file mode 100644 index 0000000..9edc25f --- /dev/null +++ b/dot_config/nvim/after/queries/blade/highlights.scm @@ -0,0 +1,9 @@ +(directive) @function +(directive_start) @function +(directive_end) @function +(comment) @comment +((parameter) @include (#set! "priority" 110)) +((php_only) @include (#set! "priority" 110)) +((bracket_start) @function (#set! "priority" 120)) +((bracket_end) @function (#set! "priority" 120)) +(keyword) @function diff --git a/dot_config/nvim/after/queries/blade/injections.scm b/dot_config/nvim/after/queries/blade/injections.scm new file mode 100644 index 0000000..8f7af78 --- /dev/null +++ b/dot_config/nvim/after/queries/blade/injections.scm @@ -0,0 +1,4 @@ +((text) @injection.content + (#not-has-ancestor? @injection.content "envoy") + (#set! injection.combined) + (#set! injection.language php)) diff --git a/dot_config/nvim/colors/lpcstudio.lua b/dot_config/nvim/colors/lpcstudio.lua new file mode 100644 index 0000000..d1434e7 --- /dev/null +++ b/dot_config/nvim/colors/lpcstudio.lua @@ -0,0 +1,571 @@ +------------------------------------------------------------------------------- +-- Neovim Colorscheme for Little Plummer Creek Studio +------------------------------------------------------------------------------- +-- +-- Jump To: +-- 1. Setup +-- 2. Palette +-- 3. Groups +-- 4. Do the Thing! +-- + +------------------------------------------------------------------------------- +-- Setup +------------------------------------------------------------------------------- +-- +-- Setup the Colorscheme boilerplate. This is a light theme. +-- + +vim.cmd('highlight clear') + +if vim.fn.exists('syntax_on') then + vim.cmd('syntax reset') +end + +vim.o.background = 'light' + +vim.g.colors_name = 'lpcstudio' + +------------------------------------------------------------------------------- +-- Palette +------------------------------------------------------------------------------- +-- +-- Define the Palette as hue to be used in highlight groups. Based on the +-- TailwindCSS colors at https://tailwindcss.com/docs/customizing-colors +-- + +local hue = { + base = { + ["50"] = "#FDFDFF", + ["100"] = "#F7F8FA", + ["200"] = "#EBECF0", + ["250"] = "#DCDDE1", + ["300"] = "#CCCDD1", + ["350"] = "#BDBFC4", + ["400"] = "#A3A6AE", + ["500"] = "#80838B", + ["600"] = "#696C74", + ["700"] = "#54575F", + ["800"] = "#3E4149", + ["900"] = "#2B2E35", + ["950"] = "#1A1C22", + }, + slate = { + ["50"] = "#f8fafc", + ["100"] = "#f1f5f9", + ["200"] = "#e2e8f0", + ["300"] = "#cbd5e1", + ["400"] = "#94a3b8", + ["450"] = "#6C7C94", + ["500"] = "#64748b", + ["600"] = "#475569", + ["700"] = "#334155", + ["800"] = "#1e293b", + ["900"] = "#0f172a", + ["950"] = "#020617", + }, + gray = { + ["50"] = "#f9fafb", + ["100"] = "#f3f4f6", + ["200"] = "#e5e7eb", + ["300"] = "#d1d5db", + ["400"] = "#9ca3af", + ["500"] = "#6b7280", + ["600"] = "#4b5563", + ["700"] = "#374151", + ["800"] = "#1f2937", + ["900"] = "#111827", + ["950"] = "#030712", + }, + zinc = { + ["50"] = "#fafafa", + ["100"] = "#f4f4f5", + ["200"] = "#e4e4e7", + ["300"] = "#d4d4d8", + ["400"] = "#a1a1aa", + ["500"] = "#71717a", + ["600"] = "#52525b", + ["700"] = "#3f3f46", + ["800"] = "#27272a", + ["900"] = "#18181b", + ["950"] = "#09090b", + }, + neutral = { + ["50"] = "#fafafa", + ["100"] = "#f5f5f5", + ["200"] = "#e5e5e5", + ["300"] = "#d4d4d4", + ["400"] = "#a3a3a3", + ["500"] = "#737373", + ["600"] = "#525252", + ["700"] = "#404040", + ["800"] = "#262626", + ["900"] = "#171717", + ["950"] = "#0a0a0a", + }, + stone = { + ["50"] = "#fafaf9", + ["100"] = "#f5f5f4", + ["200"] = "#e7e5e4", + ["300"] = "#d6d3d1", + ["400"] = "#a8a29e", + ["500"] = "#78716c", + ["600"] = "#57534e", + ["700"] = "#44403c", + ["800"] = "#292524", + ["900"] = "#1c1917", + ["950"] = "#0c0a09", + }, + red = { + ["50"] = "#fef2f2", + ["100"] = "#fee2e2", + ["200"] = "#fecaca", + ["300"] = "#fca5a5", + ["400"] = "#f87171", + ["500"] = "#ef4444", + ["600"] = "#dc2626", + ["700"] = "#b91c1c", + ["800"] = "#991b1b", + ["900"] = "#7f1d1d", + ["950"] = "#450a0a", + }, + orange = { + ["50"] = "#fff7ed", + ["100"] = "#ffedd5", + ["200"] = "#fed7aa", + ["300"] = "#fdba74", + ["400"] = "#fb923c", + ["500"] = "#f97316", + ["600"] = "#ea580c", + ["700"] = "#c2410c", + ["800"] = "#9a3412", + ["900"] = "#7c2d12", + ["950"] = "#431407", + }, + amber = { + ["50"] = "#fffbeb", + ["100"] = "#fef3c7", + ["200"] = "#fde68a", + ["300"] = "#fcd34d", + ["400"] = "#fbbf24", + ["500"] = "#f59e0b", + ["600"] = "#d97706", + ["700"] = "#b45309", + ["800"] = "#92400e", + ["900"] = "#78350f", + ["950"] = "#451a03", + }, + yellow = { + ["50"] = "#fefce8", + ["100"] = "#fef9c3", + ["200"] = "#fef08a", + ["300"] = "#fde047", + ["400"] = "#facc15", + ["500"] = "#eab308", + ["600"] = "#ca8a04", + ["700"] = "#a16207", + ["800"] = "#854d0e", + ["900"] = "#713f12", + ["950"] = "#422006", + }, + lime = { + ["50"] = "#f7fee7", + ["100"] = "#ecfccb", + ["200"] = "#d9f99d", + ["300"] = "#bef264", + ["400"] = "#a3e635", + ["500"] = "#84cc16", + ["600"] = "#65a30d", + ["700"] = "#4d7c0f", + ["800"] = "#3f6212", + ["900"] = "#365314", + ["950"] = "#1a2e05", + }, + green = { + ["50"] = "#f0fdf4", + ["100"] = "#dcfce7", + ["200"] = "#bbf7d0", + ["300"] = "#86efac", + ["400"] = "#4ade80", + ["500"] = "#22c55e", + ["600"] = "#16a34a", + ["700"] = "#15803d", + ["800"] = "#166534", + ["900"] = "#14532d", + ["950"] = "#052e16", + }, + emerald = { + ["50"] = "#ecfdf5", + ["100"] = "#d1fae5", + ["200"] = "#a7f3d0", + ["300"] = "#6ee7b7", + ["400"] = "#34d399", + ["500"] = "#10b981", + ["600"] = "#059669", + ["700"] = "#047857", + ["800"] = "#065f46", + ["900"] = "#064e3b", + ["950"] = "#022c22", + }, + teal = { + ["50"] = "#f0fdfa", + ["100"] = "#ccfbf1", + ["200"] = "#99f6e4", + ["300"] = "#5eead4", + ["400"] = "#2dd4bf", + ["500"] = "#14b8a6", + ["600"] = "#0d9488", + ["700"] = "#0f766e", + ["800"] = "#115e59", + ["900"] = "#134e4a", + ["950"] = "#042f2e", + }, + cyan = { + ["50"] = "#ecfeff", + ["100"] = "#cffafe", + ["200"] = "#a5f3fc", + ["300"] = "#67e8f9", + ["400"] = "#22d3ee", + ["500"] = "#06b6d4", + ["600"] = "#0891b2", + ["700"] = "#0e7490", + ["800"] = "#155e75", + ["900"] = "#164e63", + ["950"] = "#083344", + }, + sky = { + ["50"] = "#f0f9ff", + ["100"] = "#e0f2fe", + ["200"] = "#bae6fd", + ["300"] = "#7dd3fc", + ["400"] = "#38bdf8", + ["500"] = "#0ea5e9", + ["600"] = "#0284c7", + ["700"] = "#0369a1", + ["800"] = "#075985", + ["900"] = "#0c4a6e", + ["950"] = "#082f49", + }, + blue = { + ["50"] = "#eff6ff", + ["100"] = "#dbeafe", + ["200"] = "#bfdbfe", + ["300"] = "#93c5fd", + ["400"] = "#60a5fa", + ["500"] = "#3b82f6", + ["600"] = "#2563eb", + ["700"] = "#1d4ed8", + ["800"] = "#1e40af", + ["900"] = "#1e3a8a", + ["950"] = "#172554", + }, + indigo = { + ["50"] = "#eef2ff", + ["100"] = "#e0e7ff", + ["200"] = "#c7d2fe", + ["300"] = "#a5b4fc", + ["400"] = "#818cf8", + ["500"] = "#6366f1", + ["600"] = "#4f46e5", + ["700"] = "#4338ca", + ["800"] = "#3730a3", + ["900"] = "#312e81", + ["950"] = "#1e1b4b", + }, + violet = { + ["50"] = "#f5f3ff", + ["100"] = "#ede9fe", + ["200"] = "#ddd6fe", + ["300"] = "#c4b5fd", + ["400"] = "#a78bfa", + ["500"] = "#8b5cf6", + ["600"] = "#7c3aed", + ["700"] = "#6d28d9", + ["800"] = "#5b21b6", + ["900"] = "#4c1d95", + ["950"] = "#2e1065", + }, + purple = { + ["50"] = "#faf5ff", + ["100"] = "#f3e8ff", + ["200"] = "#e9d5ff", + ["300"] = "#d8b4fe", + ["400"] = "#c084fc", + ["500"] = "#a855f7", + ["600"] = "#9333ea", + ["700"] = "#7e22ce", + ["800"] = "#6b21a8", + ["900"] = "#581c87", + ["950"] = "#3b0764", + }, + fuchsia = { + ["50"] = "#fdf4ff", + ["100"] = "#fae8ff", + ["200"] = "#f5d0fe", + ["300"] = "#f0abfc", + ["400"] = "#e879f9", + ["500"] = "#d946ef", + ["600"] = "#c026d3", + ["700"] = "#a21caf", + ["800"] = "#86198f", + ["900"] = "#701a75", + ["950"] = "#4a044e", + }, + pink = { + ["50"] = "#fdf2f8", + ["100"] = "#fce7f3", + ["200"] = "#fbcfe8", + ["300"] = "#f9a8d4", + ["400"] = "#f472b6", + ["500"] = "#ec4899", + ["600"] = "#db2777", + ["700"] = "#be185d", + ["800"] = "#9d174d", + ["900"] = "#831843", + ["950"] = "#500724", + }, + rose = { + ["50"] = "#fff1f2", + ["100"] = "#ffe4e6", + ["200"] = "#fecdd3", + ["300"] = "#fda4af", + ["400"] = "#fb7185", + ["500"] = "#f43f5e", + ["600"] = "#e11d48", + ["700"] = "#be123c", + ["800"] = "#9f1239", + ["900"] = "#881337", + ["950"] = "#4c0519", + }, +} + +------------------------------------------------------------------------------- +-- Groups +------------------------------------------------------------------------------- +-- +-- Let's get down to business. Define highlight groups using the palette +-- we worked so hard on. Access colors with `hue.base["shade"]`. Example: +-- +-- Normal = { fg = hue.base["500"], bg = "NONE", bold = true } +-- + +local groups = { + ------------------------------------------------------------------------------- + -- Cursor Line + ------------------------------------------------------------------------------- + CursorLine = {}, + + ------------------------------------------------------------------------------- + -- Matching Parentheses + ------------------------------------------------------------------------------- + MatchParen = { fg = 0 }, + + ------------------------------------------------------------------------------- + -- Sign Column + ------------------------------------------------------------------------------- + SignColumn = { fg = 0 }, + + ------------------------------------------------------------------------------- + -- Normal Text + ------------------------------------------------------------------------------- + Normal = { fg = hue.base["900"] }, + + ------------------------------------------------------------------------------- + -- Vertical Splits + ------------------------------------------------------------------------------- + VertSplit = { fg = hue.base["400"] }, + WinSeparator = { fg = hue.base["400"] }, + + ------------------------------------------------------------------------------- + -- Floating Window Borders + ------------------------------------------------------------------------------- + FloatBorder = { fg = hue.base["600"], bg = hue.base["100"] }, + + ------------------------------------------------------------------------------- + -- Search + ------------------------------------------------------------------------------- + Search = { fg = hue.base["600"], bg = hue.amber["200"] }, + + ------------------------------------------------------------------------------- + -- Visual Highlighting + ------------------------------------------------------------------------------- + Visual = { bg = hue.base["300"] }, + + ------------------------------------------------------------------------------- + -- End of Buffers + ------------------------------------------------------------------------------- + EndOfBuffer = { fg = hue.base["900"] }, + + ------------------------------------------------------------------------------- + -- Popup Menu + ------------------------------------------------------------------------------- + Pmenu = { fg = hue.neutral["100"], bg = hue.neutral["500"], italic = true }, + PmenuSel = { fg = hue.neutral["100"], bg = hue.blue["500"], italic = true }, + PmenuSbar = { bg = hue.neutral["500"] }, + PmenuThumb = { bg = hue.neutral["500"] }, + + ------------------------------------------------------------------------------- + -- Tab Line + ------------------------------------------------------------------------------- + TabLine = { fg = hue.base["400"], bg = hue.base["700"] }, + TabLineFill = { fg = hue.base["100"], bg = hue.base["700"] }, + TabLineSel = { fg = hue.base["100"], bg = hue.base["600"], bold = true }, + + ------------------------------------------------------------------------------- + -- Line Numbers + ------------------------------------------------------------------------------- + LineNr = { fg = hue.base["500"] }, + LineNrAbove = { fg = hue.base["500"] }, + LineNrBelow = { fg = hue.base["500"] }, + CursorLineNr = { fg = hue.base["500"] }, + + ------------------------------------------------------------------------------- + -- Status Line + ------------------------------------------------------------------------------- + StatusLine = { fg = hue.base["200"], bg = hue.base["700"] }, + StatusLineNC = { fg = hue.base["200"], bg = hue.base["700"] }, + + ------------------------------------------------------------------------------- + -- Syntax + ------------------------------------------------------------------------------- + Boolean = { fg = hue.yellow["800"] }, + Comment = { fg = hue.base["500"] }, + Conditional = { fg = hue.fuchsia["800"] }, + Constant = { fg = hue.amber["800"] }, + Debug = {}, + Define = {}, + Delimiter = {}, + Error = {}, + Exception = {}, + Float = {}, + Function = { fg = hue.rose["800"] }, + Identifier = { fg = hue.rose["800"] }, + Ignore = {}, + Include = { fg = hue.fuchsia["800"], bold = true }, + Keyword = { fg = hue.sky["800"], bold = true }, + Label = { fg = hue.rose["800"] }, + Macro = {}, + Number = { fg = hue.yellow["800"] }, + Operator = {}, + PreCondit = {}, + PreProc = {}, + Repeat = {}, + Special = { fg = hue.cyan["800"] }, + SpecialChar = {}, + SpecialComment = {}, + Statement = {}, + StorageClass = { fg = hue.sky["800"], bold = true }, + String = { fg = hue.lime["700"] }, + Structure = { fg = hue.sky["800"], bold = true }, + Tag = { fg = hue.rose["800"] }, + Title = { bold = true }, + Todo = {}, + Type = { fg = hue.sky["800"] }, + Typedef = {}, + Underlined = { fg = hue.blue["800"], underline = true }, + + ------------------------------------------------------------------------------- + -- Diffs + ------------------------------------------------------------------------------- + + Added = { fg = hue.green["700"] }, + Changed = { fg = hue.sky["700"] }, + Removed = { fg = hue.red["800"] }, + + ------------------------------------------------------------------------------- + -- Diagnosticles + ------------------------------------------------------------------------------- + DiagnosticError = { fg = hue.red["300"], italic = true }, + DiagnosticWarn = { fg = hue.orange["300"], italic = true }, + DiagnosticHint = { fg = hue.amber["300"], italic = true }, + DiagnosticInfo = { fg = hue.base["300"], italic = true }, + + DiagnosticUnderlineWarn = { bg = hue.amber["100"] }, + DiagnosticUnderlineHint = { bg = hue.amber["100"] }, + DiagnosticUnnecessary = { bg = hue.amber["100"] }, + + -- Trouble Plugin + ------------------------------------------------------------------------------- + TroubleFile = { fg = hue.base["900"], bold = true }, + TroubleCount = { fg = hue.base["400"], bold = true }, + TroubleSignError = { fg = hue.red["600"] }, + TroubleSignWarning = { fg = hue.orange["600"] }, + TroubleSignHint = { fg = hue.amber["600"] }, + TroubleSignInfo = { fg = hue.base["600"] }, + + ------------------------------------------------------------------------------- + -- Diff + ------------------------------------------------------------------------------- + GitSignsAdd = { fg = hue.lime["400"] }, + GitSignsDelete = { fg = hue.red["400"] }, + GitSignsChange = { fg = hue.blue["400"] }, + GitSignsText = { fg = hue.base["400"] }, + + ------------------------------------------------------------------------------- + -- NvimTree Plugin + ------------------------------------------------------------------------------- + NvimTreeCursorLine = { fg = hue.base["100"], bg = hue.base["400"] }, + NvimTreeNormal = { fg = hue.base["950"] }, + NvimTreeFolderIcon = { fg = hue.base["950"] }, + NvimTreeFileIcon = { fg = hue.base["950"] }, + NvimTreeFolderName = { fg = hue.base["950"] }, + NvimTreeEmptyFolder = { fg = hue.base["950"] }, + NvimTreeEmptyFolderName = { fg = hue.base["950"] }, + NvimTreeOpenedFile = { fg = hue.base["950"] }, + NvimTreeOpenedFolderName = { fg = hue.base["950"] }, + NvimTreeSpecialFile = { fg = hue.base["950"] }, + NvimTreeSymlink = { fg = hue.base["950"] }, + NvimTreeFile = { fg = hue.base["950"] }, + NvimTreeFileDeleted = { fg = hue.base["950"] }, + NvimTreeFileDirty = { fg = hue.base["950"] }, + NvimTreeFileMerge = { fg = hue.base["950"] }, + NvimTreeFileRenamed = { fg = hue.base["950"] }, + NvimTreeFileStaged = { fg = hue.base["950"] }, + NvimTreeExecFile = { fg = hue.base["950"] }, + NvimTreeWindowPicker = { fg = hue.base["100"], bg = hue.base["900"] }, +} + + +------------------------------------------------------------------------------- +-- Set all the colors +------------------------------------------------------------------------------- +-- +-- Zhu li! Do the thing! +-- + +for group, settings in pairs(groups) do + vim.api.nvim_set_hl(0, group, settings) +end + +------------------------------------------------------------------------------- +-- Manage NvimTree colors on enter and exit +------------------------------------------------------------------------------- +-- +-- +-- + +local nvimTreeCursorLine = vim.api.nvim_create_augroup("NvimTreeCursorLine", { + clear = true +}) + +vim.api.nvim_create_autocmd("BufEnter", { + pattern = "NvimTree_1", + callback = function() + vim.cmd("setlocal cursorline") + vim.api.nvim_set_hl(0, "NvimTreeCursorLine", { + fg = hue.base["100"], bg = hue.blue["500"] + }) + end, + group = nvimTreeCursorLine, +}) + +vim.api.nvim_create_autocmd("BufLeave", { + pattern = "NvimTree_1", + callback = function() + vim.api.nvim_set_hl(0, "NvimTreeCursorLine", { + fg = hue.base["900"], bg = hue.base["250"] + }) + end, + group = nvimTreeCursorLine, +}) + diff --git a/dot_config/nvim/init.lua b/dot_config/nvim/init.lua new file mode 100644 index 0000000..035ace2 --- /dev/null +++ b/dot_config/nvim/init.lua @@ -0,0 +1,587 @@ +-- ----------------------------------------------------------------------------- +-- mini.nvim +-- ----------------------------------------------------------------------------- +-- +-- This Neovim configuration leans heavily on the mini.nvim ecosystem. +-- +-- Installing mini.nvim and all its modules allows us to load each module with +-- a simple 'require('mini.module').setup()'. Using the mini.deps module allows +-- for adding plugins using the `MiniDeps.add()` function followed by the same +-- 'require('plugin').setup()'. Pass a config to setup to configure modules and +-- plugins, for example `require('plugin').setup.({config})`. +-- +-- See `https://github.com/echasnovski/mini.nvim` +-- + +local path_package = vim.fn.stdpath('data') .. '/site' +local mini_path = path_package .. '/pack/deps/start/mini.nvim' +if not vim.loop.fs_stat(mini_path) then + vim.cmd('echo "Installing `mini.nvim`" | redraw') + local clone_cmd = { + 'git', 'clone', '--filter=blob:none', + 'https://github.com/echasnovski/mini.nvim', mini_path + } + vim.fn.system(clone_cmd) + vim.cmd('packadd mini.nvim | helptags ALL') +end + +-- ----------------------------------------------------------------------------- +-- mini.deps +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/echasnovski/mini.deps` +-- + +local deps = require('mini.deps') +deps.setup() + +-- ----------------------------------------------------------------------------- +-- mini.ai +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/echasnovski/mini.ai` +-- + +local ai = require('mini.ai') +ai.setup() + +-- ----------------------------------------------------------------------------- +-- mini.basics +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/echasnovski/mini.basics` +-- + +local basics = require('mini.basics') +basics.setup() + +-- ----------------------------------------------------------------------------- +-- mini.completion +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/echasnovski/mini.completion` +-- + +local completion = require('mini.completion') +completion.setup() + +-- ----------------------------------------------------------------------------- +-- mini.diff +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/echasnovski/mini.diff` +-- + +local diff = require('mini.diff') +diff.setup() + +-- ----------------------------------------------------------------------------- +-- mini.git +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/echasnovski/mini.git` +-- + +local git = require('mini.git') +git.setup() + +-- ----------------------------------------------------------------------------- +-- mini.hipatterns +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/echasnovski/mini.hipatterns` +-- + +local hipatterns = require('mini.hipatterns') +hipatterns.setup({ + highlighters = { + hex_color = hipatterns.gen_highlighter.hex_color(), + } +}) + + +-- ----------------------------------------------------------------------------- +-- mini.indentscope +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/echasnovski/mini.indentscope` +-- + +local indentscope = require('mini.indentscope') +indentscope.setup() + +-- ----------------------------------------------------------------------------- +-- mini.pairs +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/echasnovski/mini.pairs` +-- + +local pairs = require('mini.pairs') +pairs.setup() + +-- ----------------------------------------------------------------------------- +-- mini.surround +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/echasnovski/mini.surround` +-- + +local surround = require('mini.surround') +surround.setup() + +-- ----------------------------------------------------------------------------- +-- mini.statusline +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/echasnovski/mini.statusline` +-- + +local special_filetypes = { + 'NvimTree', + 'NeoTree', + 'Trouble' +} + +local function is_special_filetype(filetype) + for _, special_filetype in ipairs(special_filetypes) do + if filetype == special_filetype then + return true + end + end + return false +end + +local function get_position_indicator() + local filetype = vim.bo.filetype + + if is_special_filetype(filetype) then + return "" + end + + local space_or_tab = vim.bo.expandtab and "S" or "T" + local shiftwidth = vim.bo.shiftwidth + local row, col = vim.fn.line('.'), vim.fn.col('.') + + return space_or_tab .. shiftwidth .. ' ' .. string.format("%d:%d", row, col) .. ' ' +end + +local function get_filename() + local filetype = vim.bo.filetype + local symbol = vim.bo.readonly and " [-] " or (vim.bo.modified and " [+] " or "") + + if filetype == '' then + return "[scratch]" .. symbol + elseif is_special_filetype(filetype) then + return filetype + else + return vim.fn.expand('%:.') .. symbol + end +end + +-- Set up mini.statusline +require('mini.statusline').setup({ + content = { + active = function() + local filetype = vim.bo.filetype + + -- For special filetypes, return a simplified statusline + if is_special_filetype(filetype) then + return get_filename() + end + + -- For regular files, construct the full statusline + return string.format( + ' %s%s%s', + get_filename(), -- filename with modification symbol + '%=', -- middle spacing + get_position_indicator() -- position indicator + ) + end, + + inactive = function() + -- For inactive windows, show a simpler statusline + return string.format( + ' %s%s%s', + get_filename(), -- filename with modification symbol + '%=', -- middle spacing + get_position_indicator() -- position indicator + ) + end, + }, + use_icons = true, + set_vim_settings = true, +}) + +-- ----------------------------------------------------------------------------- +-- nvim-lspconfig +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/neovim/nvim-lspconfig` +-- + +MiniDeps.add({ + source = 'neovim/nvim-lspconfig', +}) + +vim.lsp.config('luals', { + cmd = {'lua-language-server'}, + filetypes = {'lua'}, + root_markers = {'.luarc.json', '.luarc.jsonc'}, + settings = { + Lua = { + diagnostics = { + globals = {'vim', 'MiniDeps'} + } + } + } +}) + +vim.lsp.enable('luals') + + +vim.lsp.config('gopls', { + cmd = {'gopls'}, + filetypes = {'go', 'gomod', 'gowork', 'gotmpl'}, + root_markers = {'go.mod', '.git'}, + settings = { + gopls = { + analyses = { + unusedparams = true, + }, + staticcheck = true, + }, + }, +}) + +vim.lsp.enable('gopls') + + +-- ----------------------------------------------------------------------------- +-- nvim-treesitter +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/nvim-treesitter/nvim-treesitter` +-- + +MiniDeps.add({ + source = 'nvim-treesitter/nvim-treesitter', + checkout = 'master', + monitor = 'main', + hooks = { + post_checkout = function() + vim.cmd('TSUpdate') + end + }, +}) + +-- Add the custom Blade parser +local parser_config = require("nvim-treesitter.parsers").get_parser_configs() + +parser_config.blade = { + install_info = { + url = "https://github.com/EmranMR/tree-sitter-blade", -- Community parser repo + files = { "src/parser.c" }, + branch = "main", + }, + filetype = "blade", +} + +-- Treesitter setup +require('nvim-treesitter.configs').setup({ + auto_install = true, -- Automatically install missing parsers + ensure_installed = { + 'bash', + 'c', + 'c_sharp', + 'css', + 'csv', + 'dockerfile', + 'editorconfig', + 'git_config', + 'gitcommit', + 'gitignore', + 'go', + 'graphql', + 'html', + 'javascript', + 'jq', + 'jsdoc', + 'json', + 'lua', + 'luadoc', + 'markdown', + 'markdown_inline', + 'nginx', + 'php', + 'phpdoc', + 'python', + 'query', + 'ruby', + 'rust', + 'scss', + 'sql', + 'tmux', + 'toml', + 'typescript', + 'vim', + 'vimdoc', + 'xml', + 'yaml', + 'blade', -- Add blade here + }, + highlight = { + enable = true, -- Enable syntax highlighting + }, + indent = { + enable = false, -- Disable indentation for now + }, +}) + +-- Set filetype for Blade files +vim.cmd [[autocmd BufRead,BufNewFile *.blade.php set filetype=blade]] + +-- ----------------------------------------------------------------------------- +-- tmux.nvim +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/aserowy/tmux.nvim` +-- + +MiniDeps.add({ source = 'aserowy/tmux.nvim' }) +require('tmux').setup({}) + +-- Terminal Keymaps +vim.keymap.set("t", "", "j", {noremap = true}) +vim.keymap.set("t", "", "h", {noremap = true}) +vim.keymap.set("t", "", "k", {noremap = true}) +vim.keymap.set("t", "", "l", {noremap = true}) + +-- ----------------------------------------------------------------------------- +-- Oil +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/stevearc/oil.nvim` +-- + +MiniDeps.add({ source = 'stevearc/oil.nvim' }) + +require('oil').setup({ + skip_confirm_for_simple_edits = true, + prompt_save_on_select_new_entry = false, + delete_to_trash = true, + confirmation = { + border = "double", + }, + view_options = { + show_hidden = true, + sort = { + { + "name", "asc" + }, + }, + } +}) + +vim.keymap.set("n", "-", "Oil", { desc = "Open parent directory" }) + + + +-- ----------------------------------------------------------------------------- +-- Neogit +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/NeogitOrg/neogit` +-- + +MiniDeps.add({ source = 'nvim-lua/plenary.nvim' }) +MiniDeps.add({ source = 'NeogitOrg/neogit' }) + +require('neogit').setup({ + integrations = { + fzf_lua = true, -- Use your existing fzf-lua + }, +}) + +-- ----------------------------------------------------------------------------- +-- FZF Lua +-- ----------------------------------------------------------------------------- +-- +-- See `https://github.com/ibhagwan/fzf-lua` +-- + +MiniDeps.add({ + source = 'ibhagwan/fzf-lua' +}) + +require('fzf-lua').setup({ + fzf_bin = 'fzf', -- Use system fzf (not embedded) + + -- Make it fill the screen like terminal fzf + winopts = { + height = 1.0, -- Full height + width = 1.0, -- Full width + row = 0, -- Top of screen + col = 0, -- Left of screen + border = 'none', -- No border (like terminal) + preview = { + border = 'double', + title = false, -- Remove the preview title + title_pos = false, + } + }, + + -- Let fzf handle the layout/preview like in terminal + fzf_opts = { + -- Remove fzf-lua's default overrides to use your terminal config + ['--height'] = false, -- Don't override height + ['--layout'] = false, -- Don't override layout + ['--border'] = false, -- Don't override border + ['--info'] = false, -- Don't override info position + }, + + -- Ensure previews work like your terminal setup + files = { + -- preview_opts = 'hidden', -- Let fzf handle preview + }, +}) + +vim.keymap.set("n", "f", "FzfLua files", { desc = "Search Files" }) +vim.keymap.set("n", "o", "FzfLua oldfiles", { desc = "List Recent Files" }) +vim.keymap.set("n", "b", "FzfLua buffers", { desc = "List Buffers" }) +vim.keymap.set("n", "g", "FzfLua live_grep", { desc = "List Matched Strings" }) +vim.keymap.set("n", "d", "FzfLua lsp_diagnostics", { desc = "List Diagnostics" }) + +-- ----------------------------------------------------------------------------- +-- VimWiki +-- ----------------------------------------------------------------------------- +-- +-- +-- + +-- MiniDeps.add({ +-- source = 'vimwiki/vimwiki' +-- }) +-- +-- require('vimwiki').setup() + + +-- ----------------------------------------------------------------------------- +-- Set Colorscheme +-- ----------------------------------------------------------------------------- +-- +-- Use the custom colorscheme at `nvim/colors/lpcstudio` +-- + +vim.cmd 'colorscheme lpcstudio' + +-- ----------------------------------------------------------------------------- +-- Disable swapfile +-- ----------------------------------------------------------------------------- +-- +-- The swapfiles seem unneeded with my local development environment. Crashes +-- are rare, and the files are combersome. +-- + +vim.opt.swapfile = false + +-- ----------------------------------------------------------------------------- +-- Show the mode in the command line +-- ----------------------------------------------------------------------------- +-- +-- I like seeing the mode in the bottom left and not following me around. +-- I generally know what mode I'm in and don't need a vibrant hint. +-- + +vim.opt.showmode = true + +-- ----------------------------------------------------------------------------- +-- Make cursor blink +-- ----------------------------------------------------------------------------- +-- +-- Sometimes on a big monitor I have trouble finding cursors. This helps. +-- + +vim.cmd [[ set guicursor+=a:blinkon1 ]] + +-- ----------------------------------------------------------------------------- +-- Automatically resize windows +-- ----------------------------------------------------------------------------- +-- +-- + +vim.api.nvim_create_autocmd("VimResized", { + command = "wincmd =", +}) + +-- ----------------------------------------------------------------------------- +-- Default Spacing +-- ----------------------------------------------------------------------------- +-- +-- +-- + +local space = 4 +vim.opt.shiftwidth = space +vim.opt.tabstop = space +vim.opt.softtabstop = space +vim.opt.expandtab = true +vim.opt.shiftround = true + +-- ----------------------------------------------------------------------------- +-- Keymaps +-- ----------------------------------------------------------------------------- +-- +-- +-- + +vim.keymap.set('i', '', 'o', { noremap = true, silent = true, desc = "Open new line below (Shift+Enter)" }) + +-- ----------------------------------------------------------------------------- +-- Open Help buffers to the right +-- ----------------------------------------------------------------------------- +-- +-- + +vim.api.nvim_create_autocmd("FileType", { + desc = "Automatically Split help Buffers to the right", + pattern = "help", + command = "wincmd L", +}) + +-- ----------------------------------------------------------------------------- +-- Search highlight remove on cursor move +-- ----------------------------------------------------------------------------- +-- +-- + +local function augroup(name, fnc) + fnc(vim.api.nvim_create_augroup(name, { clear = true })) +end + +augroup("ibhagwan/ToggleSearchHL", function(g) + vim.api.nvim_create_autocmd("InsertEnter", { + group = g, + callback = function() + vim.schedule(function() vim.cmd("nohlsearch") end) + end + }) + vim.api.nvim_create_autocmd("CursorMoved", { + group = g, + callback = function() + local view, rpos = vim.fn.winsaveview(), vim.fn.getpos(".") + vim.cmd(string.format("silent! keepjumps go%s", + (vim.fn.line2byte(view.lnum) + view.col + 1 - (vim.v.searchforward == 1 and 2 or 0)))) + local ok, _ = pcall(vim.cmd, "silent! keepjumps norm! n") + local insearch = ok and (function() + local npos = vim.fn.getpos(".") + return npos[2] == rpos[2] and npos[3] == rpos[3] + end)() + vim.fn.winrestview(view) + if not insearch then + vim.schedule(function() vim.cmd("nohlsearch") end) + end + end + }) +end) + diff --git a/dot_config/nvim/lua/plugins/conform.lua b/dot_config/nvim/lua/plugins/conform.lua new file mode 100644 index 0000000..6cbbbb6 --- /dev/null +++ b/dot_config/nvim/lua/plugins/conform.lua @@ -0,0 +1,8 @@ +return { + 'stevearc/conform.nvim', + opts = { + formatters_by_ft = { + blade = { "blade-formatter" } + }, + }, +} diff --git a/dot_config/nvim/spell/en.utf-8.add b/dot_config/nvim/spell/en.utf-8.add new file mode 100644 index 0000000..50ceaa3 --- /dev/null +++ b/dot_config/nvim/spell/en.utf-8.add @@ -0,0 +1,2 @@ +Coeur d’Alene +diminishment diff --git a/dot_config/nvim/spell/en.utf-8.add.spl b/dot_config/nvim/spell/en.utf-8.add.spl new file mode 100644 index 0000000000000000000000000000000000000000..ebfb964dc336822f3b90e9e8142d1fd9a08b5964 GIT binary patch literal 113 zcmWIZ^erw(&B-zP&%nT7$&{SJn9rEXSjt$$sKA)Q_=vHAaVBFTV-8R(4~Ur>7&94j gfjAF{iy1S3Y>-3=BTzGg0;4k)&5m%*AT', '', { noremap = true }) +vim.keymap.set('c', '', '', { noremap = true }) + +-- Set up better command-line experience +vim.opt.cmdheight = 1 +vim.opt.laststatus = 2 +vim.opt.showmode = true +vim.opt.showcmd = true diff --git a/dot_config/tmux/dot_DS_Store b/dot_config/tmux/dot_DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..0294fc26dd69b95e229fee7b1a8d2081ffdbb6e2 GIT binary patch literal 6148 zcmeHKyJ`bL3>?LV7}B_OxxbJ/dev/null || exit 1 + +# Check if we are inside a Git repository. +if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then + # Get the URL of the 'origin' remote. + remote_url="$(git config --get remote.origin.url)" + + if [ -n "$remote_url" ]; then + # We have a remote, so let's get the icon and domain. + + # 1. Determine the icon based on the URL's content. + icon="" + if [[ $remote_url == *"github"* ]]; then + icon=" " + elif [[ $remote_url == *"gitlab"* ]]; then + icon="󰮠 " + elif [[ $remote_url == *"gitea"* ]]; then + icon=" " + else + # Fallback icon for any other git remote (e.g., Bitbucket, Codeberg). + icon=" " + fi + + # 2. Extract the domain from the remote URL. + domain="" + if [[ $remote_url =~ ^https?:// ]]; then + # For HTTPS URLs (e.g., "https://github.com/user/repo.git") + domain=$(echo "$remote_url" | sed -E 's#https?://([^/]+).*#\1#') + elif [[ $remote_url =~ @ ]]; then + # For SSH URLs (e.g., "git@github.com:user/repo.git") + domain=$(echo "$remote_url" | sed -E 's/.*@([^:]+):.*/\1/') + fi + + # 3. Print the icon and the extracted domain. + echo "$icon $domain" + else + # No remote is configured, so it's a local repository. + echo " local" + fi +else + # Not a git repository, so output nothing. + echo "" +fi + diff --git a/dot_config/tmux/scripts/executable_ssh_aware_directory.sh b/dot_config/tmux/scripts/executable_ssh_aware_directory.sh new file mode 100644 index 0000000..679d121 --- /dev/null +++ b/dot_config/tmux/scripts/executable_ssh_aware_directory.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Icons +icon_local="󰹑 " # Your specified local icon +icon_remote="󰖟 " # Your specified remote icon + +current_cmd=$(tmux display-message -p '#{pane_current_command}') + +if [[ "$current_cmd" == "ssh" ]]; then + # Remote - get info from pane title + pane_title_raw=$(tmux display-message -p '#{pane_title}') + # Clean up: remove any spaces after the colon + pane_title_cleaned=$(echo "$pane_title_raw" | sed 's/: /:/g') + + # Output plain text: ICON user@host:directory (or ICON title if not parsable) + echo "${icon_remote}${pane_title_cleaned:-remote}" +else + # Local - build the same format + user_part="$(whoami)" + host_part="$(hostname -s)" + local_dir_raw=$(echo "$1" | sed "s|^$HOME|~|") # $1 is #{pane_current_path} + + # Output plain text: ICON user@host:directory + echo "${icon_local}${user_part}@${host_part}:${local_dir_raw}" +fi + diff --git a/dot_config/tmux/tmux.conf b/dot_config/tmux/tmux.conf new file mode 100644 index 0000000..bb42775 --- /dev/null +++ b/dot_config/tmux/tmux.conf @@ -0,0 +1,267 @@ +# ______ +# /_ __/___ ___ __ ___ __ +# / / / __ `__ \/ / / / |/_/ +# / / / / / / / / /_/ /> < +# /_/ /_/ /_/ /_/\__,_/_/|_| +# +# Corey Smith +# Tmux Configurations +# corey@litteplummercreek.studio + +#------------------------------------------------------------------------------ +# Configuration Notes +#------------------------------------------------------------------------------ +# +# Tmux has shortened versions of some commands, the following are used: +# set = set-option +# setw = set-window-option +# bind = bind-key +# run = run-shell +# + +set-environment -g TMUX_PLUGIN_MANAGER_PATH "$XDG_DATA_HOME/tmux/plugins" + +#------------------------------------------------------------------------------ +# Set helper script path +#------------------------------------------------------------------------------ +# +# This is where custom helper scripts need to be located for tmux +# to utilize them. +# + +script_path="$HOME/.config/tmux/scripts" + +#------------------------------------------------------------------------------ +# Open windows and panes in current directory +#------------------------------------------------------------------------------ +# +# By default Tmux opens new windows and panes in the user home directory, I +# would prefer they open in the directory I am currently in since I am usually +# working on a project and just need a new terminal window. +# + +bind c new-window -c "#{pane_current_path}" +bind '"' split-window -v -c "#{pane_current_path}" +bind % split-window -h -c "#{pane_current_path}" + +#------------------------------------------------------------------------------ +# Turn on mouse reporting for native scrolling +#------------------------------------------------------------------------------ +# +# This allows tmux to scroll contents using the mouse scroll wheel. +# + +set -g mouse on + + +#------------------------------------------------------------------------------ +# Speed up refresh rate +#------------------------------------------------------------------------------ +# +# Using Gitmux is nicer with a faster response time, this speeds up how +# quickly the Tmux status bar will refresh itself with new information. +# + +set -g status-interval 1 + +#------------------------------------------------------------------------------ +# Set Tmux 256 Colors +#------------------------------------------------------------------------------ +# +# More colors! +# + +set -g default-terminal 'tmux-256color' +set -as terminal-overrides ',xterm*:Tc:sitm=\E[3m' + +#------------------------------------------------------------------------------ +# Set Focus Events On +#------------------------------------------------------------------------------ +# +# Neovim :checkhealth recommends setting focus-events to on. What does it do? +# + +set -g focus-events on + +#------------------------------------------------------------------------------ +# Order sessions by name +#------------------------------------------------------------------------------ +# +# s provides a list of open sessions, I find it easier to scan them +# if they are ordered alphabetically ascending by name. +# + +bind s choose-tree -ZsNO name + +#------------------------------------------------------------------------------ +# Message Style +#----------------------------------------------------------------------------- +# +# : +# + +set -g message-style "bg=default, fg=#000000,bold" +set -g message-command-style "bg=default, fg=#000000,bold" + +#------------------------------------------------------------------------------ +# Set indexes to 1 instead of 0 +#------------------------------------------------------------------------------ +# +# A lot of programming languages are zero indexed. But I'm not programming +# when using Tmux. I am using an interface. I want lists to start from 1, +# which coincidentally also matches the leftmost number key on my keyboard. +# +# Below, "panes" and "windows" are configured to start at 1. +# +# It is unfortunately not possible to start the session list from 1 yet. +# + +set -g mode-style "bg=#3B82F6,fg=#FDFDFF" +set -g renumber-windows on +set -g base-index 1 +setw -g pane-base-index 1 + +#------------------------------------------------------------------------------ +# Status Bar +#------------------------------------------------------------------------------ +# +# I prefer the Tmux Status Bar at the top because it clashes with Neovim's +# Status Bar and Command Lines. I also prefer to think of Tmux's Status Bar +# as a macOS style "Menu Bar for the command line". +# + +set -g status-position top + +#------------------------------------------------------------------------------ +# Status Bar Border +#------------------------------------------------------------------------------ +# +# Move the status bar to the top and format it as an underline below the +# status bar. Set the pane borders to a color that blends with Neovim's +# Vertical and Horizontal Splits. +# + +setw -g pane-border-status top +setw -g pane-border-format '─' +set -g pane-border-style "bg=default, fg=#A3A6AE" +set -g pane-active-border-style "bg=default, fg=#A3A6AE" + +#------------------------------------------------------------------------------ +# Popup +#------------------------------------------------------------------------------ +# +# Settings for the Tmux Popup function +# + +set -g popup-border-lines "double" +set -g popup-border-style fg=black +bind-key p display-popup -T ' Shell ' -d "#{pane_current_path}" + +bind-key s display-popup -E "tmux list-sessions -F '#{session_name}' | fzf --prompt='Select Tmux Session: ' | xargs -I {} tmux switch-client -t '{}'" + + + + +#------------------------------------------------------------------------------ +# Status Bar Information +#------------------------------------------------------------------------------ +# +# The information displayed in the status bar. +# + +gitmux_path="$HOME/.gitmux.conf" + +separator=" #[fg=#A3A6AE]│#[fg=#000000] " +tmux_logo=" 󰙀 " +session="#[bold]#S#[nobold]" +# directory=" #(echo '#{pane_current_path}/' | sed 's|^$HOME|~|')" +directory="#(${script_path}/ssh_aware_directory.sh '#{pane_current_path}')" +git_icon="${separator}#(${script_path}/get_git_hosting.sh '#{pane_current_path}') " +git_status="#[fg=#555555]#(gitmux -cfg ${gitmux_path} '#{pane_current_path}')#[fg=#000000]" +date_time="%l:%M%p" +status_color="fg=#000000, bg=default" +window_status_format='  #[fg=#555555]#W#[fg=#000000]' +window_status_current_format=' #[fg=#047857] #[fg=#000000]#[bold]#W#[nobold]' + +# Function to get the number of panes when zoomed +pane_count="#(tmux list-panes -t '#{session_name}:#{window_index}' | wc -l | tr -d ' ')" + +# Function to indicate if the current window is zoomed +zoomed_flag="#(if [ #{window_zoomed_flag} -eq 1 ]; then echo ' '; else echo ' '; fi)" + +set -g status-style "${status_color}" +set -g status-justify right +set -g status-left-length 300 +set -g window-status-format "${window_status_format}" +set -g window-status-current-format "${window_status_current_format}" +set -g status-left "${tmux_logo}${session}${separator}${directory}${git_icon}${git_status}" +set -g status-right "${separator}${zoomed_flag}${pane_count} " + +#------------------------------------------------------------------------------ +# Speed up Vim escape key +#------------------------------------------------------------------------------ +# +# Speed up the escape key delay in Vim to prevent Tmux and Neovim from +# feeling sluggish or as if the terminal froze for a second. +# + +set -sg escape-time 10 + +#------------------------------------------------------------------------------ +# Navigate Tmux Sessions +#------------------------------------------------------------------------------ +# +# Use ctrl+option up/down to switch to next or previous session +# + +bind -n C-M-j switch-client -p +bind -n C-M-k switch-client -n + +#------------------------------------------------------------------------------ +# Navigate Tmux Windows +#------------------------------------------------------------------------------ +# +# Use ctrl+option left/right to switch to next or previous window +# Use ctrl+option n/p to swap current window with next or previous window +# + +bind -n C-M-l next-window +bind -n C-M-h previous-window + +bind -n C-M-p run-shell 'tmux swap-window -t -1 && tmux select-window -t :-' +bind -n C-M-n run-shell 'tmux swap-window -t +1 && tmux select-window -t :+' + +#------------------------------------------------------------------------------ +# Navigate Tmux Panes and Neovim Buffers +#------------------------------------------------------------------------------ +# +# Use ctrl hjkl to navigate through both Tmux Panes and Neovim/Vim/HX Buffers. +# + +is_program="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?(hx|vifm|g?(view|n?vim?x?)(diff)?)$'" + +bind -n 'C-h' if-shell "$is_program" 'send-keys C-h' { if -F '#{pane_at_left}' '' 'select-pane -L' } +bind -n 'C-j' if-shell "$is_program" 'send-keys C-j' { if -F '#{pane_at_bottom}' '' 'select-pane -D' } +bind -n 'C-k' if-shell "$is_program" 'send-keys C-k' { if -F '#{pane_at_top}' '' 'select-pane -U' } +bind -n 'C-l' if-shell "$is_program" 'send-keys C-l' { if -F '#{pane_at_right}' '' 'select-pane -R' } + +#------------------------------------------------------------------------------ +# Reload Configuration +#------------------------------------------------------------------------------ +# +# Use u to reload the config. +# + +bind u source-file ~/.config/tmux/tmux.conf \; display "Reloading..." + +#------------------------------------------------------------------------------ +# Plugins +#------------------------------------------------------------------------------ +# +# Use U to update the plugins. +# set -g @plugin 'tmux-plugins/tpm' +# add plugins here +# run '~/.tmux/plugins/tpm/tpm' +# + + diff --git a/dot_config/vim/dot_vimrc b/dot_config/vim/dot_vimrc new file mode 100644 index 0000000..2b8c01b --- /dev/null +++ b/dot_config/vim/dot_vimrc @@ -0,0 +1,71 @@ +" Minimal .vimrc for production servers + +" Basic settings +set nocompatible " Use Vim defaults +syntax on " Enable syntax highlighting +set background=light " Use light background + +" Disable all fancy colors, keep it simple +highlight clear + +" Basic black and white scheme with minimal highlighting +highlight Normal cterm=NONE ctermfg=black ctermbg=NONE +highlight Comment cterm=NONE ctermfg=darkgray ctermbg=NONE +highlight Constant cterm=NONE ctermfg=darkblue ctermbg=NONE +highlight Special cterm=NONE ctermfg=darkblue ctermbg=NONE +highlight Identifier cterm=NONE ctermfg=black ctermbg=NONE +highlight Statement cterm=bold ctermfg=black ctermbg=NONE +highlight PreProc cterm=NONE ctermfg=darkblue ctermbg=NONE +highlight Type cterm=bold ctermfg=black ctermbg=NONE +highlight Underlined cterm=underline ctermfg=black ctermbg=NONE +highlight Todo cterm=bold ctermfg=black ctermbg=yellow +highlight Error cterm=bold ctermfg=white ctermbg=red +highlight Search cterm=NONE ctermfg=black ctermbg=yellow + +" UI elements +highlight LineNr cterm=NONE ctermfg=darkgray ctermbg=NONE +highlight StatusLine cterm=bold ctermfg=white ctermbg=darkgray +highlight StatusLineNC cterm=NONE ctermfg=black ctermbg=lightgray +highlight VertSplit cterm=NONE ctermfg=darkgray ctermbg=NONE +highlight Visual cterm=NONE ctermfg=black ctermbg=lightgray + +" Practical settings for server work +set number " Show line numbers +set ruler " Show cursor position +set laststatus=2 " Always show status line +set showcmd " Show partial commands +set showmatch " Show matching brackets +set incsearch " Incremental search +set hlsearch " Highlight search results +set ignorecase " Case-insensitive search +set smartcase " Unless search contains uppercase +set autoindent " Auto-indent new lines +set smartindent " Smart auto-indenting +set tabstop=4 " Tab width is 4 spaces +set shiftwidth=4 " Indent also with 4 spaces +set expandtab " Expand tabs to spaces +set nowrap " Don't wrap lines +set backspace=indent,eol,start " Backspace through everything +set wildmenu " Command-line completion +set wildmode=list:longest " Complete until longest common string +set history=50 " Keep 50 lines of command history +set viminfo='20,\"50 " Remember 50 lines of registers +set nobackup " No backup files +set noswapfile " No swap files + +" Highlight trailing whitespace +highlight ExtraWhitespace ctermbg=red +match ExtraWhitespace /\s\+$/ + +" Indicate insert/normal mode in the status line +set showmode + +" For production servers - highlight the hostname in red if it contains 'live' +let hostname = substitute(system('hostname'), '\n', '', '') +if hostname =~ 'live' + highlight User1 cterm=bold ctermfg=white ctermbg=red + set statusline=%1*[PRODUCTION]%*\ %f\ %h%w%m%r\ %=%(%l,%c%V\ %=\ %P%) +else + set statusline=%f\ %h%w%m%r\ %=%(%l,%c%V\ %=\ %P%) +endif + diff --git a/dot_config/wezterm/wezterm.lua b/dot_config/wezterm/wezterm.lua new file mode 100644 index 0000000..e12efa6 --- /dev/null +++ b/dot_config/wezterm/wezterm.lua @@ -0,0 +1,73 @@ +-- Pull in the wezterm API +local wezterm = require 'wezterm' + +-- This will hold the configuration. +local config = wezterm.config_builder() + +-- This is where you actually apply your config choices +config.enable_tab_bar = false +config.animation_fps = 10 + +-- Window +config.initial_cols = 274 +config.initial_rows = 52 +config.window_decorations = "RESIZE" +config.window_background_opacity = 0.96 +config.macos_window_background_blur = 80 + +-- Typography +config.font = wezterm.font({ + family = 'SF Mono', + weight = 'Regular' +}) +config.line_height = 1.3 +config.font_size = 13.2 +config.cell_width = 1 + +-- Cursor +config.cursor_thickness = 2 +config.cursor_blink_rate = 600 +config.cursor_blink_ease_in = 'Constant' +config.cursor_blink_ease_out = 'Constant' +config.bold_brightens_ansi_colors = false + +config.colors = { + foreground = '#1A1C22', + background = '#F7F6F3', + cursor_bg = '#3B82F6', + cursor_fg = '#F7F6F3', + ansi = { + '#1A1C22', + '#C63533', + '#3F7A59', + '#D4680F', + '#2D739F', + '#B9437F', + '#3599A2', + '#BDBFC4', + }, + brights = { + '#3E4149', + '#E07270', + '#62BF8B', + '#DC9154', + '#61A5D0', + '#DC83B0', + '#6DBAC1', + '#DCDDE1', + }, +} + +-- START: Add Shift+Enter key binding here +config.keys = config.keys or {} -- Ensure the keys table exists if not already defined + +table.insert(config.keys, { + key = 'Enter', -- The key pressed + mods = 'SHIFT', -- The modifier key (Shift) + action = wezterm.action.SendString('\u{1b}[25~') -- Send the escape sequence for F15 + -- '\u{1b}' is ESC. '[25~' is a common sequence for F15. +}) +-- END: Shift+Enter key binding + +-- and finally, return the configuration to wezterm +return config