First commit

This commit is contained in:
Yorick Barbanneau 2022-11-29 00:27:56 +01:00
commit 3e88db9045
5 changed files with 191 additions and 0 deletions

74
README.md Normal file
View file

@ -0,0 +1,74 @@
Mako Ansible role
-------------------
This role install and configure [Mako](https://github.com/emersion/mako)
notifiction daemon.
## Variables
This role needs two variables for creating Mako configuration file
* `mako_options`: list of lkey-value abour default Mako options;
* `mako_rules`: list of mako criteria-driven Mako configuration;
The former ils a simple list like in example below:
```yaml
mako_options:
max_history: 5
sort: -time
on-button-left:
on-button-middle:
on-button-right:
on-touch:
on-notify:
# [...]
```
The latter is a little bit more complex:
```yaml
mako_rules:
- criterias:
- field: app-name
value: Firefox
options:
border-color: '#FF0000'
- criterias:
- field: app-name
value: Thunderbird
- field: urgency
value: low
options:
border-color: '#00FFFF'
```
Each rule is divided into 2 parts: *criterias* and *options*. *Criterias*
contains list of field (selector) and values to target notifications. *Options*
contains list of options to apply on targeted notifications.
## Licence
This script is released under le [MIT licence][l_mit]
Copyright © 2021 Yorick Barbanneau
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice (including the next
paragraph) shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
[l_mit]:https://opensource.org/licenses/mit-license.php

38
defaults/main.yml Normal file
View file

@ -0,0 +1,38 @@
---
mako_options:
max_history: 5
sort: -time
on-button-left:
on-button-middle:
on-button-right:
on-touch:
on-notify:
font: monospace 10
background-color: '#285577FF'
text-color: '#FFFFFFFF'
width: 300
height: 100
outer-margin: 10
padding: 5
border-size: 2
border-color: '#4C7899FF'
border-radius: 0
progress-color: 'over #5588AAFF'
icons: 1
max-icon-size: 64
icon-path:
icon-location: left
markup: 1
actions: 1
history: 1
format: '<b>%s</b>\n%b'
text-alignement: left
default-timeout: 0
ignore-timeout: 0
group-by: none
max-visible: 5
output:
layer: top
anchor: top-right
mako_rules: []

15
files/mako.service Normal file
View file

@ -0,0 +1,15 @@
[Unit]
Description=Lightweight Wayland notification daemon
Documentation=man:mako(1)
PartOf=graphical-session.target
After=graphical-session.target
[Service]
Type=dbus
BusName=org.freedesktop.Notifications
ExecCondition=/bin/sh -c '[ -n "$WAYLAND_DISPLAY" ]'
ExecStart=/usr/bin/mako
ExecReload=/usr/bin/makoctl reload
[Install]
WantedBy=sway-session.target

44
tasks/main.yml Normal file
View file

@ -0,0 +1,44 @@
---
- name: Install Mako package
ansible.builtin.package:
name: mako
state: present
become: true
- name: Create Mako config dirs
ansible.builtin.file:
path: '{{ ansible_user_dir ~ "/.config/mako" }}'
state: directory
mode: 0750
owner: '{{ ansible_user_uid }}'
group: '{{ ansible_user_gid }}'
- name: Render templates for Mako config file
ansible.builtin.template:
src: mako.j2
dest: '{{ ansible_user_dir}}/.config/mako/config'
owner: '{{ ansible_user_uid }}'
group: '{{ ansible_user_gid }}'
lstrip_blocks: yes
trim_blocks: yes
mode: 0640
- name: Copy Mako systemd service file
ansible.builtin.copy:
src: 'mako.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: Activate Mako service
ansible.builtin.systemd:
name: 'mako.service'
scope: user
state: started
when: service_file is changed

20
templates/mako.j2 Normal file
View file

@ -0,0 +1,20 @@
{% if mako_options is defined %}
{% for option, value in mako_options.items() %}
{{ option }}="{{ value }}"
{% endfor %}
{% endif %}
{% if mako_rules %}
{% for rule in mako_rules %}
[ {%- for criteria in rule['criterias'] %}
{{ criteria.field ~ '="' ~ criteria.value ~ '"' }}
{%- if not loop.last %}{{ ' ' }}{% endif %}
{%- endfor %}]
{% for option, value in rule['options'].items() %}
{{ option }}={{ value }}
{% endfor %}
{% if not loop.last %}
{% endif %}
{% endfor %}
{% endif %}