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:
2026-08-01 22:37:00 -04:00
parent b550677af7
commit 7e6d30c3cd
71 changed files with 264 additions and 389 deletions
@@ -0,0 +1,4 @@
opencode-bin
{{ if eq .chezmoi.hostname "flow" -}}
pulsemeeter-git
{{- end }}
+4
View File
@@ -0,0 +1,4 @@
#!/bin/bash
sudo pacman -S --needed - < packages.txt
paru -S --needed - < aur-packages.txt
+30
View File
@@ -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
+502
View File
@@ -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"
#
+1
View File
@@ -0,0 +1 @@
ELECTRON_OZONE_PLATFORM_HINT=auto
+2
View File
@@ -0,0 +1,2 @@
VISUAL=nvim
EDITOR=nvim
+2
View File
@@ -0,0 +1,2 @@
PROTON_ENABLE_WAYLAND=1
PROTON_USE_NTSYNC=1
+1
View File
@@ -0,0 +1 @@
SSH_AUTH_SOCK=/home/pmcc/.bitwarden-ssh-agent.sock
+4
View File
@@ -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
+7
View File
@@ -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
+80
View File
@@ -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
+19
View File
@@ -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
+47
View File
@@ -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
+20
View File
@@ -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 },
})
+15
View File
@@ -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
},
},
}
+143
View File
@@ -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" })
+5
View File
@@ -0,0 +1,5 @@
require("config.options")
require("config.keymaps")
require("config.diagnostics")
require("config.autocmds")
require("config.lsp")
+222
View File
@@ -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" })
+62
View File
@@ -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
+137
View File
@@ -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",
},
})
+21
View File
@@ -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,
}
+67
View File
@@ -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,
}
+289
View File
@@ -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",
}
+53
View File
@@ -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,
}
+7
View File
@@ -0,0 +1,7 @@
return {
"MeanderingProgrammer/render-markdown.nvim",
dependencies = {
"nvim-treesitter/nvim-treesitter",
"nvim-tree/nvim-web-devicons",
},
}
+9
View File
@@ -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",
},
}
+18
View File
@@ -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,
}
+8
View File
@@ -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,
},
}
+96
View File
@@ -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,
}
+27
View File
@@ -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 -->
+40
View File
@@ -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 footers 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 footers 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
```
+361
View File
@@ -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"
}
+172
View File
@@ -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;
}
+28
View File
@@ -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;
}
+6
View File
@@ -0,0 +1,6 @@
@theme "catppuccin-default"
configuration {
run-command: "uwsm app -- {cmd}";
run-shell-command: "uwsm app -- {terminal} -e {cmd}";
}
+277
View File
@@ -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"
+286
View File
@@ -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/*
+6
View File
@@ -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 }}
+10
View File
@@ -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
+30
View File
@@ -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
+16
View File
@@ -0,0 +1,16 @@
{
"media": {
"camera": {
"autoAdjustAspectRatio": { "enabled": true },
"resolution": {
"enabled": true,
"mode": "override",
"width": 1920,
"height": 1080
}
},
"video": {
"menuEnabled": true
}
}
}
+11
View File
@@ -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 }}
+26
View File
@@ -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;
+23
View File
@@ -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>
+86
View File
@@ -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;
}
+12
View File
@@ -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
}
+1
View File
@@ -0,0 +1 @@
require("git"):setup()
+12
View File
@@ -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 = []
+771
View File
@@ -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" },
]
+20
View File
@@ -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"