aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/karabiner/karabiner.json36
-rw-r--r--config/ncmpcpp/config4
-rw-r--r--config/nvim/colors/tranquil-light.vim160
-rw-r--r--config/nvim/init.lua6
-rw-r--r--config/nvim/lazy-lock.json18
-rw-r--r--config/nvim/lua/lsp.lua118
-rw-r--r--config/nvim/lua/plugins.lua6
-rw-r--r--config/nvim/lua/treesitter_config.lua1
-rw-r--r--runcoms/zshrc3
-rw-r--r--scripts/colors.py59
10 files changed, 319 insertions, 92 deletions
diff --git a/config/karabiner/karabiner.json b/config/karabiner/karabiner.json
index 8a77fbc..71b622c 100644
--- a/config/karabiner/karabiner.json
+++ b/config/karabiner/karabiner.json
@@ -61,7 +61,17 @@
"product_id": 25903,
"vendor_id": 3141
},
- "manipulate_caps_lock_led": false
+ "manipulate_caps_lock_led": false,
+ "simple_modifications": [
+ {
+ "from": { "key_code": "left_command" },
+ "to": [{ "key_code": "left_option" }]
+ },
+ {
+ "from": { "key_code": "left_option" },
+ "to": [{ "key_code": "left_command" }]
+ }
+ ]
},
{
"identifiers": {
@@ -79,6 +89,30 @@
"to": [{ "key_code": "grave_accent_and_tilde" }]
}
]
+ },
+ {
+ "identifiers": {
+ "is_keyboard": true,
+ "product_id": 41617,
+ "vendor_id": 1241
+ },
+ "manipulate_caps_lock_led": false
+ },
+ {
+ "identifiers": {
+ "is_consumer": true,
+ "product_id": 41617,
+ "vendor_id": 1241
+ },
+ "ignore": false
+ },
+ {
+ "identifiers": {
+ "is_keyboard": true,
+ "product_id": 32777,
+ "vendor_id": 44064
+ },
+ "ignore": true
}
],
"fn_function_keys": [
diff --git a/config/ncmpcpp/config b/config/ncmpcpp/config
index f9627a8..56fd775 100644
--- a/config/ncmpcpp/config
+++ b/config/ncmpcpp/config
@@ -1,4 +1,6 @@
-mpd_music_dir "~/.config/mpd/music"
+mpd_host = music.bdr.place
+mpd_port = 6600
+mpd_music_dir "/mnt/hogganfield/archive/music/Music"
visualizer_output_name = Visualizer feed
visualizer_data_source = /tmp/mpd.fifo
diff --git a/config/nvim/colors/tranquil-light.vim b/config/nvim/colors/tranquil-light.vim
new file mode 100644
index 0000000..54f374d
--- /dev/null
+++ b/config/nvim/colors/tranquil-light.vim
@@ -0,0 +1,160 @@
+" Vim color scheme
+"
+" Name: tranquil-light.vim
+" Maintainer: Rubén Beltrán del Río <ben@nsovocal.com>
+" Last Change: 05 Mar 2025
+" License: public domain
+" Version: 1.1.0
+"
+" 256 color scheme using tranquil systems palette in light mode
+
+set background=light
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+
+let g:colors_name = "tranquil-light"
+
+" Variables & Constants
+hi @variable guifg=#0F261F
+hi link @lsp.type.unresolvedReference.rust DiagnosticUnderlineError
+hi Constant guifg=#0000F1
+
+" Types & Structs
+hi Structure guifg=#0000F1
+hi Type guifg=#0000F1 gui=bold cterm=bold
+hi Typedef guifg=#80FFCC
+hi Function guifg=#FF616B
+
+" Functions and Macros
+hi link @lsp.type.macro.rust Macro
+hi link @function.macro.rust Macro
+hi Macro guifg=#23C17C gui=bold cterm=bold
+hi Include guifg=#23C17C gui=none cterm=none
+hi Define guifg=#23C17C gui=italic cterm=italic
+hi PreProc guifg=#23C17C
+hi PreCondit guifg=#23C17C gui=bold cterm=bold
+
+" Language
+hi Comment guifg=#0F261F guibg=#FFB4F0
+hi SpecialComment guifg=#0F261F gui=bold cterm=bold
+hi Todo guifg=#0F261F guibg=bg gui=bold cterm=bold
+hi Delimiter guifg=#90A6A2
+hi Identifier guifg=#4F8FE6
+hi Statement guifg=#6F807C gui=bold cterm=bold
+hi Keyword guifg=#6F807C gui=bold,italic cterm=bold,italic
+hi Repeat guifg=#6F807C gui=bold cterm=bold
+hi Exception guifg=#6F807C gui=bold cterm=bold
+hi Operator guifg=#FA2B00
+hi Special guifg=#FA2B00 gui=italic cterm=italic
+hi SpecialChar guifg=#FA2B00 gui=bold cterm=bold
+hi Label guifg=#6F807C gui=none cterm=none
+hi StorageClass guifg=#6F807C gui=italic cterm=italic
+
+" Text
+hi Normal guifg=#0F261F guibg=NONE ctermbg=NONE
+hi Underlined guifg=#B5D1CC gui=underline cterm=underline
+hi Ignore guifg=#B5D1CC guibg=bg
+hi Error guifg=#FFFFFF guibg=#FA2B00
+hi Debug guifg=#FFB4F0 gui=bold cterm=bold
+
+" Specific Types
+hi Boolean guifg=#19a6b0
+hi Number guifg=#19a6b0
+hi Float guifg=#19A6B0
+hi Character guifg=#23C17C guibg=#FEFEFE
+hi String guifg=#23C17C guibg=#FEFEFE
+hi Conditional guifg=#FA2B00 gui=bold cterm=bold
+
+" File Browser
+hi Directory guifg=#23C17C gui=bold
+
+" Editor
+hi Cursor guifg=#FFFFFF guibg=#0000F1
+hi CursorLine guibg=#F1F1F1
+hi CursorColumn guibg=#F1F1F1
+hi LineNr guifg=#0000F1 guibg=#FEFEFE
+hi CursorLineNr guifg=#FFFFFF guibg=#0000F1
+hi NonText guifg=#90A6A2 guibg=none
+hi SpecialKey guifg=#0000F1
+hi ColorColumn guifg=#FFFFFF guibg=#FA4B00
+hi WinSep guifg=#0f261F
+hi SignColumn guifg=#23C17C guibg=#DAE6E3
+hi StatusLine guifg=#FFFFFF guibg=#0F261F
+hi StatusLineNC guifg=#DAE6E3 guibg=#90A6A2
+hi TabLineFill guifg=#FFFFFF guibg=#0F261F
+hi TabLine guifg=#FFFFFF guibg=#0F261F
+hi TabLineSel guifg=#FFFFFF guibg=#23C17C
+hi Tag guifg=#0F261F gui=underline cterm=underline guisp=#0000F1
+hi Title guifg=#4F8FE6
+hi VertSplit guifg=#0F261F guibg=#FFFFFF gui=bold cterm=bold
+
+" Editor / Search & Matching
+hi IncSearch guifg=#0F261F guibg=#FFAB00
+hi CurSearch guifg=#FFFFFF guibg=#23C17C
+hi Search guifg=#0F261F guibg=#FFBF6E
+hi Substitute guifg=#0F261F guibg=#29BDAD
+hi MatchParen guifg=#0F261F guibg=#FFAB00 gui=bold cterm=bold
+hi VisualNOS guibg=#0024CC
+hi Visual guibg=#0024CC guifg=#FFFFFF
+
+" Editor / Text Folding
+hi FoldColumn guifg=#FFFFFF guibg=#0F261F
+hi Folded guifg=#FFFFFF guibg=#90A6A2
+
+" Diffing
+hi DiffAdd guifg=#23C17C guibg=#F1F1F1
+hi DiffChange guifg=#FFFFFF guibg=#0000F1
+hi DiffDelete guifg=#FA2B00 guibg=#90A6A2
+hi DiffText gui=bold cterm=bold
+hi DiffTextAdd gui=bold cterm=bold
+hi link @text.diff.add DiffAdd
+hi link @text.diff.delete DiffDelete
+
+" Editor / Messages
+hi MsgArea guibg=#FFFFFF
+hi OkMsg guifg=#FFFFFF guibg=#23C17C gui=bold cterm=bold
+hi ErrorMsg guifg=#FFFFFF guibg=#FA2B00 gui=bold cterm=bold
+hi WarningMsg guifg=#0F261F guibg=#FFAB00 gui=bold cterm=bold
+hi StderrMsg guifg=#FA2B00
+hi StdoutMsg guifg=#0F261F
+hi ModeMsg guifg=#FFFFFF guibg=#0000F1
+hi MoreMsg guifg=#FFFFFF guibg=#23C17C
+hi Question guifg=#0F261F guibg=#80FFCC
+
+" Complete Menu
+hi Pmenu guifg=#0F261F guibg=#80FFCC
+hi PmenuSel guifg=#FFFFFF guibg=#0F261F
+hi PmenuSbar guibg=#0F261F
+hi PmenuThumb guifg=#80FFCC
+hi WildMenu guifg=#80FFCC guibg=#0F261F
+
+" WhichKey
+hi WhichKeyNormal guibg=#0F261F
+hi WhichKeyBorder guibg=#23C17C guifg=#FFFFFF
+hi WhichKeyDesc guifg=#90A6A2
+hi WhichKeyGroup guifg=#23C17C
+hi WhichKeyIcon guibg=#0F261F guifg=#FA2B00
+hi WhichKeyIconAzure guibg=#0F261F guifg=#FFB4F0
+hi WhichKeyIconBlue guibg=#0F261F guifg=#4F8FE6
+hi WhichKeyIconCyan guibg=#0F261F guifg=#80FFCC
+hi WhichKeyIconGreen guibg=#0F261F guifg=#23C17C
+hi WhichKeyIconGrey guibg=#0F261F guifg=#90A6A2
+hi WhichKeyIconOrange guibg=#0F261F guifg=#FFCFC4
+hi WhichKeyIconPurple guibg=#0F261F guifg=#FF616B
+hi WhichKeyIconRed guibg=#0F261F guifg=#FA2B00
+hi WhichKeyIconYellow guibg=#0F261F guifg=#FAED8F
+hi WhichKeySeparator guifg=#B5D1CC
+hi WhichKeyTitle guifg=#23C17C
+
+" LSP Related
+hi LspInlayHint guifg=#90A6A2
+hi DiagnosticError guifg=#FFFFFF guibg=#FA2B00
+hi DiagnosticWarn guifg=#0F261F guibg=#FAED8F
+hi DiagnosticInfo guifg=#FFFFFF guibg=#4F8FE6
+hi DiagnosticHint guifg=#0F261F guibg=#FFB4F0
+hi DiagnosticUnderlineError guifg=#0F261F guisp=#FA2B00 gui=undercurl,italic cterm=undercurl,italic
+
+" FZF
+hi @fzf.hlplus guifg=#FFFFFF
diff --git a/config/nvim/init.lua b/config/nvim/init.lua
index f614402..8bf4824 100644
--- a/config/nvim/init.lua
+++ b/config/nvim/init.lua
@@ -10,7 +10,7 @@ vim.opt.colorcolumn='80,150' -- Show color columns
-- Color
vim.opt.termguicolors = true
-vim.cmd.color('tranquil')
+vim.cmd.color('tranquil-light')
-- Tab Style (Always override with editorconfig)
vim.opt.tabstop = 2 -- 2 Spaces per tab
@@ -29,9 +29,11 @@ vim.opt.smartcase = true -- Unless we use both cases in searc
vim.opt.wildmode = 'list:longest,list:full' -- Autocomplete common matching string
-- Folding Behavior
-vim.opt.foldmethod = 'syntax' -- Use syntax highlight to define folds
+vim.opt.foldmethod = 'expr' -- Use treesitter for folds
+vim.opt.foldexpr = "v:lua.vim.treesitter.foldexpr()"
vim.opt.foldnestmax = 10 -- Max 10 folds
vim.opt.foldlevelstart = 99 -- Start with all folds open
+vim.opt.foldcolumn = "auto"
-- Relative Number Behavior
vim.api.nvim_create_autocmd({'FocusLost', 'InsertEnter'}, {
diff --git a/config/nvim/lazy-lock.json b/config/nvim/lazy-lock.json
index 3164297..9d6f765 100644
--- a/config/nvim/lazy-lock.json
+++ b/config/nvim/lazy-lock.json
@@ -1,21 +1,21 @@
{
"LargeFile": { "branch": "master", "commit": "3941a37b2b0288524300348a39521a46539bf9f6" },
- "coq_nvim": { "branch": "coq", "commit": "d2aeb3221cb46bfd1c51afd1b247d092c52ec0d6" },
- "fzf-lua": { "branch": "main", "commit": "7c21f30f6182ca2463681c0f287d032b48882d4f" },
+ "coq_nvim": { "branch": "coq", "commit": "a63d28a9aa59c20a503ce38608fb6bc7cb3842f4" },
+ "fzf-lua": { "branch": "main", "commit": "c102a4eeb10a04ed7e69ce80918923c4175c19d8" },
"gemini.vim": { "branch": "master", "commit": "c9efb59c97b71c28d4678c79fd21fbdd3a69d196" },
- "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
- "lazydev.nvim": { "branch": "main", "commit": "258d2a5ef4a3e3d6d9ba9da72c9725c53e9afcbd" },
+ "lazy.nvim": { "branch": "main", "commit": "1ea3c4085785f460fb0e46d2fe1ee895f5f9e7c1" },
+ "lazydev.nvim": { "branch": "main", "commit": "e28ce52fc7ff79fcb76f0e79ee6fb6182fca90b9" },
"neogen": { "branch": "main", "commit": "d7f9461727751fb07f82011051338a9aba07581d" },
"nota.nvim": { "branch": "main", "commit": "503bfaa93968986a9df5376c4543207c70dd2a07" },
- "nvim-autopairs": { "branch": "master", "commit": "23320e75953ac82e559c610bec5a90d9c6dfa743" },
- "nvim-dap": { "branch": "master", "commit": "7367cec8e8f7a0b1e4566af9a7ef5959d11206a7" },
+ "nvim-autopairs": { "branch": "master", "commit": "7a2c97cccd60abc559344042fefb1d5a85b3e33b" },
+ "nvim-dap": { "branch": "master", "commit": "6782b097af2417a4c3e33849b0a26ae2188bd7ea" },
"nvim-dap-ui": { "branch": "master", "commit": "cf91d5e2d07c72903d052f5207511bf7ecdb7122" },
"nvim-dap-vscode-js": { "branch": "main", "commit": "03bd29672d7fab5e515fc8469b7d07cc5994bbf6" },
- "nvim-lspconfig": { "branch": "master", "commit": "db8fef885009fdec0daeff3e5dda92e1f539611e" },
+ "nvim-lspconfig": { "branch": "master", "commit": "ac98db2f9f06a56498ec890a96928774eae412c3" },
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-treesitter-endwise": { "branch": "master", "commit": "a61a9de7965324d4019fb1637b66bfacdcb01f51" },
- "oil.nvim": { "branch": "master", "commit": "919e155fdf38e9148cdb5304faaaf53c20d703ea" },
+ "oil.nvim": { "branch": "master", "commit": "7e1cd7703ff2924d7038476dcbc04b950203b902" },
"oleoboard.nvim": { "branch": "main", "commit": "3652b39db3a8faca3fb767ace799479124bc79f3" },
"snes-syntax-vim": { "branch": "master", "commit": "a6a699c8905f7b6119bf91e44f960667d9f03d59" },
"tree-sitter-api-notation": { "branch": "main", "commit": "3113c6077d9ed1e662a891714ac00e1ee3bb7657" },
@@ -23,5 +23,5 @@
"vim-fugitive": { "branch": "master", "commit": "61b51c09b7c9ce04e821f6cf76ea4f6f903e3cf4" },
"vim-indent-object": { "branch": "master", "commit": "8ab36d5ec2a3a60468437a95e142ce994df598c6" },
"vim-togglelist": { "branch": "master", "commit": "48f0d30292efdf20edc883e61b121e6123e03df7" },
- "which-key.nvim": { "branch": "main", "commit": "904308e6885bbb7b60714c80ab3daf0c071c1492" }
+ "which-key.nvim": { "branch": "main", "commit": "b4177e3eaf15fe5eb8357ebac2286d488be1ed00" }
}
diff --git a/config/nvim/lua/lsp.lua b/config/nvim/lua/lsp.lua
index 7434504..6c69119 100644
--- a/config/nvim/lua/lsp.lua
+++ b/config/nvim/lua/lsp.lua
@@ -1,45 +1,37 @@
local coq = require('coq')
--- Prepare capabilities with COQ support
-local capabilities = vim.lsp.protocol.make_client_capabilities()
-capabilities.textDocument.completion.completionItem.snippetSupport = true
-capabilities = coq.lsp_ensure_capabilities(capabilities)
-
--- Configure each LSP server
-vim.lsp.config('ts_ls', {
+vim.lsp.config('ts_ls', coq.lsp_ensure_capabilities({
cmd = { 'typescript-language-server', '--stdio' },
- root_markers = { 'package.json', 'tsconfig.json', 'jsconfig.json' },
- capabilities = capabilities,
-})
+ filetypes = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact' },
+ root_markers = { 'package.json', 'tsconfig.json', 'jsconfig.json' }
+}))
+vim.lsp.enable('ts_ls')
-vim.lsp.config('eslint', {
+vim.lsp.config('eslint', coq.lsp_ensure_capabilities({
cmd = { 'vscode-eslint-language-server', '--stdio' },
- root_markers = { '.eslintrc', '.eslintrc.js', '.eslintrc.json', 'package.json' },
- capabilities = capabilities,
-})
+ filetypes = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact' },
+ root_markers = { '.eslintrc', '.eslintrc.js', '.eslintrc.json', 'package.json' }
+}))
+vim.lsp.enable('eslint')
-vim.lsp.config('svelte', {
+vim.lsp.config('svelte', coq.lsp_ensure_capabilities({
cmd = { 'svelteserver', '--stdio' },
- root_markers = { 'package.json', 'svelte.config.js' },
- capabilities = capabilities,
-})
+ filetypes = { 'svelte' },
+ root_markers = { 'package.json', 'svelte.config.js' }
+}))
+vim.lsp.enable('svelte')
-vim.lsp.config('pyright', {
+vim.lsp.config('pyright', coq.lsp_ensure_capabilities({
cmd = { 'pyright-langserver', '--stdio' },
- root_markers = { 'pyproject.toml', 'setup.py', 'requirements.txt' },
- capabilities = capabilities,
-})
-
-vim.lsp.config('dartls', {
- cmd = { 'dart', 'language-server', '--protocol=lsp' },
- root_markers = { 'pubspec.yaml' },
- capabilities = capabilities,
-})
+ filetypes = { 'python' },
+ root_markers = { 'pyproject.toml', 'setup.py', 'requirements.txt' }
+}))
+vim.lsp.enable('pyright')
-vim.lsp.config('rust_analyzer', {
+vim.lsp.config('rust_analyzer', coq.lsp_ensure_capabilities({
cmd = { 'rust-analyzer' },
+ filetypes = { 'rust' },
root_markers = { 'Cargo.toml', 'rust-project.json' },
- capabilities = capabilities,
settings = {
['rust-analyzer'] = {
imports = {
@@ -57,61 +49,35 @@ vim.lsp.config('rust_analyzer', {
enable = true
},
checkOnSave = {
+ enable = true,
command = "clippy"
}
},
},
-})
+}))
+vim.lsp.enable('rust_analyzer')
-vim.lsp.config('lua_ls', {
+vim.lsp.config('lua_ls', coq.lsp_ensure_capabilities({
cmd = { 'lua-language-server' },
+ filetypes = { 'lua' },
root_markers = { '.luarc.json', '.luarc.jsonc', '.luacheckrc', 'stylua.toml', 'selene.toml' },
- capabilities = capabilities,
-})
-
--- Auto-enable LSP servers based on filetype
-vim.api.nvim_create_autocmd('FileType', {
- pattern = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact' },
- callback = function()
- vim.lsp.enable('ts_ls')
- vim.lsp.enable('eslint')
- end,
-})
+}))
+vim.lsp.enable('lua_ls')
-vim.api.nvim_create_autocmd('FileType', {
- pattern = 'svelte',
- callback = function()
- vim.lsp.enable('svelte')
- end,
-})
-
-vim.api.nvim_create_autocmd('FileType', {
- pattern = 'python',
- callback = function()
- vim.lsp.enable('pyright')
- end,
-})
-
-vim.api.nvim_create_autocmd('FileType', {
- pattern = 'dart',
- callback = function()
- vim.lsp.enable('dartls')
- end,
-})
-
-vim.api.nvim_create_autocmd('FileType', {
- pattern = 'rust',
- callback = function()
- vim.lsp.enable('rust_analyzer')
- -- Enable inlay hints for Rust
- vim.lsp.inlay_hint.enable(true, { bufnr = 0 })
- end,
-})
+vim.lsp.config('gleam', coq.lsp_ensure_capabilities({
+ cmd = { 'gleam', 'lsp' },
+ filetypes = { 'gleam' },
+ root_markers = { 'gleam.toml' },
+}))
+vim.lsp.enable('gleam')
-vim.api.nvim_create_autocmd('FileType', {
- pattern = 'lua',
- callback = function()
- vim.lsp.enable('lua_ls')
+-- Enable inlay hints for Rust when LSP attaches
+vim.api.nvim_create_autocmd('LspAttach', {
+ callback = function(args)
+ local client = vim.lsp.get_client_by_id(args.data.client_id)
+ if client and client.name == 'rust_analyzer' then
+ vim.lsp.inlay_hint.enable(true, { bufnr = args.buf })
+ end
end,
})
diff --git a/config/nvim/lua/plugins.lua b/config/nvim/lua/plugins.lua
index 882c76d..ce637e9 100644
--- a/config/nvim/lua/plugins.lua
+++ b/config/nvim/lua/plugins.lua
@@ -28,9 +28,9 @@ require('lazy').setup({
['fg'] = {'fg', 'Normal'},
['bg'] = {'bg', 'Normal'},
['hl'] = {'fg', 'Comment'},
- ['fg+'] = {'fg', 'CursorLine'},
- ['bg+'] = {'bg', 'CursorLine'},
- ['hl+'] = {'fg', 'Statement'},
+ ['fg+'] = {'fg', 'Type'},
+ ['bg+'] = {'bg', 'Comment'},
+ ['hl+'] = {'fg', '@fzf.hlplus'},
['info'] = {'fg', 'PreProc'},
['prompt'] = {'fg', 'Conditional'},
['pointer'] = {'fg', 'Exception'},
diff --git a/config/nvim/lua/treesitter_config.lua b/config/nvim/lua/treesitter_config.lua
index ded65ac..16986d6 100644
--- a/config/nvim/lua/treesitter_config.lua
+++ b/config/nvim/lua/treesitter_config.lua
@@ -8,6 +8,7 @@ require'nvim-treesitter.configs'.setup {
'diff',
'dockerfile',
'gitcommit',
+ 'gleam',
'graphql',
'html',
'htmldjango',
diff --git a/runcoms/zshrc b/runcoms/zshrc
index 550bb09..041d4ba 100644
--- a/runcoms/zshrc
+++ b/runcoms/zshrc
@@ -93,3 +93,6 @@ fi
if [[ -s "~/.asdf/plugins/java/set-java-home.zsh" ]]; then
. ~/.asdf/plugins/java/set-java-home.zsh
fi
+
+# Difftastic
+export DFT_BACKGROUND=light
diff --git a/scripts/colors.py b/scripts/colors.py
new file mode 100644
index 0000000..ccc6d51
--- /dev/null
+++ b/scripts/colors.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python3
+
+# ANSI color codes
+colors = {
+ 'black': 30,
+ 'red': 31,
+ 'green': 32,
+ 'yellow': 33,
+ 'blue': 34,
+ 'magenta': 35,
+ 'cyan': 36,
+ 'white': 37,
+ 'bright_black': 90,
+ 'bright_red': 91,
+ 'bright_green': 92,
+ 'bright_yellow': 93,
+ 'bright_blue': 94,
+ 'bright_magenta': 95,
+ 'bright_cyan': 96,
+ 'bright_white': 97
+}
+
+backgrounds = {
+ 'black': 40,
+ 'red': 41,
+ 'green': 42,
+ 'yellow': 43,
+ 'blue': 44,
+ 'magenta': 45,
+ 'cyan': 46,
+ 'white': 47,
+ 'bright_black': 100,
+ 'bright_red': 101,
+ 'bright_green': 102,
+ 'bright_yellow': 103,
+ 'bright_blue': 104,
+ 'bright_magenta': 105,
+ 'bright_cyan': 106,
+ 'bright_white': 107
+}
+
+pangram = "Sphinx of black quartz, judge my vow"
+
+print("=" * 60)
+print("QUARTZ SPHINX PANGRAM - ALL COLOR COMBINATIONS")
+print("=" * 60)
+print()
+
+for bg_name, bg_code in backgrounds.items():
+ print(f"\n--- Background: {bg_name.upper().replace('_', ' ')} ---")
+ for fg_name, fg_code in colors.items():
+ # Create the ANSI escape sequence
+ colored_text = f"\033[{fg_code};{bg_code}m{pangram}\033[0m"
+ print(f"{fg_name:20} | {colored_text}")
+ print()
+
+print("=" * 60)
+print("Total combinations:", len(colors) * len(backgrounds))
+print("=" * 60)