Dynamic key remapper for Wayland Window System, especially for Sway

Overview

test PyPI version

wayremap

Dynamic keyboard remapper for Wayland.

It works on both X Window Manager and Wayland, but focused on Wayland as it intercepts evdev input and require root permission.

Motivation

Wayland and Sway is awesome. It brings lots of benefit to Linux desktop environment.

When I was using X desktop envionment, there is an awesome tool called xremap which remap keys based on current focused application.

https://github.com/k0kubun/xremap

I was looking for something similar to xremap for Wayland, but not found, so I decided to create on my own.

Install

sudo pip install wayremap

Run

For Wayland security model, we have to do execute key remapping as root.

Simply write your own service and run it as python script:

 # /opt/wayremap.py

from wayremap.config import WayremapConfig, Binding
from wayremap.main import run
import uinput as k

wayremap_config = WayremapConfig(
    # Filter applications which remap will be applied
    applications=[
        'Chromium',
        'Brave-browser',
        'Leafpad',
        'firefoxdeveloperedition',
    ],
    bindings=[
        # Emacs-like key binding
        Binding('ctrl.alt.a', [[k.KEY_LEFTCTRL, k.KEY_HOME]]),
        Binding('ctrl.alt.e', [[k.KEY_LEFTCTRL, k.KEY_END]]),
        Binding('ctrl.alt.h', [[k.KEY_LEFTCTRL, k.KEY_BACKSPACE]]),
        Binding('ctrl.f', [[k.KEY_RIGHT]]),
        Binding('ctrl.b', [[k.KEY_LEFT]]),
        Binding('ctrl.p', [[k.KEY_UP]]),
        Binding('ctrl.n', [[k.KEY_DOWN]]),
        Binding('ctrl.k',
                [[k.KEY_LEFTSHIFT, k.KEY_END], [k.KEY_LEFTCTRL, k.KEY_X]]),
        Binding('ctrl.a', [[k.KEY_HOME]]),
        Binding('ctrl.e', [[k.KEY_END]]),
        Binding('ctrl.y', [[k.KEY_LEFTCTRL, k.KEY_V]]),
        Binding('alt.f', [[k.KEY_LEFTCTRL, k.KEY_RIGHT]]),
        Binding('alt.b', [[k.KEY_LEFTCTRL, k.KEY_LEFT]]),
        Binding('alt.d', [[k.KEY_LEFTCTRL, k.KEY_DELETE]]),
        Binding('ctrl.h', [[k.KEY_BACKSPACE]]),
        Binding('ctrl.s', [[k.KEY_LEFTCTRL, k.KEY_F]]),

        # OSX-like key binding
        Binding('alt.a', [[k.KEY_LEFTCTRL, k.KEY_A]]),
        Binding('alt.c', [[k.KEY_LEFTCTRL, k.KEY_C]]),
        Binding('alt.v', [[k.KEY_LEFTCTRL, k.KEY_V]]),
        Binding('alt.x', [[k.KEY_LEFTCTRL, k.KEY_X]]),

        # Slack helm!
        Binding('alt.x', [[k.KEY_LEFTCTRL, k.KEY_K]]),
    ])

run(wayremap_config, '/dev/input/event4')

And then

sudo modprobe uinput
sudo python /opt/wayremap.py

Note that '/dev/input/event4' varies among system.

Known bugs

  • 3 is pressed when changing focused window
  • Key repeating become slow while switching focused windowd

Roadmap

  • Enable to run wihtout Sway
  • Packaging for Arch Linux, Debian, Fedora, etc.
  • Enable to load per-application config.
  • Re-write in Rust for better performance.
Comments
  • PgUp, PgDn, + specific keyboard

    PgUp, PgDn, + specific keyboard

    Yank from reddit:

    Ooh nice. I have a usecase. Could you tell me if that would be supported?

    On my laptop keyboard PageUp and PageDown are smooshed to the arrow keys, and I keep hitting them by mistake. I would like to disable them in the terminal (mostly happens using a shell or vim).

    Perhaps remap them to [Win]+[PageDown] in case I need them anyway. BUT I do not want to disable them on my external keyboard (or alternatively when an external keyboard is connected.)

    So I would line to disable some keys on a specific input device and enable keys with modifiers (shift, win, etc)

    opened by yschaeff 6
  • support USB device

    support USB device

    • support specifying device by name
      • /dev/eventXXX can be changed if the USB device is detached/attached
    • support running multiple mappings for keyboards
    opened by acro5piano 1
  • Support remapping all keys, in addition to alphabet keys

    Support remapping all keys, in addition to alphabet keys

    All evdev keys are the following:

    KEY_0
    KEY_1
    KEY_102ND
    KEY_10CHANNELSDOWN
    KEY_10CHANNELSUP
    KEY_2
    KEY_3
    KEY_3D_MODE
    KEY_4
    KEY_5
    KEY_6
    KEY_7
    KEY_8
    KEY_9
    KEY_A
    KEY_AB
    KEY_ADDRESSBOOK
    KEY_AGAIN
    KEY_ALS_TOGGLE
    KEY_ALTERASE
    KEY_ANGLE
    KEY_APOSTROPHE
    KEY_APPSELECT
    KEY_ARCHIVE
    KEY_ASPECT_RATIO
    KEY_ASSISTANT
    KEY_ATTENDANT_OFF
    KEY_ATTENDANT_ON
    KEY_ATTENDANT_TOGGLE
    KEY_AUDIO
    KEY_AUDIO_DESC
    KEY_AUX
    KEY_B
    KEY_BACK
    KEY_BACKSLASH
    KEY_BACKSPACE
    KEY_BASSBOOST
    KEY_BATTERY
    KEY_BLUE
    KEY_BLUETOOTH
    KEY_BOOKMARKS
    KEY_BREAK
    KEY_BRIGHTNESSDOWN
    KEY_BRIGHTNESSUP
    KEY_BRIGHTNESS_AUTO
    KEY_BRIGHTNESS_CYCLE
    KEY_BRIGHTNESS_MAX
    KEY_BRIGHTNESS_MIN
    KEY_BRIGHTNESS_TOGGLE
    KEY_BRIGHTNESS_ZERO
    KEY_BRL_DOT1
    KEY_BRL_DOT10
    KEY_BRL_DOT2
    KEY_BRL_DOT3
    KEY_BRL_DOT4
    KEY_BRL_DOT5
    KEY_BRL_DOT6
    KEY_BRL_DOT7
    KEY_BRL_DOT8
    KEY_BRL_DOT9
    KEY_BUTTONCONFIG
    KEY_C
    KEY_CALC
    KEY_CALENDAR
    KEY_CAMERA
    KEY_CAMERA_DOWN
    KEY_CAMERA_FOCUS
    KEY_CAMERA_LEFT
    KEY_CAMERA_RIGHT
    KEY_CAMERA_UP
    KEY_CAMERA_ZOOMIN
    KEY_CAMERA_ZOOMOUT
    KEY_CANCEL
    KEY_CAPSLOCK
    KEY_CD
    KEY_CHANNEL
    KEY_CHANNELDOWN
    KEY_CHANNELUP
    KEY_CHAT
    KEY_CLEAR
    KEY_CLOSE
    KEY_CLOSECD
    KEY_CNT
    KEY_COFFEE
    KEY_COMMA
    KEY_COMPOSE
    KEY_COMPUTER
    KEY_CONFIG
    KEY_CONNECT
    KEY_CONTEXT_MENU
    KEY_CONTROLPANEL
    KEY_COPY
    KEY_CUT
    KEY_CYCLEWINDOWS
    KEY_D
    KEY_DASHBOARD
    KEY_DATA
    KEY_DATABASE
    KEY_DELETE
    KEY_DELETEFILE
    KEY_DEL_EOL
    KEY_DEL_EOS
    KEY_DEL_LINE
    KEY_DIGITS
    KEY_DIRECTION
    KEY_DIRECTORY
    KEY_DISPLAYTOGGLE
    KEY_DISPLAY_OFF
    KEY_DOCUMENTS
    KEY_DOLLAR
    KEY_DOT
    KEY_DOWN
    KEY_DVD
    KEY_E
    KEY_EDIT
    KEY_EDITOR
    KEY_EJECTCD
    KEY_EJECTCLOSECD
    KEY_EMAIL
    KEY_END
    KEY_ENTER
    KEY_EPG
    KEY_EQUAL
    KEY_ESC
    KEY_EURO
    KEY_EXIT
    KEY_F
    KEY_F1
    KEY_F10
    KEY_F11
    KEY_F12
    KEY_F13
    KEY_F14
    KEY_F15
    KEY_F16
    KEY_F17
    KEY_F18
    KEY_F19
    KEY_F2
    KEY_F20
    KEY_F21
    KEY_F22
    KEY_F23
    KEY_F24
    KEY_F3
    KEY_F4
    KEY_F5
    KEY_F6
    KEY_F7
    KEY_F8
    KEY_F9
    KEY_FASTFORWARD
    KEY_FASTREVERSE
    KEY_FAVORITES
    KEY_FILE
    KEY_FINANCE
    KEY_FIND
    KEY_FIRST
    KEY_FN
    KEY_FN_1
    KEY_FN_2
    KEY_FN_B
    KEY_FN_D
    KEY_FN_E
    KEY_FN_ESC
    KEY_FN_F
    KEY_FN_F1
    KEY_FN_F10
    KEY_FN_F11
    KEY_FN_F12
    KEY_FN_F2
    KEY_FN_F3
    KEY_FN_F4
    KEY_FN_F5
    KEY_FN_F6
    KEY_FN_F7
    KEY_FN_F8
    KEY_FN_F9
    KEY_FN_RIGHT_SHIFT
    KEY_FN_S
    KEY_FORWARD
    KEY_FORWARDMAIL
    KEY_FRAMEBACK
    KEY_FRAMEFORWARD
    KEY_FRONT
    KEY_FULL_SCREEN
    KEY_G
    KEY_GAMES
    KEY_GOTO
    KEY_GRAPHICSEDITOR
    KEY_GRAVE
    KEY_GREEN
    KEY_H
    KEY_HANGEUL
    KEY_HANGUEL
    KEY_HANGUP_PHONE
    KEY_HANJA
    KEY_HELP
    KEY_HENKAN
    KEY_HIRAGANA
    KEY_HOME
    KEY_HOMEPAGE
    KEY_HP
    KEY_I
    KEY_IMAGES
    KEY_INFO
    KEY_INSERT
    KEY_INS_LINE
    KEY_ISO
    KEY_J
    KEY_JOURNAL
    KEY_K
    KEY_KATAKANA
    KEY_KATAKANAHIRAGANA
    KEY_KBDILLUMDOWN
    KEY_KBDILLUMTOGGLE
    KEY_KBDILLUMUP
    KEY_KBDINPUTASSIST_ACCEPT
    KEY_KBDINPUTASSIST_CANCEL
    KEY_KBDINPUTASSIST_NEXT
    KEY_KBDINPUTASSIST_NEXTGROUP
    KEY_KBDINPUTASSIST_PREV
    KEY_KBDINPUTASSIST_PREVGROUP
    KEY_KBD_LAYOUT_NEXT
    KEY_KBD_LCD_MENU1
    KEY_KBD_LCD_MENU2
    KEY_KBD_LCD_MENU3
    KEY_KBD_LCD_MENU4
    KEY_KBD_LCD_MENU5
    KEY_KEYBOARD
    KEY_KP0
    KEY_KP1
    KEY_KP2
    KEY_KP3
    KEY_KP4
    KEY_KP5
    KEY_KP6
    KEY_KP7
    KEY_KP8
    KEY_KP9
    KEY_KPASTERISK
    KEY_KPCOMMA
    KEY_KPDOT
    KEY_KPENTER
    KEY_KPEQUAL
    KEY_KPJPCOMMA
    KEY_KPLEFTPAREN
    KEY_KPMINUS
    KEY_KPPLUS
    KEY_KPPLUSMINUS
    KEY_KPRIGHTPAREN
    KEY_KPSLASH
    KEY_L
    KEY_LANGUAGE
    KEY_LAST
    KEY_LEFT
    KEY_LEFTALT
    KEY_LEFTBRACE
    KEY_LEFTCTRL
    KEY_LEFTMETA
    KEY_LEFTSHIFT
    KEY_LEFT_DOWN
    KEY_LEFT_UP
    KEY_LIGHTS_TOGGLE
    KEY_LINEFEED
    KEY_LIST
    KEY_LOGOFF
    KEY_M
    KEY_MACRO
    KEY_MACRO1
    KEY_MACRO10
    KEY_MACRO11
    KEY_MACRO12
    KEY_MACRO13
    KEY_MACRO14
    KEY_MACRO15
    KEY_MACRO16
    KEY_MACRO17
    KEY_MACRO18
    KEY_MACRO19
    KEY_MACRO2
    KEY_MACRO20
    KEY_MACRO21
    KEY_MACRO22
    KEY_MACRO23
    KEY_MACRO24
    KEY_MACRO25
    KEY_MACRO26
    KEY_MACRO27
    KEY_MACRO28
    KEY_MACRO29
    KEY_MACRO3
    KEY_MACRO30
    KEY_MACRO4
    KEY_MACRO5
    KEY_MACRO6
    KEY_MACRO7
    KEY_MACRO8
    KEY_MACRO9
    KEY_MACRO_PRESET1
    KEY_MACRO_PRESET2
    KEY_MACRO_PRESET3
    KEY_MACRO_PRESET_CYCLE
    KEY_MACRO_RECORD_START
    KEY_MACRO_RECORD_STOP
    KEY_MAIL
    KEY_MAX
    KEY_MEDIA
    KEY_MEDIA_REPEAT
    KEY_MEDIA_TOP_MENU
    KEY_MEMO
    KEY_MENU
    KEY_MESSENGER
    KEY_MHP
    KEY_MICMUTE
    KEY_MINUS
    KEY_MIN_INTERESTING
    KEY_MODE
    KEY_MOVE
    KEY_MP3
    KEY_MSDOS
    KEY_MUHENKAN
    KEY_MUTE
    KEY_N
    KEY_NEW
    KEY_NEWS
    KEY_NEXT
    KEY_NEXTSONG
    KEY_NEXT_FAVORITE
    KEY_NOTIFICATION_CENTER
    KEY_NUMERIC_0
    KEY_NUMERIC_1
    KEY_NUMERIC_11
    KEY_NUMERIC_12
    KEY_NUMERIC_2
    KEY_NUMERIC_3
    KEY_NUMERIC_4
    KEY_NUMERIC_5
    KEY_NUMERIC_6
    KEY_NUMERIC_7
    KEY_NUMERIC_8
    KEY_NUMERIC_9
    KEY_NUMERIC_A
    KEY_NUMERIC_B
    KEY_NUMERIC_C
    KEY_NUMERIC_D
    KEY_NUMERIC_POUND
    KEY_NUMERIC_STAR
    KEY_NUMLOCK
    KEY_O
    KEY_OK
    KEY_ONSCREEN_KEYBOARD
    KEY_OPEN
    KEY_OPTION
    KEY_P
    KEY_PAGEDOWN
    KEY_PAGEUP
    KEY_PASTE
    KEY_PAUSE
    KEY_PAUSECD
    KEY_PAUSE_RECORD
    KEY_PC
    KEY_PHONE
    KEY_PICKUP_PHONE
    KEY_PLAY
    KEY_PLAYCD
    KEY_PLAYER
    KEY_PLAYPAUSE
    KEY_POWER
    KEY_POWER2
    KEY_PRESENTATION
    KEY_PREVIOUS
    KEY_PREVIOUSSONG
    KEY_PRINT
    KEY_PRIVACY_SCREEN_TOGGLE
    KEY_PROG1
    KEY_PROG2
    KEY_PROG3
    KEY_PROG4
    KEY_PROGRAM
    KEY_PROPS
    KEY_PVR
    KEY_Q
    KEY_QUESTION
    KEY_R
    KEY_RADIO
    KEY_RECORD
    KEY_RED
    KEY_REDO
    KEY_REFRESH
    KEY_REPLY
    KEY_RESERVED
    KEY_RESTART
    KEY_REWIND
    KEY_RFKILL
    KEY_RIGHT
    KEY_RIGHTALT
    KEY_RIGHTBRACE
    KEY_RIGHTCTRL
    KEY_RIGHTMETA
    KEY_RIGHTSHIFT
    KEY_RIGHT_DOWN
    KEY_RIGHT_UP
    KEY_RO
    KEY_ROOT_MENU
    KEY_ROTATE_DISPLAY
    KEY_ROTATE_LOCK_TOGGLE
    KEY_S
    KEY_SAT
    KEY_SAT2
    KEY_SAVE
    KEY_SCALE
    KEY_SCREEN
    KEY_SCREENLOCK
    KEY_SCREENSAVER
    KEY_SCROLLDOWN
    KEY_SCROLLLOCK
    KEY_SCROLLUP
    KEY_SEARCH
    KEY_SELECT
    KEY_SELECTIVE_SCREENSHOT
    KEY_SEMICOLON
    KEY_SEND
    KEY_SENDFILE
    KEY_SETUP
    KEY_SHOP
    KEY_SHUFFLE
    KEY_SLASH
    KEY_SLEEP
    KEY_SLOW
    KEY_SLOWREVERSE
    KEY_SOUND
    KEY_SPACE
    KEY_SPELLCHECK
    KEY_SPORT
    KEY_SPREADSHEET
    KEY_STOP
    KEY_STOPCD
    KEY_STOP_RECORD
    KEY_SUBTITLE
    KEY_SUSPEND
    KEY_SWITCHVIDEOMODE
    KEY_SYSRQ
    KEY_T
    KEY_TAB
    KEY_TAPE
    KEY_TASKMANAGER
    KEY_TEEN
    KEY_TEXT
    KEY_TIME
    KEY_TITLE
    KEY_TOUCHPAD_OFF
    KEY_TOUCHPAD_ON
    KEY_TOUCHPAD_TOGGLE
    KEY_TUNER
    KEY_TV
    KEY_TV2
    KEY_TWEN
    KEY_U
    KEY_UNDO
    KEY_UNKNOWN
    KEY_UNMUTE
    KEY_UP
    KEY_UWB
    KEY_V
    KEY_VCR
    KEY_VCR2
    KEY_VENDOR
    KEY_VIDEO
    KEY_VIDEOPHONE
    KEY_VIDEO_NEXT
    KEY_VIDEO_PREV
    KEY_VOD
    KEY_VOICECOMMAND
    KEY_VOICEMAIL
    KEY_VOLUMEDOWN
    KEY_VOLUMEUP
    KEY_W
    KEY_WAKEUP
    KEY_WIMAX
    KEY_WLAN
    KEY_WORDPROCESSOR
    KEY_WPS_BUTTON
    KEY_WWAN
    KEY_WWW
    KEY_X
    KEY_XFER
    KEY_Y
    KEY_YELLOW
    KEY_YEN
    KEY_Z
    KEY_ZENKAKUHANKAKU
    KEY_ZOOM
    KEY_ZOOMIN
    KEY_ZOOMOUT
    KEY_ZOOMRESET
    

    got it by printing code by editing this file: ~/.local/lib/python3.9/site-packages/evdev/ecodes.py

    The original file is written c lang and not found the source.

    opened by acro5piano 1
  • Feature Request: Different bindings per application

    Feature Request: Different bindings per application

    Unless I'm not understanding correctly, there isn't currently a way to configure a different set of bindings per application.

    I'd like to have apple style copy and paste on everything, but to do that I need to send control+c for most applications and control+shift+c for a handful of specific applications (my terminal)

    opened by minego 1
  • Keys are not being remapped

    Keys are not being remapped

    I think I have it installed and running correctly... I checked out the repo, ran 'pip3 install .' from the repo, and then went into /usr/lib/python3.10/site-packages/wayremap to modify the configuration and run it.

    I had to change main.py to use event22 instead of event4 (22 is my keyboard, 4 is my HDMI monitor).

    It is successfully recognizing when focus changes to a different application, but pressing the keys I have configured does not appear to do anything. I'm a bit lost...

    opened by minego 1
Releases(v0.0.9)
  • v0.0.9(Feb 19, 2022)

    What's Changed

    • breaking: support multiple keyboards (like USB keyboard) by @acro5piano in https://github.com/acro5piano/wayremap/pull/9
    • enable to wait sway startup by @acro5piano in https://github.com/acro5piano/wayremap/pull/10

    Full Changelog: https://github.com/acro5piano/wayremap/compare/v0.0.8...v0.0.9

    Source code(tar.gz)
    Source code(zip)
  • v0.0.8(Dec 12, 2021)

    What's Changed

    • works without sway, warning if no applications selected by @acro5piano in https://github.com/acro5piano/wayremap/pull/4
    • new config format to support all keys, close #2 by @acro5piano in https://github.com/acro5piano/wayremap/pull/5

    Breaking Change :warning:

    The config format was changed. To migrate, please see https://github.com/acro5piano/wayremap/commit/06d27c9bb86b766d7fd1e4230f3a16827785519e#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5R39-L52

    Full Changelog: https://github.com/acro5piano/wayremap/compare/v0.0.7...v0.0.8

    Source code(tar.gz)
    Source code(zip)
  • v0.0.7-1(Dec 10, 2021)

  • v0.0.7(Dec 10, 2021)

  • v0.0.6(Dec 10, 2021)

Owner
Kay Gosho
A Web Developer betting on TypeScript + GraphQL.
Kay Gosho
cssOrganizer - organize a css file by grouping them into categories

This python project was created to scan through a CSS file and produce a more organized CSS file by grouping related CSS Properties within selectors. Created in my spare time for fun and my own utili

Andrew Espindola 0 Aug 31, 2022
Extract XML from the OS X dictionaries.

Extract XML from the OS X dictionaries.

Joshua Olson 13 Dec 11, 2022
A Python script that parses and checks public proxies. Multithreading is supported.

A Python script that parses and checks public proxies. Multithreading is supported.

LevPrav 7 Nov 25, 2022
Data Utilities e.g. for importing files to onetask

Use this repository to easily convert your source files (csv, txt, excel, json, html) into record-oriented JSON files that can be uploaded into onetask.

onetask.ai 1 Jul 18, 2022
.bvh to .mcfunction file converter.

bvh-to-mcf .bvh file to .mcfunction converter

Hanmin Kim 28 Nov 21, 2022
Simple Python tool that generates a pseudo-random password with numbers, letters, and special characters in accordance with password policy best practices.

Simple Python tool that generates a pseudo-random password with numbers, letters, and special characters in accordance with password policy best practices.

Joe Helle 7 Mar 25, 2022
Early version for manipulate Geo localization data trough API REST.

Backend para obtener los datos (beta) Descripción El servidor está diseñado para recibir y almacenar datos enviados en forma de JSON por una aplicació

Víctor Omar Vento Hernández 1 Nov 14, 2021
Analyze metadata of your Python project.

Analyze metadata of your Python projects Setup: Clone repo py-m venv venv (venv) pip install -r requirements.txt specify the folders which you want to

Pedro Monteiro de Carvalho e Silva Prado 1 Nov 10, 2021
This is discord nitro code generator and checker made with python. This will generate nitro codes and checks if the code is valid or not. If code is valid then it will print the code leaving 2 lines and if not then it will print '*'.

Discord Nitro Generator And Checker ⚙️ Rᴜɴ Oɴ Rᴇᴘʟɪᴛ 🛠️ Lᴀɴɢᴜᴀɢᴇs Aɴᴅ Tᴏᴏʟs If you are taking code from this repository without a fork, then atleast

Vɪɴᴀʏᴀᴋ Pᴀɴᴅᴇʏ 37 Jan 07, 2023
Random Name and Slug Generator

Random Name and Slug Generator

Alexander Lukanin 104 Nov 30, 2022
A pythonic dependency injection library.

Pinject Pinject is a dependency injection library for python. The primary goal of Pinject is to help you assemble objects into graphs in an easy, main

Google 1.3k Dec 30, 2022
Produce a simulate-able SDF of an arbitrary mesh with convex decomposition.

Mesh-to-SDF converter Given a (potentially nasty, nonconvex) mesh, automatically creates an SDF file that describes that object. The visual geometry i

Greg Izatt 22 Nov 23, 2022
Extends the pyranges module with operations on joined genomic intervals

tiedpyranges Extends the pyranges module with operations on joined genomic intervals (e.g. exons of same transcript) Install with: pip install tiedpyr

Marco Mariotti 4 Aug 05, 2022
ColorController is a Pythonic interface for managing colors by english-language name and various color values.

ColorController.py Table of Contents Encode color data in various formats. 1.1: Create a ColorController object using a familiar, english-language col

Tal Zaken 2 Feb 12, 2022
A program will generate a eth key pair that has the public key that starts with a defined amount of 0

ETHAdressGenerator This short program will generate a eth key pair that has the public key that starts with a defined amount of 0 Requirements Python

3 Nov 19, 2021
Dependency Injector is a dependency injection framework for Python.

What is Dependency Injector? Dependency Injector is a dependency injection framework for Python. It helps implementing the dependency injection princi

ETS Labs 2.6k Jan 04, 2023
Airspy-Utils is a small software collection to help with firmware related operations on Airspy HF+ devices.

Airspy-Utils Airspy-Utils is a small software collection to help with firmware related operations on Airspy HF+ devices on Linux (and other free syste

Dhiru Kholia 11 Oct 04, 2022
Easy compression and extraction for any compression or archival format.

Tzar: Tar, Zip, Anything Really Easy compression and extraction for any compression or archival format. Usage/Examples tzar compress large-dir compres

DanielVZ 37 Nov 02, 2022
async parser for JET

This project is mainly aims to provide an async parsing option for NTDS.dit database file for obtaining user secrets.

15 Mar 08, 2022
✨ Un générateur de lien raccourcis en fonction d'un lien totalement fait en Python par moi, et en français.

Shorter Link ❗ Un générateur de lien raccourcis en fonction d'un lien totalement fait en Python par moi, et en français. Dépendences : pip install pys

MrGabin 3 Jun 06, 2021