A lightweight mode-line alternative that displays buffer information in the echo area using overlays.
⚠️ Early Development NoticeThis project is in its early stages and was developed with significant AI assistance (“vibe coding”). The code quality is not guaranteed and may contain bugs or rough edges. Contributions, suggestions, and improvements are very welcome!
- Lightweight - Minimal overhead using overlays instead of resizing minibuffer
- Mode-line compatible - Fully supports
mode-line-formatstyle specs viaformat-mode-line - Performant - Caching and throttled updates for smooth experience
- Customizable - Modular segment system for easy configuration
- Clean UI - Optionally hides mode-line with thin GUI separator line
Clone this repository and add to your load-path:
(add-to-list 'load-path "/path/to/miniline.el")
(require 'miniline)
(require 'miniline-segments)(use-package miniline
:straight (:host github :repo "dezzw/miniline.el")
:config
(require 'miniline-segments)
(setq miniline-format miniline-format-default)
(miniline-mode 1))(require 'miniline)
(require 'miniline-segments)
;; Use a predefined format
(setq miniline-format miniline-format-default)
;; Enable miniline
(miniline-mode 1)| Variable | Default | Description |
|---|---|---|
miniline-format | nil | Format spec (like mode-line-format) |
miniline-position | right | Alignment: right, left, or center |
miniline-update-interval | 0.5 | Update interval in seconds |
miniline-hide-mode-line | t | Hide the original mode-line |
miniline-display-gui-line | t | Show thin separator line (GUI only) |
miniline-minibuffer | t | Show miniline during minibuffer sessions |
miniline-second-line | nil | Display on second line of echo area |
miniline-right-padding | 0 | Extra right padding to prevent wrapping |
;; Default: modal, buffer, vcs, mode, checker
(setq miniline-format miniline-format-default)
;; Minimal: buffer + major mode only
(setq miniline-format miniline-format-minimal)
;; Full: all available segments
(setq miniline-format miniline-format-full)Create your own format using the segment functions:
(setq miniline-format
'(:eval (miniline-compose-segments
#'miniline-segment-modal
#'miniline-segment-buffer-info
#'miniline-segment-vcs
#'miniline-segment-major-mode
#'miniline-segment-checker
#'miniline-segment-time)))| Segment | Description |
|---|---|
miniline-segment-buffer-info | Buffer state (read-only) + name |
miniline-segment-buffer-name | Buffer name only |
miniline-segment-buffer-state | Read-only indicator |
miniline-segment-major-mode | Major mode icon or name |
miniline-segment-vcs | Git branch info |
miniline-segment-checker | Flymake/Flycheck diagnostics |
miniline-segment-flymake | Flymake diagnostics |
miniline-segment-flycheck | Flycheck diagnostics |
miniline-segment-lsp | LSP status (eglot/lsp-mode) |
miniline-segment-modal | Modal state (meow/evil) |
miniline-segment-meow | Meow editing state |
miniline-segment-evil | Evil editing state |
miniline-segment-project | Project name |
miniline-segment-position | Cursor position (line:col %) |
miniline-segment-remote-host | TRAMP remote host |
miniline-segment-time | Current time |
miniline-segment-encoding | Buffer encoding (non-UTF-8 only) |
Customize the appearance by modifying these faces:
miniline-mode-line- Active window separator lineminiline-mode-line-inactive- Inactive window separator lineminiline-buffer-name- Buffer nameminiline-buffer-read-only- Read-only indicatorminiline-major-mode- Major modeminiline-vcs- VCS/git infominiline-error/miniline-warning/miniline-info- Diagnosticsminiline-project- Project nameminiline-position- Position infominiline-lsp- LSP indicatorminiline-meow-normal/miniline-meow-insert/miniline-meow-motion- Modal states
nerd-icons- For beautiful icons in segments
This package was inspired by and learned from these excellent projects:
- mini-modeline by Kien Nguyen
- awesome-tray by Andy Stewart
- doom-modeline by Vincent Zhang
GPL-3.0. See LICENSE for details.


