0xda157's nixvim config
at main 113 lines 2.8 kB view raw
1# Copyright (c) 2024-2025 0xda157 <da157@voidq.com> 2{ lib, pkgs, ... }: 3let 4 inherit (lib) singleton; 5in 6{ 7 extraPackages = with pkgs; [ 8 prettierd 9 black 10 stylua 11 nixfmt 12 rustfmt 13 shfmt 14 clang-tools 15 gleam 16 keep-sorted 17 ]; 18 19 keymaps = singleton { 20 mode = [ 21 "n" 22 "v" 23 ]; 24 key = "<leader>l"; 25 action = 26 # lua 27 '' 28 function() 29 conform.format({ 30 lsp_fallback = true, 31 async = true, 32 }) 33 end 34 ''; 35 }; 36 37 plugins.conform-nvim = { 38 enable = true; 39 settings = { 40 format_on_save = # lua 41 '' 42 function(bufnr) 43 -- Disable "format_on_save lsp_fallback" for lanuages that don't 44 -- have a well standardized coding style. You can add additional 45 -- lanuages here or re-enable it for the disabled ones. 46 local disable_filetypes = { c = true, cpp = true } 47 if vim.g.disable_autoformat or disable_filetypes[vim.bo[bufnr].filetype] then 48 return nil 49 else 50 return { 51 timeout_ms = 500, 52 lsp_format = "fallback", 53 } 54 end 55 end 56 ''; 57 default_format_opts = { 58 lsp_format = "fallback"; 59 timeout_ms = 200; 60 }; 61 formatters_by_ft = 62 let 63 prettier = { 64 __unkeyed-1 = "prettierd"; 65 __unkeyed-2 = "prettier"; 66 stop_after_first = true; 67 }; 68 in 69 { 70 # keep-sorted start block=true 71 "*" = [ "keep-sorted" ]; 72 "_" = [ "trim_whitespace" ]; 73 bash = [ "shfmt" ]; 74 c = [ "clangd" ]; 75 cpp = [ "clangd" ]; 76 css = prettier; 77 # html = prettier; 78 gleam = [ "gleam" ]; 79 javascript = prettier; 80 javascriptreact = prettier; 81 lua = [ "stylua" ]; 82 nix = [ "nixfmt" ]; 83 # markdown = prettier; 84 python = [ "black" ]; 85 rust = [ "rustfmt" ]; 86 sh = [ "shfmt" ]; 87 typescript = prettier; 88 typescriptreact = prettier; 89 zsh = [ "shfmt" ]; 90 # keep-sorted end 91 }; 92 }; 93 luaConfig.post = '' 94 vim.api.nvim_create_user_command("FormatDisable", function(args) 95 if args.bang then 96 -- FormatDisable! will disable formatting just for this buffer 97 vim.b.disable_autoformat = true 98 else 99 vim.g.disable_autoformat = true 100 end 101 end, { 102 desc = "Disable autoformat-on-save", 103 bang = true, 104 }) 105 vim.api.nvim_create_user_command("FormatEnable", function() 106 vim.b.disable_autoformat = false 107 vim.g.disable_autoformat = false 108 end, { 109 desc = "Re-enable autoformat-on-save", 110 }) 111 ''; 112 }; 113}