Guest User

Untitled

a guest
Mar 7th, 2023
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 4.14 KB | None | 0 0
  1. (define-record-type* <interception-tools-configuration>
  2.   interception-tools-configuration make-interception-tools-configuration
  3.   interception-tools-configuration?
  4.   (jobs    interception-tools-configuration-jobs ;list of strings
  5.            (default '())))
  6.  
  7. (define (interception-tools-shepherd-service config)
  8.   (list
  9.    (shepherd-service
  10.     (documentation "Run interception-tools udevmon daemon.")
  11.     (provision '(interception-tools))
  12.     (requirement '(user-processes))
  13.     (start #~(make-forkexec-constructor
  14.               (list #$(file-append coreutils "/bin/nice") "-n" "-20"
  15.                     #$(file-append interception-tools "/bin/udevmon") "-c" "/etc/interception/udevmon.yml")
  16.               #:log-file "/var/log/interception-tools.log"))
  17.     (stop #~(make-kill-destructor)))))
  18.  
  19. (define (interception-tools-config-file config)
  20.   "Return the udevmon configuration file corresponding to CONFIG."
  21.   (list
  22.    (list
  23.     "interception/udevmon.yml"
  24.     (computed-file "udevmon.yml"
  25.       #~(begin
  26.           (call-with-output-file #$output
  27.             (lambda (port)
  28.               (display "# Generated by 'interception-tools-service'.\n" port)
  29.               (for-each (lambda (job) (format port "~a\n" job))
  30.                         '#$(interception-tools-configuration-jobs config)))))))))
  31.  
  32. (define interception-tools-service-type
  33.   (service-type
  34.    (name 'interception-tools)
  35.    (description
  36.     "Run @command{udevmon} daemon.")
  37.    (extensions
  38.     (list
  39.      (service-extension shepherd-root-service-type interception-tools-shepherd-service)
  40.      (service-extension etc-service-type interception-tools-config-file)))
  41.    (compose concatenate)
  42.    (extend
  43.     (lambda (config jobs)
  44.       (interception-tools-configuration
  45.        (inherit config)
  46.        (jobs (append (interception-tools-configuration-jobs config) jobs)))))
  47.    (default-value (interception-tools-configuration))))
  48.  
  49. (define-record-type* <interception-dual-function-keys-configuration>
  50.   interception-dual-function-keys-configuration make-interception-dual-function-keys-configuration
  51.   interception-dual-function-keys-configuration?
  52.   (mappings interception-dual-function-keys-configuration-mappings ;list of strings
  53.             (default '()))
  54.   (keys     interception-dual-function-keys-configuration-keys ;string
  55.             (default "")))
  56.  
  57. (define (interception-dual-function-keys-config-file config)
  58.   "Return the dual-function-keys configuration file corresponding to CONFIG."
  59.   (list
  60.    (list
  61.     "interception/dual-function-keys.yml"
  62.     (computed-file "dual-function-keys.yml"
  63.       #~(begin
  64.           (call-with-output-file #$output
  65.             (lambda (port)
  66.               (display "# Generated by 'interception-dual-function-keys-service'.\n" port)
  67.               (for-each (lambda (mapping) (format port "~a\n" mapping))
  68.                         '#$(interception-dual-function-keys-configuration-mappings config)))))))))
  69.  
  70.  
  71. (define (interception-dual-function-keys-job config)
  72.   (list
  73.    #~(string-append
  74.       "- JOB: \"" #$(file-append interception-tools "/bin/intercept") " -g $DEVNODE | "
  75.       #$(file-append interception-dual-function-keys "/bin/dual-function-keys")
  76.       " -c /etc/interception/dual-function-keys.yml | "
  77.       #$(file-append interception-tools "/bin/uinput")" -d $DEVNODE\"
  78.  DEVICE:
  79.    EVENTS:
  80.      EV_KEY: \"" #$(interception-dual-function-keys-configuration-keys config) "\"")))
  81.  
  82. (define interception-dual-function-keys-service-type
  83.   (service-type
  84.    (name 'interception-dual-function-keys)
  85.    (description
  86.     "Run @command{dual-function-keys} via @command{udevmon} daemon.")
  87.    (extensions
  88.     (list
  89.      (service-extension interception-tools-service-type interception-dual-function-keys-job)
  90.      (service-extension etc-service-type interception-dual-function-keys-config-file)))))
  91.  
  92.  
  93. ; service instance
  94. (service interception-dual-function-keys-service-type
  95.                                  (interception-dual-function-keys-configuration
  96.                                   (mappings '("\
  97. MAPPINGS:
  98.    - KEY: KEY_CAPSLOCK
  99.      TAP: KEY_ESC
  100.      HOLD: KEY_LEFTCTRL"))
  101.                                   (keys "[KEY_CAPSLOCK]")))
Advertisement
Add Comment
Please, Sign In to add comment