diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..5a6a760d94570c5fa4573a63a0e93687b4d3e9b1
--- /dev/null
+++ b/README.md
@@ -0,0 +1,33 @@
+![logo](logo.png)
+
+<div align="center">
+<p align="center">
+  <a href="#installation">Installation</a> •
+  <a href="#configuration">Configuration</a> •
+  <a href="#run-modes">Run modes</a> •
+  <a href="#completions">Completion</a>
+</p>
+</div>
+
+# Installation
+### Arch based
+If you have ArchLinux based system, such as Manjaro or Arch itself, then simply clone the repo and run:
+```bash 
+git clone https://gitlab.le-memese.com/s3rius/music_bg
+cd music_bg
+makepkg -fsi
+```
+
+### Oter linux systems
+- Install `rust` and `feh`. 
+- Add `~/.cargo/bin` in your path.
+- Run `cargo install --path .;`
+
+If you want to add music_bg as systemd unit run:
+```bash
+cp systemd/music_bg.service /usr/lib/systemd/user/
+```
+
+# Configuraion
+
+After installation run `music_bg config`. This command will generate default config in your $HOME folder.
diff --git a/bin/cli_modes.rs b/bin/cli_modes.rs
index 9769f034e65f3135c42725f11ed5fea0eaadb77c..0ff4a5bd82c9259d82e5295260ea027cfc8934ac 100644
--- a/bin/cli_modes.rs
+++ b/bin/cli_modes.rs
@@ -1,13 +1,12 @@
-use crate::{RunMode, Opt, TestingPic, generate_completions};
-use music_bg_lib::result::MBGResult;
-use music_bg_lib::dbus_interface::player_dbus::setup_connection;
+use crate::{generate_completions, Opt, RunMode, TestingPic};
+use music_bg_lib::background::set_wallpaper;
 use music_bg_lib::config::Config;
-use std::io::Read;
+use music_bg_lib::dbus_interface::player_dbus::setup_connection;
 use music_bg_lib::img_processors::process_image;
-use music_bg_lib::background::set_wallpaper;
+use music_bg_lib::result::MBGResult;
+use std::io::Read;
 use std::time::Duration;
 
-
 pub fn start_listen() -> MBGResult<()> {
     let config = Config::get_props();
     debug!("Found config: \n{:#?}", config);
@@ -30,13 +29,12 @@ pub fn test_processors(test_data: TestingPic) -> MBGResult<()> {
     Ok(())
 }
 
-
 pub fn run(opts: Opt) -> MBGResult<()> {
     let mode = opts.cmd.unwrap_or_else(|| RunMode::Run);
     match mode {
         RunMode::Run => start_listen(),
         RunMode::GenConf => Config::generate_config(),
         RunMode::TestPic(data) => test_processors(data),
-        RunMode::GenComp(shell) => generate_completions(shell)
+        RunMode::GenComp(shell) => generate_completions(shell),
     }
-}
\ No newline at end of file
+}
diff --git a/bin/main.rs b/bin/main.rs
index 3f4887c48fe3c0632f4740b4d3ee556068ebdfb3..def9446b2295d2a74aeaad5524a14cfd6a1e9f15 100644
--- a/bin/main.rs
+++ b/bin/main.rs
@@ -10,8 +10,8 @@ use music_bg_lib::result::MBGResult;
 
 use crate::cli_modes::run;
 
-pub mod logging;
 pub mod cli_modes;
+pub mod logging;
 
 include!("cli.rs");
 
diff --git a/lib/background.rs b/lib/background.rs
index fa7cbe3456522c834087149959cb538c2d6258b8..11749e9a3e9c7dc855a1938bc9991eaeb26df94f 100644
--- a/lib/background.rs
+++ b/lib/background.rs
@@ -3,11 +3,9 @@ use std::process::Command;
 use dbus::blocking::Connection;
 use dbus::Message;
 
+use crate::config::Config;
 use crate::img_processors::process_image;
 use crate::result::MBGResult;
-use crate::display::update_bg;
-use crate::config::Config;
-
 
 pub fn reset_background_handler(_: (), _: &Connection, message: &Message) -> bool {
     let member_name = message.read1::<String>();
@@ -22,7 +20,10 @@ pub fn reset_background_handler(_: (), _: &Connection, message: &Message) -> boo
 pub fn nitrogen_restore() {
     info!("Reset BG");
     let config = Config::get_props();
-    let out = Command::new("sh").arg("-c").arg(config.reset_command.as_str()).output();
+    let out = Command::new("sh")
+        .arg("-c")
+        .arg(config.reset_command.as_str())
+        .output();
     if let Err(restore_error) = out {
         error!("Can't restore background: {}", restore_error.to_string());
     }
diff --git a/lib/dbus_interface/main_dbus.rs b/lib/dbus_interface/main_dbus.rs
index 119ee721bdba61126b725aa625165c6898d2cd0c..0e64b133f053108e6fe315f91432cdff3c0ffc7e 100644
--- a/lib/dbus_interface/main_dbus.rs
+++ b/lib/dbus_interface/main_dbus.rs
@@ -1,7 +1,6 @@
 // This code was autogenerated with `dbus-codegen-rust -s -d org.freedesktop.DBus -m None`, see https://github.com/diwic/dbus-rs
 use dbus::arg;
 
-
 #[derive(Debug)]
 pub struct DBusNameOwnerChanged {
     pub arg0: String,
diff --git a/lib/dbus_interface/media_player.rs b/lib/dbus_interface/media_player.rs
index 25debf548de22ab240d1a3695beedb17ab3e2572..1a1a9a287e1349a881ad86ada0a889d0ee0d7091 100644
--- a/lib/dbus_interface/media_player.rs
+++ b/lib/dbus_interface/media_player.rs
@@ -2,7 +2,6 @@
 use dbus::arg;
 use dbus::blocking;
 
-
 pub trait OrgMprisMediaPlayer2Player {
     fn playback_status(&self) -> Result<String, dbus::Error>;
     fn metadata(
diff --git a/lib/dbus_interface/mod.rs b/lib/dbus_interface/mod.rs
index 546792b89b5af98bbbcb0d9f5b90c4400d835c92..9552ab8114e00581f9bcc2775b79ed3e0496db2f 100644
--- a/lib/dbus_interface/mod.rs
+++ b/lib/dbus_interface/mod.rs
@@ -1,4 +1,4 @@
 pub mod main_dbus;
 pub mod media_player;
+pub mod player_dbus;
 pub mod statuses;
-pub mod player_dbus;
\ No newline at end of file
diff --git a/lib/dbus_interface/player_dbus.rs b/lib/dbus_interface/player_dbus.rs
index 1c4ef8f8f9927491c2024009e480f0dc0b8bc400..911d6e72b4f85755586f11c2a802422768faff20 100644
--- a/lib/dbus_interface/player_dbus.rs
+++ b/lib/dbus_interface/player_dbus.rs
@@ -6,12 +6,11 @@ use dbus::blocking::Connection;
 use dbus::message::{MatchRule, SignalArgs};
 use dbus::{arg, Message};
 
-
+use crate::background::{nitrogen_restore, process_image_url, reset_background_handler};
 use crate::dbus_interface::main_dbus::DBusNameOwnerChanged;
 use crate::dbus_interface::media_player::OrgMprisMediaPlayer2Player;
 use crate::dbus_interface::statuses::PlayerStatus;
 use crate::result::{MBGError, MBGResult};
-use crate::background::{reset_background_handler, process_image_url, nitrogen_restore};
 
 pub fn player_exit_handler(connection: &Connection) -> MBGResult<()> {
     connection.add_match(
@@ -89,4 +88,4 @@ pub fn setup_connection() -> MBGResult<Connection> {
     player_exit_handler(&conn)?;
     player_state_watcher(&conn)?;
     Ok(conn)
-}
\ No newline at end of file
+}
diff --git a/lib/lib.rs b/lib/lib.rs
index fe6f47005f54ad7a7651e7ca12216e9c4bd6224a..fd29799dde873b44f6968115850872610b5ba723 100644
--- a/lib/lib.rs
+++ b/lib/lib.rs
@@ -7,10 +7,9 @@ extern crate failure;
 #[macro_use]
 extern crate failure_derive;
 
-
-pub mod img_processors;
-pub mod dbus_interface;
 pub mod background;
-pub mod display;
 pub mod config;
+pub mod dbus_interface;
+pub mod display;
+pub mod img_processors;
 pub mod result;
diff --git a/logo.png b/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc0e6c5aaf3ac506547a0b37de842e26d5c87682
Binary files /dev/null and b/logo.png differ