From e5760260b37e0ac09285a5e09edfd22d895aa60c Mon Sep 17 00:00:00 2001 From: Arpit Chakladar Date: Tue, 14 Jul 2026 00:21:26 +0530 Subject: feat: neomutt theme and nixvim lsp configuraitons Made some minor changes to the theme of neomutt. Made the lsp configuration for nixvim more verbose and using more modern lsps for programming languagues and also enabling inlay hints for all that support them. --- flake.lock | 95 ++++++--------- modules/private/email.example.nix | 11 +- modules/programs/neomutt/default.nix | 37 ++++-- modules/programs/neomutt/theme.nix | 102 ++++++++-------- modules/programs/nixvim/plugins/lsp.nix | 198 ++++++++++++++++++++++++++++++-- 5 files changed, 311 insertions(+), 132 deletions(-) diff --git a/flake.lock b/flake.lock index b1947ca..f562a3d 100644 --- a/flake.lock +++ b/flake.lock @@ -84,11 +84,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1782231411, - "narHash": "sha256-W/Yhek5L3nc0gaGgMHPrzO6DbLGq7Yb9DKw/kvLwij0=", + "lastModified": 1783538213, + "narHash": "sha256-jNjKlmrejUrBgVAeiavlMLlkmC7ZEv1D9nhfuwMW5Q8=", "owner": "cachix", "repo": "devenv", - "rev": "a4fd3348220d96f7602385adff0ace482e720586", + "rev": "d1fb321e73048d0e1e2b523580268ebb3df2ae90", "type": "github" }, "original": { @@ -142,11 +142,11 @@ ] }, "locked": { - "lastModified": 1778716662, - "narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=", + "lastModified": 1782949081, + "narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb", + "rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e", "type": "github" }, "original": { @@ -174,11 +174,11 @@ "ghostty": { "flake": false, "locked": { - "lastModified": 1779069789, - "narHash": "sha256-ojo+gso45/6CVSuqfSVnlWpQ4d0QeLgwok+v/g3yu0E=", + "lastModified": 1782866021, + "narHash": "sha256-BOLtzL5iAHmtCOg9/DXtcfw+K86QWol088K72chJB04=", "owner": "ghostty-org", "repo": "ghostty", - "rev": "4b7bf0b20e3baf9c1ba10c63f2ad1fd853faea8f", + "rev": "e1d31deaaed21aa9225afca78d778fb373c95852", "type": "github" }, "original": { @@ -193,18 +193,17 @@ "devenv", "flake-compat" ], - "gitignore": "gitignore", "nixpkgs": [ "devenv", "nixpkgs" ] }, "locked": { - "lastModified": 1778507602, - "narHash": "sha256-kTwur1wV+01SdqskVMSo6JMEpg71ps3HpbFY2GsflKs=", + "lastModified": 1782908218, + "narHash": "sha256-wLMOrPgVyeF3XmP+qfYcLqnVdTxikdcSvbIY7rA9jTA=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "61ab0e80d9c7ab14c256b5b453d8b3fb0189ba0a", + "rev": "9f7e99119ece7705299595299f3b031f39356de1", "type": "github" }, "original": { @@ -213,28 +212,6 @@ "type": "github" } }, - "gitignore": { - "inputs": { - "nixpkgs": [ - "devenv", - "git-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", - "type": "github" - } - }, "home-manager": { "inputs": { "nixpkgs": [ @@ -242,11 +219,11 @@ ] }, "locked": { - "lastModified": 1782233665, - "narHash": "sha256-h/xOtrByoA/Ak1lWHn0O1lVZz4qWYbwOSLQ8YSwQO0I=", + "lastModified": 1783823409, + "narHash": "sha256-OI4IkRjRXa1e7hYmCGJDPDq5H/kPwhsyoS80cNUF9fI=", "owner": "nix-community", "repo": "home-manager", - "rev": "062581938b4a378a82dfbb294b494808157153a1", + "rev": "7566825d4652a1b885bd4ce65bd9e8def432fec9", "type": "github" }, "original": { @@ -282,11 +259,11 @@ ] }, "locked": { - "lastModified": 1779748925, - "narHash": "sha256-meIhqGC04O5VXbKSFXSQoOKp+XCq5RMnwAk1Guo0VQo=", + "lastModified": 1782407171, + "narHash": "sha256-xem+4ncdQCTFJsQ4PrVuyVmi3j4w/Yqg298hBUzVejA=", "owner": "cachix", "repo": "nix", - "rev": "0bc443c8ff235c3547d09327b48aaa2ab98b15f2", + "rev": "782ac1b155679b065ec945ae50d0fa1d495883b7", "type": "github" }, "original": { @@ -309,11 +286,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1778381404, - "narHash": "sha256-FqhdOTA8vyoIpkHhbs2cCT7h6EWM7nsLeOYJc1ifQLE=", + "lastModified": 1780381423, + "narHash": "sha256-S1BIJiQF4lRtJUKak0e97JwNvbe69/LW78YJJuB18Qk=", "owner": "nix-community", "repo": "nixd", - "rev": "e3e45eb76663f522e196b7f0cf34cab201db7779", + "rev": "0e07c08c448a2995e7793d1098437b29bbe80b02", "type": "github" }, "original": { @@ -324,11 +301,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1781577229, - "narHash": "sha256-lrp67w8AulE9Ks53n27I45ADSzbOCn4H+CNW1Ck8B+8=", + "lastModified": 1783776592, + "narHash": "sha256-UgCQzxeWI75XM8G+hPrPh+MKzEPjG3SpAj7dtqSbksA=", "owner": "nixos", "repo": "nixpkgs", - "rev": "567a49d1913ce81ac6e9582e3553dd90a955875f", + "rev": "e7a3ca8092b61ff85b6a45bf863ea2b2d6a661b3", "type": "github" }, "original": { @@ -340,11 +317,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1781607440, - "narHash": "sha256-rxO+uc/KFbSJp+pgyXRuAX6QlG9hJdnt0BXpEQRXY+U=", + "lastModified": 1783279667, + "narHash": "sha256-/NAkDSsve+GNM0Bt6tleJdCGfsTlK89nPjkVOzZMo0s=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3e41b24abd260e8f71dbe2f5737d24122f972158", + "rev": "f205b5574fd0cb7da5b702a2da51507b7f4fdd1b", "type": "github" }, "original": { @@ -361,11 +338,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1782254890, - "narHash": "sha256-kjsEECqhpPnJWqhooXp6tWh2qGQftCPAo2G1GvZtKdw=", + "lastModified": 1783647864, + "narHash": "sha256-gtVkWD4SbsvQQ8aSFEsrUTxxyuim4/ZC6lBJmA+sE/k=", "owner": "nix-community", "repo": "nixvim", - "rev": "dbf9550dba8448b03e11d58e5695d6c44a464554", + "rev": "ebffdb62cd1604537ee51d4d23258c002f1c90f8", "type": "github" }, "original": { @@ -391,11 +368,11 @@ ] }, "locked": { - "lastModified": 1779074409, - "narHash": "sha256-6aXy8Ga41iLVM8ibddFU1O5+wYWcBGNEfZzZuL91eIc=", + "lastModified": 1782875958, + "narHash": "sha256-5eqDcnBjb1424HRQdnhuhNOBZguq1Z2tqSa2OMF/m2c=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "2a77b5b1dc952f214e8102acdef1622b68515560", + "rev": "13139aefa973f3d96c60c0fbab801de058ae25ca", "type": "github" }, "original": { @@ -429,11 +406,11 @@ ] }, "locked": { - "lastModified": 1775636079, - "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=", + "lastModified": 1780220602, + "narHash": "sha256-eynAfOmbmxJnkp7YewvCEbShNnnYJ9gLLqkzsYtBPeM=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba", + "rev": "db947814a175b7ca6ded66e21383d938df01c227", "type": "github" }, "original": { diff --git a/modules/private/email.example.nix b/modules/private/email.example.nix index 9fc9ee2..ca4a3a1 100644 --- a/modules/private/email.example.nix +++ b/modules/private/email.example.nix @@ -13,7 +13,7 @@ enable = true; mailboxType = "maildir"; extraConfig = '' - mailboxes =Inbox ="[Gmail]/Drafts" ="[Gmail]/Sent Mail" ="[Gmail]/Trash" + mailboxes =Inbox ="[Gmail]/Drafts" ="[Gmail]/Sent Mail" ="[Gmail]/Spam" ="[Gmail]/Trash" ''; }; @@ -29,9 +29,10 @@ create = "maildir"; patterns = [ "INBOX" - "\"[Gmail]/Drafts\"" - "\"[Gmail]/Sent Mail\"" - "\"[Gmail]/Trash\"" + "[Gmail]/Drafts" + "[Gmail]/Sent Mail" + "[Gmail]/Spam" + "[Gmail]/Trash" ]; extraConfig.channel = { SyncState = "*"; @@ -46,7 +47,7 @@ neomutt.virtualMailboxes = [ { name = "All Mail"; - query = "folder:example/Inbox or folder:\"example/[Gmail]/Sent Mail\""; + query = "folder:arpitchakladar/Inbox or folder:\"arpitchakladar/[Gmail]/Sent Mail\""; } ]; }; diff --git a/modules/programs/neomutt/default.nix b/modules/programs/neomutt/default.nix index b144af0..3626341 100644 --- a/modules/programs/neomutt/default.nix +++ b/modules/programs/neomutt/default.nix @@ -50,7 +50,7 @@ in NeoMutt Index Flags =================== - Message state ($flag_chars) + Message state ($flag_chars) -- unchanged defaults N New - unread, arrived since you last checked O Old - unread, but seen in a previous session D Deleted - marked for deletion (pending expunge) @@ -58,18 +58,21 @@ in ! Flagged - important (toggle with F) * Tagged - selected for a bulk operation (toggle with t) r Replied - you've replied to this message - S Signed - PGP/SMIME signed - P Encrypted - PGP/SMIME encrypted - s Cert - contains a S/MIME certificate/key - K PGP key - contains a PGP public key (blank) - read, nothing else notable + Cryptography ($crypt_chars) +  Verified - signed, and the signature checks out +  Encrypted - PGP/SMIME encrypted +  Signed - PGP/SMIME signed (unverified) +  PGP key - message contains a PGP public key + (blank) - no cryptography info + Addressing ($to_chars) - + To you only - sent to you and only you - T To (with others) - you're in the To: list, among others - C Cc only - you're only in the Cc: list - F From you - sent by you - L Mailing list - sent to a list you're subscribed to +  To you only - sent to you and only you +  To (with others) - you're in the To: list, among others +  Cc only - you're only in the Cc: list +  From you - sent by you +  Mailing list - sent to a list you're subscribed to (blank) - not in To/Cc (e.g. Bcc, unlisted) Press q to close. @@ -359,6 +362,20 @@ in action = "next-unread-mailbox"; } + # --- filter/limit (vim: gf to 'find' or 'filter') --- + { + map = [ "index" ]; + key = "gf"; + action = "limit"; + } + + # --- filter/limit (vim: gf to 'find' or 'filter') --- + { + map = [ "index" ]; + key = "gF"; + action = "limit"; + } + # --- help message to show functions and keybindings --- { map = [ diff --git a/modules/programs/neomutt/theme.nix b/modules/programs/neomutt/theme.nix index b770975..52845ee 100644 --- a/modules/programs/neomutt/theme.nix +++ b/modules/programs/neomutt/theme.nix @@ -9,29 +9,36 @@ # Base16 OneDark Dark terminal colors for neomutt # Each column in the index receives a distinct color to keep the UI organized. - set index_format = " %5C │ %Z │ %{%d/%m/%y %H:%M} │ %-25.25a │ %s%* " + # Nerd Font icon-based flag/attachment/crypto indicators + # order: new, old, deleted, flagged, replied, old(unused), tagged, encrypt, ... + set flag_chars = "󰓹󰀼󰆴󰁟󰇰󰇮󰍩󰍨󰇱󰗚" + set to_chars = " " + set crypt_chars = " " + set attach_format = "%u%D%I %t%4n %T%.40d %> [%m/%M, %e%?C?, %C?, %s] " + + set index_format = " %5C │ %Z │ %{%d/%m/%y %H:%M} │ %-25.25a │ %s%* " # Hide the keybindings help bar at the top to save vertical space set help = no - # Empty the status bar content - set status_format = "  Unread: %5u │ 󰛏 New: %5n │  Tagged: %5t  %>   Filter: %V │  Sorted By: %s │" + # Status bar with Nerd Font icons per field + set status_format = "  Unread: %5u │ 󰛏 New: %5n │  Tagged: %5t │  Search: %f │  Filter: %v │  Sorted By: %s │" # --- Basic UI Colors -------------------------------------------------- # target foreground background color normal white default # base05 (Standard text) - color error red default # base08 (Red) + color error red default # base08 (Red) color tilde brightblack default # base03 (Dark Grey) - color message cyan default # base0C (Cyan) - color markers red default # base08 (Red) - color attachment magenta default # base0E (Magenta) - color search magenta default # base0E (Magenta) - color prompt cyan default # base0C (Questions/prompts) - color progress black yellow # base0A bg (Progress bar) + color message cyan default # base0C (Cyan) + color markers red default # base08 (Red) + color attachment magenta default # base0E (Magenta) + color search magenta default # base0E (Magenta) + color prompt cyan default # base0C (Questions/prompts) + color progress black yellow # 󰦖 base0A bg (Progress bar) # Selected row and status bar color status white brightblack # base05 on base03 - color indicator default brightblack # default on base03 (Selected email) + color indicator default brightblack # default on base03 (Selected email) color tree magenta default # base03 (Thread arrows) # Whole-line fallback for the index (base for anything not caught below) @@ -39,54 +46,54 @@ # --- Index Columns (The Multi-Color Table) ---------------------------- # Applies distinct colors to specific columns for ALL messages (~A) - color index_number cyan default "~A" # base05 (Fixed: was brightblack) - color index_date green default "~A" # base0B (Green) - color index_flags red default "~A" # base08 (Red) - color index_size cyan default "~A" # base0C (Cyan) - color index_author yellow default "~A" # base0A (Yellow) - color index_subject white default "~A" # base05 (Standard text for Read messages) - color index_collapsed yellow default # base0A (Collapsed thread count, %M) - color index_label magenta default # base0E (Message label, %y %Y) - color index_tag cyan default # base0C (Message tags, %G) - color index_tags cyan default # base0C (Transformed tags, %g %J) + color index_number cyan default "~A" # base05 (Fixed: was brightblack) + color index_date green default "~A" # base0B (Green) + color index_flags red default "~A" # base08 (Red) + color index_size cyan default "~A" # 󰈔 base0C (Cyan) + color index_author yellow default "~A" # base0A (Yellow) + color index_subject white default "~A" # base05 (Standard text for Read messages) + color index_collapsed yellow default # base0A (Collapsed thread count, %M) + color index_label magenta default # 󰓹 base0E (Message label, %y %Y) + color index_tag cyan default # base0C (Message tags, %G) + color index_tags cyan default # 󰓼 base0C (Transformed tags, %g %J) # --- Index Message States --------------------------------------------- - # By targeting *only* `index_subject`, we preserve your multi-color + # By targeting *only* `index_subject`, we preserve your multi-color # columns while still easily identifying unread or flagged emails. - color index_subject blue default "~U" # Unread: Blue (base0D) - color index_subject blue default "~N" # New: Blue (base0D) - color index_subject red default "~F" # Flagged: Red (base08) - color index_subject magenta default "~Q" # Replied: Magenta (base0E) - color index_subject black red "~D" # Deleted + color index_subject blue default "~U" # Unread: Blue (base0D) + color index_subject blue default "~N" # 󰄯 New: Blue (base0D) + color index_subject red default "~F" # Flagged: Red (base08) + color index_subject magenta default "~Q" # 󰛃 Replied: Magenta (base0E) + color index_subject black red "~D" # Deleted # This rule now colors the "email (name)" column as it is considered the 'author' color index_author yellow default "~A" color index_subject white default "~A" # %s - # We removed the ~R (Read) override so it stays white. + # We removed the ~R (Read) override so it stays white. # For Deleted (~D), if brightblack is still too dark to see, we can use a red background instead: - color index_subject black red "~D" # Deleted: Black on Red background + color index_subject black red "~D" # Deleted: Black on Red background # Thread collapsing states - color index_subject yellow default "~v" # Collapsed thread - color index_subject blue default "~v~(~N)" # Collapsed with unread inside - color index_subject red default "~v~(~F)" # Collapsed with flagged inside + color index_subject yellow default "~v" # Collapsed thread + color index_subject blue default "~v~(~N)" # 󰝜 Collapsed with unread inside + color index_subject red default "~v~(~F)" # 󰈺 Collapsed with flagged inside # Subtle zebra striping between adjacent index rows (barely-there contrast) color stripe_odd default default color stripe_even default default # --- Message Headers -------------------------------------------------- - color hdrdefault cyan default # base0C - color header yellow default "^(From|To|Cc|Bcc)" # base0A - color header blue default "^(Subject)" # base0D - color header green default "^(Date)" # base03 + color hdrdefault cyan default # base0C + color header yellow default "^(From|To|Cc|Bcc)" # base0A + color header blue default "^(Subject)" # base0D + color header green default "^(Date)" # base03 # Attachment header lines (shown above each MIME part in the pager) - color attach_headers cyan default + color attach_headers cyan default # # --- Message Body ----------------------------------------------------- - color quoted blue default # base0D + color quoted blue default # base0D color quoted1 cyan default # base0C color quoted2 yellow default # base0A color quoted3 red default # base08 @@ -97,7 +104,7 @@ color quoted8 red default # base08 color quoted9 magenta default # base0E - color signature green default # base0B + color signature green default # 󰛿 base0B color bold white default # base05 color underline white default # base05 @@ -105,18 +112,19 @@ color body blue default "([a-z][a-z0-9+-]*://[^ ]+)" # PGP - color body green default "(Good signature)" - color body red default "(BAD signature)" - color body brightblack default "^gpg: " + color body green default "(Good signature)" # verified + color body red default "(BAD signature)" # bad + color body brightblack default "^gpg: " # # --- Sidebar (was completely unset despite sidebar.enable = true) ----- + set sidebar_format = " %D%* %?N? %N?%?F? %F? " color sidebar_background default default # transparent, blends with terminal bg color sidebar_divider white default # base03 (matches old tree color) - color sidebar_ordinary white default # base05 (normal mailbox entries) - color sidebar_new green default # base0B (mailboxes with new mail) - color sidebar_flagged red default # base08 (mailboxes with flagged mail) - color sidebar_spool_file yellow default # base0A (your inbox/spool) + color sidebar_ordinary white default # base05 (normal mailbox entries) + color sidebar_new green default # 󰇮 base0B (mailboxes with new mail) + color sidebar_flagged red default # base08 (mailboxes with flagged mail) + color sidebar_spool_file yellow default # 󰇰 base0A (your inbox/spool) color sidebar_highlight white brightblack # base05 on base03 (cursor position) - color sidebar_indicator default brightblack # default on base03 (currently open mailbox) + color sidebar_indicator default brightblack # default on base03 (currently open mailbox) ''; } diff --git a/modules/programs/nixvim/plugins/lsp.nix b/modules/programs/nixvim/plugins/lsp.nix index c734ea2..7fc3ddd 100644 --- a/modules/programs/nixvim/plugins/lsp.nix +++ b/modules/programs/nixvim/plugins/lsp.nix @@ -6,6 +6,7 @@ enable = true; inlayHints = true; autoLoad = true; + keymaps.lspBuf = { K = "hover"; gD = "references"; @@ -13,46 +14,221 @@ gi = "implementation"; gt = "type_definition"; }; + servers = { - nil_ls = { + # -- System & Configuration -- + nixd = { enable = true; - }; - lua_ls = { + package = null; + }; # Nix + bashls = { + enable = true; + package = null; + }; # Bash/Shell + taplo = { + enable = true; + package = null; + }; # TOML + yamlls = { + enable = true; + package = null; + }; # YAML + jsonls = { + enable = true; + package = null; + }; # JSON + marksman = { + enable = true; + package = null; + }; # Markdown + + # -- Web Development (HTML/CSS/JS/TS) -- + html = { + enable = true; + package = null; + }; # HTML + cssls = { + enable = true; + package = null; + }; # CSS/SCSS/LESS + tailwindcss = { enable = true; package = null; + }; # Tailwind CSS + vtsls = { + # JS/TS (Modern fast wrapper for tsserver) + enable = true; + package = null; + settings = { + # Optional but recommended: stops huge generic types from taking over your screen + vtsls.experimental.maxInlayHintLength = 30; + + # TypeScript type inferences + typescript.inlayHints = { + parameterNames.enabled = "all"; + parameterTypes.enabled = true; + variableTypes.enabled = true; + propertyDeclarationTypes.enabled = true; + functionLikeReturnTypes.enabled = true; + enumMemberValues.enabled = true; + }; + + # JavaScript type inferences (via JSDoc) + javascript.inlayHints = { + parameterNames.enabled = "all"; + parameterTypes.enabled = true; + variableTypes.enabled = true; + propertyDeclarationTypes.enabled = true; + functionLikeReturnTypes.enabled = true; + enumMemberValues.enabled = true; + }; + }; }; - nixd = { + eslint = { enable = true; package = null; + }; # ESLint diagnostics/formatting + + # -- Web Frameworks -- + volar = { + # Vue + enable = true; + package = null; + tslsIntegration = false; }; - pyright = { + svelte = { + enable = true; + package = null; + }; # Svelte + astro = { enable = true; package = null; + }; # Astro + + # -- Scripting & High-Level Languages -- + basedpyright = { + # Python (Modern, faster fork of Pyright) + enable = true; + package = null; + settings.basedpyright.analysis.inlayHints = { + variableTypes = true; + callArgumentNames = true; + functionReturnTypes = true; + genericTypes = false; # can get noisy, opt-in + }; }; - ts_ls = { + ruff = { enable = true; package = null; + }; # Python (Ultra-fast linter/formatter) + ruby_lsp = { + enable = true; + package = null; + }; # Ruby (Shopify's modern standard) + lua_ls = { + # Lua + enable = true; + package = null; + settings.Lua.hint = { + enable = true; + arrayIndex = "Auto"; + setType = true; + paramName = "All"; + paramType = true; + }; }; + intelephense = { + enable = true; + package = null; + }; # PHP + elixirls = { + enable = true; + package = null; + }; # Elixir + + # -- Systems, Compiled, & Enterprise -- clangd = { enable = true; package = null; - }; - jsonls = { + }; # C/C++ (inlay hints on by default) + rust_analyzer = { + # Rust (inlay hints on by default) enable = true; package = null; + installCargo = false; + installRustc = false; }; - yamlls = { + gopls = { + # Go enable = true; package = null; + settings.gopls.hints = { + assignVariableTypes = true; + compositeLiteralFields = true; + compositeLiteralTypes = true; + constantValues = true; + functionTypeParameters = true; + parameterNames = true; + rangeVariableTypes = true; + }; }; - bashls = { + zls = { enable = true; package = null; + }; # Zig (inlay hints on by default) + jdtls = { + # Java + enable = true; + package = null; + settings.java.inlayHints.parameterNames.enabled = "all"; }; - gopls = { + kotlin_language_server = { + enable = true; + package = null; + }; # Kotlin + csharp_ls = { enable = true; package = null; + }; # C# (.NET) — no inlay hint support + hls = { + # Haskell + enable = true; + package = null; + installGhc = false; + settings.haskell.plugin."inlay-hints".globalOn = true; }; + ocamllsp = { + enable = true; + package = null; + }; # OCaml + + # -- Infrastructure & DevOps -- + dockerls = { + enable = true; + package = null; + }; # Dockerfile + docker_compose_language_service = { + enable = true; + package = null; + }; # Docker Compose + terraformls = { + enable = true; + package = null; + }; # Terraform/HCL + + # -- Data & APIs -- + sqlls = { + enable = true; + package = null; + }; # SQL + graphql = { + enable = true; + package = null; + }; # GraphQL + prismals = { + enable = true; + package = null; + }; # Prisma ORM }; }; } -- cgit v1.2.3