From 1808168211025c58c25dbb29efbf5d3fe623e1e2 Mon Sep 17 00:00:00 2001 From: Yorick Barbanneau Date: Sun, 16 Apr 2023 23:46:44 +0200 Subject: [PATCH] First commit --- README.md | 37 +++++++++ defaults/main.yml | 166 +++++++++++++++++++++++++++++++++++++++++ files/waybar.service | 14 ++++ meta/main.yml | 8 ++ tasks/main.yml | 56 ++++++++++++++ templates/config.j2 | 1 + templates/style.css.j2 | 114 ++++++++++++++++++++++++++++ 7 files changed, 396 insertions(+) create mode 100644 README.md create mode 100644 defaults/main.yml create mode 100644 files/waybar.service create mode 100644 meta/main.yml create mode 100644 tasks/main.yml create mode 100644 templates/config.j2 create mode 100644 templates/style.css.j2 diff --git a/README.md b/README.md new file mode 100644 index 0000000..6fb9ade --- /dev/null +++ b/README.md @@ -0,0 +1,37 @@ +Waybar Ansible Role +------------------- + +Install and configure [Waybar](https://github.com/Alexays/Waybar/) + + +## Variables + +You can define 2 variables for this role + +`waybar_option` represent the Waybar configuration file in `yaml` format. The +default values give you the provided configuration given on the Waybar +repository. + +`waybar_style` is a list of element to render `style.css` template provide in +this role. Here is the defaut values: + +```yaml +waybar_style: + colors: + bg: '#323232' + fg: '#ddd' + hover: '#f268b3' + selected: '#1cd180' + ok: '#1cd180' + warning: '#f2b768' + critical: '#f268b3' + fonts: + bar: + family: 'Fira Code Nerd Font' + size: '12px' + tray: + family: 'DejaVu sans' + size: '12px' +``` + +I choose to provide a custom `style.css` template for my need. diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..d093cec --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,166 @@ +--- +waybar_options: + height: 3 + spacing: 4 + modules-left: + - "sway/workspaces" + - "sway/mode" + - "sway/scratchpad" + - "custom/media" + modules-center: + - "sway/window" + modules-right: + - "mpd" + - "idle_inhibitor" + - "pulseaudio" + - "network" + - "cpu" + - "memory" + - "temperature" + - "backlight" + - "keyboard-state" + - "sway/language" + - "battery" + - "battery#bat2" + - "clock" + - "tray" + 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: + spacing: 10 + clock: + tooltip-format: "{:%Y %B}\n{calendar}" + format-alt: "{:%Y-%m-%d}" + cpu: + format: "{usage}% " + tooltip: false + memory: + format: "{}% " + temperature: + critical-threshold: 80 + format: "{temperatureC}°C {icon}" + format-icons: + - "" + - "" + - "" + backlight: + format: "{percent}% {icon}" + format-icons: + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + battery: + states: + warning: 30 + critical: 15 + format: "{capacity}% {icon}" + format-charging: "{capacity}% " + format-plugged: "{capacity}% " + format-alt: "{time} {icon}" + format-icons: + - "" + - "" + - "" + - "" + - "" + battery#bat2: + bat: "BAT2" + network: + 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: + 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" + +waybar_style: + colors: + bg: '#323232' + fg: '#ddd' + hover: '#f268b3' + selected: '#1cd180' + ok: '#1cd180' + warning: '#f2b768' + critical: '#f268b3' + fonts: + bar: + family: 'Fira Code Nerd Font' + size: '12px' + tray: + family: 'DejaVu sans' + size: '12px' + diff --git a/files/waybar.service b/files/waybar.service new file mode 100644 index 0000000..340238d --- /dev/null +++ b/files/waybar.service @@ -0,0 +1,14 @@ +[Unit] +Description=Highly customizable Wayland bar for Sway and Wlroots based compositors. +Documentation=https://github.com/Alexays/Waybar/wiki/ +PartOf=graphical-session.target +After=graphical-session.target +Requisite=sway-session.target + +[Service] +ExecStart=/usr/bin/waybar +ExecReload=kill -SIGUSR2 $MAINPID +Restart=on-failure + +[Install] +WantedBy=sway-session.target diff --git a/meta/main.yml b/meta/main.yml new file mode 100644 index 0000000..7a73beb --- /dev/null +++ b/meta/main.yml @@ -0,0 +1,8 @@ +--- +galaxy_info: + role_name: ansible_swaylock + author: ephase + description: install and configure Swaylock + issue_tracker_url: https://git.epha.se/ephase/ansible-swaylock + license: MIT + min_ansible_version: '1.4' diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..f9b68ac --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,56 @@ +--- +- name: Install Waybar package + ansible.builtin.package: + name: waybar + state: present + become: true + +- name: Create Waybar config dirs + ansible.builtin.file: + path: '{{ ansible_user_dir ~ "/.config/waybar" }}' + state: directory + mode: 0750 + owner: '{{ ansible_user_uid }}' + group: '{{ ansible_user_gid }}' + +- name: Render templates for Waybar config file + ansible.builtin.template: + src: '{{ item }}.j2' + dest: '{{ ansible_user_dir}}/.config/waybar/{{ item }}' + owner: '{{ ansible_user_uid }}' + group: '{{ ansible_user_gid }}' + lstrip_blocks: yes + trim_blocks: yes + mode: 0640 + loop: + - config + - style.css + register: config_file + +- name: copy Waybar systemd service file + ansible.builtin.copy: + src: 'waybar.service' + dest: '{{ ansible_user_dir }}/.config/systemd/user/' + mode: 0640 + register: service_file + +- block: + - name: Reload Systemd daemon + ansible.builtin.systemd: + scope: user + daemon-reload: true + + - name: Enable Waybar service + ansible.builtin.systemd: + name: 'waybar.service' + scope: user + state: started + enabled: true + when: service_file is changed and not ansible_check_mode + +- name: Restart Waybar service + ansible.builtin.systemd: + name: waybar.service + state: restarted + scope: user + when: config_file is changed and not service_file is changed diff --git a/templates/config.j2 b/templates/config.j2 new file mode 100644 index 0000000..7267fbf --- /dev/null +++ b/templates/config.j2 @@ -0,0 +1 @@ +{{ waybar_options | to_nice_json(ensure_ascii=False) }} diff --git a/templates/style.css.j2 b/templates/style.css.j2 new file mode 100644 index 0000000..78b729e --- /dev/null +++ b/templates/style.css.j2 @@ -0,0 +1,114 @@ + +@define-color color-base-bg {{ waybar_style.colors.bg }}; +@define-color color-base-fg {{ waybar_style.colors.fg }}; + +@define-color color-hover {{ waybar_style.colors.hover }}; +@define-color color-selected {{ waybar_style.colors.selected }}; + +@define-color color-ok {{ waybar_style.colors.ok }}; +@define-color color-warning {{ waybar_style.colors.warning }}; +@define-color color-critical {{ waybar_style.colors.critical }}; + +* { + border: none; + border-radius: 0; + min-height:0; +} + +window#waybar { + background: @color-base-bg ; + color: @color-base-fg; + font-family: "{{ waybar_style.fonts.bar.family }}"; + font-size: {{ waybar_style.fonts.bar.size }}; +} + +button, +button:disabled,label:disabled{ + color:inherit; +} + +button:hover{ + background:none; + box-shadow:inherit; + box-shadow:inherit; + text-shadow:inherit; + text-shadow:inherit; + border-top:none; +} +#workspaces { + color:#fff; +} +#workspaces button { + margin:0 3px; + padding:4px 4px; + color:#9c9c9c; + border-bottom: 1px solid transparent; +} + +#workspaces button:hover { + box-shadow:inherit; + text-shadow:inherit; + color: @color-hover; + border-bottom: 1px solid @color-hover; +} + +#workspaces button.focused { + background:#1cd180 ; + color:#000; +} +#workspaces button.visible:not(.focused) { + color: @color-selected; + border-color: @color-selected; +} + +#clock, +#cpu, +#memory, +#backlight, +#network, +#tray, +#mode, +#battery, +#idle_inhibitor { + padding: 2px 4px; + margin: 0; + background-color: transparent; +} + +#mode{ + background:@color-warning; + font-weight:bold; +} +#pulseaudio {} +#pulseaudio.muted { + color:@color-critical; +} + +#battery.discharging { + color: @color-base-fg; + border-bottom: none; +} + +#battery.charging, #battery.plugged { + border-bottom: 1px solid @color-ok; + color: @color-selected; +} + +#battery.critical:not(.charging), +#cpu.critical, +#memory.critical{ + border-color: @color-critical; + color: @color-critical; +} + +#battery.warning:not(.charging), +#cpu.warning, +#memory.warning{ + border-color: @color-warning; + color: @color-warning; +} + +#tray { + font-family: "{{ waybar_style.fonts.tray.family }}"; + font-size: {{ waybar_style.fonts.tray.size }}; +}