Linux daemon to bind keys and macros to your controller's buttons

Overview

makima

Makima is a daemon for Linux to bind your controller's buttons to key sequences and macros.

Features:

  • Configure your keybindings through a simple TOML config file
  • Bind single keys/buttons or entire macros, sequences and shortcuts
  • Supports keyboard keys, mouse buttons and any other input event that's in /usr/include/linux/input-event-codes.h
  • Move your cursor using analog sticks with adjustable sensitivity
  • Hotplug to connect and disconnect your controllers whenever you want
  • Connect multiple controllers at the same time so your little brother can join and close your IDE when you least expect it
  • Supports wired and Bluetooth connections
  • Written in Rust so it's blazingly fast or something? (it only uses 3.5 MB of RAM)

Tested controllers:

  • DualShock 2
  • DualShock 3
  • DualShock 4
  • DualSense
  • Xbox 360
  • Xbox One
  • Xbox Elite 2
  • Stadia
  • Switch Joy-Cons

How to use:

  1. Download the executable from the Releases page or compile it yourself using Cargo.
  2. Pick a config file compatible with your controller(s) from the "config examples" folder and put it in ~/.config/makima, rename it to config.toml.
  3. Customize the keybindings to your liking. Info about the specific configs is commented inside the config files.
  4. Make sure the executable has permission to be executed as a program. If not, cd to the directory of the executable and use chmod +x makima.
  5. Make sure your user has access to event devices. If it doesn't, use sudo usermod -aG input yourusername.
  6. Launch Makima and it'll automatically recognize all connected controllers.
    • You can either:
      • Launch it from your file manager by double clicking.
      • Launch it from terminal by cding to the directory of the executable, then using ./makima.
      • Move the executable to a directory that's in PATH, then launch it using rofi, dmenu or whatever launcher you use. I personally added ~/.local/share/bin to PATH and put all my executables there.
      • Create a .desktop file and launch it from there.
      • Autostart it from your window manager's config file (usually exec /path/to/makima).
You might also like...
A tiny Rust std-lib for Linux x86_64 and aarch64

Tiny std Like a bad, probably buggy, tiny standard library for Linux. When it's appropriate If you are actually trying to do something solid, checkout

API for the creation character based games in Linux.
API for the creation character based games in Linux.

Console Game Engine for Linux. API for the creation of character based games in Linux. The inspiration came from the olcConsoleGameEngine. This is my

Streaming I/O for Linux built on DMA Buffers

dmastorage High-performance I/O for Linux based on DMA Buffers ALPHA QUALITY SOFTWARE Warning DmaStorage is still just a concept and shouldn't be used

An ownership model that is used to replace the Ring in Linux.

std-ownership An ownership model that is used to replace the Ring in Linux. It's 10x faster than Ring in Syscall. Overview The ownership system allows

Open source bible study program on Linux!
Open source bible study program on Linux!

Open Witness Library Open Witness Library is a program to read articles that carries God's true name. Warning This branch is outdated, please refer to

Blazing fast, memory safe & modern Linux package manager written in Rust.

paket Blazing fast, memory safe & modern Linux package manager written in Rust. Roadmap Version: 0.1 Paket.toml file parsing. (#1, #2) CLI handling (p

Some UwU and OwO for your Rust code

UwU Types Some UwU and OwO for your Rust code This is a Rust crate inspired by this tweet from @thingskatedid / @katef. Credits Some extra functionali

TypeRust - simple Rust playground where you can build or run your Rust code and share it with others

Rust playground Welcome to TypeRust! This is a simple Rust playground where you can build or run your Rust code and share it with others. There are a

Goodname is a tool to assist you with cool naming of your methods and software

Goodname is a tool to assist you with cool naming of your methods and software. Given a brief description of your method or software, this tool enumerates name candidates forming subsequences of the description (i.e., abbreviation).

Comments
  • How works with 2 device with same buttons

    How works with 2 device with same buttons

    I mean I have a Razer https://www.razer.com/it-it/gaming-keypads/razer-tartarus-v2 that as you can see has a mouse scroll that I want to map different just for this device. Also has different buttons that are the same for a keyboard but I want to map to different buttons and don't create conflicts.

    opened by Mte90 1
Releases(v0.1.1)
  • v0.1.1(Jun 10, 2023)

    Switch users won't be left behind

    Added support for Nintendo Switch Joy-Cons.

    XBOX_CONTROLLER parameter in the config file renamed to SIGNED_AXIS_VALUE since it now applies to Switch Joy-Cons as well. Please update it if you're using a config file from an old release.

    Source code(tar.gz)
    Source code(zip)
    makima(5.55 MB)
  • v0.1.0(Jun 6, 2023)

Owner
null
Secure mTLS and gRPC backed runtime daemon. Alternative to systemd. Written in Rust.

Auraed A runtime daemon written in Rust. Designed to run as pid 1 mTLS backed gRPC API over unix domain socket Run executables Run containers Run virt

Aurae Runtime 57 Dec 22, 2022
Simple daemon built with Rust to track metrics.

Marvin - Metrics Tracker What I cannot create, I do not understand. — Richard Feynman Simple daemon built with Rust to track metrics. The goal is run

João Henrique Machado Silva 3 Aug 30, 2021
Rust crates with map and set with interval keys (ranges x..y).

This crates implements map and set with interval keys (ranges x..y). IntervalMap is implemented using red-black binary tree, where each node contains

Timofey Prodanov 8 Aug 23, 2022
📈 The fastest map possible in Rust, where keys are integers and the capacity is fixed (faster than Vec!)

It is an alternative on-heap implementation of a map with keys of type usize and a fixed capacity. It works much faster than a standard HashMap becaus

Yegor Bugayenko 6 Apr 26, 2023
Attribute for defining `macro_rules!` macros with proper visibility and scoping

macro-vis This crate provides an attribute for defining macro_rules! macros that have proper visibility and scoping. The default scoping and publicity

null 2 Aug 29, 2022
A Rust crate providing utility functions and macros.

介绍 此库提供四类功能:异常处理、http post收发对象、格式转换、语法糖。 在 Cargo.toml 里添加如下依赖项 [dependencies.xuanmi_base_support] git = "https://github.com/taiyi-research-institute/x

null 17 Mar 22, 2023
Learn to write Rust procedural macros [Rust Latam conference, Montevideo Uruguay, March 2019]

Rust Latam: procedural macros workshop This repo contains a selection of projects designed to learn to write Rust procedural macros — Rust code that g

David Tolnay 2.5k Dec 29, 2022
Lightweight parsing for Rust proc macros

Lightweight parsing for Rust proc macros Venial is a WIP parser for Rust proc macros. When writing proc macros that need to parse Rust code (such as a

Olivier FAURE 148 Dec 30, 2022
Proc-macros for generating icons from the Iconify API

iconify-rs This crate provides a macro to embed SVGs from Iconify. For a list of icons, see Iconify Icon Sets. ?? Usage let svg = iconify::svg!("mdi:h

Matthew Taylor 5 Jul 9, 2023
qfetch is a tool that fetches info about your linux install.

qfetch qfetch is a tool that fetches info about your linux install. Status Dependencies /proc/meminfo with the following fields: MemTotal in the 1st l

Demir Yerli 2 Nov 16, 2022