packages feed

kmonad-0.4.2: kmonad.cabal

cabal-version:      2.2
name:               kmonad
version:            0.4.2
license:            MIT
license-file:       LICENSE
maintainer:         janssen.dhj@gmail.com
author:             David Janssen
synopsis:           Advanced keyboard remapping utility
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.

category:           Application
build-type:         Simple
extra-source-files: changelog.md

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

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

library
    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
        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

    hs-source-dirs:     src
    autogen-modules:    Paths_kmonad
    default-language:   Haskell2010
    default-extensions:
        ConstraintKinds DeriveFunctor DeriveGeneric DeriveTraversable
        FlexibleContexts FlexibleInstances FunctionalDependencies
        GeneralizedNewtypeDeriving LambdaCase MultiParamTypeClasses
        MultiWayIf NoImplicitPrelude OverloadedStrings RankNTypes
        TemplateHaskell TupleSections TypeFamilies

    ghc-options:        -Wall -Wno-name-shadowing -Wno-unused-imports
    build-depends:
        base <4.18,
        cereal <0.6,
        lens <5.3,
        megaparsec <9.4,
        mtl <2.3,
        optparse-applicative <0.18,
        resourcet <1.3,
        rio <0.2,
        time <1.13,
        unliftio <0.3,
        template-haskell <2.20

    if os(linux)
        exposed-modules:
            KMonad.Keyboard.IO.Linux.DeviceSource
            KMonad.Keyboard.IO.Linux.Types
            KMonad.Keyboard.IO.Linux.UinputSink

        c-sources:       c_src/keyio.c
        build-depends:   unix <2.8

    if os(windows)
        exposed-modules:
            KMonad.Keyboard.IO.Windows.LowLevelHookSource
            KMonad.Keyboard.IO.Windows.SendEventSink
            KMonad.Keyboard.IO.Windows.Types

        c-sources:       c_src/keyio_win.c
        build-depends:   Win32

    if os(osx)
        exposed-modules:
            KMonad.Keyboard.IO.Mac.IOKitSource
            KMonad.Keyboard.IO.Mac.KextSink
            KMonad.Keyboard.IO.Mac.Types

        frameworks:      CoreFoundation IOKit
        extra-libraries: c++
        build-depends:   unix <2.8

        if flag(kext)
            cxx-options: -std=c++14
            cxx-sources: c_src/mac/kext.cpp

        if flag(dext)
            cxx-options: -std=c++2a
            cxx-sources: c_src/mac/dext.cpp

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

test-suite spec
    type:               exitcode-stdio-1.0
    main-is:            Spec.hs
    build-tool-depends: hspec-discover:hspec-discover >=2 && <3
    hs-source-dirs:     test
    other-modules:      KMonad.GestureSpec
    default-language:   Haskell2010
    default-extensions:
        ConstraintKinds DeriveFunctor DeriveGeneric DeriveTraversable
        FlexibleContexts FlexibleInstances FunctionalDependencies
        GeneralizedNewtypeDeriving LambdaCase MultiParamTypeClasses
        MultiWayIf NoImplicitPrelude OverloadedStrings RankNTypes
        TemplateHaskell TupleSections TypeFamilies

    ghc-options:        -Wall
    build-depends:
        base <4.18,
        kmonad,
        hspec <2.11