141 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
---
 | 
						|
- assert:
 | 
						|
    that: >
 | 
						|
      'XDG_CURRENT_DESKTOP' in ansible_env and
 | 
						|
      'GNOME' in ansible_env.XDG_CURRENT_DESKTOP and (
 | 
						|
        ansible_env.XDG_SESSION_TYPE == 'wayland' or
 | 
						|
        ansible_env.XDG_SESSION_TYPE == 'x11'
 | 
						|
      )
 | 
						|
 | 
						|
- set_fact:
 | 
						|
    install_dir: '{{ansible_env.HOME}}/.local/bin'
 | 
						|
    config_dir: '{{ansible_env.HOME}}/.config/xremap'
 | 
						|
- set_fact:
 | 
						|
    executable_path: '{{install_dir}}/xremap'
 | 
						|
 | 
						|
- name: stat executable
 | 
						|
  stat:
 | 
						|
    path: '{{executable_path}}'
 | 
						|
  register: executable
 | 
						|
 | 
						|
- name: get installed version
 | 
						|
  when: executable.stat.exists
 | 
						|
  command: '{{executable_path}} --version'
 | 
						|
  register: version_command
 | 
						|
  changed_when: false
 | 
						|
 | 
						|
- name: extract version from command output
 | 
						|
  when: executable.stat.exists
 | 
						|
  set_fact:
 | 
						|
    installed_version:
 | 
						|
      'v{{version_command.stdout.strip() | regex_replace("^.*(\d+\.\d+\.\d+).*$", "\1")}}'
 | 
						|
 | 
						|
- name: get latest release
 | 
						|
  uri:
 | 
						|
    url: https://api.github.com/repos/k0kubun/xremap/releases/latest
 | 
						|
    headers: '{{github_auth_headers}}'
 | 
						|
  register: latest
 | 
						|
 | 
						|
- name: determine if install needed
 | 
						|
  set_fact:
 | 
						|
    needs_installed:
 | 
						|
      '{{not executable.stat.exists or installed_version != latest.json.name}}'
 | 
						|
    xdg_current_desktop:
 | 
						|
      "{{ansible_env.XDG_CURRENT_DESKTOP | regex_replace('(.*:)?(.*)', '\\2')}}"
 | 
						|
 | 
						|
- name: construct asset query
 | 
						|
  set_fact:
 | 
						|
    asset_query: >
 | 
						|
      [?contains(name, `xremap-linux-{{ansible_architecture}}-{{
 | 
						|
                     xdg_current_desktop | lower}}.zip`)] | [0]
 | 
						|
- name: get release asset
 | 
						|
  set_fact:
 | 
						|
    asset: '{{latest.json.assets | to_json | from_json | json_query(asset_query)}}'
 | 
						|
 | 
						|
- name: create directories
 | 
						|
  file:
 | 
						|
    path: '{{item}}'
 | 
						|
    state: directory
 | 
						|
  with_items:
 | 
						|
    - '{{install_dir}}'
 | 
						|
    - '{{config_dir}}'
 | 
						|
 | 
						|
- name: download release archive
 | 
						|
  when: needs_installed
 | 
						|
  become: true
 | 
						|
  get_url:
 | 
						|
    url: '{{asset.browser_download_url}}'
 | 
						|
    dest: '{{install_dir}}/xremap.zip'
 | 
						|
  environment: '{{proxy_environment}}'
 | 
						|
 | 
						|
- name: extract release archive
 | 
						|
  when: needs_installed
 | 
						|
  become: true
 | 
						|
  unarchive:
 | 
						|
    src: '{{install_dir}}/xremap.zip'
 | 
						|
    dest: '{{install_dir}}'
 | 
						|
 | 
						|
- name: remove release archive
 | 
						|
  when: needs_installed
 | 
						|
  become: true
 | 
						|
  file:
 | 
						|
    path: '{{install_dir}}/xremap.zip'
 | 
						|
    state: absent
 | 
						|
 | 
						|
- name: add user to input group
 | 
						|
  become: true
 | 
						|
  user:
 | 
						|
    name: '{{ansible_user_id}}'
 | 
						|
    append: true
 | 
						|
    groups: input
 | 
						|
 | 
						|
- name: load the uinput kernel module
 | 
						|
  when: ansible_os_family == 'Debian'
 | 
						|
  become: true
 | 
						|
  copy:
 | 
						|
    content: |
 | 
						|
      uinput
 | 
						|
    dest: /etc/modules-load.d/uinput.conf
 | 
						|
 | 
						|
# TODO: This works for on Fedora, author uses it on Ubuntu so I assume Debian
 | 
						|
# will work too. Arch and other distros are potentially different see the docs
 | 
						|
# https://github.com/k0kubun/xremap
 | 
						|
- name: add udev rule for input access
 | 
						|
  become: true
 | 
						|
  copy:
 | 
						|
    content: |
 | 
						|
      KERNEL=="uinput", GROUP="input", TAG+="uaccess"
 | 
						|
    dest: /etc/udev/rules.d/input.rules
 | 
						|
 | 
						|
- name: clone config repo
 | 
						|
  git:
 | 
						|
    repo: git@git.infektor.net:config/xremap.git
 | 
						|
    dest: '{{config_dir}}'
 | 
						|
    version: main
 | 
						|
  notify: restart xremap
 | 
						|
 | 
						|
- name: install xremap systemd unit
 | 
						|
  template:
 | 
						|
    src: xremap.service.j2
 | 
						|
    dest: ~/.config/systemd/user/xremap.service
 | 
						|
  notify: restart xremap
 | 
						|
 | 
						|
- name: enable xremap service
 | 
						|
  systemd:
 | 
						|
    name: xremap
 | 
						|
    scope: user
 | 
						|
    enabled: true
 | 
						|
    state: started
 | 
						|
 | 
						|
- name: check if extension is installed
 | 
						|
  command: gnome-extensions show xremap@k0kubun.com
 | 
						|
  changed_when: false
 | 
						|
  failed_when: false
 | 
						|
  register: extension
 | 
						|
 | 
						|
- when: extension.rc != 0
 | 
						|
  debug:
 | 
						|
    msg: 'install gnome extension then reboot:
 | 
						|
        https://extensions.gnome.org/extension/5060/xremap'
 | 
						|
  changed_when: true
 |