Thank you for visiting!
My little window on internet allowing me to share several of my passions
Categories:
- OpenBSD
- FreeBSD
- PEKwm
- Zsh
- Nvim
- VM
- High Availability
- vdcron
- My Sysupgrade
- FreeBSD
- Nas
- VPN
- DragonflyBSD
- fapws
- Alpine Linux
- Openbox
- Desktop
- Security
- yabitrot
- nmctl
- Tint2
- Firewall
- Project Management
- Hifi
- Alarm
Most Popular Articles:
Last Articles:
My last neovim config facilitating Python, shell and html/css development
Posted on 2025-08-06 22:26:00 from Vincent in Nvim
Neovim configurations are never set in stone; they’re always evolving. But there comes a moment when you feel you’ve maximized what your setup can do for you. Every component is installed, configured, and working seamlessly, making your daily Neovim experience smooth and efficient. That’s exactly where I am with this config. It perfectly suits my needs, and I haven’t felt the urge to tweak it for weeks—maybe even months. It feels like I’ve hit a sweet spot. How long will this last? I’m not sure. But I’m excited to share it in my upcoming posts.

Introduction
My Neovim configuration, powered by the Lazy.nvim plugin manager, is tailored to my specific needs as a developer working primarily with Python, shell scripting, and HTML/CSS. This setup enhances productivity by providing autocompletion for variable and function names, highlighting coding errors, and flagging bad programming practices, all while maintaining a streamlined and efficient editing environment. Below, I’ll walk through the plugins and key settings that make this possible, focusing on their roles and how they integrate into a cohesive workflow.
Installation
You can find my config here: init.lua
But there is few pre-requisites.
On a FreeBSD machine, you have to add the following packages:
pkg install neovim py311-pynvim ripgrep python3 git tree-sitter py311-python-lsp-server hs-ShellCheck
Fell free to adapt the command to your own operating system.
Lazy.nvim: The Plugin Manager
At the heart of this configuration is Lazy.nvim, a lightweight and performant plugin manager that simplifies installing and managing plugins. It ensures my Neovim environment is fast and easy to maintain, with a clean setup process that clones the plugin manager into the appropriate data directory if it’s not already present. Lazy.nvim also allows specifying fallback colorschemes, my favorite ones are ron and habamax, to ensure a consistent look during plugin installation.
Plugins for a Tailored Development Experience
The plugins in this configuration are carefully chosen to support Python, shell, and HTML/CSS development, each contributing to a seamless coding experience.
The nvim-lspconfig plugin integrates Neovim’s built-in Language Server Protocol (LSP) client, enabling IDE-like features such as go-to-definition, hover documentation, and code actions. For Python, it configures the pylsp server with pylint enabled (ignoring specific warnings like long lines) and pycodestyle disabled to avoid redundant linting, while jedi_completion enhances Python-specific autocompletion.
Autocompletion is handled by nvim-cmp, a flexible completion engine that pulls suggestions from multiple sources. It’s paired with cmp-nvim-lsp for LSP-driven completions, cmp-buffer for buffer-based suggestions, cmp-path for file path completions, and cmp-nvim-lsp-signature-help for displaying function signatures as I type.
The LuaSnip plugin complements this by enabling snippet expansion, allowing me to insert reusable code templates effortlessly. Keybindings like
For syntax highlighting and code parsing, nvim-treesitter leverages Tree-sitter to provide accurate and visually appealing highlighting for Python and Bash, along with smart indentation. This ensures my code is easy to read and properly formatted.
shellcheck.nvim integrates ShellCheck to lint my Python and Bash scripts, catching errors and suggesting improvements to maintain high-quality shell code.
For HTML/CSS development, nvim-ts-autotag simplifies tag management by automatically closing and renaming paired HTML/XML tags, streamlining the process of writing markup. The ccc.nvim plugin enhances CSS work by highlighting color codes (like #FF0000) and offering a color picker, making it easier to work with visual styles.
In markdown or in several other files, hrsh7th/cmp-emoji allows me to add emoji by first type column key ":", then the emoji's name.
Core Neovim Settings
Beyond plugins, this config includes several Neovim settings to create a comfortable and efficient editing environment. The leader key is set to the spacebar for easy access to custom keybindings, such as
Line numbers, both absolute and relative, are enabled to aid navigation, while tabs and indentation are set to four spaces with smart indentation for consistent formatting.
True color support and a persistent sign column ensure a modern, distraction-free interface, and the ron colorscheme provides a clean, readable aesthetic.
Enhancing Productivity
This configuration shines in its ability to complete variable and function names dynamically, thanks to the interplay of nvim-cmp, LSP, and snippets. It also excels at catching coding errors and bad practices through pylint for Python and ShellCheck for Bash, with diagnostics displayed in a floating window or the statusline. The statusline itself is customized to show the current file, status flags, and line-specific diagnostics with intuitive icons (e.g., ⛔ for errors, ⚠️ for warnings), keeping me informed without breaking my workflow.
Conclusion
This Lazy.nvim-based Neovim setup is a powerful, tailored solution for my Python, shell, and HTML/CSS development needs. By combining LSP-driven features, robust autocompletion, syntax highlighting, and linting, it ensures I can write clean, efficient code with minimal friction. The thoughtful settings and keybindings tie it all together, creating an editing environment that’s both productive and enjoyable to use.
Feel free to use part of it in you own init.lua config file.
Do not hesitate to add a comments if this had help you in you nvim configs.