Migrate to chezmoi with per-host sway/waybar configs
- Restructure repo into chezmoi source layout (dot_ prefix) - Add .chezmoi.toml.tmpl mapping hostname to hosttype (laptop/desktop) - Template sway config.d fragments (outputs/inputs/binds) per host - Template waybar config.jsonc with shared bar/module definitions - Host-scope pulsemeeter (flow) and teams-for-linux (desktop hosts) via .chezmoiignore - Trim install.sh package lists to configured software + config deps - Remove stale kitty.conf.bak and untracked host fragments
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
opencode-bin
|
||||
{{ if eq .chezmoi.hostname "flow" -}}
|
||||
pulsemeeter-git
|
||||
{{- end }}
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
sudo pacman -S --needed - < packages.txt
|
||||
paru -S --needed - < aur-packages.txt
|
||||
@@ -0,0 +1,30 @@
|
||||
# Software with configs in this repo + runtime deps referenced by those configs
|
||||
{{ if eq .hosttype "desktop" -}}
|
||||
teams-for-linux
|
||||
{{- end }}
|
||||
brightnessctl
|
||||
cachyos-fish-config
|
||||
chezmoi
|
||||
dunst
|
||||
fish
|
||||
git
|
||||
gnome-keyring
|
||||
kitty
|
||||
lazygit
|
||||
neovim
|
||||
paru
|
||||
pipewire-pulse
|
||||
polkit-gnome
|
||||
pwvucontrol
|
||||
rofi
|
||||
starship
|
||||
sway
|
||||
swayidle
|
||||
swaylock
|
||||
tmux
|
||||
ttf-jetbrains-mono-nerd
|
||||
uwsm
|
||||
waybar
|
||||
wl-clipboard
|
||||
yazi
|
||||
zsh
|
||||
@@ -0,0 +1,502 @@
|
||||
# See dunst(5) for all configuration options
|
||||
|
||||
[global]
|
||||
### Display ###
|
||||
|
||||
# Which monitor should the notifications be displayed on.
|
||||
monitor = 0
|
||||
|
||||
# Display notification on focused monitor. Possible modes are:
|
||||
# mouse: follow mouse pointer
|
||||
# keyboard: follow window with keyboard focus
|
||||
# none: don't follow anything
|
||||
#
|
||||
# "keyboard" needs a window manager that exports the
|
||||
# _NET_ACTIVE_WINDOW property.
|
||||
# This should be the case for almost all modern window managers.
|
||||
#
|
||||
# If this option is set to mouse or keyboard, the monitor option
|
||||
# will be ignored.
|
||||
follow = none
|
||||
|
||||
### Geometry ###
|
||||
|
||||
# The width of the window, excluding the frame.
|
||||
# dynamic width from 0 to 300
|
||||
# width = (0, 300)
|
||||
# constant width of 300
|
||||
width = 300
|
||||
|
||||
# The height of a single notification, excluding the frame.
|
||||
# dynamic height from 0 to 300
|
||||
height = (0, 300)
|
||||
# constant height of 300
|
||||
# height = 300
|
||||
# NOTE: Dunst from version 1.11 and older don't support dynamic height
|
||||
# and the given value is treated as the maximum height
|
||||
|
||||
# Position the notification in the top right corner
|
||||
origin = top-right
|
||||
|
||||
# Offset from the origin
|
||||
# NOTE: Dunst from version 1.11 and older use this alternative notation
|
||||
# offset = 10x50
|
||||
offset = (10, 50)
|
||||
|
||||
# Scale factor. It is auto-detected if value is 0.
|
||||
scale = 0
|
||||
|
||||
# Maximum number of notification (0 means no limit)
|
||||
notification_limit = 20
|
||||
|
||||
### Progress bar ###
|
||||
|
||||
# Turn on the progress bar. It appears when a progress hint is passed with
|
||||
# for example dunstify -h int:value:12
|
||||
progress_bar = true
|
||||
|
||||
# Set the progress bar height. This includes the frame, so make sure
|
||||
# it's at least twice as big as the frame width.
|
||||
progress_bar_height = 10
|
||||
|
||||
# Set the frame width of the progress bar
|
||||
progress_bar_frame_width = 1
|
||||
|
||||
# Set the minimum width for the progress bar
|
||||
progress_bar_min_width = 150
|
||||
|
||||
# Set the maximum width for the progress bar
|
||||
progress_bar_max_width = 300
|
||||
|
||||
# Corner radius for the progress bar. 0 disables rounded corners.
|
||||
progress_bar_corner_radius = 0
|
||||
|
||||
# Define which corners to round when drawing the progress bar. If progress_bar_corner_radius
|
||||
# is set to 0 this option will be ignored.
|
||||
progress_bar_corners = all
|
||||
|
||||
# Corner radius for the icon image.
|
||||
icon_corner_radius = 0
|
||||
|
||||
# Define which corners to round when drawing the icon image. If icon_corner_radius
|
||||
# is set to 0 this option will be ignored.
|
||||
icon_corners = all
|
||||
|
||||
# Show how many messages are currently hidden (because of
|
||||
# notification_limit).
|
||||
indicate_hidden = yes
|
||||
|
||||
# The transparency of the window. Range: [0; 100].
|
||||
# This option will only work if a compositing window manager is
|
||||
# present (e.g. xcompmgr, compiz, etc.). (X11 only)
|
||||
transparency = 0
|
||||
|
||||
# Draw a line of "separator_height" pixel height between two
|
||||
# notifications.
|
||||
# Set to 0 to disable.
|
||||
# If gap_size is greater than 0, this setting will be ignored.
|
||||
separator_height = 2
|
||||
|
||||
# Padding between text and separator.
|
||||
padding = 8
|
||||
|
||||
# Horizontal padding.
|
||||
horizontal_padding = 8
|
||||
|
||||
# Padding between text and icon.
|
||||
text_icon_padding = 0
|
||||
|
||||
# Defines width in pixels of frame around the notification window.
|
||||
# Set to 0 to disable.
|
||||
frame_width = 3
|
||||
|
||||
# Defines color of the frame around the notification window.
|
||||
frame_color = "#aaaaaa"
|
||||
|
||||
# Size of gap to display between notifications - requires a compositor.
|
||||
# If value is greater than 0, separator_height will be ignored and a border
|
||||
# of size frame_width will be drawn around each notification instead.
|
||||
# Click events on gaps do not currently propagate to applications below.
|
||||
gap_size = 0
|
||||
|
||||
# Define a color for the separator.
|
||||
# possible values are:
|
||||
# * auto: dunst tries to find a color fitting to the background;
|
||||
# * foreground: use the same color as the foreground;
|
||||
# * frame: use the same color as the frame;
|
||||
# * anything else will be interpreted as a X color.
|
||||
separator_color = frame
|
||||
|
||||
# Sort type.
|
||||
# possible values are:
|
||||
# * id: sort by id
|
||||
# * urgency_ascending: sort by urgency (low then normal then critical)
|
||||
# * urgency_descending: sort by urgency (critical then normal then low)
|
||||
# * update: sort by update (most recent always at the top)
|
||||
sort = yes
|
||||
|
||||
# Don't remove messages, if the user is idle (no mouse or keyboard input)
|
||||
# for longer than idle_threshold seconds.
|
||||
# Set to 0 to disable.
|
||||
# A client can set the 'transient' hint to bypass this. See the rules
|
||||
# section for how to disable this if necessary
|
||||
# idle_threshold = 120
|
||||
|
||||
### Text ###
|
||||
|
||||
font = Monospace 8
|
||||
|
||||
# The spacing between lines. If the height is smaller than the
|
||||
# font height, it will get raised to the font height.
|
||||
line_height = 0
|
||||
|
||||
# Possible values are:
|
||||
# full: Allow a small subset of html markup in notifications:
|
||||
# <b>bold</b>
|
||||
# <i>italic</i>
|
||||
# <s>strikethrough</s>
|
||||
# <u>underline</u>
|
||||
#
|
||||
# For a complete reference see
|
||||
# <https://docs.gtk.org/Pango/pango_markup.html>.
|
||||
#
|
||||
# strip: This setting is provided for compatibility with some broken
|
||||
# clients that send markup even though it's not enabled on the
|
||||
# server. Dunst will try to strip the markup but the parsing is
|
||||
# simplistic so using this option outside of matching rules for
|
||||
# specific applications *IS GREATLY DISCOURAGED*.
|
||||
#
|
||||
# no: Disable markup parsing, incoming notifications will be treated as
|
||||
# plain text. Dunst will not advertise that it has the body-markup
|
||||
# capability if this is set as a global setting.
|
||||
#
|
||||
# It's important to note that markup inside the format option will be parsed
|
||||
# regardless of what this is set to.
|
||||
markup = full
|
||||
|
||||
# The format of the message. Possible variables are:
|
||||
# %a appname
|
||||
# %s summary
|
||||
# %b body
|
||||
# %c category
|
||||
# %S stack_tag
|
||||
# %i iconname (including its path)
|
||||
# %I iconname (without its path)
|
||||
# %p progress value if set ([ 0%] to [100%]) or nothing
|
||||
# %n progress value if set without any extra characters
|
||||
# %% literal %
|
||||
# Markup is allowed
|
||||
format = "<b>%s</b>\n%b"
|
||||
|
||||
# Alignment of message text.
|
||||
# Possible values are "left", "center" and "right".
|
||||
alignment = left
|
||||
|
||||
# Vertical alignment of message text and icon.
|
||||
# Possible values are "top", "center" and "bottom".
|
||||
vertical_alignment = center
|
||||
|
||||
# Show age of message if message is older than show_age_threshold
|
||||
# seconds.
|
||||
# Set to -1 to disable.
|
||||
show_age_threshold = 60
|
||||
|
||||
# Specify where to make an ellipsis in long lines.
|
||||
# Possible values are "start", "middle" and "end".
|
||||
ellipsize = middle
|
||||
|
||||
# Ignore newlines '\n' in notifications.
|
||||
ignore_newline = no
|
||||
|
||||
# Stack together notifications with the same content
|
||||
stack_duplicates = true
|
||||
|
||||
# Hide the count of stacked notifications with the same content
|
||||
hide_duplicate_count = false
|
||||
|
||||
# Display indicators for URLs (U) and actions (A).
|
||||
show_indicators = yes
|
||||
|
||||
### Icons ###
|
||||
|
||||
# Recursive icon lookup. You can set a single theme, instead of having to
|
||||
# define all lookup paths.
|
||||
enable_recursive_icon_lookup = true
|
||||
|
||||
# Set icon theme (only used for recursive icon lookup)
|
||||
icon_theme = Adwaita
|
||||
# You can also set multiple icon themes, with the leftmost one being used first.
|
||||
# icon_theme = "Adwaita, breeze"
|
||||
|
||||
# Align icons left/right/top/off
|
||||
icon_position = left
|
||||
|
||||
# Scale small icons up to this size, set to 0 to disable. Helpful
|
||||
# for e.g. small files or high-dpi screens. In case of conflict,
|
||||
# max_icon_size takes precedence over this.
|
||||
min_icon_size = 32
|
||||
|
||||
# Scale larger icons down to this size, set to 0 to disable
|
||||
max_icon_size = 32
|
||||
|
||||
# Paths to default icons (only necessary when not using recursive icon lookup)
|
||||
icon_path = /usr/share/icons/Adwaita/16x16/status/:/usr/share/icons/Adwaita/16x16/devices/:/usr/share/icons/Adwaita/16x16/legacy/
|
||||
|
||||
### History ###
|
||||
|
||||
# Should a notification popped up from history be sticky or timeout
|
||||
# as if it would normally do.
|
||||
sticky_history = yes
|
||||
|
||||
# Maximum amount of notifications kept in history
|
||||
history_length = 20
|
||||
|
||||
### Misc/Advanced ###
|
||||
|
||||
# dmenu path.
|
||||
dmenu = /usr/bin/dmenu -p dunst:
|
||||
|
||||
# Browser for opening urls in context menu.
|
||||
browser = /usr/bin/xdg-open
|
||||
|
||||
# Always run rule-defined scripts, even if the notification is suppressed
|
||||
always_run_script = true
|
||||
|
||||
# Define the title of the windows spawned by dunst (X11 only)
|
||||
title = Dunst
|
||||
|
||||
# Define the class of the windows spawned by dunst (X11 only)
|
||||
class = Dunst
|
||||
|
||||
# Define the corner radius of the notification window
|
||||
# in pixel size. If the radius is 0, you have no rounded
|
||||
# corners.
|
||||
# The radius will be automatically lowered if it exceeds half of the
|
||||
# notification height to avoid clipping text and/or icons.
|
||||
corner_radius = 0
|
||||
|
||||
# Define which corners to round when drawing the window. If the corner radius
|
||||
# is set to 0 this option will be ignored.
|
||||
#
|
||||
# Comma-separated list of the corners. The accepted corner values are bottom-right,
|
||||
# bottom-left, top-right, top-left, top, bottom, left, right or all.
|
||||
corners = all
|
||||
|
||||
# Ignore the dbus closeNotification message.
|
||||
# Useful to enforce the timeout set by dunst configuration. Without this
|
||||
# parameter, an application may close the notification sent before the
|
||||
# user defined timeout.
|
||||
ignore_dbusclose = false
|
||||
|
||||
### Wayland ###
|
||||
# These settings are Wayland-specific. They have no effect when using X11
|
||||
|
||||
# Uncomment this if you want to let notifications appear under fullscreen
|
||||
# applications (default: overlay)
|
||||
# layer = top
|
||||
|
||||
# Set this to true to use X11 output on Wayland.
|
||||
force_xwayland = false
|
||||
|
||||
### Legacy
|
||||
|
||||
# Use the Xinerama extension instead of RandR for multi-monitor support.
|
||||
# This setting is provided for compatibility with older nVidia drivers that
|
||||
# do not support RandR and using it on systems that support RandR is highly
|
||||
# discouraged.
|
||||
#
|
||||
# By enabling this setting dunst will not be able to detect when a monitor
|
||||
# is connected or disconnected which might break follow mode if the screen
|
||||
# layout changes.
|
||||
force_xinerama = false
|
||||
|
||||
### mouse
|
||||
|
||||
# Defines list of actions for each mouse event
|
||||
# Possible values are:
|
||||
# * none: Don't do anything.
|
||||
# * do_action: Invoke the action determined by the action_name rule. If there is no
|
||||
# such action, open the context menu.
|
||||
# * open_url: If the notification has exactly one url, open it. If there are multiple
|
||||
# ones, open the context menu.
|
||||
# * close_current: Close current notification.
|
||||
# * remove_current: Remove current notification from history.
|
||||
# * close_all: Close all notifications.
|
||||
# * context: Open context menu for the notification.
|
||||
# * context_all: Open context menu for all notifications.
|
||||
# These values can be strung together for each mouse event, and
|
||||
# will be executed in sequence.
|
||||
mouse_left_click = close_current
|
||||
mouse_middle_click = do_action, close_current
|
||||
mouse_right_click = close_all
|
||||
|
||||
# Experimental features that may or may not work correctly. Do not expect them
|
||||
# to have a consistent behaviour across releases.
|
||||
[experimental]
|
||||
# Calculate the dpi to use on a per-monitor basis.
|
||||
# If this setting is enabled the Xft.dpi value will be ignored and instead
|
||||
# dunst will attempt to calculate an appropriate dpi value for each monitor
|
||||
# using the resolution and physical size. This might be useful in setups
|
||||
# where there are multiple screens with very different dpi values.
|
||||
per_monitor_dpi = false
|
||||
|
||||
# Pause notification timeout when mouse hovers over the notification window.
|
||||
# When enabled, notifications won't timeout while the mouse pointer is over
|
||||
# them. The timeout resumes when the pointer leaves the window.
|
||||
# Only works on Wayland.
|
||||
pause_on_mouse_over = false
|
||||
|
||||
|
||||
[urgency_low]
|
||||
# IMPORTANT: colors have to be defined in quotation marks.
|
||||
# Otherwise the "#" and following would be interpreted as a comment.
|
||||
background = "#222222"
|
||||
foreground = "#888888"
|
||||
timeout = 10
|
||||
# Icon for notifications with low urgency
|
||||
default_icon = dialog-information
|
||||
|
||||
[urgency_normal]
|
||||
background = "#285577"
|
||||
foreground = "#ffffff"
|
||||
timeout = 10
|
||||
override_pause_level = 30
|
||||
# Icon for notifications with normal urgency
|
||||
default_icon = dialog-information
|
||||
|
||||
[urgency_critical]
|
||||
background = "#900000"
|
||||
foreground = "#ffffff"
|
||||
frame_color = "#ff0000"
|
||||
timeout = 0
|
||||
override_pause_level = 60
|
||||
# Icon for notifications with critical urgency
|
||||
default_icon = dialog-warning
|
||||
|
||||
# Every section that isn't one of the above is interpreted as a rules to
|
||||
# override settings for certain messages.
|
||||
#
|
||||
# Messages can be matched by
|
||||
# appname (discouraged, see desktop_entry)
|
||||
# body
|
||||
# category
|
||||
# desktop_entry
|
||||
# icon
|
||||
# match_transient
|
||||
# msg_urgency
|
||||
# stack_tag
|
||||
# summary
|
||||
#
|
||||
# and you can override the
|
||||
# background
|
||||
# foreground
|
||||
# format
|
||||
# frame_color
|
||||
# fullscreen
|
||||
# new_icon
|
||||
# set_stack_tag
|
||||
# set_transient
|
||||
# set_category
|
||||
# timeout
|
||||
# urgency
|
||||
# icon_position
|
||||
# skip_display
|
||||
# history_ignore
|
||||
# action_name
|
||||
# word_wrap
|
||||
# ellipsize
|
||||
# alignment
|
||||
# hide_text
|
||||
# override_pause_level
|
||||
#
|
||||
# Shell-like globbing will get expanded.
|
||||
#
|
||||
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
|
||||
# GLib based applications export their desktop-entry name. In comparison to the appname,
|
||||
# the desktop-entry won't get localized.
|
||||
#
|
||||
# You can also allow a notification to appear even when paused. Notification will appear whenever notification's override_pause_level >= dunst's paused level.
|
||||
# This can be used to set partial pause modes, where more urgent notifications get through, but less urgent stay paused. To do that, you can override the following in the rules:
|
||||
# override_pause_level = X
|
||||
|
||||
# SCRIPTING
|
||||
# You can specify a script that gets run when the rule matches by
|
||||
# setting the "script" option.
|
||||
# The script will be called as follows:
|
||||
# script appname summary body icon urgency
|
||||
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
|
||||
#
|
||||
# NOTE: It might be helpful to run dunst -print in a terminal in order
|
||||
# to find fitting options for rules.
|
||||
|
||||
# Disable the transient hint so that idle_threshold cannot be bypassed from the
|
||||
# client
|
||||
#[transient_disable]
|
||||
# match_transient = yes
|
||||
# set_transient = no
|
||||
#
|
||||
# Make the handling of transient notifications more strict by making them not
|
||||
# be placed in history.
|
||||
#[transient_history_ignore]
|
||||
# match_transient = yes
|
||||
# history_ignore = yes
|
||||
|
||||
# fullscreen values
|
||||
# show: show the notifications, regardless if there is a fullscreen window opened
|
||||
# delay: displays the new notification, if there is no fullscreen window active
|
||||
# If the notification is already drawn, it won't get undrawn.
|
||||
# pushback: same as delay, but when switching into fullscreen, the notification will get
|
||||
# withdrawn from screen again and will get delayed like a new notification
|
||||
#[fullscreen_delay_everything]
|
||||
# fullscreen = delay
|
||||
#[fullscreen_show_critical]
|
||||
# msg_urgency = critical
|
||||
# fullscreen = show
|
||||
|
||||
#[espeak]
|
||||
# summary = "*"
|
||||
# script = dunst_espeak.sh
|
||||
|
||||
#[script-test]
|
||||
# summary = "*script*"
|
||||
# script = dunst_test.sh
|
||||
|
||||
#[ignore]
|
||||
# # This notification will not be displayed
|
||||
# summary = "foobar"
|
||||
# skip_display = true
|
||||
|
||||
#[history-ignore]
|
||||
# # This notification will not be saved in history
|
||||
# summary = "foobar"
|
||||
# history_ignore = yes
|
||||
|
||||
#[skip-display]
|
||||
# # This notification will not be displayed, but will be included in the history
|
||||
# summary = "foobar"
|
||||
# skip_display = yes
|
||||
|
||||
#[signed_on]
|
||||
# appname = Pidgin
|
||||
# summary = "*signed on*"
|
||||
# urgency = low
|
||||
#
|
||||
#[signed_off]
|
||||
# appname = Pidgin
|
||||
# summary = *signed off*
|
||||
# urgency = low
|
||||
#
|
||||
#[says]
|
||||
# appname = Pidgin
|
||||
# summary = *says*
|
||||
# urgency = critical
|
||||
#
|
||||
#[twitter]
|
||||
# appname = Pidgin
|
||||
# summary = *twitter.com*
|
||||
# urgency = normal
|
||||
#
|
||||
#[stack-volumes]
|
||||
# appname = "some_volume_notifiers"
|
||||
# set_stack_tag = "volume"
|
||||
#
|
||||
@@ -0,0 +1 @@
|
||||
ELECTRON_OZONE_PLATFORM_HINT=auto
|
||||
@@ -0,0 +1,2 @@
|
||||
VISUAL=nvim
|
||||
EDITOR=nvim
|
||||
@@ -0,0 +1,2 @@
|
||||
PROTON_ENABLE_WAYLAND=1
|
||||
PROTON_USE_NTSYNC=1
|
||||
@@ -0,0 +1 @@
|
||||
SSH_AUTH_SOCK=/home/pmcc/.bitwarden-ssh-agent.sock
|
||||
@@ -0,0 +1,4 @@
|
||||
GTK_THEME=Adwaita:dark
|
||||
#GTK2_RC_FILES=/usr/share/themes/Adwaita-dark/gtk-2.0/gtkrc
|
||||
#QT_STYLE_OVERRIDE=Adwaita-Dark
|
||||
QT_QPA_PLATFORMTHEME=qt6ct
|
||||
@@ -0,0 +1,7 @@
|
||||
source /usr/share/cachyos-fish-config/cachyos-config.fish
|
||||
|
||||
alias dotfiles='chezmoi'
|
||||
|
||||
fish_add_path ~/.local/bin
|
||||
|
||||
starship init fish | source
|
||||
@@ -0,0 +1,80 @@
|
||||
# vim:ft=kitty
|
||||
|
||||
## name: Catppuccin-Mocha
|
||||
## author: Pocco81 (https://github.com/Pocco81)
|
||||
## license: MIT
|
||||
## upstream: https://github.com/catppuccin/kitty/blob/main/mocha.conf
|
||||
## blurb: Soothing pastel theme for the high-spirited!
|
||||
|
||||
|
||||
|
||||
# The basic colors
|
||||
foreground #CDD6F4
|
||||
background #1E1E2E
|
||||
selection_foreground #1E1E2E
|
||||
selection_background #F5E0DC
|
||||
|
||||
# Cursor colors
|
||||
cursor #F5E0DC
|
||||
cursor_text_color #1E1E2E
|
||||
|
||||
# URL underline color when hovering with mouse
|
||||
url_color #F5E0DC
|
||||
|
||||
# Kitty window border colors
|
||||
active_border_color #B4BEFE
|
||||
inactive_border_color #6C7086
|
||||
bell_border_color #F9E2AF
|
||||
|
||||
# OS Window titlebar colors
|
||||
wayland_titlebar_color system
|
||||
macos_titlebar_color system
|
||||
|
||||
# Tab bar colors
|
||||
active_tab_foreground #11111B
|
||||
active_tab_background #CBA6F7
|
||||
inactive_tab_foreground #CDD6F4
|
||||
inactive_tab_background #181825
|
||||
tab_bar_background #11111B
|
||||
|
||||
# Colors for marks (marked text in the terminal)
|
||||
mark1_foreground #1E1E2E
|
||||
mark1_background #B4BEFE
|
||||
mark2_foreground #1E1E2E
|
||||
mark2_background #CBA6F7
|
||||
mark3_foreground #1E1E2E
|
||||
mark3_background #74C7EC
|
||||
|
||||
# The 16 terminal colors
|
||||
|
||||
# black
|
||||
color0 #45475A
|
||||
color8 #585B70
|
||||
|
||||
# red
|
||||
color1 #F38BA8
|
||||
color9 #F38BA8
|
||||
|
||||
# green
|
||||
color2 #A6E3A1
|
||||
color10 #A6E3A1
|
||||
|
||||
# yellow
|
||||
color3 #F9E2AF
|
||||
color11 #F9E2AF
|
||||
|
||||
# blue
|
||||
color4 #89B4FA
|
||||
color12 #89B4FA
|
||||
|
||||
# magenta
|
||||
color5 #F5C2E7
|
||||
color13 #F5C2E7
|
||||
|
||||
# cyan
|
||||
color6 #94E2D5
|
||||
color14 #94E2D5
|
||||
|
||||
# white
|
||||
color7 #BAC2DE
|
||||
color15 #A6ADC8
|
||||
@@ -0,0 +1,19 @@
|
||||
# Font Configuration
|
||||
font_family JetBrainsMono Nerd Font
|
||||
bold_font auto
|
||||
italic_font auto
|
||||
bold_italic_font auto
|
||||
|
||||
shell /usr/bin/tmux new-session -A -D -s main
|
||||
|
||||
# Terminal Type
|
||||
term xterm-256color
|
||||
|
||||
map shift+enter send_text all \x1b[13;2u
|
||||
|
||||
confirm_os_window_close 0
|
||||
|
||||
# BEGIN_KITTY_THEME
|
||||
# Catppuccin-Mocha
|
||||
include current-theme.conf
|
||||
# END_KITTY_THEME
|
||||
@@ -0,0 +1,47 @@
|
||||
gui:
|
||||
theme:
|
||||
activeBorderColor:
|
||||
- '#cba6f7'
|
||||
- bold
|
||||
inactiveBorderColor:
|
||||
- '#a6adc8'
|
||||
searchingActiveBorderColor:
|
||||
- '#f9e2af'
|
||||
optionsTextColor:
|
||||
- '#89b4fa'
|
||||
selectedLineBgColor:
|
||||
- '#313244'
|
||||
inactiveViewSelectedLineBgColor:
|
||||
- '#6c7086'
|
||||
cherryPickedCommitFgColor:
|
||||
- '#cba6f7'
|
||||
cherryPickedCommitBgColor:
|
||||
- '#45475a'
|
||||
markedBaseCommitFgColor:
|
||||
- '#89b4fa'
|
||||
markedBaseCommitBgColor:
|
||||
- '#f9e2af'
|
||||
unstagedChangesColor:
|
||||
- '#f38ba8'
|
||||
defaultFgColor:
|
||||
- '#cdd6f4'
|
||||
authorColors:
|
||||
'*': '#b4befe'
|
||||
|
||||
showNumstatInFilesView: true
|
||||
nerdFontsVersion: 3
|
||||
statusPanelView: allBranchesLog
|
||||
|
||||
authorColors:
|
||||
'*': '#b4befe'
|
||||
|
||||
customCommands:
|
||||
- key: "<c-4>"
|
||||
prompts:
|
||||
- type: input
|
||||
title: Commit hash to search for
|
||||
key: Hash
|
||||
command: git branch -a --contains {{.Form.Hash}}
|
||||
context: global
|
||||
description: Show branches containing commit
|
||||
output: popup
|
||||
@@ -0,0 +1,20 @@
|
||||
vim.g.mapleader = " "
|
||||
vim.g.maplocalleader = " "
|
||||
|
||||
require("config")
|
||||
|
||||
-- Bootstrap lazy.nvim
|
||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
if not vim.loop.fs_stat(lazypath) then
|
||||
vim.fn.system({
|
||||
"git", "clone", "--filter=blob:none",
|
||||
"https://github.com/folke/lazy.nvim.git",
|
||||
"--branch=stable",
|
||||
lazypath,
|
||||
})
|
||||
end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
|
||||
require("lazy").setup("plugins", {
|
||||
change_detection = { notify = false },
|
||||
})
|
||||
@@ -0,0 +1,15 @@
|
||||
return {
|
||||
cmd = { "lua-language-server" },
|
||||
filetypes = { "lua" },
|
||||
root_markers = {
|
||||
".luarc.json", ".luarc.jsonc", ".luacheckrc",
|
||||
".stylua.toml", "stylua.toml", "selene.toml",
|
||||
"selene.yml", ".git"
|
||||
},
|
||||
settings = {
|
||||
Lua = {
|
||||
runtime = { version = "LuaJIT" }, -- Neovim uses LuaJIT
|
||||
diagnostics = { globals = { "vim" } }, -- Recognize 'vim' global
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,143 @@
|
||||
local function augroup(name)
|
||||
return vim.api.nvim_create_augroup("user_" .. name, { clear = true })
|
||||
end
|
||||
|
||||
-- Check if we need to reload the file when it changed
|
||||
vim.api.nvim_create_autocmd({ "FocusGained", "TermClose", "TermLeave" }, {
|
||||
group = augroup("checktime"),
|
||||
callback = function()
|
||||
if vim.o.buftype ~= "nofile" then
|
||||
vim.cmd("checktime")
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Highlight on yank
|
||||
vim.api.nvim_create_autocmd("TextYankPost", {
|
||||
group = augroup("highlight_yank"),
|
||||
callback = function()
|
||||
(vim.hl or vim.highlight).on_yank()
|
||||
end,
|
||||
})
|
||||
|
||||
-- resize splits if window got resized
|
||||
vim.api.nvim_create_autocmd({ "VimResized" }, {
|
||||
group = augroup("resize_splits"),
|
||||
callback = function()
|
||||
local current_tab = vim.fn.tabpagenr()
|
||||
vim.cmd("tabdo wincmd =")
|
||||
vim.cmd("tabnext " .. current_tab)
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
-- make it easier to close man-files when opened inline
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
group = augroup("man_unlisted"),
|
||||
pattern = { "man" },
|
||||
callback = function(event)
|
||||
vim.bo[event.buf].buflisted = false
|
||||
end,
|
||||
})
|
||||
|
||||
-- close some filetypes with <q>
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
group = augroup("close_with_q"),
|
||||
pattern = {
|
||||
"PlenaryTestPopup",
|
||||
"checkhealth",
|
||||
"dbout",
|
||||
"gitsigns-blame",
|
||||
"grug-far",
|
||||
"help",
|
||||
"lspinfo",
|
||||
"neotest-output",
|
||||
"neotest-output-panel",
|
||||
"neotest-summary",
|
||||
"notify",
|
||||
"qf",
|
||||
"spectre_panel",
|
||||
"startuptime",
|
||||
"tsplayground",
|
||||
},
|
||||
callback = function(event)
|
||||
vim.bo[event.buf].buflisted = false
|
||||
vim.schedule(function()
|
||||
vim.keymap.set("n", "q", function()
|
||||
vim.cmd("close")
|
||||
pcall(vim.api.nvim_buf_delete, event.buf, { force = true })
|
||||
end, {
|
||||
buffer = event.buf,
|
||||
silent = true,
|
||||
desc = "Quit buffer",
|
||||
})
|
||||
end)
|
||||
end,
|
||||
})
|
||||
|
||||
-- wrap and check for spell in text filetypes
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
group = augroup("wrap_spell"),
|
||||
pattern = { "text", "plaintex", "typst", "gitcommit", "markdown" },
|
||||
callback = function()
|
||||
vim.opt_local.wrap = true
|
||||
vim.opt_local.spell = true
|
||||
end,
|
||||
})
|
||||
|
||||
-- Fix conceallevel for json files
|
||||
vim.api.nvim_create_autocmd({ "FileType" }, {
|
||||
group = augroup("json_conceal"),
|
||||
pattern = { "json", "jsonc", "json5" },
|
||||
callback = function()
|
||||
vim.opt_local.conceallevel = 0
|
||||
end,
|
||||
})
|
||||
|
||||
-- Auto create dir when saving a file, in case some intermediate directory does not exist
|
||||
vim.api.nvim_create_autocmd({ "BufWritePre" }, {
|
||||
group = augroup("auto_create_dir"),
|
||||
callback = function(event)
|
||||
if event.match:match("^%w%w+:[/][/]") then
|
||||
return
|
||||
end
|
||||
local file = vim.uv.fs_realpath(event.match) or event.match
|
||||
vim.fn.mkdir(vim.fn.fnamemodify(file, ":p:h"), "p")
|
||||
end,
|
||||
})
|
||||
|
||||
-- Set filetype for .env and .env.* files
|
||||
vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, {
|
||||
group = augroup("env_filetype"),
|
||||
pattern = { "*.env", ".env.*" },
|
||||
callback = function()
|
||||
vim.opt_local.filetype = "sh"
|
||||
end,
|
||||
})
|
||||
|
||||
-- Set filetype for .toml files
|
||||
vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, {
|
||||
group = augroup("toml_filetype"),
|
||||
pattern = { "*.tomg-config*" },
|
||||
callback = function()
|
||||
vim.opt_local.filetype = "toml"
|
||||
end,
|
||||
})
|
||||
|
||||
-- Set filetype for .ejs files
|
||||
vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, {
|
||||
group = augroup("ejs_filetype"),
|
||||
pattern = { "*.ejs", "*.ejs.t" },
|
||||
callback = function()
|
||||
vim.opt_local.filetype = "embedded_template"
|
||||
end,
|
||||
})
|
||||
|
||||
-- Set filetype for .code-snippets files
|
||||
vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, {
|
||||
group = augroup("code_snippets_filetype"),
|
||||
pattern = { "*.code-snippets" },
|
||||
callback = function()
|
||||
vim.opt_local.filetype = "json"
|
||||
end,
|
||||
})
|
||||
@@ -0,0 +1,72 @@
|
||||
--- diagnostic settings
|
||||
local map = vim.keymap.set
|
||||
|
||||
local palette = {
|
||||
err = "#51202A",
|
||||
warn = "#3B3B1B",
|
||||
info = "#1F3342",
|
||||
hint = "#1E2E1E",
|
||||
}
|
||||
|
||||
vim.api.nvim_set_hl(0, "DiagnosticErrorLine", { bg = palette.err, blend = 20 })
|
||||
vim.api.nvim_set_hl(0, "DiagnosticWarnLine", { bg = palette.warn, blend = 15 })
|
||||
vim.api.nvim_set_hl(0, "DiagnosticInfoLine", { bg = palette.info, blend = 10 })
|
||||
vim.api.nvim_set_hl(0, "DiagnosticHintLine", { bg = palette.hint, blend = 10 })
|
||||
|
||||
vim.api.nvim_set_hl(0, "DapBreakpointSign", { fg = "#FF0000", bg = nil, bold = true })
|
||||
vim.fn.sign_define("DapBreakpoint", {
|
||||
text = "●", -- a large dot; change as desired
|
||||
texthl = "DapBreakpointSign", -- the highlight group you just defined
|
||||
linehl = "", -- no full-line highlight
|
||||
numhl = "", -- no number-column highlight
|
||||
})
|
||||
|
||||
local sev = vim.diagnostic.severity
|
||||
|
||||
vim.diagnostic.config({
|
||||
-- keep underline & severity_sort on for quick scanning
|
||||
underline = true,
|
||||
severity_sort = true,
|
||||
update_in_insert = false, -- less flicker
|
||||
float = {
|
||||
border = "rounded",
|
||||
source = true,
|
||||
},
|
||||
-- keep signs & virtual text, but tune them as you like
|
||||
signs = {
|
||||
text = {
|
||||
[sev.ERROR] = " ",
|
||||
[sev.WARN] = " ",
|
||||
[sev.INFO] = " ",
|
||||
[sev.HINT] = " ",
|
||||
},
|
||||
},
|
||||
virtual_text = {
|
||||
spacing = 4,
|
||||
source = "if_many",
|
||||
prefix = "●",
|
||||
},
|
||||
-- NEW in 0.11 — dim whole line
|
||||
linehl = {
|
||||
[sev.ERROR] = "DiagnosticErrorLine",
|
||||
[sev.WARN] = "DiagnosticWarnLine",
|
||||
[sev.INFO] = "DiagnosticInfoLine",
|
||||
[sev.HINT] = "DiagnosticHintLine",
|
||||
},
|
||||
})
|
||||
|
||||
-- diagnostic keymaps
|
||||
local diagnostic_goto = function(next, severity)
|
||||
severity = severity and vim.diagnostic.severity[severity] or nil
|
||||
return function()
|
||||
vim.diagnostic.jump({ count = next and 1 or -1, float = true, severity = severity })
|
||||
end
|
||||
end
|
||||
|
||||
map("n", "<leader>cd", vim.diagnostic.open_float, { desc = "Line Diagnostics" })
|
||||
map("n", "]d", diagnostic_goto(true), { desc = "Next Diagnostic" })
|
||||
map("n", "[d", diagnostic_goto(false), { desc = "Prev Diagnostic" })
|
||||
map("n", "]e", diagnostic_goto(true, "ERROR"), { desc = "Next Error" })
|
||||
map("n", "[e", diagnostic_goto(false, "ERROR"), { desc = "Prev Error" })
|
||||
map("n", "]w", diagnostic_goto(true, "WARN"), { desc = "Next Warning" })
|
||||
map("n", "[w", diagnostic_goto(false, "WARN"), { desc = "Prev Warning" })
|
||||
@@ -0,0 +1,5 @@
|
||||
require("config.options")
|
||||
require("config.keymaps")
|
||||
require("config.diagnostics")
|
||||
require("config.autocmds")
|
||||
require("config.lsp")
|
||||
@@ -0,0 +1,222 @@
|
||||
local map = vim.keymap.set
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
-- BUFFER NAVIGATION (think browser tabs)
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
|
||||
-- Tab/Shift-Tab: Like browser tabs, feels natural
|
||||
map("n", "<Tab>", ":bnext<CR>", { desc = "Next buffer" })
|
||||
map("n", "<S-Tab>", ":bprevious<CR>", { desc = "Previous buffer" })
|
||||
|
||||
-- Alternative buffer switching (vim-style)
|
||||
map("n", "<leader>bn", ":bnext<CR>", { desc = "Next buffer" })
|
||||
map("n", "<leader>bp", ":bprevious<CR>", { desc = "Previous buffer" })
|
||||
map("n", "<S-h>", "<cmd>bprevious<cr>", { desc = "Prev Buffer" })
|
||||
map("n", "<S-l>", "<cmd>bnext<cr>", { desc = "Next Buffer" })
|
||||
map("n", "[b", "<cmd>bprevious<cr>", { desc = "Prev Buffer" })
|
||||
map("n", "]b", "<cmd>bnext<cr>", { desc = "Next Buffer" })
|
||||
|
||||
-- Quick switch to last edited file (super useful!)
|
||||
map("n", "<leader>bb", "<cmd>e #<cr>", { desc = "Switch to Other Buffer" })
|
||||
map("n", "<leader>`", "<cmd>e #<cr>", { desc = "Switch to Other Buffer" })
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
-- WINDOW MANAGEMENT (splitting and navigation)
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
|
||||
-- Move between windows with Ctrl+hjkl (like tmux)
|
||||
map("n", "<C-h>", "<C-w>h", { desc = "Go to Left Window", remap = true })
|
||||
map("n", "<C-j>", "<C-w>j", { desc = "Go to Lower Window", remap = true })
|
||||
map("n", "<C-k>", "<C-w>k", { desc = "Go to Upper Window", remap = true })
|
||||
map("n", "<C-l>", "<C-w>l", { desc = "Go to Right Window", remap = true })
|
||||
|
||||
-- Resize windows with Ctrl+Shift+arrows (macOS friendly)
|
||||
map("n", "<C-S-Up>", "<cmd>resize +5<CR>", opts)
|
||||
map("n", "<C-S-Down>", "<cmd>resize -5<CR>", opts)
|
||||
map("n", "<C-S-Left>", "<cmd>vertical resize -5<CR>", opts)
|
||||
map("n", "<C-S-Right>", "<cmd>vertical resize +5<CR>", opts)
|
||||
|
||||
-- Window splitting
|
||||
map("n", "<leader>ww", "<C-W>p", { desc = "Other Window", remap = true })
|
||||
map("n", "<leader>wd", "<C-W>c", { desc = "Delete Window", remap = true })
|
||||
map("n", "<leader>w-", "<C-W>s", { desc = "Split Window Below", remap = true })
|
||||
map("n", "<leader>sh", "<C-W>s", { desc = "Split Window Below", remap = true })
|
||||
map("n", "<leader>w|", "<C-W>v", { desc = "Split Window Right", remap = true })
|
||||
map("n", "<leader>|", "<C-W>v", { desc = "Split Window Right", remap = true })
|
||||
map("n", "<leader>sv", "<C-W>v", { desc = "Split Window Right", remap = true })
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
-- SMART LINE MOVEMENT (the VSCode experience)
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
|
||||
-- Smart j/k: moves by visual lines when no count, real lines with count
|
||||
map({ "n", "x" }, "j", "v:count == 0 ? 'gj' : 'j'", { desc = "Down", expr = true, silent = true })
|
||||
map({ "n", "x" }, "<Down>", "v:count == 0 ? 'gj' : 'j'", { desc = "Down", expr = true, silent = true })
|
||||
map({ "n", "x" }, "k", "v:count == 0 ? 'gk' : 'k'", { desc = "Up", expr = true, silent = true })
|
||||
map({ "n", "x" }, "<Up>", "v:count == 0 ? 'gk' : 'k'", { desc = "Up", expr = true, silent = true })
|
||||
|
||||
-- Move lines up/down (Alt+j/k like VSCode)
|
||||
map("n", "<A-j>", "<cmd>execute 'move .+' . v:count1<cr>==", { desc = "Move Down" })
|
||||
map("n", "<A-k>", "<cmd>execute 'move .-' . (v:count1 + 1)<cr>==", { desc = "Move Up" })
|
||||
map("i", "<A-j>", "<esc><cmd>m .+1<cr>==gi", { desc = "Move Down" })
|
||||
map("i", "<A-k>", "<esc><cmd>m .-2<cr>==gi", { desc = "Move Up" })
|
||||
map("v", "<A-j>", ":<C-u>execute \"'<,'>move '>+\" . v:count1<cr>gv=gv", { desc = "Move Down" })
|
||||
map("v", "<A-k>", ":<C-u>execute \"'<,'>move '<-\" . (v:count1 + 1)<cr>gv=gv", { desc = "Move Up" })
|
||||
|
||||
-- Alternative line movement (for terminals that don't support Alt)
|
||||
map("v", "J", ":move '>+1<CR>gv=gv", { desc = "Move Block Down" })
|
||||
map("v", "K", ":move '<-2<CR>gv=gv", { desc = "Move Block Up" })
|
||||
map("n", "<A-Down>", ":m .+1<CR>", opts)
|
||||
map("n", "<A-Up>", ":m .-2<CR>", opts)
|
||||
map("i", "<A-Down>", "<Esc>:m .+1<CR>==gi", opts)
|
||||
map("i", "<A-Up>", "<Esc>:m .-2<CR>==gi", opts)
|
||||
map("v", "<A-Down>", ":m '>+1<CR>gv=gv", opts)
|
||||
map("v", "<A-Up>", ":m '<-2<CR>gv=gv", opts)
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
-- SEARCH & NAVIGATION (ergonomic improvements)
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
|
||||
-- Better line start/end (more comfortable than $ and ^)
|
||||
map("n", "gl", "$", { desc = "Go to end of line" })
|
||||
map("n", "gh", "^", { desc = "Go to start of line" })
|
||||
map("n", "<A-h>", "^", { desc = "Go to start of line", silent = true })
|
||||
map("n", "<A-l>", "$", { desc = "Go to end of line", silent = true })
|
||||
|
||||
-- Select all content
|
||||
map("n", "==", "gg<S-v>G")
|
||||
map("n", "<A-a>", "ggVG", { noremap = true, silent = true, desc = "Select all" })
|
||||
|
||||
-- Clear search highlighting
|
||||
map({ "i", "n" }, "<esc>", "<cmd>noh<cr><esc>", { desc = "Escape and Clear hlsearch" })
|
||||
map("n", "<leader>ur", "<Cmd>nohlsearch<Bar>diffupdate<Bar>normal! <C-L><CR>", { desc = "Redraw / Clear hlsearch / Diff Update" })
|
||||
|
||||
-- Smart search navigation (n always goes forward, N always backward)
|
||||
map("n", "n", "'Nn'[v:searchforward].'zv'", { expr = true, desc = "Next Search Result" })
|
||||
map("x", "n", "'Nn'[v:searchforward]", { expr = true, desc = "Next Search Result" })
|
||||
map("o", "n", "'Nn'[v:searchforward]", { expr = true, desc = "Next Search Result" })
|
||||
map("n", "N", "'nN'[v:searchforward].'zv'", { expr = true, desc = "Prev Search Result" })
|
||||
map("x", "N", "'nN'[v:searchforward]", { expr = true, desc = "Prev Search Result" })
|
||||
map("o", "N", "'nN'[v:searchforward]", { expr = true, desc = "Prev Search Result" })
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
-- SMART TEXT EDITING
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
|
||||
-- Better indenting (stay in visual mode)
|
||||
map("v", "<", "<gv")
|
||||
map("v", ">", ">gv")
|
||||
|
||||
-- Better paste (doesn't replace clipboard with deleted text)
|
||||
map("v", "p", '"_dP', opts)
|
||||
|
||||
-- Copy whole file to clipboard
|
||||
map("n", "<C-c>", ":%y+<CR>", opts)
|
||||
|
||||
-- Smart undo break-points (create undo points at logical stops)
|
||||
map("i", ",", ",<c-g>u")
|
||||
map("i", ".", ".<c-g>u")
|
||||
map("i", ";", ";<c-g>u")
|
||||
|
||||
-- Auto-close pairs (simple, no plugin needed)
|
||||
map("i", "`", "``<left>")
|
||||
map("i", '"', '""<left>')
|
||||
map("i", "(", "()<left>")
|
||||
map("i", "[", "[]<left>")
|
||||
map("i", "{", "{}<left>")
|
||||
map("i", "<", "<><left>")
|
||||
-- Note: Single quotes commented out to avoid conflicts in some contexts
|
||||
-- map("i", "'", "''<left>")
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
-- FILE OPERATIONS
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
|
||||
-- Save file (works in all modes)
|
||||
map({ "i", "x", "n", "s" }, "<C-s>", "<cmd>w<cr><esc>", { desc = "Save File" })
|
||||
|
||||
-- Create new file
|
||||
map("n", "<leader>fn", "<cmd>enew<cr>", { desc = "New File" })
|
||||
|
||||
-- Quit operations
|
||||
map("n", "<leader>qq", "<cmd>qa<cr>", { desc = "Quit All" })
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
-- DEVELOPMENT TOOLS
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
|
||||
-- Commenting (add comment above/below current line)
|
||||
map("n", "gco", "o<esc>Vcx<esc><cmd>normal gcc<cr>fxa<bs>", { desc = "Add Comment Below" })
|
||||
map("n", "gcO", "O<esc>Vcx<esc><cmd>normal gcc<cr>fxa<bs>", { desc = "Add Comment Above" })
|
||||
|
||||
-- Quickfix and location lists
|
||||
map("n", "<leader>xl", function()
|
||||
local success, err = pcall(vim.fn.getloclist(0, { winid = 0 }).winid ~= 0 and vim.cmd.lclose or vim.cmd.lopen)
|
||||
if not success and err then
|
||||
vim.notify(err, vim.log.levels.ERROR)
|
||||
end
|
||||
end, { desc = "Location List" })
|
||||
|
||||
map("n", "<leader>xq", function()
|
||||
local success, err = pcall(vim.fn.getqflist({ winid = 0 }).winid ~= 0 and vim.cmd.cclose or vim.cmd.copen)
|
||||
if not success and err then
|
||||
vim.notify(err, vim.log.levels.ERROR)
|
||||
end
|
||||
end, { desc = "Quickfix List" })
|
||||
|
||||
map("n", "[q", vim.cmd.cprev, { desc = "Previous Quickfix" })
|
||||
map("n", "]q", vim.cmd.cnext, { desc = "Next Quickfix" })
|
||||
|
||||
-- Inspection tools (useful for debugging highlights and treesitter)
|
||||
map("n", "<leader>ui", vim.show_pos, { desc = "Inspect Pos" })
|
||||
map("n", "<leader>uI", "<cmd>InspectTree<cr>", { desc = "Inspect Tree" })
|
||||
|
||||
-- Keyword program (K for help on word under cursor)
|
||||
map("n", "<leader>K", "<cmd>norm! K<cr>", { desc = "Keywordprg" })
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
-- TERMINAL INTEGRATION
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
|
||||
-- Terminal mode navigation
|
||||
map("t", "<esc><esc>", "<c-\\><c-n>", { desc = "Enter Normal Mode" })
|
||||
map("t", "<C-h>", "<cmd>wincmd h<cr>", { desc = "Go to Left Window" })
|
||||
map("t", "<C-j>", "<cmd>wincmd j<cr>", { desc = "Go to Lower Window" })
|
||||
map("t", "<C-k>", "<cmd>wincmd k<cr>", { desc = "Go to Upper Window" })
|
||||
map("t", "<C-l>", "<cmd>wincmd l<cr>", { desc = "Go to Right Window" })
|
||||
map("t", "<C-/>", "<cmd>close<cr>", { desc = "Hide Terminal" })
|
||||
map("t", "<c-_>", "<cmd>close<cr>", { desc = "which_key_ignore" })
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
-- TAB MANAGEMENT (when you need multiple workspaces)
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
|
||||
map("n", "<leader><tab>l", "<cmd>tablast<cr>", { desc = "Last Tab" })
|
||||
map("n", "<leader><tab>o", "<cmd>tabonly<cr>", { desc = "Close Other Tabs" })
|
||||
map("n", "<leader><tab>f", "<cmd>tabfirst<cr>", { desc = "First Tab" })
|
||||
map("n", "<leader><tab><tab>", "<cmd>tabnew<cr>", { desc = "New Tab" })
|
||||
map("n", "<leader><tab>]", "<cmd>tabnext<cr>", { desc = "Next Tab" })
|
||||
map("n", "<leader><tab>d", "<cmd>tabclose<cr>", { desc = "Close Tab" })
|
||||
map("n", "<leader><tab>[", "<cmd>tabprevious<cr>", { desc = "Previous Tab" })
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
-- FOLDING NAVIGATION (for code organization)
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
|
||||
-- Close all folds except current one (great for focus)
|
||||
map("n", "zv", "zMzvzz", { desc = "Close all folds except the current one" })
|
||||
|
||||
-- Smart fold navigation (closes current, opens next/previous)
|
||||
map("n", "zj", "zcjzOzz", { desc = "Close current fold when open. Always open next fold." })
|
||||
map("n", "zk", "zckzOzz", { desc = "Close current fold when open. Always open previous fold." })
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
-- UTILITY SHORTCUTS
|
||||
-- ═══════════════════════════════════════════════════════════
|
||||
|
||||
-- Toggle line wrapping
|
||||
map("n", "<leader>tw", "<cmd>set wrap!<CR>", { desc = "Toggle Wrap", silent = true })
|
||||
|
||||
-- Fix spelling (picks first suggestion)
|
||||
map("n", "z0", "1z=", { desc = "Fix word under cursor" })
|
||||
@@ -0,0 +1,62 @@
|
||||
-- LSP
|
||||
local function augroup(name)
|
||||
return vim.api.nvim_create_augroup("user_" .. name, { clear = true })
|
||||
end
|
||||
|
||||
local default_keymaps = {
|
||||
{ keys = "<leader>ca", func = vim.lsp.buf.code_action, desc = "Code Actions" },
|
||||
{ keys = "<leader>cr", func = vim.lsp.buf.rename, desc = "Code Rename" },
|
||||
{ keys = "<leader>k", func = vim.lsp.buf.hover, desc = "Hover Documentation", has = "hoverProvider" },
|
||||
{ keys = "K", func = vim.lsp.buf.hover, desc = "Hover (alt)", has = "hoverProvider" },
|
||||
{ keys = "gd", func = vim.lsp.buf.definition, desc = "Goto Definition", has = "definitionProvider" },
|
||||
}
|
||||
|
||||
-- I use blink.cmp for completion, but you can use native completion too
|
||||
local completion = vim.g.completion_mode or "blink" -- or 'native' for built-in completion
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
group = augroup("lsp_attach"),
|
||||
callback = function(args)
|
||||
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
||||
local buf = args.buf
|
||||
if client then
|
||||
-- Built-in completion
|
||||
if completion == "native" and client:supports_method("textDocument/completion") then
|
||||
vim.lsp.completion.enable(true, client.id, args.buf, { autotrigger = true })
|
||||
end
|
||||
|
||||
-- Inlay hints
|
||||
if client:supports_method("textDocument/inlayHints") then
|
||||
vim.lsp.inlay_hint.enable(true, { bufnr = args.buf })
|
||||
end
|
||||
|
||||
if client:supports_method("textDocument/documentColor") then
|
||||
vim.lsp.document_color.enable(true, args.buf, {
|
||||
style = "background", -- 'background', 'foreground', or 'virtual'
|
||||
})
|
||||
end
|
||||
|
||||
for _, km in ipairs(default_keymaps) do
|
||||
-- Only bind if there's no `has` requirement, or the server supports it
|
||||
if not km.has or client.server_capabilities[km.has] then
|
||||
vim.keymap.set(
|
||||
km.mode or "n",
|
||||
km.keys,
|
||||
km.func,
|
||||
{ buffer = buf, desc = "LSP: " .. km.desc, nowait = km.nowait }
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Enable LSP servers for Neovim 0.11+
|
||||
vim.lsp.enable({
|
||||
"lua_ls",
|
||||
})
|
||||
|
||||
-- Load Lsp on-demand, e.g: eslint is disable by default
|
||||
-- e.g: We could enable eslint by set vim.g.lsp_on_demands = {"eslint"}
|
||||
if vim.g.lsp_on_demands then
|
||||
vim.lsp.enable(vim.g.lsp_on_demands)
|
||||
end
|
||||
@@ -0,0 +1,137 @@
|
||||
local opt = vim.opt
|
||||
|
||||
opt.number = true -- Line numbers
|
||||
opt.relativenumber = true -- Relative line numbers
|
||||
opt.cursorline = true -- Highlight current line
|
||||
opt.wrap = false -- Don't wrap lines
|
||||
opt.scrolloff = 10 -- Keep 10 lines above/below cursor
|
||||
opt.sidescrolloff = 8 -- Keep 8 columns left/right of cursor
|
||||
|
||||
-- Indentation
|
||||
opt.tabstop = 2 -- Tab width
|
||||
opt.shiftwidth = 2 -- Indent width
|
||||
opt.softtabstop = 2 -- Soft tab stop
|
||||
opt.expandtab = true -- Use spaces instead of tabs
|
||||
opt.smartindent = true -- Smart auto-indenting
|
||||
opt.autoindent = true -- Copy indent from current line
|
||||
|
||||
-- Search settings
|
||||
opt.ignorecase = true -- Case insensitive search
|
||||
opt.smartcase = true -- Case sensitive if uppercase in search
|
||||
opt.hlsearch = false -- Don't highlight search results
|
||||
opt.incsearch = true -- Show matches as you type
|
||||
|
||||
-- Visual settings
|
||||
opt.termguicolors = true -- Enable 24-bit colors
|
||||
opt.signcolumn = "yes" -- Always show sign column
|
||||
opt.showmatch = true -- Highlight matching brackets
|
||||
opt.matchtime = 2 -- How long to show matching bracket
|
||||
opt.cmdheight = 1 -- Command line height
|
||||
opt.showmode = false -- Don't show mode in command line
|
||||
opt.pumheight = 10 -- Popup menu height
|
||||
opt.pumblend = 10 -- Popup menu transparency
|
||||
opt.winblend = 0 -- Floating window transparency
|
||||
opt.completeopt = "menu,menuone,noselect"
|
||||
opt.conceallevel = 2 -- Hide * markup for bold and italic, but not markers with substitutions
|
||||
opt.confirm = true -- Confirm to save changes before exiting modified buffer
|
||||
opt.concealcursor = "" -- Don't hide cursor line markup
|
||||
opt.synmaxcol = 300 -- Syntax highlighting limit
|
||||
opt.ruler = false -- Disable the default ruler
|
||||
opt.virtualedit = "block" -- Allow cursor to move where there is no text in visual block mode
|
||||
opt.winminwidth = 5 -- Minimum window width
|
||||
|
||||
-- File handling
|
||||
opt.backup = false -- Don't create backup files
|
||||
opt.writebackup = false -- Don't create backup before writing
|
||||
opt.swapfile = false -- Don't create swap files
|
||||
opt.undofile = true -- Persistent undo
|
||||
opt.undolevels = 10000
|
||||
opt.undodir = vim.fn.expand("~/.vim/undodir") -- Undo directory
|
||||
opt.updatetime = 300 -- Faster completion
|
||||
opt.timeoutlen = vim.g.vscode and 1000 or 300 -- Lower than default (1000) to quickly trigger which-key
|
||||
opt.ttimeoutlen = 0 -- Key code timeout
|
||||
opt.autoread = true -- Auto reload files changed outside vim
|
||||
opt.autowrite = true -- Auto save
|
||||
|
||||
-- Behavior settings
|
||||
opt.hidden = true -- Allow hidden buffers
|
||||
opt.errorbells = false -- No error bells
|
||||
opt.backspace = "indent,eol,start" -- Better backspace behavior
|
||||
opt.autochdir = false -- Don't auto change directory
|
||||
opt.iskeyword:append("-") -- Treat dash as part of word
|
||||
opt.path:append("**") -- include subdirectories in search
|
||||
opt.selection = "exclusive" -- Selection behavior
|
||||
opt.mouse = "a" -- Enable mouse support
|
||||
opt.clipboard = vim.env.SSH_TTY and "" or "unnamedplus" -- Sync with system clipboard
|
||||
opt.modifiable = true -- Allow buffer modifications
|
||||
opt.encoding = "UTF-8" -- Set encoding
|
||||
|
||||
-- Folding settings
|
||||
opt.smoothscroll = true
|
||||
vim.wo.foldmethod = "expr"
|
||||
opt.foldlevel = 99 -- Start with all folds open
|
||||
opt.formatoptions = "jcroqlnt" -- tcqj
|
||||
opt.grepformat = "%f:%l:%c:%m"
|
||||
opt.grepprg = "rg --vimgrep"
|
||||
|
||||
-- Split behavior
|
||||
opt.splitbelow = true -- Horizontal splits go below
|
||||
opt.splitright = true -- Vertical splits go right
|
||||
opt.splitkeep = "screen"
|
||||
|
||||
-- Command-line completion
|
||||
opt.wildmenu = true
|
||||
opt.wildmode = "longest:full,full"
|
||||
opt.wildignore:append({ "*.o", "*.obj", "*.pyc", "*.class", "*.jar" })
|
||||
|
||||
-- Better diff options
|
||||
opt.diffopt:append("linematch:60")
|
||||
|
||||
-- Performance improvements
|
||||
opt.redrawtime = 10000
|
||||
opt.maxmempattern = 20000
|
||||
|
||||
-- Create undo directory if it doesn't exist
|
||||
local undodir = vim.fn.expand("~/.vim/undodir")
|
||||
if vim.fn.isdirectory(undodir) == 0 then
|
||||
vim.fn.mkdir(undodir, "p")
|
||||
end
|
||||
|
||||
vim.g.autoformat = true
|
||||
vim.g.trouble_lualine = true
|
||||
|
||||
--[[
|
||||
opt.fillchars = {
|
||||
foldopen = "",
|
||||
foldclose = "",
|
||||
fold = " ",
|
||||
foldsep = " ",
|
||||
diff = "╱",
|
||||
eob = " ",
|
||||
}
|
||||
]]
|
||||
|
||||
opt.jumpoptions = "view"
|
||||
opt.laststatus = 3 -- global statusline
|
||||
opt.list = false
|
||||
opt.linebreak = true -- Wrap lines at convenient points
|
||||
opt.list = true -- Show some invisible characters (tabs...
|
||||
opt.shiftround = true -- Round indent
|
||||
opt.shiftwidth = 2 -- Size of an indent
|
||||
opt.shortmess:append({ W = true, I = true, c = true, C = true })
|
||||
|
||||
vim.g.markdown_recommended_style = 0
|
||||
|
||||
vim.filetype.add({
|
||||
extension = {
|
||||
env = "dotenv",
|
||||
},
|
||||
filename = {
|
||||
[".env"] = "dotenv",
|
||||
["env"] = "dotenv",
|
||||
},
|
||||
pattern = {
|
||||
["[jt]sconfig.*.json"] = "jsonc",
|
||||
["%.env%.[%w_.-]+"] = "dotenv",
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,21 @@
|
||||
return {
|
||||
"saghen/blink.cmp",
|
||||
version = "^1",
|
||||
event = "InsertEnter", -- Lazy's native equivalent of the manual InsertEnter augroup
|
||||
config = function()
|
||||
require("blink.cmp").setup({
|
||||
keymap = { preset = "super-tab" },
|
||||
appearance = {
|
||||
nerd_font_variant = "mono",
|
||||
use_nvim_cmp_as_default = true,
|
||||
},
|
||||
completion = {
|
||||
documentation = { auto_show = false },
|
||||
},
|
||||
sources = {
|
||||
default = { "lsp", "path", "snippets", "buffer" },
|
||||
},
|
||||
fuzzy = { implementation = "prefer_rust_with_warning" },
|
||||
})
|
||||
end,
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
return {
|
||||
"stevearc/conform.nvim",
|
||||
config = function()
|
||||
require("conform").setup({
|
||||
formatters_by_ft = {
|
||||
lua = { "stylua" },
|
||||
go = { "goimports", "gofmt" },
|
||||
python = { "ruff_format", "black", stop_after_first = true },
|
||||
json = { "biome", "prettier", stop_after_first = true },
|
||||
markdown = { "prettier" },
|
||||
javascript = { "biome", "prettier", stop_after_first = true },
|
||||
typescript = { "biome", "prettier", stop_after_first = true },
|
||||
javascriptreact = { "biome", "prettier", stop_after_first = true },
|
||||
typescriptreact = { "biome", "prettier", stop_after_first = true },
|
||||
css = { "prettier" },
|
||||
html = { "prettier" },
|
||||
toml = { "taplo" },
|
||||
},
|
||||
formatters = {
|
||||
biome = { require_cwd = true },
|
||||
},
|
||||
default_format_opts = {
|
||||
lsp_format = "fallback",
|
||||
},
|
||||
})
|
||||
|
||||
vim.api.nvim_create_user_command("FormatDisable", function(opts)
|
||||
if opts.bang then
|
||||
vim.b.disable_autoformat = true
|
||||
else
|
||||
vim.g.disable_autoformat = true
|
||||
end
|
||||
vim.notify("Autoformat disabled" .. (opts.bang and " (buffer)" or " (global)"), vim.log.levels.WARN)
|
||||
end, { desc = "Disable autoformat-on-save", bang = true })
|
||||
|
||||
vim.api.nvim_create_user_command("FormatEnable", function()
|
||||
vim.b.disable_autoformat = false
|
||||
vim.g.disable_autoformat = false
|
||||
vim.notify("Autoformat enabled", vim.log.levels.INFO)
|
||||
end, { desc = "Re-enable autoformat-on-save" })
|
||||
|
||||
local auto_format = true
|
||||
|
||||
vim.keymap.set("n", "<leader>uf", function()
|
||||
auto_format = not auto_format
|
||||
if auto_format then
|
||||
vim.cmd("FormatEnable")
|
||||
else
|
||||
vim.cmd("FormatDisable")
|
||||
end
|
||||
end, { desc = "Toggle Autoformat" })
|
||||
|
||||
vim.keymap.set({ "n", "v" }, "<leader>cn", "<cmd>ConformInfo<cr>", { desc = "Conform Info" })
|
||||
|
||||
vim.keymap.set({ "n", "v" }, "<leader>cf", function()
|
||||
require("conform").format({ async = true }, function(err, did_edit)
|
||||
if not err and did_edit then
|
||||
vim.notify("Code formatted", vim.log.levels.INFO, { title = "Conform" })
|
||||
end
|
||||
end)
|
||||
end, { desc = "Format buffer" })
|
||||
|
||||
vim.keymap.set({ "n", "v" }, "<leader>cF", function()
|
||||
require("conform").format({ formatters = { "injected" }, timeout_ms = 3000 })
|
||||
end, { desc = "Format Injected Langs" })
|
||||
end,
|
||||
}
|
||||
@@ -0,0 +1,289 @@
|
||||
return {
|
||||
{
|
||||
"lewis6991/gitsigns.nvim",
|
||||
config = function()
|
||||
require("gitsigns").setup({
|
||||
signs = {
|
||||
add = { text = "┃" },
|
||||
change = { text = "┃" },
|
||||
delete = { text = "_" },
|
||||
topdelete = { text = "‾" },
|
||||
changedelete = { text = "~" },
|
||||
untracked = { text = "┆" },
|
||||
},
|
||||
signs_staged = {
|
||||
add = { text = "┃" },
|
||||
change = { text = "┃" },
|
||||
delete = { text = "_" },
|
||||
topdelete = { text = "‾" },
|
||||
changedelete = { text = "~" },
|
||||
untracked = { text = "┆" },
|
||||
},
|
||||
signs_staged_enable = true,
|
||||
signcolumn = true,
|
||||
numhl = false,
|
||||
linehl = false,
|
||||
word_diff = false,
|
||||
watch_gitdir = { follow_files = true },
|
||||
auto_attach = true,
|
||||
attach_to_untracked = false,
|
||||
current_line_blame = false,
|
||||
current_line_blame_opts = {
|
||||
virt_text = true,
|
||||
virt_text_pos = "eol",
|
||||
delay = 1000,
|
||||
ignore_whitespace = false,
|
||||
virt_text_priority = 100,
|
||||
use_focus = true,
|
||||
},
|
||||
current_line_blame_formatter = "<author>, <author_time:%R> - <summary>",
|
||||
sign_priority = 6,
|
||||
update_debounce = 100,
|
||||
status_formatter = nil,
|
||||
max_file_length = 40000,
|
||||
preview_config = {
|
||||
style = "minimal",
|
||||
relative = "cursor",
|
||||
row = 0,
|
||||
col = 1,
|
||||
},
|
||||
on_attach = function(bufnr)
|
||||
local gitsigns = require("gitsigns")
|
||||
|
||||
local function map(mode, l, r, opts)
|
||||
opts = opts or {}
|
||||
opts.buffer = bufnr
|
||||
vim.keymap.set(mode, l, r, opts)
|
||||
end
|
||||
|
||||
-- Navigation
|
||||
map("n", "]c", function()
|
||||
if vim.wo.diff then vim.cmd.normal({ "]c", bang = true })
|
||||
else gitsigns.nav_hunk("next") end
|
||||
end)
|
||||
map("n", "[c", function()
|
||||
if vim.wo.diff then vim.cmd.normal({ "[c", bang = true })
|
||||
else gitsigns.nav_hunk("prev") end
|
||||
end)
|
||||
|
||||
-- Actions
|
||||
map("n", "<leader>hs", gitsigns.stage_hunk)
|
||||
map("n", "<leader>hr", gitsigns.reset_hunk)
|
||||
map("v", "<leader>hs", function() gitsigns.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) end)
|
||||
map("v", "<leader>hr", function() gitsigns.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) end)
|
||||
map("n", "<leader>hS", gitsigns.stage_buffer)
|
||||
map("n", "<leader>hR", gitsigns.reset_buffer)
|
||||
map("n", "<leader>hp", gitsigns.preview_hunk)
|
||||
map("n", "<leader>hi", gitsigns.preview_hunk_inline)
|
||||
map("n", "<leader>hb", function() gitsigns.blame_line({ full = true }) end)
|
||||
map("n", "<leader>hd", gitsigns.diffthis)
|
||||
map("n", "<leader>hD", function() gitsigns.diffthis("~") end)
|
||||
map("n", "<leader>hQ", function() gitsigns.setqflist("all") end)
|
||||
map("n", "<leader>hq", gitsigns.setqflist)
|
||||
|
||||
-- Toggles
|
||||
map("n", "<leader>tb", gitsigns.toggle_current_line_blame)
|
||||
map("n", "<leader>tw", gitsigns.toggle_word_diff)
|
||||
|
||||
-- Text object
|
||||
map({ "o", "x" }, "ih", gitsigns.select_hunk)
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
{
|
||||
"sindrets/diffview.nvim",
|
||||
dependencies = { "nvim-lua/plenary.nvim" },
|
||||
config = function()
|
||||
local actions = require("diffview.actions")
|
||||
|
||||
require("diffview").setup({
|
||||
diff_binaries = false,
|
||||
enhanced_diff_hl = false,
|
||||
git_cmd = { "git" },
|
||||
hg_cmd = { "hg" },
|
||||
use_icons = true,
|
||||
show_help_hints = true,
|
||||
watch_index = true,
|
||||
icons = {
|
||||
folder_closed = "",
|
||||
folder_open = "",
|
||||
},
|
||||
signs = {
|
||||
fold_closed = "",
|
||||
fold_open = "",
|
||||
done = "✓",
|
||||
},
|
||||
view = {
|
||||
default = {
|
||||
layout = "diff2_horizontal",
|
||||
disable_diagnostics = false,
|
||||
winbar_info = false,
|
||||
},
|
||||
merge_tool = {
|
||||
layout = "diff3_horizontal",
|
||||
disable_diagnostics = true,
|
||||
winbar_info = true,
|
||||
},
|
||||
file_history = {
|
||||
layout = "diff2_horizontal",
|
||||
disable_diagnostics = false,
|
||||
winbar_info = false,
|
||||
},
|
||||
},
|
||||
file_panel = {
|
||||
listing_style = "tree",
|
||||
tree_options = {
|
||||
flatten_dirs = true,
|
||||
folder_statuses = "only_folded",
|
||||
},
|
||||
win_config = {
|
||||
position = "left",
|
||||
width = 35,
|
||||
win_opts = {},
|
||||
},
|
||||
},
|
||||
file_history_panel = {
|
||||
log_options = {
|
||||
git = {
|
||||
single_file = { diff_merges = "combined" },
|
||||
multi_file = { diff_merges = "first-parent" },
|
||||
},
|
||||
hg = {
|
||||
single_file = {},
|
||||
multi_file = {},
|
||||
},
|
||||
},
|
||||
win_config = {
|
||||
position = "bottom",
|
||||
height = 16,
|
||||
win_opts = {},
|
||||
},
|
||||
},
|
||||
commit_log_panel = {
|
||||
win_config = {},
|
||||
},
|
||||
default_args = {
|
||||
DiffviewOpen = {},
|
||||
DiffviewFileHistory = {},
|
||||
},
|
||||
hooks = {},
|
||||
keymaps = {
|
||||
disable_defaults = false,
|
||||
view = {
|
||||
{ "n", "<tab>", actions.select_next_entry, { desc = "Open the diff for the next file" } },
|
||||
{ "n", "<s-tab>", actions.select_prev_entry, { desc = "Open the diff for the previous file" } },
|
||||
{ "n", "[F", actions.select_first_entry, { desc = "Open the diff for the first file" } },
|
||||
{ "n", "]F", actions.select_last_entry, { desc = "Open the diff for the last file" } },
|
||||
{ "n", "gf", actions.goto_file_edit, { desc = "Open the file in the previous tabpage" } },
|
||||
{ "n", "<C-w><C-f>", actions.goto_file_split, { desc = "Open the file in a new split" } },
|
||||
{ "n", "<C-w>gf", actions.goto_file_tab, { desc = "Open the file in a new tabpage" } },
|
||||
{ "n", "<leader>e", actions.focus_files, { desc = "Bring focus to the file panel" } },
|
||||
{ "n", "<leader>b", actions.toggle_files, { desc = "Toggle the file panel." } },
|
||||
{ "n", "g<C-x>", actions.cycle_layout, { desc = "Cycle through available layouts." } },
|
||||
{ "n", "[x", actions.prev_conflict, { desc = "In the merge-tool: jump to the previous conflict" } },
|
||||
{ "n", "]x", actions.next_conflict, { desc = "In the merge-tool: jump to the next conflict" } },
|
||||
{ "n", "<leader>co", actions.conflict_choose("ours"), { desc = "Choose the OURS version of a conflict" } },
|
||||
{ "n", "<leader>ct", actions.conflict_choose("theirs"), { desc = "Choose the THEIRS version of a conflict" } },
|
||||
{ "n", "<leader>cb", actions.conflict_choose("base"), { desc = "Choose the BASE version of a conflict" } },
|
||||
{ "n", "<leader>ca", actions.conflict_choose("all"), { desc = "Choose all the versions of a conflict" } },
|
||||
{ "n", "dX", actions.conflict_choose("none"), { desc = "Delete the conflict region" } },
|
||||
{ "n", "<leader>cO", actions.conflict_choose_all("ours"), { desc = "Choose OURS for the whole file" } },
|
||||
{ "n", "<leader>cT", actions.conflict_choose_all("theirs"), { desc = "Choose THEIRS for the whole file" } },
|
||||
{ "n", "<leader>cB", actions.conflict_choose_all("base"), { desc = "Choose BASE for the whole file" } },
|
||||
{ "n", "<leader>cA", actions.conflict_choose_all("all"), { desc = "Choose all versions for the whole file" } },
|
||||
{ "n", "g?", actions.help("view"), { desc = "Open the help panel" } },
|
||||
},
|
||||
file_panel = {
|
||||
{ "n", "j", actions.next_entry, { desc = "Bring the cursor to the next file entry" } },
|
||||
{ "n", "<down>", actions.next_entry, { desc = "Bring the cursor to the next file entry" } },
|
||||
{ "n", "k", actions.prev_entry, { desc = "Bring the cursor to the previous file entry" } },
|
||||
{ "n", "<up>", actions.prev_entry, { desc = "Bring the cursor to the previous file entry" } },
|
||||
{ "n", "<cr>", actions.select_entry, { desc = "Open the diff for the selected entry" } },
|
||||
{ "n", "o", actions.select_entry, { desc = "Open the diff for the selected entry" } },
|
||||
{ "n", "l", actions.select_entry, { desc = "Open the diff for the selected entry" } },
|
||||
{ "n", "<2-LeftMouse>", actions.select_entry, { desc = "Open the diff for the selected entry" } },
|
||||
{ "n", "-", actions.toggle_stage_entry, { desc = "Stage / unstage the selected entry" } },
|
||||
{ "n", "s", actions.toggle_stage_entry, { desc = "Stage / unstage the selected entry" } },
|
||||
{ "n", "S", actions.stage_all, { desc = "Stage all entries" } },
|
||||
{ "n", "U", actions.unstage_all, { desc = "Unstage all entries" } },
|
||||
{ "n", "X", actions.restore_entry, { desc = "Restore entry to the state on the left side" } },
|
||||
{ "n", "L", actions.open_commit_log, { desc = "Open the commit log panel" } },
|
||||
{ "n", "zo", actions.open_fold, { desc = "Expand fold" } },
|
||||
{ "n", "h", actions.close_fold, { desc = "Collapse fold" } },
|
||||
{ "n", "zc", actions.close_fold, { desc = "Collapse fold" } },
|
||||
{ "n", "za", actions.toggle_fold, { desc = "Toggle fold" } },
|
||||
{ "n", "zR", actions.open_all_folds, { desc = "Expand all folds" } },
|
||||
{ "n", "zM", actions.close_all_folds, { desc = "Collapse all folds" } },
|
||||
{ "n", "<c-b>", actions.scroll_view(-0.25), { desc = "Scroll the view up" } },
|
||||
{ "n", "<c-f>", actions.scroll_view(0.25), { desc = "Scroll the view down" } },
|
||||
{ "n", "<tab>", actions.select_next_entry, { desc = "Open the diff for the next file" } },
|
||||
{ "n", "<s-tab>", actions.select_prev_entry, { desc = "Open the diff for the previous file" } },
|
||||
{ "n", "[F", actions.select_first_entry, { desc = "Open the diff for the first file" } },
|
||||
{ "n", "]F", actions.select_last_entry, { desc = "Open the diff for the last file" } },
|
||||
{ "n", "gf", actions.goto_file_edit, { desc = "Open the file in the previous tabpage" } },
|
||||
{ "n", "<C-w><C-f>", actions.goto_file_split, { desc = "Open the file in a new split" } },
|
||||
{ "n", "<C-w>gf", actions.goto_file_tab, { desc = "Open the file in a new tabpage" } },
|
||||
{ "n", "i", actions.listing_style, { desc = "Toggle between 'list' and 'tree' views" } },
|
||||
{ "n", "f", actions.toggle_flatten_dirs, { desc = "Flatten empty subdirectories in tree listing style" } },
|
||||
{ "n", "R", actions.refresh_files, { desc = "Update stats and entries in the file list" } },
|
||||
{ "n", "<leader>e", actions.focus_files, { desc = "Bring focus to the file panel" } },
|
||||
{ "n", "<leader>b", actions.toggle_files, { desc = "Toggle the file panel" } },
|
||||
{ "n", "g<C-x>", actions.cycle_layout, { desc = "Cycle available layouts" } },
|
||||
{ "n", "[x", actions.prev_conflict, { desc = "Go to the previous conflict" } },
|
||||
{ "n", "]x", actions.next_conflict, { desc = "Go to the next conflict" } },
|
||||
{ "n", "g?", actions.help("file_panel"), { desc = "Open the help panel" } },
|
||||
{ "n", "<leader>cO", actions.conflict_choose_all("ours"), { desc = "Choose OURS for the whole file" } },
|
||||
{ "n", "<leader>cT", actions.conflict_choose_all("theirs"), { desc = "Choose THEIRS for the whole file" } },
|
||||
{ "n", "<leader>cB", actions.conflict_choose_all("base"), { desc = "Choose BASE for the whole file" } },
|
||||
{ "n", "<leader>cA", actions.conflict_choose_all("all"), { desc = "Choose all versions for the whole file" } },
|
||||
{ "n", "dX", actions.conflict_choose_all("none"), { desc = "Delete the conflict region for the whole file" } },
|
||||
},
|
||||
file_history_panel = {
|
||||
{ "n", "g!", actions.options, { desc = "Open the option panel" } },
|
||||
{ "n", "<C-A-d>", actions.open_in_diffview, { desc = "Open the entry under the cursor in a diffview" } },
|
||||
{ "n", "y", actions.copy_hash, { desc = "Copy the commit hash of the entry under the cursor" } },
|
||||
{ "n", "L", actions.open_commit_log, { desc = "Show commit details" } },
|
||||
{ "n", "X", actions.restore_entry, { desc = "Restore file to the state from the selected entry" } },
|
||||
{ "n", "zo", actions.open_fold, { desc = "Expand fold" } },
|
||||
{ "n", "zc", actions.close_fold, { desc = "Collapse fold" } },
|
||||
{ "n", "h", actions.close_fold, { desc = "Collapse fold" } },
|
||||
{ "n", "za", actions.toggle_fold, { desc = "Toggle fold" } },
|
||||
{ "n", "zR", actions.open_all_folds, { desc = "Expand all folds" } },
|
||||
{ "n", "zM", actions.close_all_folds, { desc = "Collapse all folds" } },
|
||||
{ "n", "j", actions.next_entry, { desc = "Bring the cursor to the next file entry" } },
|
||||
{ "n", "<down>", actions.next_entry, { desc = "Bring the cursor to the next file entry" } },
|
||||
{ "n", "k", actions.prev_entry, { desc = "Bring the cursor to the previous file entry" } },
|
||||
{ "n", "<up>", actions.prev_entry, { desc = "Bring the cursor to the previous file entry" } },
|
||||
{ "n", "<cr>", actions.select_entry, { desc = "Open the diff for the selected entry" } },
|
||||
{ "n", "o", actions.select_entry, { desc = "Open the diff for the selected entry" } },
|
||||
{ "n", "l", actions.select_entry, { desc = "Open the diff for the selected entry" } },
|
||||
{ "n", "<2-LeftMouse>", actions.select_entry, { desc = "Open the diff for the selected entry" } },
|
||||
{ "n", "<c-b>", actions.scroll_view(-0.25), { desc = "Scroll the view up" } },
|
||||
{ "n", "<c-f>", actions.scroll_view(0.25), { desc = "Scroll the view down" } },
|
||||
{ "n", "<tab>", actions.select_next_entry, { desc = "Open the diff for the next file" } },
|
||||
{ "n", "<s-tab>", actions.select_prev_entry, { desc = "Open the diff for the previous file" } },
|
||||
{ "n", "[F", actions.select_first_entry, { desc = "Open the diff for the first file" } },
|
||||
{ "n", "]F", actions.select_last_entry, { desc = "Open the diff for the last file" } },
|
||||
{ "n", "gf", actions.goto_file_edit, { desc = "Open the file in the previous tabpage" } },
|
||||
{ "n", "<C-w><C-f>", actions.goto_file_split, { desc = "Open the file in a new split" } },
|
||||
{ "n", "<C-w>gf", actions.goto_file_tab, { desc = "Open the file in a new tabpage" } },
|
||||
{ "n", "<leader>e", actions.focus_files, { desc = "Bring focus to the file panel" } },
|
||||
{ "n", "<leader>b", actions.toggle_files, { desc = "Toggle the file panel" } },
|
||||
{ "n", "g<C-x>", actions.cycle_layout, { desc = "Cycle available layouts" } },
|
||||
{ "n", "g?", actions.help("file_history_panel"), { desc = "Open the help panel" } },
|
||||
},
|
||||
option_panel = {
|
||||
{ "n", "<tab>", actions.select_entry, { desc = "Change the current option" } },
|
||||
{ "n", "q", actions.close, { desc = "Close the panel" } },
|
||||
{ "n", "g?", actions.help("option_panel"), { desc = "Open the help panel" } },
|
||||
},
|
||||
help_panel = {
|
||||
{ "n", "q", actions.close, { desc = "Close help menu" } },
|
||||
{ "n", "<esc>", actions.close, { desc = "Close help menu" } },
|
||||
},
|
||||
},
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
return {
|
||||
"fei6409/log-highlight.nvim",
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
return {
|
||||
"nvim-lualine/lualine.nvim",
|
||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||
config = function()
|
||||
require("lualine").setup({
|
||||
options = {
|
||||
icons_enabled = true,
|
||||
theme = "auto",
|
||||
component_separators = { left = "", right = "" },
|
||||
section_separators = { left = "", right = "" },
|
||||
disabled_filetypes = {
|
||||
statusline = {},
|
||||
winbar = {},
|
||||
},
|
||||
ignore_focus = {},
|
||||
always_divide_middle = true,
|
||||
always_show_tabline = true,
|
||||
globalstatus = false,
|
||||
refresh = {
|
||||
statusline = 1000,
|
||||
tabline = 1000,
|
||||
winbar = 1000,
|
||||
refresh_time = 16,
|
||||
events = {
|
||||
"WinEnter", "BufEnter", "BufWritePost", "SessionLoadPost",
|
||||
"FileChangedShellPost", "VimResized", "Filetype",
|
||||
"CursorMoved", "CursorMovedI", "ModeChanged",
|
||||
},
|
||||
},
|
||||
},
|
||||
sections = {
|
||||
lualine_a = { "mode" },
|
||||
lualine_b = { "branch", "diff", "diagnostics" },
|
||||
lualine_c = { "filename" },
|
||||
lualine_x = { "encoding", "fileformat", "filetype" },
|
||||
lualine_y = { "progress" },
|
||||
lualine_z = { "location" },
|
||||
},
|
||||
inactive_sections = {
|
||||
lualine_a = {},
|
||||
lualine_b = {},
|
||||
lualine_c = { "filename" },
|
||||
lualine_x = { "location" },
|
||||
lualine_y = {},
|
||||
lualine_z = {},
|
||||
},
|
||||
tabline = {},
|
||||
winbar = {},
|
||||
inactive_winbar = {},
|
||||
extensions = {},
|
||||
})
|
||||
end,
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
return {
|
||||
"MeanderingProgrammer/render-markdown.nvim",
|
||||
dependencies = {
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
"nvim-tree/nvim-web-devicons",
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
return {
|
||||
"nvim-neo-tree/neo-tree.nvim",
|
||||
version = "3.*",
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim",
|
||||
"MunifTanjim/nui.nvim",
|
||||
"nvim-tree/nvim-web-devicons",
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
return {
|
||||
"nvim-telescope/telescope.nvim",
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim",
|
||||
"nvim-tree/nvim-web-devicons",
|
||||
{
|
||||
"nvim-telescope/telescope-fzf-native.nvim",
|
||||
build = "make",
|
||||
},
|
||||
},
|
||||
config = function()
|
||||
local builtin = require("telescope.builtin")
|
||||
vim.keymap.set("n", "<leader>ff", builtin.find_files, { desc = "Telescope find files" })
|
||||
vim.keymap.set("n", "<leader>fg", builtin.live_grep, { desc = "Telescope live grep" })
|
||||
vim.keymap.set("n", "<leader>fb", builtin.buffers, { desc = "Telescope buffers" })
|
||||
vim.keymap.set("n", "<leader>fh", builtin.help_tags, { desc = "Telescope help tags" })
|
||||
end,
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
return {
|
||||
"catppuccin/nvim",
|
||||
name = "catppuccin",
|
||||
priority = 1000, -- Load before other plugins so colorscheme is set first
|
||||
config = function()
|
||||
vim.cmd("colorscheme catppuccin")
|
||||
end,
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
return {
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
branch = "main",
|
||||
build = ":TSUpdate",
|
||||
config = function()
|
||||
require("nvim-treesitter").setup({})
|
||||
require("nvim-treesitter").install({
|
||||
"bash", "blade", "c", "comment", "css", "diff", "dockerfile",
|
||||
"fish", "gitcommit", "gitignore", "go", "gomod", "gosum", "gowork",
|
||||
"html", "ini", "javascript", "jsdoc", "json", "lua", "luadoc",
|
||||
"luap", "make", "markdown", "markdown_inline", "nginx", "nix",
|
||||
"proto", "python", "query", "regex", "rust", "scss", "sql",
|
||||
"terraform", "toml", "tsx", "typescript", "vim", "vimdoc",
|
||||
"xml", "yaml", "zig",
|
||||
})
|
||||
|
||||
vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()"
|
||||
vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
||||
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = { "*" },
|
||||
callback = function()
|
||||
local filetype = vim.bo.filetype
|
||||
if filetype and filetype ~= "" then
|
||||
pcall(vim.treesitter.start)
|
||||
end
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||
branch = "main",
|
||||
dependencies = { "nvim-treesitter/nvim-treesitter" },
|
||||
config = function()
|
||||
require("nvim-treesitter-textobjects").setup({
|
||||
select = {
|
||||
enable = true,
|
||||
lookahead = true,
|
||||
selection_modes = {
|
||||
["@parameter.outer"] = "v",
|
||||
["@function.outer"] = "V",
|
||||
["@class.outer"] = "<c-v>",
|
||||
},
|
||||
include_surrounding_whitespace = false,
|
||||
},
|
||||
move = {
|
||||
enable = true,
|
||||
set_jumps = true,
|
||||
},
|
||||
})
|
||||
|
||||
-- SELECT keymaps
|
||||
local sel = require("nvim-treesitter-textobjects.select")
|
||||
for _, map in ipairs({
|
||||
{ { "x", "o" }, "af", "@function.outer" },
|
||||
{ { "x", "o" }, "if", "@function.inner" },
|
||||
{ { "x", "o" }, "ac", "@class.outer" },
|
||||
{ { "x", "o" }, "ic", "@class.inner" },
|
||||
{ { "x", "o" }, "aa", "@parameter.outer" },
|
||||
{ { "x", "o" }, "ia", "@parameter.inner" },
|
||||
{ { "x", "o" }, "ad", "@comment.outer" },
|
||||
{ { "x", "o" }, "as", "@statement.outer" },
|
||||
}) do
|
||||
vim.keymap.set(map[1], map[2], function()
|
||||
sel.select_textobject(map[3], "textobjects")
|
||||
end, { desc = "Select " .. map[3] })
|
||||
end
|
||||
|
||||
-- MOVE keymaps
|
||||
local mv = require("nvim-treesitter-textobjects.move")
|
||||
for _, map in ipairs({
|
||||
{ { "n", "x", "o" }, "]m", mv.goto_next_start, "@function.outer" },
|
||||
{ { "n", "x", "o" }, "[m", mv.goto_previous_start, "@function.outer" },
|
||||
{ { "n", "x", "o" }, "]]", mv.goto_next_start, "@class.outer" },
|
||||
{ { "n", "x", "o" }, "[[", mv.goto_previous_start, "@class.outer" },
|
||||
{ { "n", "x", "o" }, "]M", mv.goto_next_end, "@function.outer" },
|
||||
{ { "n", "x", "o" }, "[M", mv.goto_previous_end, "@function.outer" },
|
||||
{ { "n", "x", "o" }, "]o", mv.goto_next_start, { "@loop.inner", "@loop.outer" } },
|
||||
{ { "n", "x", "o" }, "[o", mv.goto_previous_start, { "@loop.inner", "@loop.outer" } },
|
||||
}) do
|
||||
local modes, lhs, fn, query = map[1], map[2], map[3], map[4]
|
||||
local qstr = (type(query) == "table") and table.concat(query, ",") or query
|
||||
vim.keymap.set(modes, lhs, function()
|
||||
fn(query, "textobjects")
|
||||
end, { desc = "Move to " .. qstr })
|
||||
end
|
||||
end,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
return {
|
||||
"folke/which-key.nvim",
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
local wk = require("which-key")
|
||||
wk.setup({
|
||||
preset = "helix",
|
||||
})
|
||||
wk.add({
|
||||
{ "<leader><tab>", group = "tabs" },
|
||||
{ "<leader>c", group = "code" },
|
||||
{ "<leader>d", group = "debug" },
|
||||
{ "<leader>D", group = "Diffview", icon = { icon = "", color = "orange" } },
|
||||
{ "<leader>p", group = "Yanky", icon = { icon = " ", color = "yellow" } },
|
||||
{ "<leader>dp", group = "profiler" },
|
||||
{ "<leader>f", group = "file/find" },
|
||||
{ "<leader>g", group = "git" },
|
||||
{ "<leader>gh", group = "hunks" },
|
||||
{ "<leader>q", group = "quit/session" },
|
||||
{ "<leader>s", group = "search" },
|
||||
{ "<leader>u", group = "ui", icon = { icon = " ", color = "cyan" } },
|
||||
{ "<leader>x", group = "diagnostics/quickfix", icon = { icon = " ", color = "green" } },
|
||||
{ "[", group = "prev" },
|
||||
{ "]", group = "next" },
|
||||
{ "g", group = "goto" },
|
||||
{ "gs", group = "surround" },
|
||||
{ "z", group = "fold" },
|
||||
{
|
||||
"<leader>b",
|
||||
group = "buffer",
|
||||
expand = function()
|
||||
return require("which-key.extras").expand.buf()
|
||||
end,
|
||||
},
|
||||
{
|
||||
"<leader>w",
|
||||
group = "windows",
|
||||
proxy = "<c-w>",
|
||||
expand = function()
|
||||
return require("which-key.extras").expand.win()
|
||||
end,
|
||||
},
|
||||
{ "gx", desc = "Open with system app" },
|
||||
{
|
||||
"<leader>fC",
|
||||
group = "Copy Path",
|
||||
{
|
||||
"<leader>fCf",
|
||||
function()
|
||||
vim.fn.setreg("+", vim.fn.expand("%:p"))
|
||||
vim.notify("Copied full file path: " .. vim.fn.expand("%:p"))
|
||||
end,
|
||||
desc = "Copy full file path",
|
||||
},
|
||||
{
|
||||
"<leader>fCn",
|
||||
function()
|
||||
vim.fn.setreg("+", vim.fn.expand("%:t"))
|
||||
vim.notify("Copied file name: " .. vim.fn.expand("%:t"))
|
||||
end,
|
||||
desc = "Copy file name",
|
||||
},
|
||||
{
|
||||
"<leader>fCr",
|
||||
function()
|
||||
local cwd = vim.fn.getcwd()
|
||||
local full_path = vim.fn.expand("%:p")
|
||||
local rel_path = full_path:sub(#cwd + 2)
|
||||
vim.fn.setreg("+", rel_path)
|
||||
vim.notify("Copied relative file path: " .. rel_path)
|
||||
end,
|
||||
desc = "Copy relative file path",
|
||||
},
|
||||
{
|
||||
"<leader>?",
|
||||
function()
|
||||
require("which-key").show({ global = false })
|
||||
end,
|
||||
desc = "Buffer Keymaps (which-key)",
|
||||
},
|
||||
{
|
||||
"<c-w><space>",
|
||||
function()
|
||||
require("which-key").show({ keys = "<c-w>", loop = true })
|
||||
end,
|
||||
desc = "Window Hydra Mode (which-key)",
|
||||
},
|
||||
},
|
||||
{
|
||||
mode = { "n", "v" },
|
||||
{ "<leader>q", "<cmd>q<cr>", desc = "Quit" },
|
||||
{ "<leader>w", "<cmd>w<cr>", desc = "Write" },
|
||||
},
|
||||
})
|
||||
end,
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
- Prefer concise, readable code over clever one-liners
|
||||
- No unnecessary comments — code should be self-documenting
|
||||
- Docker-friendly: no hardcoded paths, use env vars for config
|
||||
|
||||
<!-- codebase-memory-mcp:start -->
|
||||
# Codebase Knowledge Graph (codebase-memory-mcp)
|
||||
|
||||
This project uses codebase-memory-mcp to maintain a knowledge graph of the codebase.
|
||||
ALWAYS prefer MCP graph tools over grep/glob/file-search for code discovery.
|
||||
|
||||
## Priority Order
|
||||
1. `search_graph` — find functions, classes, routes, variables by pattern
|
||||
2. `trace_path` — trace who calls a function or what it calls
|
||||
3. `get_code_snippet` — read specific function/class source code
|
||||
4. `query_graph` — run Cypher queries for complex patterns
|
||||
5. `get_architecture` — high-level project summary
|
||||
|
||||
## When to fall back to grep/glob
|
||||
- Searching for string literals, error messages, config values
|
||||
- Searching non-code files (Dockerfiles, shell scripts, configs)
|
||||
- When MCP tools return insufficient results
|
||||
|
||||
## Examples
|
||||
- Find a handler: `search_graph(name_pattern=".*OrderHandler.*")`
|
||||
- Who calls it: `trace_path(function_name="OrderHandler", direction="inbound")`
|
||||
- Read source: `get_code_snippet(qualified_name="pkg/orders.OrderHandler")`
|
||||
<!-- codebase-memory-mcp:end -->
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"agent": {
|
||||
"build": {
|
||||
"model": "opencode-go/deepseek-v4-flash",
|
||||
"temperature": 1.0,
|
||||
"top_p": 0.95,
|
||||
"permission": {
|
||||
"skill": {
|
||||
"git-*": "allow"
|
||||
}
|
||||
}
|
||||
},
|
||||
"plan": {
|
||||
"model": "kimi-for-coding/k3"
|
||||
}
|
||||
},
|
||||
"mcp": {
|
||||
"gitea-mcp": {
|
||||
"enabled": true,
|
||||
"type": "local",
|
||||
"command": [
|
||||
"gitea-mcp",
|
||||
"-t",
|
||||
"stdio",
|
||||
"-H",
|
||||
"https://gitea.itspm.cc",
|
||||
"-T",
|
||||
"82e8aeb9bcf9b26d1bad9167549f6532f968bcb0"
|
||||
]
|
||||
},
|
||||
"codebase-memory-mcp": {
|
||||
"enabled": true,
|
||||
"type": "local",
|
||||
"command": [
|
||||
"/home/pmcc/.local/bin/codebase-memory-mcp"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
---
|
||||
name: git-commit
|
||||
description: Generate git commit messages using Conventional Commits specification
|
||||
license: MIT
|
||||
---
|
||||
|
||||
# Specification
|
||||
|
||||
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119.
|
||||
|
||||
- Commits MUST be prefixed with a type, which consists of a noun, feat, fix, etc., followed by the OPTIONAL scope, OPTIONAL !, and REQUIRED terminal colon and space.
|
||||
- The type feat MUST be used when a commit adds a new feature to your application or library.
|
||||
- The type fix MUST be used when a commit represents a bug fix for your application.
|
||||
- A scope MAY be provided after a type. A scope MUST consist of a noun describing a section of the codebase surrounded by parenthesis, e.g., fix(parser):
|
||||
- A description MUST immediately follow the colon and space after the type/scope prefix. The description is a short summary of the code changes, e.g., fix: array parsing issue when multiple spaces were contained in string.
|
||||
- A longer commit body MAY be provided after the short description, providing additional contextual information about the code changes. The body MUST begin one blank line after the description.
|
||||
- A commit body is free-form and MAY consist of any number of newline separated paragraphs.
|
||||
- One or more footers MAY be provided one blank line after the body. Each footer MUST consist of a word token, followed by either a :<space> or <space># separator, followed by a string value (this is inspired by the git trailer convention).
|
||||
- A footer’s token MUST use - in place of whitespace characters, e.g., Acked-by (this helps differentiate the footer section from a multi-paragraph body). An exception is made for BREAKING CHANGE, which MAY also be used as a token.
|
||||
- A footer’s value MAY contain spaces and newlines, and parsing MUST terminate when the next valid footer token/separator pair is observed.
|
||||
- Breaking changes MUST be indicated in the type/scope prefix of a commit, or as an entry in the footer.
|
||||
- If included as a footer, a breaking change MUST consist of the uppercase text BREAKING CHANGE, followed by a colon, space, and description, e.g., BREAKING CHANGE: environment variables now take precedence over config files.
|
||||
- If included in the type/scope prefix, breaking changes MUST be indicated by a ! immediately before the :. If ! is used, BREAKING CHANGE: MAY be omitted from the footer section, and the commit description SHALL be used to describe the breaking change.
|
||||
- Types other than feat and fix MAY be used in your commit messages, e.g., docs: update ref docs.
|
||||
- The units of information that make up Conventional Commits MUST NOT be treated as case-sensitive by implementors, with the exception of BREAKING CHANGE which MUST be uppercase.
|
||||
- BREAKING-CHANGE MUST be synonymous with BREAKING CHANGE, when used as a token in a footer.
|
||||
|
||||
# Examples
|
||||
|
||||
Commit message with description and breaking change footer
|
||||
```
|
||||
feat: allow provided config object to extend other configs
|
||||
|
||||
BREAKING CHANGE: `extends` key in config file is now used for extending other config files
|
||||
```
|
||||
|
||||
Commit message with ! to draw attention to breaking change
|
||||
```
|
||||
feat!: send an email to the customer when a product is shipped
|
||||
```
|
||||
|
||||
Commit message with scope and ! to draw attention to breaking change
|
||||
```
|
||||
feat(api)!: send an email to the customer when a product is shipped
|
||||
```
|
||||
|
||||
Commit message with both ! and BREAKING CHANGE footer
|
||||
```
|
||||
feat!: drop support for Node 6
|
||||
|
||||
BREAKING CHANGE: use JavaScript features not available in Node 6.
|
||||
```
|
||||
|
||||
Commit message with no body
|
||||
```
|
||||
docs: correct spelling of CHANGELOG
|
||||
```
|
||||
|
||||
Commit message with scope
|
||||
```
|
||||
feat(lang): add Polish language
|
||||
```
|
||||
|
||||
Commit message with multi-paragraph body and multiple footers
|
||||
```
|
||||
fix: prevent racing of requests
|
||||
|
||||
Introduce a request id and a reference to latest request. Dismiss
|
||||
incoming responses other than from latest request.
|
||||
|
||||
Remove timeouts which were used to mitigate the racing issue but are
|
||||
obsolete now.
|
||||
|
||||
Reviewed-by: Z
|
||||
Refs: #123
|
||||
```
|
||||
@@ -0,0 +1,361 @@
|
||||
{
|
||||
"devices": {
|
||||
"vi": {
|
||||
"1": {
|
||||
"name": "Game",
|
||||
"nick": "Game",
|
||||
"description": "Game",
|
||||
"device_type": "sink",
|
||||
"device_class": "virtual",
|
||||
"volume": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"mute": false,
|
||||
"flags": 0,
|
||||
"external": false,
|
||||
"primary": false,
|
||||
"channels": 2,
|
||||
"channel_list": [
|
||||
"FL",
|
||||
"FR"
|
||||
],
|
||||
"connections": {
|
||||
"a": {
|
||||
"1": {
|
||||
"nick": "SMSL",
|
||||
"state": true,
|
||||
"latency": null,
|
||||
"auto_ports": true,
|
||||
"input_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"output_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"port_map": []
|
||||
},
|
||||
"2": {
|
||||
"nick": "LSX II LT",
|
||||
"state": false,
|
||||
"latency": null,
|
||||
"auto_ports": true,
|
||||
"input_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"output_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"port_map": []
|
||||
}
|
||||
},
|
||||
"b": {}
|
||||
},
|
||||
"selected_channels": [
|
||||
true,
|
||||
true
|
||||
]
|
||||
},
|
||||
"2": {
|
||||
"name": "Music",
|
||||
"nick": "Music",
|
||||
"description": "Music",
|
||||
"device_type": "sink",
|
||||
"device_class": "virtual",
|
||||
"volume": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"mute": false,
|
||||
"flags": 0,
|
||||
"external": false,
|
||||
"primary": false,
|
||||
"channels": 2,
|
||||
"channel_list": [
|
||||
"FL",
|
||||
"FR"
|
||||
],
|
||||
"connections": {
|
||||
"a": {
|
||||
"1": {
|
||||
"nick": "SMSL",
|
||||
"state": true,
|
||||
"latency": null,
|
||||
"auto_ports": true,
|
||||
"input_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"output_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"port_map": []
|
||||
},
|
||||
"2": {
|
||||
"nick": "LSX II LT",
|
||||
"state": false,
|
||||
"latency": null,
|
||||
"auto_ports": true,
|
||||
"input_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"output_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"port_map": []
|
||||
}
|
||||
},
|
||||
"b": {}
|
||||
},
|
||||
"selected_channels": [
|
||||
true,
|
||||
true
|
||||
]
|
||||
},
|
||||
"3": {
|
||||
"name": "Chat",
|
||||
"nick": "Chat",
|
||||
"description": "Chat",
|
||||
"device_type": "sink",
|
||||
"device_class": "virtual",
|
||||
"volume": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"mute": false,
|
||||
"flags": 0,
|
||||
"external": false,
|
||||
"primary": false,
|
||||
"channels": 2,
|
||||
"channel_list": [
|
||||
"FL",
|
||||
"FR"
|
||||
],
|
||||
"connections": {
|
||||
"a": {
|
||||
"1": {
|
||||
"nick": "SMSL",
|
||||
"state": true,
|
||||
"latency": null,
|
||||
"auto_ports": true,
|
||||
"input_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"output_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"port_map": []
|
||||
},
|
||||
"2": {
|
||||
"nick": "LSX II LT",
|
||||
"state": false,
|
||||
"latency": null,
|
||||
"auto_ports": true,
|
||||
"input_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"output_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"port_map": []
|
||||
}
|
||||
},
|
||||
"b": {}
|
||||
},
|
||||
"selected_channels": [
|
||||
true,
|
||||
true
|
||||
]
|
||||
},
|
||||
"4": {
|
||||
"name": "System",
|
||||
"nick": "System",
|
||||
"description": "System",
|
||||
"device_type": "sink",
|
||||
"device_class": "virtual",
|
||||
"volume": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"mute": false,
|
||||
"flags": 0,
|
||||
"external": false,
|
||||
"primary": true,
|
||||
"channels": 2,
|
||||
"channel_list": [
|
||||
"FL",
|
||||
"FR"
|
||||
],
|
||||
"connections": {
|
||||
"a": {
|
||||
"1": {
|
||||
"nick": "SMSL",
|
||||
"state": true,
|
||||
"latency": null,
|
||||
"auto_ports": true,
|
||||
"input_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"output_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"port_map": []
|
||||
},
|
||||
"2": {
|
||||
"nick": "LSX II LT",
|
||||
"state": false,
|
||||
"latency": null,
|
||||
"auto_ports": true,
|
||||
"input_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"output_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"port_map": []
|
||||
}
|
||||
},
|
||||
"b": {}
|
||||
},
|
||||
"selected_channels": [
|
||||
true,
|
||||
true
|
||||
]
|
||||
}
|
||||
},
|
||||
"hi": {
|
||||
"1": {
|
||||
"name": "alsa_input.usb-Elgato_Systems_Elgato_Wave_3_BS10M1A04300-00.mono-fallback",
|
||||
"nick": "Wave",
|
||||
"description": "Elgato Wave 3 Mono",
|
||||
"device_type": "source",
|
||||
"device_class": "hardware",
|
||||
"volume": [
|
||||
33
|
||||
],
|
||||
"mute": false,
|
||||
"flags": 0,
|
||||
"external": false,
|
||||
"primary": null,
|
||||
"channels": 1,
|
||||
"channel_list": [
|
||||
"MONO"
|
||||
],
|
||||
"connections": {
|
||||
"a": {
|
||||
"1": {
|
||||
"nick": "SMSL",
|
||||
"state": false,
|
||||
"latency": null,
|
||||
"auto_ports": true,
|
||||
"input_sel_channels": [
|
||||
true
|
||||
],
|
||||
"output_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"port_map": []
|
||||
},
|
||||
"2": {
|
||||
"nick": "LSX II LT",
|
||||
"state": false,
|
||||
"latency": null,
|
||||
"auto_ports": true,
|
||||
"input_sel_channels": [
|
||||
true
|
||||
],
|
||||
"output_sel_channels": [
|
||||
true,
|
||||
true
|
||||
],
|
||||
"port_map": []
|
||||
}
|
||||
},
|
||||
"b": {}
|
||||
},
|
||||
"selected_channels": [
|
||||
true
|
||||
]
|
||||
}
|
||||
},
|
||||
"a": {
|
||||
"1": {
|
||||
"name": "alsa_output.usb-SMSL_SMSL_USB_AUDIO-00.analog-stereo",
|
||||
"nick": "SMSL",
|
||||
"description": "SMSL USB AUDIO Analog Stereo",
|
||||
"device_type": "sink",
|
||||
"device_class": "hardware",
|
||||
"volume": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"mute": false,
|
||||
"flags": 0,
|
||||
"external": false,
|
||||
"primary": null,
|
||||
"channels": 2,
|
||||
"channel_list": [
|
||||
"FL",
|
||||
"FR"
|
||||
],
|
||||
"connections": {
|
||||
"a": {},
|
||||
"b": {}
|
||||
},
|
||||
"selected_channels": [
|
||||
true,
|
||||
true
|
||||
]
|
||||
},
|
||||
"2": {
|
||||
"name": "alsa_output.usb-KEF_LSX_II_LT-01.analog-stereo",
|
||||
"nick": "LSX II LT",
|
||||
"description": "LSX II LT Analog Stereo",
|
||||
"device_type": "sink",
|
||||
"device_class": "hardware",
|
||||
"volume": [
|
||||
100,
|
||||
100
|
||||
],
|
||||
"mute": false,
|
||||
"flags": 0,
|
||||
"external": false,
|
||||
"primary": null,
|
||||
"channels": 2,
|
||||
"channel_list": [
|
||||
"FL",
|
||||
"FR"
|
||||
],
|
||||
"connections": {
|
||||
"a": {},
|
||||
"b": {}
|
||||
},
|
||||
"selected_channels": [
|
||||
true,
|
||||
true
|
||||
]
|
||||
}
|
||||
},
|
||||
"b": {}
|
||||
},
|
||||
"vumeters": false,
|
||||
"cleanup": false,
|
||||
"tray": false,
|
||||
"layout": "tabbed"
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
// @import "catppuccin-latte"
|
||||
// @import "catppuccin-frappe"
|
||||
// @import "catppuccin-macchiato"
|
||||
@import "catppuccin-mocha"
|
||||
|
||||
* {
|
||||
selected-active-foreground: @background;
|
||||
lightfg: @text;
|
||||
separatorcolor: @foreground;
|
||||
urgent-foreground: @red;
|
||||
alternate-urgent-background: @lightbg;
|
||||
lightbg: @mantle;
|
||||
background-color: transparent;
|
||||
border-color: @foreground;
|
||||
normal-background: @background;
|
||||
selected-urgent-background: @red;
|
||||
alternate-active-background: @lightbg;
|
||||
spacing: 2;
|
||||
alternate-normal-foreground: @foreground;
|
||||
urgent-background: @background;
|
||||
selected-normal-foreground: @lightbg;
|
||||
active-foreground: @blue;
|
||||
background: @base;
|
||||
selected-active-background: @blue;
|
||||
active-background: @background;
|
||||
selected-normal-background: @peach;
|
||||
alternate-normal-background: @lightbg;
|
||||
foreground: @text;
|
||||
selected-urgent-foreground: @background;
|
||||
normal-foreground: @foreground;
|
||||
alternate-urgent-foreground: @red;
|
||||
alternate-active-foreground: @blue;
|
||||
}
|
||||
element {
|
||||
padding: 1px ;
|
||||
cursor: pointer;
|
||||
spacing: 5px ;
|
||||
border: 0;
|
||||
}
|
||||
element normal.normal {
|
||||
background-color: @normal-background;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
element normal.urgent {
|
||||
background-color: @urgent-background;
|
||||
text-color: @urgent-foreground;
|
||||
}
|
||||
element normal.active {
|
||||
background-color: @active-background;
|
||||
text-color: @active-foreground;
|
||||
}
|
||||
element selected.normal {
|
||||
background-color: @selected-normal-background;
|
||||
text-color: @selected-normal-foreground;
|
||||
}
|
||||
element selected.urgent {
|
||||
background-color: @selected-urgent-background;
|
||||
text-color: @selected-urgent-foreground;
|
||||
}
|
||||
element selected.active {
|
||||
background-color: @selected-active-background;
|
||||
text-color: @selected-active-foreground;
|
||||
}
|
||||
element alternate.normal {
|
||||
background-color: @alternate-normal-background;
|
||||
text-color: @alternate-normal-foreground;
|
||||
}
|
||||
element alternate.urgent {
|
||||
background-color: @alternate-urgent-background;
|
||||
text-color: @alternate-urgent-foreground;
|
||||
}
|
||||
element alternate.active {
|
||||
background-color: @alternate-active-background;
|
||||
text-color: @alternate-active-foreground;
|
||||
}
|
||||
element-text {
|
||||
background-color: transparent;
|
||||
cursor: inherit;
|
||||
highlight: inherit;
|
||||
text-color: inherit;
|
||||
}
|
||||
element-icon {
|
||||
background-color: transparent;
|
||||
size: 1.0000em ;
|
||||
cursor: inherit;
|
||||
text-color: inherit;
|
||||
}
|
||||
window {
|
||||
padding: 5;
|
||||
background-color: @background;
|
||||
border: 1;
|
||||
}
|
||||
mainbox {
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
message {
|
||||
padding: 1px ;
|
||||
border-color: @separatorcolor;
|
||||
border: 2px dash 0px 0px ;
|
||||
}
|
||||
textbox {
|
||||
text-color: @foreground;
|
||||
}
|
||||
listview {
|
||||
padding: 2px 0px 0px ;
|
||||
scrollbar: true;
|
||||
border-color: @separatorcolor;
|
||||
spacing: 2px ;
|
||||
fixed-height: 0;
|
||||
border: 2px dash 0px 0px ;
|
||||
}
|
||||
scrollbar {
|
||||
width: 4px ;
|
||||
padding: 0;
|
||||
handle-width: 8px ;
|
||||
border: 0;
|
||||
handle-color: @peach;
|
||||
}
|
||||
sidebar {
|
||||
border-color: @separatorcolor;
|
||||
border: 2px dash 0px 0px ;
|
||||
}
|
||||
button {
|
||||
cursor: pointer;
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
button selected {
|
||||
background-color: @selected-normal-background;
|
||||
text-color: @selected-normal-foreground;
|
||||
}
|
||||
num-filtered-rows {
|
||||
expand: false;
|
||||
text-color: Gray;
|
||||
}
|
||||
num-rows {
|
||||
expand: false;
|
||||
text-color: Gray;
|
||||
}
|
||||
textbox-num-sep {
|
||||
expand: false;
|
||||
str: "/";
|
||||
text-color: Gray;
|
||||
}
|
||||
inputbar {
|
||||
padding: 1px ;
|
||||
spacing: 0px ;
|
||||
text-color: @normal-foreground;
|
||||
children: [ "prompt","textbox-prompt-colon","entry","num-filtered-rows","textbox-num-sep","num-rows","case-indicator" ];
|
||||
}
|
||||
case-indicator {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
entry {
|
||||
text-color: @normal-foreground;
|
||||
cursor: text;
|
||||
spacing: 0;
|
||||
placeholder-color: Gray;
|
||||
placeholder: "Type to filter";
|
||||
}
|
||||
prompt {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
textbox-prompt-colon {
|
||||
margin: 0px 0.3000em 0.0000em 0.0000em ;
|
||||
expand: false;
|
||||
str: ":";
|
||||
text-color: inherit;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
* {
|
||||
rosewater: #f5e0dc;
|
||||
flamingo: #f2cdcd;
|
||||
pink: #f5c2e7;
|
||||
mauve: #cba6f7;
|
||||
red: #f38ba8;
|
||||
maroon: #eba0ac;
|
||||
peach: #fab387;
|
||||
yellow: #f9e2af;
|
||||
green: #a6e3a1;
|
||||
teal: #94e2d5;
|
||||
sky: #89dceb;
|
||||
sapphire: #74c7ec;
|
||||
blue: #89b4fa;
|
||||
lavender: #b4befe;
|
||||
text: #cdd6f4;
|
||||
subtext1: #bac2de;
|
||||
subtext0: #a6adc8;
|
||||
overlay2: #9399b2;
|
||||
overlay1: #7f849c;
|
||||
overlay0: #6c7086;
|
||||
surface2: #585b70;
|
||||
surface1: #45475a;
|
||||
surface0: #313244;
|
||||
base: #1e1e2e;
|
||||
mantle: #181825;
|
||||
crust: #11111b;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
@theme "catppuccin-default"
|
||||
|
||||
configuration {
|
||||
run-command: "uwsm app -- {cmd}";
|
||||
run-shell-command: "uwsm app -- {terminal} -e {cmd}";
|
||||
}
|
||||
@@ -0,0 +1,277 @@
|
||||
"$schema" = 'https://starship.rs/config-schema.json'
|
||||
|
||||
format = """
|
||||
[ ](bg:red)\
|
||||
$username\
|
||||
[](bg:peach fg:red)\
|
||||
$directory\
|
||||
[](bg:yellow fg:peach)\
|
||||
$git_branch\
|
||||
$git_status\
|
||||
[](fg:yellow bg:green)\
|
||||
$c\
|
||||
$rust\
|
||||
$golang\
|
||||
$nodejs\
|
||||
$php\
|
||||
$java\
|
||||
$kotlin\
|
||||
$haskell\
|
||||
$python\
|
||||
[](fg:green bg:sapphire)\
|
||||
$conda\
|
||||
[](fg:sapphire bg:lavender)\
|
||||
$time\
|
||||
[ ](fg:lavender)\
|
||||
$cmd_duration
|
||||
$line_break\
|
||||
$character"""
|
||||
|
||||
palette = 'catppuccin_mocha'
|
||||
|
||||
[os]
|
||||
disabled = false
|
||||
style = "bg:red fg:crust"
|
||||
|
||||
[os.symbols]
|
||||
Windows = ""
|
||||
Ubuntu = ""
|
||||
SUSE = ""
|
||||
Raspbian = ""
|
||||
Mint = ""
|
||||
Macos = ""
|
||||
Manjaro = ""
|
||||
Linux = ""
|
||||
Gentoo = ""
|
||||
Fedora = ""
|
||||
Alpine = ""
|
||||
Amazon = ""
|
||||
Android = ""
|
||||
Arch = ""
|
||||
Artix = ""
|
||||
CentOS = ""
|
||||
Debian = ""
|
||||
Redhat = ""
|
||||
RedHatEnterprise = ""
|
||||
|
||||
[username]
|
||||
show_always = true
|
||||
style_user = "bg:red fg:crust"
|
||||
style_root = "bg:red fg:crust"
|
||||
format = '[ $user]($style)'
|
||||
|
||||
[directory]
|
||||
style = "bg:peach fg:crust"
|
||||
format = "[ $path ]($style)"
|
||||
truncation_length = 3
|
||||
truncation_symbol = "…/"
|
||||
|
||||
[directory.substitutions]
|
||||
"Documents" = " "
|
||||
"Downloads" = " "
|
||||
"Music" = " "
|
||||
"Pictures" = " "
|
||||
"Developer" = " "
|
||||
|
||||
[git_branch]
|
||||
symbol = ""
|
||||
style = "bg:yellow"
|
||||
format = '[[ $symbol $branch ](fg:crust bg:yellow)]($style)'
|
||||
|
||||
[git_status]
|
||||
style = "bg:yellow"
|
||||
format = '[[($all_status$ahead_behind )](fg:crust bg:yellow)]($style)'
|
||||
|
||||
[nodejs]
|
||||
symbol = ""
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[c]
|
||||
symbol = " "
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[rust]
|
||||
symbol = ""
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[golang]
|
||||
symbol = ""
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[php]
|
||||
symbol = ""
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[java]
|
||||
symbol = " "
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[kotlin]
|
||||
symbol = ""
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[haskell]
|
||||
symbol = ""
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[python]
|
||||
symbol = ""
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version)(\(#$virtualenv\)) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[docker_context]
|
||||
symbol = ""
|
||||
style = "bg:sapphire"
|
||||
format = '[[ $symbol( $context) ](fg:crust bg:sapphire)]($style)'
|
||||
|
||||
[conda]
|
||||
symbol = " "
|
||||
style = "fg:crust bg:sapphire"
|
||||
format = '[$symbol$environment ]($style)'
|
||||
ignore_base = false
|
||||
|
||||
[time]
|
||||
disabled = false
|
||||
time_format = "%R"
|
||||
style = "bg:lavender"
|
||||
format = '[[ $time ](fg:crust bg:lavender)]($style)'
|
||||
|
||||
[line_break]
|
||||
disabled = true
|
||||
|
||||
[character]
|
||||
disabled = false
|
||||
success_symbol = '[❯](bold fg:green)'
|
||||
error_symbol = '[❯](bold fg:red)'
|
||||
vimcmd_symbol = '[❮](bold fg:green)'
|
||||
vimcmd_replace_one_symbol = '[❮](bold fg:lavender)'
|
||||
vimcmd_replace_symbol = '[❮](bold fg:lavender)'
|
||||
vimcmd_visual_symbol = '[❮](bold fg:yellow)'
|
||||
|
||||
[cmd_duration]
|
||||
show_milliseconds = true
|
||||
format = " in $duration "
|
||||
style = "bg:lavender"
|
||||
disabled = false
|
||||
show_notifications = false
|
||||
min_time_to_notify = 45000
|
||||
|
||||
[palettes.catppuccin_mocha]
|
||||
rosewater = "#f5e0dc"
|
||||
flamingo = "#f2cdcd"
|
||||
pink = "#f5c2e7"
|
||||
mauve = "#cba6f7"
|
||||
red = "#f38ba8"
|
||||
maroon = "#eba0ac"
|
||||
peach = "#fab387"
|
||||
yellow = "#f9e2af"
|
||||
green = "#a6e3a1"
|
||||
teal = "#94e2d5"
|
||||
sky = "#89dceb"
|
||||
sapphire = "#74c7ec"
|
||||
blue = "#89b4fa"
|
||||
lavender = "#b4befe"
|
||||
text = "#cdd6f4"
|
||||
subtext1 = "#bac2de"
|
||||
subtext0 = "#a6adc8"
|
||||
overlay2 = "#9399b2"
|
||||
overlay1 = "#7f849c"
|
||||
overlay0 = "#6c7086"
|
||||
surface2 = "#585b70"
|
||||
surface1 = "#45475a"
|
||||
surface0 = "#313244"
|
||||
base = "#1e1e2e"
|
||||
mantle = "#181825"
|
||||
crust = "#11111b"
|
||||
|
||||
[palettes.catppuccin_frappe]
|
||||
rosewater = "#f2d5cf"
|
||||
flamingo = "#eebebe"
|
||||
pink = "#f4b8e4"
|
||||
mauve = "#ca9ee6"
|
||||
red = "#e78284"
|
||||
maroon = "#ea999c"
|
||||
peach = "#ef9f76"
|
||||
yellow = "#e5c890"
|
||||
green = "#a6d189"
|
||||
teal = "#81c8be"
|
||||
sky = "#99d1db"
|
||||
sapphire = "#85c1dc"
|
||||
blue = "#8caaee"
|
||||
lavender = "#babbf1"
|
||||
text = "#c6d0f5"
|
||||
subtext1 = "#b5bfe2"
|
||||
subtext0 = "#a5adce"
|
||||
overlay2 = "#949cbb"
|
||||
overlay1 = "#838ba7"
|
||||
overlay0 = "#737994"
|
||||
surface2 = "#626880"
|
||||
surface1 = "#51576d"
|
||||
surface0 = "#414559"
|
||||
base = "#303446"
|
||||
mantle = "#292c3c"
|
||||
crust = "#232634"
|
||||
|
||||
[palettes.catppuccin_latte]
|
||||
rosewater = "#dc8a78"
|
||||
flamingo = "#dd7878"
|
||||
pink = "#ea76cb"
|
||||
mauve = "#8839ef"
|
||||
red = "#d20f39"
|
||||
maroon = "#e64553"
|
||||
peach = "#fe640b"
|
||||
yellow = "#df8e1d"
|
||||
green = "#40a02b"
|
||||
teal = "#179299"
|
||||
sky = "#04a5e5"
|
||||
sapphire = "#209fb5"
|
||||
blue = "#1e66f5"
|
||||
lavender = "#7287fd"
|
||||
text = "#4c4f69"
|
||||
subtext1 = "#5c5f77"
|
||||
subtext0 = "#6c6f85"
|
||||
overlay2 = "#7c7f93"
|
||||
overlay1 = "#8c8fa1"
|
||||
overlay0 = "#9ca0b0"
|
||||
surface2 = "#acb0be"
|
||||
surface1 = "#bcc0cc"
|
||||
surface0 = "#ccd0da"
|
||||
base = "#eff1f5"
|
||||
mantle = "#e6e9ef"
|
||||
crust = "#dce0e8"
|
||||
|
||||
[palettes.catppuccin_macchiato]
|
||||
rosewater = "#f4dbd6"
|
||||
flamingo = "#f0c6c6"
|
||||
pink = "#f5bde6"
|
||||
mauve = "#c6a0f6"
|
||||
red = "#ed8796"
|
||||
maroon = "#ee99a0"
|
||||
peach = "#f5a97f"
|
||||
yellow = "#eed49f"
|
||||
green = "#a6da95"
|
||||
teal = "#8bd5ca"
|
||||
sky = "#91d7e3"
|
||||
sapphire = "#7dc4e4"
|
||||
blue = "#8aadf4"
|
||||
lavender = "#b7bdf8"
|
||||
text = "#cad3f5"
|
||||
subtext1 = "#b8c0e0"
|
||||
subtext0 = "#a5adcb"
|
||||
overlay2 = "#939ab7"
|
||||
overlay1 = "#8087a2"
|
||||
overlay0 = "#6e738d"
|
||||
surface2 = "#5b6078"
|
||||
surface1 = "#494d64"
|
||||
surface0 = "#363a4f"
|
||||
base = "#24273a"
|
||||
mantle = "#1e2030"
|
||||
crust = "#181926"
|
||||
@@ -0,0 +1,286 @@
|
||||
# Default config for sway
|
||||
#
|
||||
# Copy this to ~/.config/sway/config and edit it to your liking.
|
||||
#
|
||||
# Read `man 5 sway` for a complete reference.
|
||||
|
||||
# sway does not set DISPLAY/WAYLAND_DISPLAY in the systemd user environment
|
||||
# See FS#63021
|
||||
# Adapted from xorg's 50-systemd-user.sh, which achieves a similar goal.
|
||||
|
||||
# Upstream refuses to set XDG_CURRENT_DESKTOP so we have to.
|
||||
exec systemctl --user set-environment XDG_CURRENT_DESKTOP=sway
|
||||
exec systemctl --user import-environment DISPLAY \
|
||||
SWAYSOCK \
|
||||
WAYLAND_DISPLAY \
|
||||
XDG_CURRENT_DESKTOP
|
||||
|
||||
exec hash dbus-update-activation-environment 2>/dev/null && \
|
||||
dbus-update-activation-environment --systemd DISPLAY \
|
||||
SWAYSOCK \
|
||||
XDG_CURRENT_DESKTOP=sway \
|
||||
WAYLAND_DISPLAY
|
||||
|
||||
exec /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||
exec --no-startup-id /usr/bin/gnome-keyring-daemon --start --components=secrets
|
||||
|
||||
set $rosewater #f5e0dc
|
||||
set $flamingo #f2cdcd
|
||||
set $pink #f5c2e7
|
||||
set $mauve #cba6f7
|
||||
set $red #f38ba8
|
||||
set $maroon #eba0ac
|
||||
set $peach #fab387
|
||||
set $yellow #f9e2af
|
||||
set $green #a6e3a1
|
||||
set $teal #94e2d5
|
||||
set $sky #89dceb
|
||||
set $sapphire #74c7ec
|
||||
set $blue #89b4fa
|
||||
set $lavender #b4befe
|
||||
set $text #cdd6f4
|
||||
set $subtext1 #bac2de
|
||||
set $subtext0 #a6adc8
|
||||
set $overlay2 #9399b2
|
||||
set $overlay1 #7f849c
|
||||
set $overlay0 #6c7086
|
||||
set $surface2 #585b70
|
||||
set $surface1 #45475a
|
||||
set $surface0 #313244
|
||||
set $base #1e1e2e
|
||||
set $mantle #181825
|
||||
set $crust #11111b
|
||||
|
||||
# target title bg text indicator border
|
||||
client.focused $lavender $base $text $rosewater $peach
|
||||
client.focused_inactive $overlay0 $base $text $rosewater $overlay0
|
||||
client.unfocused $overlay0 $base $text $rosewater $overlay0
|
||||
client.urgent $peach $base $peach $overlay0 $peach
|
||||
client.placeholder $overlay0 $base $text $overlay0 $overlay0
|
||||
client.background $base
|
||||
|
||||
# Gaps and borders
|
||||
gaps inner 0
|
||||
gaps outer 0
|
||||
default_border pixel 2
|
||||
default_floating_border pixel 2
|
||||
|
||||
font pango:"JetBrainsMono Nerd Font" Normal 10
|
||||
|
||||
# Status bar
|
||||
#bar {
|
||||
# swaybar_command waybar
|
||||
#}
|
||||
|
||||
### Variables
|
||||
#
|
||||
# Logo key. Use Mod1 for Alt.
|
||||
set $mod Mod4
|
||||
# Home row direction keys, like vim
|
||||
set $left h
|
||||
set $down j
|
||||
set $up k
|
||||
set $right l
|
||||
# Your preferred terminal emulator
|
||||
set $term kitty
|
||||
# Your preferred application launcher
|
||||
set $menu rofi -show drun
|
||||
|
||||
### Output configuration
|
||||
#
|
||||
# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/)
|
||||
# output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
|
||||
#
|
||||
|
||||
### Idle configuration
|
||||
#
|
||||
# Example configuration:
|
||||
#
|
||||
bindsym $mod+Escape exec swaylock -f -c 000000
|
||||
|
||||
exec swayidle -w \
|
||||
timeout 300 'swaylock -f -c 000000' \
|
||||
timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
|
||||
before-sleep 'swaylock -f -c 000000'
|
||||
|
||||
for_window [class=".*"] inhibit_idle fullscreen
|
||||
for_window [app_id=".*"] inhibit_idle fullscreen
|
||||
|
||||
#
|
||||
# This will lock your screen after 300 seconds of inactivity, then turn off
|
||||
# your displays after another 300 seconds, and turn your screens back on when
|
||||
# resumed. It will also lock your screen before your computer goes to sleep.
|
||||
|
||||
### Input configuration
|
||||
#
|
||||
# Example configuration:
|
||||
#
|
||||
# input "2:14:SynPS/2_Synaptics_TouchPad" {
|
||||
# dwt enabled
|
||||
# tap enabled
|
||||
# natural_scroll enabled
|
||||
# middle_emulation enabled
|
||||
# }
|
||||
#
|
||||
# You can get the names of your inputs by running: swaymsg -t get_inputs
|
||||
# Read `man 5 sway-input` for more information about this section.
|
||||
|
||||
### Key bindings
|
||||
#
|
||||
# Basics:
|
||||
#
|
||||
# Start a terminal
|
||||
bindsym $mod+t exec uwsm app -- $term
|
||||
|
||||
# Start your launcher
|
||||
bindsym $mod+space exec uwsm app -- $menu
|
||||
|
||||
# Drag floating windows by holding down $mod and left mouse button.
|
||||
# Resize them with right mouse button + $mod.
|
||||
# Despite the name, also works for non-floating windows.
|
||||
# Change normal to inverse to use left mouse button for resizing and right
|
||||
# mouse button for dragging.
|
||||
floating_modifier $mod normal
|
||||
|
||||
# Reload the configuration file
|
||||
bindsym $mod+Shift+c reload
|
||||
|
||||
# Exit sway (logs you out of your Wayland session)
|
||||
bindsym $mod+Shift+backspace exec uwsm stop
|
||||
|
||||
#
|
||||
# Layout stuff:
|
||||
#
|
||||
# You can "split" the current object of your focus with
|
||||
# $mod+b or $mod+v, for horizontal and vertical splits
|
||||
# respectively.
|
||||
bindsym $mod+b splith
|
||||
bindsym $mod+v splitv
|
||||
|
||||
# Switch the current container between different layout styles
|
||||
# bindsym $mod+s layout stacking
|
||||
# bindsym $mod+w layout tabbed
|
||||
bindsym $mod+e layout toggle split
|
||||
|
||||
# Make the current focus fullscreen
|
||||
bindsym $mod+f fullscreen
|
||||
|
||||
# Toggle the current focus between tiling and floating mode
|
||||
bindsym $mod+Shift+space floating toggle
|
||||
|
||||
# Swap focus between the tiling area and the floating area
|
||||
# bindsym $mod+space focus mode_toggle
|
||||
|
||||
# Move focus to the parent container
|
||||
# bindsym $mod+a focus parent
|
||||
#
|
||||
# Scratchpad:
|
||||
#
|
||||
# Sway has a "scratchpad", which is a bag of holding for windows.
|
||||
# You can send windows there and get them back later.
|
||||
|
||||
# Move the currently focused window to the scratchpad
|
||||
bindsym $mod+Shift+minus move scratchpad
|
||||
|
||||
# Show the next scratchpad window or hide the focused scratchpad window.
|
||||
# If there are multiple scratchpad windows, this command cycles through them.
|
||||
bindsym $mod+minus scratchpad show
|
||||
#
|
||||
# Resizing containers:
|
||||
#
|
||||
mode "resize" {
|
||||
# left will shrink the containers width
|
||||
# right will grow the containers width
|
||||
# up will shrink the containers height
|
||||
# down will grow the containers height
|
||||
bindsym $left resize shrink width 10px
|
||||
bindsym $down resize grow height 10px
|
||||
bindsym $up resize shrink height 10px
|
||||
bindsym $right resize grow width 10px
|
||||
|
||||
# Ditto, with arrow keys
|
||||
bindsym Left resize shrink width 10px
|
||||
bindsym Down resize grow height 10px
|
||||
bindsym Up resize shrink height 10px
|
||||
bindsym Right resize grow width 10px
|
||||
|
||||
# Return to default mode
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
}
|
||||
bindsym $mod+r mode "resize"
|
||||
#
|
||||
# Utilities:
|
||||
#
|
||||
# Special keys to adjust volume via PulseAudio
|
||||
bindsym --locked XF86AudioMute exec pactl set-sink-mute \@DEFAULT_SINK@ toggle
|
||||
bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume \@DEFAULT_SINK@ -5%
|
||||
bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume \@DEFAULT_SINK@ +5%
|
||||
bindsym --locked XF86AudioMicMute exec pactl set-source-mute \@DEFAULT_SOURCE@ toggle
|
||||
|
||||
for_window [shell="xwayland"] title_format "[XW] %title"
|
||||
for_window [title="Pipewire Volume Control"] floating enable
|
||||
for_window [title="Picture-in-Picture"] floating enable
|
||||
for_window [class="org.kde.haruna"] floating enable
|
||||
for_window [title=".*\.PopupWindow"] floating enable
|
||||
for_window [title="Unity"] no_focus, move position 400 400
|
||||
for_window [class="Unity" title="Project Settings"] floating enable
|
||||
for_window [class="Unity" title=".*\.AnnotationWindow"] floating enable
|
||||
for_window [class="Unity" title="Color"] floating enable
|
||||
for_window [app_id="Bitwarden"] floating enable
|
||||
for_window [class="UnrealEditor" title="Editor Preferences"] floating enable
|
||||
for_window [class="UnrealEditor" title="Project Settings"] floating enable
|
||||
for_window [class="Ark-Vcs"] floating enable
|
||||
|
||||
assign [class="Unity"] workspace number 3
|
||||
assign [class="UnrealEditor"] workspace number 3
|
||||
assign [app_id="jetbrains-rider"] workspace number 6
|
||||
|
||||
## Workspace
|
||||
|
||||
# Switch to workspace
|
||||
bindsym $mod+1 workspace number 1
|
||||
bindsym $mod+2 workspace number 2
|
||||
bindsym $mod+3 workspace number 3
|
||||
bindsym $mod+4 workspace number 4
|
||||
bindsym $mod+f1 workspace number 5
|
||||
bindsym $mod+f2 workspace number 6
|
||||
bindsym $mod+f3 workspace number 7
|
||||
bindsym $mod+f4 workspace number 8
|
||||
|
||||
# Move focused container to workspace
|
||||
bindsym $mod+Shift+1 move container to workspace number 1
|
||||
bindsym $mod+Shift+2 move container to workspace number 2
|
||||
bindsym $mod+Shift+3 move container to workspace number 3
|
||||
bindsym $mod+Shift+4 move container to workspace number 4
|
||||
bindsym $mod+Shift+f1 move container to workspace number 5
|
||||
bindsym $mod+Shift+f2 move container to workspace number 6
|
||||
bindsym $mod+Shift+f3 move container to workspace number 7
|
||||
bindsym $mod+Shift+f4 move container to workspace number 8
|
||||
|
||||
## Window management
|
||||
|
||||
bindsym $mod+q kill
|
||||
|
||||
# Move focus
|
||||
bindsym $mod+h focus left
|
||||
bindsym $mod+j focus down
|
||||
bindsym $mod+k focus up
|
||||
bindsym $mod+l focus right
|
||||
|
||||
# Move window
|
||||
bindsym $mod+Shift+h move left
|
||||
bindsym $mod+Shift+j move down
|
||||
bindsym $mod+Shift+k move up
|
||||
bindsym $mod+Shift+l move right
|
||||
|
||||
bindsym $mod+Shift+f floating toggle
|
||||
|
||||
## Layout management
|
||||
bindsym $mod+tab layout tabbed
|
||||
|
||||
## Utils
|
||||
bindsym Print exec bash -c 'file=$(~/.local/bin/snag -d ~/Pictures/screenshots/) && wl-copy < $file'
|
||||
bindsym Print+Ctrl exec bash -c 'file=$(~/.local/bin/snag -r -d ~/Pictures/screenshots/) && wl-copy < $file'
|
||||
|
||||
include ~/.config/sway/config.d/*
|
||||
@@ -0,0 +1,6 @@
|
||||
{{ if eq .hosttype "laptop" -}}
|
||||
bindsym XF86MonBrightnessDown exec brightnessctl -d intel_backlight s 5%-
|
||||
bindsym XF86MonBrightnessUp exec brightnessctl -d intel_backlight s +5%
|
||||
|
||||
bindsym --no-repeat $mod+Shift+r exec ~/.config/sway/scripts/toggle-refresh-rate.sh
|
||||
{{- end }}
|
||||
@@ -0,0 +1,10 @@
|
||||
{{ if eq .hosttype "laptop" -}}
|
||||
input "type:pointer" {
|
||||
accel_profile flat
|
||||
pointer_accel 0
|
||||
}
|
||||
|
||||
input "2362:4931:PIXA3854:00_093A:1343_Touchpad" {
|
||||
tap enabled
|
||||
}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,11 @@
|
||||
{{ if eq .chezmoi.hostname "framework13pro" -}}
|
||||
output eDP-1 mode 2880x1920@120Hz
|
||||
{{- else if eq .chezmoi.hostname "flow" -}}
|
||||
# TODO: fill in flow's outputs (run: swaymsg -t get_outputs)
|
||||
# output DP-1 mode 2560x1440@144Hz position 0 0
|
||||
# output DP-2 mode 2560x1440@144Hz position 2560 0
|
||||
{{- else if eq .chezmoi.hostname "gata" -}}
|
||||
# TODO: fill in gata's outputs (run: swaymsg -t get_outputs)
|
||||
# output DP-1 mode 2560x1440@144Hz position 0 0
|
||||
# output DP-2 mode 1920x1080@60Hz position 2560 0
|
||||
{{- end }}
|
||||
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
|
||||
OUTPUT="eDP-1"
|
||||
CURRENT=$(swaymsg -rt get_outputs | jq -r ".[] | select(.name==\"$OUTPUT\") | .current_mode.refresh" | cut -d. -f1)
|
||||
|
||||
if [ "$CURRENT" -eq 120000 ]; then
|
||||
swaymsg output "$OUTPUT" mode 2880x1920@60Hz
|
||||
notify-send "Refresh Rate" "Switched to 60Hz" -t 2000
|
||||
else
|
||||
swaymsg output "$OUTPUT" mode 2880x1920@120Hz
|
||||
notify-send "Refresh Rate" "Switched to 120Hz" -t 2000
|
||||
fi
|
||||
|
||||
pkill -RTMIN+8 waybar
|
||||
@@ -0,0 +1,30 @@
|
||||
color=1e1e2e
|
||||
bs-hl-color=f5e0dc
|
||||
caps-lock-bs-hl-color=f5e0dc
|
||||
caps-lock-key-hl-color=a6e3a1
|
||||
inside-color=1e1e2e
|
||||
inside-clear-color=1e1e2e
|
||||
inside-caps-lock-color=1e1e2e
|
||||
inside-ver-color=1e1e2e
|
||||
inside-wrong-color=1e1e2e
|
||||
key-hl-color=a6e3a1
|
||||
layout-bg-color=00000000
|
||||
layout-border-color=00000000
|
||||
layout-text-color=cdd6f4
|
||||
line-color=00000000
|
||||
line-clear-color=00000000
|
||||
line-caps-lock-color=00000000
|
||||
line-ver-color=00000000
|
||||
line-wrong-color=00000000
|
||||
ring-color=313244
|
||||
ring-clear-color=f5e0dc
|
||||
ring-caps-lock-color=fab387
|
||||
ring-ver-color=89b4fa
|
||||
ring-wrong-color=eba0ac
|
||||
separator-color=00000000
|
||||
text-color=cdd6f4
|
||||
text-clear-color=f5e0dc
|
||||
text-caps-lock-color=fab387
|
||||
text-ver-color=89b4fa
|
||||
text-wrong-color=eba0ac
|
||||
indicator-caps-lock
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"media": {
|
||||
"camera": {
|
||||
"autoAdjustAspectRatio": { "enabled": true },
|
||||
"resolution": {
|
||||
"enabled": true,
|
||||
"mode": "override",
|
||||
"width": 1920,
|
||||
"height": 1080
|
||||
}
|
||||
},
|
||||
"video": {
|
||||
"menuEnabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{{- if eq .chezmoi.hostname "framework13pro" -}}
|
||||
[{{ template "bar-primary" (dict "out" "eDP-1" "ws" (list "1" "2" "3" "4")) }},
|
||||
{{ template "bar-secondary" . }}]
|
||||
{{- else if eq .chezmoi.hostname "flow" -}}
|
||||
[{{ template "bar-primary" (dict "out" "DP-1" "ws" (list "1" "2" "3" "4")) }},
|
||||
{{ template "bar-secondary" . }}]
|
||||
{{- else if eq .chezmoi.hostname "gata" -}}
|
||||
// TODO: fill in gata's outputs (run: swaymsg -t get_outputs)
|
||||
[{{ template "bar-primary" (dict "out" "DP-1" "ws" (list "1" "2" "3" "4")) }},
|
||||
{{ template "bar-secondary" . }}]
|
||||
{{- end }}
|
||||
@@ -0,0 +1,26 @@
|
||||
@define-color rosewater #f5e0dc;
|
||||
@define-color flamingo #f2cdcd;
|
||||
@define-color pink #f5c2e7;
|
||||
@define-color mauve #cba6f7;
|
||||
@define-color red #f38ba8;
|
||||
@define-color maroon #eba0ac;
|
||||
@define-color peach #fab387;
|
||||
@define-color yellow #f9e2af;
|
||||
@define-color green #a6e3a1;
|
||||
@define-color teal #94e2d5;
|
||||
@define-color sky #89dceb;
|
||||
@define-color sapphire #74c7ec;
|
||||
@define-color blue #89b4fa;
|
||||
@define-color lavender #b4befe;
|
||||
@define-color text #cdd6f4;
|
||||
@define-color subtext1 #bac2de;
|
||||
@define-color subtext0 #a6adc8;
|
||||
@define-color overlay2 #9399b2;
|
||||
@define-color overlay1 #7f849c;
|
||||
@define-color overlay0 #6c7086;
|
||||
@define-color surface2 #585b70;
|
||||
@define-color surface1 #45475a;
|
||||
@define-color surface0 #313244;
|
||||
@define-color base #1e1e2e;
|
||||
@define-color mantle #181825;
|
||||
@define-color crust #11111b;
|
||||
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkMenu" id="menu">
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="logout">
|
||||
<property name="label">Logout</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSeparatorMenuItem"/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="shutdown">
|
||||
<property name="label">Shutdown</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuItem" id="reboot">
|
||||
<property name="label">Reboot</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
@@ -0,0 +1,86 @@
|
||||
@import "mocha.css";
|
||||
|
||||
* {
|
||||
font-family: JetBrainsMono Nerd Font;
|
||||
min-height: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#waybar {
|
||||
background-color: @crust;
|
||||
color: @text;
|
||||
}
|
||||
|
||||
#workspaces {
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
color: @crust;
|
||||
border: 0;
|
||||
transition-duration: 0;
|
||||
}
|
||||
|
||||
#workspaces button.active {
|
||||
color: @sky;
|
||||
}
|
||||
|
||||
#custom-music,
|
||||
#tray,
|
||||
#backlight,
|
||||
#clock,
|
||||
#battery,
|
||||
#pulseaudio,
|
||||
#custom-lock,
|
||||
#custom-power,
|
||||
#memory {
|
||||
padding: 0.5rem 1rem;
|
||||
}
|
||||
|
||||
#memory {
|
||||
}
|
||||
|
||||
#clock {
|
||||
color: @blue;
|
||||
}
|
||||
|
||||
#battery {
|
||||
color: @green;
|
||||
}
|
||||
|
||||
#battery.charging {
|
||||
color: @green;
|
||||
}
|
||||
|
||||
#battery.warning:not(.charging) {
|
||||
color: @red;
|
||||
}
|
||||
|
||||
#backlight {
|
||||
color: @yellow;
|
||||
}
|
||||
|
||||
#backlight, #battery {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
#pulseaudio {
|
||||
color: @maroon;
|
||||
}
|
||||
|
||||
#custom-music {
|
||||
color: @mauve;
|
||||
border-radius: 1rem;
|
||||
}
|
||||
|
||||
#custom-lock {
|
||||
color: @lavender;
|
||||
}
|
||||
|
||||
#custom-power {
|
||||
background-color: @red;
|
||||
color: @crust;
|
||||
}
|
||||
|
||||
#tray {
|
||||
padding-bottom: 2rem;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"zone_name": "SMSL 400",
|
||||
"format": {
|
||||
"playing": " {artist} - {title}",
|
||||
"paused": " {artist} - {title}",
|
||||
"stopped": " Stopped",
|
||||
"loading": " Loading...",
|
||||
"no_zone": " No Zone"
|
||||
},
|
||||
"max_length": 60,
|
||||
"update_interval": 1
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
require("git"):setup()
|
||||
@@ -0,0 +1,12 @@
|
||||
[[plugin.deps]]
|
||||
use = "AnirudhG07/rich-preview"
|
||||
rev = "7d616ad"
|
||||
hash = "d64feec9761392cbc250d199ab4b8a3a"
|
||||
|
||||
[[plugin.deps]]
|
||||
use = "yazi-rs/plugins:git"
|
||||
rev = "9014ed2"
|
||||
hash = "88e56a64b7ce7c4314427452343fef17"
|
||||
|
||||
[flavor]
|
||||
deps = []
|
||||
@@ -0,0 +1,771 @@
|
||||
[app]
|
||||
overall = { bg = "#1e1e2e" }
|
||||
|
||||
[mgr]
|
||||
cwd = { fg = "#94e2d5" }
|
||||
|
||||
find_keyword = { fg = "#f9e2af", italic = true }
|
||||
find_position = { fg = "#f5c2e7", bg = "reset", italic = true }
|
||||
|
||||
marker_copied = { fg = "#a6e3a1", bg = "#a6e3a1" }
|
||||
marker_cut = { fg = "#f38ba8", bg = "#f38ba8" }
|
||||
marker_marked = { fg = "#94e2d5", bg = "#94e2d5" }
|
||||
marker_selected = { fg = "#b4befe", bg = "#b4befe" }
|
||||
|
||||
count_copied = { fg = "#1e1e2e", bg = "#a6e3a1" }
|
||||
count_cut = { fg = "#1e1e2e", bg = "#f38ba8" }
|
||||
count_selected = { fg = "#1e1e2e", bg = "#b4befe" }
|
||||
|
||||
border_symbol = "│"
|
||||
border_style = { fg = "#7f849c" }
|
||||
|
||||
syntect_theme = "~/.config/yazi/Catppuccin-mocha.tmTheme"
|
||||
|
||||
[tabs]
|
||||
active = { fg = "#1e1e2e", bg = "#cdd6f4", bold = true }
|
||||
inactive = { fg = "#cdd6f4", bg = "#45475a" }
|
||||
|
||||
[mode]
|
||||
normal_main = { fg = "#1e1e2e", bg = "#b4befe", bold = true }
|
||||
normal_alt = { fg = "#b4befe", bg = "#313244"}
|
||||
|
||||
select_main = { fg = "#1e1e2e", bg = "#a6e3a1", bold = true }
|
||||
select_alt = { fg = "#a6e3a1", bg = "#313244"}
|
||||
|
||||
unset_main = { fg = "#1e1e2e", bg = "#f2cdcd", bold = true }
|
||||
unset_alt = { fg = "#f2cdcd", bg = "#313244"}
|
||||
|
||||
[indicator]
|
||||
parent = { fg = "#1e1e2e", bg = "#cdd6f4" }
|
||||
current = { fg = "#1e1e2e", bg = "#b4befe" }
|
||||
preview = { fg = "#1e1e2e", bg = "#cdd6f4" }
|
||||
|
||||
[status]
|
||||
sep_left = { open = "", close = "" }
|
||||
sep_right = { open = "", close = "" }
|
||||
|
||||
progress_label = { fg = "#ffffff", bold = true }
|
||||
progress_normal = { fg = "#a6e3a1", bg = "#45475a" }
|
||||
progress_error = { fg = "#f9e2af", bg = "#f38ba8" }
|
||||
|
||||
perm_type = { fg = "#89b4fa" }
|
||||
perm_read = { fg = "#f9e2af" }
|
||||
perm_write = { fg = "#f38ba8" }
|
||||
perm_exec = { fg = "#a6e3a1" }
|
||||
perm_sep = { fg = "#7f849c" }
|
||||
|
||||
[input]
|
||||
border = { fg = "#b4befe" }
|
||||
title = {}
|
||||
value = {}
|
||||
selected = { reversed = true }
|
||||
|
||||
[pick]
|
||||
border = { fg = "#b4befe" }
|
||||
active = { fg = "#f5c2e7" }
|
||||
inactive = {}
|
||||
|
||||
[confirm]
|
||||
border = { fg = "#b4befe" }
|
||||
title = { fg = "#b4befe" }
|
||||
body = {}
|
||||
list = {}
|
||||
btn_yes = { reversed = true }
|
||||
btn_no = {}
|
||||
|
||||
[cmp]
|
||||
border = { fg = "#b4befe" }
|
||||
|
||||
[tasks]
|
||||
border = { fg = "#b4befe" }
|
||||
title = {}
|
||||
hovered = { fg = "#f5c2e7", bold = true }
|
||||
|
||||
[which]
|
||||
mask = { bg = "#313244" }
|
||||
cand = { fg = "#94e2d5" }
|
||||
rest = { fg = "#9399b2" }
|
||||
desc = { fg = "#f5c2e7" }
|
||||
separator = " "
|
||||
separator_style = { fg = "#585b70" }
|
||||
|
||||
[help]
|
||||
on = { fg = "#94e2d5" }
|
||||
run = { fg = "#f5c2e7" }
|
||||
desc = { fg = "#9399b2" }
|
||||
hovered = { bg = "#585b70", bold = true }
|
||||
footer = { fg = "#cdd6f4", bg = "#45475a" }
|
||||
|
||||
[notify]
|
||||
title_info = { fg = "#94e2d5" }
|
||||
title_warn = { fg = "#f9e2af" }
|
||||
title_error = { fg = "#f38ba8" }
|
||||
|
||||
[filetype]
|
||||
rules = [
|
||||
# Media
|
||||
{ mime = "image/*", fg = "#94e2d5" },
|
||||
{ mime = "{audio,video}/*", fg = "#f9e2af" },
|
||||
|
||||
# Archives
|
||||
{ mime = "application/*zip", fg = "#f5c2e7" },
|
||||
{ mime = "application/x-{tar,bzip*,7z-compressed,xz,rar}", fg = "#f5c2e7" },
|
||||
|
||||
# Documents
|
||||
{ mime = "application/{pdf,doc,rtf}", fg = "#a6e3a1" },
|
||||
|
||||
# Virtual file system
|
||||
{ mime = "vfs/{absent,stale}", fg = "#45475a" },
|
||||
|
||||
# Special file
|
||||
{ url = "*", is = "orphan", bg = "#f38ba8" },
|
||||
{ url = "*", is = "exec" , fg = "#a6e3a1" },
|
||||
|
||||
# Dummy file
|
||||
{ url = "*", is = "dummy", bg = "#f38ba8" },
|
||||
{ url = "*/", is = "dummy", bg = "#f38ba8" },
|
||||
|
||||
# Fallback
|
||||
{ url = "*/", fg = "#b4befe" },
|
||||
]
|
||||
|
||||
[spot]
|
||||
border = { fg = "#b4befe" }
|
||||
title = { fg = "#b4befe" }
|
||||
tbl_cell = { fg = "#b4befe", reversed = true }
|
||||
tbl_col = { bold = true }
|
||||
|
||||
[icon]
|
||||
files = [
|
||||
{ name = "kritadisplayrc", text = "", fg = "#cba6f7" },
|
||||
{ name = ".gtkrc-2.0", text = "", fg = "#f5e0dc" },
|
||||
{ name = "bspwmrc", text = "", fg = "#313244" },
|
||||
{ name = "webpack", text = "", fg = "#74c7ec" },
|
||||
{ name = "tsconfig.json", text = "", fg = "#74c7ec" },
|
||||
{ name = ".vimrc", text = "", fg = "#a6e3a1" },
|
||||
{ name = "gemfile$", text = "", fg = "#313244" },
|
||||
{ name = "xmobarrc", text = "", fg = "#f38ba8" },
|
||||
{ name = "avif", text = "", fg = "#7f849c" },
|
||||
{ name = "fp-info-cache", text = "", fg = "#f5e0dc" },
|
||||
{ name = ".zshrc", text = "", fg = "#a6e3a1" },
|
||||
{ name = "robots.txt", text = "", fg = "#6c7086" },
|
||||
{ name = "dockerfile", text = "", fg = "#89b4fa" },
|
||||
{ name = ".git-blame-ignore-revs", text = "", fg = "#fab387" },
|
||||
{ name = ".nvmrc", text = "", fg = "#a6e3a1" },
|
||||
{ name = "hyprpaper.conf", text = "", fg = "#74c7ec" },
|
||||
{ name = ".prettierignore", text = "", fg = "#89b4fa" },
|
||||
{ name = "rakefile", text = "", fg = "#313244" },
|
||||
{ name = "code_of_conduct", text = "", fg = "#f38ba8" },
|
||||
{ name = "cmakelists.txt", text = "", fg = "#cdd6f4" },
|
||||
{ name = ".env", text = "", fg = "#f9e2af" },
|
||||
{ name = "copying.lesser", text = "", fg = "#f9e2af" },
|
||||
{ name = "readme", text = "", fg = "#f5e0dc" },
|
||||
{ name = "settings.gradle", text = "", fg = "#585b70" },
|
||||
{ name = "gruntfile.coffee", text = "", fg = "#fab387" },
|
||||
{ name = ".eslintignore", text = "", fg = "#585b70" },
|
||||
{ name = "kalgebrarc", text = "", fg = "#89b4fa" },
|
||||
{ name = "kdenliverc", text = "", fg = "#89b4fa" },
|
||||
{ name = ".prettierrc.cjs", text = "", fg = "#89b4fa" },
|
||||
{ name = "cantorrc", text = "", fg = "#89b4fa" },
|
||||
{ name = "rmd", text = "", fg = "#74c7ec" },
|
||||
{ name = "vagrantfile$", text = "", fg = "#6c7086" },
|
||||
{ name = ".Xauthority", text = "", fg = "#fab387" },
|
||||
{ name = "prettier.config.ts", text = "", fg = "#89b4fa" },
|
||||
{ name = "node_modules", text = "", fg = "#f38ba8" },
|
||||
{ name = ".prettierrc.toml", text = "", fg = "#89b4fa" },
|
||||
{ name = "build.zig.zon", text = "", fg = "#fab387" },
|
||||
{ name = ".ds_store", text = "", fg = "#45475a" },
|
||||
{ name = "PKGBUILD", text = "", fg = "#89b4fa" },
|
||||
{ name = ".prettierrc", text = "", fg = "#89b4fa" },
|
||||
{ name = ".bash_profile", text = "", fg = "#a6e3a1" },
|
||||
{ name = ".npmignore", text = "", fg = "#f38ba8" },
|
||||
{ name = ".mailmap", text = "", fg = "#fab387" },
|
||||
{ name = ".codespellrc", text = "", fg = "#a6e3a1" },
|
||||
{ name = "svelte.config.js", text = "", fg = "#fab387" },
|
||||
{ name = "eslint.config.ts", text = "", fg = "#585b70" },
|
||||
{ name = "config", text = "", fg = "#7f849c" },
|
||||
{ name = ".gitlab-ci.yml", text = "", fg = "#fab387" },
|
||||
{ name = ".gitconfig", text = "", fg = "#fab387" },
|
||||
{ name = "_gvimrc", text = "", fg = "#a6e3a1" },
|
||||
{ name = ".xinitrc", text = "", fg = "#fab387" },
|
||||
{ name = "checkhealth", text = "", fg = "#89b4fa" },
|
||||
{ name = "sxhkdrc", text = "", fg = "#313244" },
|
||||
{ name = ".bashrc", text = "", fg = "#a6e3a1" },
|
||||
{ name = "tailwind.config.mjs", text = "", fg = "#74c7ec" },
|
||||
{ name = "ext_typoscript_setup.txt", text = "", fg = "#fab387" },
|
||||
{ name = "commitlint.config.ts", text = "", fg = "#94e2d5" },
|
||||
{ name = "py.typed", text = "", fg = "#f9e2af" },
|
||||
{ name = ".nanorc", text = "", fg = "#313244" },
|
||||
{ name = "commit_editmsg", text = "", fg = "#fab387" },
|
||||
{ name = ".luaurc", text = "", fg = "#89b4fa" },
|
||||
{ name = "fp-lib-table", text = "", fg = "#f5e0dc" },
|
||||
{ name = ".editorconfig", text = "", fg = "#f5e0dc" },
|
||||
{ name = "justfile", text = "", fg = "#7f849c" },
|
||||
{ name = "kdeglobals", text = "", fg = "#89b4fa" },
|
||||
{ name = "license.md", text = "", fg = "#f9e2af" },
|
||||
{ name = ".clang-format", text = "", fg = "#7f849c" },
|
||||
{ name = "docker-compose.yaml", text = "", fg = "#89b4fa" },
|
||||
{ name = "copying", text = "", fg = "#f9e2af" },
|
||||
{ name = "go.mod", text = "", fg = "#74c7ec" },
|
||||
{ name = "lxqt.conf", text = "", fg = "#89b4fa" },
|
||||
{ name = "brewfile", text = "", fg = "#313244" },
|
||||
{ name = "gulpfile.coffee", text = "", fg = "#f38ba8" },
|
||||
{ name = ".dockerignore", text = "", fg = "#89b4fa" },
|
||||
{ name = ".settings.json", text = "", fg = "#6c7086" },
|
||||
{ name = "tailwind.config.js", text = "", fg = "#74c7ec" },
|
||||
{ name = ".clang-tidy", text = "", fg = "#7f849c" },
|
||||
{ name = ".gvimrc", text = "", fg = "#a6e3a1" },
|
||||
{ name = "nuxt.config.cjs", text = "", fg = "#a6e3a1" },
|
||||
{ name = "xsettingsd.conf", text = "", fg = "#fab387" },
|
||||
{ name = "nuxt.config.js", text = "", fg = "#a6e3a1" },
|
||||
{ name = "eslint.config.cjs", text = "", fg = "#585b70" },
|
||||
{ name = "sym-lib-table", text = "", fg = "#f5e0dc" },
|
||||
{ name = ".condarc", text = "", fg = "#a6e3a1" },
|
||||
{ name = "xmonad.hs", text = "", fg = "#f38ba8" },
|
||||
{ name = "tmux.conf", text = "", fg = "#a6e3a1" },
|
||||
{ name = "xmobarrc.hs", text = "", fg = "#f38ba8" },
|
||||
{ name = ".prettierrc.yaml", text = "", fg = "#89b4fa" },
|
||||
{ name = ".pre-commit-config.yaml", text = "", fg = "#fab387" },
|
||||
{ name = "i3blocks.conf", text = "", fg = "#f5e0dc" },
|
||||
{ name = "xorg.conf", text = "", fg = "#fab387" },
|
||||
{ name = ".zshenv", text = "", fg = "#a6e3a1" },
|
||||
{ name = "vlcrc", text = "", fg = "#fab387" },
|
||||
{ name = "license", text = "", fg = "#f9e2af" },
|
||||
{ name = "unlicense", text = "", fg = "#f9e2af" },
|
||||
{ name = "tmux.conf.local", text = "", fg = "#a6e3a1" },
|
||||
{ name = ".SRCINFO", text = "", fg = "#89b4fa" },
|
||||
{ name = "tailwind.config.ts", text = "", fg = "#74c7ec" },
|
||||
{ name = "security.md", text = "", fg = "#bac2de" },
|
||||
{ name = "security", text = "", fg = "#bac2de" },
|
||||
{ name = ".eslintrc", text = "", fg = "#585b70" },
|
||||
{ name = "gradle.properties", text = "", fg = "#585b70" },
|
||||
{ name = "code_of_conduct.md", text = "", fg = "#f38ba8" },
|
||||
{ name = "PrusaSlicerGcodeViewer.ini", text = "", fg = "#fab387" },
|
||||
{ name = "PrusaSlicer.ini", text = "", fg = "#fab387" },
|
||||
{ name = "procfile", text = "", fg = "#7f849c" },
|
||||
{ name = "mpv.conf", text = "", fg = "#1e1e2e" },
|
||||
{ name = ".prettierrc.json5", text = "", fg = "#89b4fa" },
|
||||
{ name = "i3status.conf", text = "", fg = "#f5e0dc" },
|
||||
{ name = "prettier.config.mjs", text = "", fg = "#89b4fa" },
|
||||
{ name = ".pylintrc", text = "", fg = "#7f849c" },
|
||||
{ name = "prettier.config.cjs", text = "", fg = "#89b4fa" },
|
||||
{ name = ".luacheckrc", text = "", fg = "#89b4fa" },
|
||||
{ name = "containerfile", text = "", fg = "#89b4fa" },
|
||||
{ name = "eslint.config.mjs", text = "", fg = "#585b70" },
|
||||
{ name = "gruntfile.js", text = "", fg = "#fab387" },
|
||||
{ name = "bun.lockb", text = "", fg = "#f5e0dc" },
|
||||
{ name = ".gitattributes", text = "", fg = "#fab387" },
|
||||
{ name = "gruntfile.ts", text = "", fg = "#fab387" },
|
||||
{ name = "pom.xml", text = "", fg = "#313244" },
|
||||
{ name = "favicon.ico", text = "", fg = "#f9e2af" },
|
||||
{ name = "package-lock.json", text = "", fg = "#313244" },
|
||||
{ name = "build", text = "", fg = "#a6e3a1" },
|
||||
{ name = "package.json", text = "", fg = "#f38ba8" },
|
||||
{ name = "nuxt.config.ts", text = "", fg = "#a6e3a1" },
|
||||
{ name = "nuxt.config.mjs", text = "", fg = "#a6e3a1" },
|
||||
{ name = "mix.lock", text = "", fg = "#7f849c" },
|
||||
{ name = "makefile", text = "", fg = "#7f849c" },
|
||||
{ name = "gulpfile.js", text = "", fg = "#f38ba8" },
|
||||
{ name = "lxde-rc.xml", text = "", fg = "#9399b2" },
|
||||
{ name = "kritarc", text = "", fg = "#cba6f7" },
|
||||
{ name = "gtkrc", text = "", fg = "#f5e0dc" },
|
||||
{ name = "ionic.config.json", text = "", fg = "#89b4fa" },
|
||||
{ name = ".prettierrc.mjs", text = "", fg = "#89b4fa" },
|
||||
{ name = ".prettierrc.yml", text = "", fg = "#89b4fa" },
|
||||
{ name = ".npmrc", text = "", fg = "#f38ba8" },
|
||||
{ name = "weston.ini", text = "", fg = "#f9e2af" },
|
||||
{ name = "gulpfile.babel.js", text = "", fg = "#f38ba8" },
|
||||
{ name = "i18n.config.ts", text = "", fg = "#7f849c" },
|
||||
{ name = "commitlint.config.js", text = "", fg = "#94e2d5" },
|
||||
{ name = ".gitmodules", text = "", fg = "#fab387" },
|
||||
{ name = "gradle-wrapper.properties", text = "", fg = "#585b70" },
|
||||
{ name = "hypridle.conf", text = "", fg = "#74c7ec" },
|
||||
{ name = "vercel.json", text = "▲", fg = "#f5e0dc" },
|
||||
{ name = "hyprlock.conf", text = "", fg = "#74c7ec" },
|
||||
{ name = "go.sum", text = "", fg = "#74c7ec" },
|
||||
{ name = "kdenlive-layoutsrc", text = "", fg = "#89b4fa" },
|
||||
{ name = "gruntfile.babel.js", text = "", fg = "#fab387" },
|
||||
{ name = "compose.yml", text = "", fg = "#89b4fa" },
|
||||
{ name = "i18n.config.js", text = "", fg = "#7f849c" },
|
||||
{ name = "readme.md", text = "", fg = "#f5e0dc" },
|
||||
{ name = "gradlew", text = "", fg = "#585b70" },
|
||||
{ name = "go.work", text = "", fg = "#74c7ec" },
|
||||
{ name = "gulpfile.ts", text = "", fg = "#f38ba8" },
|
||||
{ name = "gnumakefile", text = "", fg = "#7f849c" },
|
||||
{ name = "FreeCAD.conf", text = "", fg = "#f38ba8" },
|
||||
{ name = "compose.yaml", text = "", fg = "#89b4fa" },
|
||||
{ name = "eslint.config.js", text = "", fg = "#585b70" },
|
||||
{ name = "hyprland.conf", text = "", fg = "#74c7ec" },
|
||||
{ name = "docker-compose.yml", text = "", fg = "#89b4fa" },
|
||||
{ name = "groovy", text = "", fg = "#585b70" },
|
||||
{ name = "QtProject.conf", text = "", fg = "#a6e3a1" },
|
||||
{ name = "platformio.ini", text = "", fg = "#fab387" },
|
||||
{ name = "build.gradle", text = "", fg = "#585b70" },
|
||||
{ name = ".nuxtrc", text = "", fg = "#a6e3a1" },
|
||||
{ name = "_vimrc", text = "", fg = "#a6e3a1" },
|
||||
{ name = ".zprofile", text = "", fg = "#a6e3a1" },
|
||||
{ name = ".xsession", text = "", fg = "#fab387" },
|
||||
{ name = "prettier.config.js", text = "", fg = "#89b4fa" },
|
||||
{ name = ".babelrc", text = "", fg = "#f9e2af" },
|
||||
{ name = "workspace", text = "", fg = "#a6e3a1" },
|
||||
{ name = ".prettierrc.json", text = "", fg = "#89b4fa" },
|
||||
{ name = ".prettierrc.js", text = "", fg = "#89b4fa" },
|
||||
{ name = ".Xresources", text = "", fg = "#fab387" },
|
||||
{ name = ".gitignore", text = "", fg = "#fab387" },
|
||||
{ name = ".justfile", text = "", fg = "#7f849c" },
|
||||
]
|
||||
exts = [
|
||||
{ name = "otf", text = "", fg = "#f5e0dc" },
|
||||
{ name = "import", text = "", fg = "#f5e0dc" },
|
||||
{ name = "krz", text = "", fg = "#cba6f7" },
|
||||
{ name = "adb", text = "", fg = "#94e2d5" },
|
||||
{ name = "ttf", text = "", fg = "#f5e0dc" },
|
||||
{ name = "webpack", text = "", fg = "#74c7ec" },
|
||||
{ name = "dart", text = "", fg = "#585b70" },
|
||||
{ name = "vsh", text = "", fg = "#7f849c" },
|
||||
{ name = "doc", text = "", fg = "#585b70" },
|
||||
{ name = "zsh", text = "", fg = "#a6e3a1" },
|
||||
{ name = "ex", text = "", fg = "#7f849c" },
|
||||
{ name = "hx", text = "", fg = "#fab387" },
|
||||
{ name = "fodt", text = "", fg = "#74c7ec" },
|
||||
{ name = "mojo", text = "", fg = "#fab387" },
|
||||
{ name = "templ", text = "", fg = "#f9e2af" },
|
||||
{ name = "nix", text = "", fg = "#74c7ec" },
|
||||
{ name = "cshtml", text = "", fg = "#585b70" },
|
||||
{ name = "fish", text = "", fg = "#585b70" },
|
||||
{ name = "ply", text = "", fg = "#7f849c" },
|
||||
{ name = "sldprt", text = "", fg = "#a6e3a1" },
|
||||
{ name = "gemspec", text = "", fg = "#313244" },
|
||||
{ name = "mjs", text = "", fg = "#f9e2af" },
|
||||
{ name = "csh", text = "", fg = "#585b70" },
|
||||
{ name = "cmake", text = "", fg = "#cdd6f4" },
|
||||
{ name = "fodp", text = "", fg = "#fab387" },
|
||||
{ name = "vi", text = "", fg = "#f9e2af" },
|
||||
{ name = "msf", text = "", fg = "#89b4fa" },
|
||||
{ name = "blp", text = "", fg = "#89b4fa" },
|
||||
{ name = "less", text = "", fg = "#45475a" },
|
||||
{ name = "sh", text = "", fg = "#585b70" },
|
||||
{ name = "odg", text = "", fg = "#f9e2af" },
|
||||
{ name = "mint", text = "", fg = "#a6e3a1" },
|
||||
{ name = "dll", text = "", fg = "#11111b" },
|
||||
{ name = "odf", text = "", fg = "#f38ba8" },
|
||||
{ name = "sqlite3", text = "", fg = "#f5e0dc" },
|
||||
{ name = "Dockerfile", text = "", fg = "#89b4fa" },
|
||||
{ name = "ksh", text = "", fg = "#585b70" },
|
||||
{ name = "rmd", text = "", fg = "#74c7ec" },
|
||||
{ name = "wv", text = "", fg = "#74c7ec" },
|
||||
{ name = "xml", text = "", fg = "#fab387" },
|
||||
{ name = "markdown", text = "", fg = "#cdd6f4" },
|
||||
{ name = "qml", text = "", fg = "#a6e3a1" },
|
||||
{ name = "3gp", text = "", fg = "#fab387" },
|
||||
{ name = "pxi", text = "", fg = "#89b4fa" },
|
||||
{ name = "flac", text = "", fg = "#6c7086" },
|
||||
{ name = "gpr", text = "", fg = "#cba6f7" },
|
||||
{ name = "huff", text = "", fg = "#585b70" },
|
||||
{ name = "json", text = "", fg = "#f9e2af" },
|
||||
{ name = "gv", text = "", fg = "#585b70" },
|
||||
{ name = "bmp", text = "", fg = "#7f849c" },
|
||||
{ name = "lock", text = "", fg = "#bac2de" },
|
||||
{ name = "sha384", text = "", fg = "#7f849c" },
|
||||
{ name = "cobol", text = "⚙", fg = "#585b70" },
|
||||
{ name = "cob", text = "⚙", fg = "#585b70" },
|
||||
{ name = "java", text = "", fg = "#f38ba8" },
|
||||
{ name = "cjs", text = "", fg = "#f9e2af" },
|
||||
{ name = "qm", text = "", fg = "#74c7ec" },
|
||||
{ name = "ebuild", text = "", fg = "#45475a" },
|
||||
{ name = "mustache", text = "", fg = "#fab387" },
|
||||
{ name = "terminal", text = "", fg = "#a6e3a1" },
|
||||
{ name = "ejs", text = "", fg = "#f9e2af" },
|
||||
{ name = "brep", text = "", fg = "#a6e3a1" },
|
||||
{ name = "rar", text = "", fg = "#fab387" },
|
||||
{ name = "gradle", text = "", fg = "#585b70" },
|
||||
{ name = "gnumakefile", text = "", fg = "#7f849c" },
|
||||
{ name = "applescript", text = "", fg = "#7f849c" },
|
||||
{ name = "elm", text = "", fg = "#74c7ec" },
|
||||
{ name = "ebook", text = "", fg = "#fab387" },
|
||||
{ name = "kra", text = "", fg = "#cba6f7" },
|
||||
{ name = "tf", text = "", fg = "#585b70" },
|
||||
{ name = "xls", text = "", fg = "#585b70" },
|
||||
{ name = "fnl", text = "", fg = "#f9e2af" },
|
||||
{ name = "kdbx", text = "", fg = "#a6e3a1" },
|
||||
{ name = "kicad_pcb", text = "", fg = "#f5e0dc" },
|
||||
{ name = "cfg", text = "", fg = "#7f849c" },
|
||||
{ name = "ape", text = "", fg = "#74c7ec" },
|
||||
{ name = "org", text = "", fg = "#94e2d5" },
|
||||
{ name = "yml", text = "", fg = "#7f849c" },
|
||||
{ name = "swift", text = "", fg = "#fab387" },
|
||||
{ name = "eln", text = "", fg = "#7f849c" },
|
||||
{ name = "sol", text = "", fg = "#74c7ec" },
|
||||
{ name = "awk", text = "", fg = "#585b70" },
|
||||
{ name = "7z", text = "", fg = "#fab387" },
|
||||
{ name = "apl", text = "⍝", fg = "#fab387" },
|
||||
{ name = "epp", text = "", fg = "#fab387" },
|
||||
{ name = "app", text = "", fg = "#45475a" },
|
||||
{ name = "dot", text = "", fg = "#585b70" },
|
||||
{ name = "kpp", text = "", fg = "#cba6f7" },
|
||||
{ name = "eot", text = "", fg = "#f5e0dc" },
|
||||
{ name = "hpp", text = "", fg = "#7f849c" },
|
||||
{ name = "spec.tsx", text = "", fg = "#585b70" },
|
||||
{ name = "hurl", text = "", fg = "#f38ba8" },
|
||||
{ name = "cxxm", text = "", fg = "#74c7ec" },
|
||||
{ name = "c", text = "", fg = "#89b4fa" },
|
||||
{ name = "fcmacro", text = "", fg = "#f38ba8" },
|
||||
{ name = "sass", text = "", fg = "#f38ba8" },
|
||||
{ name = "yaml", text = "", fg = "#7f849c" },
|
||||
{ name = "xz", text = "", fg = "#fab387" },
|
||||
{ name = "material", text = "", fg = "#f38ba8" },
|
||||
{ name = "json5", text = "", fg = "#f9e2af" },
|
||||
{ name = "signature", text = "λ", fg = "#fab387" },
|
||||
{ name = "3mf", text = "", fg = "#7f849c" },
|
||||
{ name = "jpg", text = "", fg = "#7f849c" },
|
||||
{ name = "xpi", text = "", fg = "#fab387" },
|
||||
{ name = "fcmat", text = "", fg = "#f38ba8" },
|
||||
{ name = "pot", text = "", fg = "#74c7ec" },
|
||||
{ name = "bin", text = "", fg = "#45475a" },
|
||||
{ name = "xlsx", text = "", fg = "#585b70" },
|
||||
{ name = "aac", text = "", fg = "#74c7ec" },
|
||||
{ name = "kicad_sym", text = "", fg = "#f5e0dc" },
|
||||
{ name = "xcstrings", text = "", fg = "#74c7ec" },
|
||||
{ name = "lff", text = "", fg = "#f5e0dc" },
|
||||
{ name = "xcf", text = "", fg = "#585b70" },
|
||||
{ name = "azcli", text = "", fg = "#6c7086" },
|
||||
{ name = "license", text = "", fg = "#f9e2af" },
|
||||
{ name = "jsonc", text = "", fg = "#f9e2af" },
|
||||
{ name = "xaml", text = "", fg = "#585b70" },
|
||||
{ name = "md5", text = "", fg = "#7f849c" },
|
||||
{ name = "xm", text = "", fg = "#74c7ec" },
|
||||
{ name = "sln", text = "", fg = "#6c7086" },
|
||||
{ name = "jl", text = "", fg = "#7f849c" },
|
||||
{ name = "ml", text = "", fg = "#fab387" },
|
||||
{ name = "http", text = "", fg = "#89b4fa" },
|
||||
{ name = "x", text = "", fg = "#89b4fa" },
|
||||
{ name = "wvc", text = "", fg = "#74c7ec" },
|
||||
{ name = "wrz", text = "", fg = "#7f849c" },
|
||||
{ name = "csproj", text = "", fg = "#585b70" },
|
||||
{ name = "wrl", text = "", fg = "#7f849c" },
|
||||
{ name = "wma", text = "", fg = "#74c7ec" },
|
||||
{ name = "woff2", text = "", fg = "#f5e0dc" },
|
||||
{ name = "woff", text = "", fg = "#f5e0dc" },
|
||||
{ name = "tscn", text = "", fg = "#7f849c" },
|
||||
{ name = "webmanifest", text = "", fg = "#f9e2af" },
|
||||
{ name = "webm", text = "", fg = "#fab387" },
|
||||
{ name = "fcbak", text = "", fg = "#f38ba8" },
|
||||
{ name = "log", text = "", fg = "#cdd6f4" },
|
||||
{ name = "wav", text = "", fg = "#74c7ec" },
|
||||
{ name = "wasm", text = "", fg = "#585b70" },
|
||||
{ name = "styl", text = "", fg = "#a6e3a1" },
|
||||
{ name = "gif", text = "", fg = "#7f849c" },
|
||||
{ name = "resi", text = "", fg = "#f38ba8" },
|
||||
{ name = "aiff", text = "", fg = "#74c7ec" },
|
||||
{ name = "sha256", text = "", fg = "#7f849c" },
|
||||
{ name = "igs", text = "", fg = "#a6e3a1" },
|
||||
{ name = "vsix", text = "", fg = "#6c7086" },
|
||||
{ name = "vim", text = "", fg = "#a6e3a1" },
|
||||
{ name = "diff", text = "", fg = "#45475a" },
|
||||
{ name = "drl", text = "", fg = "#eba0ac" },
|
||||
{ name = "erl", text = "", fg = "#f38ba8" },
|
||||
{ name = "vhdl", text = "", fg = "#a6e3a1" },
|
||||
{ name = "🔥", text = "", fg = "#fab387" },
|
||||
{ name = "hrl", text = "", fg = "#f38ba8" },
|
||||
{ name = "fsi", text = "", fg = "#74c7ec" },
|
||||
{ name = "mm", text = "", fg = "#74c7ec" },
|
||||
{ name = "bz", text = "", fg = "#fab387" },
|
||||
{ name = "vh", text = "", fg = "#a6e3a1" },
|
||||
{ name = "kdb", text = "", fg = "#a6e3a1" },
|
||||
{ name = "gz", text = "", fg = "#fab387" },
|
||||
{ name = "cpp", text = "", fg = "#74c7ec" },
|
||||
{ name = "ui", text = "", fg = "#6c7086" },
|
||||
{ name = "txt", text = "", fg = "#a6e3a1" },
|
||||
{ name = "spec.ts", text = "", fg = "#74c7ec" },
|
||||
{ name = "ccm", text = "", fg = "#f38ba8" },
|
||||
{ name = "typoscript", text = "", fg = "#fab387" },
|
||||
{ name = "typ", text = "", fg = "#89dceb" },
|
||||
{ name = "txz", text = "", fg = "#fab387" },
|
||||
{ name = "test.ts", text = "", fg = "#74c7ec" },
|
||||
{ name = "tsx", text = "", fg = "#585b70" },
|
||||
{ name = "mk", text = "", fg = "#7f849c" },
|
||||
{ name = "webp", text = "", fg = "#7f849c" },
|
||||
{ name = "opus", text = "", fg = "#6c7086" },
|
||||
{ name = "bicep", text = "", fg = "#74c7ec" },
|
||||
{ name = "ts", text = "", fg = "#74c7ec" },
|
||||
{ name = "tres", text = "", fg = "#7f849c" },
|
||||
{ name = "torrent", text = "", fg = "#94e2d5" },
|
||||
{ name = "cxx", text = "", fg = "#74c7ec" },
|
||||
{ name = "iso", text = "", fg = "#f2cdcd" },
|
||||
{ name = "ixx", text = "", fg = "#74c7ec" },
|
||||
{ name = "hxx", text = "", fg = "#7f849c" },
|
||||
{ name = "gql", text = "", fg = "#f38ba8" },
|
||||
{ name = "tmux", text = "", fg = "#a6e3a1" },
|
||||
{ name = "ini", text = "", fg = "#7f849c" },
|
||||
{ name = "m3u8", text = "", fg = "#f38ba8" },
|
||||
{ name = "image", text = "", fg = "#f2cdcd" },
|
||||
{ name = "tfvars", text = "", fg = "#585b70" },
|
||||
{ name = "tex", text = "", fg = "#45475a" },
|
||||
{ name = "cbl", text = "⚙", fg = "#585b70" },
|
||||
{ name = "flc", text = "", fg = "#f5e0dc" },
|
||||
{ name = "elc", text = "", fg = "#7f849c" },
|
||||
{ name = "test.tsx", text = "", fg = "#585b70" },
|
||||
{ name = "twig", text = "", fg = "#a6e3a1" },
|
||||
{ name = "sql", text = "", fg = "#f5e0dc" },
|
||||
{ name = "test.jsx", text = "", fg = "#74c7ec" },
|
||||
{ name = "htm", text = "", fg = "#fab387" },
|
||||
{ name = "gcode", text = "", fg = "#6c7086" },
|
||||
{ name = "test.js", text = "", fg = "#f9e2af" },
|
||||
{ name = "ino", text = "", fg = "#74c7ec" },
|
||||
{ name = "tcl", text = "", fg = "#585b70" },
|
||||
{ name = "cljs", text = "", fg = "#74c7ec" },
|
||||
{ name = "tsconfig", text = "", fg = "#fab387" },
|
||||
{ name = "img", text = "", fg = "#f2cdcd" },
|
||||
{ name = "t", text = "", fg = "#74c7ec" },
|
||||
{ name = "fcstd1", text = "", fg = "#f38ba8" },
|
||||
{ name = "out", text = "", fg = "#45475a" },
|
||||
{ name = "jsx", text = "", fg = "#74c7ec" },
|
||||
{ name = "bash", text = "", fg = "#a6e3a1" },
|
||||
{ name = "edn", text = "", fg = "#74c7ec" },
|
||||
{ name = "rss", text = "", fg = "#fab387" },
|
||||
{ name = "flf", text = "", fg = "#f5e0dc" },
|
||||
{ name = "cache", text = "", fg = "#f5e0dc" },
|
||||
{ name = "sbt", text = "", fg = "#f38ba8" },
|
||||
{ name = "cppm", text = "", fg = "#74c7ec" },
|
||||
{ name = "svelte", text = "", fg = "#fab387" },
|
||||
{ name = "mo", text = "∞", fg = "#7f849c" },
|
||||
{ name = "sv", text = "", fg = "#a6e3a1" },
|
||||
{ name = "ko", text = "", fg = "#f5e0dc" },
|
||||
{ name = "suo", text = "", fg = "#6c7086" },
|
||||
{ name = "sldasm", text = "", fg = "#a6e3a1" },
|
||||
{ name = "icalendar", text = "", fg = "#313244" },
|
||||
{ name = "go", text = "", fg = "#74c7ec" },
|
||||
{ name = "sublime", text = "", fg = "#fab387" },
|
||||
{ name = "stl", text = "", fg = "#7f849c" },
|
||||
{ name = "mobi", text = "", fg = "#fab387" },
|
||||
{ name = "graphql", text = "", fg = "#f38ba8" },
|
||||
{ name = "m3u", text = "", fg = "#f38ba8" },
|
||||
{ name = "cpy", text = "⚙", fg = "#585b70" },
|
||||
{ name = "kdenlive", text = "", fg = "#89b4fa" },
|
||||
{ name = "pyo", text = "", fg = "#f9e2af" },
|
||||
{ name = "po", text = "", fg = "#74c7ec" },
|
||||
{ name = "scala", text = "", fg = "#f38ba8" },
|
||||
{ name = "exs", text = "", fg = "#7f849c" },
|
||||
{ name = "odp", text = "", fg = "#fab387" },
|
||||
{ name = "dump", text = "", fg = "#f5e0dc" },
|
||||
{ name = "stp", text = "", fg = "#a6e3a1" },
|
||||
{ name = "step", text = "", fg = "#a6e3a1" },
|
||||
{ name = "ste", text = "", fg = "#a6e3a1" },
|
||||
{ name = "aif", text = "", fg = "#74c7ec" },
|
||||
{ name = "strings", text = "", fg = "#74c7ec" },
|
||||
{ name = "cp", text = "", fg = "#74c7ec" },
|
||||
{ name = "fsscript", text = "", fg = "#74c7ec" },
|
||||
{ name = "mli", text = "", fg = "#fab387" },
|
||||
{ name = "bak", text = "", fg = "#7f849c" },
|
||||
{ name = "ssa", text = "", fg = "#f9e2af" },
|
||||
{ name = "toml", text = "", fg = "#585b70" },
|
||||
{ name = "makefile", text = "", fg = "#7f849c" },
|
||||
{ name = "php", text = "", fg = "#7f849c" },
|
||||
{ name = "zst", text = "", fg = "#fab387" },
|
||||
{ name = "spec.jsx", text = "", fg = "#74c7ec" },
|
||||
{ name = "kbx", text = "", fg = "#6c7086" },
|
||||
{ name = "fbx", text = "", fg = "#7f849c" },
|
||||
{ name = "blend", text = "", fg = "#fab387" },
|
||||
{ name = "ifc", text = "", fg = "#a6e3a1" },
|
||||
{ name = "spec.js", text = "", fg = "#f9e2af" },
|
||||
{ name = "so", text = "", fg = "#f5e0dc" },
|
||||
{ name = "desktop", text = "", fg = "#45475a" },
|
||||
{ name = "sml", text = "λ", fg = "#fab387" },
|
||||
{ name = "slvs", text = "", fg = "#a6e3a1" },
|
||||
{ name = "pp", text = "", fg = "#fab387" },
|
||||
{ name = "ps1", text = "", fg = "#6c7086" },
|
||||
{ name = "dropbox", text = "", fg = "#6c7086" },
|
||||
{ name = "kicad_mod", text = "", fg = "#f5e0dc" },
|
||||
{ name = "bat", text = "", fg = "#a6e3a1" },
|
||||
{ name = "slim", text = "", fg = "#fab387" },
|
||||
{ name = "skp", text = "", fg = "#a6e3a1" },
|
||||
{ name = "css", text = "", fg = "#89b4fa" },
|
||||
{ name = "xul", text = "", fg = "#fab387" },
|
||||
{ name = "ige", text = "", fg = "#a6e3a1" },
|
||||
{ name = "glb", text = "", fg = "#fab387" },
|
||||
{ name = "ppt", text = "", fg = "#f38ba8" },
|
||||
{ name = "sha512", text = "", fg = "#7f849c" },
|
||||
{ name = "ics", text = "", fg = "#313244" },
|
||||
{ name = "mdx", text = "", fg = "#74c7ec" },
|
||||
{ name = "sha1", text = "", fg = "#7f849c" },
|
||||
{ name = "f3d", text = "", fg = "#a6e3a1" },
|
||||
{ name = "ass", text = "", fg = "#f9e2af" },
|
||||
{ name = "godot", text = "", fg = "#7f849c" },
|
||||
{ name = "ifb", text = "", fg = "#313244" },
|
||||
{ name = "cson", text = "", fg = "#f9e2af" },
|
||||
{ name = "lib", text = "", fg = "#11111b" },
|
||||
{ name = "luac", text = "", fg = "#74c7ec" },
|
||||
{ name = "heex", text = "", fg = "#7f849c" },
|
||||
{ name = "scm", text = "", fg = "#f5e0dc" },
|
||||
{ name = "psd1", text = "", fg = "#7f849c" },
|
||||
{ name = "sc", text = "", fg = "#f38ba8" },
|
||||
{ name = "scad", text = "", fg = "#f9e2af" },
|
||||
{ name = "kts", text = "", fg = "#6c7086" },
|
||||
{ name = "svh", text = "", fg = "#a6e3a1" },
|
||||
{ name = "mts", text = "", fg = "#74c7ec" },
|
||||
{ name = "nfo", text = "", fg = "#f9e2af" },
|
||||
{ name = "pck", text = "", fg = "#7f849c" },
|
||||
{ name = "rproj", text = "", fg = "#a6e3a1" },
|
||||
{ name = "rlib", text = "", fg = "#fab387" },
|
||||
{ name = "cljd", text = "", fg = "#74c7ec" },
|
||||
{ name = "ods", text = "", fg = "#a6e3a1" },
|
||||
{ name = "res", text = "", fg = "#f38ba8" },
|
||||
{ name = "apk", text = "", fg = "#a6e3a1" },
|
||||
{ name = "haml", text = "", fg = "#f5e0dc" },
|
||||
{ name = "d.ts", text = "", fg = "#fab387" },
|
||||
{ name = "razor", text = "", fg = "#585b70" },
|
||||
{ name = "rake", text = "", fg = "#313244" },
|
||||
{ name = "patch", text = "", fg = "#45475a" },
|
||||
{ name = "cuh", text = "", fg = "#7f849c" },
|
||||
{ name = "d", text = "", fg = "#f38ba8" },
|
||||
{ name = "query", text = "", fg = "#a6e3a1" },
|
||||
{ name = "psb", text = "", fg = "#74c7ec" },
|
||||
{ name = "nu", text = ">", fg = "#a6e3a1" },
|
||||
{ name = "mov", text = "", fg = "#fab387" },
|
||||
{ name = "lrc", text = "", fg = "#f9e2af" },
|
||||
{ name = "pyx", text = "", fg = "#89b4fa" },
|
||||
{ name = "pyw", text = "", fg = "#89b4fa" },
|
||||
{ name = "cu", text = "", fg = "#a6e3a1" },
|
||||
{ name = "bazel", text = "", fg = "#a6e3a1" },
|
||||
{ name = "obj", text = "", fg = "#7f849c" },
|
||||
{ name = "pyi", text = "", fg = "#f9e2af" },
|
||||
{ name = "pyd", text = "", fg = "#f9e2af" },
|
||||
{ name = "exe", text = "", fg = "#45475a" },
|
||||
{ name = "pyc", text = "", fg = "#f9e2af" },
|
||||
{ name = "fctb", text = "", fg = "#f38ba8" },
|
||||
{ name = "part", text = "", fg = "#94e2d5" },
|
||||
{ name = "blade.php", text = "", fg = "#f38ba8" },
|
||||
{ name = "git", text = "", fg = "#fab387" },
|
||||
{ name = "psd", text = "", fg = "#74c7ec" },
|
||||
{ name = "qss", text = "", fg = "#a6e3a1" },
|
||||
{ name = "csv", text = "", fg = "#a6e3a1" },
|
||||
{ name = "psm1", text = "", fg = "#7f849c" },
|
||||
{ name = "dconf", text = "", fg = "#f5e0dc" },
|
||||
{ name = "config.ru", text = "", fg = "#313244" },
|
||||
{ name = "prisma", text = "", fg = "#6c7086" },
|
||||
{ name = "conf", text = "", fg = "#7f849c" },
|
||||
{ name = "clj", text = "", fg = "#a6e3a1" },
|
||||
{ name = "o", text = "", fg = "#45475a" },
|
||||
{ name = "mp4", text = "", fg = "#fab387" },
|
||||
{ name = "cc", text = "", fg = "#f38ba8" },
|
||||
{ name = "kicad_prl", text = "", fg = "#f5e0dc" },
|
||||
{ name = "bz3", text = "", fg = "#fab387" },
|
||||
{ name = "asc", text = "", fg = "#6c7086" },
|
||||
{ name = "png", text = "", fg = "#7f849c" },
|
||||
{ name = "android", text = "", fg = "#a6e3a1" },
|
||||
{ name = "pm", text = "", fg = "#74c7ec" },
|
||||
{ name = "h", text = "", fg = "#7f849c" },
|
||||
{ name = "pls", text = "", fg = "#f38ba8" },
|
||||
{ name = "ipynb", text = "", fg = "#fab387" },
|
||||
{ name = "pl", text = "", fg = "#74c7ec" },
|
||||
{ name = "ads", text = "", fg = "#f5e0dc" },
|
||||
{ name = "sqlite", text = "", fg = "#f5e0dc" },
|
||||
{ name = "pdf", text = "", fg = "#585b70" },
|
||||
{ name = "pcm", text = "", fg = "#6c7086" },
|
||||
{ name = "ico", text = "", fg = "#f9e2af" },
|
||||
{ name = "a", text = "", fg = "#f5e0dc" },
|
||||
{ name = "R", text = "", fg = "#6c7086" },
|
||||
{ name = "ogg", text = "", fg = "#6c7086" },
|
||||
{ name = "pxd", text = "", fg = "#89b4fa" },
|
||||
{ name = "kdenlivetitle", text = "", fg = "#89b4fa" },
|
||||
{ name = "jxl", text = "", fg = "#7f849c" },
|
||||
{ name = "nswag", text = "", fg = "#a6e3a1" },
|
||||
{ name = "nim", text = "", fg = "#f9e2af" },
|
||||
{ name = "bqn", text = "⎉", fg = "#6c7086" },
|
||||
{ name = "cts", text = "", fg = "#74c7ec" },
|
||||
{ name = "fcparam", text = "", fg = "#f38ba8" },
|
||||
{ name = "rs", text = "", fg = "#fab387" },
|
||||
{ name = "mpp", text = "", fg = "#74c7ec" },
|
||||
{ name = "fdmdownload", text = "", fg = "#94e2d5" },
|
||||
{ name = "pptx", text = "", fg = "#f38ba8" },
|
||||
{ name = "jpeg", text = "", fg = "#7f849c" },
|
||||
{ name = "bib", text = "", fg = "#f9e2af" },
|
||||
{ name = "vhd", text = "", fg = "#a6e3a1" },
|
||||
{ name = "m", text = "", fg = "#89b4fa" },
|
||||
{ name = "js", text = "", fg = "#f9e2af" },
|
||||
{ name = "eex", text = "", fg = "#7f849c" },
|
||||
{ name = "tbc", text = "", fg = "#585b70" },
|
||||
{ name = "astro", text = "", fg = "#f38ba8" },
|
||||
{ name = "sha224", text = "", fg = "#7f849c" },
|
||||
{ name = "xcplayground", text = "", fg = "#fab387" },
|
||||
{ name = "el", text = "", fg = "#7f849c" },
|
||||
{ name = "m4v", text = "", fg = "#fab387" },
|
||||
{ name = "m4a", text = "", fg = "#74c7ec" },
|
||||
{ name = "cs", text = "", fg = "#585b70" },
|
||||
{ name = "hs", text = "", fg = "#7f849c" },
|
||||
{ name = "tgz", text = "", fg = "#fab387" },
|
||||
{ name = "fs", text = "", fg = "#74c7ec" },
|
||||
{ name = "luau", text = "", fg = "#89b4fa" },
|
||||
{ name = "dxf", text = "", fg = "#a6e3a1" },
|
||||
{ name = "download", text = "", fg = "#94e2d5" },
|
||||
{ name = "cast", text = "", fg = "#fab387" },
|
||||
{ name = "qrc", text = "", fg = "#a6e3a1" },
|
||||
{ name = "lua", text = "", fg = "#74c7ec" },
|
||||
{ name = "lhs", text = "", fg = "#7f849c" },
|
||||
{ name = "md", text = "", fg = "#cdd6f4" },
|
||||
{ name = "leex", text = "", fg = "#7f849c" },
|
||||
{ name = "ai", text = "", fg = "#f9e2af" },
|
||||
{ name = "lck", text = "", fg = "#bac2de" },
|
||||
{ name = "kt", text = "", fg = "#6c7086" },
|
||||
{ name = "bicepparam", text = "", fg = "#7f849c" },
|
||||
{ name = "hex", text = "", fg = "#6c7086" },
|
||||
{ name = "zig", text = "", fg = "#fab387" },
|
||||
{ name = "bzl", text = "", fg = "#a6e3a1" },
|
||||
{ name = "cljc", text = "", fg = "#a6e3a1" },
|
||||
{ name = "kicad_dru", text = "", fg = "#f5e0dc" },
|
||||
{ name = "fctl", text = "", fg = "#f38ba8" },
|
||||
{ name = "f#", text = "", fg = "#74c7ec" },
|
||||
{ name = "odt", text = "", fg = "#74c7ec" },
|
||||
{ name = "conda", text = "", fg = "#a6e3a1" },
|
||||
{ name = "vala", text = "", fg = "#585b70" },
|
||||
{ name = "erb", text = "", fg = "#313244" },
|
||||
{ name = "mp3", text = "", fg = "#74c7ec" },
|
||||
{ name = "bz2", text = "", fg = "#fab387" },
|
||||
{ name = "coffee", text = "", fg = "#f9e2af" },
|
||||
{ name = "cr", text = "", fg = "#f5e0dc" },
|
||||
{ name = "f90", text = "", fg = "#585b70" },
|
||||
{ name = "jwmrc", text = "", fg = "#6c7086" },
|
||||
{ name = "c++", text = "", fg = "#f38ba8" },
|
||||
{ name = "fcscript", text = "", fg = "#f38ba8" },
|
||||
{ name = "fods", text = "", fg = "#a6e3a1" },
|
||||
{ name = "cue", text = "", fg = "#f38ba8" },
|
||||
{ name = "srt", text = "", fg = "#f9e2af" },
|
||||
{ name = "info", text = "", fg = "#f9e2af" },
|
||||
{ name = "hh", text = "", fg = "#7f849c" },
|
||||
{ name = "sig", text = "λ", fg = "#fab387" },
|
||||
{ name = "html", text = "", fg = "#fab387" },
|
||||
{ name = "iges", text = "", fg = "#a6e3a1" },
|
||||
{ name = "kicad_wks", text = "", fg = "#f5e0dc" },
|
||||
{ name = "hbs", text = "", fg = "#fab387" },
|
||||
{ name = "fcstd", text = "", fg = "#f38ba8" },
|
||||
{ name = "gresource", text = "", fg = "#f5e0dc" },
|
||||
{ name = "sub", text = "", fg = "#f9e2af" },
|
||||
{ name = "ical", text = "", fg = "#313244" },
|
||||
{ name = "crdownload", text = "", fg = "#94e2d5" },
|
||||
{ name = "pub", text = "", fg = "#f9e2af" },
|
||||
{ name = "vue", text = "", fg = "#a6e3a1" },
|
||||
{ name = "gd", text = "", fg = "#7f849c" },
|
||||
{ name = "fsx", text = "", fg = "#74c7ec" },
|
||||
{ name = "mkv", text = "", fg = "#fab387" },
|
||||
{ name = "py", text = "", fg = "#f9e2af" },
|
||||
{ name = "kicad_sch", text = "", fg = "#f5e0dc" },
|
||||
{ name = "epub", text = "", fg = "#fab387" },
|
||||
{ name = "env", text = "", fg = "#f9e2af" },
|
||||
{ name = "magnet", text = "", fg = "#45475a" },
|
||||
{ name = "elf", text = "", fg = "#45475a" },
|
||||
{ name = "fodg", text = "", fg = "#f9e2af" },
|
||||
{ name = "svg", text = "", fg = "#fab387" },
|
||||
{ name = "dwg", text = "", fg = "#a6e3a1" },
|
||||
{ name = "docx", text = "", fg = "#585b70" },
|
||||
{ name = "pro", text = "", fg = "#f9e2af" },
|
||||
{ name = "db", text = "", fg = "#f5e0dc" },
|
||||
{ name = "rb", text = "", fg = "#313244" },
|
||||
{ name = "r", text = "", fg = "#6c7086" },
|
||||
{ name = "scss", text = "", fg = "#f38ba8" },
|
||||
{ name = "cow", text = "", fg = "#fab387" },
|
||||
{ name = "gleam", text = "", fg = "#f5c2e7" },
|
||||
{ name = "v", text = "", fg = "#a6e3a1" },
|
||||
{ name = "kicad_pro", text = "", fg = "#f5e0dc" },
|
||||
{ name = "liquid", text = "", fg = "#a6e3a1" },
|
||||
{ name = "zip", text = "", fg = "#fab387" },
|
||||
]
|
||||
@@ -0,0 +1,20 @@
|
||||
[plugin]
|
||||
|
||||
prepend_previewers = [
|
||||
{ url = "*.csv", run = "rich-preview"}, # for csv files
|
||||
{ url = "*.md", run = "rich-preview" }, # for markdown (.md) files
|
||||
{ url = "*.rst", run = "rich-preview"}, # for restructured text (.rst) files
|
||||
{ url = "*.ipynb", run = "rich-preview"}, # for jupyter notebooks (.ipynb)
|
||||
{ url = "*.json", run = "rich-preview"}, # for json (.json) files
|
||||
# { url = "*.lang_type", run = "rich-preview"} # for particular language files eg. .py, .go., .lua, etc.
|
||||
]
|
||||
|
||||
[[plugin.prepend_fetchers]]
|
||||
url = "*"
|
||||
run = "git"
|
||||
group = "git"
|
||||
|
||||
[[plugin.prepend_fetchers]]
|
||||
url = "*/"
|
||||
run = "git"
|
||||
group = "git"
|
||||
Reference in New Issue
Block a user