diff --git a/defaults/main.yml b/defaults/main.yml
index 33c568a..d4d517c 100644
--- a/defaults/main.yml
+++ b/defaults/main.yml
@@ -10,10 +10,13 @@ sway__dynamic_names: true
sway__logo_key: 'Mod4'
sway__term: 'foot'
sway__reload: '$mod+Shift+r'
-swaywm__term_pkgs:
+sway__term_pkgs:
- foot
- foot-terminfo
- foot-themes
+sway__keyboard_settings: true
+sway__keyboard_lang: 'de'
+sway__lock: 'swaylock --color 000000 --image /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png'
# version check for this role?
submodules_versioncheck: true
@@ -82,4 +85,3 @@ i3wm_copy_wallpapers: true
disable_screensaver: true
enable_lock_after_time: false
lock_after_time: '90' # minutes to wait until your screen is locked
-
diff --git a/tasks/config.yml b/tasks/config.yml
index 68ad981..898c342 100644
--- a/tasks/config.yml
+++ b/tasks/config.yml
@@ -10,6 +10,7 @@
loop: "{{ sway__user_list | flatten(1) }}"
loop_control:
loop_var: swayusr
+ label: "{{ swayusr.home }}/.config/"
- name: Create sway config folder
become: true
@@ -22,6 +23,7 @@
loop: "{{ sway__user_list | flatten(1) }}"
loop_control:
loop_var: swayusr
+ label: "{{ swayusr.home }}/.config/sway/"
- name: Create sway dynamic names
ansible.builtin.include_tasks:
@@ -29,6 +31,7 @@
loop: "{{ sway__user_list | flatten(1) }}"
loop_control:
loop_var: swayusr
+ label: "{{ swayusr.home }}/.config/sway/"
when: sway__dynamic_names | bool
- name: Deploy sway config file
@@ -41,4 +44,5 @@
group: "{{ swayusr.user }}"
loop: "{{ sway__user_list | flatten(1) }}"
loop_control:
+ label: "{{ swayusr.home }}/.config/sway/config"
loop_var: swayusr
diff --git a/tasks/dynamic_names.yml b/tasks/dynamic_names.yml
index 919e976..a3fcd82 100644
--- a/tasks/dynamic_names.yml
+++ b/tasks/dynamic_names.yml
@@ -1,5 +1,5 @@
---
-- name: Install sway-dynamic-names-git
+- name: Install sway-dynamic-names
become: true
ansible.builtin.pip:
name: sway-dynamic-names
diff --git a/tasks/main.yml b/tasks/main.yml
index 6c8d39b..cb73b58 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -17,15 +17,15 @@
ansible.builtin.import_tasks:
file: "config.yml"
-#- name: Ensure i3 packages are installed [Archlinux}
-# ansible.builtin.include_tasks:
-# file: setup-Archlinux.yml
-# when: ansible_os_family == 'Archlinux'
+# - name: Ensure i3 packages are installed [Archlinux}
+# ansible.builtin.include_tasks:
+# file: setup-Archlinux.yml
+# when: ansible_os_family == 'Archlinux'
#
-#- name: Ensure i3 packages are installed [RHEL].
-# ansible.builtin.include_tasks:
-# file: setup-RedHat.yml
-# when: ansible_os_family == 'Fedora' or ansible_os_family == 'RedHat'
+# - name: Ensure i3 packages are installed [RHEL].
+# ansible.builtin.include_tasks:
+# file: setup-RedHat.yml
+# when: ansible_os_family == 'Fedora' or ansible_os_family == 'RedHat'
# - name: Create i3 config file
# ansible.builtin.include_tasks:
diff --git a/tasks/setup-Debian.yml b/tasks/setup-Debian.yml
index 2360c99..fa6b875 100644
--- a/tasks/setup-Debian.yml
+++ b/tasks/setup-Debian.yml
@@ -45,4 +45,4 @@
name: "{{ item }}"
state: "present"
become: true
- with_items: "{{ swaywm__term_pkgs }}"
+ with_items: "{{ sway__term_pkgs }}"
diff --git a/templates/config.j2 b/templates/config.j2
index fbdbbbd..e8de261 100644
--- a/templates/config.j2
+++ b/templates/config.j2
@@ -57,9 +57,11 @@ output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
#
# Multiple layouts can be specified by separating them with commas
#
+{% if sway__keyboard_settings | bool %}
input type:keyboard {
- xkb_layout de
+ xkb_layout {{ sway__keyboard_lang }}
}
+{% endif %}
# Example configuration:
#
# input "2:14:SynPS/2_Synaptics_TouchPad" {
@@ -97,6 +99,10 @@ input type:keyboard {
# 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.' --button-dismiss 'Reload and Continue' 'swaymsg reload' --button-no-terminal 'Yes, exit sway' 'swaymsg exit'
+
+ # Screensaver
+ bindsym $mod+Shift+x exec {{ sway__lock }}
+
#
# Moving around:
#
@@ -228,13 +234,14 @@ bar {
# When the status_command prints a new line to stdout, swaybar updates.
# The default just shows the current date and time.
- status_command while date +'%Y-%m-%d %I:%M:%S %p'; do sleep 1; done
+ # status_command while date +'%Y-%m-%d %I:%M:%S %p'; do sleep 1; done
+ status_command waybar
- colors {
- statusline #ffffff
- background #323232
- inactive_workspace #32323200 #32323200 #5c5c5c
- }
+ # colors {
+ # statusline #ffffff
+ # background #323232
+ # inactive_workspace #32323200 #32323200 #5c5c5c
+ # }
}
include /etc/sway/config.d/*
diff --git a/templates/i3blocks_config.j2 b/templates/i3blocks_config.j2
deleted file mode 100644
index 1e56477..0000000
--- a/templates/i3blocks_config.j2
+++ /dev/null
@@ -1,52 +0,0 @@
-command=~/.config/i3blocks/$BLOCK_NAME
-separator_block_width=18
-markup=pango
-
-{% if i3_i3blocks_options.weather | bool %}
-[weather]
-command=curl -Ss 'https://wttr.in?format="%l:+%c%t+%w"' | xargs echo
-interval=600
-color=#A4C2F4
-{% endif %}
-
-{% if i3_i3blocks_options.audio_volume | bool %}
-[volume]
-command={{ i3wm_usr.home }}/.config/i3blocks/volume.sh
-interval=30
-signal=10
-{% endif %}
-
-{% if i3_i3blocks_options.wifisignal | bool %}
-[wlan]
-command={{ i3wm_usr.home }}/.config/i3blocks/wlan.py
-interval=1
-signal=10
-{% endif %}
-
-{% if i3_i3blocks_options.ipaddress | bool %}
-[ip]
-command=hostname -i | awk '{ print " IPv4: " $1 }'
-interval=120
-label=🖥️
-{% endif %}
-
-{% if i3_i3blocks_options.clock | bool %}
-[clock]
-command=date --rfc-3339=seconds
-color=#88ff0a
-interval=1
-{% endif %}
-
-{% if i3_i3blocks_options.battery | bool %}
-[battery]
-command={{ i3wm_usr.home }}/.config/i3blocks/battery.py
-markup=pango
-interval=30
-{% endif %}
-
-{% if i3_i3blocks_options.ddate | bool %}
-[ddate]
-label=🚀
-command=ddate +'%A, %d %B, %Y%N, Celebrate %H'
-interval=120
-{% endif %}
diff --git a/templates/waybar.css.j2 b/templates/waybar.css.j2
new file mode 100644
index 0000000..e4e1d2b
--- /dev/null
+++ b/templates/waybar.css.j2
@@ -0,0 +1,282 @@
+*/ {{ ansible_managed }} */
+
+* {
+ /* `otf-font-awesome` is required to be installed for icons */
+ font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif;
+ font-size: 13px;
+}
+
+window#waybar {
+ background-color: rgba(43, 48, 59, 0.5);
+ border-bottom: 3px solid rgba(100, 114, 125, 0.5);
+ color: #ffffff;
+ transition-property: background-color;
+ transition-duration: .5s;
+}
+
+window#waybar.hidden {
+ opacity: 0.2;
+}
+
+/*
+window#waybar.empty {
+ background-color: transparent;
+}
+window#waybar.solo {
+ background-color: #FFFFFF;
+}
+*/
+window#waybar.termite {
+ background-color: #3F3F3F;
+}
+
+window#waybar.chromium {
+ background-color: #000000;
+ border: none;
+}
+
+button {
+ /* Use box-shadow instead of border so the text isn't offset */
+ box-shadow: inset 0 -3px transparent;
+ /* Avoid rounded borders under each button name */
+ border: none;
+ border-radius: 0;
+}
+
+/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
+button:hover {
+ background: inherit;
+ box-shadow: inset 0 -3px #ffffff;
+}
+
+#workspaces button {
+ padding: 0 5px;
+ background-color: rgba(0,0,0,0.3);
+ color: #ffffff;
+}
+
+#workspaces button:hover {
+ background: rgba(0, 0, 0, 0.2);
+}
+
+#workspaces button.focused {
+ background-color: rgb(200,0,200);
+ box-shadow: inset 0 -3px #ffffff;
+ padding: 0px 6px;
+}
+
+#workspaces button.urgent {
+ background-color: #eb4d4b;
+}
+
+#mode {
+ background-color: black; /*#64727D;*/
+ border-bottom: 3px solid #ffffff;
+}
+
+#clock,
+#battery,
+#cpu,
+#memory,
+#disk,
+#temperature,
+#backlight,
+#network,
+#pulseaudio,
+#wireplumber,
+#custom-media,
+#tray,
+#mode,
+#idle_inhibitor,
+#scratchpad,
+#mpd {
+ padding: 0 10px;
+ color: #ffffff;
+}
+
+#window,
+#workspaces {
+ margin: 0 4px;
+}
+
+/* If workspaces is the leftmost module, omit left margin */
+.modules-left > widget:first-child > #workspaces {
+ margin-left: 0;
+}
+
+/* If workspaces is the rightmost module, omit right margin */
+.modules-right > widget:last-child > #workspaces {
+ margin-right: 0;
+}
+
+#clock {
+ background-color: #64727D;
+}
+
+#battery {
+ background-color: #ffffff;
+ color: #000000;
+}
+
+#battery.charging, #battery.plugged {
+ color: #ffffff;
+ background-color: #26A65B;
+}
+
+@keyframes blink {
+ to {
+ background-color: #ffffff;
+ color: #000000;
+ }
+}
+
+#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;
+}
+
+label:focus {
+ background-color: #000000;
+}
+
+#cpu {
+ background-color: #2ecc71;
+ color: #000000;
+}
+
+#memory {
+ background-color: #9b59b6;
+}
+
+#disk {
+ background-color: #964B00;
+}
+
+#backlight {
+ background-color: #90b1b1;
+}
+
+#network {
+ background-color: #2980b9;
+}
+
+#network.disconnected {
+ background-color: #f53c3c;
+}
+
+#pulseaudio {
+ background-color: #f1c40f;
+ color: #000000;
+}
+
+#pulseaudio.muted {
+ background-color: #90b1b1;
+ color: #2a5c45;
+}
+
+#wireplumber {
+ background-color: #fff0f5;
+ color: #000000;
+}
+
+#wireplumber.muted {
+ background-color: #f53c3c;
+}
+
+#custom-media {
+ background-color: #66cc99;
+ color: #2a5c45;
+ min-width: 100px;
+}
+
+#custom-media.custom-spotify {
+ background-color: #66cc99;
+}
+
+#custom-media.custom-vlc {
+ background-color: #ffa000;
+}
+
+#temperature {
+ background-color: #f0932b;
+}
+
+#temperature.critical {
+ background-color: #eb4d4b;
+}
+
+#tray {
+ background-color: #2980b9;
+}
+
+#tray > .passive {
+ -gtk-icon-effect: dim;
+}
+
+#tray > .needs-attention {
+ -gtk-icon-effect: highlight;
+ background-color: #eb4d4b;
+}
+
+#idle_inhibitor {
+ background-color: #2d3436;
+}
+
+#idle_inhibitor.activated {
+ background-color: #ecf0f1;
+ color: #2d3436;
+}
+
+#mpd {
+ background-color: #66cc99;
+ color: #2a5c45;
+}
+
+#mpd.disconnected {
+ background-color: #f53c3c;
+}
+
+#mpd.stopped {
+ background-color: #90b1b1;
+}
+
+#mpd.paused {
+ background-color: #51a37a;
+}
+
+#language {
+ background: #00b093;
+ color: #740864;
+ padding: 0 5px;
+ margin: 0 5px;
+ min-width: 16px;
+}
+
+#keyboard-state {
+ background: #97e1ad;
+ color: #000000;
+ padding: 0 0px;
+ margin: 0 5px;
+ min-width: 16px;
+}
+
+#keyboard-state > label {
+ padding: 0 5px;
+}
+
+#keyboard-state > label.locked {
+ background: rgba(0, 0, 0, 0.2);
+}
+
+#scratchpad {
+ background: rgba(0, 0, 0, 0.2);
+}
+
+#scratchpad.empty {
+ background-color: transparent;
+}
diff --git a/templates/waybar.json.j2 b/templates/waybar.json.j2
new file mode 100644
index 0000000..f722560
--- /dev/null
+++ b/templates/waybar.json.j2
@@ -0,0 +1,156 @@
+// {{ ansible_managed }}
+{
+ "layer": "top", // Waybar at top layer
+ // "position": "bottom", // Waybar position (top|bottom|left|right)
+ "height": 30, // Waybar height (to be removed for auto height)
+ // "width": 1280, // Waybar width
+ "spacing": 4, // Gaps between modules (4px)
+ // Choose the order of the modules
+ "modules-left": ["sway/workspaces", "sway/mode", "sway/scratchpad", "custom/media"],
+ "modules-center": ["sway/window"],
+ "modules-right": ["idle_inhibitor", "pulseaudio", "network", "cpu", "memory", "temperature", "backlight", "keyboard-state", "sway/language", "battery", "clock", "tray"],
+ // Modules configuration
+ "sway/workspaces": {
+ "disable-scroll": false,
+ "all-outputs": true,
+ "format": " {icon} ",
+ },
+ "keyboard-state": {
+ "numlock": true,
+ "capslock": true,
+ "format": "{name} {icon}",
+ "format-icons": {
+ "locked": "",
+ "unlocked": ""
+ }
+ },
+ "sway/mode": {
+ "format": "{}"
+ },
+ "sway/scratchpad": {
+ "format": "{icon} {count}",
+ "show-empty": false,
+ "format-icons": ["", ""],
+ "tooltip": true,
+ "tooltip-format": "{app}: {title}"
+ },
+ "mpd": {
+ "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ",
+ "format-disconnected": "Disconnected ",
+ "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ",
+ "unknown-tag": "N/A",
+ "interval": 2,
+ "consume-icons": {
+ "on": " "
+ },
+ "random-icons": {
+ "off": " ",
+ "on": " "
+ },
+ "repeat-icons": {
+ "on": " "
+ },
+ "single-icons": {
+ "on": "1 "
+ },
+ "state-icons": {
+ "paused": "",
+ "playing": ""
+ },
+ "tooltip-format": "MPD (connected)",
+ "tooltip-format-disconnected": "MPD (disconnected)"
+ },
+ "idle_inhibitor": {
+ "format": "{icon}",
+ "format-icons": {
+ "activated": "",
+ "deactivated": ""
+ }
+ },
+ "tray": {
+ // "icon-size": 21,
+ "spacing": 10
+ },
+ "clock": {
+ // "timezone": "America/New_York",
+ "tooltip-format": "{:%Y %B}\n{calendar}",
+ "format-alt": "{:%Y-%m-%d %H:%M %Z}"
+ },
+ "cpu": {
+ "format": "{usage}% ",
+ "tooltip": false
+ },
+ "memory": {
+ "format": "{}% "
+ },
+ "temperature": {
+ // "thermal-zone": 2,
+ // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
+ "critical-threshold": 80,
+ // "format-critical": "{temperatureC}°C {icon}",
+ "format": "{temperatureC}°C {icon}",
+ "format-icons": ["", "", ""]
+ },
+ "backlight": {
+ // "device": "acpi_video1",
+ "format": "{percent}% 🖵",
+ },
+ "battery": {
+ "states": {
+ // "good": 95,
+ "warning": 30,
+ "critical": 15
+ },
+ "format": "{capacity}% {icon}",
+ "format-charging": "{capacity}% ",
+ "format-plugged": "{capacity}% ",
+ "format-alt": "{time} {icon}",
+ // "format-good": "", // An empty format will hide the module
+ // "format-full": "",
+ "format-icons": ["", "", "", "", ""]
+ },
+ "battery#bat2": {
+ "bat": "BAT2"
+ },
+ "network": {
+ // "interface": "wlp2*", // (Optional) To force the use of this interface
+ "format-wifi": "{essid} ({signalStrength}%) ",
+ "format-ethernet": "{ipaddr}/{cidr} ",
+ "tooltip-format": "{ifname} via {gwaddr} ",
+ "format-linked": "{ifname} (No IP) ",
+ "format-disconnected": "Disconnected ⚠",
+ "format-alt": "{ifname}: {ipaddr}/{cidr}"
+ },
+ "pulseaudio": {
+ // "scroll-step": 1, // %, can be a float
+ "format": "{volume}% {icon} {format_source}",
+ "format-bluetooth": "{volume}% {icon} {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"
+ },
+ "custom/media": {
+ "format": "{icon} {}",
+ "return-type": "json",
+ "max-length": 40,
+ "format-icons": {
+ "spotify": "",
+ "default": "🎜"
+ },
+ "escape": true,
+ "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder
+ // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name
+ }
+}
+
diff --git a/vars/main.yml b/vars/main.yml
index e2f7c60..53f6fb1 100644
--- a/vars/main.yml
+++ b/vars/main.yml
@@ -1,3 +1,3 @@
---
-playbook_version_number: 3 # should be int
+playbook_version_number: 4 # should be int
playbook_version_path: 'role-roles-ansible.sway.version'