From 5cc889d066862ed881361a9cec3a593ffab53842 Mon Sep 17 00:00:00 2001 From: Minijackson Date: Tue, 10 Dec 2024 21:34:32 +0100 Subject: treewide: remove old vim options they aren't used since the addition of nixvim --- common/default.nix | 1 - common/nixvim.nix | 1187 ++++++++++++++++---------------- common/vim.nix | 190 ----- lib/default.nix | 1 - lib/generators.nix | 41 -- usecases/desktop/development.nix | 238 ++----- usecases/desktop/development/latex.nix | 11 - 7 files changed, 650 insertions(+), 1019 deletions(-) delete mode 100644 common/vim.nix delete mode 100644 lib/generators.nix diff --git a/common/default.nix b/common/default.nix index a791e8d..871c4da 100644 --- a/common/default.nix +++ b/common/default.nix @@ -13,7 +13,6 @@ inputs: (import ./theme.nix inputs) (import ./tinc.nix inputs) (import ./unfree.nix inputs) - (import ./vim.nix inputs) (import ./zram.nix inputs) ]; diff --git a/common/nixvim.nix b/common/nixvim.nix index 5e87ad9..aef8380 100644 --- a/common/nixvim.nix +++ b/common/nixvim.nix @@ -18,676 +18,687 @@ in }; }; - config.programs.nixvim = { - # enable = true; - luaLoader.enable = true; - - globals = { - mapleader = ";"; - maplocalleader = ","; - polyglot_disabled = [ - # ftdetect messes up `vim.filetype.add` - "ftdetect" - "autoindent" - "sensible" - ]; - }; - - opts = { - backup = true; - # Use `//` at the end to store the absolute file name - backupdir.__raw = "vim.fn.stdpath('data') .. '/backup//'"; - colorcolumn = "80"; - completeopt = [ - "menu" - "menuone" - "noinsert" - "noselect" - ]; - cursorline = true; - diffopt = [ - "internal" - "filler" - "closeoff" - "linematch:60" - ]; - grepprg = "${lib.getExe pkgs.ripgrep} --vimgrep --smart-case"; - ignorecase = true; - inccommand = "split"; - list = true; - listchars = { - extends = ">"; - nbsp = "+"; - precedes = "<"; - tab = " "; - trail = "-"; + config = { + programs.nixvim = { + # enable = true; + luaLoader.enable = true; + + globals = { + mapleader = ";"; + maplocalleader = ","; + polyglot_disabled = [ + # ftdetect messes up `vim.filetype.add` + "ftdetect" + "autoindent" + "sensible" + ]; }; - scrolloff = 3; - shiftwidth = 4; - shortmess = "ncAxoTOtfFli"; - showmode = false; - sidescrolloff = 5; - smartcase = true; - smartindent = true; - tabstop = 4; - title = true; - undofile = true; - updatetime = 1000; - wildmode = [ - "longest:full" - "full" - ]; - }; - colorschemes.gruvbox = { - enable = true; - - settings = { - # bold = true; - # italics = true; - # underline = true; - # undercurl = true; - italic.strings = false; - overrides = { - GitSignsAdd.link = "GruvboxGreenSign"; - GitSignsChange.link = "GruvboxOrangeSign"; - GitSignsDelete.link = "GruvboxRedSign"; - IblScope.link = "GruvboxAqua"; + opts = { + backup = true; + # Use `//` at the end to store the absolute file name + backupdir.__raw = "vim.fn.stdpath('data') .. '/backup//'"; + colorcolumn = "80"; + completeopt = [ + "menu" + "menuone" + "noinsert" + "noselect" + ]; + cursorline = true; + diffopt = [ + "internal" + "filler" + "closeoff" + "linematch:60" + ]; + grepprg = "${lib.getExe pkgs.ripgrep} --vimgrep --smart-case"; + ignorecase = true; + inccommand = "split"; + list = true; + listchars = { + extends = ">"; + nbsp = "+"; + precedes = "<"; + tab = " "; + trail = "-"; }; + scrolloff = 3; + shiftwidth = 4; + shortmess = "ncAxoTOtfFli"; + showmode = false; + sidescrolloff = 5; + smartcase = true; + smartindent = true; + tabstop = 4; + title = true; + undofile = true; + updatetime = 1000; + wildmode = [ + "longest:full" + "full" + ]; }; - }; - highlight = { - TSDefinition.link = "GruvboxBlueSign"; - TSDefinitionUsage.link = "GruvboxAquaSign"; - }; + colorschemes.gruvbox = { + enable = true; - keymaps = - let - toggle = key: option: { - mode = "n"; - key = "yo${key}"; - action = "setlocal ${option}! ${option}?"; - options.desc = "Toggle ${option}"; - }; - in - [ - { - key = "-"; - action.__raw = "require('oil').open"; - options.desc = "Open parent directory"; - } - - # Git - - { - key = "gg"; - action = "Neogit"; - options.desc = "Open Neogit"; - } - - { - key = "gd"; - action = "DiffviewOpen"; - options.desc = "Open Diffview"; - } - - # TODO: noremap? buffer local? silent? - { - key = "gs"; - action.__raw = "require('gitsigns').stage_hunk"; - options.desc = "Stage hunk"; - } - - { - key = "gr"; - action.__raw = "require('gitsigns').reset_hunk"; - options.desc = "Reset hunk"; - } - - # TODO: visual stage/reset - - { - key = "gS"; - action.__raw = "require('gitsigns').stage_buffer"; - options.desc = "Stage buffer"; - } - - { - key = "gR"; - action.__raw = "require('gitsigns').reset_buffer"; - options.desc = "Stage buffer"; - } - - { - key = "gu"; - action.__raw = "require('gitsigns').undo_stage_hunk"; - options.desc = "Undo stage hunk"; - } - - { - key = "gp"; - action.__raw = "require('gitsigns').preview_hunk_inline"; - options.desc = "Preview hunk"; - } - - { - key = "gb"; - action.__raw = "function() require('gitsigns').blame_line { full = true } end"; - options.desc = "Blame line"; - } - - { - key = "]g"; - action.__raw = '' - function() - if vim.wo.diff then return ']c' end - vim.schedule(function() package.loaded.gitsigns.next_hunk() end) - return '' - end - ''; - options = { - expr = true; - desc = "Next hunk"; + settings = { + # bold = true; + # italics = true; + # underline = true; + # undercurl = true; + italic.strings = false; + overrides = { + GitSignsAdd.link = "GruvboxGreenSign"; + GitSignsChange.link = "GruvboxOrangeSign"; + GitSignsDelete.link = "GruvboxRedSign"; + IblScope.link = "GruvboxAqua"; }; - } - - { - key = "[g"; - action.__raw = '' - function() - if vim.wo.diff then return '[c' end - vim.schedule(function() package.loaded.gitsigns.prev_hunk() end) - return '' - end - ''; - options = { - expr = true; - desc = "Next hunk"; + }; + }; + + highlight = { + TSDefinition.link = "GruvboxBlueSign"; + TSDefinitionUsage.link = "GruvboxAquaSign"; + }; + + keymaps = + let + toggle = key: option: { + mode = "n"; + key = "yo${key}"; + action = "setlocal ${option}! ${option}?"; + options.desc = "Toggle ${option}"; }; - } - - # Leap - - { - key = ""; - mode = [ - "n" - "x" - "o" - ]; - action = "(leap-forward)"; - options.desc = "Leap forward to"; - } - - { - key = ""; - mode = [ - "n" - "x" - "o" - ]; - action = "(leap-backward)"; - options.desc = "Leap backward to"; - } - - { - key = "g"; - mode = [ - "n" - "x" - "o" - ]; - action = "(leap-from-window)"; - options.desc = "Leap from window"; - } - - { - key = "gnn"; - mode = [ - "n" - "x" - "o" - ]; - action.__raw = '' - function() - require('leap.treesitter').select() - end - ''; - options.desc = "Start incremental selection"; - } - - { - key = "gnN"; - mode = [ - "n" - "x" - "o" - ]; - action = "Vlua require('leap.treesitter').select()"; - options.desc = "Start linewise incremental selection"; - } - - # Toggle options - (toggle "c" "cursorline") - (toggle "C" "cursorcolumn") - (toggle "h" "hlsearch") - (toggle "i" "ignorecase") - (toggle "l" "list") - (toggle "n" "number") - (toggle "r" "relativenumber") - (toggle "s" "spell") - (toggle "w" "wrap") - - { - mode = "n"; - key = "yod"; - action.__raw = '' - function() - if vim.wo.diff then - vim.cmd.diffoff() - print('diffoff') - else - vim.cmd.diffthis() - print('diffthis') + in + [ + { + key = "-"; + action.__raw = "require('oil').open"; + options.desc = "Open parent directory"; + } + + # Git + + { + key = "gg"; + action = "Neogit"; + options.desc = "Open Neogit"; + } + + { + key = "gd"; + action = "DiffviewOpen"; + options.desc = "Open Diffview"; + } + + # TODO: noremap? buffer local? silent? + { + key = "gs"; + action.__raw = "require('gitsigns').stage_hunk"; + options.desc = "Stage hunk"; + } + + { + key = "gr"; + action.__raw = "require('gitsigns').reset_hunk"; + options.desc = "Reset hunk"; + } + + # TODO: visual stage/reset + + { + key = "gS"; + action.__raw = "require('gitsigns').stage_buffer"; + options.desc = "Stage buffer"; + } + + { + key = "gR"; + action.__raw = "require('gitsigns').reset_buffer"; + options.desc = "Stage buffer"; + } + + { + key = "gu"; + action.__raw = "require('gitsigns').undo_stage_hunk"; + options.desc = "Undo stage hunk"; + } + + { + key = "gp"; + action.__raw = "require('gitsigns').preview_hunk_inline"; + options.desc = "Preview hunk"; + } + + { + key = "gb"; + action.__raw = "function() require('gitsigns').blame_line { full = true } end"; + options.desc = "Blame line"; + } + + { + key = "]g"; + action.__raw = '' + function() + if vim.wo.diff then return ']c' end + vim.schedule(function() package.loaded.gitsigns.next_hunk() end) + return '' end - end - ''; - options.desc = "Toggle diff"; - } - ]; + ''; + options = { + expr = true; + desc = "Next hunk"; + }; + } + + { + key = "[g"; + action.__raw = '' + function() + if vim.wo.diff then return '[c' end + vim.schedule(function() package.loaded.gitsigns.prev_hunk() end) + return '' + end + ''; + options = { + expr = true; + desc = "Next hunk"; + }; + } - # TODO: - # extraPlugins = with pkgs.unstable.vimPlugins; [ - extraPlugins = with inputs.nixpkgs-unstable.legacyPackages.x86_64-linux.vimPlugins; [ - highlight-undo-nvim - vim-abolish + # Leap - # TODO: make that modular - playground + { + key = ""; + mode = [ + "n" + "x" + "o" + ]; + action = "(leap-forward)"; + options.desc = "Leap forward to"; + } + + { + key = ""; + mode = [ + "n" + "x" + "o" + ]; + action = "(leap-backward)"; + options.desc = "Leap backward to"; + } + + { + key = "g"; + mode = [ + "n" + "x" + "o" + ]; + action = "(leap-from-window)"; + options.desc = "Leap from window"; + } + + { + key = "gnn"; + mode = [ + "n" + "x" + "o" + ]; + action.__raw = '' + function() + require('leap.treesitter').select() + end + ''; + options.desc = "Start incremental selection"; + } + + { + key = "gnN"; + mode = [ + "n" + "x" + "o" + ]; + action = "Vlua require('leap.treesitter').select()"; + options.desc = "Start linewise incremental selection"; + } + + # Toggle options + (toggle "c" "cursorline") + (toggle "C" "cursorcolumn") + (toggle "h" "hlsearch") + (toggle "i" "ignorecase") + (toggle "l" "list") + (toggle "n" "number") + (toggle "r" "relativenumber") + (toggle "s" "spell") + (toggle "w" "wrap") + + { + mode = "n"; + key = "yod"; + action.__raw = '' + function() + if vim.wo.diff then + vim.cmd.diffoff() + print('diffoff') + else + vim.cmd.diffthis() + print('diffthis') + end + end + ''; + options.desc = "Toggle diff"; + } + ]; - vim-rhubarb - fugitive-gitlab-vim + # TODO: + # extraPlugins = with pkgs.unstable.vimPlugins; [ + extraPlugins = with inputs.nixpkgs-unstable.legacyPackages.x86_64-linux.vimPlugins; [ + highlight-undo-nvim + vim-abolish - vim-polyglot + # TODO: make that modular + playground - nvim-surround - ]; + vim-rhubarb + fugitive-gitlab-vim - plugins = { - cmp = { - enable = true; + vim-polyglot - settings = { - mapping.__raw = '' - cmp.mapping.preset.insert { - [''] = cmp.mapping.confirm({ select = false }), - - [""] = cmp.mapping(function(fallback) - local luasnip = require("luasnip") - if luasnip.locally_jumpable(1) then - luasnip.jump(1) - else - fallback() - end - end, { "i", "s" }), + nvim-surround + ]; - [""] = cmp.mapping(function(fallback) - local luasnip = require("luasnip") - if luasnip.locally_jumpable(-1) then - luasnip.jump(-1) - else - fallback() - end - end, { "i", "s" }), - } - ''; + plugins = { + cmp = { + enable = true; - snippet.expand = '' - function(args) - require('luasnip').lsp_expand(args.body) - end - ''; - - sources = [ - { name = "nvim_lsp"; } - { name = "nvim_lsp_signature_help"; } - { name = "cmp_pandoc"; } - # TODO: make this modular - { name = "crates"; } - { name = "luasnip"; } - { name = "calc"; } - { name = "path"; } - { name = "treesitter"; } - { name = "git"; } - { name = "tmux"; } - { name = "spell"; } - # Use \k for iskeyword because of UTF-8 - { - name = "buffer"; - option.keyword_pattern = ''\k\+''; - } - ]; + settings = { + mapping.__raw = '' + cmp.mapping.preset.insert { + [''] = cmp.mapping.confirm({ select = false }), + + [""] = cmp.mapping(function(fallback) + local luasnip = require("luasnip") + if luasnip.locally_jumpable(1) then + luasnip.jump(1) + else + fallback() + end + end, { "i", "s" }), + + [""] = cmp.mapping(function(fallback) + local luasnip = require("luasnip") + if luasnip.locally_jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), + } + ''; + + snippet.expand = '' + function(args) + require('luasnip').lsp_expand(args.body) + end + ''; + + sources = [ + { name = "nvim_lsp"; } + { name = "nvim_lsp_signature_help"; } + { name = "cmp_pandoc"; } + # TODO: make this modular + { name = "crates"; } + { name = "luasnip"; } + { name = "calc"; } + { name = "path"; } + { name = "treesitter"; } + { name = "git"; } + { name = "tmux"; } + { name = "spell"; } + # Use \k for iskeyword because of UTF-8 + { + name = "buffer"; + option.keyword_pattern = ''\k\+''; + } + ]; + }; }; - }; - # cmp-buffer.enable = true; - # cmp-calc.enable = true; - # cmp-cmdline.enable = true; - # cmp-git.enable = true; + # cmp-buffer.enable = true; + # cmp-calc.enable = true; + # cmp-cmdline.enable = true; + # cmp-git.enable = true; - diffview.enable = true; + diffview.enable = true; - dressing.enable = true; + dressing.enable = true; - fidget = { - enable = true; - notification.overrideVimNotify = true; - }; + fidget = { + enable = true; + notification.overrideVimNotify = true; + }; - fugitive.enable = true; + fugitive.enable = true; - gitignore.enable = true; + gitignore.enable = true; - gitsigns.enable = true; + gitsigns.enable = true; - indent-blankline = { - enable = true; - settings.indent = { - char = "│"; - tab_char = "│"; + indent-blankline = { + enable = true; + settings.indent = { + char = "│"; + tab_char = "│"; + }; }; - }; - lastplace.enable = true; + lastplace.enable = true; - leap = { - enable = true; - addDefaultMappings = false; - }; + leap = { + enable = true; + addDefaultMappings = false; + }; - lualine = { - enable = true; - settings.options = { - component_separators.left = ""; - component_separators.right = ""; + lualine = { + enable = true; + settings.options = { + component_separators.left = ""; + component_separators.right = ""; - section_separators.left = ""; - section_separators.right = ""; + section_separators.left = ""; + section_separators.right = ""; - icons_enabled = false; + icons_enabled = false; + }; }; - }; - luasnip.enable = true; + luasnip.enable = true; - mini = { - enable = true; - modules = { - ai.custom_textobjects = { - search_method = "cover_or_nearest"; - - f.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@function.outer', i = '@function.inner' })"; - F.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@call.outer', i = '@call.inner' })"; - c.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@comment.outer', i = '@comment.inner' })"; - b.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@block.outer', i = '@block.inner' })"; - a.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@parameter.outer', i = '@parameter.inner' })"; - o.__raw = '' - require('mini.ai').gen_spec.treesitter({ - a = { '@conditional.outer', '@loop.outer' }, - i = { '@conditional.inner', '@loop.inner' }, - }) - ''; - }; - align = { }; - bracketed = { }; - clue = { - triggers = [ - { - mode = "n"; - keys = "yo"; - } - { - mode = "n"; - keys = "["; - } - { - mode = "n"; - keys = "]"; - } - { - mode = "n"; - keys = ""; - } - ]; + mini = { + enable = true; + modules = { + ai.custom_textobjects = { + search_method = "cover_or_nearest"; + + f.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@function.outer', i = '@function.inner' })"; + F.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@call.outer', i = '@call.inner' })"; + c.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@comment.outer', i = '@comment.inner' })"; + b.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@block.outer', i = '@block.inner' })"; + a.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@parameter.outer', i = '@parameter.inner' })"; + o.__raw = '' + require('mini.ai').gen_spec.treesitter({ + a = { '@conditional.outer', '@loop.outer' }, + i = { '@conditional.inner', '@loop.inner' }, + }) + ''; + }; + align = { }; + bracketed = { }; + clue = { + triggers = [ + { + mode = "n"; + keys = "yo"; + } + { + mode = "n"; + keys = "["; + } + { + mode = "n"; + keys = "]"; + } + { + mode = "n"; + keys = ""; + } + ]; + }; + trailspace = { }; }; - trailspace = { }; }; - }; - neogit = { - enable = true; - settings = { - graph_style = "unicode"; - integrations = { - diffview = true; - telescope = true; + neogit = { + enable = true; + settings = { + graph_style = "unicode"; + integrations = { + diffview = true; + telescope = true; + }; }; }; - }; - none-ls = { - enable = true; - sources = { - code_actions = { - gitrebase.enable = true; - gitsigns.enable = true; - # TODO: maybe? - #refactoring.enable = true; - statix.enable = true; - }; + none-ls = { + enable = true; + sources = { + code_actions = { + gitrebase.enable = true; + gitsigns.enable = true; + # TODO: maybe? + #refactoring.enable = true; + statix.enable = true; + }; - diagnostics = { - deadnix.enable = true; - statix = { - enable = true; - settings.extra_args = - let - config = (pkgs.formats.toml { }).generate "statix.toml" { - disabled = [ "repeated_keys" ]; - }; - in - [ - "-c" - "${config}" + diagnostics = { + deadnix.enable = true; + statix = { + enable = true; + settings.extra_args = + let + config = (pkgs.formats.toml { }).generate "statix.toml" { + disabled = [ "repeated_keys" ]; + }; + in + [ + "-c" + "${config}" + ]; + }; + vale = { + enable = true; + settings.extra_filetypes = [ + "pandoc" + "rst" ]; + }; }; - vale = { - enable = true; - settings.extra_filetypes = [ - "pandoc" - "rst" - ]; - }; - }; - formatting = { - shfmt.enable = true; - typstyle.enable = true; + formatting = { + shfmt.enable = true; + typstyle.enable = true; + }; }; }; - }; - nvim-osc52 = { - enable = true; - keymaps.enable = true; - }; + # TODO: neovim 0.10: replace + nvim-osc52 = { + enable = true; + keymaps.enable = true; + }; - oil.enable = true; + oil.enable = true; - # TODO: maybe - #refactoring.enable = true; + # TODO: maybe + #refactoring.enable = true; - spider = { - enable = true; - keymaps.motions = { - b = "b"; - e = "e"; - ge = "ge"; - w = "w"; + spider = { + enable = true; + keymaps.motions = { + b = "b"; + e = "e"; + ge = "ge"; + w = "w"; + }; }; - }; - telescope = { - enable = true; - settings = { }; + telescope = { + enable = true; + settings = { }; - extensions.undo.enable = true; + extensions.undo.enable = true; - keymaps = { - "fb" = { - action = "buffers"; - options.desc = "Telescope buffers"; - }; + keymaps = { + "fb" = { + action = "buffers"; + options.desc = "Telescope buffers"; + }; - "ff" = { - action = "find_files"; - options.desc = "Telescope find files"; - }; + "ff" = { + action = "find_files"; + options.desc = "Telescope find files"; + }; - "fg" = { - action = "live_grep"; - options.desc = "Telescope live grep"; - }; + "fg" = { + action = "live_grep"; + options.desc = "Telescope live grep"; + }; - "fh" = { - action = "help_tags"; - options.desc = "Telescope help tags"; - }; + "fh" = { + action = "help_tags"; + options.desc = "Telescope help tags"; + }; - "fo" = { - action = "oldfiles"; - options.desc = "Telescope old files"; - }; + "fo" = { + action = "oldfiles"; + options.desc = "Telescope old files"; + }; - "fs" = { - action = "spell_suggest"; - options.desc = "Telescope spell suggest"; - }; + "fs" = { + action = "spell_suggest"; + options.desc = "Telescope spell suggest"; + }; - "ft" = { - action = "treesitter"; - options.desc = "Telescope treesitter"; - }; + "ft" = { + action = "treesitter"; + options.desc = "Telescope treesitter"; + }; - "fu" = { - action = "undo"; - options.desc = "Telescope undo"; - }; + "fu" = { + action = "undo"; + options.desc = "Telescope undo"; + }; - "fw" = { - action = "git_status"; - options.desc = "Telescope git status"; + "fw" = { + action = "git_status"; + options.desc = "Telescope git status"; + }; }; }; - }; - treesitter = { - enable = true; - nixvimInjections = true; + treesitter = { + enable = true; + nixvimInjections = true; - settings = { - highlight.enable = true; - indent.enable = true; + settings = { + highlight.enable = true; + indent.enable = true; + }; }; - }; - treesitter-context = { - enable = true; - settings = { - max_lines = 5; - min_window_height = 20; + treesitter-context = { + enable = true; + settings = { + max_lines = 5; + min_window_height = 20; + }; }; - }; - treesitter-refactor = { - enable = true; - highlightDefinitions.enable = true; - }; + treesitter-refactor = { + enable = true; + highlightDefinitions.enable = true; + }; - treesitter-textobjects = { - enable = true; - lspInterop = { + treesitter-textobjects = { enable = true; - peekDefinitionCode = { - "df" = { - query = "@function.outer"; - desc = "Peek outer function"; - }; - "dF" = { - query = "@class.outer"; - desc = "Peek outer class"; + lspInterop = { + enable = true; + peekDefinitionCode = { + "df" = { + query = "@function.outer"; + desc = "Peek outer function"; + }; + "dF" = { + query = "@class.outer"; + desc = "Peek outer class"; + }; }; }; }; - }; - vim-matchup = { - enable = true; - treesitterIntegration.enable = true; + vim-matchup = { + enable = true; + treesitterIntegration.enable = true; + }; + + web-devicons.enable = true; }; - web-devicons.enable = true; + extraConfigLua = '' + vim.api.nvim_create_autocmd("TextYankPost", { + desc = "Highlight yanked text", + callback = function() + vim.highlight.on_yank() + end, + }) + + require('highlight-undo').setup({ + keymaps = { + -- Right now messes up registers + paste = { disabled = true, }, + Paste = { disabled = true, }, + }, + }) + + -- For fugitive's :GBrowse + vim.api.nvim_create_user_command("Browse", function(opts) + vim.ui.open(opts.args) + end, { nargs = 1 }) + + require("nvim-surround").setup() + ''; + + extraConfigLuaPost = '' + -- Load local config + + local function isModuleAvailable(name) + if package.loaded[name] then + return true + else + for _, searcher in ipairs(package.searchers or package.loaders) do + local loader = searcher(name) + if type(loader) == "function" then + package.preload[name] = loader + return true + end + end + return false + end + end + + vim.opt.runtimepath:append(vim.fn.stdpath("config")) -- ~/.config/nvim + + if isModuleAvailable "local_config" then + require "local_config" + end + ''; }; - extraConfigLua = '' - vim.api.nvim_create_autocmd("TextYankPost", { - desc = "Highlight yanked text", - callback = function() - vim.highlight.on_yank() - end, - }) - - require('highlight-undo').setup({ - keymaps = { - -- Right now messes up registers - paste = { disabled = true, }, - Paste = { disabled = true, }, - }, - }) - - -- For fugitive's :GBrowse - vim.api.nvim_create_user_command("Browse", function(opts) - vim.ui.open(opts.args) - end, { nargs = 1 }) - - require("nvim-surround").setup() - ''; - - extraConfigLuaPost = '' - -- Load local config - - local function isModuleAvailable(name) - if package.loaded[name] then - return true - else - for _, searcher in ipairs(package.searchers or package.loaders) do - local loader = searcher(name) - if type(loader) == "function" then - package.preload[name] = loader - return true - end - end - return false - end - end + environment.systemPackages = [ config.programs.nixvim.finalPackage ]; - vim.opt.runtimepath:append(vim.fn.stdpath("config")) -- ~/.config/nvim + environment.variables = { + EDITOR = "nvim"; + MANPAGER = "nvim +Man!"; + }; - if isModuleAvailable "local_config" then - require "local_config" - end - ''; + home-manager.users.minijackson.xdg.dataFile."nvim/backup/.keep".text = ""; + home-manager.users.root.xdg.dataFile."nvim/backup/.keep".text = ""; }; - - config.environment.systemPackages = [ config.programs.nixvim.finalPackage ]; } diff --git a/common/vim.nix b/common/vim.nix deleted file mode 100644 index 10a8705..0000000 --- a/common/vim.nix +++ /dev/null @@ -1,190 +0,0 @@ -inputs: { - config, - pkgs, - lib, - ... -}: let - inherit (pkgs.unstable) neovim-unwrapped vimPlugins wrapNeovim; - - luaFormat = inputs.self.lib.generators.lua {}; - - cfg = config.vim; - - variables = with lib; - pkgs.writeTextDir "lua/myVariables.lua" '' - -- Autogenerated variables from the NixOS configuration - - ${(concatStringsSep - "\n" - (mapAttrsToList - (variable: value: "vim.g.${variable} = ${luaFormat.generate value}") - cfg.variables))} - ''; - - extraConfig = pkgs.writeTextDir "lua/myExtraConfig.lua" '' - -- luaConfig from the NixOS configuration - - ${cfg.luaConfig} - ''; - - myGeneratedConfigPackage = pkgs.symlinkJoin { - name = "myGeneratedConfig-nvim"; - paths = [variables extraConfig]; - }; - - myConfigPackage = pkgs.unstable.vimUtils.buildVimPlugin { - name = "myConfig-nvim"; - src = ../dotfiles/vim; - }; - - myNeovim = wrapNeovim neovim-unwrapped { - configure = { - inherit (config.vim) beforePlugins; - - customRC = '' - lua require("myVariables") - lua require("myConfig") - lua require("myExtraConfig") - - ${cfg.extraConfig} - ''; - - packages.myVimPackage = with vimPlugins; { - start = - [ - myGeneratedConfigPackage - myConfigPackage - - # Dependencies - plenary-nvim - popup-nvim - - # UI - undotree - gruvbox-community - lualine-nvim - gitsigns-nvim - diffview-nvim - fidget-nvim - indent-blankline-nvim - oil-nvim - dressing-nvim - highlight-undo-nvim - - # Completion - nvim-cmp - cmp-buffer - cmp-calc - cmp-cmdline - cmp-latex-symbols - cmp-nvim-lsp - cmp-path - cmp-spell - cmp-tmux - cmp-treesitter - cmp-vsnip - - # Snippets - vim-vsnip - vim-vsnip-integ - - # Telescope - telescope-nvim - telescope-undo-nvim - - # Treesitter - nvim-treesitter.withAllGrammars - nvim-treesitter-textobjects - nvim-treesitter-context - nvim-treesitter-refactor - - vim-matchup - - # Motions - camelcasemotion - vim-surround - targets-vim - - neoformat - - # Languages - vim-polyglot - refactoring-nvim - - # Other - comment-nvim - fugitive-gitlab-vim - none-ls-nvim - tabular - tmux-complete-vim - vim-abolish - vim-fugitive - vim-oscyank - vim-repeat - vim-rhubarb - vim-unimpaired - ] - ++ config.vim.extraPlugins; - }; - }; - }; -in { - options.vim = with lib; { - variables = mkOption { - type = types.attrsOf luaFormat.type; - default = {}; - description = "Extra global variables to add at the beginning of the vim configuration."; - }; - - extraPlugins = mkOption { - type = with types; listOf package; - default = []; - description = "Names of extra plugins to add"; - }; - - beforePlugins = mkOption { - type = types.lines; - default = ""; - description = "Extra lines to add in the vim configuration before loading plugins"; - }; - - extraConfig = mkOption { - type = types.lines; - default = ""; - description = "Extra lines to add at the end of the vim configuration"; - }; - - luaConfig = mkOption { - type = types.lines; - default = ""; - description = "Lua Neovim configuration"; - }; - - wrappedPackage = mkOption { - type = types.package; - description = "Resulting wrapped Neovim package"; - readOnly = true; - }; - }; - - config = { - vim = { - wrappedPackage = myNeovim; - variables = { - dominant_color = "${config.theme.colors.dominant}"; - ripgrep_path = "${pkgs.ripgrep}/bin/rg"; - fd_path = "${pkgs.fd}/bin/fd"; - }; - }; - - # environment.systemPackages = [myNeovim]; - - environment.variables = { - EDITOR = "nvim"; - MANPAGER = "nvim +Man!"; - }; - - home-manager.users.minijackson.xdg.dataFile."nvim/backup/.keep".text = ""; - home-manager.users.root.xdg.dataFile."nvim/backup/.keep".text = ""; - }; -} diff --git a/lib/default.nix b/lib/default.nix index 4bdd20d..918c7f0 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -1,6 +1,5 @@ attrs: { - generators = import ./generators.nix attrs; theme = import ./theme.nix attrs; } diff --git a/lib/generators.nix b/lib/generators.nix deleted file mode 100644 index e93d4b0..0000000 --- a/lib/generators.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ lib, ... }: - -with lib; - -{ - lua = {}: rec { - type = with types; let - valueType = nullOr - (oneOf [ - bool - int - float - str - (attrsOf valueType) - (listOf valueType) - ]) // { - description = "Lua value"; - }; in - valueType; - - lib = { - mkRaw = value: { inherit value; _type = "raw"; }; - }; - - generate = value: - let - list = l: "{ ${concatMapStringsSep ", " generate l} }"; - attrs = a: "{ ${concatStringsSep ", " (mapAttrsToList (name: value: "[${generate name}] = ${generate value}") a)} }"; - in - if value ? _type && value._type == "raw" then value.value - else if isInt value then toString value - else if isFloat value then toString value - else if isString value then "'${escape [ "'" ] value }'" - else if true == value then "true" - else if false == value then "false" - else if null == value then "nil" - else if isList value then list value - else if isAttrs value then attrs value - else abort "Lua value not supported: ${toPretty value}"; - }; -} diff --git a/usecases/desktop/development.nix b/usecases/desktop/development.nix index 48c4550..4146352 100644 --- a/usecases/desktop/development.nix +++ b/usecases/desktop/development.nix @@ -1,70 +1,26 @@ -inputs: { - config, - lib, +inputs: +{ pkgs, ... -}: let - inherit - (pkgs.unstable) +}: +let + inherit (pkgs.unstable) clang clang-tools - elixir_ls - haskell-language-server - marksman - nixd - ltex-ls - lua-language-server - typos-lsp - typst-lsp - vimPlugins ; - - pylsp-env = pkgs.unstable.python3.withPackages (p: - with p; [ - python-lsp-server - python-lsp-server.passthru.optional-dependencies.rope - python-lsp-ruff - pylsp-rope - ]); - - luaFormat = inputs.self.lib.generators.lua {}; -in { +in +{ imports = [ (import ./development/adb.nix inputs) (import ./development/latex.nix inputs) (import ./development/nixvim-dev.nix inputs) ]; - options = with lib; - with luaFormat.lib; { - vim.lsp = mkOption { - description = '' - Configure Neovim to use these LSP servers; - ''; - type = with types; - attrsOf (submodule { - freeformType = luaFormat.type; - - options = { - capabilities = mkOption { - default = mkRaw "capabilities"; - }; - cmd = mkOption { - type = with types; listOf str; - }; - on_attach = mkOption { - default = mkRaw "on_attach"; - }; - }; - }); - default = {}; - }; - }; - - config = { - users.extraUsers.minijackson.packages = [ + users.extraUsers.minijackson.packages = + [ pkgs.git-branchless - ] ++ (with pkgs.unstable; [ + ] + ++ (with pkgs.unstable; [ bintools clang clang-tools @@ -121,138 +77,47 @@ in { python3 ]); - programs.zsh.interactiveShellInit = '' - (( $+commands[rustc] )) && fpath+="$(rustc --print sysroot)/share/zsh/site-functions" - source ${../../dotfiles/git-branchless.zsh} - ''; - - vim = { - extraPlugins = with vimPlugins; [ - actions-preview-nvim - vim-pandoc - clangd_extensions-nvim - lsp_signature-nvim - neodev-nvim - nvim-lspconfig - playground - vim-grammarous - - # DAP - # nvim-dap - # nvim-dap-ui - # nvim-dap-virtual-text - # telescope-dap-nvim - - rustaceanvim - ]; + programs.zsh.interactiveShellInit = '' + (( $+commands[rustc] )) && fpath+="$(rustc --print sysroot)/share/zsh/site-functions" + source ${../../dotfiles/git-branchless.zsh} + ''; - lsp = { - bashls.cmd = ["${pkgs.unstable.nodePackages.bash-language-server}/bin/bash-language-server" "start"]; - clangd = { - cmd = [ - "${clang-tools}/bin/clangd" - "--background-index" - "--clang-tidy" - "--fallback-style=WebKit" - "--header-insertion-decorators" - "--header-insertion=iwyu" - ]; - capabilities = luaFormat.lib.mkRaw ''vim.tbl_extend("force", capabilities, { offsetEncoding = "utf-8" })''; - }; - elixirls.cmd = ["${elixir_ls}/bin/elixir-ls"]; - hls.cmd = ["${haskell-language-server}/bin/haskell-language-server" "--lsp"]; - ltex = { - cmd = ["${ltex-ls}/bin/ltex-ls"]; - filetypes = [ - "bib" - "gitcommit" - "markdown" - "org" - "plaintex" - "rst" - "rnoweb" - "tex" - "typst" - "pandoc" - "quarto" - "rmd" - "context" - ]; - }; - lua_ls = { - cmd = ["${lua-language-server}/bin/lua-language-server"]; - settings.Lua = { - completion.callSnippet = "Replace"; - telemetry.enable = false; - }; - }; - marksman.cmd = ["${marksman}/bin/marksman"]; - nixd = { - cmd = [(lib.getExe nixd)]; - settings.nixd.formatting.command = ["alejandra"]; - }; - pylsp = { - cmd = ["${pylsp-env}/bin/pylsp"]; - settings.pylsp.plugins.ruff.enabled = true; - }; - taplo.cmd = ["${pkgs.unstable.taplo}/bin/taplo" "lsp" "stdio"]; - typos_lsp.cmd = [(lib.getExe typos-lsp)]; - typst_lsp.cmd = [(lib.getExe typst-lsp)]; - }; - - luaConfig = with lib; let - toLua = luaFormat.generate; - lspconfigFor = name: settings: "lspconfig['${name}'].setup ${toLua settings}"; - lspconfig = - concatStringsSep - "\n" - (mapAttrsToList lspconfigFor config.vim.lsp); - in '' - require('vim-dev') - local on_attach = require('myConfig.exports').on_attach - local capabilities = require('myConfig.exports').capabilities - local lspconfig = require('lspconfig') - ${lspconfig} - ''; - }; + programs.liboping.enable = true; - programs.liboping.enable = true; + documentation.dev.enable = true; - documentation.dev.enable = true; - - boot.kernel.sysctl = { - # For RR - "kernel.perf_event_paranoid" = 1; - }; + boot.kernel.sysctl = { + # For RR + "kernel.perf_event_paranoid" = 1; + }; - home-manager.users.minijackson = {config, ...}: { + home-manager.users.minijackson = + { config, ... }: + { home.shellAliases.git = "git-branchless wrap --"; - home.file.".clang-format".source = - (pkgs.formats.yaml {}).generate - "clang-format.yml" - { - BasedOnStyle = "Mozilla"; - ColumnLimit = 100; - TabWidth = 4; - IndentWidth = 4; - UseTab = "ForIndentation"; - - AlignAfterOpenBracket = "AlwaysBreak"; - AccessModifierOffset = -4; - AlwaysBreakAfterDefinitionReturnType = "None"; - AlwaysBreakAfterReturnType = "None"; - AlwaysBreakTemplateDeclarations = true; - BinPackArguments = false; - BinPackParameters = false; - BreakConstructorInitializers = "BeforeComma"; - Cpp11BracedListStyle = true; - DerivePointerAlignment = false; - NamespaceIndentation = "Inner"; - PenaltyBreakBeforeFirstCallParameter = 2; - PointerAlignment = "Left"; - Standard = "Latest"; - }; + home.file.".clang-format".source = (pkgs.formats.yaml { }).generate "clang-format.yml" { + BasedOnStyle = "Mozilla"; + ColumnLimit = 100; + TabWidth = 4; + IndentWidth = 4; + UseTab = "ForIndentation"; + + AlignAfterOpenBracket = "AlwaysBreak"; + AccessModifierOffset = -4; + AlwaysBreakAfterDefinitionReturnType = "None"; + AlwaysBreakAfterReturnType = "None"; + AlwaysBreakTemplateDeclarations = true; + BinPackArguments = false; + BinPackParameters = false; + BreakConstructorInitializers = "BeforeComma"; + Cpp11BracedListStyle = true; + DerivePointerAlignment = false; + NamespaceIndentation = "Inner"; + PenaltyBreakBeforeFirstCallParameter = 2; + PointerAlignment = "Left"; + Standard = "Latest"; + }; programs.direnv = { enable = true; @@ -277,10 +142,9 @@ in { }; }; - nixpkgs.overlays = [ - (self: super: { - inherit (self.unstable) nix-direnv direnv; - }) - ]; - }; + nixpkgs.overlays = [ + (self: super: { + inherit (self.unstable) nix-direnv direnv; + }) + ]; } diff --git a/usecases/desktop/development/latex.nix b/usecases/desktop/development/latex.nix index e264e9e..a04a157 100644 --- a/usecases/desktop/development/latex.nix +++ b/usecases/desktop/development/latex.nix @@ -117,15 +117,4 @@ in # Fira Code is nice for code reading fonts.packages = with pkgs; [ fira-code cm_unicode ]; - - vim = { - lsp.texlab = { - cmd = [ "${pkgs.unstable.texlab}/bin/texlab" ]; - settings.texlab.build = { - executable = "${texliveEnv}/bin/latexmk"; - args = [ "-synctex=1" "-interaction=nonstopmode" "-shell-escape" "-use-make" "-8bit" "-xelatex" "-output-directory=latexmk-build" "%f" ]; - auxDirectory = [ "latexmk-build" ]; - }; - }; - }; } -- cgit v1.2.3