diff --git a/README.md b/README.md
index ad881af..46e0d71 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,340 @@
-# lualine.nvim
\ No newline at end of file
+# lualine.nvim
+A blazing fast and easy to configure neovim statusline written in pure lua.
+
+`lualine.nvim` requires neovim 0.5
+## Screenshots
+
+| normal | insert | visual | replace |
+| :---------------------------------------- | :-------------------------------------: | -------------------------------------: | -------------------------------------: |
+| ![normal](./screenshots/normal.png) | ![normal](./screenshots/insert.png) | ![normal](./screenshots/visual.png) | ![normal](./screenshots/replace.png) |
+
+## Performance compared to other plugins
+Unlike other statusline plugins lualine loads only defined components, nothing else.
+
+Startup time performance measured with an amazing plugin [tweekmonster/startuptime.vim](https://github.com/tweekmonster/startuptime.vim)
+
+| clean vimrc | lualine | airline | lightline |
+| :------------- | :----------: | -----------: | -----------: |
+| 8.943 ms | 9.034 ms | 13.425 ms | 11.463 ms |
+
+
+## Installation
+### [vim-plug](https://github.com/junegunn/vim-plug)
+```vim
+Plug 'hoob3rt/lualine.nvim'
+" If you want to have icons in your statusline choose one of these
+Plug 'kyazdani42/nvim-web-devicons'
+Plug 'ryanoasis/vim-devicons'
+```
+### [packer.nvim](https://github.com/wbthomason/packer.nvim)
+```lua
+use {
+ 'hoob3rt/lualine.nvim',
+ requires = {'kyazdani42/nvim-web-devicons', opt = true}
+}
+```
+
+## Usage and customization
+Lualine has sections as shown below.
+
+```
++-------------------------------------------------+
+| A | B | C X | Y | Z |
++-------------------------------------------------+
+```
+
+Each sections holds it's components e.g. current vim's mode.
+Colorscheme of sections is mirrored, meaning section `A` will have the same colorscheme as section `Z` etc.
+
+### Starting lualine
+```lua
+local lualine = require('lualine')
+lualine.status()
+```
+### Setting a theme
+```lua
+lualine.theme = 'gruvbox'
+```
+
+
+Available themes
+
+* gruvbox
+
+Please create a pr if you managed to port a popular theme before me
+
+
+### Changing separator in section
+Lualine defines a separator between components in given section, the default
+separator is `|`. You can change the separator this way:
+
+```lua
+lualine.separator = '|'
+```
+
+or disable it
+
+```lua
+lualine.separator = ''
+```
+
+### Changing components in lualine sections
+
+
+Lualine defaults
+
+```lua
+lualine.sections = {
+ lualine_a = { 'mode' },
+ lualine_b = { 'branch' },
+ lualine_c = { 'filename' },
+ lualine_x = { 'encoding', 'fileformat', 'filetype' },
+ lualine_y = { 'progress' },
+ lualine_z = { 'location' },
+ lualine_diagnostics = { }
+}
+
+lualine.inactiveSections = {
+ lualine_a = { },
+ lualine_b = { },
+ lualine_c = { 'filename' },
+ lualine_x = { 'location' },
+ lualine_y = { },
+ lualine_z = { }
+}
+```
+
+
+
+
+Available components
+
+* branch
+* encoding
+* fileformat
+* filename
+* filetype
+* location
+* mode
+* progress
+
+
+
+
+Using custom functions as lualine component
+
+You can define a custom function as a lualine component
+
+```lua
+local function hello()
+ return [[hello world]]
+end
+lualine.sections = { lualine_a = { hello } }
+```
+
+
+
+### Loading plugin extensions
+Lualine extensions change statusline appearance for a window/buffer with a plugin loaded e.g. [junegunn/fzf.vim](https://github.com/junegunn/fzf.vim)
+
+By default no plugin extension are loaded to improve performance. If you are using a plugin which is supported you can load it this way:
+```lua
+lualine.extensions = { 'fzf' }
+```
+
+
+Available extensions
+
+* fzf
+
+Please create a pr if you managed to create an extension before me
+
+
+### Full config example using [packer.nvim](https://github.com/wbthomason/packer.nvim)
+
+
+packer config
+
+```lua
+ use {
+ 'hoob3rt/lualine.nvim',
+ requires = {'kyazdani42/nvim-web-devicons', opt = true},
+ config = function()
+ local lualine = require('lualine')
+ lualine.theme = 'gruvbox'
+ lualine.separator = '|'
+ lualine.sections = {
+ lualine_a = { 'mode' },
+ lualine_b = { 'branch' },
+ lualine_c = { 'filename' },
+ lualine_x = { 'encoding', 'fileformat', 'filetype' },
+ lualine_y = { 'progress' },
+ lualine_z = { 'location' },
+ lualine_diagnostics = { }
+ }
+ lualine.inactiveSections = {
+ lualine_a = { },
+ lualine_b = { },
+ lualine_c = { 'filename' },
+ lualine_x = { 'location' },
+ lualine_y = { },
+ lualine_z = { }
+ }
+ lualine.extensions = { 'fzf' }
+ lualine.status()
+ end
+ }
+```
+
+
+
+### Defining custom themes
+
+
+
+Theme example
+
+To create a custom theme you need to define a colorscheme for each of vim's modes. Each mode has a `fg` and `bg` field for every lualine section.
+This is really easy in lua. Here is and example of a gruvbox theme.
+
+```lua
+local gruvbox = { }
+
+local colors = {
+ black = "#282828",
+ white = '#ebdbb2',
+ red = '#fb4934',
+ green = '#b8bb26',
+ blue = '#83a598',
+ yellow = '#fe8019',
+
+ gray = '#a89984',
+ darkgray = '#3c3836',
+
+ lightgray = '#504945',
+ inactivegray = '#7c6f64',
+}
+
+gruvbox.normal = {
+ a = {
+ bg = colors.gray,
+ fg = colors.black,
+ },
+ b = {
+ bg = colors.lightgray,
+ fg = colors.white,
+ },
+ c = {
+ bg = colors.darkgray,
+ fg = colors.gray
+ }
+}
+
+gruvbox.insert = {
+ a = {
+ bg = colors.blue,
+ fg = colors.black,
+ },
+ b = {
+ bg = colors.lightgray,
+ fg = colors.white,
+ },
+ c = {
+ bg = colors.lightgray,
+ fg = colors.white
+ }
+}
+
+
+gruvbox.visual = {
+ a = {
+ bg = colors.yellow,
+ fg = colors.black,
+ },
+ b = {
+ bg = colors.lightgray,
+ fg = colors.white,
+ },
+ c = {
+ bg = colors.inactivegray,
+ fg = colors.black
+ },
+}
+
+gruvbox.replace = {
+ a = {
+ bg = colors.red,
+ fg = colors.black,
+ },
+ b = {
+ bg = colors.lightgray,
+ fg = colors.white,
+ },
+ c = {
+ bg = colors.black,
+ fg = colors.white
+ },
+}
+
+gruvbox.command = {
+ a = {
+ bg = colors.green,
+ fg = colors.black,
+ },
+ b = {
+ bg = colors.lightgray,
+ fg = colors.white,
+ },
+ c = {
+ bg = colors.inactivegray,
+ fg = colors.black
+ },
+}
+
+gruvbox.terminal = gruvbox.normal
+
+gruvbox.inactive = {
+ a = {
+ bg = colors.darkgray,
+ fg = colors.gray,
+ },
+ b = {
+ bg = colors.darkgray,
+ fg = colors.gray,
+ },
+ c = {
+ bg = colors.darkgray,
+ fg = colors.gray
+ },
+}
+
+lualine.theme = gruvbox
+```
+
+
+
+## TODO's
+Please create an issue/ pr if you want to see more functionality implemented
+- General
+ - [ ] create doc file
+- Icons usage
+ - [x] [ryanoasis/vim-devicons](https://github.com/ryanoasis/vim-devicons)
+ - [x] [kyazdani42/nvim-web-devicons](https://github.com/kyazdani42/nvim-web-devicons)
+- Plugin Extensions
+ - [x] [junegunn/fzf.vim](https://github.com/junegunn/fzf.vim)
+ - [ ] [tpope/vim-fugitive](https://github.com/tpope/vim-fugitive)
+ - [ ] [junegunn/goyo.vim](https://github.com/junegunn/goyo.vim)
+ - [ ] [preservim/nerdtree](https://github.com/preservim/nerdtree)
+ - [ ] [kyazdani42/nvim-tree.lua](https://github.com/kyazdani42/nvim-tree.lua)
+ - [ ] [ms-jpq/chadtree](https://github.com/ms-jpq/chadtree)
+ - [ ] [liuchengxu/vista.vim](https://github.com/liuchengxu/vista.vim)
+ - [ ] [preservim/tagbar](https://github.com/preservim/tagbar)
+- Plugin Components
+ - [ ] [vim-signify](https://github.com/mhinz/vim-signify)
+- Diagnostics
+ - [ ] nvim-lsp status support
+ - [ ] [coc.nvim](https://github.com/neoclide/coc.nvim)
+ - [ ] [dense-analysis/ale](https://github.com/dense-analysis/ale)
+- Themes
+ - [ ] support for `notermguicolors`
+ - [ ] nord theme
diff --git a/screenshots/command.png b/screenshots/command.png
new file mode 100644
index 0000000..e83fcda
Binary files /dev/null and b/screenshots/command.png differ
diff --git a/screenshots/insert.png b/screenshots/insert.png
new file mode 100644
index 0000000..43a55f6
Binary files /dev/null and b/screenshots/insert.png differ
diff --git a/screenshots/normal.png b/screenshots/normal.png
new file mode 100644
index 0000000..750a12a
Binary files /dev/null and b/screenshots/normal.png differ
diff --git a/screenshots/replace.png b/screenshots/replace.png
new file mode 100644
index 0000000..b2c5eaf
Binary files /dev/null and b/screenshots/replace.png differ
diff --git a/screenshots/visual.png b/screenshots/visual.png
new file mode 100644
index 0000000..30866b2
Binary files /dev/null and b/screenshots/visual.png differ