diff --git a/.config/ghostty/config b/.config/ghostty/config
index 4942ada..70a7174 100644
--- a/.config/ghostty/config
+++ b/.config/ghostty/config
@@ -10,7 +10,7 @@ bold-is-bright = true
freetype-load-flags = hinting,autohint,light
# Appearance
-theme = "vim_dark_high_contrast"
+theme = "space_carbon"
window-decoration = true
window-padding-x = 4
window-padding-y = 2
diff --git a/.config/ghostty/themes/vim_dark_high_contrast b/.config/ghostty/themes/space_carbon
similarity index 88%
rename from .config/ghostty/themes/vim_dark_high_contrast
rename to .config/ghostty/themes/space_carbon
index 7e4c747..d9bd6da 100644
--- a/.config/ghostty/themes/vim_dark_high_contrast
+++ b/.config/ghostty/themes/space_carbon
@@ -19,6 +19,6 @@ palette = 15=#ffffff
background = #000000
foreground = #c1c9d2
cursor-color = #c1c9d2
-cursor-text = #111111
-selection-background = #3e4043
+cursor-text = #0c0c0c
+selection-background = #393939
selection-foreground = #ffffff
diff --git a/.config/helix/config.toml b/.config/helix/config.toml
index 4365acb..925cff6 100644
--- a/.config/helix/config.toml
+++ b/.config/helix/config.toml
@@ -1,4 +1,4 @@
-theme = "vim_dark_high_contrast"
+theme = "space_carbon"
[editor]
rulers = [80, 100]
diff --git a/.config/helix/themes/space_carbon.toml b/.config/helix/themes/space_carbon.toml
new file mode 100644
index 0000000..4aaaf52
--- /dev/null
+++ b/.config/helix/themes/space_carbon.toml
@@ -0,0 +1,291 @@
+# Space Carbon — high-contrast theme
+# Inspired by vim_dark_high_contrast + IBM Carbon
+# Pure black background, vibrant syntax, structured gray UI
+
+# ── UI: Background & Window ──────────────────────────────────────────
+
+"ui.background" = { bg = "black" }
+"ui.background.separator" = { fg = "bg4" }
+"ui.window" = { fg = "bg4" }
+
+# ── UI: Cursor ────────────────────────────────────────────────────────
+
+"ui.cursor" = { fg = "black", bg = "fg3" }
+"ui.cursor.normal" = { fg = "black", bg = "blue" }
+"ui.cursor.insert" = { fg = "black", bg = "green" }
+"ui.cursor.select" = { fg = "black", bg = "magenta" }
+"ui.cursor.match" = { fg = "black", bg = "teal" }
+
+"ui.cursor.primary" = { fg = "black", bg = "fg1" }
+"ui.cursor.primary.normal" = { fg = "black", bg = "bright-blue" }
+"ui.cursor.primary.insert" = { fg = "black", bg = "bright-green" }
+"ui.cursor.primary.select" = { fg = "black", bg = "bright-magenta" }
+
+# ── UI: Gutter & Line Numbers ────────────────────────────────────────
+
+"ui.gutter" = { fg = "fg4" }
+"ui.gutter.selected" = { fg = "fg2" }
+"ui.linenr" = { fg = "fg4" }
+"ui.linenr.selected" = { fg = "yellow", modifiers = ["bold"] }
+
+# ── UI: Statusline ───────────────────────────────────────────────────
+
+"ui.statusline" = { fg = "fg1", bg = "bg2" }
+"ui.statusline.inactive" = { fg = "fg3", bg = "bg2" }
+"ui.statusline.normal" = { fg = "black", bg = "blue", modifiers = ["bold"] }
+"ui.statusline.insert" = { fg = "black", bg = "green", modifiers = ["bold"] }
+"ui.statusline.select" = { fg = "black", bg = "magenta", modifiers = ["bold"] }
+"ui.statusline.separator" = { fg = "bg4" }
+
+# ── UI: Bufferline ───────────────────────────────────────────────────
+
+"ui.bufferline" = { fg = "fg3", bg = "bg1" }
+"ui.bufferline.active" = { fg = "fg0", bg = "bg3", modifiers = ["bold"] }
+"ui.bufferline.background" = { bg = "bg1" }
+
+# ── UI: Popup, Menu, Help ───────────────────────────────────────────
+
+"ui.popup" = { fg = "fg1", bg = "bg2" }
+"ui.popup.info" = { fg = "fg1", bg = "bg2" }
+"ui.menu" = { fg = "fg1", bg = "bg2" }
+"ui.menu.selected" = { fg = "fg0", bg = "bg4", modifiers = ["bold"] }
+"ui.menu.scroll" = { fg = "cyan", bg = "bg3" }
+"ui.help" = { fg = "fg1", bg = "bg2" }
+
+# ── UI: Picker ───────────────────────────────────────────────────────
+
+"ui.picker.header" = { fg = "fg2", modifiers = ["bold"] }
+"ui.picker.header.column" = { fg = "fg3" }
+"ui.picker.header.column.active" = { fg = "cyan", modifiers = ["bold"] }
+
+# ── UI: Text ─────────────────────────────────────────────────────────
+
+"ui.text" = { fg = "fg1" }
+"ui.text.focus" = { fg = "fg0", bg = "bg3", modifiers = ["bold"] }
+"ui.text.inactive" = { fg = "fg3" }
+"ui.text.info" = { fg = "cyan" }
+"ui.text.directory" = { fg = "blue" }
+
+# ── UI: Virtual ──────────────────────────────────────────────────────
+
+"ui.virtual.ruler" = { bg = "bg2" }
+"ui.virtual.whitespace" = { fg = "bg4" }
+"ui.virtual.indent-guide" = { fg = "bg4" }
+"ui.virtual.inlay-hint" = { fg = "fg4", bg = "bg1" }
+"ui.virtual.inlay-hint.parameter" = { fg = "fg4", bg = "bg1", modifiers = ["italic"] }
+"ui.virtual.inlay-hint.type" = { fg = "fg4", bg = "bg1" }
+"ui.virtual.wrap" = { fg = "bg4" }
+"ui.virtual.jump-label" = { fg = "yellow", bg = "bg2", modifiers = ["bold"] }
+
+# ── UI: Selection & Cursorline ───────────────────────────────────────
+
+"ui.selection" = { bg = "bg4" }
+"ui.selection.primary" = { bg = "sel" }
+"ui.cursorline.primary" = { bg = "bg3" }
+"ui.cursorline.secondary" = { bg = "bg2" }
+"ui.cursorcolumn.primary" = { bg = "bg3" }
+"ui.cursorcolumn.secondary" = { bg = "bg2" }
+
+# ── UI: Highlight & Debug ───────────────────────────────────────────
+
+"ui.highlight" = { bg = "bg3", modifiers = ["bold"] }
+"ui.highlight.frameline" = { bg = "dim-blue" }
+"ui.debug.breakpoint" = { fg = "red" }
+"ui.debug.active" = { fg = "yellow" }
+
+# ── Diagnostics ──────────────────────────────────────────────────────
+
+"warning" = { fg = "yellow" }
+"error" = { fg = "red" }
+"info" = { fg = "blue" }
+"hint" = { fg = "cyan" }
+
+"diagnostic" = { fg = "fg2" }
+"diagnostic.error" = { underline = { color = "red", style = "curl" } }
+"diagnostic.warning" = { underline = { color = "yellow", style = "curl" } }
+"diagnostic.info" = { underline = { color = "blue", style = "curl" } }
+"diagnostic.hint" = { underline = { color = "cyan", style = "curl" } }
+"diagnostic.unnecessary" = { modifiers = ["dim"] }
+"diagnostic.deprecated" = { modifiers = ["crossed_out"] }
+
+"tabstop" = { bg = "bg3" }
+
+# ── Syntax: Attributes ───────────────────────────────────────────────
+
+"attribute" = { fg = "yellow", modifiers = ["italic"] }
+
+# ── Syntax: Types ────────────────────────────────────────────────────
+
+"type" = { fg = "cyan" }
+"type.builtin" = { fg = "cyan", modifiers = ["bold"] }
+"type.enum.variant" = { fg = "bright-magenta" }
+
+# ── Syntax: Constructors ─────────────────────────────────────────────
+
+"constructor" = { fg = "bright-cyan", modifiers = ["bold"] }
+
+# ── Syntax: Constants ────────────────────────────────────────────────
+
+"constant" = { fg = "orange" }
+"constant.builtin" = { fg = "orange", modifiers = ["bold"] }
+"constant.builtin.boolean" = { fg = "orange", modifiers = ["bold"] }
+"constant.character" = { fg = "green" }
+"constant.character.escape" = { fg = "magenta", modifiers = ["bold"] }
+"constant.numeric" = { fg = "orange" }
+"constant.numeric.integer" = { fg = "orange" }
+"constant.numeric.float" = { fg = "orange" }
+
+# ── Syntax: Strings ──────────────────────────────────────────────────
+
+"string" = { fg = "green" }
+"string.regexp" = { fg = "bright-yellow", modifiers = ["italic"] }
+"string.special" = { fg = "bright-green" }
+"string.special.path" = { fg = "bright-green" }
+"string.special.url" = { fg = "cyan", modifiers = ["underlined"] }
+"string.special.symbol" = { fg = "teal" }
+
+# ── Syntax: Comments ─────────────────────────────────────────────────
+
+"comment" = { fg = "fg3", modifiers = ["italic"] }
+"comment.line" = { fg = "fg3", modifiers = ["italic"] }
+"comment.line.documentation" = { fg = "fg2", modifiers = ["italic"] }
+"comment.block" = { fg = "fg3", modifiers = ["italic"] }
+"comment.block.documentation" = { fg = "fg2", modifiers = ["italic"] }
+
+# ── Syntax: Variables ────────────────────────────────────────────────
+
+"variable" = { fg = "fg1" }
+"variable.builtin" = { fg = "red", modifiers = ["bold"] }
+"variable.parameter" = { fg = "bright-cyan", modifiers = ["italic"] }
+"variable.other.member" = { fg = "fg2" }
+"variable.other.member.private" = { fg = "fg2", modifiers = ["italic"] }
+
+# ── Syntax: Labels ───────────────────────────────────────────────────
+
+"label" = { fg = "bright-magenta" }
+
+# ── Syntax: Punctuation ──────────────────────────────────────────────
+
+"punctuation" = { fg = "fg2" }
+"punctuation.delimiter" = { fg = "fg2" }
+"punctuation.bracket" = { fg = "fg2" }
+"punctuation.special" = { fg = "cyan" }
+
+# ── Syntax: Keywords ─────────────────────────────────────────────────
+
+"keyword" = { fg = "yellow", modifiers = ["bold"] }
+"keyword.control" = { fg = "yellow", modifiers = ["bold"] }
+"keyword.control.conditional" = { fg = "yellow", modifiers = ["bold"] }
+"keyword.control.repeat" = { fg = "yellow", modifiers = ["bold"] }
+"keyword.control.import" = { fg = "magenta", modifiers = ["italic"] }
+"keyword.control.return" = { fg = "red", modifiers = ["bold"] }
+"keyword.control.exception" = { fg = "red", modifiers = ["bold"] }
+"keyword.operator" = { fg = "fg2", modifiers = ["bold"] }
+"keyword.directive" = { fg = "magenta", modifiers = ["italic"] }
+"keyword.function" = { fg = "magenta" }
+"keyword.storage" = { fg = "yellow" }
+"keyword.storage.type" = { fg = "yellow" }
+"keyword.storage.modifier" = { fg = "yellow", modifiers = ["italic"] }
+
+# ── Syntax: Operators ────────────────────────────────────────────────
+
+"operator" = { fg = "fg2" }
+
+# ── Syntax: Functions ────────────────────────────────────────────────
+
+"function" = { fg = "blue" }
+"function.builtin" = { fg = "bright-blue", modifiers = ["bold"] }
+"function.method" = { fg = "blue" }
+"function.method.private" = { fg = "blue", modifiers = ["italic"] }
+"function.macro" = { fg = "magenta", modifiers = ["bold"] }
+
+# ── Syntax: Tags ─────────────────────────────────────────────────────
+
+"tag" = { fg = "blue" }
+"tag.builtin" = { fg = "bright-blue", modifiers = ["bold"] }
+
+# ── Syntax: Namespace ────────────────────────────────────────────────
+
+"namespace" = { fg = "cyan", modifiers = ["italic"] }
+
+# ── Syntax: Special ──────────────────────────────────────────────────
+
+"special" = { fg = "magenta" }
+
+# ── Markup ───────────────────────────────────────────────────────────
+
+"markup.heading" = { fg = "blue", modifiers = ["bold"] }
+"markup.heading.marker" = { fg = "fg3", modifiers = ["bold"] }
+"markup.heading.1" = { fg = "blue", modifiers = ["bold"] }
+"markup.heading.2" = { fg = "cyan", modifiers = ["bold"] }
+"markup.heading.3" = { fg = "teal", modifiers = ["bold"] }
+"markup.heading.4" = { fg = "green", modifiers = ["bold"] }
+"markup.heading.5" = { fg = "magenta", modifiers = ["bold"] }
+"markup.heading.6" = { fg = "yellow", modifiers = ["bold"] }
+
+"markup.list" = { fg = "blue" }
+"markup.list.checked" = { fg = "green", modifiers = ["crossed_out"] }
+"markup.list.unchecked" = { fg = "red" }
+
+"markup.bold" = { fg = "fg0", modifiers = ["bold"] }
+"markup.italic" = { fg = "fg0", modifiers = ["italic"] }
+"markup.strikethrough" = { fg = "fg3", modifiers = ["crossed_out"] }
+
+"markup.link" = { fg = "cyan", modifiers = ["italic"] }
+"markup.link.url" = { fg = "cyan", modifiers = ["underlined"] }
+"markup.link.text" = { fg = "bright-cyan" }
+"markup.link.label" = { fg = "bright-cyan" }
+
+"markup.quote" = { fg = "bright-cyan", modifiers = ["italic"] }
+
+"markup.raw" = { fg = "orange" }
+"markup.raw.block" = { fg = "fg1" }
+"markup.raw.inline" = { fg = "orange" }
+
+# ── Diff ─────────────────────────────────────────────────────────────
+
+"diff.plus" = { fg = "green" }
+"diff.minus" = { fg = "red" }
+"diff.delta" = { fg = "blue" }
+"diff.delta.moved" = { fg = "magenta" }
+"diff.delta.conflict" = { fg = "yellow" }
+
+# ── Palette ──────────────────────────────────────────────────────────
+
+[palette]
+black = "#000000"
+bg1 = "#0c0c0c"
+bg2 = "#161616"
+bg3 = "#262626"
+bg4 = "#393939"
+sel = "#454545"
+
+fg0 = "#ffffff"
+fg1 = "#c1c9d2"
+fg2 = "#8b95a0"
+fg3 = "#697386"
+fg4 = "#525252"
+
+red = "#ed5f74"
+green = "#1ea672"
+yellow = "#d97917"
+blue = "#688ef1"
+magenta = "#c96ed0"
+cyan = "#3a97d4"
+
+orange = "#e87b35"
+pink = "#ff7eb6"
+teal = "#08bdba"
+
+bright-red = "#fbb5b2"
+bright-green = "#85d996"
+bright-yellow = "#efc078"
+bright-blue = "#9fcdff"
+bright-magenta = "#f0b4e4"
+bright-cyan = "#7fd3ed"
+
+dim-red = "#3d1a22"
+dim-green = "#0d3326"
+dim-yellow = "#332200"
+dim-blue = "#1a2744"
+dim-cyan = "#0f2d44"
diff --git a/.config/lazygit/config.yml b/.config/lazygit/config.yml
index e6518be..59bca11 100644
--- a/.config/lazygit/config.yml
+++ b/.config/lazygit/config.yml
@@ -16,7 +16,7 @@ gui:
inactiveBorderColor:
- "#697386"
selectedLineBgColor:
- - "#3e4043"
+ - "#393939"
optionsTextColor:
- "#3a97d4"
unstagedChangesColor:
diff --git a/.config/openrazer/razer.conf b/.config/openrazer/razer.conf
new file mode 100644
index 0000000..54dc6bb
--- /dev/null
+++ b/.config/openrazer/razer.conf
@@ -0,0 +1,26 @@
+[General]
+# Verbose logging (logs debug messages - lotsa spam)
+verbose_logging = False
+
+
+[Startup]
+# Set the sync effects flag to true so any assignment of effects will work across devices
+sync_effects_enabled = True
+
+# Turn off the devices when the systems screensaver kicks in
+devices_off_on_screensaver = True
+
+# Battery notifier
+battery_notifier = True
+
+# Battery notification frequency [s] (0 to disable)
+battery_notifier_freq = 600
+
+# Battery notifications appear when device reaches this percentage
+battery_notifier_percent = 20
+
+# Apply effects saved to disk when daemon starts
+restore_persistence = False
+
+# Enable this if you dual boot with Windows and the effect isn't restored. Requires restore_persistence = True
+persistence_dual_boot_quirk = False
diff --git a/.config/zellij/config.kdl b/.config/zellij/config.kdl
index a9f85b3..f3558a8 100644
--- a/.config/zellij/config.kdl
+++ b/.config/zellij/config.kdl
@@ -1,183 +1,147 @@
+// Tmux-style: Ctrl+a prefix, locked mode default
+// Zero Alt-key captures — no clashes with helix
keybinds clear-defaults=true {
locked {
- bind "Ctrl space" { SwitchToMode "normal"; }
+ bind "Ctrl a" { SwitchToMode "tmux"; }
+ bind "Alt 1" { GoToTab 1; }
+ bind "Alt 2" { GoToTab 2; }
+ bind "Alt 3" { GoToTab 3; }
+ bind "Alt 4" { GoToTab 4; }
+ bind "Alt 5" { GoToTab 5; }
+ bind "Alt 6" { GoToTab 6; }
+ bind "Alt 7" { GoToTab 7; }
+ bind "Alt 8" { GoToTab 8; }
+ bind "Alt 9" { GoToTab 9; }
}
- pane {
- bind "left" { NewPane "left"; SwitchToMode "normal"; }
- bind "down" { NewPane "down"; SwitchToMode "normal"; }
- bind "up" { NewPane "up"; SwitchToMode "normal"; }
- bind "right" { NewPane "right"; SwitchToMode "normal"; }
- bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "normal"; }
- bind "f" { ToggleFocusFullscreen; SwitchToMode "normal"; }
- bind "Alt p" { SwitchToMode "normal"; }
- bind "r" { SwitchToMode "renamepane"; PaneNameInput 0; }
- bind "w" { ToggleFloatingPanes; SwitchToMode "normal"; }
- bind "z" { TogglePaneFrames; SwitchToMode "normal"; }
- }
- tab {
- bind "left" { GoToPreviousTab; }
- bind "down" { GoToNextTab; }
- bind "up" { GoToPreviousTab; }
- bind "right" { GoToNextTab; }
- bind "b" { BreakPane; SwitchToMode "normal"; }
- bind "n" { NewTab; SwitchToMode "normal"; }
- bind "r" { SwitchToMode "renametab"; TabNameInput 0; }
- bind "s" { ToggleActiveSyncTab; SwitchToMode "normal"; }
- bind "Alt t" { SwitchToMode "normal"; }
- bind "x" { CloseTab; SwitchToMode "normal"; }
- bind "tab" { ToggleTab; }
- }
- resize {
- bind "left" { Resize "Increase left"; }
- bind "down" { Resize "Increase down"; }
- bind "up" { Resize "Increase up"; }
- bind "right" { Resize "Increase right"; }
- bind "+" { Resize "Increase"; }
- bind "-" { Resize "Decrease"; }
- bind "=" { Resize "Increase"; }
- bind "Alt r" { SwitchToMode "normal"; }
- }
- move {
- bind "left" { MovePane "left"; }
- bind "down" { MovePane "down"; }
- bind "up" { MovePane "up"; }
- bind "right" { MovePane "right"; }
- bind "Alt m" { SwitchToMode "normal"; }
- }
- scroll {
- bind "e" { EditScrollback; SwitchToMode "normal"; }
- bind "s" { SwitchToMode "entersearch"; SearchInput 0; }
- }
- search {
- bind "left" { PageScrollUp; }
- bind "right" { PageScrollDown; }
- bind "c" { SearchToggleOption "CaseSensitivity"; }
- bind "Alt c" { ScrollToBottom; SwitchToMode "normal"; }
- bind "n" { Search "down"; }
- bind "o" { SearchToggleOption "WholeWord"; }
- bind "p" { Search "up"; }
- bind "w" { SearchToggleOption "Wrap"; }
- }
- session {
- bind "Alt o" { SwitchToMode "normal"; }
+
+ tmux {
+ bind "Ctrl a" { Write 1; SwitchToMode "locked"; }
+ bind "esc" { SwitchToMode "locked"; }
+
+ bind "h" "left" { MoveFocus "left"; }
+ bind "j" "down" { MoveFocus "down"; }
+ bind "k" "up" { MoveFocus "up"; }
+ bind "l" "right" { MoveFocus "right"; }
+
+ bind "n" { GoToNextTab; SwitchToMode "locked"; }
+ bind "p" { GoToPreviousTab; SwitchToMode "locked"; }
+ bind "Tab" { ToggleTab; SwitchToMode "locked"; }
+ bind "1" { GoToTab 1; SwitchToMode "locked"; }
+ bind "2" { GoToTab 2; SwitchToMode "locked"; }
+ bind "3" { GoToTab 3; SwitchToMode "locked"; }
+ bind "4" { GoToTab 4; SwitchToMode "locked"; }
+ bind "5" { GoToTab 5; SwitchToMode "locked"; }
+ bind "6" { GoToTab 6; SwitchToMode "locked"; }
+ bind "7" { GoToTab 7; SwitchToMode "locked"; }
+ bind "8" { GoToTab 8; SwitchToMode "locked"; }
+ bind "9" { GoToTab 9; SwitchToMode "locked"; }
+
+ bind "|" { NewPane "right"; SwitchToMode "locked"; }
+ bind "-" { NewPane "down"; SwitchToMode "locked"; }
+
+ bind "x" { CloseFocus; SwitchToMode "locked"; }
+ bind "z" { ToggleFocusFullscreen; SwitchToMode "locked"; }
+ bind "f" { ToggleFloatingPanes; SwitchToMode "locked"; }
+ bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "locked"; }
+ bind "b" { BreakPane; SwitchToMode "locked"; }
+
+ bind "c" { NewTab; SwitchToMode "locked"; }
+ bind "," { SwitchToMode "renametab"; TabNameInput 0; }
+ bind "X" { CloseTab; SwitchToMode "locked"; }
+
+ bind "space" { NextSwapLayout; }
+
+ // Spotlight-style fuzzy tab/session picker
bind "w" {
LaunchOrFocusPlugin "session-manager" {
floating true
move_to_focused_tab true
- }
- SwitchToMode "normal"
+ };
+ SwitchToMode "locked";
}
- }
- shared_except "locked" "tmux" {
- bind "Ctrl a" { SwitchToMode "tmux"; }
- }
- shared_except "locked" {
- bind "Alt left" { MoveFocus "left"; }
- bind "Alt down" { MoveFocus "down"; }
- bind "Alt up" { MoveFocus "up"; }
- bind "Alt right" { MoveFocus "right"; }
- bind "Ctrl space" { SwitchToMode "locked"; }
- bind "Alt +" { Resize "Increase"; }
- bind "Alt ," { GoToPreviousTab; }
- bind "Alt -" { Resize "Decrease"; }
- bind "Alt ." { GoToNextTab; }
- bind "Alt 1" { GoToTab 1; SwitchToMode "normal"; }
- bind "Alt 2" { GoToTab 2; SwitchToMode "normal"; }
- bind "Alt 3" { GoToTab 3; SwitchToMode "normal"; }
- bind "Alt 4" { GoToTab 4; SwitchToMode "normal"; }
- bind "Alt 5" { GoToTab 5; SwitchToMode "normal"; }
- bind "Alt 6" { GoToTab 6; SwitchToMode "normal"; }
- bind "Alt 7" { GoToTab 7; SwitchToMode "normal"; }
- bind "Alt 8" { GoToTab 8; SwitchToMode "normal"; }
- bind "Alt 9" { GoToTab 9; SwitchToMode "normal"; }
- bind "Alt <" { GoToPreviousTab; }
- bind "Alt =" { Resize "Increase"; }
- bind "Alt >" { GoToNextTab; }
- bind "Alt [" { PreviousSwapLayout; }
- bind "Alt ]" { NextSwapLayout; }
- bind "Alt n" { NewPane; }
- bind "Alt q" { Quit; }
- bind "Alt f" {
+
+ bind "o" {
LaunchPlugin "filepicker" {
floating true
close_on_selection true
};
+ SwitchToMode "locked";
}
+
+ bind "s" { SwitchToMode "scroll"; }
+ bind "r" { SwitchToMode "resize"; }
+ bind "m" { SwitchToMode "move"; }
+
+ bind "d" { Detach; }
+ bind "q" { Quit; }
}
- shared_except "locked" "move" {
- bind "Alt m" { SwitchToMode "move"; }
+
+ resize {
+ bind "h" "left" { Resize "Increase left"; }
+ bind "j" "down" { Resize "Increase down"; }
+ bind "k" "up" { Resize "Increase up"; }
+ bind "l" "right" { Resize "Increase right"; }
+ bind "+" "=" { Resize "Increase"; }
+ bind "-" { Resize "Decrease"; }
+ bind "Ctrl a" { SwitchToMode "tmux"; }
+ bind "esc" "enter" { SwitchToMode "locked"; }
}
- shared_except "locked" "session" {
- bind "Alt o" { SwitchToMode "session"; }
+
+ move {
+ bind "h" "left" { MovePane "left"; }
+ bind "j" "down" { MovePane "down"; }
+ bind "k" "up" { MovePane "up"; }
+ bind "l" "right" { MovePane "right"; }
+ bind "Ctrl a" { SwitchToMode "tmux"; }
+ bind "esc" "enter" { SwitchToMode "locked"; }
}
- shared_except "locked" "scroll" "search" {
- bind "Alt s" { SwitchToMode "scroll"; }
+
+ scroll {
+ bind "j" "down" { ScrollDown; }
+ bind "k" "up" { ScrollUp; }
+ bind "d" "PageDown" { PageScrollDown; }
+ bind "u" "PageUp" { PageScrollUp; }
+ bind "e" { EditScrollback; SwitchToMode "locked"; }
+ bind "/" { SwitchToMode "entersearch"; SearchInput 0; }
+ bind "Ctrl a" { SwitchToMode "tmux"; }
+ bind "esc" { SwitchToMode "locked"; }
}
- shared_except "locked" "tab" {
- bind "Alt t" { SwitchToMode "tab"; }
- }
- shared_except "locked" "pane" {
- bind "Alt p" { SwitchToMode "pane"; }
- }
- shared_except "locked" "resize" {
- bind "Alt r" { SwitchToMode "resize"; }
- }
- shared_except "normal" "locked" "entersearch" {
- bind "enter" { SwitchToMode "normal"; }
- }
- shared_except "normal" "locked" "entersearch" "renametab" "renamepane" {
- bind "esc" { SwitchToMode "normal"; }
- }
- shared_among "pane" "tmux" {
- bind "x" { CloseFocus; SwitchToMode "normal"; }
- }
- shared_among "scroll" "search" {
- bind "PageDown" { PageScrollDown; }
- bind "PageUp" { PageScrollUp; }
- bind "down" { ScrollDown; }
- bind "up" { ScrollUp; }
- bind "Alt s" { SwitchToMode "normal"; }
+
+ search {
+ bind "j" "down" { ScrollDown; }
+ bind "k" "up" { ScrollUp; }
+ bind "d" "PageDown" { PageScrollDown; }
+ bind "u" "PageUp" { PageScrollUp; }
+ bind "n" { Search "down"; }
+ bind "N" { Search "up"; }
+ bind "c" { SearchToggleOption "CaseSensitivity"; }
+ bind "w" { SearchToggleOption "Wrap"; }
+ bind "o" { SearchToggleOption "WholeWord"; }
+ bind "Ctrl a" { SwitchToMode "tmux"; }
+ bind "esc" { ScrollToBottom; SwitchToMode "locked"; }
}
+
entersearch {
- bind "Alt c" { SwitchToMode "scroll"; }
bind "esc" { SwitchToMode "scroll"; }
bind "enter" { SwitchToMode "search"; }
}
+
renametab {
- bind "esc" { UndoRenameTab; SwitchToMode "tab"; }
- }
- shared_among "renametab" "renamepane" {
- bind "Alt c" { SwitchToMode "normal"; }
+ bind "esc" { UndoRenameTab; SwitchToMode "locked"; }
+ bind "enter" { SwitchToMode "locked"; }
}
+
renamepane {
- bind "esc" { UndoRenamePane; SwitchToMode "pane"; }
- }
- shared_among "session" "tmux" {
- bind "d" { Detach; }
- }
- tmux {
- bind "left" { MoveFocus "left"; SwitchToMode "normal"; }
- bind "down" { MoveFocus "down"; SwitchToMode "normal"; }
- bind "up" { MoveFocus "up"; SwitchToMode "normal"; }
- bind "right" { MoveFocus "right"; SwitchToMode "normal"; }
- bind "space" { NextSwapLayout; }
- bind "," { SwitchToMode "renametab"; }
- bind "-" { NewPane "down"; SwitchToMode "normal"; }
- bind "[" { SwitchToMode "scroll"; }
- bind "Ctrl a" { Write 2; SwitchToMode "normal"; }
- bind "c" { NewTab; SwitchToMode "normal"; }
- bind "n" { GoToNextTab; SwitchToMode "normal"; }
- bind "p" { GoToPreviousTab; SwitchToMode "normal"; }
- bind "z" { ToggleFocusFullscreen; SwitchToMode "normal"; }
- bind "|" { NewPane "right"; SwitchToMode "normal"; }
+ bind "esc" { UndoRenamePane; SwitchToMode "locked"; }
+ bind "enter" { SwitchToMode "locked"; }
}
}
themes {
- vim_dark_high_contrast {
+ space_carbon {
text_unselected {
base 193 201 210
- background 62 64 67
+ background 57 57 57
emphasis_0 237 95 116
emphasis_1 58 151 212
emphasis_2 30 166 114
@@ -185,14 +149,14 @@ themes {
}
text_selected {
base 255 255 255
- background 62 64 67
+ background 57 57 57
emphasis_0 237 95 116
emphasis_1 58 151 212
emphasis_2 30 166 114
emphasis_3 201 110 208
}
ribbon_selected {
- base 17 17 17
+ base 12 12 12
background 30 166 114
emphasis_0 237 95 116
emphasis_1 217 121 23
@@ -200,7 +164,7 @@ themes {
emphasis_3 104 142 241
}
ribbon_unselected {
- base 17 17 17
+ base 12 12 12
background 227 232 238
emphasis_0 237 95 116
emphasis_1 193 201 210
@@ -217,7 +181,7 @@ themes {
}
table_cell_selected {
base 255 255 255
- background 62 64 67
+ background 57 57 57
emphasis_0 237 95 116
emphasis_1 58 151 212
emphasis_2 30 166 114
@@ -225,7 +189,7 @@ themes {
}
table_cell_unselected {
base 193 201 210
- background 62 64 67
+ background 57 57 57
emphasis_0 237 95 116
emphasis_1 58 151 212
emphasis_2 30 166 114
@@ -233,7 +197,7 @@ themes {
}
list_selected {
base 255 255 255
- background 62 64 67
+ background 57 57 57
emphasis_0 237 95 116
emphasis_1 58 151 212
emphasis_2 30 166 114
@@ -241,7 +205,7 @@ themes {
}
list_unselected {
base 193 201 210
- background 62 64 67
+ background 57 57 57
emphasis_0 237 95 116
emphasis_1 58 151 212
emphasis_2 30 166 114
@@ -267,7 +231,7 @@ themes {
base 30 166 114
background 0
emphasis_0 58 151 212
- emphasis_1 62 64 67
+ emphasis_1 57 57 57
emphasis_2 201 110 208
emphasis_3 104 142 241
}
@@ -298,9 +262,7 @@ plugins {
about location="zellij:about"
compact-bar location="zellij:compact-bar"
configuration location="zellij:configuration"
- filepicker location="zellij:strider" {
- cwd "/"
- }
+ filepicker location="zellij:strider"
plugin-manager location="zellij:plugin-manager"
session-manager location="zellij:session-manager"
status-bar location="zellij:status-bar"
@@ -311,8 +273,9 @@ plugins {
}
}
-simplified_ui false
-theme "vim_dark_high_contrast"
+default_mode "locked"
+pane_frames false
+theme "space_carbon"
default_layout "terminal"
scroll_buffer_size 100000
copy_on_select true
@@ -323,6 +286,8 @@ scrollback_lines_to_serialize 100000
disable_session_metadata false
show_startup_tips false
+web_server_port 8082
+
web_client {
cursor_blink false
cursor_style "block"
diff --git a/.config/zellij/layouts/compact-hx.kdl b/.config/zellij/layouts/compact-hx.kdl
deleted file mode 100644
index d84dd93..0000000
--- a/.config/zellij/layouts/compact-hx.kdl
+++ /dev/null
@@ -1,19 +0,0 @@
-layout {
- pane {
- borderless true
- size 1
- plugin location="zellij:compact-bar"
- }
- pane split_direction="horizontal" {
- pane {
- command "hx"
- args "."
- focus true
- size "75%"
- borderless true
- }
- pane {
- size "25%"
- }
- }
-}
diff --git a/.config/zellij/layouts/ide-full.kdl b/.config/zellij/layouts/ide-full.kdl
deleted file mode 100644
index e8487cc..0000000
--- a/.config/zellij/layouts/ide-full.kdl
+++ /dev/null
@@ -1,25 +0,0 @@
-layout {
- pane {
- borderless true
- size 1
- plugin location="zellij:compact-bar"
- }
- pane split_direction="vertical" {
- pane {
- command "hx-pick"
- args "."
- focus true
- size "60%"
- borderless true
- }
- pane stacked=true {
- pane {
- name "LazyGit"
- command "lazygit"
- }
- pane {
- name "Terminal"
- }
- }
- }
-}
diff --git a/.config/zellij/layouts/ide-layout.kdl b/.config/zellij/layouts/ide-layout.kdl
deleted file mode 100644
index cd64459..0000000
--- a/.config/zellij/layouts/ide-layout.kdl
+++ /dev/null
@@ -1,24 +0,0 @@
-layout {
- pane {
- borderless true
- size 1
- plugin location="zellij:compact-bar"
- }
- pane split_direction="vertical" {
- pane {
- edit "."
- focus true
- size "60%"
- borderless true
- }
- pane stacked=true {
- pane {
- name "LazyGit"
- command "lazygit"
- }
- pane {
- name "Terminal"
- }
- }
- }
-}
diff --git a/.config/zellij/layouts/ide.kdl b/.config/zellij/layouts/ide.kdl
new file mode 100644
index 0000000..cc4e869
--- /dev/null
+++ b/.config/zellij/layouts/ide.kdl
@@ -0,0 +1,46 @@
+layout {
+ pane split_direction="vertical" {
+ pane {
+ command "hx"
+ args "."
+ focus true
+ size "60%"
+ name "Editor"
+ }
+ pane stacked=true {
+ pane {
+ name "Terminal"
+ }
+ pane {
+ name "LazyGit"
+ command "lazygit"
+ }
+ }
+ }
+ pane size=1 borderless=true {
+ plugin location="zellij:compact-bar"
+ }
+
+ swap_tiled_layout name="stacked" {
+ tab {
+ pane stacked=true {
+ pane {
+ command "hx"
+ args "."
+ focus true
+ name "Editor"
+ }
+ pane {
+ name "Terminal"
+ }
+ pane {
+ name "LazyGit"
+ command "lazygit"
+ }
+ }
+ pane size=1 borderless=true {
+ plugin location="zellij:compact-bar"
+ }
+ }
+ }
+}
diff --git a/.config/zellij/layouts/terminal.kdl b/.config/zellij/layouts/terminal.kdl
index 809caa3..4b30bc5 100644
--- a/.config/zellij/layouts/terminal.kdl
+++ b/.config/zellij/layouts/terminal.kdl
@@ -1,12 +1,8 @@
layout {
- pane {
- borderless true
- size 1
- plugin location="zellij:compact-bar"
- }
- pane split_direction="vertical" {
pane {
- name "Terminal"
+ name "Terminal"
+ }
+ pane size=1 borderless=true {
+ plugin location="zellij:compact-bar"
}
- }
}
diff --git a/.local/bin/hx-pick b/.local/bin/hx-pick
deleted file mode 100755
index 59f46b7..0000000
--- a/.local/bin/hx-pick
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env bash
-# hx-pick: loop between file picker and helix
-# Select a file -> edit in helix -> back to picker on exit
-# Press Esc/Ctrl-C in the picker to drop to a normal shell
-
-dir="${1:-.}"
-cd "$dir" || exit 1
-
-while true; do
- file=$(find . -type f \
- -not -path './.git/*' \
- -not -path '*/node_modules/*' \
- -not -path '*/vendor/*' \
- -not -path '*/__pycache__/*' \
- -not -path '*/target/*' \
- -not -path '*/.build/*' \
- | sort \
- | fzf --height=100% --layout=reverse --border=rounded \
- --prompt="Edit > " \
- --header="Esc to exit to shell" \
- --preview='head -100 {}' \
- --preview-window=right:50%:wrap)
-
- [ -z "$file" ] && break
- hx "$file"
-done
diff --git a/.local/bin/razer-setup b/.local/bin/razer-setup
new file mode 100755
index 0000000..af8bd23
--- /dev/null
+++ b/.local/bin/razer-setup
@@ -0,0 +1,80 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+# razer-setup: configure Razer mouse with Space Carbon theme colors
+# Finds the first razermouse in sysfs and applies DPI, poll rate, and lighting
+
+find_mouse() {
+ for dev in /sys/bus/hid/drivers/razermouse/0003:*; do
+ [ -f "$dev/device_type" ] && echo "$dev" && return
+ done
+ echo "No Razer mouse found" >&2; exit 1
+}
+
+DEV=$(find_mouse)
+NAME=$(cat "$DEV/device_type")
+echo "Found: $NAME"
+
+# DPI stages: 400, 800, 1200, 1800 (active), 3200
+# Format: active_stage(1-based) then (X_hi X_lo Y_hi Y_lo) per stage
+set_dpi() {
+ local active=${1:-4}
+ printf '\x04' > "$DEV/dpi_stages" # stage count byte placeholder
+ # Actually the dpi_stages sysfs takes binary:
+ # byte 0 = active stage (1-indexed)
+ # then 4 bytes per stage: X_hi, X_lo, Y_hi, Y_lo
+ printf '\x04\x01\x90\x01\x90\x03\x20\x03\x20\x04\xb0\x04\xb0\x07\x08\x07\x08\x0c\x80\x0c\x80' > "$DEV/dpi_stages"
+ echo " DPI stages: 400, 800, 1200, 1800*, 3200"
+}
+
+set_poll_rate() {
+ echo "$1" > "$DEV/poll_rate"
+ echo " Poll rate: ${1}Hz"
+}
+
+set_color_static() {
+ # Space Carbon cyan: #3a97d4 = RGB(58, 151, 212)
+ printf '\x3a\x97\xd4' > "$DEV/matrix_effect_static"
+ echo " Lighting: static cyan (#3a97d4)"
+}
+
+set_brightness() {
+ printf "$(printf '\\x%02x' "$1")" > "$DEV/matrix_brightness"
+ echo " Brightness: $1/255"
+}
+
+case "${1:-apply}" in
+ apply)
+ set_dpi
+ set_poll_rate 500
+ set_color_static
+ set_brightness 128
+ echo "Done."
+ ;;
+ spectrum)
+ printf '' > "$DEV/matrix_effect_spectrum"
+ echo " Lighting: spectrum"
+ ;;
+ off)
+ printf '' > "$DEV/matrix_effect_none"
+ echo " Lighting: off"
+ ;;
+ color)
+ # Usage: razer-setup color RRGGBB
+ hex="${2:?Usage: razer-setup color RRGGBB}"
+ r=$((16#${hex:0:2}))
+ g=$((16#${hex:2:2}))
+ b=$((16#${hex:4:2}))
+ printf "\\x$(printf '%02x' $r)\\x$(printf '%02x' $g)\\x$(printf '%02x' $b)" > "$DEV/matrix_effect_static"
+ echo " Lighting: static #$hex"
+ ;;
+ status)
+ echo " Type: $(cat "$DEV/device_type")"
+ [ -f "$DEV/poll_rate" ] && echo " Poll rate: $(cat "$DEV/poll_rate")Hz"
+ [ -f "$DEV/charge_level" ] && echo " Battery: $(cat "$DEV/charge_level")%"
+ [ -f "$DEV/charge_status" ] && echo " Charging: $(cat "$DEV/charge_status")"
+ ;;
+ *)
+ echo "Usage: razer-setup [apply|spectrum|off|color RRGGBB|status]"
+ ;;
+esac
diff --git a/.zshrc b/.zshrc
index dfe2066..cfbc31f 100644
--- a/.zshrc
+++ b/.zshrc
@@ -13,7 +13,18 @@ export EDITOR='hx'
export OC_EDITOR="hx"
export SSH_AUTH_SOCK="/run/user/$(id -u)/keyring/ssh"
export MANPATH="/usr/local/man:$MANPATH"
-export FZF_DEFAULT_OPTS='--height 25% --layout=reverse --border'
+# fzf: use fd for file/dir finding, bat for previews, theme-matched colors
+export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
+export FZF_DEFAULT_OPTS=" \
+ --height=40% --layout=reverse --border=rounded --cycle --scroll-off=4 \
+ --color=bg+:#393939,fg+:#ffffff,hl:#3a97d4,hl+:#3a97d4 \
+ --color=info:#1ea672,prompt:#1ea672,pointer:#ed5f74,marker:#c96ed0 \
+ --color=spinner:#d97917,header:#3a97d4,border:#393939 \
+ --bind='ctrl-d:half-page-down,ctrl-u:half-page-up'"
+export FZF_CTRL_T_COMMAND='fd --type f --hidden --follow --exclude .git'
+export FZF_CTRL_T_OPTS="--preview 'bat --style=numbers --color=always --line-range :200 {}' --preview-window=right:50%:wrap"
+export FZF_ALT_C_COMMAND='fd --type d --hidden --follow --exclude .git'
+export FZF_ALT_C_OPTS="--preview 'ls --color=always {}'"
# Claude Code
export CLAUDE_CODE_USE_VERTEX=1
@@ -64,6 +75,10 @@ zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
zstyle ':completion:*' menu no
zstyle ':fzf-tab:complete:cd:*' fzf-preview 'ls --color $realpath'
zstyle ':fzf-tab:complete:__zoxide_z:*' fzf-preview 'ls --color $realpath'
+zstyle ':fzf-tab:complete:(hx|cat|bat|less|head|tail):*' fzf-preview \
+ 'bat --style=numbers --color=always --line-range :100 $realpath 2>/dev/null || ls --color $realpath'
+zstyle ':fzf-tab:complete:ls:*' fzf-preview 'ls --color $realpath'
+zstyle ':fzf-tab:*' switch-group '<' '>'
# === Tool Initialization ===
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
@@ -75,6 +90,7 @@ export NVM_DIR="$HOME/.nvm"
# Atuin env (adds ~/.atuin/bin to PATH)
[ -f "$HOME/.atuin/bin/env" ] && . "$HOME/.atuin/bin/env"
+eval "$(fzf --zsh)"
eval "$(zoxide init zsh)"
unalias zi 2>/dev/null; alias zi='__zoxide_zi'
eval "$(atuin init zsh)"
@@ -86,8 +102,26 @@ export ZSH_AUTOSUGGEST_STRATEGY=(atuin history completion)
bindkey '^[[1;5C' forward-word
# === Functions ===
-znew() {
- zellij action new-tab --layout "$1" --name "$2" --cwd "$3"
+
+znew() { zellij action new-tab --layout "$1" --name "$2" --cwd "$3"; }
+
+zwork() {
+ local layout_dir="${XDG_CONFIG_HOME:-$HOME/.config}/zellij/layouts"
+
+ local project
+ project=$(fd --type d --max-depth 2 . 2>/dev/null \
+ | fzf --prompt="Folder > " --preview='ls --color=always {}')
+ [ -z "$project" ] && return 0
+
+ local layout
+ layout=$(fd --type f --extension kdl . "$layout_dir" 2>/dev/null \
+ | sed 's|.*/||; s/\.kdl$//' \
+ | fzf --prompt="Layout > ")
+ [ -z "$layout" ] && return 0
+
+ local tab_name
+ echo -n "Tab name [${project%/}]: "; read tab_name
+ zellij action new-tab --layout "$layout" --name "${tab_name:-${project%/}}" --cwd "$PWD/$project"
}
# === Aliases ===
diff --git a/cheatsheet.html b/cheatsheet.html
new file mode 100644
index 0000000..2b65094
--- /dev/null
+++ b/cheatsheet.html
@@ -0,0 +1,216 @@
+
+
+
+
+Zellij + Helix Cheatsheet
+
+
+
+
+
Zellij + Helix Cheatsheet
+
+
+
+
+
Zellij — Prefix: Ctrl+a
+
Default mode is locked. Only Ctrl+a and Alt+1-9 are captured.
+
+
Pane Navigation
+
+ | Ctrl+a h/j/k/l or ←↓↑→ | Focus left / down / up / right |
+ | Ctrl+a | | Split right |
+ | Ctrl+a - | Split down |
+ | Ctrl+a x | Close pane |
+ | Ctrl+a z | Zoom (fullscreen toggle) |
+ | Ctrl+a f | Toggle floating panes |
+ | Ctrl+a e | Embed / float pane |
+ | Ctrl+a b | Break pane to new tab |
+
+
+
Tab Navigation
+
+ | Alt+1–9 | Jump to tab (direct, no prefix) |
+ | Ctrl+a n / p | Next / previous tab |
+ | Ctrl+a Tab | Toggle last two tabs |
+ | Ctrl+a c | New tab |
+ | Ctrl+a , | Rename tab |
+ | Ctrl+a X | Close tab |
+ | Ctrl+a Space | Next swap layout |
+
+
+
Session & Plugins
+
+ | Ctrl+a w | Session manager (fuzzy picker) |
+ | Ctrl+a o | File picker (strider) |
+ | Ctrl+a d | Detach session |
+ | Ctrl+a q | Quit zellij |
+
+
+
Sub-modes (from Ctrl+a)
+
+ | s → Scroll | j/k or ↓↑ scroll, d/u page, / search, e edit |
+ | r → Resize | h/j/k/l or ←↓↑→ resize, +/- grow/shrink |
+ | m → Move | h/j/k/l or ←↓↑→ move pane |
+
+
Esc exits any sub-mode. Ctrl+a from sub-mode → tmux mode.
+
+
Passthrough
+
+ | Ctrl+a Ctrl+a | Send literal Ctrl+a to app |
+ | Esc | Cancel / back to locked mode |
+
+
+
+
+
Shell — zsh / fzf / zellij helpers
+
+ | Ctrl+T | fzf file finder (with bat preview) |
+ | Alt+C | fzf cd into directory |
+ | Ctrl+R | Atuin history search |
+ | Ctrl+Right | Accept autosuggestion word-by-word |
+ zwork | Pick folder → layout → new zellij tab |
+ znew L N D | New tab: layout, name, directory |
+ zi | Zoxide interactive cd |
+
+
+
+
+
+
+
+
+
Helix — Normal Mode
+
+
Movement
+
+ | h/j/k/l | Left / down / up / right |
+ | w / b / e | Word forward / back / end |
+ | W / B / E | WORD forward / back / end |
+ | f/t char | Find / till char forward |
+ | F/T char | Find / till char backward |
+ | gg / ge | Go to start / end of file |
+ | Ctrl+d / Ctrl+u | Half-page down / up |
+ | Ctrl+f / Ctrl+b | Page down / up |
+ | % | Jump to matching bracket |
+
+
+
Selection & Editing
+
+ | v | Enter select mode |
+ | x | Select entire line |
+ | s | Select regex matches in selection |
+ | d / c | Delete / change selection |
+ | y / p | Yank / paste after |
+ | P | Paste before |
+ | r char | Replace with char |
+ | ~ | Toggle case |
+ | u / U | Undo / redo |
+ | > / < | Indent / dedent |
+ | J | Join lines |
+ | C | Copy selection to next line |
+ | Alt+s | Split selection on regex |
+ | Alt+d | Select all similar matches |
+ | Alt+. | Repeat last motion |
+ | Alt+, | Remove latest selection |
+ | Alt+o | Expand selection (treesitter) |
+ | Ctrl+a / Ctrl+x | Increment / decrement number |
+
+
+
Goto g
+
+ | gd | Go to definition |
+ | gr | Go to references |
+ | gi | Go to implementation |
+ | gy | Go to type definition |
+ | ga | Go to last accessed file |
+ | gh / gl | Go to line start / end |
+ | gs | Go to first non-blank |
+ | gn | Go to next buffer |
+ | gp | Go to previous buffer |
+
+
+
Space Menu Space
+
+ | Space f | File picker |
+ | Space F | File picker (cwd) |
+ | Space b | Buffer picker |
+ | Space j | Jumplist picker |
+ | Space s | Symbol picker |
+ | Space S | Workspace symbol picker |
+ | Space / | Global search |
+ | Space d | Diagnostics picker |
+ | Space a | Code action |
+ | Space r | Rename symbol |
+ | Space k | Show docs (hover) |
+ | Space h | Select all references |
+ | Space y / p | Yank / paste system clipboard |
+
+
+
Window Ctrl+w
+
+ | Ctrl+w v/s | Vertical / horizontal split |
+ | Ctrl+w h/j/k/l | Focus split |
+ | Ctrl+w q | Close split |
+ | Ctrl+w o | Only (close other splits) |
+
+
+
Match m
+
+ | mm | Jump to matching bracket |
+ | ms char | Surround with char |
+ | mr old new | Replace surround |
+ | md char | Delete surround |
+ | ma char | Select around |
+ | mi char | Select inside |
+
+
+
Insert Mode (from i/a/o/I/A/O)
+
+ | Esc | Back to normal |
+ | Ctrl+s | Save |
+ | Ctrl+w | Delete word backward |
+ | Ctrl+space | Trigger completion |
+
+
+
Commands :
+
+ | :w / :q / :wq | Save / quit / both |
+ | :o file | Open file |
+ | :bc | Close buffer |
+ | :sh cmd | Run shell command |
+ | :config-reload | Reload config |
+ | :theme name | Switch theme |
+
+
+
+
+
+
+
diff --git a/themes/palettes/space_carbon.sh b/themes/palettes/space_carbon.sh
new file mode 100644
index 0000000..881e597
--- /dev/null
+++ b/themes/palettes/space_carbon.sh
@@ -0,0 +1,61 @@
+# space_carbon - high-contrast theme
+# Inspired by vim_dark_high_contrast + IBM Carbon
+
+THEME_NAME="space_carbon"
+HELIX_THEME="space_carbon"
+
+# Base
+BG="#000000"
+FG="#c1c9d2"
+CURSOR="#c1c9d2"
+SELECTION_BG="#393939"
+SELECTION_FG="#ffffff"
+
+# Normal colors
+BLACK="#000000"
+RED="#ed5f74"
+GREEN="#1ea672"
+YELLOW="#d97917"
+BLUE="#688ef1"
+MAGENTA="#c96ed0"
+CYAN="#3a97d4"
+WHITE="#e3e8ee"
+
+# Bright colors
+BRIGHT_BLACK="#697386"
+BRIGHT_RED="#fbb5b2"
+BRIGHT_GREEN="#85d996"
+BRIGHT_YELLOW="#efc078"
+BRIGHT_BLUE="#9fcdff"
+BRIGHT_MAGENTA="#f0b4e4"
+BRIGHT_CYAN="#7fd3ed"
+BRIGHT_WHITE="#ffffff"
+
+# Dark/muted variants (for backgrounds, subtle highlights)
+DARK_RED="#3d1a22"
+DARK_GREEN="#0d3326"
+DARK_YELLOW="#332200"
+DARK_BLUE="#1a2744"
+DARK_MAGENTA="#602864"
+DARK_CYAN="#0f2d44"
+DARK_WHITE="#393939"
+
+# Gray scale (Carbon-inspired layering)
+BG1="#0c0c0c"
+BG2="#161616"
+BG3="#262626"
+BG4="#393939"
+
+# Additional accents
+ORANGE="#e87b35"
+PINK="#ff7eb6"
+TEAL="#08bdba"
+
+# Semantic
+ACCENT="$CYAN"
+SUCCESS="$GREEN"
+WARNING="$YELLOW"
+ERROR="$RED"
+INFO="$BLUE"
+MUTED="$BRIGHT_BLACK"
+SURFACE="$DARK_WHITE"