about summary refs log tree commit diff
path: root/pkgs/tools/X11
diff options
context:
space:
mode:
authorbb2020 <bb2020@users.noreply.github.com>2021-01-27 21:00:14 +0300
committerbb2020 <bb2020@users.noreply.github.com>2021-03-04 23:42:44 +0300
commit32ec300db4136781c64db62798f38d7ffdaa99d4 (patch)
tree63309b31fd44b901a531ff6822d28d616f4a583d /pkgs/tools/X11
parent39a5e2c76bc457cfca1dc6b91a15aed98f475d5e (diff)
xkeysnail: init at 0.4.0
Diffstat (limited to 'pkgs/tools/X11')
-rw-r--r--pkgs/tools/X11/xkeysnail/browser-emacs-bindings.py55
-rw-r--r--pkgs/tools/X11/xkeysnail/default.nix42
2 files changed, 97 insertions, 0 deletions
diff --git a/pkgs/tools/X11/xkeysnail/browser-emacs-bindings.py b/pkgs/tools/X11/xkeysnail/browser-emacs-bindings.py
new file mode 100644
index 0000000000000..697ad87a1b77b
--- /dev/null
+++ b/pkgs/tools/X11/xkeysnail/browser-emacs-bindings.py
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+import re
+from xkeysnail.transform import *
+
+aa = False
+def a_setvar(v):
+    def _setvar():
+        transform._mark_set = False
+        global aa; aa = v
+    return _setvar
+def a_ifvar():
+    def _ifvar():
+        transform._mark_set = False
+        global aa
+        if aa:
+            aa = False
+            return K("esc")
+        return K("enter")
+    return _ifvar
+def a_flipmark():
+    def _flipmark():
+        transform._mark_set = not transform._mark_set;
+    return _flipmark
+
+define_keymap(re.compile("Google-chrome|Chromium-browser|Firefox"), {
+    K("C-b"): with_mark(K("left")),
+    K("C-f"): with_mark(K("right")),
+    K("C-p"): with_mark(K("up")),
+    K("C-n"): with_mark(K("down")),
+    K("M-b"): with_mark(K("C-left")),
+    K("M-f"): with_mark(K("C-right")),
+    K("C-a"): with_mark(K("home")),
+    K("C-e"): with_mark(K("end")),
+
+    K("C-w"): [K("C-x"), set_mark(False)],
+    K("M-w"): [K("C-c"), K("right"), set_mark(False)],
+    K("C-y"): [K("C-v"), set_mark(False)],
+    K("C-k"): [K("Shift-end"), K("C-x"), set_mark(False)],
+    K("C-d"): [K("delete"), set_mark(False)],
+    K("M-d"): [K("C-delete"), set_mark(False)],
+    K("M-backspace"): [K("C-backspace"), set_mark(False)],
+
+    K("C-slash"): [K("C-z"), set_mark(False)],
+    K("C-space"): a_flipmark(),
+    K("C-M-space"): with_or_set_mark(K("C-right")),
+
+    # K("C-s"): K("F3"),
+    # K("C-r"): K("Shift-F3"),
+    # K("C-g"): [K("esc"), set_mark(False)]
+
+    K("C-s"): [K("F3"), a_setvar(True)],
+    K("C-r"): [K("Shift-F3"), a_setvar(True)],
+    K("C-g"): [K("esc"), a_setvar(False)],
+    K("enter"): a_ifvar()
+})
diff --git a/pkgs/tools/X11/xkeysnail/default.nix b/pkgs/tools/X11/xkeysnail/default.nix
new file mode 100644
index 0000000000000..fa52a714c7a72
--- /dev/null
+++ b/pkgs/tools/X11/xkeysnail/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "xkeysnail";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "mooz";
+    repo = pname;
+    rev = "bf3c93b4fe6efd42893db4e6588e5ef1c4909cfb";
+    sha256 = "0plcpb4ndzfsd5hj32m0g32swnhyph9sd759cdhhzmjvlq3j8q6p";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  propagatedBuildInputs = with python3Packages; [
+    evdev
+    xlib
+    inotify-simple
+    appdirs
+  ];
+
+  doCheck = false;
+
+  postInstall = ''
+    mkdir -p $out/share
+    cp ./example/config.py $out/share/example.py
+    cp ${./browser-emacs-bindings.py} $out/share/browser.py
+
+    makeWrapper $out/bin/xkeysnail $out/bin/xkeysnail-example \
+      --add-flags "-q" --add-flags "$out/share/example.py"
+    makeWrapper $out/bin/xkeysnail $out/bin/xkeysnail-browser \
+      --add-flags "-q" --add-flags "$out/share/browser.py"
+  '';
+
+  meta = with lib; {
+    description = "Yet another keyboard remapping tool for X environment";
+    homepage = "https://github.com/mooz/xkeysnail";
+    platforms = platforms.linux;
+    license = licenses.gpl1Only;
+    maintainers = with maintainers; [ bb2020 ];
+  };
+}