diff --git a/README.md b/README.md
index 37efcb6..0c71a9a 100644
--- a/README.md
+++ b/README.md
@@ -1,24 +1,45 @@
-# incline.nvim [](https://mit-license.org) [](https://github.com/b0o/incline.nvim/actions/workflows/test.yaml)
+# 🎈 incline.nvim
-Incline is a plugin for creating lightweight floating statuslines. It's best used with Neovim's global statusline (`set laststatus=3`).
+[](https://mit-license.org) [](https://github.com/b0o/incline.nvim/actions/workflows/test.yaml)
+
+Incline is a plugin for creating lightweight floating statuslines. It works great with Neovim's global statusline (`:set laststatus=3`).
Why use Incline instead of Neovim's built-in winbar? Incline:
-- Takes up only the amount of space it needs, leaving the rest of the line available for your code.
+- Only takes up the amount of space it needs, leaving the rest of the line available for your code.
- Is highly configurable and themeable using Lua.
- Can be shown/hidden dynamically based on cursor position, focus, buffer type, or any other condition.
- Can be positioned at the top or bottom, left or right side of each window.
-- Can even be used in combination with the winbar, if you really want!

-As opposed to other statusline plugins, Incline's appearance is not pre-configured. You're encouraged to configure the content and appearance of your Incline statusline yourself.
+## Configuration
+
+The render function is the most important part of an Incline configuration. As the name suggests, it's called for each window in order to render the Incline statusline. You can think of it like a React component, in that it's passed a table of props and returns a tree-like data structure describing the the content and appearance of the statusline, akin to JSX or HTML. For example:
+
+```lua
+function(props)
+ local filename = vim.fn.fnamemodify(vim.api.nvim_buf_get_name(props.buf), ':t')
+ local modified = vim.bo[props.buf].modified
+ return {
+ filename,
+ modified and { '*', guifg = '#888888', gui = 'bold' } or '',
+ guibg = '#111111',
+ guifg = '#eeeeee',
+ }
+end
+```
-## Example Configurations
+The returned value can be a string or a table which can include strings, highlight properties like foreground/background color, or even nested tables. Nested tables can contain the same sorts of things, including more nested tables. For more on the render function, see [`:help incline-render`](https://github.com/b0o/incline.nvim/blob/main/doc/incline.txt#L92).
-Incline is highly flexible, but by default it looks very plain. The core of an Incline configuration is the render function, which is a Lua function that Incline runs for each visible window. You can think of the render function like a React component - it is passed some props, and returns a tree-like data structure that describes the content and visual style of the result. Here's an example of a config with a simple render function that displays a colored filetype icon and filename:
+Below are some examples to get you started.
+
+### Icon + Filename

+
+Requires [nvim-web-devicons](https://github.com/nvim-tree/nvim-web-devicons).
+
View Code
@@ -46,13 +67,11 @@ require('incline').setup {
```
-For more details on the render function, see [`:help incline-render`](https://github.com/b0o/incline.nvim/blob/main/doc/incline.txt#L92). Below, you'll find some more example configurations for inspiration.
-
### Icon + Filename + Navic

-Requires [nvim-navic](https://github.com/SmiteshP/nvim-navic).
+Requires [nvim-web-devicons](https://github.com/nvim-tree/nvim-web-devicons) and [nvim-navic](https://github.com/SmiteshP/nvim-navic).
View Code
@@ -95,6 +114,8 @@ require('incline').setup {

+Requires [nvim-web-devicons](https://github.com/nvim-tree/nvim-web-devicons).
+
Credit: [@lkhphuc](https://github.com/lkhphuc) ([Discussion](https://github.com/b0o/incline.nvim/discussions/32))