0xda157's nixvim config
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}