First commit
This commit is contained in:
commit
ea4c167527
4 changed files with 160 additions and 0 deletions
54
README.md
Normal file
54
README.md
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
Kanshi Ansible role
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
This role install and configure [Kanshi](https://git.sr.ht/~emersion/kanshi})
|
||||||
|
service.
|
||||||
|
|
||||||
|
|
||||||
|
## Variables
|
||||||
|
|
||||||
|
This role needs two variables for creating Kanshi configuration file
|
||||||
|
`sway_output` provided by [ansible-sway](https://git.epha.se/ephase/ansible-sway)
|
||||||
|
role and `kanshi_profiles`.
|
||||||
|
|
||||||
|
`sway_outputs` is not mandatory butuseful to provide id ans options for outputs.
|
||||||
|
|
||||||
|
Here is an example of `kanshi_profile`
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
kanshi_profiles:
|
||||||
|
- profile: 'laptop'
|
||||||
|
screens:
|
||||||
|
- id: 'eDP-1'
|
||||||
|
- profile: 'home'
|
||||||
|
screens:
|
||||||
|
- id: 'eDP-1'
|
||||||
|
enable: false
|
||||||
|
- id: 'iiyama_27_4k'
|
||||||
|
position: '1080,0'
|
||||||
|
- id: 'iiyama_23_fhd'
|
||||||
|
position: '0,0'
|
||||||
|
mode: '1920x1024'
|
||||||
|
transform: 90
|
||||||
|
options:
|
||||||
|
- id: 'eDP-1'
|
||||||
|
option: 'bg'
|
||||||
|
value: '~/images/bg.jpg'
|
||||||
|
commands:
|
||||||
|
- swaymsg workspace 1, move workspace to +eDP1+
|
||||||
|
```
|
||||||
|
|
||||||
|
* `profile`: name of the profile
|
||||||
|
* `screens`: list of outputs
|
||||||
|
* `id`: id of the screen, could be the real name, ouput name like *HDMI-1*
|
||||||
|
(both given by `swaymsg -t output`) or id referenced in `sway_outputs`
|
||||||
|
* `position`: absolute position of the screen
|
||||||
|
* `mode`: resolution of the screen
|
||||||
|
* `scale`: scale factor for the screen
|
||||||
|
* `transform`: rotation (90, 180 or 270 degres) for the screen
|
||||||
|
* `options`: list of options:
|
||||||
|
* `id`: see above in *screens* section
|
||||||
|
* `options`: option name
|
||||||
|
* `value`: value
|
||||||
|
* `commands`: list of command to execute when switching to profile
|
||||||
|
|
11
files/kanshi.service
Normal file
11
files/kanshi.service
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Dynamic output configuration for Wayland compositors
|
||||||
|
Documentation=https://sr.ht/~emersion/kanshi
|
||||||
|
BindsTo=sway-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/kanshi
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=sway-session.target
|
38
tasks/main.yml
Normal file
38
tasks/main.yml
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
---
|
||||||
|
- name: Install Kanshi package
|
||||||
|
ansible.builtin.package:
|
||||||
|
name: kanshi
|
||||||
|
state: present
|
||||||
|
become: true
|
||||||
|
|
||||||
|
- name: Create Sway config dirs
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: '{{ ansible_user_dir ~ "/.config/sway/conf.d" }}'
|
||||||
|
state: directory
|
||||||
|
mode: 0750
|
||||||
|
owner: '{{ ansible_user_uid }}'
|
||||||
|
group: '{{ ansible_user_gid }}'
|
||||||
|
|
||||||
|
- name: Render templates for Kanshi config file
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: config.j2
|
||||||
|
dest: '{{ ansible_user_dir}}/.config/kanshi/config'
|
||||||
|
owner: '{{ ansible_user_uid }}'
|
||||||
|
group: '{{ ansible_user_gid }}'
|
||||||
|
lstrip_blocks: yes
|
||||||
|
trim_blocks: yes
|
||||||
|
mode: 0640
|
||||||
|
#any_errors_fatal: true
|
||||||
|
|
||||||
|
- name: copy systemd service file {{ item }}
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: 'kanshi.service'
|
||||||
|
dest: '{{ ansible_user_dir }}/.config/systemd/user/'
|
||||||
|
mode: 0640
|
||||||
|
|
||||||
|
- name: activate service
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: 'kanshi.service'
|
||||||
|
scope: user
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
57
templates/config.j2
Normal file
57
templates/config.j2
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
# {{ ansible_managed }}
|
||||||
|
{% if kanshi_profiles is defined %}
|
||||||
|
{% for p in kanshi_profiles %}
|
||||||
|
profile {{ p.profile | default('') }} {
|
||||||
|
{# Process screens #}
|
||||||
|
{% for s in p.screens %}
|
||||||
|
{% set current = (sway_outputs | selectattr('id','==', s.id))[0] %}
|
||||||
|
{{- ' output "' ~ current['name'] | default(s.id) ~ '"' -}}
|
||||||
|
{% if s.status is defined and s.status == 'disable' %}
|
||||||
|
{{- ' disable' -}}
|
||||||
|
{% else %}
|
||||||
|
{% if s.status is defined and s.status == 'enable' %}
|
||||||
|
{{- ' enable' -}}
|
||||||
|
{% endif %}
|
||||||
|
{% if s.position is defined %}
|
||||||
|
{{- ' position ' ~ s.position -}}
|
||||||
|
{% endif %}
|
||||||
|
{% if s.transform is defined %}
|
||||||
|
{#
|
||||||
|
use sway config transform here is not a good idea because
|
||||||
|
rotation will be applied two times
|
||||||
|
#}
|
||||||
|
{{- ' transform ' ~ s.transform -}}
|
||||||
|
{% endif %}
|
||||||
|
{% if s.scale is defined %}
|
||||||
|
{{- ' scale ' ~ s.scale -}}
|
||||||
|
{% elif current['options']['scale'] is defined %}
|
||||||
|
{{- ' scale ' ~ current['options']['scale'] -}}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% endfor -%}
|
||||||
|
|
||||||
|
{# process options#}
|
||||||
|
{% if p.options is defined %}
|
||||||
|
{% for o in p.options %}
|
||||||
|
{% set current = (sway_outputs | selectattr('id','==', o.id))[0] %}
|
||||||
|
{{- ' output "' ~ current['name'] | default(s.id) ~ '" ' -}}
|
||||||
|
{{ o.option }} {{ o.value }}
|
||||||
|
{% endfor -%}
|
||||||
|
{% endif -%}
|
||||||
|
|
||||||
|
{# Process command#}
|
||||||
|
{% if p.commands is defined %}
|
||||||
|
{% for c in p.commands %}
|
||||||
|
{% set cmd = namespace(cmd = c) %}
|
||||||
|
{% if sway_outputs is defined %}
|
||||||
|
{% for o in sway_outputs %}
|
||||||
|
{% set cmd.cmd = ( cmd.cmd | replace('+'+o.id+'+', '"'+o.name+'"')) %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{{- ' exec ' ~ cmd.cmd }}
|
||||||
|
{% endfor -%}
|
||||||
|
{% endif -%}
|
||||||
|
}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
Loading…
Add table
Add a link
Reference in a new issue