#!/bin/bash set -euo pipefail # Based on https://aur.archlinux.org/packages/us_da-layout/ evdev_rules=/usr/share/X11/xkb/rules evdev_xml=$evdev_rules/evdev.xml evdev=$evdev_rules/evdev ibus_file=/usr/share/ibus/component/simple.xml set_permissions_and_move() { tmp_file="$1" dest_file="$2" chown --reference="$dest_file" "$tmp_file" chmod --reference="$dest_file" "$tmp_file" mv "$tmp_file" "$dest_file" } register() { register_evdev register_ibus } unregister() { unregister_evdev unregister_ibus } register_evdev() { if grep -q neolight "$evdev_xml"; then echo "Neolight already found in $evdev_xml" else echo "Adding neolight to $evdev_xml" read -r -d '' layout <<-EOF || true neolight de German (Neolight) deu de_escape_keys German (Neolight, additional escape keys) EOF evdev_xml_tmp="$(mktemp)" awk -v layout="$layout" \ '{ print } // { print layout }' \ "$evdev_xml" > "$evdev_xml_tmp" \ && set_permissions_and_move "$evdev_xml_tmp" "$evdev_xml" fi if grep -q neolight "$evdev"; then echo "Neolight already found in $evdev" else echo "Adding neolight to $evdev" evdev_tmp="$(mktemp)" cat "$evdev" > "$evdev_tmp" || true cat <<-EOF >> "$evdev_tmp" // BEGIN neolight ! option = symbols neolight = +neolight(layers) neolight:escape_keys = +neolight(layers)+neolight(escape_keys) neolight:jp = +neolight(jp) // END neolight EOF set_permissions_and_move "$evdev_tmp" "$evdev" fi } unregister_evdev() { evdev_xml_tmp="$(mktemp)" awk \ 'BEGIN { f=1 } /BEGIN neolight/ { f=0 } /END neolight/ { f=1; next } f' \ "$evdev_xml" > "$evdev_xml_tmp" \ && set_permissions_and_move "$evdev_xml_tmp" "$evdev_xml" evdev_tmp="$(mktemp)" awk \ 'BEGIN { f=1 } /BEGIN neolight/ { f=0 } /END neolight/ { f=1; next } f' \ "$evdev" > "$evdev_tmp" \ && set_permissions_and_move "$evdev_tmp" "$evdev" } register_ibus() { if [[ ! -f "$ibus_file" ]]; then echo "No ibus file found. Skipping." return elif grep -q neolight "$ibus_file"; then echo "Neolight already found in $ibus_file" else echo "Adding neolight to $ibus_file" read -r -d '' engines <<-EOF || true xkb:de:neolight:deu de neolight German (Neolight) German (Neolight) ibus-keyboard 1 xkb:de:neolight_escape_keys:deu de neolight de_escape_keys German (Neolight, additional escape keys) German (Neolight, additional escape keys) ibus-keyboard 1 EOF ibus_tmp="$(mktemp)" awk -v engines="$engines" \ '{ print } // { print engines }' \ "$ibus_file" > "$ibus_tmp" \ && set_permissions_and_move "$ibus_tmp" "$ibus_file" fi } unregister_ibus() { [[ ! -f "$ibus_file" ]] \ && return ibus_tmp="$(mktemp)" awk \ 'BEGIN { f=1 } /BEGIN neolight/ { f=0 } /END neolight/ { f=1; next } f' \ "$ibus_file" > "$ibus_tmp" \ && set_permissions_and_move "$ibus_tmp" "$ibus_file" } case "${1:-}" in "") register;; --unregister) unregister;; -h|--help|*) echo "Usage: register-neolight.sh [--unregister]";; esac