packages feed

kmonad-0.4.4: kmonad.cabal

cabal-version: 2.2

name:           kmonad
category:       Application
version:        0.4.4
synopsis:       Advanced keyboard remapping utility
author:         David Janssen
maintainer:     janssen.dhj@gmail.com
license:        MIT
license-file:   LICENSE
build-type:     Simple
description:
  KMonad is a cross-platform command-line utility that runs as a daemon. It
  captures keyboard input (exactly how depends on the OS) and remaps it. The
  mapping is highly configurable, and provides options like (transparent) layer
  overlays, tap-mod buttons, multi-tap buttons, leader-key style buttons, and
  keyboard macros. Functionality heavily inspired by the QMK-firmware.

extra-doc-files:
    changelog.md
    doc/quick-reference.md
    keymap/tutorial.kbd

flag kext
    description: build against the kext [macOS only]
    default: False

flag dext
    description: build against the dext [macOS only]
    default: False

library
  default-language:
      Haskell2010
  hs-source-dirs:
      src
  ghc-options:
    -Wall
    -Wno-name-shadowing
    -Wno-unused-imports
  build-depends:
      base >= 4.12 && < 5
    , cereal
    -- , hspec
    , lens
    , megaparsec
    , mtl
    , transformers
    , optparse-applicative
    , resourcet
    , rio
    , time
    , unliftio
    , template-haskell
  default-extensions:
      ConstraintKinds
      DeriveFunctor
      DeriveGeneric
      DeriveDataTypeable
      DeriveTraversable
      FlexibleContexts
      FlexibleInstances
      FunctionalDependencies
      GeneralizedNewtypeDeriving
      LambdaCase
      MultiParamTypeClasses
      MultiWayIf
      NamedFieldPuns
      NoImplicitPrelude
      OverloadedStrings
      RankNTypes
      TemplateHaskell
      TupleSections
      TypeFamilies

  autogen-modules:
      Paths_kmonad

  exposed-modules:
      KMonad.App
      KMonad.App.Main
      KMonad.App.Types
      KMonad.Args
      KMonad.Args.Cmd
      KMonad.Args.Parser
      KMonad.Args.Joiner
      KMonad.Args.TH
      KMonad.Args.Types
      KMonad.Model
      KMonad.Model.Action
      KMonad.Model.BEnv
      KMonad.Model.Button
      KMonad.Model.Dispatch
      KMonad.Model.Hooks
      KMonad.Model.Keymap
      KMonad.Model.Sluice
      KMonad.Gesture
      KMonad.Keyboard
      KMonad.Keyboard.ComposeSeq
      KMonad.Keyboard.IO
      -- We always export them, so we can test them
      KMonad.Keyboard.IO.Linux.Types
      KMonad.Keyboard.IO.Mac.Types
      KMonad.Keyboard.IO.Windows.Types
      KMonad.Keyboard.Keycode
      KMonad.Keyboard.Ops
      KMonad.Keyboard.Types
      KMonad.Parsing
      KMonad.Prelude
      KMonad.Prelude.Imports
      KMonad.Prelude.Definitions
      KMonad.Util
      KMonad.Util.LayerStack
      KMonad.Util.MultiMap
      Paths_kmonad

  if os(linux)
    exposed-modules:
      KMonad.Keyboard.IO.Linux.DeviceSource
      KMonad.Keyboard.IO.Linux.UinputSink
    c-sources:
      c_src/keyio.c
    build-depends:
      unix

  if os(windows)
    exposed-modules:
      KMonad.Keyboard.IO.Windows.LowLevelHookSource
      KMonad.Keyboard.IO.Windows.SendEventSink
    c-sources:
      c_src/keyio_win.c
    build-depends:
      Win32

  if os(darwin)
    exposed-modules:
      KMonad.Keyboard.IO.Mac.IOKitSource
      KMonad.Keyboard.IO.Mac.KextSink
    if flag(kext)
      cxx-sources:
        c_src/mac/kext.cpp
      cxx-options:
        -std=c++14
    if flag(dext)
      cxx-sources:
        c_src/mac/dext.cpp
      cxx-options:
        -std=c++2a
    extra-libraries:
      c++
    build-depends:
      unix
    frameworks:
      CoreFoundation
      IOKit

executable kmonad
  ghc-options:
      -threaded
      -rtsopts
      -with-rtsopts=-N
  main-is:
      Main.hs
  default-language:
      Haskell2010
  hs-source-dirs:
      app
  build-depends:
      base >= 4.12 && < 5
    , kmonad

test-suite spec
  main-is: Spec.hs
  type: exitcode-stdio-1.0
  hs-source-dirs:
      test
  ghc-options:
      -Wall
  build-depends:
      base >= 4.12 && < 5
    , kmonad
    , hspec
    , rio
  other-modules:
      KMonad.ButtonDocSpec
      KMonad.GestureSpec
      KMonad.ComposeSeqSpec
      KMonad.KeycodeSpec
  default-language:
      Haskell2010
  build-tool-depends: hspec-discover:hspec-discover == 2.*
  default-extensions:
      ConstraintKinds
      DeriveFunctor
      DeriveGeneric
      DeriveDataTypeable
      DeriveTraversable
      FlexibleContexts
      FlexibleInstances
      FunctionalDependencies
      GeneralizedNewtypeDeriving
      LambdaCase
      MultiParamTypeClasses
      MultiWayIf
      NamedFieldPuns
      NoImplicitPrelude
      OverloadedStrings
      RankNTypes
      TemplateHaskell
      TupleSections
      TypeFamilies