diff --git a/.config/.config/nvim/init.lua b/.config/.config/nvim/init.lua new file mode 100644 index 0000000..0ae196d --- /dev/null +++ b/.config/.config/nvim/init.lua @@ -0,0 +1,22 @@ +require("config.lazy") + +vim.opt.expandtab = false +vim.opt.tabstop = 4 +vim.opt.shiftwidth = 4 +vim.opt.softtabstop = 4 +vim.opt.relativenumber = false +vim.opt.number = true + +local builtin = require("telescope.builtin") +vim.keymap.set("n", "ff", builtin.find_files, { desc = "Find files" }) +vim.keymap.set("n", "fg", builtin.live_grep, { desc = "Live grep files" }) +vim.keymap.set("n", "fb", builtin.buffers, { desc = "Find buffers" }) +vim.keymap.set("n", "fh", builtin.help_tags, { desc = "Help tags" }) + +vim.keymap.set("n", "F", function() + require("conform").format({ async = true }) +end, { desc = "Format file" }) + +vim.keymap.set("n", "n", ":BufferLineCycleNext", { desc = "Go to the next buffer" }) +vim.keymap.set("n", "b", ":BufferLineCyclePrev", { desc = "Go to the previous buffer" }) +vim.keymap.set("n", "q", ":bd", { desc = "Close current buffer" }) diff --git a/.config/.config/nvim/lazy-lock.json b/.config/.config/nvim/lazy-lock.json new file mode 100644 index 0000000..07ebbec --- /dev/null +++ b/.config/.config/nvim/lazy-lock.json @@ -0,0 +1,13 @@ +{ + "blink.cmp": { "branch": "main", "commit": "4f38ce99a472932d5776337f08f7a8180f1f571a" }, + "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, + "catppuccin": { "branch": "main", "commit": "1bf070129c0b6f77cc23f6a2212dcdc868308c52" }, + "conform.nvim": { "branch": "master", "commit": "374aaf384e2e841607b8e2fe63fa3ad01d111c91" }, + "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, + "nvim-lspconfig": { "branch": "master", "commit": "61e5109c8cf24807e4ae29813a3a82b31821dd45" }, + "nvim-treesitter": { "branch": "master", "commit": "066fd6505377e3fd4aa219e61ce94c2b8bdb0b79" }, + "nvim-web-devicons": { "branch": "master", "commit": "f1420728f59843eb2ef084406b3d0201a0a0932d" }, + "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, + "telescope.nvim": { "branch": "master", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, + "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" } +} diff --git a/.config/.config/nvim/lua/config/lazy.lua b/.config/.config/nvim/lua/config/lazy.lua new file mode 100644 index 0000000..1dc7176 --- /dev/null +++ b/.config/.config/nvim/lua/config/lazy.lua @@ -0,0 +1,35 @@ +-- Bootstrap lazy.nvim +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end +end +vim.opt.rtp:prepend(lazypath) + +-- Make sure to setup `mapleader` and `maplocalleader` before +-- loading lazy.nvim so that mappings are correct. +-- This is also a good place to setup other settings (vim.opt) +vim.g.mapleader = " " +vim.g.maplocalleader = "\\" + +-- Setup lazy.nvim +require("lazy").setup({ + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "catppuccin-mocha" } }, + -- automatically check for plugin updates + checker = { enabled = true }, +}) diff --git a/.config/.config/nvim/lua/plugins/blink.lua b/.config/.config/nvim/lua/plugins/blink.lua new file mode 100644 index 0000000..4eb828c --- /dev/null +++ b/.config/.config/nvim/lua/plugins/blink.lua @@ -0,0 +1,53 @@ +return { + "saghen/blink.cmp", + -- optional: provides snippets for the snippet source + --dependencies = { 'rafamadriz/friendly-snippets' }, + + -- use a release tag to download pre-built binaries + version = "1.*", + -- AND/OR build from source, requires nightly: https://rust-lang.github.io/rustup/concepts/channels.html#working-with-nightly-rust + -- build = 'cargo build --release', + -- If you use nix, you can build from source using latest nightly rust with: + -- build = 'nix run .#build-plugin', + + ---@module 'blink.cmp' + ---@type blink.cmp.Config + opts = { + -- 'default' (recommended) for mappings similar to built-in completions (C-y to accept) + -- 'super-tab' for mappings similar to vscode (tab to accept) + -- 'enter' for enter to accept + -- 'none' for no mappings + -- + -- All presets have the following mappings: + -- C-space: Open menu or open docs if already open + -- C-n/C-p or Up/Down: Select next/previous item + -- C-e: Hide menu + -- C-k: Toggle signature help (if signature.enabled = true) + -- + -- See :h blink-cmp-config-keymap for defining your own keymap + keymap = { preset = "super-tab" }, + + appearance = { + -- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font' + -- Adjusts spacing to ensure icons are aligned + nerd_font_variant = "mono", + }, + + -- (Default) Only show the documentation popup when manually triggered + completion = { documentation = { auto_show = false } }, + + -- Default list of enabled providers defined so that you can extend it + -- elsewhere in your config, without redefining it, due to `opts_extend` + sources = { + default = { "lsp", "path", "snippets", "buffer" }, + }, + + -- (Default) Rust fuzzy matcher for typo resistance and significantly better performance + -- You may use a lua implementation instead by using `implementation = "lua"` or fallback to the lua implementation, + -- when the Rust fuzzy matcher is not available, by using `implementation = "prefer_rust"` + -- + -- See the fuzzy documentation for more information + fuzzy = { implementation = "prefer_rust_with_warning" }, + }, + opts_extend = { "sources.default" }, +} diff --git a/.config/.config/nvim/lua/plugins/bufferline.lua b/.config/.config/nvim/lua/plugins/bufferline.lua new file mode 100644 index 0000000..9036375 --- /dev/null +++ b/.config/.config/nvim/lua/plugins/bufferline.lua @@ -0,0 +1,18 @@ +return { + "akinsho/bufferline.nvim", + version = "*", + dependencies = "nvim-tree/nvim-web-devicons", + opts = { + options = { + mode = "buffers", + diagnostics = "nvim_lsp", + always_show_bufferline = true, + separator_style = "slant", + + show_buffer_close_icons = false, + buffer_close_icon = "X", + + modified_icon = "U", + }, + }, +} diff --git a/.config/.config/nvim/lua/plugins/catppuccin.lua b/.config/.config/nvim/lua/plugins/catppuccin.lua new file mode 100644 index 0000000..56e933d --- /dev/null +++ b/.config/.config/nvim/lua/plugins/catppuccin.lua @@ -0,0 +1,8 @@ +return { + "catppuccin/nvim", + name = "catppuccin", + priority = 1000, + config = function() + vim.cmd([[colorscheme catppuccin-macchiato]]) + end, +} diff --git a/.config/.config/nvim/lua/plugins/conform.lua b/.config/.config/nvim/lua/plugins/conform.lua new file mode 100644 index 0000000..ab9e8c8 --- /dev/null +++ b/.config/.config/nvim/lua/plugins/conform.lua @@ -0,0 +1,10 @@ +return { + "stevearc/conform.nvim", + opts = { + formatters_by_ft = { + python = { "black" }, + c = { "clang-format" }, + lua = { "stylua" }, + }, + }, +} diff --git a/.config/.config/nvim/lua/plugins/nvim-lsp.lua b/.config/.config/nvim/lua/plugins/nvim-lsp.lua new file mode 100644 index 0000000..640a8f8 --- /dev/null +++ b/.config/.config/nvim/lua/plugins/nvim-lsp.lua @@ -0,0 +1,18 @@ +return { + "neovim/nvim-lspconfig", + dependencies = { "saghen/blink.cmp" }, + opts = { + servers = { + clangd = {}, + }, + }, + config = function(_, opts) + local lspconfig = require("lspconfig") + for server, config in pairs(opts.servers) do + -- passing config.capabilities to blink.cmp merges with the capabilities in your + -- `opts[server].capabilities, if you've defined it + config.capabilities = require("blink.cmp").get_lsp_capabilities(config.capabilities) + lspconfig[server].setup(config) + end + end, +} diff --git a/.config/.config/nvim/lua/plugins/nvim-treesitter.lua b/.config/.config/nvim/lua/plugins/nvim-treesitter.lua new file mode 100644 index 0000000..bae2172 --- /dev/null +++ b/.config/.config/nvim/lua/plugins/nvim-treesitter.lua @@ -0,0 +1,14 @@ +return { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate", + config = function() + local configs = require("nvim-treesitter.configs") + + configs.setup({ + ensure_installed = { "c", "lua", "vim", "vimdoc" }, + sync_install = false, + highlight = { enable = true }, + indent = { enable = true }, + }) + end, +} diff --git a/.config/.config/nvim/lua/plugins/telescope.lua b/.config/.config/nvim/lua/plugins/telescope.lua new file mode 100644 index 0000000..7d8b92f --- /dev/null +++ b/.config/.config/nvim/lua/plugins/telescope.lua @@ -0,0 +1,5 @@ +return { + "nvim-telescope/telescope.nvim", + tag = "0.1.8", + dependencies = { "nvim-lua/plenary.nvim" }, +} diff --git a/.config/.config/nvim/lua/plugins/which-key.lua b/.config/.config/nvim/lua/plugins/which-key.lua new file mode 100644 index 0000000..30d556e --- /dev/null +++ b/.config/.config/nvim/lua/plugins/which-key.lua @@ -0,0 +1,10 @@ +return { + "folke/which-key.nvim", + event = "VeryLazy", + opts = { + -- your configuration comes here + -- or leave it empty to use the default settings + -- refer to the configuration section below + }, + keys = {}, +} diff --git a/.config/.config/uv/uv-receipt.json b/.config/.config/uv/uv-receipt.json new file mode 100644 index 0000000..92b4327 --- /dev/null +++ b/.config/.config/uv/uv-receipt.json @@ -0,0 +1 @@ +{"binaries":["uv","uvx"],"binary_aliases":{},"cdylibs":[],"cstaticlibs":[],"install_layout":"flat","install_prefix":"/home/francesco/.local/bin","modify_path":true,"provider":{"source":"cargo-dist","version":"0.28.4"},"source":{"app_name":"uv","name":"uv","owner":"astral-sh","release_type":"github"},"version":"0.7.2"} diff --git a/README.md b/README.md index a48eee9..42f13c5 100644 --- a/README.md +++ b/README.md @@ -7,19 +7,12 @@ My personal dotfiles! ## Requirements - [ripgrep](https://github.com/BurntSushi/ripgrep) - clangd +- stylua + - Optional ## Installation Just copy the folders under `.config` in your `$HOME/.config/`. ## Keybindings -The leader key is the `Space`. - -`ff` - Find files -`fg` - Live grep -`fb` - Show buffers -`fh` - Help tags -`F` - Format file (only works with C files) -`q` - Quit buffer -`n` - Next buffer -`b` - Previous buffer +The leader key is the `Space`. Press it to show all the keybindings.