From 0383a26c919fec0c77cc01ec417380503b00c8bb Mon Sep 17 00:00:00 2001 From: adrien Date: Thu, 12 Feb 2026 20:54:47 +0100 Subject: [PATCH] Initial commit --- init.lua | 51 +++++++++++++++++++++++++++++++++++++++++++++++ lazy-lock.json | 10 ++++++++++ lua/keymaps.lua | 51 +++++++++++++++++++++++++++++++++++++++++++++++ lua/lsp.lua | 17 ++++++++++++++++ lua/telescope.lua | 19 ++++++++++++++++++ 5 files changed, 148 insertions(+) create mode 100644 init.lua create mode 100644 lazy-lock.json create mode 100644 lua/keymaps.lua create mode 100644 lua/lsp.lua create mode 100644 lua/telescope.lua diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..5a4ae7a --- /dev/null +++ b/init.lua @@ -0,0 +1,51 @@ +vim.g.mapleader = " " +vim.g.maplocalleader = " " + +-- 1. Lazy.nvim Bootstrapping +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) + +-- 2. Plugins +require("lazy").setup({ + { "catppuccin/nvim", name = "catppuccin", priority = 1000 }, + { "nvim-telescope/telescope.nvim", dependencies = { "nvim-lua/plenary.nvim" } }, + { "neovim/nvim-lspconfig" }, + { "folke/which-key.nvim", event = "VeryLazy" }, + { "nvim-tree/nvim-tree.lua", dependencies = { "nvim-tree/nvim-web-devicons" } }, +}) + +-- 3. Theme & Settings +vim.cmd.colorscheme "catppuccin-mocha" +vim.opt.number = true +vim.opt.relativenumber = true + +-- 4. Tree Setup (Small & Minimal) +require("nvim-tree").setup({ + view = { + width = 30, -- Small width + side = "left", + }, + filters = { + dotfiles = false, + custom = { ".git", "zig-cache", "zig-out" }, -- Hide build clutter + }, +}) + +-- 5. Modern LSP Setup (Neovim 0.11+) +vim.lsp.config('zls', { + cmd = { 'zls' }, + filetypes = { 'zig', 'zir' }, + root_markers = { 'build.zig', 'zls.json', '.git' }, +}) +vim.lsp.enable('zls') + +-- 6. Auto-format +vim.api.nvim_create_autocmd("BufWritePre", { + pattern = "*.zig", + callback = function() vim.lsp.buf.format() end, +}) + +require("keymaps") diff --git a/lazy-lock.json b/lazy-lock.json new file mode 100644 index 0000000..f6e56a7 --- /dev/null +++ b/lazy-lock.json @@ -0,0 +1,10 @@ +{ + "catppuccin": { "branch": "main", "commit": "beaf41a30c26fd7d6c386d383155cbd65dd554cd" }, + "lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" }, + "nvim-lspconfig": { "branch": "master", "commit": "f4e9d367d4e067d7a5fabc9fd3f1349b291eb718" }, + "nvim-tree.lua": { "branch": "master", "commit": "c0b18e4879f7b29a17a240ad49f733af7a7fb348" }, + "nvim-web-devicons": { "branch": "master", "commit": "746ffbb17975ebd6c40142362eee1b0249969c5c" }, + "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, + "telescope.nvim": { "branch": "master", "commit": "d90956833d7c27e73c621a61f20b29fdb7122709" }, + "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" } +} diff --git a/lua/keymaps.lua b/lua/keymaps.lua new file mode 100644 index 0000000..1e32099 --- /dev/null +++ b/lua/keymaps.lua @@ -0,0 +1,51 @@ +local wk = require("which-key") +local builtin = require('telescope.builtin') + +wk.add({ + -- Essentials + { "w", "w", desc = "Save File" }, + { "q", "q", desc = "Quit" }, + { "e", "NvimTreeToggle", desc = "Toggle Explorer (Tree)" }, + + -- Navigation / Buffers + { "[", "bprevious", desc = "Prev Buffer" }, + { "]", "bnext", desc = "Next Buffer" }, + { "b", builtin.buffers, desc = "List Buffers (Telescope)" }, + { "x", "bdelete", desc = "Close Buffer" }, + + -- File Group + { "f", group = "File" }, + { "fn", function() + local name = vim.fn.input("New file/dir: ") + if name == "" then return end + if name:sub(-1) == "/" then + vim.fn.mkdir(name, "p") + else + local dir = vim.fn.fnamemodify(name, ":h") + if vim.fn.isdirectory(dir) == 0 then vim.fn.mkdir(dir, "p") end + vim.cmd("edit " .. name) + end + end, desc = "New File/Dir" }, + + { "fd", function() + local current_file = vim.api.nvim_buf_get_name(0) + if current_file == "" then return end + if vim.fn.confirm("Delete " .. current_file .. "?", "&Yes\n&No", 2) == 1 then + os.remove(current_file) + vim.api.nvim_buf_delete(0, { force = true }) + end + end, desc = "Delete Current File" }, + + -- Search Group + { "s", group = "Search" }, + { "sf", builtin.find_files, desc = "Files" }, + { "sw", builtin.live_grep, desc = "Word (Global)" }, + + -- Symbol Searching + { "ss", builtin.lsp_dynamic_workspace_symbols, desc = "Workspace Symbols" }, + { "sl", builtin.lsp_document_symbols, desc = "Document Symbols (Current File)" }, + + -- LSP + { "gd", vim.lsp.buf.definition, desc = "Go to Definition" }, + { "K", vim.lsp.buf.hover, desc = "Hover Documentation" }, +}) diff --git a/lua/lsp.lua b/lua/lsp.lua new file mode 100644 index 0000000..be5bce9 --- /dev/null +++ b/lua/lsp.lua @@ -0,0 +1,17 @@ +local configs = require 'nvim_lsp/configs' +local util = require 'nvim_lsp/util' + +configs.zls = { + default_config = { + cmd = {"/usr/local/bin/zls"}; + filetypes = {"zig"}; + root_dir = util.root_pattern("build.zig", ".git"); + }; + docs = { + description = [[ ]]; + default_config = { + root_dir = [[root_pattern("build.zig", ".git")]]; + }; + }; +} +-- vim:et ts=2 sw=2 diff --git a/lua/telescope.lua b/lua/telescope.lua new file mode 100644 index 0000000..f3783c2 --- /dev/null +++ b/lua/telescope.lua @@ -0,0 +1,19 @@ +local builtin = require('telescope.builtin') + +-- 1. Search for words across all files (Project-wide grep) +vim.keymap.set('n', 'fg', builtin.live_grep, { desc = 'Find by Grep' }) + +-- 2. General File Search +vim.keymap.set('n', 'ff', builtin.find_files, { desc = 'Find Files' }) + +-- 3. Targeted Struct/Model Search +-- This opens Telescope filtered specifically to your models.zig file +vim.keymap.set('n', 'fm', function() + builtin.live_grep({ + search_dirs = { "src/models.zig" }, -- Adjust path if necessary + prompt_title = "Search Structs in Models", + }) +end, { desc = 'Search in models.zig' }) + +-- 4. LSP Symbol Search (Great for finding structs in the current file) +vim.keymap.set('n', 'fs', builtin.lsp_document_symbols, { desc = 'Find Symbols' })