This is a just a fork of Helix. All claims rest with Helix maintainers and its copyright holders. I am just maintaining a fork. For more information please see Helix's readme file.
New Features
-
Noice Cmdline
-
Noice Notifications
-
Cutomizable Picker border changes (now supports the gradients and the border thickness)
-
Show function name in the status bar Add this following to your editor.statusline config
This fork of Helix implements the following pull requests. Future pull requests that are merged will be merged and listed here.
- helix-editor#13354 (index command)
- helix-editor#13053 (local search in buffer)
- helix-editor#12369 (basic support for icons)
- helix-editor#13306 (customizable color swatches)
- helix-editor#13430 (showing vertical preview)
- helix-editor#11497 (support for rounded corners)
- helix-editor#13197 (welcome screen)
- helix-editor#12520 (picker titles)
- helix-editor#12173 (buffer click)
- helix-editor#7988 (inactive panes background color)
- helix-editor#8546 (flex resize, focus mode) - updated with some of my code.
- helix-editor#12208 (goto hover command)
- helix-editor#13113 (add file path to the file names for similar file names)
- helix-editor#12574 (remove code column from diagnotics buffer)
- helix-editor#9875 (add code file picker)
- helix-editor#14121 (move lines - no more macros to move lines)
- helix-editor#14072 (auto-scrolling bufferline)
- helix-editor#13821 (fix block cursor in terminal)
- helix-editor#13760 (support workspace commands)
- helix-editor#13988 (add support to swap splits)
- helix-editor#13133 (Inline Git Blame - show commit info for current line)
- helix-editor#14453 (ruler chars)
Docs on build it from source. Summary for commands:
git clone https://github.com/gj1118/helix.git
cd helix
cargo install --path helix-term --locked
Or if you have just
installed, you can simply run just
recipes in the folder where you checked the source code. For more information please see the justfile
THEN THE IMPORTANT PART that is missing from the docs page(this way you get all the default themes and gramars), source
cp -R runtime ~/.config/helix/
hx -g fetch
hx -g build
Full Height Mode:
When use-full-height = true
is set along with style = "popup"
, the command line popup uses the full terminal height by removing the traditionally reserved bottom line.
# Maximum screen space (recommended for popup style)
[editor.cmdline]
style = "popup"
use-full-height = true
# Traditional with reserved space (default)
[editor.cmdline]
style = "popup"
use-full-height = false
Window Resizing:
Alt+w h
orAlt+w left
- Shrink window widthAlt+w l
orAlt+w right
- Grow window widthAlt+w j
orAlt+w down
- Shrink window heightAlt+w k
orAlt+w up
- Grow window height
Focus Mode:
Alt+w f
- Toggle focus mode (expands current window)
Sticky Mode:
Activate sticky mode with Alt+W
(Alt + Shift + w), then use single keys for repeated resizing:
h
orleft
- Shrink widthl
orright
- Grow widthj
ordown
- Shrink heightk
orup
- Grow heightf
- Toggle focus mode
Sticky mode stays active until you press a key that's not part of the window resize commands.
Window Resizing Configuration:
Configure panel resizing limits in your config.toml
:
[editor]
# Absolute maximum limits (in terminal character units)
max-panel-width = 50 # Set to 0 for dynamic limit based on terminal size
max-panel-height = 50 # Set to 0 for dynamic limit based on terminal size
# Percentage-based limits (used when absolute limits are set to 0)
max-panel-width-percent = 0.8 # 80% of terminal width (0.0-1.0)
max-panel-height-percent = 0.8 # 80% of terminal height (0.0-1.0)
Configuration Examples:
# Conservative: limit panels to 60% of terminal size
[editor]
max-panel-width = 0
max-panel-height = 0
max-panel-width-percent = 0.6
max-panel-height-percent = 0.6
# Aggressive: allow panels up to 95% of terminal size
[editor]
max-panel-width-percent = 0.95
max-panel-height-percent = 0.95
# Hybrid: absolute width limit, percentage height limit
[editor]
max-panel-width = 100
max-panel-height = 0
max-panel-height-percent = 0.8
Benefits:
- Prevents performance issues with very large panels
- Automatically adapts to your terminal size
- Smooth resizing throughout the entire range
- Configurable limits for different workflows
Choose the character used to render rulers in the foreground (defaults to ┊
).
Set it to an empty string to fall back to background-style rulers.
[editor]
rulers = [80, 100, 120]
ruler-char = "┊" # examples: "┊", "│", ".", "|"; set to "" for background style
Hover Documentation:
Space + k
- Show hover documentation in popupSpace + K
- Open hover documentation in navigable buffer (goto_hover)
The goto_hover
command opens documentation in a new scratch buffer where you can navigate, search, and copy text from long documentation.
Color Swatches Configuration:
Configure color swatches appearance in your config.toml
:
[editor.lsp]
# Enable/disable color swatches display (default: true)
display-color-swatches = true
# Customize the color swatch symbol (default: "■")
color-swatches-string = "●"
Configuration Examples:
# Circle symbols
[editor.lsp]
color-swatches-string = "●"
# Diamond symbols
[editor.lsp]
color-swatches-string = "◆"
# Hexagon symbols
[editor.lsp]
color-swatches-string = "⬢"
# Alternative hexagon
[editor.lsp]
color-swatches-string = "⬣"
# Default square (explicit)
[editor.lsp]
color-swatches-string = "■"
Color swatches appear next to color values in your code (CSS, configuration files, etc.) when LSP support is available, making it easier to visualize colors at a glance.
Move Lines Up/Down:
Ctrl+k
- Move current line or selected lines upCtrl+j
- Move current line or selected lines down
The line movement feature allows you to easily move the current line or multiple selected lines up and down in your document. This works with:
- Single line: When cursor is on a line, moves that entire line
- Multiple selections: Moves all selected lines while preserving their relative positions
- Discontinuous selections: Handles multiple separate line selections correctly
- Unicode content: Properly handles files with Unicode characters
Command Line Popup Configuration:
This fork includes a modern, noice.nvim-inspired command line with customizable icons and popup-style interface.
[editor.cmdline]
# Command line style: "bottom" (default) or "popup" (noice.nvim style)
style = "popup"
# Show command type icons (default: true)
show-icons = true
# Popup dimensions
min-popup-width = 40 # Minimum width for popup cmdline
max-popup-width = 80 # Maximum width for popup cmdline
# Use full height when style is popup (removes bottom space, default: false)
# Only applies when style = "popup"
use-full-height = true
# Customize command icons
[editor.cmdline.icons]
search = "🔍" # For search commands (/,?)
command = "⚙" # For command mode (:)
shell = "⚡" # For shell commands (!)
general = "💬" # For other prompts
Icon Theme Examples:
# Minimalist ASCII Style
[editor.cmdline.icons]
search = "/"
command = ":"
shell = "$"
general = ">"
# Nerd Font Icons
[editor.cmdline.icons]
search = "" # nf-fa-search
command = "" # nf-fa-cog
shell = "" # nf-fa-terminal
general = "" # nf-fa-comment
# Fun Emoji Theme
[editor.cmdline.icons]
search = "🔎"
command = "🛠️"
shell = "🖥️"
general = "📝"
# Disable all icons
[editor.cmdline]
show-icons = false
Features:
- Popup-style command line - Centered floating window instead of bottom line
- Command type icons - Visual indicators for different command types
- Enhanced completion - Better visual feedback and layout
- Customizable appearance - Full control over icons and dimensions
- Backward compatibility - Traditional bottom style still available
Gradient Borders Configuration:
Transform your Helix interface with beautiful, configurable gradient borders for all pickers and UI components.
[editor.gradient-borders]
enable = true # Enable/disable gradient borders
thickness = 2 # Border thickness (1-5)
direction = "horizontal" # "horizontal", "vertical", "diagonal", "radial"
start-color = "#8A2BE2" # Start color (hex format)
end-color = "#00BFFF" # End color (hex format)
middle-color = "#FF69B4" # Optional middle color for 3-color gradients
animation-speed = 3 # Animation speed (0-10, 0 = disabled)
Aesthetic Theme Examples:
# Cyberpunk Theme
[editor.gradient-borders]
enable = true
thickness = 2
direction = "horizontal"
start-color = "#FF0080" # Hot Pink
end-color = "#00FFFF" # Cyan
animation-speed = 2
# Sunset Theme
[editor.gradient-borders]
enable = true
thickness = 3
direction = "diagonal"
start-color = "#FF4500" # Orange Red
middle-color = "#FFD700" # Gold
end-color = "#FF69B4" # Hot Pink
animation-speed = 1
# Ocean Wave
[editor.gradient-borders]
enable = true
thickness = 2
direction = "vertical"
start-color = "#00CED1" # Dark Turquoise
end-color = "#4169E1" # Royal Blue
animation-speed = 4
# Matrix Style
[editor.gradient-borders]
enable = true
thickness = 1
direction = "radial"
start-color = "#00FF00" # Lime Green
end-color = "#008000" # Dark Green
animation-speed = 5
# Minimalist (No Animation)
[editor.gradient-borders]
enable = true
thickness = 1
direction = "horizontal"
start-color = "#6A5ACD" # Slate Blue
end-color = "#9370DB" # Medium Purple
animation-speed = 0
Border Thickness Styles:
- 1: Thin Unicode lines (─│┌┐└┘ square, ─│╭╮╰╯ rounded)
- 2: Thick Unicode lines (━┃┏┓┗┛)
- 3: Double Unicode lines (═║╔╗╚╝)
- 4: Block characters (█ style)
- 5: Full block characters
Rounded Corners Support:
Gradient borders automatically respect your existing rounded_corners
setting:
[editor]
# Enable rounded corners for all borders (traditional and gradient)
rounded-corners = true
[editor.gradient-borders]
enable = true
thickness = 1 # Thin borders work best with rounded corners
direction = "horizontal"
start-color = "#6A5ACD"
end-color = "#9370DB"
- Thickness 1: Full rounded corner support (╭╮╰╯)
- Thickness 2+: Uses square corners (no Unicode rounded equivalents)
- Block styles: Rounded corners don't apply to block characters
Features:
- Applied to all components: Pickers, command line popups, completion menus, preview panels
- Dynamic gradients: Smooth color transitions across any direction
- Animation support: Animated gradients with configurable speed
- Configurable thickness: From thin lines to chunky block borders
- Multiple directions: Horizontal, vertical, diagonal, and radial patterns
- 3-color gradients: Optional middle color for more complex gradients
- Performance optimized: Efficient rendering with minimal overhead
Note: Gradient borders are applied to file pickers, command palettes, completion menus, preview panels, and the noice.nvim-style command line popup. Traditional borders are used when gradient borders are disabled.
Local Development on MacOS:
To run the app locally on MacOS systems, run the following command on the terminal:
xattr -d com.apple.quarantine /path/to/your/app
(this removes the quarantine attribute)
Inline Blame Configuration:
Show git blame information as virtual text next to the current line you're editing. This feature displays the latest commit information for the line your cursor is on.
[editor]
# Inline blame configuration (inline table form)
inline-blame = { show = "cursor-line", format = "{author} • {time-ago} • {title}", auto-fetch = false }
Or in expanded format:
[editor.inline-blame]
# Show inline blame on specific lines (default: "never")
# Options: "cursor-line", "all", "never"
show = "cursor-line"
# Format string for blame display
# Available placeholders: {author}, {commit}, {time-ago}, {title}
format = "{author} • {time-ago} • {title}"
# Auto-fetch blame information (default: false)
auto-fetch = false
Keybindings:
<space>B
- Show git blame for current line in status line (manual blame)
Configuration Examples:
# Minimal blame display
[editor.inline-blame]
show = "cursor-line"
format = "{author} • {time-ago}"
# Detailed blame information
[editor.inline-blame]
show = "cursor-line"
format = "{commit} - {author} ({time-ago}): {title}"
# Show blame for all lines (can be noisy)
[editor.inline-blame]
show = "all"
format = "{author}"
auto-fetch = true
# Manual blame only (no inline display, use <space>B)
[editor.inline-blame]
show = "never"
Features:
- Virtual text display - Non-intrusive blame info that doesn't affect text editing
- Cursor-based - Shows blame only for the line you're currently on
- Customizable format - Control what information is displayed
- Manual fallback - Use
<space>B
to check blame without enabling inline display - Smart caching - Efficiently caches blame data to avoid repeated git operations
Control where signature help popups appear:
[editor.lsp]
# Position signature help above cursor (default)
signature-help-position = "above"
# Or below cursor
signature-help-position = "below"