aboutsummaryrefslogtreecommitdiffstats
path: root/modules/programs
diff options
context:
space:
mode:
Diffstat (limited to 'modules/programs')
-rw-r--r--modules/programs/neomutt/default.nix37
-rw-r--r--modules/programs/neomutt/theme.nix102
-rw-r--r--modules/programs/nixvim/plugins/lsp.nix198
3 files changed, 269 insertions, 68 deletions
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
};
};
}