okey-cli 0.1.2

An advanced, easy-to-use key remapper for Linux
Documentation
use std::fs;

use anyhow::Result;
use evdev::Device;

pub fn find_device_by_name(name: &str) -> Result<Option<Device>> {
    let devices = find_input_devices()?;

    let device = devices
        .into_iter()
        .find(|dev| dev.name().is_some_and(|value| value == name));

    Ok(device)
}

pub fn find_input_devices() -> Result<Vec<Device>> {
    let files = fs::read_dir("/dev/input")?;
    let mut results = Vec::new();

    for file in files {
        let entry = file?;

        if !entry.file_name().to_string_lossy().contains("event") {
            continue;
        }

        if let Ok(device) = Device::open(entry.path()) {
            if device.supported_keys().is_some() {
                results.push(device);
            }
        }
    }

    Ok(results)
}