diff --git a/sway/config b/sway/config
new file mode 100644
index 0000000..8577fb0
--- /dev/null
+++ b/sway/config
@@ -0,0 +1,253 @@
+#
+# Variables:
+#
+# Logo key. Use Mod1 for Alt.
+set $mod Mod1
+# Home row direction keys, like vim
+set $left h
+set $down j
+set $up k
+set $right l
+
+# lock screen
+bindsym Mod4+l exec swaylock -l -f -e -F -i "/usr/share/backgrounds/sway/universe.jpg" -s stretch
+
+# nyxt browser
+bindsym $mod+Shift+b exec nyxt
+
+# Your preferred terminal emulator
+set $term alacritty
+
+# 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 wofi --show drun -I
+
+# Wob configuration
+set $WOBSOCK $XDG_RUNTIME_DIR/wob.sock
+exec rm -f $WOBSOCK && mkfifo $WOBSOCK && tail -f $WOBSOCK | wob
+exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK
+
+gaps inner 2
+gaps outer 2
+
+#
+# Colors
+#
+client.background # 434c5e n/a
+client.focused #434c5e #434c5e #eceff4 #434c5e #434c5e
+client.focused_inactive #3b4252 #3b4252 #eceff4 #3b4252 #3b4252
+client.unfocused #3b4252 #3b4252 #eceff4 #3b4252 #3b4252
+client.urgent #434c5e #434c5e #eceff4 #434c5e #434c5e
+
+### Output configuration
+#
+# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/)
+output * bg /usr/share/backgrounds/sway/universe.jpg stretch
+
+### Idle configuration
+#
+# Example configuration:
+#
+# exec swayidle -w \
+# timeout 600 '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
+input * {
+ xkb_layout it
+}
+
+input "type:mouse" {
+ accel_profile adaptive
+ pointer_accel 1.0
+}
+
+input "type:touchpad" {
+ tap enabled
+ tap_button_map lrm
+}
+
+#
+# Key bindings:
+#
+# Start a terminal
+bindsym $mod+Return exec $term
+
+# Kill focused window
+bindsym $mod+Shift+q kill
+
+# Start your launcher
+bindsym $mod+space 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 number 1
+bindsym $mod+2 workspace number 2
+bindsym $mod+3 workspace number 3
+bindsym $mod+4 workspace number 4
+bindsym $mod+5 workspace number 5
+bindsym $mod+6 workspace number 6
+bindsym $mod+7 workspace number 7
+bindsym $mod+8 workspace number 8
+bindsym $mod+9 workspace number 9
+bindsym $mod+0 workspace number 10
+# Move focused container to workspace
+bindsym $mod+Shift+1 move container to workspace number 1
+bindsym $mod+Shift+2 move container to workspace number 2
+bindsym $mod+Shift+3 move container to workspace number 3
+bindsym $mod+Shift+4 move container to workspace number 4
+bindsym $mod+Shift+5 move container to workspace number 5
+bindsym $mod+Shift+6 move container to workspace number 6
+bindsym $mod+Shift+7 move container to workspace number 7
+bindsym $mod+Shift+8 move container to workspace number 8
+bindsym $mod+Shift+9 move container to workspace number 9
+bindsym $mod+Shift+0 move container to workspace number 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 F11 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+d focus mode_toggle
+
+# Move focus to the parent container
+bindsym $mod+a focus parent
+
+# bindsym XF86MonBrightnessDown exec brightnessctl set 5%-
+# bindsym XF86MonBrightnessUp exec brightnessctl set 5%+
+bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%- | sed -En 's/.*\(([0-9]+)%\).*/\1/p' > $WOBSOCK
+bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+ | sed -En 's/.*\(([0-9]+)%\).*/\1/p' > $WOBSOCK
+
+# bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5%
+# bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5%
+bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% && pactl get-sink-volume @DEFAULT_SINK@ | head -n 1 | awk '{print substr($5, 1, length($5)-1)}' > $WOBSOCK
+bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% && pactl get-sink-volume @DEFAULT_SINK@ | head -n 1 | awk '{print substr($5, 1, length($5)-1)}' > $WOBSOCK
+bindsym --locked XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle
+bindsym --locked XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle
+
+#
+# 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"
+
+mode "screenshot" {
+ bindsym Mod4+p exec grimshot copy active
+ bindsym $mod+s+a exec grimshot save area
+ bindsym $mod+c+a exec grimshot copy area
+ # bindsym Mod4+Mod1+p exec grimshot save output
+ bindsym $mod+s+w exec grimshot save window
+ bindsym $mod+c+w exec grimshot copy window
+
+ # Return to default mode
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
+
+bindsym Print mode "screenshot"
+
+
+#
+# Status Bar:
+#
+bar {
+ swaybar_command waybar
+}
+
+include /etc/sway/config.d/*
+include ./config.d/*
diff --git a/waybar/config.jsonc b/waybar/config.jsonc
new file mode 100644
index 0000000..799b277
--- /dev/null
+++ b/waybar/config.jsonc
@@ -0,0 +1,132 @@
+{
+ "layer": "bottom",
+ "position": "bottom",
+ "margin": "5 5 5 5",
+ "modules-left": ["sway/workspaces", "sway/mode", "custom/pacman"],
+ "modules-center": ["clock", "idle_inhibitor"],
+ "modules-right": [
+ "pulseaudio",
+ "backlight",
+ "battery",
+ "bluetooth",
+ "network"
+ ],
+
+ "sway/workspaces": {
+ "disable-scroll": true,
+ "format": "{name}"
+ },
+
+ "custom/pacman": {
+ "format": "{} ",
+ "interval": 3600,
+ "exec": "checkupdates | wc -l",
+ "exec-if": "[[ $(checkupdates | wc -l) != 0 ]]",
+ "signal": 8,
+ "tooltip": false
+ },
+
+ "sway/mode": {
+ "format": "{}"
+ },
+
+ "clock": {
+ "timezone": "Europe/Rome",
+ "format": "{:%H:%M}",
+ "format-alt": "{:%Y-%m-%d}",
+ "tooltip-format": "{calendar}",
+ "calendar": {
+ "mode": "year",
+ "mode-mon-col": 3,
+ "weeks-pos": "right",
+ "on-scroll": 1,
+ "on-click-right": "mode",
+ "format": {
+ "months": "{}",
+ "days": "{}",
+ "weeks": "W{}",
+ "weekdays": "{}",
+ "today": "{}"
+ }
+ },
+ "actions": {
+ "on-click-right": "mode",
+ "on-click-forward": "tz_up",
+ "on-click-backward": "tz_down",
+ "on-scroll-up": "shift_up",
+ "on-scroll-down": "shift_down"
+ }
+ },
+
+ "idle_inhibitor": {
+ "format": "{icon}",
+ "format-icons": {
+ "activated": "",
+ "deactivated": ""
+ }
+ },
+
+ "pulseaudio": {
+ "reverse-scrolling": 1,
+ "format": "{volume}% {icon} {format_source}",
+ "format-bluetooth": "{icon} {volume}% {format_source}",
+ "format-bluetooth-muted": " {icon} {format_source}",
+ "format-muted": "婢 {format_source}",
+ "format-source": "{volume}% ",
+ "format-source-muted": "",
+ "format-icons": {
+ "headphone": "",
+ "hands-free": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["奄", "奔", "墳"]
+ },
+ "on-click": "pavucontrol",
+ "min-length": 13
+ },
+
+ "backlight": {
+ "device": "intel_backlight",
+ "format": "{percent}% {icon}",
+ "format-icons": ["", "", "", "", "", "", ""],
+ "min-length": 7
+ },
+
+ "battery": {
+ "states": {
+ "warning": 30,
+ "critical": 15
+ },
+ "format": "{capacity}% {icon}",
+ "format-charging": "{capacity}% ",
+ "format-plugged": "{capacity}% ",
+ "format-alt": "{time} {icon}",
+ "format-icons": ["", "", "", "", "", "", "", "", "", ""],
+ "on-update": "$HOME/.config/waybar/scripts/check_battery.sh"
+ },
+
+ "bluetooth": {
+ "format": " {status}",
+ "format-connected": " {device_alias}",
+ "format-connected-battery": " {device_alias} {device_battery_percentage}%",
+ "tooltip-format": "{controller_alias}\t{controller_address}\n\n{num_connections} connected",
+ "tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}",
+ "tooltip-format-enumerate-connected": "{device_alias}\t{device_address}",
+ "tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t{device_battery_percentage}%",
+ "on-click": "blueman-manager"
+ },
+
+ "network": {
+ "format": "{ifname}",
+ "format-wifi": "{essid} ",
+ "format-ethernet": "{ipaddr}/{cidr} ",
+ "tooltip-format": "{ifname} via {gwaddr} ",
+ "tooltip-format-wifi": "{essid} ",
+ "tooltip-format-ethernet": "{ifname} ",
+ "tooltip-format-disconnected": "Disconnected",
+ "max-length": 50,
+ "on-click": "alacritty -e 'nmtui'"
+ }
+}
diff --git a/waybar/scripts/check_battery.sh b/waybar/scripts/check_battery.sh
new file mode 100755
index 0000000..6222418
--- /dev/null
+++ b/waybar/scripts/check_battery.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+bat=/sys/class/power_supply/BAT1
+CRIT=${1:-15}
+
+FILE=~/.config/waybar/scripts/notified
+
+stat=$(cat $bat/status)
+perc=$(cat $bat/capacity)
+
+if [[ $perc -le $CRIT ]] && [[ $stat == "Discharging" ]]; then
+ if [[ ! -f "$FILE" ]]; then
+ notify-send --urgency=critical --icon=dialog-warning "Battery Low" "Current charge: $perc%"
+ touch $FILE
+ fi
+elif [[ -f "$FILE" ]]; then
+ rm $FILE
+fi
\ No newline at end of file
diff --git a/waybar/style.css b/waybar/style.css
new file mode 100644
index 0000000..32e137b
--- /dev/null
+++ b/waybar/style.css
@@ -0,0 +1,161 @@
+* {
+ border: none;
+ border-radius: 0;
+ /* `otf-font-awesome` is required to be installed for icons */
+ font-family: Liberation Mono;
+ min-height: 20px;
+}
+
+window#waybar {
+ background: transparent;
+}
+
+window#waybar.hidden {
+ opacity: 0.2;
+}
+
+#workspaces {
+ border-radius: 10px;
+ transition: none;
+ background: #383c4a;
+ margin-right: 8px;
+}
+
+#workspaces button {
+ transition: none;
+ color: #7c818c;
+ background: transparent;
+ padding: 5px;
+ font-size: 18px;
+}
+
+/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
+#workspaces button:hover {
+ transition: none;
+ box-shadow: inherit;
+ text-shadow: inherit;
+ border-radius: inherit;
+ color: #383c4a;
+ background: #7c818c;
+}
+
+#workspaces button.focused {
+ color: white;
+}
+
+#custom-pacman,
+#mode,
+#clock,
+#idle_inhibitor,
+#battery,
+#pulseaudio,
+#bluetooth,
+#network,
+#backlight {
+ padding-left: 8px;
+ padding-right: 8px;
+ border-radius: 10px;
+ background: #383c4a;
+}
+
+#custom-pacman {
+ transition: none;
+ color: #ffffff;
+}
+
+#bluetooth {
+ margin-right: 8px;
+}
+
+#bluetooth.connected, #bluetooth.on {
+ background-color: #26a65b;
+}
+
+#bluetooth.disabled, #bluetooth.off {
+ background-color: #f53c3c;
+}
+
+#mode {
+ transition: none;
+ color: #ffffff;
+}
+
+#clock {
+ transition: none;
+ color: #ffffff;
+ margin-right: 8px;
+}
+
+#idle_inhibitor {
+ transition: none;
+ color: #ffffff;
+}
+
+#idle_inhibitor.activated {
+ background-color: #26a65b;
+}
+
+#pulseaudio {
+ margin-right: 8px;
+ transition: none;
+ color: #ffffff;
+}
+
+#pulseaudio.muted,
+#pulseaudio.source-muted {
+ background-color: #90b1b1;
+ color: #2a5c45;
+}
+
+#backlight {
+ margin-right: 8px;
+ transition: none;
+ color: #ffffff;
+}
+
+#battery {
+ margin-right: 8px;
+ transition: none;
+ color: #ffffff;
+}
+
+#battery.charging {
+ color: #ffffff;
+ background-color: #26a65b;
+}
+
+#battery.warning:not(.charging) {
+ background-color: #ffbe61;
+ color: black;
+}
+
+#battery.critical:not(.charging) {
+ background-color: #f53c3c;
+ color: #ffffff;
+ animation-name: blink;
+ animation-duration: 0.5s;
+ animation-timing-function: linear;
+ animation-iteration-count: infinite;
+ animation-direction: alternate;
+}
+
+#network {
+ transition: none;
+ color: #ffffff;
+ background: #383c4a;
+}
+
+#network.wifi, #network.ethener {
+ background-color: #26a65b;
+}
+
+#network.disabled, #network.disconnected {
+ background-color: #f53c3c;
+}
+
+@keyframes blink {
+ to {
+ background-color: #ffffff;
+ color: #000000;
+ }
+}