suicide
This commit is contained in:
parent
33fc8e201c
commit
74f880a769
6 changed files with 121 additions and 655 deletions
|
|
@ -1,4 +1,3 @@
|
||||||
;; package setup
|
|
||||||
(require 'package)
|
(require 'package)
|
||||||
(setq package-archives
|
(setq package-archives
|
||||||
'(("gnu" . "https://elpa.gnu.org/packages/")
|
'(("gnu" . "https://elpa.gnu.org/packages/")
|
||||||
|
|
@ -8,12 +7,9 @@
|
||||||
(package-refresh-contents))
|
(package-refresh-contents))
|
||||||
(require 'use-package)
|
(require 'use-package)
|
||||||
|
|
||||||
;; UI & Appearance
|
|
||||||
(menu-bar-mode -1)
|
(menu-bar-mode -1)
|
||||||
(tool-bar-mode -1)
|
(tool-bar-mode -1)
|
||||||
(scroll-bar-mode -1)
|
(scroll-bar-mode -1)
|
||||||
(set-frame-parameter (selected-frame) 'alpha '(90 . 90))
|
|
||||||
(add-to-list 'default-frame-alist '(alpha . (90 . 90)))
|
|
||||||
(global-display-line-numbers-mode 1)
|
(global-display-line-numbers-mode 1)
|
||||||
(global-hl-line-mode 1)
|
(global-hl-line-mode 1)
|
||||||
|
|
||||||
|
|
@ -21,31 +17,70 @@
|
||||||
(use-package all-the-icons :ensure t :if (display-graphic-p))
|
(use-package all-the-icons :ensure t :if (display-graphic-p))
|
||||||
(use-package elcord :ensure t :config (elcord-mode 1))
|
(use-package elcord :ensure t :config (elcord-mode 1))
|
||||||
|
|
||||||
(load-theme 'doom-badger t)
|
(load-theme 'doom-gruvbox t)
|
||||||
;; get rid of stupid buffer saves
|
|
||||||
|
(set-frame-parameter (selected-frame) 'alpha '(90 . 90))
|
||||||
|
(add-to-list 'default-frame-alist '(alpha . (90 . 90)))
|
||||||
|
|
||||||
|
(set-face-attribute 'default nil :family "Fira Code" :height 130)
|
||||||
|
|
||||||
|
(custom-set-faces
|
||||||
|
'(mode-line ((t (:inherit mode-line :background "#3c3836" :foreground "#ebdbb2"))))
|
||||||
|
'(mode-line-inactive ((t (:inherit mode-line-inactive :background "#282828" :foreground "#a89984")))))
|
||||||
|
|
||||||
|
|
||||||
(setq backup-directory-alist
|
(setq backup-directory-alist
|
||||||
`((".*" . "~/.local/tmp/emacsbackup/")))
|
`((".*" . "~/.local/tmp/emacsbackup/")))
|
||||||
(setq make-backup-files t)
|
(setq make-backup-files t)
|
||||||
(setq backup-by-copying t)
|
(setq backup-by-copying t)
|
||||||
|
|
||||||
;; Sidebar
|
(use-package evil
|
||||||
|
:ensure t
|
||||||
|
:init
|
||||||
|
(setq evil-want-keybinding nil)
|
||||||
|
(setq evil-want-C-u-scroll t)
|
||||||
|
:config
|
||||||
|
(evil-mode 1))
|
||||||
|
|
||||||
|
(use-package evil-collection
|
||||||
|
:after evil
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(evil-collection-init))
|
||||||
|
|
||||||
(use-package neotree :ensure t :bind ("<f9>" . neotree-toggle))
|
(use-package neotree :ensure t :bind ("<f9>" . neotree-toggle))
|
||||||
|
|
||||||
;; Completion/UI stuff
|
(use-package vertico
|
||||||
(use-package vertico :ensure t :config (vertico-mode 1))
|
:ensure t
|
||||||
|
:init
|
||||||
|
(evil-collection-vertico-setup)
|
||||||
|
:config
|
||||||
|
(vertico-mode 1))
|
||||||
|
|
||||||
(use-package marginalia :ensure t :hook (vertico-mode . marginalia-mode))
|
(use-package marginalia :ensure t :hook (vertico-mode . marginalia-mode))
|
||||||
(use-package consult :ensure t
|
|
||||||
:bind (("C-s" . consult-line) ("C-x b" . consult-buffer)))
|
(use-package consult
|
||||||
|
:ensure t
|
||||||
|
:bind (("C-s" . consult-line) ("C-x b" . consult-buffer))
|
||||||
|
:init
|
||||||
|
(evil-collection-consult-setup))
|
||||||
|
|
||||||
(use-package which-key :ensure t :config (which-key-mode 1))
|
(use-package which-key :ensure t :config (which-key-mode 1))
|
||||||
(use-package swiper :ensure t :bind ("C-s" . swiper))
|
|
||||||
|
|
||||||
;; Completion etc.
|
(use-package evil-surround
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(global-evil-surround-mode 1))
|
||||||
|
|
||||||
|
(use-package evil-commentary
|
||||||
|
:ensure t
|
||||||
|
:config
|
||||||
|
(evil-commentary-mode))
|
||||||
|
|
||||||
(use-package company :ensure t :hook (prog-mode . company-mode))
|
(use-package company :ensure t :hook (prog-mode . company-mode))
|
||||||
(use-package yasnippet :ensure t :hook (prog-mode . yas-minor-mode))
|
(use-package yasnippet :ensure t :hook (prog-mode . yas-minor-mode))
|
||||||
(use-package flycheck :ensure t :hook (prog-mode . flycheck-mode))
|
(use-package flycheck :ensure t :hook (prog-mode . flycheck-mode))
|
||||||
|
|
||||||
;; LSP
|
|
||||||
(use-package lsp-mode
|
(use-package lsp-mode
|
||||||
:ensure t
|
:ensure t
|
||||||
:commands lsp
|
:commands lsp
|
||||||
|
|
@ -57,10 +92,8 @@
|
||||||
:ensure t
|
:ensure t
|
||||||
:config (require 'lsp-java-boot))
|
:config (require 'lsp-java-boot))
|
||||||
|
|
||||||
;; Terminal
|
|
||||||
(global-set-key (kbd "C-c t") 'ansi-term)
|
(global-set-key (kbd "C-c t") 'ansi-term)
|
||||||
|
|
||||||
;; HTML/CSS/JS
|
|
||||||
(use-package web-mode
|
(use-package web-mode
|
||||||
:ensure t
|
:ensure t
|
||||||
:mode "\\.html?\\'"
|
:mode "\\.html?\\'"
|
||||||
|
|
@ -75,12 +108,10 @@
|
||||||
:config
|
:config
|
||||||
(setq emmet-expand-jsx-className? t))
|
(setq emmet-expand-jsx-className? t))
|
||||||
|
|
||||||
;; auto-pairs
|
|
||||||
(electric-pair-mode 1)
|
(electric-pair-mode 1)
|
||||||
(setq electric-pair-pairs '((?\" . ?\") (?\{ . ?\}) (?\( . ?\)) (?\[ . ?\]) (?\< . ?\>)))
|
(setq electric-pair-pairs '((?\" . ?\") (?\{ . ?\}) (?\( . ?\)) (?\[ . ?\]) (?\< . ?\>)))
|
||||||
(setq electric-pair-text-pairs electric-pair-pairs)
|
(setq electric-pair-text-pairs electric-pair-pairs)
|
||||||
|
|
||||||
;; LANGUAGESSSS
|
|
||||||
(use-package nix-mode :ensure t :mode "\\.nix\\'")
|
(use-package nix-mode :ensure t :mode "\\.nix\\'")
|
||||||
(use-package python :mode "\\.py\\'")
|
(use-package python :mode "\\.py\\'")
|
||||||
(use-package sh-script :mode "\\.sh\\'")
|
(use-package sh-script :mode "\\.sh\\'")
|
||||||
|
|
@ -95,22 +126,14 @@
|
||||||
(use-package typescript-mode :ensure t :mode "\\.ts\\'")
|
(use-package typescript-mode :ensure t :mode "\\.ts\\'")
|
||||||
(use-package toml-mode :ensure t :mode "\\.toml\\'")
|
(use-package toml-mode :ensure t :mode "\\.toml\\'")
|
||||||
(use-package yaml-mode :ensure t :mode "\\.ya?ml\\'")
|
(use-package yaml-mode :ensure t :mode "\\.ya?ml\\'")
|
||||||
|
|
||||||
(custom-set-variables
|
(custom-set-variables
|
||||||
;; custom-set-variables was added by Custom.
|
'(package-selected-packages
|
||||||
;; If you edit it by hand, you could mess it up, so be careful.
|
'(all-the-icons company consult doom-modeline
|
||||||
;; Your init file should contain only one such instance.
|
doom-themes elcord emmet-mode fennel-mode flycheck
|
||||||
;; If there is more than one, they won't work right.
|
go-mode lsp-java lsp-ui lua-mode
|
||||||
'(package-selected-packages
|
macrostep marginalia neotree nix-mode rainbow-mode
|
||||||
'(all-the-icons company consult darcula-theme doom-modeline
|
rust-mode swiper toml-mode
|
||||||
doom-themes elcord emmet-mode fennel-mode flycheck
|
typescript-mode vertico web-mode yaml-mode
|
||||||
gemini-mode go-mode lsp-java lsp-ui lua-mode
|
yasnippet zig-mode evil evil-collection evil-surround evil-commentary)))
|
||||||
macrostep marginalia neotree nix-mode rainbow-mode
|
(custom-set-faces)
|
||||||
rust-mode solarized-theme swiper toml-mode
|
|
||||||
typescript-mode vertico vterm web-mode yaml-mode
|
|
||||||
yasnippet zig-mode)))
|
|
||||||
(custom-set-faces
|
|
||||||
;; custom-set-faces was added by Custom.
|
|
||||||
;; If you edit it by hand, you could mess it up, so be careful.
|
|
||||||
;; Your init file should contain only one such instance.
|
|
||||||
;; If there is more than one, they won't work right.
|
|
||||||
)
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
all: lua/config.lua
|
|
||||||
|
|
||||||
lua/%.lua: fnl/%.fnl
|
|
||||||
fennel --compile $< > $@
|
|
||||||
|
|
@ -1,98 +0,0 @@
|
||||||
(fn setup-qol []
|
|
||||||
(set vim.o.swapfile false)
|
|
||||||
(set vim.o.backup false)
|
|
||||||
(set vim.o.undofile true)
|
|
||||||
|
|
||||||
(set vim.o.updatetime 200)
|
|
||||||
(set vim.o.timeoutlen 300)
|
|
||||||
|
|
||||||
(set vim.wo.number true)
|
|
||||||
(set vim.wo.relativenumber true)
|
|
||||||
|
|
||||||
(set vim.o.clipboard "unnamedplus")
|
|
||||||
|
|
||||||
(set vim.o.splitright true)
|
|
||||||
(set vim.o.splitbelow true)
|
|
||||||
|
|
||||||
(set vim.o.tabstop 4)
|
|
||||||
(set vim.o.shiftwidth 4)
|
|
||||||
(set vim.o.expandtab true)
|
|
||||||
(set vim.o.smartindent true)
|
|
||||||
|
|
||||||
(set vim.o.autochdir true)
|
|
||||||
|
|
||||||
(vim.api.nvim_create_autocmd
|
|
||||||
:BufReadPost
|
|
||||||
{:callback
|
|
||||||
#(let [line (vim.fn.line "'\"")
|
|
||||||
last (vim.fn.line "$")]
|
|
||||||
(when (and (> line 1) (< line last))
|
|
||||||
(vim.api.nvim_win_set_cursor 0 [line 0])))})
|
|
||||||
|
|
||||||
(vim.api.nvim_create_autocmd
|
|
||||||
:TextYankPost
|
|
||||||
{:pattern "*"
|
|
||||||
:callback #(vim.highlight.on_yank {:higroup "IncSearch" :timeout 200})})
|
|
||||||
|
|
||||||
(vim.api.nvim_create_autocmd
|
|
||||||
:BufWritePre
|
|
||||||
{:pattern "*"
|
|
||||||
:callback #(vim.cmd "silent! %s/\\s\\+$//e")})
|
|
||||||
|
|
||||||
(vim.api.nvim_create_autocmd
|
|
||||||
:FileType
|
|
||||||
{:pattern ["qf" "help" "man" "lspinfo"]
|
|
||||||
:callback #(vim.keymap.set "n" "q" ":close<CR>" {:buffer true :silent true})})
|
|
||||||
|
|
||||||
(set vim.o.showmode false)
|
|
||||||
|
|
||||||
(set vim.g.netrw_banner 0)
|
|
||||||
(set vim.g.netrw_liststyle 3)
|
|
||||||
(set vim.g.netrw_winsize 25)
|
|
||||||
|
|
||||||
(vim.cmd "colorscheme gruvbox")
|
|
||||||
)
|
|
||||||
|
|
||||||
(fn setup-lsp []
|
|
||||||
(local lspconfig (require "lspconfig"))
|
|
||||||
(local mason (require "mason"))
|
|
||||||
(local mason_lspconfig (require "mason-lspconfig"))
|
|
||||||
(local cmp_nvim_lsp (require "cmp_nvim_lsp"))
|
|
||||||
|
|
||||||
(mason.setup {})
|
|
||||||
(mason_lspconfig.setup
|
|
||||||
{:ensure_installed ["pyright" "lua_ls" "bashls" "tsserver"]
|
|
||||||
:automatic_installation true})
|
|
||||||
|
|
||||||
(local on_attach (fn [client bufnr]
|
|
||||||
(local opts {:noremap true :silent true :buffer bufnr})
|
|
||||||
|
|
||||||
(vim.keymap.set "n" "gd" (fn [] (vim.lsp.buf.definition)) opts)
|
|
||||||
(vim.keymap.set "n" "K" (fn [] (vim.lsp.buf.hover)) opts)
|
|
||||||
(vim.keymap.set "n" "gi" (fn [] (vim.lsp.buf.implementation)) opts)
|
|
||||||
(vim.keymap.set "n" "<leader>rn" (fn [] (vim.lsp.buf.rename)) opts)
|
|
||||||
(vim.keymap.set "n" "<leader>ca" (fn [] (vim.lsp.buf.code_action)) opts)
|
|
||||||
(vim.keymap.set "n" "gr" (fn [] (vim.lsp.buf.references)) opts)
|
|
||||||
(vim.keymap.set "n" "<leader>f" (fn [] (vim.lsp.buf.format {:async true})) opts)
|
|
||||||
))
|
|
||||||
|
|
||||||
(local capabilities (cmp_nvim_lsp.default_capabilities) ())
|
|
||||||
|
|
||||||
(for _, server in ipairs ["pyright" "bashls" "tsserver"]
|
|
||||||
(lspconfig[server].setup
|
|
||||||
{:on_attach on_attach
|
|
||||||
:capabilities capabilities}))
|
|
||||||
|
|
||||||
(lspconfig.lua_ls.setup
|
|
||||||
{:on_attach on_attach
|
|
||||||
:capabilities capabilities
|
|
||||||
:settings
|
|
||||||
{:Lua
|
|
||||||
{:diagnostics {:globals ["vim"]}
|
|
||||||
:workspace
|
|
||||||
{:library (vim.api.nvim_get_runtime_file "" true)
|
|
||||||
:checkThirdParty false}
|
|
||||||
:telemetry {:enable false}}}}))
|
|
||||||
|
|
||||||
(setup-qol)
|
|
||||||
(setup-lsp)
|
|
||||||
|
|
@ -1,231 +0,0 @@
|
||||||
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)
|
|
||||||
|
|
||||||
-- PREPEND YOUR LOCAL CONFIG PATH TO package.path for patched project_nvim.project
|
|
||||||
local config_path = vim.fn.stdpath("config") .. "/lua/?.lua;" .. vim.fn.stdpath("config") .. "/lua/?/init.lua;"
|
|
||||||
package.path = config_path .. package.path
|
|
||||||
|
|
||||||
require("lazy").setup({
|
|
||||||
|
|
||||||
-- colorscheme plugin
|
|
||||||
{
|
|
||||||
"morhetz/gruvbox",
|
|
||||||
lazy = false,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- startup screen
|
|
||||||
{
|
|
||||||
"goolord/alpha-nvim",
|
|
||||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
|
||||||
},
|
|
||||||
|
|
||||||
-- icons
|
|
||||||
"nvim-tree/nvim-web-devicons",
|
|
||||||
|
|
||||||
-- fuzzy finder
|
|
||||||
{
|
|
||||||
"nvim-telescope/telescope.nvim",
|
|
||||||
dependencies = { "nvim-lua/plenary.nvim" },
|
|
||||||
config = function()
|
|
||||||
require("telescope").setup {
|
|
||||||
defaults = {
|
|
||||||
layout_strategy = "horizontal",
|
|
||||||
sorting_strategy = "ascending",
|
|
||||||
prompt_prefix = "🔍 ",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- treesitter
|
|
||||||
{
|
|
||||||
"nvim-treesitter/nvim-treesitter",
|
|
||||||
build = ":TSUpdate",
|
|
||||||
config = function()
|
|
||||||
require("nvim-treesitter.configs").setup {
|
|
||||||
ensure_installed = { "lua", "python", "bash", "javascript", "json" },
|
|
||||||
highlight = { enable = true },
|
|
||||||
indent = { enable = true },
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- statusline
|
|
||||||
{
|
|
||||||
"nvim-lualine/lualine.nvim",
|
|
||||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
|
||||||
config = function()
|
|
||||||
require("lualine").setup {
|
|
||||||
options = {
|
|
||||||
theme = "gruvbox",
|
|
||||||
icons_enabled = false,
|
|
||||||
section_separators = "",
|
|
||||||
component_separators = "",
|
|
||||||
},
|
|
||||||
sections = {
|
|
||||||
lualine_a = { "mode" },
|
|
||||||
lualine_b = { "branch" },
|
|
||||||
lualine_c = { "filename" },
|
|
||||||
lualine_x = { "filetype" },
|
|
||||||
lualine_y = { "progress" },
|
|
||||||
lualine_z = { "location" },
|
|
||||||
},
|
|
||||||
inactive_sections = {
|
|
||||||
lualine_c = { "filename" },
|
|
||||||
lualine_x = { "location" },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- git signs
|
|
||||||
{
|
|
||||||
"lewis6991/gitsigns.nvim",
|
|
||||||
dependencies = { "nvim-lua/plenary.nvim" },
|
|
||||||
config = function()
|
|
||||||
require("gitsigns").setup()
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- commenting helper
|
|
||||||
{
|
|
||||||
"numToStr/Comment.nvim",
|
|
||||||
config = function()
|
|
||||||
require("Comment").setup()
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- autopairs
|
|
||||||
{
|
|
||||||
"windwp/nvim-autopairs",
|
|
||||||
config = function()
|
|
||||||
require("nvim-autopairs").setup{}
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- project management (patched)
|
|
||||||
{
|
|
||||||
"ahmedkhalf/project.nvim",
|
|
||||||
config = function()
|
|
||||||
-- Force reload patched project module before setup
|
|
||||||
package.loaded["project_nvim.project"] = nil
|
|
||||||
package.loaded["project_nvim"] = nil
|
|
||||||
|
|
||||||
require("project_nvim").setup {}
|
|
||||||
require("telescope").load_extension("projects")
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- bufferline
|
|
||||||
{
|
|
||||||
"akinsho/bufferline.nvim",
|
|
||||||
dependencies = "nvim-tree/nvim-web-devicons",
|
|
||||||
config = function()
|
|
||||||
require("bufferline").setup {
|
|
||||||
options = {
|
|
||||||
separator_style = "slant",
|
|
||||||
show_close_icon = false,
|
|
||||||
show_buffer_close_icons = false,
|
|
||||||
diagnostics = "nvim_lsp",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- which-key
|
|
||||||
{
|
|
||||||
"folke/which-key.nvim",
|
|
||||||
config = function()
|
|
||||||
require("which-key").setup {}
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- LSP and completion
|
|
||||||
{
|
|
||||||
"williamboman/mason.nvim",
|
|
||||||
config = true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"williamboman/mason-lspconfig.nvim",
|
|
||||||
dependencies = { "williamboman/mason.nvim", "neovim/nvim-lspconfig" },
|
|
||||||
config = true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"neovim/nvim-lspconfig",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"hrsh7th/nvim-cmp",
|
|
||||||
dependencies = {
|
|
||||||
"hrsh7th/cmp-nvim-lsp",
|
|
||||||
"hrsh7th/cmp-buffer",
|
|
||||||
"hrsh7th/cmp-path",
|
|
||||||
"hrsh7th/cmp-cmdline",
|
|
||||||
"L3MON4D3/LuaSnip",
|
|
||||||
"saadparwaiz1/cmp_luasnip",
|
|
||||||
},
|
|
||||||
config = function()
|
|
||||||
local cmp = require("cmp")
|
|
||||||
local luasnip = require("luasnip")
|
|
||||||
|
|
||||||
cmp.setup {
|
|
||||||
snippet = {
|
|
||||||
expand = function(args)
|
|
||||||
luasnip.lsp_expand(args.body)
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
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 }),
|
|
||||||
}),
|
|
||||||
sources = cmp.config.sources({
|
|
||||||
{ name = "nvim_lsp" },
|
|
||||||
{ name = "luasnip" },
|
|
||||||
}, {
|
|
||||||
{ name = "buffer" },
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Your existing vim options (you can keep or remove as you want)
|
|
||||||
vim.o.swapfile = false
|
|
||||||
vim.o.backup = false
|
|
||||||
vim.o.undofile = true
|
|
||||||
vim.o.updatetime = 200
|
|
||||||
vim.o.timeoutlen = 300
|
|
||||||
|
|
||||||
vim.wo.number = true
|
|
||||||
vim.wo.relativenumber = true
|
|
||||||
|
|
||||||
vim.o.clipboard = "unnamedplus"
|
|
||||||
|
|
||||||
vim.o.splitright = true
|
|
||||||
vim.o.splitbelow = true
|
|
||||||
|
|
||||||
vim.o.tabstop = 4
|
|
||||||
vim.o.shiftwidth = 4
|
|
||||||
vim.o.expandtab = true
|
|
||||||
vim.o.smartindent = true
|
|
||||||
|
|
||||||
vim.o.autochdir = true
|
|
||||||
vim.o.showmode = false
|
|
||||||
|
|
||||||
-- Load your fennel config file safely
|
|
||||||
pcall(require, "config")
|
|
||||||
|
|
||||||
vim.cmd("colorscheme gruvbox")
|
|
||||||
62
config/nvim/init.vim
Normal file
62
config/nvim/init.vim
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
set nocompatible
|
||||||
|
filetype plugin indent on
|
||||||
|
syntax enable
|
||||||
|
set encoding=utf-8
|
||||||
|
set number relativenumber
|
||||||
|
set numberwidth=4
|
||||||
|
set tabstop=4 shiftwidth=4 expandtab smartindent nowrap
|
||||||
|
set incsearch hlsearch ignorecase smartcase
|
||||||
|
set mouse=a
|
||||||
|
set scrolloff=5
|
||||||
|
set cursorline
|
||||||
|
set noshowmode
|
||||||
|
set shortmess+=I
|
||||||
|
|
||||||
|
hi Normal guibg=NONE ctermbg=NONE guifg=#d7c49a ctermfg=180
|
||||||
|
hi NormalNC guibg=NONE ctermbg=NONE guifg=#b2996e ctermfg=137
|
||||||
|
hi LineNr guibg=NONE ctermbg=NONE guifg=#a67c00 ctermfg=136
|
||||||
|
hi CursorLine guibg=#4b3621 ctermbg=59 guifg=NONE ctermfg=NONE
|
||||||
|
hi VertSplit guibg=NONE ctermbg=NONE guifg=#5a3e1b ctermfg=94
|
||||||
|
hi StatusLine guibg=#3e2f1c guifg=#f0d38c ctermbg=59 ctermfg=223
|
||||||
|
hi StatusLineMode guibg=#d35400 guifg=#3e2f1c ctermbg=166 ctermfg=59 gui=bold
|
||||||
|
hi Visual guibg=#7f5f2a guifg=NONE ctermbg=136 ctermfg=NONE
|
||||||
|
hi VisualNOS guibg=#7f5f2a guifg=NONE ctermbg=136 ctermfg=NONE
|
||||||
|
hi VisualSB guibg=#7f5f2a guifg=NONE ctermbg=136 ctermfg=NONE
|
||||||
|
hi Search guibg=NONE ctermbg=NONE guifg=#d35400 ctermfg=166
|
||||||
|
hi IncSearch guibg=NONE ctermbg=NONE guifg=#f39c12 ctermfg=214
|
||||||
|
hi Pmenu guibg=NONE ctermbg=NONE guifg=#d7c49a ctermfg=180
|
||||||
|
hi PmenuSel guibg=NONE ctermbg=NONE guifg=#3e2f1c ctermfg=59
|
||||||
|
hi WildMenu guibg=NONE ctermbg=NONE guifg=#f39c12 ctermfg=214
|
||||||
|
hi Folded guibg=NONE ctermbg=NONE guifg=#a67c00 ctermfg=136
|
||||||
|
hi SignColumn guibg=NONE ctermbg=NONE guifg=#a35400 ctermfg=172
|
||||||
|
|
||||||
|
function! ModeName()
|
||||||
|
let modeval = mode()
|
||||||
|
return modeval ==# 'n' ? 'NML ' :
|
||||||
|
\ modeval ==# 'i' ? 'INT ' :
|
||||||
|
\ modeval ==# 'v' ? 'VSL ' :
|
||||||
|
\ modeval ==# 'V' ? 'VLI ' :
|
||||||
|
\ modeval ==# "\<C-v>" ? 'VBL ' :
|
||||||
|
\ modeval ==# 'R' ? 'RPL ' :
|
||||||
|
\ modeval ==# 'c' ? 'CMD ' :
|
||||||
|
\ 'UNKNOWN'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
set statusline=
|
||||||
|
set statusline+=%#StatusLineMode#
|
||||||
|
set statusline+=\ %{ModeName()}
|
||||||
|
set statusline+=%#StatusLine#
|
||||||
|
set statusline+=\ %f\ %m\ %r\ %y
|
||||||
|
set statusline+=%=
|
||||||
|
set statusline+=\ Ln:%l/%L\ Col:%c\ \[%p%%]
|
||||||
|
|
||||||
|
let mapleader = "\<Space>"
|
||||||
|
nnoremap <leader>w \:w<CR>
|
||||||
|
nnoremap <leader>q \:q<CR>
|
||||||
|
nnoremap <silent> <leader>h \:nohlsearch<CR>
|
||||||
|
nnoremap <leader>n \:set relativenumber!<CR>
|
||||||
|
nnoremap <C-h> <C-w>h
|
||||||
|
nnoremap <C-j> <C-w>j
|
||||||
|
nnoremap <C-k> <C-w>k
|
||||||
|
nnoremap <C-l> <C-w>l
|
||||||
|
|
||||||
|
|
@ -1,286 +0,0 @@
|
||||||
local config = require("project_nvim.config")
|
|
||||||
local history = require("project_nvim.utils.history")
|
|
||||||
local glob = require("project_nvim.utils.globtopattern")
|
|
||||||
local path = require("project_nvim.utils.path")
|
|
||||||
local uv = vim.loop
|
|
||||||
local M = {}
|
|
||||||
|
|
||||||
-- Internal states
|
|
||||||
M.attached_lsp = false
|
|
||||||
M.last_project = nil
|
|
||||||
|
|
||||||
function M.find_lsp_root()
|
|
||||||
-- Get lsp client for current buffer
|
|
||||||
-- Returns nil or string
|
|
||||||
local buf_ft = vim.api.nvim_buf_get_option(0, "filetype")
|
|
||||||
local clients = vim.lsp.get_clients({bufnr = 0})
|
|
||||||
if next(clients) == nil then
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
for _, client in pairs(clients) do
|
|
||||||
local filetypes = client.config.filetypes
|
|
||||||
if filetypes and vim.tbl_contains(filetypes, buf_ft) then
|
|
||||||
if not vim.tbl_contains(config.options.ignore_lsp, client.name) then
|
|
||||||
return client.config.root_dir, client.name
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
function M.find_pattern_root()
|
|
||||||
local search_dir = vim.fn.expand("%:p:h", true)
|
|
||||||
if vim.fn.has("win32") > 0 then
|
|
||||||
search_dir = search_dir:gsub("\\", "/")
|
|
||||||
end
|
|
||||||
|
|
||||||
local last_dir_cache = ""
|
|
||||||
local curr_dir_cache = {}
|
|
||||||
|
|
||||||
local function get_parent(path)
|
|
||||||
path = path:match("^(.*)/")
|
|
||||||
if path == "" then
|
|
||||||
path = "/"
|
|
||||||
end
|
|
||||||
return path
|
|
||||||
end
|
|
||||||
|
|
||||||
local function get_files(file_dir)
|
|
||||||
last_dir_cache = file_dir
|
|
||||||
curr_dir_cache = {}
|
|
||||||
|
|
||||||
local dir = uv.fs_scandir(file_dir)
|
|
||||||
if dir == nil then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
while true do
|
|
||||||
local file = uv.fs_scandir_next(dir)
|
|
||||||
if file == nil then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
table.insert(curr_dir_cache, file)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function is(dir, identifier)
|
|
||||||
dir = dir:match(".*/(.*)")
|
|
||||||
return dir == identifier
|
|
||||||
end
|
|
||||||
|
|
||||||
local function sub(dir, identifier)
|
|
||||||
local path = get_parent(dir)
|
|
||||||
while true do
|
|
||||||
if is(path, identifier) then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
local current = path
|
|
||||||
path = get_parent(path)
|
|
||||||
if current == path then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function child(dir, identifier)
|
|
||||||
local path = get_parent(dir)
|
|
||||||
return is(path, identifier)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function has(dir, identifier)
|
|
||||||
if last_dir_cache ~= dir then
|
|
||||||
get_files(dir)
|
|
||||||
end
|
|
||||||
local pattern = glob.globtopattern(identifier)
|
|
||||||
for _, file in ipairs(curr_dir_cache) do
|
|
||||||
if file:match(pattern) ~= nil then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
local function match(dir, pattern)
|
|
||||||
local first_char = pattern:sub(1, 1)
|
|
||||||
if first_char == "=" then
|
|
||||||
return is(dir, pattern:sub(2))
|
|
||||||
elseif first_char == "^" then
|
|
||||||
return sub(dir, pattern:sub(2))
|
|
||||||
elseif first_char == ">" then
|
|
||||||
return child(dir, pattern:sub(2))
|
|
||||||
else
|
|
||||||
return has(dir, pattern)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- breadth-first search
|
|
||||||
while true do
|
|
||||||
for _, pattern in ipairs(config.options.patterns) do
|
|
||||||
local exclude = false
|
|
||||||
if pattern:sub(1, 1) == "!" then
|
|
||||||
exclude = true
|
|
||||||
pattern = pattern:sub(2)
|
|
||||||
end
|
|
||||||
if match(search_dir, pattern) then
|
|
||||||
if exclude then
|
|
||||||
break
|
|
||||||
else
|
|
||||||
return search_dir, "pattern " .. pattern
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local parent = get_parent(search_dir)
|
|
||||||
if parent == search_dir or parent == nil then
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
search_dir = parent
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
---@diagnostic disable-next-line: unused-local
|
|
||||||
local on_attach_lsp = function(client, bufnr)
|
|
||||||
M.on_buf_enter() -- Recalculate root dir after lsp attaches
|
|
||||||
end
|
|
||||||
|
|
||||||
function M.attach_to_lsp()
|
|
||||||
if M.attached_lsp then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local _start_client = vim.lsp.start_client
|
|
||||||
vim.lsp.start_client = function(lsp_config)
|
|
||||||
if lsp_config.on_attach == nil then
|
|
||||||
lsp_config.on_attach = on_attach_lsp
|
|
||||||
else
|
|
||||||
local _on_attach = lsp_config.on_attach
|
|
||||||
lsp_config.on_attach = function(client, bufnr)
|
|
||||||
on_attach_lsp(client, bufnr)
|
|
||||||
_on_attach(client, bufnr)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return _start_client(lsp_config)
|
|
||||||
end
|
|
||||||
|
|
||||||
M.attached_lsp = true
|
|
||||||
end
|
|
||||||
|
|
||||||
function M.set_pwd(dir, method)
|
|
||||||
if dir ~= nil then
|
|
||||||
M.last_project = dir
|
|
||||||
table.insert(history.session_projects, dir)
|
|
||||||
|
|
||||||
if vim.fn.getcwd() ~= dir then
|
|
||||||
local scope_chdir = config.options.scope_chdir
|
|
||||||
if scope_chdir == 'global' then
|
|
||||||
vim.api.nvim_set_current_dir(dir)
|
|
||||||
elseif scope_chdir == 'tab' then
|
|
||||||
vim.cmd('tcd ' .. dir)
|
|
||||||
elseif scope_chdir == 'win' then
|
|
||||||
vim.cmd('lcd ' .. dir)
|
|
||||||
else
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if config.options.silent_chdir == false then
|
|
||||||
vim.notify("Set CWD to " .. dir .. " using " .. method)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
function M.get_project_root()
|
|
||||||
-- returns project root, as well as method
|
|
||||||
for _, detection_method in ipairs(config.options.detection_methods) do
|
|
||||||
if detection_method == "lsp" then
|
|
||||||
local root, lsp_name = M.find_lsp_root()
|
|
||||||
if root ~= nil then
|
|
||||||
return root, '"' .. lsp_name .. '"' .. " lsp"
|
|
||||||
end
|
|
||||||
elseif detection_method == "pattern" then
|
|
||||||
local root, method = M.find_pattern_root()
|
|
||||||
if root ~= nil then
|
|
||||||
return root, method
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function M.is_file()
|
|
||||||
local buf_type = vim.api.nvim_buf_get_option(0, "buftype")
|
|
||||||
|
|
||||||
local whitelisted_buf_type = { "", "acwrite" }
|
|
||||||
local is_in_whitelist = false
|
|
||||||
for _, wtype in ipairs(whitelisted_buf_type) do
|
|
||||||
if buf_type == wtype then
|
|
||||||
is_in_whitelist = true
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if not is_in_whitelist then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
function M.on_buf_enter()
|
|
||||||
if vim.v.vim_did_enter == 0 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if not M.is_file() then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local current_dir = vim.fn.expand("%:p:h", true)
|
|
||||||
if not path.exists(current_dir) or path.is_excluded(current_dir) then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local root, method = M.get_project_root()
|
|
||||||
M.set_pwd(root, method)
|
|
||||||
end
|
|
||||||
|
|
||||||
function M.add_project_manually()
|
|
||||||
local current_dir = vim.fn.expand("%:p:h", true)
|
|
||||||
M.set_pwd(current_dir, 'manual')
|
|
||||||
end
|
|
||||||
|
|
||||||
function M.init()
|
|
||||||
local autocmds = {}
|
|
||||||
if not config.options.manual_mode then
|
|
||||||
autocmds[#autocmds + 1] = 'autocmd VimEnter,BufEnter * ++nested lua require("project_nvim.project").on_buf_enter()'
|
|
||||||
|
|
||||||
if vim.tbl_contains(config.options.detection_methods, "lsp") then
|
|
||||||
M.attach_to_lsp()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
vim.cmd([[
|
|
||||||
command! ProjectRoot lua require("project_nvim.project").on_buf_enter()
|
|
||||||
command! AddProject lua require("project_nvim.project").add_project_manually()
|
|
||||||
]])
|
|
||||||
|
|
||||||
autocmds[#autocmds + 1] =
|
|
||||||
'autocmd VimLeavePre * lua require("project_nvim.utils.history").write_projects_to_history()'
|
|
||||||
|
|
||||||
vim.cmd([[augroup project_nvim
|
|
||||||
au!
|
|
||||||
]])
|
|
||||||
for _, value in ipairs(autocmds) do
|
|
||||||
vim.cmd(value)
|
|
||||||
end
|
|
||||||
vim.cmd("augroup END")
|
|
||||||
|
|
||||||
history.read_projects_from_history()
|
|
||||||
end
|
|
||||||
|
|
||||||
return M
|
|
||||||
Loading…
Add table
Reference in a new issue