{"id":43030933,"url":"https://github.com/eduardo-antunes/plainline","last_synced_at":"2026-01-31T07:35:55.008Z","repository":{"id":184564750,"uuid":"611301479","full_name":"eduardo-antunes/plainline","owner":"eduardo-antunes","description":"A plain statusline for Neovim","archived":false,"fork":false,"pushed_at":"2025-12-14T18:19:27.000Z","size":1282,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-15T21:44:05.676Z","etag":null,"topics":["lua","neovim-plugin","neovim-statusline"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eduardo-antunes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-03-08T14:45:57.000Z","updated_at":"2025-12-15T19:43:29.000Z","dependencies_parsed_at":null,"dependency_job_id":"fc02d614-51fb-4fa8-bba6-7f116c0134b4","html_url":"https://github.com/eduardo-antunes/plainline","commit_stats":null,"previous_names":["eduardo-antunes/plainline"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eduardo-antunes/plainline","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eduardo-antunes%2Fplainline","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eduardo-antunes%2Fplainline/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eduardo-antunes%2Fplainline/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eduardo-antunes%2Fplainline/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eduardo-antunes","download_url":"https://codeload.github.com/eduardo-antunes/plainline/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eduardo-antunes%2Fplainline/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28933477,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T04:05:25.756Z","status":"ssl_error","status_checked_at":"2026-01-31T04:02:35.005Z","response_time":128,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["lua","neovim-plugin","neovim-statusline"],"created_at":"2026-01-31T07:35:54.920Z","updated_at":"2026-01-31T07:35:54.999Z","avatar_url":"https://github.com/eduardo-antunes.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Plainline\n\nThe Merriam-Webster dictionary defines\n[plain](https://www.merriam-webster.com/dictionary/plain) as undecorated,\nunobstructed and clear. Plainline is a simple and succint plugin that brings\nthose qualities to the space of neovim statuslines. It tries to be highly\ninformative and pratical while also retaining the visual minimalism of the stock\nstatusline.\n\n## Installation\n\nInstall it using your favorite plugin manager, and don't forget to invoke the\n`setup` function. With the new builtin plugin manager of neovim, this would be:\n\n```lua\nvim.pack.add { src = \"https://github.com/eduardo-antunes/plainline\" }\nrequire(\"plainline\").setup()\n```\n\nNote that neovim 0.10+ is required for the plugin, and that `vim.pack` is only\navailable for neovim 0.12+ (for older versions, use a third-party plugin\nmanager).\n\n## Configuration\n\nYou may configure plainline by providing a configuration table to the `setup`\nfunction. This table can contain any or all of six keys:\n\n- `sections` defines the active statusline;\n- `inactive_sections` defines the inactive statusline;\n- `separator` sets the text that is shown between the outputs of providers;\n- `formatter` is a function that is run on the result of each provider before\n  it gets displayed. By default, surrounds it with spaces;\n- `name_filters` defines the filtering functions that will be applied to buffer\n  names before display;\n- `winbar` should be nil or a table with the `sections` and `inactive_sections`\n  keys, which define the active and inactive winbar, respectively. Mostly\n  useful with a global statusline (`laststatus` set to 3);\n\n### Sections, inactive sections and providers\n\nThe `sections` and `inactive_sections` keys in both the top-level config and the\n`winbar` configuration should be tables with any or all of two keys: `left` and\n`right`, which define the left and right sections of the statusline/winbar,\nrespectively. Each of these keys should be a list of providers.\n\nA provider is simply a function that fetches a particular piece of information\nand returns it as nicely formatted text. They are the building blocks of\nplainline. The built-in providers, which are listed below, may be specified by\nname (i.e. as strings). You can also pass your own functions as providers, as\nlong as they return strings (or nil).\n\n* `mode`: current mode;\n* `tabpage`: current tab page number;\n* `branch`: current git branch, if in a git repository;\n* `name_only`: just the filtered buffer name;\n* `status`: buffer status. `*` for modified and `#` for read-only;\n* `name`: `name_only` + `status` in the same provider;\n* `diagnostics`: diagnostics, of course;\n* `path_only`: just the filtered absolute filepath of the current buffer;\n* `path`: `path_only` + `status` in the same provider;\n* `macro`: name of macro being recorded, if any;\n* `filetype`: filetype for the current buffer;\n* `fileformat`: fileformat for the current buffer, if it's not unix;\n* `percentage`: percentage of the buffer that has been scrolled down;\n* `position`: position of the cursor within the buffer.\n\n### Filtering\n\nThe `name_only` and `path_only` providers apply a series of filtering functions\nto their respective outputs. These filtering functions are specified via the\n`name_filters` key in the config. Similar to providers, built-in name filters\nmay be specified by name (i.e. as strings).\n\nYou may also pass your own functions as filters. Such functions should receive\nand return a string. If they return an additional value and it is truthy (i.e.\nneither `nil` nor `false`), this causes all following filters to not be run,\nwhich may be useful in some contexts. It also means you have to take care with\nfunctions such as `string.gsub`, which return multiple values; instead of doing\n`return string.gsub(...)`, do `local res = string.gsub(...); return res`.\n\nThe built-in filters are listed below.\n\n* `show_term_title`: replaces the buffer name of terminal buffers with their\n  title (`vim.b.term_title`);\n* `remove_protocol_prefix`: removes protocol style prefixes\n  (`protocol://\u003cactual-name\u003e` -\u003e `\u003cactual-name\u003e`);\n* `abbrev_home_dir`: replaces the full path of the home directory with `~`;\n* `show_help_topic`: shows just the filename (the \"topic\") for built-in vim help\n  and manpages;\n* `show_repo_name`: for `vim-fugitive` buffers, shows just the name of the\n  repository instead of its full path;\n* `clean`: applies all of the above, in that order.\n\n### Default Configuration\n\n```lua\nrequire(\"plainline\").setup {\n  sections = {\n    left  = {\n      \"mode\",\n      \"tabpage\",\n      \"branch\",\n      \"name\",\n      \"diagnostics\",\n    },\n    right = {\n      \"macro\",\n      \"filetype\",\n      \"fileformat\",\n      \"percentage\",\n      \"position\",\n    },\n  },\n  inactive_sections = {\n    left  = { \"name\" },\n    right = { \"percentage\" },\n  },\n  separator = \"│\",\n  formatter = function(str)\n    return string.format(\" %s \", str)\n  end,\n  name_filters = { \"clean\" },\n  winbar = nil, -- no winbar by default\n}\n```\n\n## Screenshot\n\n![screenshot](/static/screenshot.png?raw=true)\n\nThe above screenshot showcases the default configuration with both the\n`sections` and `inactive_sections` keys of the `winbar`option set to `{ right =\n{ \"status\", \"name_only\" }}` and `laststatus` set to 2 (the default).\n\n## License\n\n```\nCopyright 2023-2025 Eduardo Antunes dos Santos Vieira\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feduardo-antunes%2Fplainline","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feduardo-antunes%2Fplainline","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feduardo-antunes%2Fplainline/lists"}