diff options
Diffstat (limited to 'store/home')
25 files changed, 737 insertions, 0 deletions
| diff --git a/store/home/bash_profile b/store/home/bash_profile new file mode 100644 index 0000000..b65f405 --- /dev/null +++ b/store/home/bash_profile @@ -0,0 +1 @@ +export PATH="$HOME/.local/bin:$PATH" diff --git a/store/home/bashrc b/store/home/bashrc new file mode 100644 index 0000000..7d31f23 --- /dev/null +++ b/store/home/bashrc @@ -0,0 +1,8 @@ +set-proxy() { +  export http_proxy="http://127.0.0.1:7897" +  export https_proxy="http://127.0.0.1:7897" +} + +unset-proxy() { +  unset http_proxy https_proxy +} diff --git a/store/home/bin/neovide-listen b/store/home/bin/neovide-listen new file mode 100755 index 0000000..2591842 --- /dev/null +++ b/store/home/bin/neovide-listen @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +if [[ -z "$NVIM_SOCKET" ]]; then +  NVIM_SOCKET="/tmp/nvimsocket" +fi + +args=() +MY_NEOVIM_PATH="$HOME/codes/neovim/build/bin/nvim" +if [[ -e "$MY_NEOVIM_PATH" ]]; then +  echo "Found my neovim at $MY_NEOVIM_PATH" +  export VIMRUNTIME="$HOME/codes/neovim/runtime" +  args=("${args[@]}" "--neovim-bin" "$MY_NEOVIM_PATH") +fi + +listen_added=0 +for arg in "$@"; do +  args=("${args[@]}" "$arg") +  if [ "$arg" = '--' ]; then +    args=("${args[@]}" "--listen" "$NVIM_SOCKET") +    listen_added=1 +  fi +done + +if [[ $listen_added = 0 ]]; then +  args=("${args[@]}" "--" "--listen" "$NVIM_SOCKET") +fi + +NEOVIDE_BIN=neovide +MY_NEOVIDE_PATH="$HOME/codes/neovide/target/release/neovide" +if [ -e "$MY_NEOVIDE_PATH" ]; then +  echo "Found my neovide at $MY_NEOVIDE_PATH" +  NEOVIDE_BIN="$MY_NEOVIDE_PATH" +fi + +if which nvr > /dev/null; then +  echo "Detected nvr, set git editor env" +  export GIT_EDITOR='nvr -cc split --remote-wait' +fi + +args=("$NEOVIDE_BIN" "${args[@]}") +echo "Command is ${args[@]}" +exec "${args[@]}" + diff --git a/store/home/config/halloy/config.toml b/store/home/config/halloy/config.toml new file mode 100644 index 0000000..5d39f52 --- /dev/null +++ b/store/home/config/halloy/config.toml @@ -0,0 +1,20 @@ +tooltips = true + +[notifications] +direct_message = { sound = "peck", show_toast = true } +connected = { sound = "ring", show_toast = true } +disconnected = { sound = "ring", show_toast = true } + +[notifications.highlight] +sound = "dong" +exclude = [ "NickServ" ] + +[servers.liberachat] +nickname = "crupest" +server = "irc.libera.chat" +channels = [ "#hurd" ] +use_tls = true + +[servers.liberachat.sasl.plain] +username = "crupest" +password = ... diff --git a/store/home/config/nvim/.gitignore b/store/home/config/nvim/.gitignore new file mode 100644 index 0000000..722d5e7 --- /dev/null +++ b/store/home/config/nvim/.gitignore @@ -0,0 +1 @@ +.vscode diff --git a/store/home/config/nvim/.luarc.json b/store/home/config/nvim/.luarc.json new file mode 100644 index 0000000..f704d01 --- /dev/null +++ b/store/home/config/nvim/.luarc.json @@ -0,0 +1,4 @@ +{ +    "$schema": "https://raw.githubusercontent.com/LuaLS/vscode-lua/master/setting/schema.json", +    "runtime.version": "LuaJIT" +}
\ No newline at end of file diff --git a/store/home/config/nvim/cspell.yaml b/store/home/config/nvim/cspell.yaml new file mode 100644 index 0000000..2a716e2 --- /dev/null +++ b/store/home/config/nvim/cspell.yaml @@ -0,0 +1,13 @@ +dictionaryDefinitions: +  - name: nvim-words +    path: './nvim-words.txt' +    addWords: true + +dictionaries: +  - nvim-words + +words: +  - crupest + +ignorePaths: +  - lazy-lock.json diff --git a/store/home/config/nvim/init.lua b/store/home/config/nvim/init.lua new file mode 100644 index 0000000..9de0b2c --- /dev/null +++ b/store/home/config/nvim/init.lua @@ -0,0 +1,63 @@ +if vim.g.neovide then +    -- spellchecker: disable-next-line +    vim.opt.guifont = "FiraCode Nerd Font"; +    vim.g.neovide_window_blurred = true; +    vim.g.neovide_transparency = 0.9; +    vim.g.neovide_input_ime = false; +    vim.g.neovide_cursor_animate_in_insert_mode = false +    vim.g.neovide_cursor_vfx_mode = "pixiedust"; +    vim.g.neovide_input_macos_option_key_is_meta = 'only_left' +end + +local is_win = vim.fn.has("win32") ~= 0 + +-- spellchecker: disable +if is_win then +    vim.cmd([[ +    let &shell = executable('pwsh') ? 'pwsh' : 'powershell' +    let &shellcmdflag = '-NoLogo -ExecutionPolicy RemoteSigned -Command [Console]::InputEncoding=[Console]::OutputEncoding=[System.Text.UTF8Encoding]::new();$PSDefaultParameterValues[''Out-File:Encoding'']=''utf8'';Remove-Alias -Force -ErrorAction SilentlyContinue tee;' +    let &shellredir = '2>&1 | %%{ "$_" } | Out-File %s; exit $LastExitCode' +    let &shellpipe  = '2>&1 | %%{ "$_" } | tee %s; exit $LastExitCode' +    set shellquote= shellxquote= +    ]]) +    vim.opt.completeslash = 'slash' +end +-- spellchecker: enable + +-- spellchecker: disable +vim.opt.termguicolors = true; +vim.opt.fileformats = "unix,dos"; +vim.opt.softtabstop = 4; +vim.opt.shiftwidth = 4; +vim.opt.expandtab = true; +vim.opt.wrap = false; +vim.opt.number = true; +-- spellchecker: enable + +vim.g.load_doxygen_syntax = true; +vim.g.doxygen_javadoc_autobrief = false; + +-- Init lazy.nvim +local lazy_path = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not vim.uv.fs_stat(lazy_path) then +    vim.fn.system({ +        "git", +        "clone", +        "--filter=blob:none", +        "https://github.com/folke/lazy.nvim.git", +        "--branch=stable", -- latest stable release +        lazy_path, +    }) +end +vim.opt.rtp:prepend(lazy_path) + +-- Use lazy.nvim +require("lazy").setup("plugins") + +vim.cmd("colorscheme catppuccin-macchiato") + +require("crupest.nvim.lsp").setup() +require("crupest.nvim.plugins").setup() +require("crupest.nvim.keymap").setup() + +vim.cmd("autocmd FileType gitcommit,gitrebase,gitconfig set bufhidden=delete") diff --git a/store/home/config/nvim/lazy-lock.json b/store/home/config/nvim/lazy-lock.json new file mode 100644 index 0000000..3d08239 --- /dev/null +++ b/store/home/config/nvim/lazy-lock.json @@ -0,0 +1,20 @@ +{ +  "LuaSnip": { "branch": "master", "commit": "0f7bbce41ea152a94d12aea286f2ce98e63c0f58" }, +  "catppuccin": { "branch": "main", "commit": "faf15ab0201b564b6368ffa47b56feefc92ce3f4" }, +  "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, +  "cmp-cmdline": { "branch": "main", "commit": "d250c63aa13ead745e3a40f61fdd3470efde3923" }, +  "cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" }, +  "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, +  "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, +  "gitsigns.nvim": { "branch": "main", "commit": "5f808b5e4fef30bd8aca1b803b4e555da07fc412" }, +  "lazy.nvim": { "branch": "main", "commit": "56ead98e05bb37a4ec28930a54d836d033cf00f2" }, +  "lualine.nvim": { "branch": "master", "commit": "2a5bae925481f999263d6f5ed8361baef8df4f83" }, +  "nvim-autopairs": { "branch": "master", "commit": "b464658e9b880f463b9f7e6ccddd93fb0013f559" }, +  "nvim-cmp": { "branch": "main", "commit": "ed31156aa2cc14e3bc066c59357cc91536a2bc01" }, +  "nvim-lint": { "branch": "master", "commit": "6b46370d02cd001509a765591a3ffc481b538794" }, +  "nvim-lspconfig": { "branch": "master", "commit": "4ae9796c4e95ca84ec77946a9f9089b8f1a3eec9" }, +  "nvim-tree.lua": { "branch": "master", "commit": "ca7c4c33cac2ad66ec69d45e465379716ef0cc97" }, +  "nvim-web-devicons": { "branch": "master", "commit": "edbe0a65cfacbbfff6a4a1e98ddd60c28c560509" }, +  "plenary.nvim": { "branch": "master", "commit": "2d9b06177a975543726ce5c73fca176cedbffe9d" }, +  "telescope.nvim": { "branch": "master", "commit": "85922dde3767e01d42a08e750a773effbffaea3e" } +} diff --git a/store/home/config/nvim/lua/crupest/nvim/keymap.lua b/store/home/config/nvim/lua/crupest/nvim/keymap.lua new file mode 100644 index 0000000..624c04c --- /dev/null +++ b/store/home/config/nvim/lua/crupest/nvim/keymap.lua @@ -0,0 +1,9 @@ +local function setup() +    vim.keymap.set("n", "<c-tab>", "<cmd>bnext<cr>") +    vim.keymap.set("n", "<c-s-tab>", "<cmd>bNext<cr>") +    vim.keymap.set("n", "<esc>", require("crupest.utils.nvim").close_float) +end + +return { +    setup = setup +} diff --git a/store/home/config/nvim/lua/crupest/nvim/lsp/c.lua b/store/home/config/nvim/lua/crupest/nvim/lsp/c.lua new file mode 100644 index 0000000..bb1f6f7 --- /dev/null +++ b/store/home/config/nvim/lua/crupest/nvim/lsp/c.lua @@ -0,0 +1,25 @@ +local lspconfig = require("lspconfig") + +local brew_clangd_path = "/usr/local/opt/llvm/bin/clangd" + +local function setup() +    local clangd = "clangd" + +    if vim.uv.fs_stat(brew_clangd_path) ~= nil then +        clangd = brew_clangd_path +    end + +    -- setup lsp clangd +    lspconfig.clangd.setup { +        cmd = { clangd }, +        on_attach = function(_, bufnr) +            vim.keymap.set('n', '<space>s', "<cmd>ClangdSwitchSourceHeader<cr>", { +                buffer = bufnr +            }) +        end +    } +end + +return { +    setup = setup +} diff --git a/store/home/config/nvim/lua/crupest/nvim/lsp/init.lua b/store/home/config/nvim/lua/crupest/nvim/lsp/init.lua new file mode 100644 index 0000000..0fd29a3 --- /dev/null +++ b/store/home/config/nvim/lua/crupest/nvim/lsp/init.lua @@ -0,0 +1,50 @@ +local lspconfig = require("lspconfig") +local cmp_nvim_lsp = require("cmp_nvim_lsp") +local cmp_default_caps = cmp_nvim_lsp.default_capabilities() + +local lspconfig_default_caps = lspconfig.util.default_config.capabilities + +lspconfig.util.default_config = vim.tbl_extend( +    "force", +    lspconfig.util.default_config, +    { +        capabilities = vim.tbl_extend("force",  lspconfig_default_caps, cmp_default_caps), +        autostart = false, +    }) + +local function setup() +    lspconfig.cmake.setup {} +    lspconfig.bashls.setup {} +    require("crupest.nvim.lsp.c").setup() +    require("crupest.nvim.lsp.lua").setup() + +    -- Use LspAttach auto command to only map the following keys +    -- after the language server attaches to the current buffer +    vim.api.nvim_create_autocmd('LspAttach', { +        group = vim.api.nvim_create_augroup('UserLspConfig', {}), +        callback = function(ev) +            -- Buffer local mappings. +            -- See `:help vim.lsp.*` for documentation on any of the below functions +            local opts = { buffer = ev.buf } +            vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) +            vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) +            vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) +            vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts) +            vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, opts) +            vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, opts) +            vim.keymap.set('n', '<space>wl', function() +                print(vim.inspect(vim.lsp.buf.list_workspace_folders())) +            end, opts) +            vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, opts) +            vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, opts) +            vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts) +            vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) +            vim.keymap.set('n', '<space>f', vim.lsp.buf.format, opts) +        end, +    }) +end + + +return { +    setup = setup +} diff --git a/store/home/config/nvim/lua/crupest/nvim/lsp/lua.lua b/store/home/config/nvim/lua/crupest/nvim/lsp/lua.lua new file mode 100644 index 0000000..93aa503 --- /dev/null +++ b/store/home/config/nvim/lua/crupest/nvim/lsp/lua.lua @@ -0,0 +1,29 @@ +local lspconfig = require("lspconfig") + +local function setup() +    lspconfig.lua_ls.setup { +        settings = { +            Lua = { +                runtime = { +                    version = "LuaJIT" +                }, +                diagnostics = { +                    globals = { "vim" }, +                }, +                workspace = { +                    library = { +                        [vim.fn.expand "$VIMRUNTIME/lua"] = true, +                        [vim.fn.expand "$VIMRUNTIME/lua/vim/lsp"] = true, +                        [vim.fn.stdpath "data" .. "/lazy/lazy.nvim/lua/lazy"] = true, +                    }, +                    maxPreload = 100000, +                    preloadFileSize = 10000, +                }, +            }, +        }, +    } +end + +return { +    setup = setup +} diff --git a/store/home/config/nvim/lua/crupest/nvim/plugins/cmp.lua b/store/home/config/nvim/lua/crupest/nvim/plugins/cmp.lua new file mode 100644 index 0000000..9b1d876 --- /dev/null +++ b/store/home/config/nvim/lua/crupest/nvim/plugins/cmp.lua @@ -0,0 +1,31 @@ +local function setup() +    local cmp = require("cmp") +    local luasnip = require("luasnip") + +    cmp.setup { +        snippet = { +            expand = function(args) +                luasnip.lsp_expand(args.body) +            end, +        }, +        window = { +        }, +        mapping = cmp.mapping.preset.insert({ +            ['<C-b>'] = cmp.mapping.scroll_docs(-4), +            ['<C-f>'] = cmp.mapping.scroll_docs(4), +            ['<C-Space>'] = cmp.mapping.complete(), +            ['<C-e>'] = cmp.mapping.abort(), +            ['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. +        }), +        sources = cmp.config.sources({ +            { name = 'nvim_lsp' }, +            { name = 'luasnip' }, +        }, { +            { name = 'buffer' }, +        }) +    } +end + +return { +    setup = setup +} diff --git a/store/home/config/nvim/lua/crupest/nvim/plugins/gitsigns.lua b/store/home/config/nvim/lua/crupest/nvim/plugins/gitsigns.lua new file mode 100644 index 0000000..220c91a --- /dev/null +++ b/store/home/config/nvim/lua/crupest/nvim/plugins/gitsigns.lua @@ -0,0 +1,51 @@ +local function setup() +    local gitsigns = require('gitsigns') +    gitsigns.setup { +        on_attach = function(bufnr) +            local function map(mode, l, r, opts) +                opts = opts or {} +                opts.buffer = bufnr +                vim.keymap.set(mode, l, r, opts) +            end + +            -- Navigation +            map('n', ']c', function() +                if vim.wo.diff then +                    vim.cmd.normal({ ']c', bang = true }) +                else +                    gitsigns.nav_hunk('next') +                end +            end) + +            map('n', '[c', function() +                if vim.wo.diff then +                    vim.cmd.normal({ '[c', bang = true }) +                else +                    gitsigns.nav_hunk('prev') +                end +            end) + +            -- Actions +            map('n', '<leader>hs', gitsigns.stage_hunk) +            map('n', '<leader>hr', gitsigns.reset_hunk) +            map('v', '<leader>hs', function() gitsigns.stage_hunk { vim.fn.line('.'), vim.fn.line('v') } end) +            map('v', '<leader>hr', function() gitsigns.reset_hunk { vim.fn.line('.'), vim.fn.line('v') } end) +            map('n', '<leader>hS', gitsigns.stage_buffer) +            map('n', '<leader>hu', gitsigns.undo_stage_hunk) +            map('n', '<leader>hR', gitsigns.reset_buffer) +            map('n', '<leader>hp', gitsigns.preview_hunk) +            map('n', '<leader>hb', function() gitsigns.blame_line { full = true } end) +            map('n', '<leader>tb', gitsigns.toggle_current_line_blame) +            map('n', '<leader>hd', gitsigns.diffthis) +            map('n', '<leader>hD', function() gitsigns.diffthis('~') end) +            map('n', '<leader>td', gitsigns.toggle_deleted) + +            -- Text object +            map({ 'o', 'x' }, 'ih', ':<C-U>Gitsigns select_hunk<CR>') +        end +    } +end + +return { +    setup = setup +} diff --git a/store/home/config/nvim/lua/crupest/nvim/plugins/init.lua b/store/home/config/nvim/lua/crupest/nvim/plugins/init.lua new file mode 100644 index 0000000..24e0c2e --- /dev/null +++ b/store/home/config/nvim/lua/crupest/nvim/plugins/init.lua @@ -0,0 +1,12 @@ +local function setup() +    require("crupest.nvim.plugins.lint").setup() +    require("crupest.nvim.plugins.snip").setup() +    require("crupest.nvim.plugins.cmp").setup() +    require("crupest.nvim.plugins.telescope").setup() +    require("crupest.nvim.plugins.gitsigns").setup() +    require("crupest.nvim.plugins.others").setup() +end + +return { +    setup = setup +} diff --git a/store/home/config/nvim/lua/crupest/nvim/plugins/lint.lua b/store/home/config/nvim/lua/crupest/nvim/plugins/lint.lua new file mode 100644 index 0000000..5e348d6 --- /dev/null +++ b/store/home/config/nvim/lua/crupest/nvim/plugins/lint.lua @@ -0,0 +1,82 @@ +local lint = require("lint") + +local find = require('crupest.utils.find') +local is_win = vim.fn.has("win32") ~= 0 + +local cspell_config_patterns = { +    ".cspell.json", +    "cspell.json", +    ".cSpell.json", +    "cSpell.json", +    "cspell.config.js", +    "cspell.config.cjs", +    "cspell.config.json", +    "cspell.config.yaml", +    "cspell.config.yml", +    "cspell.yaml", +    "cspell.yml", +} + +--- @type FindExeForBufOpts[] +local my_linters = { +    { +        name = "cspell", +        places = { "node_modules", "global" }, +        config_files = cspell_config_patterns, +    }, +} + +local function run(opt) +    if not opt then +        opt = {} +    end + +    if not opt.buf then +        opt.buf = 0 +    end + +    local linters = {} + +    for _, l in ipairs(my_linters) do +        local linter = find.find_exe_for_buf(opt.buf, l) +        if linter then table.insert(linters, linter) end +    end + + +    local linter_names = {} + +    for _, linter in ipairs(linters) do +        table.insert(linter_names, linter.name) +        require('lint.linters.' .. linter.name).cmd = linter.exe_path +    end + +    lint.try_lint(linter_names) +end + +local function setup() +    if is_win then +        for _, l in ipairs(my_linters) do +            local name = l.name +            local linter = require('lint.linters.' .. name) +            if linter.cmd == 'cmd.exe' then +                linter.cmd = linter.args[2] +            end +            table.remove(linter.args, 1) +            table.remove(linter.args, 1) +        end +    end + +    vim.api.nvim_create_autocmd({ "BufWritePost" }, { +        callback = function(opt) +            run({ +                buf = opt.buffer +            }) +        end, +    }) + +    vim.keymap.set('n', '<leader>lr', run) +end + +return { +    setup = setup, +} diff --git a/store/home/config/nvim/lua/crupest/nvim/plugins/others.lua b/store/home/config/nvim/lua/crupest/nvim/plugins/others.lua new file mode 100644 index 0000000..2ef0d75 --- /dev/null +++ b/store/home/config/nvim/lua/crupest/nvim/plugins/others.lua @@ -0,0 +1,9 @@ +local function setup() +    require('lualine').setup {} +    require("nvim-tree").setup {} +    require("nvim-autopairs").setup {} +end + +return { +    setup = setup +} diff --git a/store/home/config/nvim/lua/crupest/nvim/plugins/snip.lua b/store/home/config/nvim/lua/crupest/nvim/plugins/snip.lua new file mode 100644 index 0000000..78ed2eb --- /dev/null +++ b/store/home/config/nvim/lua/crupest/nvim/plugins/snip.lua @@ -0,0 +1,75 @@ +--- spellchecker: disable + +local luasnip = require("luasnip") + +local ls = luasnip +-- some shorthands... +local s = ls.snippet +local sn = ls.snippet_node +local t = ls.text_node +local i = ls.insert_node +local f = ls.function_node +local c = ls.choice_node +local d = ls.dynamic_node +local r = ls.restore_node +local l = require("luasnip.extras").lambda +local rep = require("luasnip.extras").rep +local p = require("luasnip.extras").partial +local m = require("luasnip.extras").match +local n = require("luasnip.extras").nonempty +local dl = require("luasnip.extras").dynamic_lambda +local fmt = require("luasnip.extras.fmt").fmt +local fmta = require("luasnip.extras.fmt").fmta +local types = require("luasnip.util.types") +local conds = require("luasnip.extras.conditions") +local conds_expand = require("luasnip.extras.conditions.expand") + +local function copy(args) +    return args[1] +end + +local function setup() +    vim.keymap.set({ "i", "s" }, "<C-L>", function() luasnip.jump(1) end, { silent = true }) +    vim.keymap.set({ "i", "s" }, "<C-J>", function() luasnip.jump(-1) end, { silent = true }) + +    vim.keymap.set({ "i", "s" }, "<C-E>", function() +        if luasnip.choice_active() then +            luasnip.change_choice(1) +        end +    end, { silent = true }) + +    luasnip.add_snippets("cpp", { +        s("cs", { +            i(1, "classname"), +            t("::"), +            f(copy, 1), +            t("("), +            i(0), +            t(") { }") +        }), + +        s("ds", { +            i(1, "classname"), +            t("::~"), +            f(copy, 1), +            t("() { }") +        }), + +        s("csds", { +            i(1, "classname"), +            t("::"), +            f(copy, 1), +            t("("), +            i(0), +            t({ ") { }", "", "" }), +            f(copy, 1), +            t("::~"), +            f(copy, 1), +            t("() { }") +        }), +    }) +end + +return { +    setup = setup, +} diff --git a/store/home/config/nvim/lua/crupest/nvim/plugins/telescope.lua b/store/home/config/nvim/lua/crupest/nvim/plugins/telescope.lua new file mode 100644 index 0000000..d68b7f2 --- /dev/null +++ b/store/home/config/nvim/lua/crupest/nvim/plugins/telescope.lua @@ -0,0 +1,11 @@ +local function setup() +    local builtin = require('telescope.builtin') +    vim.keymap.set('n', '<leader>ff', builtin.find_files, {}) +    vim.keymap.set('n', '<leader>fg', builtin.live_grep, {}) +    vim.keymap.set('n', '<leader>fb', builtin.buffers, {}) +    vim.keymap.set('n', '<leader>fh', builtin.help_tags, {}) +end + +return { +    setup = setup +} diff --git a/store/home/config/nvim/lua/crupest/utils/find.lua b/store/home/config/nvim/lua/crupest/utils/find.lua new file mode 100644 index 0000000..dd1f663 --- /dev/null +++ b/store/home/config/nvim/lua/crupest/utils/find.lua @@ -0,0 +1,101 @@ +local is_win = vim.fn.has("win32") ~= 0 + +local M = {} + +local windows_exe_ext = { "exe", "bat", "cmd", "ps1" } + +--- Find real path (with ext) for an executable. +--- @param dir string +--- @param name string | string[] +--- @return string | nil +function M.find_exe_file(dir, name) +    if type(name) == "string" then +        name = { name } +    end +    for _, n in ipairs(name) do +        if vim.uv.fs_stat(vim.fs.joinpath(dir, n)) ~= nil then +            return n +        end +        if is_win then +            for _, ext in ipairs(windows_exe_ext) do +                if vim.uv.fs_stat(vim.fs.joinpath(dir, n .. "." .. ext)) ~= nil then +                    return n .. "." .. ext +                end +            end +        end +    end +    return nil +end + +--- Walk up until found an executable in node_modules. +--- @param path string +--- @param name string +--- @return string | nil exe_path Path to the executable. +function M.find_node_modules_exe(path, name) +    local bin_dirs = vim.fs.find("node_modules/.bin", { path = path, upward = true, type = "directory" }) +    if #bin_dirs == 0 then return nil end +    local exe = M.find_exe_file(bin_dirs[1], name) +    return exe and vim.fs.joinpath(bin_dirs[1], exe) +end + +--- Find executable in PATH. +--- @param name string +--- @return string | nil +function M.find_global_exe(name) +    local exe = vim.fn.exepath(name) +    if exe == "" then return nil end +    return exe +end + +--- @alias ExePlace "node_modules" | "global" +--- @param path string +--- @param name string +--- @param places ExePlace[] +--- @return string | nil, ExePlace? +function M.find_exe(path, name, places) +    for _, place in ipairs(places) do +        if place == "node_modules" then +            local r = M.find_node_modules_exe(path, name) +            if r then return r, "node_modules" end +        end +        if place == "global" then +            local r = M.find_global_exe(name) +            if r then return r, "global" end +        end +    end +    return nil, nil +end + +--- @alias FindExeForBufOpts { name: string, exe: string?, places: ExePlace[], config_files: string[]?, filetypes: string[]? } +--- @alias FindExeForBufResult { name: string, file: string, exe: string, exe_path: string, place: ExePlace, config_file: string?, filetype: string? } +--- @param buf number +--- @param opts FindExeForBufOpts +--- @return FindExeForBufResult | nil +function M.find_exe_for_buf(buf, opts) +    local r = {} --- @type FindExeForBufResult +    r.name = opts.name +    r.file = vim.api.nvim_buf_get_name(buf) +    r.exe = opts.exe or opts.name + +    if opts.filetypes then +        r.filetype = vim.api.nvim_get_option_value("filetype", { scope = "buffer", buf = buf }) +        if not vim.tbl_contains(opts.filetypes, r.filetype) then return nil end +    end + +    if opts.config_files then +        local config_file_list = vim.fs.find(opts.config_files, { path = r.file, upward = true }) +        if #config_file_list == 0 then return nil end +        r.config_file = config_file_list[1] +    end + +    local exe_path, place = M.find_exe(r.file, r.exe, opts.places) +    if exe_path == nil then return nil end +    r.exe_path = exe_path + +    --- @cast place ExePlace +    r.place = place + +    return r +end + +return M diff --git a/store/home/config/nvim/lua/crupest/utils/nvim.lua b/store/home/config/nvim/lua/crupest/utils/nvim.lua new file mode 100644 index 0000000..4477ecc --- /dev/null +++ b/store/home/config/nvim/lua/crupest/utils/nvim.lua @@ -0,0 +1,12 @@ +local M = {} + +function M.close_float() +    local wins = vim.api.nvim_list_wins() +    for _, v in ipairs(wins) do +        if vim.api.nvim_win_get_config(v).relative ~= '' then +            vim.api.nvim_win_close(v, false) +        end +    end +end + +return M diff --git a/store/home/config/nvim/lua/plugins.lua b/store/home/config/nvim/lua/plugins.lua new file mode 100644 index 0000000..b689559 --- /dev/null +++ b/store/home/config/nvim/lua/plugins.lua @@ -0,0 +1,30 @@ +-- spellchecker: disable +return { +    { "catppuccin/nvim", name = "catppuccin", priority = 1000 }, +    "neovim/nvim-lspconfig", +    "L3MON4D3/LuaSnip", +    "hrsh7th/nvim-cmp", +    "hrsh7th/cmp-nvim-lsp", +    "hrsh7th/cmp-buffer", +    "hrsh7th/cmp-path", +    "hrsh7th/cmp-cmdline", +    "saadparwaiz1/cmp_luasnip", +    { +        "nvim-tree/nvim-tree.lua", +        lazy = false, +        dependencies = { +            "nvim-tree/nvim-web-devicons", +        }, +    }, +    { +        "nvim-lualine/lualine.nvim", +        dependencies = { 'nvim-tree/nvim-web-devicons' } +    }, +    { +        "nvim-telescope/telescope.nvim", +        dependencies = { 'nvim-lua/plenary.nvim' } +    }, +    "windwp/nvim-autopairs", +    "mfussenegger/nvim-lint", +    "lewis6991/gitsigns.nvim", +} diff --git a/store/home/config/nvim/nvim-words.txt b/store/home/config/nvim/nvim-words.txt new file mode 100644 index 0000000..564904f --- /dev/null +++ b/store/home/config/nvim/nvim-words.txt @@ -0,0 +1,27 @@ +nvim +vimruntime +bnext +bufhidden +exepath +stdpath +augroup +autocmd +autobrief +autopairs +keymap +joinpath +bufnr + +neovide +pixiedust + +lspconfig +clangd +bashls + +catppuccin +macchiato +diffthis +gitsigns +lualine +luasnip diff --git a/store/home/gitconfig b/store/home/gitconfig new file mode 100644 index 0000000..b343ab3 --- /dev/null +++ b/store/home/gitconfig @@ -0,0 +1,10 @@ +[user] +	name = Yuqian Yang +	email = crupest@crupest.life +[core] +	autocrlf = false +	editor = vim +[credential] +	helper = /usr/lib/git-core/git-credential-libsecret +[alias] +	lg = log --decorate --oneline --graph | 
