diff --git a/.gitignore b/.gitignore index 16ad602..ea34fde 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .directory *.swp +result result/ diff --git a/users/coyote/programs/nvf.nix b/users/coyote/programs/nvf.nix index 7b612d8..6fbcaba 100644 --- a/users/coyote/programs/nvf.nix +++ b/users/coyote/programs/nvf.nix @@ -1,8 +1,145 @@ -{ ... }: { +{ + pkgs, + ... +}: { programs.nvf.enable = true; programs.nvf.settings.vim = { - viAlias = false; - vimAlias = false; - lsp.enable = true; + enableMan = true; + viAlias = true; + vimAlias = true; + + options = { + mouse = "a"; + clipboard = "unnamedplus"; + showmode = false; + breakindent = true; + undofile = true; + ignorecase = true; + smartcase = true; + updatetime = 250; + timeoutlen = 300; + splitright = true; + splitbelow = true; + signcolumn = "yes"; + scrolloff = 8; + completeopt = "menuone,noselect"; + termguicolors = true; + + expandtab = true; + shiftwidth = 4; + tabstop = 4; + softtabstop = 4; + }; + + colorschemes.gruvbox = { + enable = true; + settings.contrast = "hard"; + }; + + treesitter = { + enable = true; + ensureInstalled = [ + "org" + "python" + "rust" + "c" + "cpp" + "lua" + "html" + "css" + "javascript" + "typescript" + "json" + "yaml" + "nix" + "bash" + "go" + "make" + "clojure" + "scheme" + "commonlisp" + ]; + }; + + rainbow-delimiters.enable = true; + + orgmode.enable = true; + + extraPlugins = with pkgs.vimPlugins; { + orgmode-babel = orgmode-babel-nvim; + }; + + luaConfigRC = { + org-babel = ''require("orgmode-babel").setup()''; + + indent = '' + local two_space_ft = { + "html", "htmldjango", "css", "scss", "less", + "nix", "javascript", "typescript", + "javascriptreact", "typescriptreact", + "json", "jsonc", "yaml", "lua" + } + local four_space_ft = { + "python", "rust", "c", "cpp", + "java", "scala", "kotlin", "swift" + } + local tab_ft = { + "make", "go", "odin" + } + + local indent_augroup = vim.api.nvim_create_augroup("IndentSettings", { clear = true }) + + vim.api.nvim_create_autocmd("FileType", { + group = indent_augroup, + pattern = two_space_ft, + callback = function() + vim.opt_local.expandtab = true + vim.opt_local.shiftwidth = 2 + vim.opt_local.tabstop = 2 + vim.opt_local.softtabstop = 2 + end, + }) + + vim.api.nvim_create_autocmd("FileType", { + group = indent_augroup, + pattern = four_space_ft, + callback = function() + vim.opt_local.expandtab = true + vim.opt_local.shiftwidth = 4 + vim.opt_local.tabstop = 4 + vim.opt_local.softtabstop = 4 + end, + }) + + vim.api.nvim_create_autocmd("FileType", { + group = indent_augroup, + pattern = tab_ft, + callback = function() + vim.opt_local.expandtab = false + vim.opt_local.shiftwidth = 0 + vim.opt_local.tabstop = 8 + vim.opt_local.softtabstop = 0 + end, + }) + ''; + + lisp-indent = '' + local lisp_ft = { "lisp", "scheme", "racket", "clojure" } + local lisp_augroup = vim.api.nvim_create_augroup("LispIndent", { clear = true }) + + vim.api.nvim_create_autocmd("FileType", { + group = lisp_augroup, + pattern = lisp_ft, + callback = function() + vim.opt_local.lisp = true + vim.opt_local.lispwords:append({ + "defun", "defmacro", "defvar", "defparameter", + "lambda", "let", "let*", "flet", "labels", + "progn", "when", "unless", "if", "cond" + }) + end, + }) + ''; + }; }; }