From 6b1f963f4f671c13defc0f72409c61324e686b7c Mon Sep 17 00:00:00 2001 From: StepanovPlaton Date: Sun, 4 Jan 2026 22:29:08 +0400 Subject: [PATCH] 04-01-2026 --- .bashrc | 6 +- .config/bspwm/bspwmrc | 2 +- .config/conky/conky.conf | 3 +- .config/conky/weather.conf | 2 +- .config/dunst/config.conf | 24 ++ .config/nvim/lazy-lock.json | 77 ++--- .config/nvim/lua/base.lua | 162 +++++++-- .config/nvim/lua/keymaps.lua | 122 +++++-- .config/nvim/lua/plugins/ai.lua | 1 + .config/nvim/lua/plugins/autocomplete.lua | 221 +++++++++---- .config/nvim/lua/plugins/buffer_manager.lua | 14 - .config/nvim/lua/plugins/colors.lua | 8 +- .config/nvim/lua/plugins/colorscheme.lua | 199 ++++++++--- .config/nvim/lua/plugins/comment.lua | 21 +- .config/nvim/lua/plugins/git.lua | 95 ++++-- .config/nvim/lua/plugins/latex.lua | 17 + .config/nvim/lua/plugins/leap.lua | 43 +++ .config/nvim/lua/plugins/lsp.lua | 344 +++++++++++++------- .config/nvim/lua/plugins/markdown.lua | 14 + .config/nvim/lua/plugins/neotree.lua | 27 +- .config/nvim/lua/plugins/rus.lua | 8 +- .config/nvim/lua/plugins/status_line.lua | 22 +- .config/nvim/lua/plugins/surround.lua | 32 +- .config/nvim/lua/plugins/telescope.lua | 96 +++--- .config/nvim/lua/plugins/terminal.lua | 31 +- .config/nvim/lua/plugins/todo_comments.lua | 28 +- .config/nvim/lua/plugins/treesitter.lua | 64 ++-- .config/nvim/lua/plugins/trouble.lua | 10 +- .config/nvim/lua/plugins/which_key.lua | 9 + .config/picom/picom.conf | 4 +- .config/polybar/config.ini | 24 +- .gitignore | 4 + .scripts/active_network_name | 3 + .xinitrc | 14 +- 34 files changed, 1201 insertions(+), 550 deletions(-) create mode 100644 .config/dunst/config.conf create mode 100644 .config/nvim/lua/plugins/ai.lua delete mode 100644 .config/nvim/lua/plugins/buffer_manager.lua create mode 100644 .config/nvim/lua/plugins/latex.lua create mode 100644 .config/nvim/lua/plugins/leap.lua create mode 100644 .config/nvim/lua/plugins/markdown.lua create mode 100644 .config/nvim/lua/plugins/which_key.lua create mode 100755 .scripts/active_network_name diff --git a/.bashrc b/.bashrc index 1626c8e..fcf0d5b 100644 --- a/.bashrc +++ b/.bashrc @@ -19,6 +19,10 @@ alias dmenu_wal='dmenu_run -nb "$color0" -nf "$color15" -sb "$color1" -sf "$colo #alias sudo="sudo -A" alias numen_full="numen ~/.config/numen/phrases.phrases --phraselog=phrases.txt" - +alias ll="ls -lah --color" export PATH="~/.scripts:$PATH" +export PATH="/usr/lib/jvm/default/bin:$PATH" + +# Created by `pipx` on 2025-06-29 13:27:39 +export PATH="$PATH:/home/dwarf/.local/bin" diff --git a/.config/bspwm/bspwmrc b/.config/bspwm/bspwmrc index dda2550..ddf22e0 100755 --- a/.config/bspwm/bspwmrc +++ b/.config/bspwm/bspwmrc @@ -19,7 +19,7 @@ bspc config focused_border_color "$color2" bspc config top_padding 30 -telegram-desktop -startintray & +Telegram -startintray & bspc rule -a TelegramDesktop desktop='^5' bspc rule -a St_float state=pseudo_tiled diff --git a/.config/conky/conky.conf b/.config/conky/conky.conf index 05af5fd..44fab00 100644 --- a/.config/conky/conky.conf +++ b/.config/conky/conky.conf @@ -75,7 +75,8 @@ ${color0}Hostname: $alignr${exec cat /etc/hostname}$color ${color0}Connection: $alignr\ ${if_match "${exec nmcli -f name c s --active | awk 'FNR == 2' | xargs}" == "Wired connection 1"}Wired${else}${exec nmcli -f name c s --active | awk 'FNR == 2' | xargs}${endif}\ $color -${color0}Network speed: $alignr${upspeed}/${downspeed}$color +# ${color0}Speed up/down: $alignr${upspeed "${exec ip route show default 2>/dev/null | awk '/default/ {print $5; exit}'}"}/${downspeed "${exec ip route show default 2>/dev/null | awk '/default/ {print $5; exit}'}"}$color +# ${color0}Total up/down: $alignr${totalup exec ip route show default 2>/dev/null | awk '/default/ {print $5; exit}'}/${totaldown "${exec ip route show default 2>/dev/null | awk '/default/ {print $5; exit}'}"}$color ${color1}${goto 25}CPU${color0} $hr $color ${color0}Frequency (GHz): $alignr$freq_g$color diff --git a/.config/conky/weather.conf b/.config/conky/weather.conf index 4ed4599..f07ad44 100644 --- a/.config/conky/weather.conf +++ b/.config/conky/weather.conf @@ -26,7 +26,7 @@ conky.config = { -- own_window_argb_value = 180, -- Скорость обновления - update_interval = 1, + update_interval = 60, cpu_avg_samples = 2, diff --git a/.config/dunst/config.conf b/.config/dunst/config.conf new file mode 100644 index 0000000..7494bd2 --- /dev/null +++ b/.config/dunst/config.conf @@ -0,0 +1,24 @@ +[global] +separator_color = frame +width = (50, 300) +height = (30, 60) +notification_limit = 5 +offset = (5, 30) +padding = 8 +gap_size = 4 +font = CodeNewRoman Nerd Font Mono 10 + +[urgency_low] +background = "#1d2021" +foreground = "#d4be98" +frame_color = "#7daea3" + +[urgency_normal] +background = "#1d2021" +foreground = "#d4be98" +frame_color = "#a9b665" + +[urgency_critical] +background = "#3c1f1e" +foreground = "#ddc7a1" +frame_color = "#ea6962" diff --git a/.config/nvim/lazy-lock.json b/.config/nvim/lazy-lock.json index e65962f..630fbff 100644 --- a/.config/nvim/lazy-lock.json +++ b/.config/nvim/lazy-lock.json @@ -1,41 +1,44 @@ { - "LuaSnip": { "branch": "master", "commit": "57c9f5c31b3d712376c704673eac8e948c82e9c1" }, - "buffer_manager.nvim": { "branch": "main", "commit": "4fa47504a23d9a94216f02b1d84f7b0a2dbe2b72" }, - "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, - "cmp-cmdline": { "branch": "main", "commit": "8ee981b4a91f536f52add291594e89fb6645e451" }, - "cmp-nvim-lsp": { "branch": "main", "commit": "5af77f54de1b16c34b23cba810150689a3a90312" }, - "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, - "cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" }, - "fidget.nvim": { "branch": "main", "commit": "eb9fccf7fda8b641814f31d47926202f229980b3" }, - "friendly-snippets": { "branch": "main", "commit": "53d3df271d031c405255e99410628c26a8f0d2b0" }, - "gitsigns.nvim": { "branch": "main", "commit": "d195f0c35ced5174d3ecce1c4c8ebb3b5bc23fa9" }, - "gruvbox.nvim": { "branch": "main", "commit": "f0e029a3989691eb38cfa9272b75251c62a00821" }, - "lazy.nvim": { "branch": "main", "commit": "96584866b9c5e998cbae300594d0ccfd0c464627" }, - "lualine.nvim": { "branch": "master", "commit": "2248ef254d0a1488a72041cfb45ca9caada6d994" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "56e435e09f8729af2d41973e81a0db440f8fe9c9" }, - "mason-null-ls.nvim": { "branch": "main", "commit": "788499e735c6e71ba25c08e7df159e8dbf94c6ec" }, - "mason-registry": { "branch": "main", "commit": "a23adcb7eb14513739c9d5fe52814611f158bebd" }, - "mason.nvim": { "branch": "main", "commit": "41e75af1f578e55ba050c863587cffde3556ffa6" }, - "neo-tree.nvim": { "branch": "v3.x", "commit": "77d9f484b88fd380386b46ed9206e5374d69d9d8" }, - "none-ls.nvim": { "branch": "main", "commit": "e7382de51b4cf629e56f1fa18192e716e5ba8145" }, - "nui.nvim": { "branch": "main", "commit": "c9b4de623d19a85b353ff70d2ae9c77143abe69c" }, - "nvim-cmp": { "branch": "main", "commit": "538e37ba87284942c1d76ed38dd497e54e65b891" }, - "nvim-lspconfig": { "branch": "master", "commit": "9099871a7c7e1c16122e00d70208a2cd02078d80" }, - "nvim-surround": { "branch": "main", "commit": "633a0ab03159569a66b65671b0ffb1a6aed6cf18" }, - "nvim-treesitter": { "branch": "master", "commit": "27f68c0b6a87cbad900b3d016425450af8268026" }, - "nvim-ts-autotag": { "branch": "main", "commit": "8515e48a277a2f4947d91004d9aa92c29fdc5e18" }, - "nvim-ufo": { "branch": "main", "commit": "c6d88523f574024b788f1c3400c5d5b9bb1a0407" }, - "nvim-web-devicons": { "branch": "master", "commit": "43aa2ddf476012a2155f5f969ee55ab17174da7a" }, - "plenary.nvim": { "branch": "master", "commit": "55d9fe89e33efd26f532ef20223e5f9430c8b0c0" }, - "promise-async": { "branch": "main", "commit": "94f6f03c6c1e2aab551aacdf0c1e597a7269abb6" }, - "telescope-file-browser.nvim": { "branch": "master", "commit": "8e0543365fe5781c9babea7db89ef06bcff3716d" }, + "Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" }, + "LuaSnip": { "branch": "master", "commit": "21f74f7ba8c49f95f9d7c8293b147c2901dd2d3a" }, + "autoclose.nvim": { "branch": "main", "commit": "3f86702b54a861a17d7994b2e32a7c648cb12fb1" }, + "cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" }, + "cmp-cmdline": { "branch": "main", "commit": "d126061b624e0af6c3a556428712dd4d4194ec6d" }, + "cmp-nvim-lsp": { "branch": "main", "commit": "bd5a7d6db125d4654b50eeae9f5217f24bb22fd3" }, + "cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" }, + "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, + "fidget.nvim": { "branch": "main", "commit": "4d5858bd4c471c895060e1b9f3575f1551184dc5" }, + "flit.nvim": { "branch": "main", "commit": "513e38abe61237c53a9e983e45595b1d2e7d5391" }, + "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, + "gitsigns.nvim": { "branch": "main", "commit": "f780609807eca1f783a36a8a31c30a48fbe150c5" }, + "gruvbox.nvim": { "branch": "main", "commit": "5e0a460d8e0f7f669c158dedd5f9ae2bcac31437" }, + "knap": { "branch": "main", "commit": "7db44d0bb760120142cc1e8f43e44976de59c2f6" }, + "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, + "leap.nvim": { "branch": "main", "commit": "657da3f8aa2cb8359ce90e8bc0ed5ca0d9665383" }, + "lualine.nvim": { "branch": "master", "commit": "b8c23159c0161f4b89196f74ee3a6d02cdc3a955" }, + "markview.nvim": { "branch": "main", "commit": "e6b0f5aee8105adab6077509c46459812db4cffa" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "7f9a39fcd2ac6e979001f857727d606888f5909c" }, + "mason-null-ls.nvim": { "branch": "main", "commit": "de19726de7260c68d94691afb057fa73d3cc53e7" }, + "mason-registry": { "branch": "main", "commit": "2b73015a7f85d79f167c9d30835dfb3b7e9afc4e" }, + "mason.nvim": { "branch": "main", "commit": "7dc4facca9702f95353d5a1f87daf23d78e31c2a" }, + "neo-tree.nvim": { "branch": "v3.x", "commit": "f1deac7ecec88c28a250d890ba7bb35843e69cbd" }, + "none-ls.nvim": { "branch": "main", "commit": "f0b3dc073153a08fd1e32869ed30b87a3bb4230f" }, + "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, + "nvim-cmp": { "branch": "main", "commit": "b5311ab3ed9c846b585c0c15b7559be131ec4be9" }, + "nvim-lspconfig": { "branch": "master", "commit": "d9879110d0422a566fa01d732556f4d5515e1738" }, + "nvim-surround": { "branch": "main", "commit": "a868c256c861044beb9794b4dd126480dcdfbdad" }, + "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, + "nvim-ts-autotag": { "branch": "main", "commit": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc" }, + "nvim-web-devicons": { "branch": "master", "commit": "6e51ca170563330e063720449c21f43e27ca0bc1" }, + "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, + "telescope-file-browser.nvim": { "branch": "master", "commit": "3610dc7dc91f06aa98b11dca5cc30dfa98626b7e" }, "telescope-symbols.nvim": { "branch": "master", "commit": "a6d0127a53d39b9fc2af75bd169d288166118aec" }, "telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" }, "telescope.nvim": { "branch": "master", "commit": "d90956833d7c27e73c621a61f20b29fdb7122709" }, - "todo-comments.nvim": { "branch": "main", "commit": "4a6737a8d70fe1ac55c64dfa47fcb189ca431872" }, - "toggleterm.nvim": { "branch": "main", "commit": "cbd041d91b90cd3c02df03fe6133208888f8e008" }, - "trouble.nvim": { "branch": "main", "commit": "f1168feada93c0154ede4d1fe9183bf69bac54ea" }, - "vim-commentary": { "branch": "master", "commit": "e87cd90dc09c2a203e13af9704bd0ef79303d755" }, - "vim-css-color": { "branch": "master", "commit": "6cc65734bc7105d9677ca54e2255fcbc953ba6bf" }, - "vim-plugin-ruscmd": { "branch": "master", "commit": "e952abbea092e420b128936a0c284fb522612c3a" } -} \ No newline at end of file + "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" }, + "toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" }, + "trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" }, + "vim-css-color": { "branch": "master", "commit": "14fd934cdd9ca1ac0e53511094e612eb9bace373" }, + "vim-repeat": { "branch": "master", "commit": "65846025c15494983dafe5e3b46c8f88ab2e9635" }, + "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" } +} diff --git a/.config/nvim/lua/base.lua b/.config/nvim/lua/base.lua index dc89175..7cd920e 100644 --- a/.config/nvim/lua/base.lua +++ b/.config/nvim/lua/base.lua @@ -1,14 +1,15 @@ -local cmd = vim.cmd -- execute Vim commands -local exec = vim.api.nvim_exec -- execute Vimscript -local g = vim.g -- global variables -local opt = vim.opt -- global/buffer/windows-scoped options +local cmd = vim.cmd -- execute Vim commands +local exec = vim.api.nvim_exec -- execute Vimscript +local g = vim.g -- global variables +local opt = vim.opt -- global/buffer/windows-scoped options ----------------------------------------------------------- -- Главные ----------------------------------------------------------- --- Откллючить поддержку со старым vi -g.nocompatible = true +-- Отключить поддержку со старым vi +-- g.nocompatible = true +opt.compatible = false -- Не делать бекап файла g.nobackup = true g.nowritebackup = true @@ -18,19 +19,19 @@ g.encoding = "utf-8" -- Буфер обмена с системой (нужен xclip) opt.clipboard = "unnamed,unnamedplus" -- Разделитель на 80 символов -opt.colorcolumn = '80' +opt.colorcolumn = "80" -- Словари рус eng -opt.spelllang = { 'en_us', 'ru' } +opt.spelllang = { "en_us", "ru" } -- Включаем нумерацию строк -opt.number = true +opt.number = true -- Вкл. относительную нумерацию строк -opt.relativenumber = true +opt.relativenumber = true -- Возможность отката назад -opt.undofile = true +opt.undofile = true -- vertical split вправо -opt.splitright = true +opt.splitright = true -- horizontal split вниз -opt.splitbelow = true +opt.splitbelow = true -- Отступ во время скрола opt.scrolloff = 10 -- Показать парную скобку @@ -46,12 +47,37 @@ opt.swapfile = false -- g.loaded_netrw = 1 -- g.loaded_netrwPlugin = 1 +-- Игнорировать регистр при поиске, если все буквы строчные +opt.ignorecase = true +opt.smartcase = true +-- Не прыгать при поиске +opt.incsearch = true +-- Подсветка результатов поиска +opt.hlsearch = true + +-- Автодополнение путей +opt.wildmenu = true +opt.wildmode = "longest:full,full" + +-- Конфигурация проверки орфографии +opt.spell = true +opt.spelllang = { "en_us", "ru" } +opt.spellsuggest = "best,3" + +-- Автоматическое включение проверки для определенных типов файлов +vim.api.nvim_create_autocmd("FileType", { + pattern = { "markdown", "text", "gitcommit", "latex", "tex" }, + callback = function() + vim.opt_local.spell = true + end, +}) + ----------------------------------------------------------- -- Цветовая схема ----------------------------------------------------------- --- Нужно для поддежки pywal --- opt.termguicolors = false +-- Нужно для поддержки pywal +-- opt.termguicolors = false -- Устанавливаем тему из pywal -- cmd([[ -- highlight ColorColumn ctermbg=16 @@ -67,13 +93,13 @@ syntax enable ]]) -- Использовать пробелы вместо табуляции -opt.expandtab = true +opt.expandtab = true -- Количество пробелов используемых для отступа -opt.shiftwidth = 4 +opt.shiftwidth = 4 -- 1 таб = 4 пробелам -opt.tabstop = 4 +opt.tabstop = 4 -- Добавлять отступ на новых строках -opt.smartindent = true +opt.smartindent = true -- Не автокомментировать новые строки cmd([[au BufEnter * set fo-=c fo-=r fo-=o]]) @@ -83,22 +109,110 @@ cmd([[autocmd FileType text,markdown,html,xhtml,javascript setlocal cc=0]]) -- 2 пробела для выбранных типов файлов cmd([[ -autocmd FileType xml,html,xhtml,css,scss,javascript,lua,yaml,htmljinja setlocal shiftwidth=2 tabstop=2 +autocmd FileType xml,html,xhtml,css,scss,sass,javascript,typescript,lua,yaml,htmljinja,vue,svelte setlocal shiftwidth=2 tabstop=2 ]]) +-- Показывать непечатные символы +opt.list = true +opt.listchars = { + tab = "▸ ", + trail = "·", + nbsp = "␣", + extends = "❯", + precedes = "❮", +} + ----------------------------------------------------------- -- Полезные фишки ----------------------------------------------------------- -- Запоминает где nvim последний раз редактировал файл -cmd [[ +cmd([[ autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif -]] +]]) -- Подсвечивает на доли секунды скопированную часть текста -exec([[ +exec( + [[ augroup YankHighlight autocmd! autocmd TextYankPost * silent! lua vim.highlight.on_yank{higroup="IncSearch", timeout=300} augroup end -]], false) +]], + false +) + +-- Автоматическое перечитывание файла при изменении извне +opt.autoread = true +vim.api.nvim_create_autocmd({ "FocusGained", "BufEnter" }, { + pattern = "*", + command = "checktime", +}) + +----------------------------------------------------------- +-- Полезные фишки: Автосохранение с таймаутом +----------------------------------------------------------- +-- local autosave_timers = {} +-- +-- -- Функция для сохранения буфера +-- local function save_buffer(bufnr) +-- vim.api.nvim_buf_call(bufnr, function() +-- vim.cmd("silent! write") +-- end) +-- end +-- +-- -- Автогруппа для автосохранения +-- vim.api.nvim_create_augroup("autosave_debounced", { clear = true }) +-- +-- -- Дебаунсим только изменения вне insert mode (TextChanged) +-- vim.api.nvim_create_autocmd("TextChanged", { +-- group = "autosave_debounced", +-- pattern = "*", +-- callback = function(args) +-- local bufnr = args.buf +-- +-- -- Отменяем предыдущий таймер для этого буфера +-- if autosave_timers[bufnr] then +-- autosave_timers[bufnr]:stop() +-- autosave_timers[bufnr]:close() +-- end +-- +-- -- Создаем новый таймер на 500 мс +-- autosave_timers[bufnr] = vim.defer_fn(function() +-- save_buffer(bufnr) +-- autosave_timers[bufnr] = nil +-- end, 500) +-- end, +-- }) +-- +-- -- Сохраняем сразу при выходе из insert mode +-- vim.api.nvim_create_autocmd("InsertLeave", { +-- group = "autosave_debounced", +-- pattern = "*", +-- callback = function(args) +-- local bufnr = args.buf +-- +-- -- Отменяем отложенное сохранение, если оно было запланировано +-- if autosave_timers[bufnr] then +-- autosave_timers[bufnr]:stop() +-- autosave_timers[bufnr]:close() +-- autosave_timers[bufnr] = nil +-- end +-- +-- -- Сохраняем сразу +-- save_buffer(bufnr) +-- end, +-- }) +-- +-- -- Очистка таймеров при закрытии буфера +-- vim.api.nvim_create_autocmd("BufWipeout", { +-- group = "autosave_debounced", +-- pattern = "*", +-- callback = function(args) +-- if autosave_timers[args.buf] then +-- autosave_timers[args.buf]:stop() +-- autosave_timers[args.buf]:close() +-- autosave_timers[args.buf] = nil +-- end +-- end, +-- }) diff --git a/.config/nvim/lua/keymaps.lua b/.config/nvim/lua/keymaps.lua index d1c1a08..60e1fa9 100644 --- a/.config/nvim/lua/keymaps.lua +++ b/.config/nvim/lua/keymaps.lua @@ -1,47 +1,129 @@ local default_opts = { noremap = true, silent = true } local function map(mode, l, r, opts) - opts = opts or default_opts - opts.buffer = bufnr - vim.keymap.set(mode, l, r, opts) + opts = opts or default_opts + -- opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) end ----------------------------------------------------------- --- Базовые +-- Базовые ----------------------------------------------------------- -- Командная клавиша vim.keymap.set("n", " ", "", { silent = true, remap = false }) vim.g.mapleader = " " +-- Быстрое перемещение +map("n", "", "10j") +map("n", "", "10k") + +-- Быстрое сохранение +map("n", "w", "write") +map("n", "q", "quit") + -- 'Нажимает' на ESC при быстром нажатии jj -map('i', 'оо', '') -map('i', 'jj', '') +-- map("i", "оо", "") +-- map("i", "jj", "") + +-- Переход в режим ввода на русском при нажатии R +vim.keymap.set("n", "R", function() + os.execute("xkb-switch -s ru") + vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("i", true, true, true), "n", true) +end, { noremap = true, silent = true }) + +local returnFromInsert = function() + vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("", true, true, true), "n", true) + os.execute("xkb-switch -s us") +end +vim.keymap.set("i", "jj", returnFromInsert, { noremap = true, silent = true }) +vim.keymap.set("i", "оо", returnFromInsert, { noremap = true, silent = true }) -- Отключение стрелочек. Использовать hjkl -map('', '', ':echoe "Use k"', {noremap = true, silent = false}) -map('', '', ':echoe "Use j"', {noremap = true, silent = false}) -map('', '', ':echoe "Use h"', {noremap = true, silent = false}) -map('', '', ':echoe "Use l"', {noremap = true, silent = false}) +-- map("", "", ':echoe "Use k"', { noremap = true, silent = false }) +-- map("", "", ':echoe "Use j"', { noremap = true, silent = false }) +-- map("", "", ':echoe "Use h"', { noremap = true, silent = false }) +-- map("", "", ':echoe "Use l"', { noremap = true, silent = false }) -map('n', "", "h") -map('n', "", "j") -map('n', "", "k") -map('n', "", "l") +-- Ресайз окон +map("n", "", "resize +2") +map("n", "", "resize -2") +map("n", "", "vertical resize +2") +map("n", "", "vertical resize -2") -map('n', 'st', ':set invlist') +-- Перемещение между окнами +map("n", "", "h") +map("n", "", "j") +map("n", "", "k") +map("n", "", "l") + +map("n", "st", ":set invlist") + +----------------------------------------------------------- +-- Spell Check +----------------------------------------------------------- +-- Включить/выключить проверку +map("n", "ss", "set spell!", { desc = "Toggle spell check" }) + +-- Навигация по ошибкам +map("n", "]s", "normal! ]s", { desc = "Next spelling error" }) +map("n", "[s", "normal! [s", { desc = "Previous spelling error" }) + +-- Добавить слово в словарь +map("n", "sda", "normal! zg", { desc = "Add to dictionary" }) +map("n", "sdd", "normal! zw", { desc = "Mark as wrong" }) + +-- Показать варианты исправления +map("n", "sp", "normal! z=", { desc = "Show spelling suggestions" }) + +-- Русская раскладка в справках +vim.cmd([[ +" Русские подсказки для проверки орфографии +set spellcapcheck= " Отключить проверку заглавных букв для русского +]]) + +-- Альтернативный путь к словарям (если стандартный не работает) +local spell_paths = { + "/usr/share/hunspell/", + "/usr/share/myspell/dicts/", + "/usr/share/myspell/", + vim.fn.expand("~/.local/share/nvim/spell/"), +} + +-- Проверить и установить словари если нужно +local function setup_spell() + local has_dicts = false + + for _, path in ipairs(spell_paths) do + if vim.fn.isdirectory(path) == 1 then + vim.opt.spellfile = vim.fn.glob(path .. "/*.add") + has_dicts = true + break + end + end + + if not has_dicts then + vim.notify( + "Словари не найдены. Установите: sudo apt install hunspell-ru hunspell-en-us", + vim.log.levels.WARN + ) + end +end + +-- Вызвать настройку при запуске +vim.defer_fn(setup_spell, 100) ----------------------------------------------------------- -- F1 .. F12 ----------------------------------------------------------- -- По F1 очищаем последний поиск с подсветкой -map('n', '', ':nohl') -map('n', 'nh', ':nohl') +-- map("n", "", ":nohl") +map("n", "nh", ":nohl") -- разные вариации нумераций строк, можно переключаться -map('n', '', ':exec &nu==&rnu? "se nu!" : "se rnu!"') +map("n", "", ':exec &nu==&rnu? "se nu!" : "se rnu!"') -- Проверка орфографии для русского и английского языка -map('n', '', ':set spell!') -map('i', '', ':set spell!') +map("n", "", ":set spell!") +map("i", "", ":set spell!") diff --git a/.config/nvim/lua/plugins/ai.lua b/.config/nvim/lua/plugins/ai.lua new file mode 100644 index 0000000..a564707 --- /dev/null +++ b/.config/nvim/lua/plugins/ai.lua @@ -0,0 +1 @@ +return {} diff --git a/.config/nvim/lua/plugins/autocomplete.lua b/.config/nvim/lua/plugins/autocomplete.lua index 4c0fc37..26044ad 100644 --- a/.config/nvim/lua/plugins/autocomplete.lua +++ b/.config/nvim/lua/plugins/autocomplete.lua @@ -1,72 +1,159 @@ return { - { - "hrsh7th/nvim-cmp", - dependencies = { - "hrsh7th/cmp-buffer", - "hrsh7th/cmp-path", - "hrsh7th/cmp-cmdline", - "L3MON4D3/LuaSnip", - "rafamadriz/friendly-snippets", - "saadparwaiz1/cmp_luasnip", - }, - config = function() - local luasnip = require("luasnip") - local cmp = require("cmp") + { + "hrsh7th/nvim-cmp", + event = "InsertEnter", + dependencies = { + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + "hrsh7th/cmp-cmdline", - require("luasnip.loaders.from_vscode").lazy_load() + "hrsh7th/cmp-nvim-lsp", - local has_words_before = function() - unpack = unpack or table.unpack - local line, col = unpack(vim.api.nvim_win_get_cursor(0)) - return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil - end + "L3MON4D3/LuaSnip", + "rafamadriz/friendly-snippets", + "saadparwaiz1/cmp_luasnip", + }, + config = function() + local luasnip = require("luasnip") + local cmp = require("cmp") - cmp.setup({ - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) - end, - }, - mapping = { - [""] = cmp.mapping(function(fallback) - if cmp.visible() then cmp.select_next_item() - elseif luasnip.expand_or_jumpable() then luasnip.expand_or_jump() - elseif has_words_before() then cmp.complete() - else fallback() end - end, { "i", "s" }), - [""] = cmp.mapping(function(fallback) - if cmp.visible() then cmp.select_prev_item() - elseif luasnip.jumpable(-1) then luasnip.jump(-1) - else fallback() end - end, { "i", "s" }), - [''] = cmp.mapping.complete(), - [''] = cmp.mapping.abort(), - [''] = cmp.mapping.confirm({ select = true }), - }, - sources = cmp.config.sources({ - { name = 'nvim_lsp' }, - { name = 'luasnip' }, - }, { - { name = 'buffer' }, - }) - }) - cmp.setup.filetype('gitcommit', { - sources = cmp.config.sources( - {{ name = 'git' }}, - {{ name = 'buffer' }} - ) - }) - cmp.setup.cmdline({ '/', '?' }, { - mapping = cmp.mapping.preset.cmdline(), - sources = {{ name = 'buffer' }} - }) - cmp.setup.cmdline(':', { - mapping = cmp.mapping.preset.cmdline(), - sources = cmp.config.sources( - {{ name = 'path' }}, - {{ name = 'cmdline' }} - ) - }) - end, - }, + require("luasnip.loaders.from_vscode").lazy_load() + + local has_words_before = function() + if vim.api.nvim_get_mode().mode == "c" then + return true + end + local line, col = table.unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_text(0, line - 1, 0, line - 1, col, {})[1]:match("%S") + end + + cmp.setup({ + -- Производительность + performance = { + debounce = 60, + throttle = 30, + fetching_timeout = 200, + async_budget = 1, + max_view_entries = 10, + }, + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + -- Сортировка источников по приоритету + sources = cmp.config.sources({ + { name = "nvim_lsp", priority = 1000, keyword_length = 2 }, + { name = "luasnip", priority = 900, keyword_length = 1 }, + { name = "buffer", priority = 500, keyword_length = 3 }, + { name = "path", priority = 250, keyword_length = 1 }, + }), + mapping = { + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.abort(), + [""] = cmp.mapping.confirm({ + select = true, + behavior = cmp.ConfirmBehavior.Replace, + }), + }, + -- Форматирование + formatting = { + fields = { "kind", "abbr", "menu" }, + format = function(entry, vim_item) + -- Иконки + local icons = { + Text = "󰉿", + Method = "󰆧", + Function = "󰊕", + Constructor = "", + Field = "󰜢", + Variable = "󰀫", + Class = "󰠱", + Interface = "", + Module = "", + Property = "󰜢", + Unit = "󰑭", + Value = "󰎠", + Enum = "", + Keyword = "󰌋", + Snippet = "", + Color = "󰏘", + File = "󰈙", + Reference = "󰈇", + Folder = "󰉋", + EnumMember = "", + Constant = "󰏿", + Struct = "󰙅", + Event = "", + Operator = "󰆕", + TypeParameter = "", + } + + vim_item.kind = string.format("%s %s", icons[vim_item.kind] or "?", vim_item.kind) + + local source_name = entry.source.name + local menu_map = { + nvim_lsp = "[LSP]", + luasnip = "[Snip]", + buffer = "[Buf]", + path = "[Path]", + nvim_lua = "[Lua]", + cmdline = "[Cmd]", + } + + vim_item.menu = menu_map[source_name] or ("[" .. source_name .. "]") + + -- Укорочение длинных имен + local label = vim_item.abbr + local truncated_label = vim.fn.strcharpart(label, 0, 50) + if truncated_label ~= label then + vim_item.abbr = truncated_label .. "…" + end + + return vim_item + end, + }, + + -- Экспериментальные фичи + experimental = { + ghost_text = { + hl_group = "Comment", -- призрачный текст + }, + }, + }) + cmp.setup.filetype("gitcommit", { + sources = cmp.config.sources({ { name = "git" } }, { { name = "buffer" } }), + }) + cmp.setup.cmdline({ "/", "?" }, { + mapping = cmp.mapping.preset.cmdline(), + sources = { { name = "buffer" } }, + }) + cmp.setup.cmdline(":", { + mapping = cmp.mapping.preset.cmdline(), + sources = cmp.config.sources({ { name = "path" } }, { { name = "cmdline" } }), + }) + end, + }, } diff --git a/.config/nvim/lua/plugins/buffer_manager.lua b/.config/nvim/lua/plugins/buffer_manager.lua deleted file mode 100644 index 0a6c033..0000000 --- a/.config/nvim/lua/plugins/buffer_manager.lua +++ /dev/null @@ -1,14 +0,0 @@ -return { - { - "j-morano/buffer_manager.nvim", - dependencies = { - "nvim-lua/plenary.nvim", - }, - opts = {}, - keys = { - { "b", function() require("buffer_manager.ui").toggle_quick_menu() end }, - { "", function() require("buffer_manager.ui").nav_prev() end }, - { "", function() require("buffer_manager.ui").nav_next() end } - } - } -} diff --git a/.config/nvim/lua/plugins/colors.lua b/.config/nvim/lua/plugins/colors.lua index 8508983..e2c51b2 100644 --- a/.config/nvim/lua/plugins/colors.lua +++ b/.config/nvim/lua/plugins/colors.lua @@ -1,6 +1,6 @@ return { - -- Подсветка цвета (не только в css) - { - "ap/vim-css-color" - } + -- Подсветка цвета (не только в css) + { + "ap/vim-css-color", + }, } diff --git a/.config/nvim/lua/plugins/colorscheme.lua b/.config/nvim/lua/plugins/colorscheme.lua index bfb4095..8f43991 100644 --- a/.config/nvim/lua/plugins/colorscheme.lua +++ b/.config/nvim/lua/plugins/colorscheme.lua @@ -1,61 +1,154 @@ return { - -- { - -- -- Загрука темы из pywal - -- "dylanaraps/wal.vim", - -- config = function() - -- vim.cmd([[colorscheme wal]]) - -- end, - -- } + -- { + -- -- Загрука темы из pywal + -- "dylanaraps/wal.vim", + -- config = function() + -- vim.cmd([[colorscheme wal]]) + -- end, + -- } - { - -- Отличная тема, но слишком яркий фон - "ellisonleao/gruvbox.nvim", - lazy = false, - priority = 1000, - config = function() - vim.o.background = "dark" - vim.cmd([[colorscheme gruvbox]]) - end - } + { + -- Отличная тема, но слишком яркий фон + "ellisonleao/gruvbox.nvim", + lazy = false, + priority = 1000, + config = function() + vim.o.background = "dark" + -- vim.cmd([[colorscheme gruvbox]]) + require("gruvbox").setup({ + -- Основные настройки контраста + contrast = "hard", -- "hard", "medium", "soft" - -- { - -- "RRethy/nvim-base16", - -- config = function() - -- vim.cmd([[colorscheme base16-gruvbox-dark-hard]]) - -- end - -- } + -- Тёмная версия + terminal_colors = true, - -- { - -- "nanotech/jellybeans.vim", - -- lazy = false, - -- priority = 1000, - -- config = function() - -- vim.cmd([[colorscheme jellybeans]]) - -- end - -- } + -- Настройки яркости + undercurl = true, + underline = true, + bold = true, + italic = { + strings = false, + comments = false, + operators = false, + folds = false, + }, - -- { - -- "junegunn/seoul256.vim", - -- config = function() - -- vim.g.seoul256_background = 233 - -- vim.cmd([[colorscheme seoul256]]) - -- end - -- } + -- Цветовые настройки + invert_selection = false, + invert_signs = false, + invert_tabline = false, + invert_intend_guides = false, - -- { - -- "Mofiqul/vscode.nvim", - -- config = function() - -- require("vscode").load("dark") - -- end - -- } + -- Более тёмные цвета + palette_overrides = { + dark0_hard = "#0d0e0f", -- самый тёмный фон + dark0 = "#1d2021", -- стандартный фон + dark1 = "#282828", + dark2 = "#32302f", + dark3 = "#3c3836", + dark4 = "#504945", - -- { - -- "sainnhe/everforest", - -- config = function() - -- vim.g.everforest_background = "hard" - -- vim.o.background = "dark" - -- -- require("everforest") - -- vim.cmd([[colorscheme everforest]]) - -- end - -- } + -- Более насыщенные цвета + bright_red = "#fb4934", + bright_green = "#b8bb26", + bright_yellow = "#fabd2f", + bright_blue = "#83a598", + bright_purple = "#d3869b", + bright_aqua = "#8ec07c", + bright_orange = "#fe8019", + }, + + -- Контрастные настройки + overrides = { + -- Пример: сделать выделение контрастнее + Visual = { bg = "#3c3836", fg = "#ebdbb2" }, + Search = { bg = "#fe8019", fg = "#282828" }, + IncSearch = { bg = "#fb4934", fg = "#282828" }, + + -- Контрастные границы + FloatBorder = { fg = "#ebdbb2" }, + + -- Более тёмный LineNr + LineNr = { fg = "#7c6f64" }, + CursorLineNr = { fg = "#d5c4a1", bold = true }, + }, + }) + + -- Дополнительные Vim команды для увеличения контраста + vim.cmd([[ + colorscheme gruvbox + + " Дополнительные настройки контраста + highlight Normal guibg=#0d0e0f + highlight NormalNC guibg=#0d0e0f + highlight SignColumn guibg=#0d0e0f + highlight EndOfBuffer guifg=#0d0e0f + + " Более контрастные комментарии + highlight Comment guifg=#928374 + + " Контрастные номера строк + highlight LineNr guifg=#7c6f64 guibg=#0d0e0f + highlight CursorLineNr guifg=#ebdbb2 guibg=#0d0e0f + + " Контрастный скроллбар + highlight Pmenu guibg=#1d2021 + highlight PmenuSel guibg=#504945 + + " Более тёмные границы + highlight WinSeparator guifg=#504945 + ]]) + end, + }, + + -- { + -- "morhetz/gruvbox", + -- priority = 1000, + -- init = function() + -- vim.g.gruvbox_contrast_dark = "hard" + -- vim.g.gruvbox_background = "hard" + -- vim.cmd("colorscheme gruvbox") + -- end, + -- }, + + -- { + -- "RRethy/nvim-base16", + -- config = function() + -- vim.cmd([[colorscheme base16-gruvbox-dark-hard]]) + -- end, + -- }, + + -- { + -- "nanotech/jellybeans.vim", + -- lazy = false, + -- priority = 1000, + -- config = function() + -- vim.cmd([[colorscheme jellybeans]]) + -- end, + -- }, + + -- { + -- "junegunn/seoul256.vim", + -- config = function() + -- vim.g.seoul256_background = 233 + -- vim.cmd([[colorscheme seoul256]]) + -- end + -- } + + -- { + -- "Mofiqul/vscode.nvim", + -- config = function() + -- require("vscode").load("dark") + -- end, + -- }, + + -- { + -- "sainnhe/everforest", + -- config = function() + -- vim.g.everforest_background = "hard" + -- vim.o.background = "dark" + -- -- require("everforest") + -- vim.cmd([[colorscheme everforest]]) + -- end, + -- }, } diff --git a/.config/nvim/lua/plugins/comment.lua b/.config/nvim/lua/plugins/comment.lua index df1ef11..ebaa81e 100644 --- a/.config/nvim/lua/plugins/comment.lua +++ b/.config/nvim/lua/plugins/comment.lua @@ -1,8 +1,17 @@ return { - -- Быстрое комментирование - -- gcc - закоментировать строку - -- (VISUAL) gc - закоментировать выделенные строки - { - "tpope/vim-commentary" - } + -- Быстрое комментирование + -- gcc - закоментировать строку + -- (VISUAL) gc - закоментировать выделенные строки + -- { + -- "tpope/vim-commentary", + -- }, + + { + "numToStr/Comment.nvim", + }, + -- gcc - toggle current line + -- gbc - toggle current block + -- [count]gcc | [count]gbc + -- gc[count]{motion} | gb[count]{motion} + -- VISUAL: gc | gb } diff --git a/.config/nvim/lua/plugins/git.lua b/.config/nvim/lua/plugins/git.lua index 55248e4..5188b77 100644 --- a/.config/nvim/lua/plugins/git.lua +++ b/.config/nvim/lua/plugins/git.lua @@ -1,42 +1,65 @@ return { - -- Поддержка git - { - "lewis6991/gitsigns.nvim", - config = function() - require('gitsigns').setup() + -- Поддержка git + { + "lewis6991/gitsigns.nvim", + opts = { + signs = { + add = { text = "+" }, + change = { text = "~" }, + delete = { text = "_" }, + }, + }, + config = function(_, opts) + require("gitsigns").setup(opts) - local function map(mode, l, r, opts) - opts = opts or { noremap = true, silent = true } - opts.buffer = bufnr - vim.keymap.set(mode, l, r, opts) - end + local function map(mode, l, r, opts) + opts = opts or { noremap = true, silent = true } + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) + end - local gs = package.loaded.gitsigns + local gs = package.loaded.gitsigns - map('n', ']c', function() - if vim.wo.diff then return ']c' end - vim.schedule(function() gs.next_hunk() end) - return '' - end, {expr=true}) - map('n', '[c', function() - if vim.wo.diff then return '[c' end - vim.schedule(function() gs.prev_hunk() end) - return '' - end, {expr=true}) + map("n", "]c", function() + if vim.wo.diff then + return "]c" + end + vim.schedule(function() + gs.next_hunk() + end) + return "" + end, { expr = true }) + map("n", "[c", function() + if vim.wo.diff then + return "[c" + end + vim.schedule(function() + gs.prev_hunk() + end) + return "" + end, { expr = true }) - map('n', 'gs', gs.stage_hunk) - map('n', 'gr', gs.reset_hunk) - map('v', 'gs', function() gs.stage_hunk {vim.fn.line('.'), vim.fn.line('v')} end) - map('v', 'gr', function() gs.reset_hunk {vim.fn.line('.'), vim.fn.line('v')} end) - map('n', 'gS', gs.stage_buffer) - map('n', 'gu', gs.undo_stage_hunk) - map('n', 'gR', gs.reset_buffer) - map('n', 'gp', gs.preview_hunk) - map('n', 'gb', function() gs.blame_line{full=true} end) - map('n', 'gtb', gs.toggle_current_line_blame) - map('n', 'gd', gs.diffthis) - map('n', 'gD', function() gs.diffthis('~') end) - map('n', 'gtd', gs.toggle_deleted) - end - } + -- map("n", "gs", gs.stage_hunk) + -- map("n", "gr", gs.reset_hunk) + -- map("v", "gs", function() + -- gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) + -- end) + -- map("v", "gr", function() + -- gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) + -- end) + -- map("n", "gS", gs.stage_buffer) + -- map("n", "gu", gs.undo_stage_hunk) + -- map("n", "gR", gs.reset_buffer) + -- map("n", "gp", gs.preview_hunk) + -- map("n", "gb", function() + -- gs.blame_line({ full = true }) + -- end) + -- map("n", "gtb", gs.toggle_current_line_blame) + -- map("n", "gd", gs.diffthis) + -- map("n", "gD", function() + -- gs.diffthis("~") + -- end) + -- map("n", "gtd", gs.toggle_deleted) + end, + }, } diff --git a/.config/nvim/lua/plugins/latex.lua b/.config/nvim/lua/plugins/latex.lua new file mode 100644 index 0000000..d5883e7 --- /dev/null +++ b/.config/nvim/lua/plugins/latex.lua @@ -0,0 +1,17 @@ +return { + "lervag/vimtex", + lazy = false, + init = function() + vim.g.vimtex_view_method = "zathura" + vim.g.vimtex_compiler_method = "latexmk" + vim.g.vimtex_quickfix_mode = 0 + vim.g.maplocalleader = "," + vim.api.nvim_create_autocmd("FileType", { + pattern = "tex", + callback = function() + vim.opt_local.syntax = "on" -- Использовать синтаксис VimTeX + end, + }) + end, + config = function() end, +} diff --git a/.config/nvim/lua/plugins/leap.lua b/.config/nvim/lua/plugins/leap.lua new file mode 100644 index 0000000..e8a36ba --- /dev/null +++ b/.config/nvim/lua/plugins/leap.lua @@ -0,0 +1,43 @@ +return { + -- Прыжок в любое место по символу + { "tpope/vim-repeat", event = "VeryLazy" }, + { + "ggandor/flit.nvim", + dependencies = { + "ggandor/leap.nvim", + }, + keys = function() + local ret = {} + for _, key in ipairs({ "f", "F", "t", "T" }) do + ret[#ret + 1] = { key, mode = { "n", "x", "o" } } + end + return ret + end, + opts = { labeled_modes = "nx" }, + }, + { + "ggandor/leap.nvim", + keys = { + { "j", mode = { "n", "x", "o" }, desc = "Leap forward to" }, + { "k", mode = { "n", "x", "o" }, desc = "Leap backward to" }, + { "J", mode = { "n", "x", "o" }, desc = "Leap from windows" }, + }, + config = function(_, opts) + local leap = require("leap") + for k, v in pairs(opts) do + leap.opts[k] = v + end + -- leap.add_default_mappings(true) + -- Удаляем конфликтующие маппинги, если они есть + -- vim.keymap.del({ "x", "o" }, "x") + -- vim.keymap.del({ "x", "o" }, "X") + + -- Прыжок вперёд + vim.keymap.set({ "n", "x", "o" }, "j", "(leap-forward)") + -- Прыжок назад + vim.keymap.set({ "n", "x", "o" }, "k", "(leap-backward)") + -- Прыжок между окнами + vim.keymap.set({ "n", "x", "o" }, "J", "(leap-from-window)") + end, + }, +} diff --git a/.config/nvim/lua/plugins/lsp.lua b/.config/nvim/lua/plugins/lsp.lua index b8cc5b5..4bf1dc6 100644 --- a/.config/nvim/lua/plugins/lsp.lua +++ b/.config/nvim/lua/plugins/lsp.lua @@ -1,125 +1,235 @@ return { - { - "williamboman/mason.nvim", - dependencies = { - "mason-org/mason-registry", - }, - opts = {} - }, - { - "neovim/nvim-lspconfig", - event = { "BufReadPre", "BufNewFile" }, - dependencies = { - "williamboman/mason-lspconfig.nvim", - "hrsh7th/cmp-nvim-lsp", - }, - keys = { - { "lh", vim.lsp.buf.hover }, - { "lr", vim.lsp.buf.rename }, - { "lf", function() - vim.lsp.buf.format({ - async = true, - bufnr = bufnr, - filter = function(client) - return client.name == "null-ls" - end - }) - end - }, - { "lgr", vim.lsp.buf.references }, - { "lgi", vim.lsp.buf.implementation }, - { "lsh", vim.lsp.buf.signature_help }, + { + "mason-org/mason.nvim", + opts = {}, + dependencies = { + "mason-org/mason-registry", + }, + }, + { + "mason-org/mason-lspconfig.nvim", + opts = { + automatic_installation = true, + automatic_enable = true, + ensure_installed = { + "bashls", + "lua_ls", - { "ldj", vim.diagnostic.goto_next }, - { "ldk", vim.diagnostic.goto_prev }, + "vtsls", -- ts_ls + vue support + "html", + "cssls", + "jsonls", - { "lgd", vim.lsp.buf.definition }, - { "lgtd", vim.lsp.buf.type_definition }, + "pyright", - { "law", vim.lsp.buf.add_workspace_folder }, - { "ldw", vim.lsp.buf.remove_workspace_folder }, - { "llw", function() - print(vim.inspect(vim.lsp.buf.list_workplace_folders())) - end }, + "yamlls", + }, + }, + dependencies = { + "mason-org/mason.nvim", + }, + }, + { + "neovim/nvim-lspconfig", + event = { "BufReadPre", "BufNewFile" }, + dependencies = { + "hrsh7th/nvim-cmp", + "j-hui/fidget.nvim", + "folke/trouble.nvim", + }, + keys = { + { "l", desc = "LSP Features" }, + { "lh", vim.lsp.buf.hover, desc = "Get info from LSP" }, + { "lr", vim.lsp.buf.rename, desc = "Rename" }, + { + "lf", + function() + vim.lsp.buf.format({ + async = true, + -- bufnr = bufnr, + filter = function(client) + return client.name == "null-ls" + end, + }) + end, + desc = "Format code", + }, + { "lgr", vim.lsp.buf.references, desc = "Open references" }, + { "lgi", vim.lsp.buf.implementation, desc = "Open implementation" }, + { "lsh", vim.lsp.buf.signature_help, desc = "Optn signature help" }, - { "lca", vim.lsp.buf.code_action }, - }, - config = function() - local lspconfig = require("lspconfig") - local mason_lspconfig = require("mason-lspconfig") + { "ldj", vim.diagnostic.goto_next, desc = "Go to next problem" }, + { + "ldk", + vim.diagnostic.goto_prev, + desc = "Go to previous problem", + }, - local LSP_SERVERS = { - "tsserver", - "html", - "cssls", - "tailwindcss", - "pyright" - } + { "lgd", vim.lsp.buf.definition, desc = "Open definition" }, + { "lgt", vim.lsp.buf.type_definition, desc = "Open type definition" }, - mason_lspconfig.setup({ - ensure_installed = LSP_SERVERS, - automatic_installation = true, - }) - - local capabilities = require("cmp_nvim_lsp").default_capabilities() - for _, server in pairs(LSP_SERVERS) do - lspconfig[server].setup( - { - capabilities = capabilities, - on_attach = on_attach, - } - ) - end - end, - }, - { - "nvimtools/none-ls.nvim", - event = { "BufReadPre", "BufNewFile" }, - dependencies = { - "nvim-lua/plenary.nvim", - "williamboman/mason-null-ls.nvim", - }, - config = function() - local null_ls = require("null-ls") - null_ls.setup({ - source = { - -- null_ls.builtins.diagnostics.eslint_d, - -- null_ls.builtins.code_actions.eslint_d, - null_ls.builtins.diagnostics.stylelint, - null_ls.builtins.formatting.prettier, - null_ls.builtins.code_actions.gitsigns, - null_ls.builtins.formatting.autopep8, - null_ls.builtins.diagnostics.pycodestyle, - null_ls.builtins.diagnostics.pydocstyle, - }, - on_attach = function(client, bufnr) - if client.supports_method("textDocument/formatting") then - vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) - vim.api.nvim_create_autocmd("BufWritePre", { - group = vim.api.nvim_create_augroup("LspFormatting", {}), - buffer = bufnr, - callback = function() - vim.lsp.buf.format({ - async = false, - bufnr = bufnr, - filter = function(client) - return client.name == "null-ls" - end - }) - end, - }) - end - end, - }) - require("mason-null-ls").setup({ - ensure_installed = nil, - automatic_installation = true, - handlers = {} - }) - end - }, - { - "j-hui/fidget.nvim", - opts = {} - }, + { + "law", + vim.lsp.buf.add_workspace_folder, + desc = "Add folder to workspace", + }, + { + "ldw", + vim.lsp.buf.remove_workspace_folder, + desc = "Remove folder from workspace", + }, + { + "llw", + function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, + desc = "List workspace folders", + }, + { + "lca", + vim.lsp.buf.code_action, + desc = "Open code actions", + }, + }, + config = function() + local capabilities = require("cmp_nvim_lsp").default_capabilities() + + local on_attach = function(client, bufnr) + vim.notify(client.name .. " attached", vim.log.levels.INFO) + end + + vim.lsp.config("*", { + capabilities = capabilities, + on_attach = on_attach, + }) + vim.lsp.config("vtsls", { + settings = { + vtsls = { + tsserver = { + globalPlugins = { + { + name = "@vue/typescript-plugin", + location = vim.fn.stdpath("data") + .. "/mason/packages/vue-language-server/node_modules/@vue/language-server", + languages = { "vue" }, + configNamespace = "typescript", + }, + }, + }, + }, + }, + filetypes = { "typescript", "javascript", "javascriptreact", "typescriptreact", "vue" }, + }) + vim.lsp.config("clangd", { + capabilities = capabilities, + on_attach = on_attach, + settings = { + clangd = { + fallbackFlags = { + "--std=c++23", + "-Wall", + "-Wextra", + "-Wpedantic", + }, + }, + }, + filetypes = { "c", "cpp", "objc", "objcpp", "tpp" }, + }) + end, + }, + { + "jay-babu/mason-null-ls.nvim", + event = { "BufReadPre", "BufNewFile" }, + dependencies = { + "williamboman/mason.nvim", + "nvimtools/none-ls.nvim", + }, + opts = { + ensure_installed = { + "prettierd", + "eslint_d", + + "stylua", + + "shfmt", + "shellcheck", + + "autopep8", + "black", + "isort", + }, + automatic_installation = true, + handlers = {}, + }, + }, + + { + "nvimtools/none-ls.nvim", + event = { "BufReadPre", "BufNewFile" }, + dependencies = { "williamboman/mason.nvim" }, + config = function() + local null_ls = require("null-ls") + + local augroup = vim.api.nvim_create_augroup("LspFormatting", {}) + + null_ls.setup({ + source = {}, + on_attach = function(client, bufnr) + local sources = null_ls.get_sources() + local source_names = {} + for _, source in ipairs(sources) do + if source.filetypes then + for ft, _ in pairs(source.filetypes) do + if ft == vim.bo[bufnr].filetype then + table.insert(source_names, source.name) + end + end + end + end + local message = "NullLS attached" + if #source_names > 0 then + message = message .. " with sources: " .. table.concat(source_names, ", ") + else + message = message .. " (no sources for this filetype)" + end + vim.notify(message, vim.log.levels.INFO) + + if client.supports_method("textDocument/formatting") then + vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) + vim.api.nvim_create_autocmd("BufWritePre", { + group = augroup, + buffer = bufnr, + callback = function() + vim.lsp.buf.format({ + async = false, + filter = function(format_client) + return format_client.name == "null-ls" + end, + }) + end, + }) + end + end, + }) + end, + }, + + { + "j-hui/fidget.nvim", + opts = { + notification = { + window = { + max_width = 60, + max_height = 5, + winblend = 0, + }, + filter = vim.log.levels.DEBUG, + }, + }, + config = function(_, opts) + local fidget = require("fidget") + fidget.setup(opts) + vim.notify = fidget.notify + end, + }, } diff --git a/.config/nvim/lua/plugins/markdown.lua b/.config/nvim/lua/plugins/markdown.lua new file mode 100644 index 0000000..b52097d --- /dev/null +++ b/.config/nvim/lua/plugins/markdown.lua @@ -0,0 +1,14 @@ +return { + -- { + -- "MeanderingProgrammer/render-markdown.nvim", + -- dependencies = { "nvim-treesitter/nvim-treesitter", "nvim-tree/nvim-web-devicons" }, + -- ---@module 'render-markdown' + -- ---@type render.md.UserConfig + -- opts = {}, + -- }, + { + "nvim-treesitter/nvim-treesitter", + dependencies = { "OXY2DEV/markview.nvim" }, + lazy = false, + }, +} diff --git a/.config/nvim/lua/plugins/neotree.lua b/.config/nvim/lua/plugins/neotree.lua index 3ccb2b2..66167bc 100644 --- a/.config/nvim/lua/plugins/neotree.lua +++ b/.config/nvim/lua/plugins/neotree.lua @@ -1,16 +1,15 @@ return { - { - "nvim-neo-tree/neo-tree.nvim", - branch = "v3.x", - dependencies = { - "nvim-lua/plenary.nvim", - "nvim-tree/nvim-web-devicons", - "MunifTanjim/nui.nvim", - }, - cmd = "Neotree", - keys = { - { "f", ":Neotree toggle" } - }, - } + { + "nvim-neo-tree/neo-tree.nvim", + branch = "v3.x", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-tree/nvim-web-devicons", + "MunifTanjim/nui.nvim", + }, + cmd = "Neotree", + keys = { + { "f", ":Neotree toggle", desc = "Toggle NeoTree" }, + }, + }, } - diff --git a/.config/nvim/lua/plugins/rus.lua b/.config/nvim/lua/plugins/rus.lua index 83aac40..7d81bec 100644 --- a/.config/nvim/lua/plugins/rus.lua +++ b/.config/nvim/lua/plugins/rus.lua @@ -1,6 +1,6 @@ return { - -- Поддержка русского языка в командном режиме - { - "powerman/vim-plugin-ruscmd" - } + -- Поддержка русского языка в командном режиме + -- { + -- "powerman/vim-plugin-ruscmd", + -- }, } diff --git a/.config/nvim/lua/plugins/status_line.lua b/.config/nvim/lua/plugins/status_line.lua index bd76c0c..af41dc9 100644 --- a/.config/nvim/lua/plugins/status_line.lua +++ b/.config/nvim/lua/plugins/status_line.lua @@ -1,14 +1,14 @@ return { - -- Строка состояния - -- (можно конфигурировать, пока не разобрался) - -- { - -- "itchyny/lightline.vim" - -- } + -- Строка состояния + -- (можно конфигурировать, пока не разобрался) + -- { + -- "itchyny/lightline.vim" + -- } - -- Лучше выглядит и кастомизируется - { - "nvim-lualine/lualine.nvim", - event = { "BufReadPre", "BufNewFile" }, - opts = {} - } + -- Лучше выглядит и кастомизируется + { + "nvim-lualine/lualine.nvim", + event = { "BufReadPre", "BufNewFile" }, + opts = {}, + }, } diff --git a/.config/nvim/lua/plugins/surround.lua b/.config/nvim/lua/plugins/surround.lua index 571889f..35d4a8f 100644 --- a/.config/nvim/lua/plugins/surround.lua +++ b/.config/nvim/lua/plugins/surround.lua @@ -1,20 +1,18 @@ return { - { - "kylechui/nvim-surround", - config = function() - require("nvim-surround").setup() - end + { + "kylechui/nvim-surround", + event = "VeryLazy", - -- insert = "s", - -- insert_line = "S", - -- normal = "ys", - -- normal_cur = "yss", - -- normal_line = "yS", - -- normal_cur_line = "ySS", - -- visual = "S", - -- visual_line = "gS", - -- delete = "ds", - -- change = "cs", - -- change_line = "cS", - }, + -- insert = "s", + -- insert_line = "S", + -- normal = "ys", + -- normal_cur = "yss", + -- normal_line = "yS", + -- normal_cur_line = "ySS", + -- visual = "S", + -- visual_line = "gS", + -- delete = "ds", + -- change = "cs", + -- change_line = "cS", + }, } diff --git a/.config/nvim/lua/plugins/telescope.lua b/.config/nvim/lua/plugins/telescope.lua index a661528..268299b 100644 --- a/.config/nvim/lua/plugins/telescope.lua +++ b/.config/nvim/lua/plugins/telescope.lua @@ -1,48 +1,56 @@ return { - { - -- Диалоговое окно поиска - "nvim-telescope/telescope.nvim", tag = "0.1.5", - -- event = { "BufReadPre", "BufNewFile" }, - dependencies = { - "nvim-lua/plenary.nvim", - "nvim-telescope/telescope-ui-select.nvim", - "nvim-telescope/telescope-file-browser.nvim", - "nvim-telescope/telescope-symbols.nvim" - }, - keys = { - { "tff", "Telescope find_files" }, - { "tg", "Telescope live_grep" }, - { "tb", "Telescope buffers" }, - { "th", "Telescope help_tags" }, + { + -- Диалоговое окно поиска + "nvim-telescope/telescope.nvim", + tag = "0.1.5", + -- event = { "BufReadPre", "BufNewFile" }, + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-telescope/telescope-ui-select.nvim", + "nvim-telescope/telescope-file-browser.nvim", + "nvim-telescope/telescope-symbols.nvim", + }, + keys = { + { "tf", "Telescope find_files" }, + { "tg", "Telescope live_grep" }, + { "tb", "Telescope buffers" }, + { "tfb", "Telescope file_browser" }, - { "tfb", "Telescope file_browser" }, - { "ts", "Telescope symbols" } - }, - config = function() - local telescope = require("telescope") - local actions = require("telescope.actions") - telescope.setup({ - extensions = { - ["ui-select"] = { - require("telescope.themes").get_dropdown({}) - }, - ["file_browser"] = { - theme = "ivy", - }, - ["symbols"] = {} - }, - pickers = { - buffers = { - mappings = { - i = { [""] = actions.delete_buffer + actions.move_to_top }, - n = { [""] = actions.delete_buffer + actions.move_to_top } - } - } - } - }) + { "gc", "Telescope git_bcommits" }, + { "gb", "Telescope git_branches" }, + { "gs", "Telescope git_branches" }, - telescope.load_extension("file_browser") - telescope.load_extension("ui-select") - end, - } + { "ts", "Telescope symbols" }, + { "th", "Telescope help_tags" }, + + -- { "tn", "Telescope fidget" }, + }, + config = function() + local telescope = require("telescope") + local actions = require("telescope.actions") + telescope.setup({ + extensions = { + ["ui-select"] = { + require("telescope.themes").get_dropdown({}), + }, + ["file_browser"] = { + theme = "ivy", + }, + ["symbols"] = {}, + }, + pickers = { + buffers = { + mappings = { + i = { [""] = actions.delete_buffer + actions.move_to_top }, + n = { [""] = actions.delete_buffer + actions.move_to_top }, + }, + }, + }, + }) + + telescope.load_extension("file_browser") + telescope.load_extension("ui-select") + telescope.load_extension("fidget") + end, + }, } diff --git a/.config/nvim/lua/plugins/terminal.lua b/.config/nvim/lua/plugins/terminal.lua index 6c24785..df69bc3 100644 --- a/.config/nvim/lua/plugins/terminal.lua +++ b/.config/nvim/lua/plugins/terminal.lua @@ -1,18 +1,17 @@ return { - { - "akinsho/toggleterm.nvim", - version = "*", - config = true, - keys = { - { "T", "ToggleTerm" }, - { "Tf", "ToggleTerm direction=float" }, - { "Th", "ToggleTerm direction=horizontal" }, - { "Tv", "ToggleTerm direction=vertical" }, - { "", [[]], mode = "t" }, - { "", "ToggleTerm", mode = "t" }, - { "", false, mode = "t" }, - { "c", [[:bd!]], mode = "t" } - } - } - + { + "akinsho/toggleterm.nvim", + version = "*", + config = true, + keys = { + { "T", "ToggleTerm" }, + { "Tf", "ToggleTerm direction=float" }, + { "Th", "ToggleTerm direction=horizontal" }, + { "Tv", "ToggleTerm direction=vertical" }, + { "", [[]], mode = "t" }, + { "", "ToggleTerm", mode = "t" }, + { "", false, mode = "t" }, + { "c", [[:bd!]], mode = "t" }, + }, + }, } diff --git a/.config/nvim/lua/plugins/todo_comments.lua b/.config/nvim/lua/plugins/todo_comments.lua index bbdf2ba..f7d8bfb 100644 --- a/.config/nvim/lua/plugins/todo_comments.lua +++ b/.config/nvim/lua/plugins/todo_comments.lua @@ -1,16 +1,16 @@ return { - { - "folke/todo-comments.nvim", - dependencies = { - "nvim-lua/plenary.nvim", - "folke/trouble.nvim" - }, - opts = {}, - config = function() - require("todo-comments").setup() - end, - keys = { - { "Ct", "TroubleToggle todo" } - } - } + { + "folke/todo-comments.nvim", + dependencies = { + "nvim-lua/plenary.nvim", + "folke/trouble.nvim", + }, + opts = {}, + config = function() + require("todo-comments").setup() + end, + keys = { + { "Ct", "TroubleToggle todo" }, + }, + }, } diff --git a/.config/nvim/lua/plugins/treesitter.lua b/.config/nvim/lua/plugins/treesitter.lua index 4c0c741..d33a9d1 100644 --- a/.config/nvim/lua/plugins/treesitter.lua +++ b/.config/nvim/lua/plugins/treesitter.lua @@ -1,31 +1,37 @@ return { - { - -- Подсветка синтаксиса - "nvim-treesitter/nvim-treesitter", - dependencies = { - "windwp/nvim-ts-autotag", - }, - build = ":TSUpdate", - config = function () - local configs = require("nvim-treesitter.configs") - configs.setup({ - ensure_installed = { - "html", "markdown", "latex", - "css", "scss", -- "less", not found - "javascript", -- "jsx", not found - "typescript", "tsx", - "python", "lua", - "vim", "vimdoc", "query", - "bash", - "c", - "json", "yaml", - }, - sync_install = false, - highlight = { enable = true }, - incremental_selection = { enable = true }, - indent = { enable = true }, - autotag = { enable = true } - }) - end - } + { + -- Подсветка синтаксиса + "nvim-treesitter/nvim-treesitter", + dependencies = { + "windwp/nvim-ts-autotag", + "m4xshen/autoclose.nvim", + }, + build = ":TSUpdate", + config = function() + local configs = require("nvim-treesitter.configs") + configs.setup({ + auto_install = true, + sync_install = false, + highlight = { enable = true }, + incremental_selection = { enable = true }, + indent = { enable = true }, + -- autotag = { enable = true } + disable = { "tex", "latex" }, + }) + require("nvim-ts-autotag").setup({ + -- Опциональные настройки + enable_close = true, + enable_rename = true, + enable_close_on_slash = false, + }) + require("autoclose").setup() + + vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, { + pattern = "*.tpp", + callback = function() + vim.bo.filetype = "cpp" + end, + }) + end, + }, } diff --git a/.config/nvim/lua/plugins/trouble.lua b/.config/nvim/lua/plugins/trouble.lua index 6072c0c..dfd3411 100644 --- a/.config/nvim/lua/plugins/trouble.lua +++ b/.config/nvim/lua/plugins/trouble.lua @@ -1,7 +1,7 @@ return { - { - "folke/trouble.nvim", - dependencies = { "nvim-tree/nvim-web-devicons" }, + { + "folke/trouble.nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, keys = { { "tt", "TroubleToggle" }, { "tc", "TroubleClose" }, @@ -15,6 +15,6 @@ return { { "tlr", "TroubleToggle lsp_references" }, { "tld", "TroubleToggle lsp_definitions" }, { "tltd", "TroubleToggle lsp_type_definitions" }, - } - } + }, + }, } diff --git a/.config/nvim/lua/plugins/which_key.lua b/.config/nvim/lua/plugins/which_key.lua new file mode 100644 index 0000000..04747e3 --- /dev/null +++ b/.config/nvim/lua/plugins/which_key.lua @@ -0,0 +1,9 @@ +return { + { + "folke/which-key.nvim", + event = "VeryLazy", + ignore = { + pattern = { "^.*[А-Яа-я].*$" }, + }, + }, +} diff --git a/.config/picom/picom.conf b/.config/picom/picom.conf index 0138e44..2a06190 100644 --- a/.config/picom/picom.conf +++ b/.config/picom/picom.conf @@ -1,6 +1,6 @@ backend = "glx"; -corner-radius = 10; +corner-radius = 5; fading = true; -fade-delta = 8; +fade-delta = 4; diff --git a/.config/polybar/config.ini b/.config/polybar/config.ini index 3b11c43..d4a76ec 100644 --- a/.config/polybar/config.ini +++ b/.config/polybar/config.ini @@ -26,8 +26,8 @@ module-margin = 1 font-0 = CodeNewRoman Nerd Font Mono:pixelsize=10;3 -modules-left = xworkspaces -modules-right = pulseaudio xkeyboard date numen systray +modules-left = date xworkspaces +modules-right = backlight pulseaudio xkeyboard numen systray cursor-click = pointer cursor-scroll = ns-resize @@ -66,6 +66,14 @@ interval = 1 use-ui-max = false click-right = /bin/bash -c "pactl set-sink-mute @DEFAULT_SINK@ toggle" +[module/backlight] +type = internal/backlight +; See cards: ls -1 /sys/class/backlight/ +card = intel_backlight +enable-scroll = true +scroll-interval = 5 +label = 󰌵 %percentage%% + [module/xkeyboard] type = internal/xkeyboard @@ -77,7 +85,7 @@ type = internal/date interval = 1 date = %H:%M -date-alt = %Y-%m-%d %H:%M:%S +date-alt = %d.%m.%y %H:%M:%S label = %date% label-foreground = ${colors.primary} @@ -86,7 +94,7 @@ label-foreground = ${colors.primary} type = internal/tray format-margin = 0pt -tray-spacing = 2pt +tray-spacing = 4pt [module/numen] type = custom/script @@ -94,10 +102,10 @@ exec = [[ $(pgrep numen) ]] && cat ~/.config/numen/current_mode || echo "" interval = 1 click-left = pkill numen -; [module/weather] -; type = custom/script -; exec = curl -s -H "Accept-Language: ru" wttr.in/Samara?format="%c+%t+%m" -; interval = 1 +[module/weather] +type = custom/script +exec = curl -s -h "accept-language: ru" wttr.in/samara?format="%c+%t+%m" +interval = 1 [settings] screenchange-reload = true diff --git a/.gitignore b/.gitignore index 5286272..3932b30 100644 --- a/.gitignore +++ b/.gitignore @@ -3,12 +3,16 @@ /Code/* /Downloads/* +/Games/* + !/Downloads/Telegram Desktop /Downloads/Telegram Desktop/* + /Sync/* /Data/* /Mount/* /Documents/* + !*.gitkeep !.config diff --git a/.scripts/active_network_name b/.scripts/active_network_name new file mode 100755 index 0000000..60cbbd5 --- /dev/null +++ b/.scripts/active_network_name @@ -0,0 +1,3 @@ +#!/bin/sh + +ip route show default 2>/dev/null | awk '/default/ {print $5; exit}' diff --git a/.xinitrc b/.xinitrc index 0cec1fa..92a9765 100644 --- a/.xinitrc +++ b/.xinitrc @@ -2,23 +2,29 @@ setxkbmap -option grp:ctrl_shift_toggle us,ru libinput-gestures & -# wal --theme base16-gruvbox-hard -wal --theme ~/.config/colorschemes/vscode.json +wal --theme base16-gruvbox-hard +# wal --theme ~/.config/colorschemes/vscode.json polybar -r & picom & pactl -- set-sink-volume 0 25% +brightnessctl s 50% >> /dev/null -numen ~/.config/numen/startup.phrasess.txt & +dunst -conf ~/.config/dunst/config.conf & + +# numen ~/.config/numen/startup.phrasess.txt & echo "[R]" > ~/.config/numen/current_mode conky -c ~/.config/conky/conky.conf & conky -c ~/.config/conky/weather.conf & conky -c ~/.config/conky/icon.conf & -[ ! -s ~/.config/mpd/pid ] && mpd ~/.config/mpd/mpd.conf && mpc stop +# [ ! -s ~/.config/mpd/pid ] && mpd ~/.config/mpd/mpd.conf && mpc stop + +syncthing & +syncthingtray-qt6 & exec sxhkd -c ~/.config/sxhkd/sxhkdrc & exec bspwm