Noah Vogt 3 päivää sitten
vanhempi
sitoutus
165cbfd153

+ 1 - 1
dot-config/exportrc

@@ -17,7 +17,7 @@ export GIT_SSH_KEY="$XDG_CONFIG_HOME/ssh/id_rsa"
 export WINEPREFIX="$XDG_DATA_HOME/wineprefix"
 
 # ~/ cleanup
-export VIMINIT="set nocp | source $XDG_CONFIG_HOME/nvim/init.vim"
+export VIMINIT="set nocp | source $XDG_CONFIG_HOME/nvim/init.lua"
 export LESSHISTFILE='-'
 export XAUTHORITY="$XDG_RUNTIME_DIR/xauth"
 export INPUTRC="$XDG_CONFIG_HOME/readline/inputrc"

+ 53 - 0
dot-config/nvim/init.lua

@@ -0,0 +1,53 @@
+-- Noah's Neovim Configuration (init.lua)
+
+-- 1. Essential Neovim 0.11+ fixes and environment setup
+-- Add paths to RTP
+local site = vim.fn.expand("~/.local/share/nvim/site/")
+local ts_runtime = vim.fn.expand("~/.cache/vim/plugged/nvim-treesitter/runtime/")
+
+vim.opt.runtimepath:prepend(site)
+vim.opt.runtimepath:prepend(ts_runtime)
+
+-- Disable built-in LSP mappings
+local builtins = { 'grn', 'gra', 'grr', 'gri', 'grt' }
+for _, k in ipairs(builtins) do
+  pcall(vim.keymap.del, 'n', k, { builtin = true })
+end
+
+-- Disable built-in commentary
+vim.g.loaded_commentary = 1
+
+-- 2. Load basic settings
+require('options')
+
+-- 3. Load plugins (Vimscript)
+vim.cmd('source $XDG_CONFIG_HOME/nvim/vim-plug/plugins.vim')
+
+-- 4. Load Theme (Important for Treesitter highlight groups)
+require('theme')
+
+-- 5. Load Plugin configurations (some are still in vimscript)
+local plug_confs = {
+  'fern', 'emmet', 'ctrlp', 'sneak', 'airline', 
+  'startify', 'wilder', 'vcoolor', 'better-whitespace', 'vimspector'
+}
+for _, conf in ipairs(plug_confs) do
+  vim.cmd('source $XDG_CONFIG_HOME/nvim/plug-conf/' .. conf .. '.vim')
+end
+
+-- 6. Load Lua-specific configurations
+require('treesitter')
+require('lsp')
+require('telescope-conf')
+require('refactoring-conf')
+require('gitsigns-conf')
+require('indent-blankline')
+require('whichkey')
+require('colorizer').setup()
+
+-- 7. Load keybinds and autocommands
+require('keymaps')
+require('autocmds')
+
+-- Enable intelligent indentation
+vim.cmd('filetype plugin indent on')

+ 0 - 58
dot-config/nvim/init.vim

@@ -1,58 +0,0 @@
-" noah's $VIMINIT
-
-" 1. Essential Neovim 0.11+ fixes and environment setup
-lua << EOF
--- Add paths to RTP
-local site = vim.fn.expand("~/.local/share/nvim/site/")
-local ts_runtime = vim.fn.expand("~/.cache/vim/plugged/nvim-treesitter/runtime/")
-
-vim.opt.runtimepath:prepend(site)
-vim.opt.runtimepath:prepend(ts_runtime)
-
--- Disable built-in LSP mappings
-local builtins = { 'grn', 'gra', 'grr', 'gri', 'grt' }
-for _, k in ipairs(builtins) do
-  pcall(vim.keymap.del, 'n', k, { builtin = true })
-end
-
--- Disable built-in commentary
-vim.g.loaded_commentary = 1
-EOF
-
-" 2. get basic (set)tings
-source $XDG_CONFIG_HOME/nvim/general/basic.vim
-" get plugins
-source $XDG_CONFIG_HOME/nvim/vim-plug/plugins.vim
-
-" 3. Load Theme FIRST (important for Treesitter highlight groups)
-source $XDG_CONFIG_HOME/nvim/theme/theme.vim
-
-" 4. get plugin configs
-source $XDG_CONFIG_HOME/nvim/plug-conf/fern.vim
-source $XDG_CONFIG_HOME/nvim/plug-conf/emmet.vim
-source $XDG_CONFIG_HOME/nvim/plug-conf/ctrlp.vim
-source $XDG_CONFIG_HOME/nvim/plug-conf/sneak.vim
-source $XDG_CONFIG_HOME/nvim/plug-conf/airline.vim
-source $XDG_CONFIG_HOME/nvim/plug-conf/startify.vim
-source $XDG_CONFIG_HOME/nvim/plug-conf/wilder.vim
-source $XDG_CONFIG_HOME/nvim/plug-conf/vcoolor.vim
-source $XDG_CONFIG_HOME/nvim/plug-conf/better-whitespace.vim
-source $XDG_CONFIG_HOME/nvim/plug-conf/vimspector.vim
-
-" 5. Lua configurations (LSP and Treesitter)
-lua require 'treesitter'
-lua require 'lsp'
-lua require 'telescope-conf'
-lua require 'refactoring-conf'
-lua require 'gitsigns-conf'
-lua require 'indent-blankline'
-lua require 'whichkey'
-lua require 'colorizer'.setup()
-
-" 6. get keybinds and autocommands
-source $XDG_CONFIG_HOME/nvim/keys/bindings.vim
-source $XDG_CONFIG_HOME/nvim/keys/tex-macros.vim
-source $XDG_CONFIG_HOME/nvim/general/auto.vim
-
-" enable intelligent indentation
-filetype plugin indent on

+ 181 - 0
dot-config/nvim/lua/autocmds.lua

@@ -0,0 +1,181 @@
+local augroup = vim.api.nvim_create_augroup
+local autocmd = vim.api.nvim_create_autocmd
+
+-- Fix latex commenting
+augroup("fixLatexComments", { clear = true })
+autocmd("FileType", {
+  group = "fixLatexComments",
+  pattern = { "plaintex", "tex", "latex" },
+  command = "syntax spell toplevel",
+})
+
+-- Wrap Java at 100 lines
+augroup("wrapJavaAt100LinesException", { clear = true })
+autocmd("FileType", {
+  group = "wrapJavaAt100LinesException",
+  pattern = "java",
+  callback = function()
+    vim.opt_local.colorcolumn = "100"
+  end,
+})
+
+-- Markdown Math and Liquid highlighting
+local function math_and_liquid()
+  vim.fn.matchadd("math", [[\$\$]])
+  vim.fn.matchadd("math_block", [[\$[^$].\{-}\$]])
+  vim.fn.matchadd("liquid", [[{%.*%}]])
+  vim.fn.matchadd("highlight_block", [[{% highlight .*%}]])
+  vim.fn.matchadd("highlight_block", [[```]])
+
+  vim.cmd([[
+    hi link math Statement
+    hi link liquid Statement
+    hi link highlight_block Function
+    hi link math_block Function
+  ]])
+end
+
+augroup("callMathFunction", { clear = true })
+autocmd({ "BufRead", "BufNewFile", "BufEnter" }, {
+  group = "callMathFunction",
+  pattern = { "*.md", "*.markdown" },
+  callback = math_and_liquid,
+})
+
+-- Disable automatic comment
+augroup("disableAutoComment", { clear = true })
+autocmd("FileType", {
+  group = "disableAutoComment",
+  pattern = "*",
+  callback = function()
+    vim.opt_local.formatoptions:remove({ "c", "r", "o" })
+  end,
+})
+
+-- Clear TeX build after exiting
+augroup("texclear", { clear = true })
+autocmd("VimLeavePre", {
+  group = "texclear",
+  pattern = { "*.tex", "*.md" },
+  callback = function()
+    vim.fn.system('texclear "' .. vim.fn.expand("%") .. '"')
+  end,
+})
+
+-- TI-Basic filetype
+augroup("tibasic", { clear = true })
+autocmd({ "BufNewFile", "BufRead" }, {
+  group = "tibasic",
+  pattern = { "*.tibasic", "*.tib" },
+  callback = function()
+    vim.bo.filetype = "python"
+  end,
+})
+
+-- Fern settings
+augroup("OnEnteringFernWindow", { clear = true })
+autocmd("FileType", {
+  group = "OnEnteringFernWindow",
+  pattern = "fern",
+  callback = function()
+    vim.api.nvim_buf_set_keymap(0, "n", "<CR>", "<Plug>(fern-action-open:select)", { silent = true })
+    -- Add more fern local mappings here if needed
+  end,
+})
+
+-- Emmet Enabler
+augroup("EmmetEnabler", { clear = true })
+autocmd("FileType", {
+  group = "EmmetEnabler",
+  pattern = { "html", "css" },
+  command = "EmmetInstall",
+})
+
+-- Glyph palette
+augroup("my-glyph-palette", { clear = true })
+autocmd("FileType", {
+  group = "my-glyph-palette",
+  pattern = { "fern", "startify" },
+  callback = function()
+    vim.fn["glyph_palette#apply"]()
+  end,
+})
+
+-- Relative line numbers
+augroup("numbertoggle", { clear = true })
+autocmd({ "BufEnter", "FocusGained", "InsertLeave" }, {
+  group = "numbertoggle",
+  pattern = "*",
+  callback = function()
+    if vim.opt.number:get() then
+      vim.opt.relativenumber = true
+    end
+  end,
+})
+autocmd({ "BufLeave", "FocusLost", "InsertEnter" }, {
+  group = "numbertoggle",
+  pattern = "*",
+  callback = function()
+    if vim.opt.number:get() then
+      vim.opt.relativenumber = false
+    end
+  end,
+})
+
+-- Vimspector log file fix
+augroup("fixVimSpectorLogFile", { clear = true })
+autocmd("User", {
+  group = "fixVimSpectorLogFile",
+  pattern = "VimspectorDebugEnded",
+  callback = function()
+    vim.fn.system("mv ~/.vimspector.log " .. vim.fn.expand("$XDG_CACHE_HOME") .. "/vim/")
+  end,
+})
+
+-- LSP Highlight
+augroup("LspHighlight", { clear = true })
+autocmd("CursorHold", {
+  group = "LspHighlight",
+  callback = function()
+    vim.lsp.buf.document_highlight()
+  end,
+})
+autocmd("CursorMoved", {
+  group = "LspHighlight",
+  callback = function()
+    vim.lsp.buf.clear_references()
+  end,
+})
+
+-- TeX Macros
+augroup("texMacros", { clear = true })
+local function map(mode, lhs, rhs, opts)
+  opts = opts or {}
+  opts.buffer = true
+  vim.keymap.set(mode, lhs, rhs, opts)
+end
+
+autocmd("FileType", {
+  group = "texMacros",
+  pattern = "tex",
+  callback = function()
+    map("i", ";beg", "\\begin{<Esc>yypkI\\begin{<Esc>A}<Esc>o<Esc>0i<Esc>jI\\end{<Esc>A}<CR><Esc>0i<CR><Esc>0i<++><Esc>3ki")
+    map("i", ";ig", "\\includegraphics[]{<++>}<Esc>6hi")
+    map("i", ";tw", "width=\\textwidth<Esc>9hi")
+    map("i", ";th", "height=\\textheight<Esc>10hi")
+    map("i", ";ni", "\\setlength{\\parindent}{0em}<Esc>")
+    map("i", ";ger", "\\usepackage[ngerman]{babel}<Esc>")
+    map("i", ";bf", "\\textbf{}<++><Esc>T{i")
+    map("i", ";it", "\\textit{}<++><Esc>T{i")
+    map("i", ";tt", "\\texttt{}<++><Esc>T{i")
+    map("i", ";fr", "\\begin{frame}<CR>\\frametitle{}<CR><++><CR>\\end{frame}<Esc>kklli")
+    map("i", ";sw", "\\switchcolumn[]<++><Esc>4hi")
+    map("i", ";up", "\\usepackage{}<Esc>i")
+    map("i", ";hy", "\\hyphenation{}<Esc>i")
+    map("i", ";s1", "\\section{}<Esc>i")
+    map("i", ";s2", "\\subsection{}<Esc>i")
+    map("i", ";s3", "\\subsubsection{}<Esc>i")
+    map("i", ";ap", "\\bibliographystyle{apacite}<CR>\\bibliography{}<Esc>i")
+  end,
+})
+

+ 116 - 0
dot-config/nvim/lua/keymaps.lua

@@ -0,0 +1,116 @@
+local keymap = vim.keymap.set
+local opts = { silent = true }
+
+vim.g.mapleader = " "
+
+-- Move text buffer in visual mode
+keymap("v", "K", ":m '<-2<CR>gv=gv")
+keymap("v", "J", ":m '>+1<CR>gv=gv")
+
+-- Write and quit easier
+keymap("n", "<Leader>w", ":w<CR>")
+keymap("n", "<Leader>z", ":wq<CR>")
+keymap("n", "<Leader>q", ":qa<CR>")
+keymap("n", "<Leader>e", ":q<CR>")
+
+-- Windows commands
+keymap("n", "<leader>pv", ":wincmd v | :Ex | :vertical resize 30<CR>")
+keymap("n", "<leader>ps", ":Rg<CR>")
+keymap("n", "<leader>rh", ":vertical resize +5<CR>")
+keymap("n", "<leader>rl", ":vertical resize -5<CR>")
+
+-- General compile buttons
+keymap("", "<F3>", ":w<CR>:!compile \"%\" && pkill -HUP mupdf<CR>")
+keymap("", "<F2>", ":w<CR>:!latexmk -pdf \"%\" && pkill -HUP mupdf<CR>")
+keymap("", "<F4>", ":noh<CR>")
+keymap("", "<F5>", ":set spell!<CR>")
+keymap("", "<F6>", ":w<CR>:!glosscompile \"%\" && pkill -HUP mupdf<CR>")
+
+-- Jumper
+keymap("v", "<Space><Space>", "<Esc>/<++><Enter>\"_c4l")
+keymap("", "<Space><Space>", "<Esc>/<++><Enter>\"_c4l")
+
+-- Copy from / to clipboard
+keymap("v", "<leader>y", "\"+y")
+keymap("v", "<leader>Y", "\"+Y")
+keymap("n", "<leader>p", "\"+p")
+keymap("n", "<leader>P", "\"+P")
+
+-- Diagnostic navigation
+keymap("n", "[g", vim.diagnostic.goto_prev, opts)
+keymap("n", "]g", vim.diagnostic.goto_next, opts)
+keymap("n", "<leader>d", vim.diagnostic.open_float, opts)
+
+-- LSP gotos
+keymap("n", "gd", vim.lsp.buf.definition, opts)
+keymap("n", "gy", vim.lsp.buf.type_definition, opts)
+keymap("n", "gi", vim.lsp.buf.implementation, opts)
+keymap("n", "gr", vim.lsp.buf.references, opts)
+keymap("n", "<leader>rn", vim.lsp.buf.rename, opts)
+
+-- LSP code actions
+keymap({ "n", "x" }, "<leader>a", vim.lsp.buf.code_action, opts)
+
+-- Switch to last opened file
+keymap("n", "<leader>b", "<c-^><cr>")
+
+-- Fern
+keymap("", "<Leader>f", ":Fern . -drawer -reveal=% -toggle -width=35<CR><C-w>=", opts)
+
+-- Tab navigation
+for i = 1, 9 do
+  keymap("", "<leader>" .. i, i .. "gt")
+end
+keymap("", "<leader>0", ":tablast<cr>")
+
+-- Auto center searches
+keymap("n", "n", "nzzzv")
+keymap("n", "N", "Nzzzv")
+
+-- Tagbar
+keymap("n", "<leader>g", ":TagbarToggle<CR>")
+
+-- Source vim config
+keymap("n", "<Leader>sv", ":source $XDG_CONFIG_HOME/nvim/init.vim<CR>")
+
+-- Telescope
+keymap("n", "<leader>l", ":Telescope live_grep<CR>")
+keymap("n", "<leader>t", ":Telescope git_files<CR>")
+keymap("n", "<leader>z", ":Telescope find_files<CR>")
+keymap("n", "<C-s>", ":Telescope grep_string<CR>")
+
+-- Markdown preview
+keymap("n", "<leader>mg", "<Plug>MarkdownPreview")
+keymap("n", "<leader>ms", "<Plug>MarkdownPreviewStop")
+keymap("n", "<leader>mt", "<Plug>MarkdownPreviewToggle")
+
+-- WhiteSpace
+keymap("n", "<leader>cw", ":StripWhitespace<CR>")
+keymap("n", "]w", ":NextTrailingWhitespace<CR>")
+keymap("n", "[w", ":PrevTrailingWhitespace<CR>")
+
+-- Smart window movement
+local utils = require("utils")
+keymap("n", "<C-h>", function() utils.win_move('h') end, opts)
+keymap("n", "<C-j>", function() utils.win_move('j') end, opts)
+keymap("n", "<C-k>", function() utils.win_move('k') end, opts)
+keymap("n", "<C-l>", function() utils.win_move('l') end, opts)
+
+-- Vimspector
+keymap("n", "<leader>da", ":call vimspector#Launch()<CR>")
+keymap("n", "<leader>dc", ":call GotoWindow(g:vimspector_session_windows.code)<CR>")
+keymap("n", "<leader>dv", ":call GotoWindow(g:vimspector_session_windows.variables)<CR>")
+keymap("n", "<leader>dw", ":call vimspector#ClearBreakpoints()<CR>")
+keymap("n", "<leader>ds", ":call GotoWindow(g:vimspector_session_windows.stack_trace)<CR>")
+keymap("n", "<leader>do", ":call GotoWindow(g:vimspector_session_windows.output)<CR>")
+keymap("n", "<leader>di", ":call AddToWatch()<CR>")
+keymap("n", "<leader>dx", ":call vimspector#Reset()<CR>")
+keymap("n", "<leader>dX", ":call vimspector#ClearBreakpoints()<CR>")
+keymap("n", "<S-k>", ":call vimspector#StepOut()<CR>")
+keymap("n", "<S-l>", ":call vimspector#StepInto()<CR>")
+keymap("n", "<S-j>", ":call vimspector#StepOver()<CR>")
+keymap("n", "<leader>d_", ":call vimspector#Restart()<CR>")
+keymap("n", "<leader>dn", ":call vimspector#Continue()<CR>")
+keymap("n", "<leader>drc", ":call vimspector#RunToCursor()<CR>")
+keymap("n", "<leader>dh", ":call vimspector#ToggleBreakpoint()<CR>")
+keymap("n", "<leader>de", ":call vimspector#ToggleConditionalBreakpoint()<CR>")

+ 62 - 0
dot-config/nvim/lua/options.lua

@@ -0,0 +1,62 @@
+local opt = vim.opt
+
+-- Set vim paths
+opt.undodir = vim.fn.expand("~/.cache/vim/undo")
+
+-- Make :find recursive
+opt.path:append("**")
+opt.wildignore:append("*/node_modules/*")
+opt.wildignore:append("*/__pycache__/*")
+
+-- Display all files for tab completion
+opt.wildmenu = true
+
+-- Comfort
+opt.number = true
+opt.tabstop = 4
+opt.softtabstop = 4
+opt.shiftwidth = 4
+
+-- Convert tabs to spaces
+opt.expandtab = true
+opt.smartindent = false
+opt.cindent = false
+opt.smartcase = true
+
+-- Disable swapfiles
+opt.swapfile = false
+opt.backup = false
+
+opt.spelllang = "de_ch,en"
+opt.showmode = false
+
+-- Set height below statusline
+opt.cmdheight = 1
+
+-- Faster update time for diagnostic messages
+opt.updatetime = 300
+
+-- Always show signcolumns
+opt.signcolumn = "yes"
+
+opt.colorcolumn = "80"
+
+-- Splits
+opt.splitbelow = true
+opt.splitright = true
+
+-- Conceal level
+opt.conceallevel = 0
+
+-- Lazy redraw for performance
+opt.lazyredraw = true
+
+-- Ignore case when searching
+opt.ignorecase = true
+
+-- Scrolling context
+opt.scrolloff = 3
+opt.sidescrolloff = 5
+
+-- Needed for colorizer plugin
+opt.termguicolors = true

+ 26 - 0
dot-config/nvim/lua/theme.lua

@@ -0,0 +1,26 @@
+require('onedark').setup {
+    style = 'cool', -- 'cool' or 'vibrant' are usually better for TS
+    transparent = false,
+    term_colors = true,
+    -- Remove overrides to use theme defaults
+    code_style = {
+        comments = 'italic',
+    },
+}
+require('onedark').load()
+
+-- Force colors for diagnostics and spell check underlines ONLY
+vim.api.nvim_set_hl(0, 'DiagnosticUnderlineError', { undercurl = true, sp = '#ff0000' })
+vim.api.nvim_set_hl(0, 'DiagnosticUnderlineWarn',  { undercurl = true, sp = '#ff8800' })
+vim.api.nvim_set_hl(0, 'SpellBad',   { undercurl = true, sp = '#ffff00' })
+vim.api.nvim_set_hl(0, 'SpellCap',   { undercurl = true, sp = '#ffff00' })
+vim.api.nvim_set_hl(0, 'SpellLocal', { undercurl = true, sp = '#ffff00' })
+vim.api.nvim_set_hl(0, 'SpellRare',  { undercurl = true, sp = '#ffff00' })
+
+-- GitSigns
+vim.api.nvim_set_hl(0, 'GitSignsAdd', { fg = '#98c379', bg = '#2e3f34' })
+vim.api.nvim_set_hl(0, 'GitSignsChange', { fg = '#e5c07b', bg = '#3e3d32' })
+vim.api.nvim_set_hl(0, 'GitSignsDelete', { fg = '#e06c75', bg = '#3f2e2e' })
+
+vim.g.airline_theme = 'onedark'
+vim.opt.background = 'dark'

+ 16 - 0
dot-config/nvim/lua/utils.lua

@@ -0,0 +1,16 @@
+local M = {}
+
+function M.win_move(key)
+  local curwin = vim.fn.winnr()
+  vim.cmd("wincmd " .. key)
+  if curwin == vim.fn.winnr() then
+    if key:match("[jk]") then
+      vim.cmd("wincmd v")
+    else
+      vim.cmd("wincmd s")
+    end
+    vim.cmd("wincmd " .. key)
+  end
+end
+
+return M