diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..e309634
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,47 @@
+HOME_PATH=~
+BIN_PATH=/usr/local/bin
+
+help:
+ @echo " Available Actions:"
+ @echo " install_user - builds & copies files into the user's home"
+ @echo " install_system - builds & copies files into the system"
+ @echo " fetch - copies files from the system into this build directory"
+ @echo " help - this!"
+
+###
+# INSTALL - USER
+###
+install_user: install_user_sway install_user_waybar
+
+install_user_sway:
+ cp home/config/sway/* $(HOME_PATH)/.config/sway/config
+
+install_user_waybar:
+ cp home/config/waybar/* $(HOME_PATH)/.config/waybar/
+
+###
+# INSTALL - SYSTEM
+###
+install_system: install_system_check install_system_lightdm
+
+install_system_check:
+ @echo "Note: install needs to be run as root."
+
+install_system_lightdm:
+ cp usr/share/wayland-sessions/* /usr/share/wayland-sessions/
+
+###
+# FETCH
+###
+fetch: fetch_sway fetch_waybar fetch_lightdm
+
+fetch_sway:
+ cp $(HOME_PATH)/.config/sway/config home/config/sway/config
+
+fetch_waybar:
+ cp $(HOME_PATH)/.config/waybar/config* home/config/waybar/
+ cp $(HOME_PATH)/.config/waybar/style.css home/config/waybar/
+
+fetch_lightdm:
+ cp /usr/share/wayland-sessions/sway.desktop usr/share/wayland-sessions/
+
diff --git a/README.md b/README.md
index 4c43d3d..a530dae 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,47 @@
# pinephone-sway-poc
-Sway UI configured for PinePhone (Proof Of Concept)
+Sway UI configured for PINE64 PinePhone (Proof Of Concept)
+
+You can find ready-made config files and installation instructions on how to set up Sway on postmarketOS and use it with a PinePhone.
+
+**TODO: insert a photo**
+
+## Install
+Start with a [postmarketOS](https://wiki.postmarketos.org/wiki/PINE64_PinePhone_(pine64-pinephone)) for PinePhone image with `postmarketos-ui-sway` installed. Either use the pre-built demo image or build a custom one with `pmbootstrap`.
+
+Flash the system onto the phone (either to an SD card or directly to the eMMC with Jumpdrive).
+
+Open a terminal on the phone (either through SSH, the serial connection or directly on the screen) and run this:
+```
+# components
+$ sudo apk add waybar bemenu networkmanager
+
+# build tools
+$ sudo apk add git make waybar bemenu networkmanager
+
+# installation
+$ git clone https://github.com/Dejvino/pinephone-sway-poc
+$ cd pinephone-sway-poc
+$ make install_user
+$ sudo make install_system
+```
+
+That's it. You should now have everything in place. Reboot to use the new settings.
+
+## Usage
+
+**TODO: this.**
+
+
+## Components
+* postmarketOS - base Linux distribution (though any other would work as well)
+* sway (pmos package) - tiling Wayland compositor
+* squeekboard (pmos package) - on-screen keyboard for Wayland
+** [terminal.yaml](https://source.puri.sm/btantau/squeekboard/blob/btantau-master-patch-76686/data/keyboards/terminal.yaml) - keyboard layout based on this improved version
+* bemenu (pmos package) - app launcher
+* waybar (pmos package) - Wayland status bar
+** [carlosdss22/dotfiles](https://github.com/carlosdss22/dotfiles/tree/master/waybar) - styles used
+* [sxmo-lisgd](https://git.sr.ht/~mil/lisgd) - gesture detection daemon
+* [sxmo-utils](https://git.sr.ht/~mil/sxmo-utils) - various utilities for the PinePhone
+
+(*pmos package* = available as a package directly from the postmarketOS repository)
+
diff --git a/home/config/sway/config b/home/config/sway/config
new file mode 100644
index 0000000..eaa6ce0
--- /dev/null
+++ b/home/config/sway/config
@@ -0,0 +1,212 @@
+# Read `man 5 sway` for a complete reference.
+
+### Variables
+#
+# Mod4 = Logo key. Mod1 = Alt.
+# Using Mod1 for now since nothing better is available on the virtual keyboard.
+set $mod Mod1
+
+# Home row direction keys, like vim
+set $left h
+set $down j
+set $up k
+set $right l
+
+# Your preferred terminal emulator
+set $term termite
+
+# Your preferred application launcher
+# Note: pass the final command to swaymsg so that the resulting window can be opened
+# on the original workspace that the command was run on.
+set $menu bemenu-run | xargs swaymsg exec --
+
+### Output configuration
+#
+# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/)
+output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
+#
+# Example configuration:
+#
+# output HDMI-A-1 resolution 1920x1080 position 1920,0
+#
+# You can get the names of your outputs by running: swaymsg -t get_outputs
+
+### Idle configuration
+#
+# Example configuration:
+#
+# exec swayidle -w \
+# timeout 300 'swaylock -f -c 000000' \
+# timeout 600 'swaymsg "output * dpms off"' \
+# resume 'swaymsg "output * dpms on"' \
+# before-sleep 'swaylock -f -c 000000'
+#
+# This will lock your screen after 300 seconds of inactivity, then turn off
+# your displays after another 300 seconds, and turn your screens back on when
+# resumed. It will also lock your screen before your computer goes to sleep.
+
+### Input configuration
+#
+# Example configuration:
+#
+# input "2:14:SynPS/2_Synaptics_TouchPad" {
+# dwt enabled
+# tap enabled
+# natural_scroll enabled
+# middle_emulation enabled
+# }
+#
+# You can get the names of your inputs by running: swaymsg -t get_inputs
+# Read `man 5 sway-input` for more information about this section.
+
+### Key bindings
+#
+# Basics:
+#
+ # Start a terminal
+ bindsym $mod+Return exec $term
+
+ # Kill focused window
+ bindsym $mod+q kill
+
+ # Start your launcher
+ bindsym $mod+d exec $menu
+
+ # Drag floating windows by holding down $mod and left mouse button.
+ # Resize them with right mouse button + $mod.
+ # Despite the name, also works for non-floating windows.
+ # Change normal to inverse to use left mouse button for resizing and right
+ # mouse button for dragging.
+ floating_modifier $mod normal
+
+ # Reload the configuration file
+ bindsym $mod+Shift+c reload
+
+ # Exit sway (logs you out of your Wayland session)
+ bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'
+#
+# Moving around:
+#
+ # Move your focus around
+ bindsym $mod+$left focus left
+ bindsym $mod+$down focus down
+ bindsym $mod+$up focus up
+ bindsym $mod+$right focus right
+ # Or use $mod+[up|down|left|right]
+ bindsym $mod+Left focus left
+ bindsym $mod+Down focus down
+ bindsym $mod+Up focus up
+ bindsym $mod+Right focus right
+
+ # Move the focused window with the same, but add Shift
+ bindsym $mod+Shift+$left move left
+ bindsym $mod+Shift+$down move down
+ bindsym $mod+Shift+$up move up
+ bindsym $mod+Shift+$right move right
+ # Ditto, with arrow keys
+ bindsym $mod+Shift+Left move left
+ bindsym $mod+Shift+Down move down
+ bindsym $mod+Shift+Up move up
+ bindsym $mod+Shift+Right move right
+#
+# Workspaces:
+#
+ # Switch to workspace
+ bindsym $mod+1 workspace 1
+ bindsym $mod+2 workspace 2
+ bindsym $mod+3 workspace 3
+ bindsym $mod+4 workspace 4
+ bindsym $mod+5 workspace 5
+ bindsym $mod+6 workspace 6
+ bindsym $mod+7 workspace 7
+ bindsym $mod+8 workspace 8
+ bindsym $mod+9 workspace 9
+ bindsym $mod+0 workspace 10
+ # Move focused container to workspace
+ bindsym $mod+Shift+1 move container to workspace 1
+ bindsym $mod+Shift+2 move container to workspace 2
+ bindsym $mod+Shift+3 move container to workspace 3
+ bindsym $mod+Shift+4 move container to workspace 4
+ bindsym $mod+Shift+5 move container to workspace 5
+ bindsym $mod+Shift+6 move container to workspace 6
+ bindsym $mod+Shift+7 move container to workspace 7
+ bindsym $mod+Shift+8 move container to workspace 8
+ bindsym $mod+Shift+9 move container to workspace 9
+ bindsym $mod+Shift+0 move container to workspace 10
+ # Note: workspaces can have any name you want, not just numbers.
+ # We just use 1-10 as the default.
+#
+# Layout stuff:
+#
+ # You can "split" the current object of your focus with
+ # $mod+b or $mod+v, for horizontal and vertical splits
+ # respectively.
+ bindsym $mod+b splith
+ bindsym $mod+v splitv
+
+ # Switch the current container between different layout styles
+ bindsym $mod+s layout stacking
+ bindsym $mod+w layout tabbed
+ bindsym $mod+e layout toggle split
+
+ # Make the current focus fullscreen
+ bindsym $mod+f fullscreen
+
+ # Toggle the current focus between tiling and floating mode
+ bindsym $mod+Shift+space floating toggle
+
+ # Swap focus between the tiling area and the floating area
+ bindsym $mod+space focus mode_toggle
+
+ # Move focus to the parent container
+ bindsym $mod+a focus parent
+#
+# Scratchpad:
+#
+ # Sway has a "scratchpad", which is a bag of holding for windows.
+ # You can send windows there and get them back later.
+
+ # Move the currently focused window to the scratchpad
+ bindsym $mod+Shift+minus move scratchpad
+
+ # Show the next scratchpad window or hide the focused scratchpad window.
+ # If there are multiple scratchpad windows, this command cycles through them.
+ bindsym $mod+minus scratchpad show
+#
+# Resizing containers:
+#
+mode "resize" {
+ # left will shrink the containers width
+ # right will grow the containers width
+ # up will shrink the containers height
+ # down will grow the containers height
+ bindsym $left resize shrink width 10px
+ bindsym $down resize grow height 10px
+ bindsym $up resize shrink height 10px
+ bindsym $right resize grow width 10px
+
+ # Ditto, with arrow keys
+ bindsym Left resize shrink width 10px
+ bindsym Down resize grow height 10px
+ bindsym Up resize shrink height 10px
+ bindsym Right resize grow width 10px
+
+ # Return to default mode
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
+bindsym $mod+r mode "resize"
+
+# Scale the touchscreen LCD 2x
+output DSI-1 scale 2
+
+# Keyboard
+exec squeekboard
+
+# Gesture detection
+exec lisgd
+
+# Top and bottom status bar
+exec "waybar -c ~/.config/waybar/config_0 -b b0"
+exec "waybar -c ~/.config/waybar/config_1 -b b1"
+
diff --git a/home/config/waybar/config_0 b/home/config/waybar/config_0
new file mode 100644
index 0000000..f92c467
--- /dev/null
+++ b/home/config/waybar/config_0
@@ -0,0 +1,160 @@
+
+{
+ //GLOBAL
+
+
+ "layer": "top",
+
+ "position": "top",
+
+ "modules-left": [
+ "sway/workspaces",
+ "tray"
+ ],
+
+ "modules-center": [
+ "clock#date"
+ ],
+
+ "modules-right": [
+ "battery",
+ "clock#time"
+ ],
+
+//MODULES
+
+ "clock#time": {
+ "interval": 10,
+ "locale": "C",
+ "timezone": "Europe/Berlin",
+ "format": "{:%H:%M}",
+ "tooltip": false
+ },
+
+
+ "clock#date": {
+ "interval": 20,
+ "locale": "C",
+ "timezone": "Europe/Berlin",
+ "format": " {:%e %b %Y}", // Icon: calendar-alt
+ //"tooltip-format": "{:%e %B %Y}"
+ "tooltip": true
+
+ },
+
+ "battery": {
+ "interval": 1,
+ "states": {
+ "warning": 30,
+ "critical": 15
+ },
+ // Connected to AC
+ "format": " {capacity}%", // Icon: bolt
+ // Not connected to AC
+ "format-discharging": " {capacity}%",
+ "format-icons": [
+ "", // Icon: battery-full
+ "", // Icon: battery-three-quarters
+ "", // Icon: battery-half
+ "", // Icon: battery-quarter
+ "" // Icon: battery-empty
+ ],
+ "tooltip": false
+ },
+
+
+
+
+ "cpu": {
+ "interval": 5,
+ "tooltip": false,
+ "format": " {usage}%", //Icon: microchip
+ "states": {
+ "warning": 70,
+ "critical": 90
+ }
+ },
+
+
+ "memory": {
+ "interval": 5,
+ "format": " {}%", // Icon: memory
+ "states": {
+ "warning": 70,
+ "critical": 90
+ }
+ },
+
+ "network": {
+ "interval": 5,
+ "format-wifi": " {essid}", // Icon: wifi
+ "format-ethernet": " {ifname}", // Icon: ethernet
+ "format-disconnected": "Disconnected",
+ "tooltip-format": "{ifname}: {ipaddr}",
+ "on-click": "swaymsg exec cmst"
+ },
+
+ "sway/mode": {
+ "format": " {}",
+ "tooltip": true
+ },
+
+
+ "sway/workspaces": {
+ "all-outputs": false,
+ "disable-scroll": true,
+ "format": "{name}",
+ "format-icons": {
+ "1:www": "龜", // Icon: firefox-browser
+ "2:mail": "", // Icon: mail
+ "3:editor": "", // Icon: code
+ "4:terminals": "", // Icon: terminal
+ "5:portal": "", // Icon: terminal
+ "urgent": "",
+ "focused": "",
+ "default": ""
+ }
+ },
+
+ "pulseaudio": {
+ "scroll-step": 1,
+ "format": "{icon} {volume}%",
+ "format-bluetooth": "{icon} {volume}%",
+ "format-muted": "",
+ "format-icons": {
+ "headphones": "",
+ "handsfree": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["", ""]
+ },
+ "on-click": "pavucontrol"
+ },
+
+ "disk": {
+ "interval": 5,
+ "format": " {percentage_used:2}%",
+ "path": "/"
+
+ },
+ "backlight": {
+ // "device": "acpi_video1",
+ "format": "{icon} {percent}% ",
+ "states": [0,50],
+ "format-icons": ["", ""]
+ },
+ "tray": {
+ "icon-size": 22
+
+ //"spacing": 10
+ },
+
+
+ "custom/bar": {
+ "format": "",
+ "tooltip": false
+ }
+}
+
diff --git a/home/config/waybar/config_1 b/home/config/waybar/config_1
new file mode 100644
index 0000000..a42c31a
--- /dev/null
+++ b/home/config/waybar/config_1
@@ -0,0 +1,143 @@
+
+{
+ //GLOBAL
+
+ "layer": "top",
+
+ "position": "bottom",
+
+ "modules-left": [
+ "cpu",
+ "memory"
+// "disk"
+ ],
+
+ "modules-center": [
+ "network"
+ ],
+
+ "modules-right": [
+ "tray",
+ "backlight",
+ "pulseaudio"
+ ],
+
+//MODULES
+
+
+ "battery": {
+ "interval": 1,
+ "states": {
+ "warning": 30,
+ "critical": 15
+ },
+ // Connected to AC
+ "format": " {capacity}%", // Icon: bolt
+ // Not connected to AC
+ "format-discharging": " {capacity}%",
+ "format-icons": [
+ "", // Icon: battery-full
+ "", // Icon: battery-three-quarters
+ "", // Icon: battery-half
+ "", // Icon: battery-quarter
+ "" // Icon: battery-empty
+ ],
+ "tooltip": false
+ },
+
+
+
+
+ "cpu": {
+ "interval": 5,
+ "tooltip": false,
+ "format": " {usage}%", //Icon: microchip
+ "states": {
+ "warning": 70,
+ "critical": 90
+ }
+ },
+
+
+ "memory": {
+ "interval": 5,
+ "format": " {}%", // Icon: memory
+ "states": {
+ "warning": 70,
+ "critical": 90
+ }
+ },
+
+ "network": {
+ "interval": 5,
+ "format-wifi": " {essid}", // Icon: wifi
+ "format-ethernet": " {ifname}", // Icon: ethernet
+ "format-disconnected": "Disconnected",
+ "tooltip-format": "{ifname}: {ipaddr}",
+ "on-click": "swaymsg exec cmst"
+ },
+
+ "sway/mode": {
+ "format": " {}",
+ "tooltip": true
+ },
+
+
+ "sway/workspaces": {
+ "all-outputs": false,
+ "disable-scroll": true,
+ "format": "{name}",
+ "format-icons": {
+ "1:www": "龜", // Icon: firefox-browser
+ "2:mail": "", // Icon: mail
+ "3:editor": "", // Icon: code
+ "4:terminals": "", // Icon: terminal
+ "5:portal": "", // Icon: terminal
+ "urgent": "",
+ "focused": "",
+ "default": ""
+ }
+ },
+
+ "pulseaudio": {
+ "scroll-step": 1,
+ "format": "{icon} {volume}%",
+ "format-bluetooth": "{icon} {volume}%",
+ "format-muted": "",
+ "format-icons": {
+ "headphones": "",
+ "handsfree": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["", ""]
+ },
+ "on-click": "pavucontrol"
+ },
+
+ "disk": {
+ "interval": 5,
+ "format": " {percentage_used:2}%",
+ "path": "/"
+
+ },
+ "backlight": {
+ // "device": "acpi_video1",
+ "format": "{icon} {percent}% ",
+ "states": [0,50],
+ "format-icons": ["", ""]
+ },
+ "tray": {
+ "icon-size": 22
+
+ //"spacing": 10
+ },
+
+
+ "custom/bar": {
+ "format": "",
+ "tooltip": false
+ }
+}
+
diff --git a/home/config/waybar/style.css b/home/config/waybar/style.css
new file mode 100644
index 0000000..fb8d0e3
--- /dev/null
+++ b/home/config/waybar/style.css
@@ -0,0 +1,146 @@
+/* Reset styles */
+* {
+ border: none;
+ border-radius: 1;
+ min-height: 0;
+ margin: 0;
+ padding: 0;
+}
+
+/* The bar */
+#waybar {
+ background: #282828;
+ color: white;
+ font-family: "awesome 5";
+ font-size: 10px;
+ font-weight: bold;
+}
+
+#disk,
+#backlight,
+#battery,
+#clock,
+#cpu,
+#custom-keyboard-layout,
+#memory,
+#mode,
+#network,
+#pulseaudio,
+#custom-alsa,
+#tray {
+ padding-left: 8px;
+ padding-right: 8px;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+/*modules style*/
+#disk {
+ background: #d79921;
+ color: #282828;
+}
+
+#backlight {
+ background: #689d6a;
+ color: #282828;
+}
+
+#battery {
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+ background: #fbf1c7;
+ color: #282828;
+}
+
+#battery.warning {
+ color: orange;
+}
+
+#clock.date {
+ background: #d65d0e;
+ color: #282828;
+ font-weight: bold;
+}
+
+#clock.time {
+ background: #eceff4;
+ color: #282828;
+ font-weight: bold;
+}
+
+#cpu {
+ background: #af3a03;
+ color: #282828;
+}
+
+#cpu.warning {
+ color: orange;
+}
+
+#cpu.critical {
+ color: orange;
+}
+
+#memory {
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+ background: #458588;
+ color: #282828;
+}
+
+#memory.warning {
+ color: orange;
+}
+
+#mode {
+ background: #64727d;
+ border-top: 2px solid white;
+ /* To compensate for the top border and still have vertical centering */
+ padding-bottom: 2px;
+}
+
+#network {
+ background: #98971a;
+ color: #282828;
+}
+
+#network.disconnected {
+ color: orange;
+}
+
+#pulseaudio {
+ background: #8f3f71;
+ color: #282828;
+}
+
+#pulseaudio.muted {
+ background: #98971a;
+ color: #282828;
+}
+
+#tray {
+ background: transparent;
+}
+
+#window {
+ font-weight: bold;
+}
+
+#workspaces button {
+ font-weight: bold;
+ padding-bottom: 2px;
+ padding-left: 5px;
+ padding-right: 5px;
+ color: #076678;
+ background: #282828;
+ border-radius: 10px;
+}
+
+#workspaces button.focused {
+ font-weight: bold;
+ color: #282828;
+ background-color: #076678;
+}
+
diff --git a/usr/share/wayland-sessions/sway.desktop b/usr/share/wayland-sessions/sway.desktop
new file mode 100644
index 0000000..1cf1e8f
--- /dev/null
+++ b/usr/share/wayland-sessions/sway.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Name=Sway
+Name[en]=Sway
+Comment=This session logs you into Sway
+Comment[en]=This session logs in you into Sway
+Exec=elogind-inhibit --what=shutdown:handle-power-key --mode=block dbus-run-session /usr/bin/sway
+#Exec=dbus-run-session /usr/bin/sway
+TryExec=/usr/bin/sway
+Icon=
+Type=Application
+X-DesktopNames=Sway
+Keywords=launch;Sway;desktop;session;