diff --git a/bindings-libusb.cabal b/bindings-libusb.cabal
--- a/bindings-libusb.cabal
+++ b/bindings-libusb.cabal
@@ -1,5 +1,5 @@
 name:          bindings-libusb
-version:       1.4.4.1
+version:       1.4.5.0
 cabal-version: >= 1.6
 license:       BSD3
 license-file:  LICENSE
@@ -22,7 +22,7 @@
                .
                <http://hackage.haskell.org/package/usb>
 
-extra-source-files: README.markdown
+extra-source-files: README.markdown, default.nix, shell.nix
 
 source-repository head
   Type:     git
@@ -35,6 +35,7 @@
     bindings-DSL >= 1.0.15 && < 1.1
   exposed-modules:
     Bindings.Libusb
+    Bindings.Libusb.DeviceHotplugEventNotification
     Bindings.Libusb.Asynchronous
     Bindings.Libusb.Descriptors
     Bindings.Libusb.HandlingAndEnumeration
@@ -50,4 +51,4 @@
     extra-libraries: libusb-1.0
     cc-options: -DBINDINGS_STDCALLCONV
   else
-    pkgconfig-depends: libusb-1.0 >= 1.0.5
+    pkgconfig-depends: libusb-1.0 >= 1.0.16
diff --git a/default.nix b/default.nix
new file mode 100644
--- /dev/null
+++ b/default.nix
@@ -0,0 +1,15 @@
+{ cabal, bindingsDSL, libusb1 }:
+
+cabal.mkDerivation (self: {
+  pname = "bindings-libusb";
+  version = "1.4.5.0";
+  src = ./.;
+  buildDepends = [ bindingsDSL ];
+  pkgconfigDepends = [ libusb1 ];
+  meta = {
+    homepage = "https://github.com/basvandijk/bindings-libusb";
+    description = "Low level bindings to libusb";
+    license = self.stdenv.lib.licenses.bsd3;
+    platforms = self.ghc.meta.platforms;
+  };
+})
diff --git a/shell.nix b/shell.nix
new file mode 100644
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,19 @@
+let
+  pkgs = import <nixpkgs> {};
+  haskellPackages = pkgs.haskellPackages.override {
+    extension = self: super: {
+      bindingsLibusb = self.callPackage ./. {};
+    };
+  };
+
+in pkgs.myEnvFun {
+     name = haskellPackages.bindingsLibusb.name;
+     buildInputs = [
+       pkgs.pkgconfig
+       pkgs.libusb1
+       (haskellPackages.ghcWithPackages (hs: ([
+         hs.cabalInstall
+         hs.hscolour
+       ] ++ hs.bindingsLibusb.propagatedNativeBuildInputs)))
+     ];
+   }
diff --git a/src/Bindings/Libusb.hs b/src/Bindings/Libusb.hs
--- a/src/Bindings/Libusb.hs
+++ b/src/Bindings/Libusb.hs
@@ -1,5 +1,6 @@
 module Bindings.Libusb
-    ( module Bindings.Libusb.Asynchronous
+    ( module Bindings.Libusb.DeviceHotplugEventNotification
+    , module Bindings.Libusb.Asynchronous
     , module Bindings.Libusb.Descriptors
     , module Bindings.Libusb.HandlingAndEnumeration
     , module Bindings.Libusb.InitializationDeinitialization
@@ -8,6 +9,7 @@
     , module Bindings.Libusb.Synchronous
     ) where
 
+import Bindings.Libusb.DeviceHotplugEventNotification
 import Bindings.Libusb.Asynchronous
 import Bindings.Libusb.Descriptors
 import Bindings.Libusb.HandlingAndEnumeration
diff --git a/src/Bindings/Libusb/DeviceHotplugEventNotification.hsc b/src/Bindings/Libusb/DeviceHotplugEventNotification.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libusb/DeviceHotplugEventNotification.hsc
@@ -0,0 +1,42 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+
+#include <bindings.dsl.h>
+#include <libusb.h>
+
+-- | <http://libusb.sourceforge.net/api-1.0/group__hotplug.html>
+
+module Bindings.Libusb.DeviceHotplugEventNotification where
+#strict_import
+
+import Bindings.Libusb.InitializationDeinitialization
+import Bindings.Libusb.HandlingAndEnumeration
+
+#num LIBUSB_HOTPLUG_MATCH_ANY
+
+#integral_t libusb_hotplug_callback_handle
+
+#callback libusb_hotplug_callback_fn , Ptr <libusb_context> -> \
+  Ptr <libusb_device> -> <libusb_hotplug_event> -> Ptr () -> IO CInt
+
+#integral_t libusb_hotplug_flag
+
+#num LIBUSB_HOTPLUG_ENUMERATE
+
+#integral_t libusb_hotplug_event
+
+#num LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED
+#num LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT
+
+#ccall libusb_hotplug_register_callback , Ptr <libusb_context> -> \
+  <libusb_hotplug_event> -> \
+  <libusb_hotplug_flag> -> \
+  CInt -> \
+  CInt -> \
+  CInt -> \
+  <libusb_hotplug_callback_fn> -> \
+  Ptr () -> \
+  Ptr <libusb_hotplug_callback_handle> -> \
+  IO CInt
+
+#ccall libusb_hotplug_deregister_callback , Ptr <libusb_context> -> \
+ <libusb_hotplug_callback_handle> -> IO ()
diff --git a/src/Bindings/Libusb/HandlingAndEnumeration.hsc b/src/Bindings/Libusb/HandlingAndEnumeration.hsc
--- a/src/Bindings/Libusb/HandlingAndEnumeration.hsc
+++ b/src/Bindings/Libusb/HandlingAndEnumeration.hsc
@@ -14,12 +14,42 @@
 
 #integral_t ssize_t
 
+#integral_t enum libusb_speed
+#num LIBUSB_SPEED_UNKNOWN
+#num LIBUSB_SPEED_LOW
+#num LIBUSB_SPEED_FULL
+#num LIBUSB_SPEED_HIGH
+#num LIBUSB_SPEED_SUPER
+
+#integral_t enum libusb_supported_speed
+#num LIBUSB_LOW_SPEED_OPERATION
+#num LIBUSB_FULL_SPEED_OPERATION
+#num LIBUSB_HIGH_SPEED_OPERATION
+#num LIBUSB_SUPER_SPEED_OPERATION
+
+#integral_t enum libusb_usb_2_0_extension_attributes
+#num LIBUSB_BM_LPM_SUPPORT
+
+#integral_t enum libusb_ss_usb_device_capability_attributes
+#num LIBUSB_BM_LTM_SUPPORT
+
+#integral_t enum libusb_bos_type
+#num LIBUSB_BT_WIRELESS_USB_DEVICE_CAPABILITY
+#num LIBUSB_BT_USB_2_0_EXTENSION
+#num LIBUSB_BT_SS_USB_DEVICE_CAPABILITY
+#num LIBUSB_BT_CONTAINER_ID
+
 #ccall libusb_get_device_list , Ptr <libusb_context> -> \
   Ptr (Ptr (Ptr <libusb_device>)) -> IO <ssize_t>
 #ccall libusb_free_device_list , Ptr (Ptr <libusb_device>) -> \
   CInt -> IO ()
 #ccall libusb_get_bus_number , Ptr <libusb_device> -> IO Word8
+#ccall libusb_get_port_number , Ptr <libusb_device> -> IO Word8
+#ccall libusb_get_port_numbers , Ptr <libusb_device> -> Ptr Word8 -> \
+  CInt -> IO CInt
+#ccall libusb_get_parent , Ptr <libusb_device> -> IO (Ptr <libusb_device>)
 #ccall libusb_get_device_address , Ptr <libusb_device> -> IO Word8
+#ccall libusb_get_device_speed , Ptr <libusb_device> -> IO CInt
 #ccall libusb_get_max_packet_size , Ptr <libusb_device> -> \
   CUChar -> IO CInt
 #ccall libusb_get_max_iso_packet_size , Ptr <libusb_device> -> CUChar -> IO CInt
@@ -52,4 +82,6 @@
 #ccall libusb_detach_kernel_driver , Ptr <libusb_device_handle> -> \
   CInt -> IO CInt
 #ccall libusb_attach_kernel_driver , Ptr <libusb_device_handle> -> \
+  CInt -> IO CInt
+#ccall libusb_set_auto_detach_kernel_driver , Ptr <libusb_device_handle> -> \
   CInt -> IO CInt
diff --git a/src/Bindings/Libusb/InitializationDeinitialization.hsc b/src/Bindings/Libusb/InitializationDeinitialization.hsc
--- a/src/Bindings/Libusb/InitializationDeinitialization.hsc
+++ b/src/Bindings/Libusb/InitializationDeinitialization.hsc
@@ -10,6 +10,24 @@
 
 #opaque_t libusb_context
 
+#integral_t enum libusb_log_level
+
+#num LIBUSB_LOG_LEVEL_NONE
+#num LIBUSB_LOG_LEVEL_ERROR
+#num LIBUSB_LOG_LEVEL_WARNING
+#num LIBUSB_LOG_LEVEL_INFO
+#num LIBUSB_LOG_LEVEL_DEBUG
+
+#starttype struct libusb_version
+#field major    , Word16
+#field minor    , Word16
+#field micro    , Word16
+#field nano     , Word16
+#field rc       , CString
+#field describe , CString
+#stoptype
+
 #ccall libusb_set_debug , Ptr <libusb_context> -> CInt -> IO ()
 #ccall libusb_init , Ptr (Ptr <libusb_context>) -> IO CInt
 #ccall libusb_exit , Ptr <libusb_context> -> IO ()
+#ccall libusb_get_version , IO (Ptr <libusb_version>)
diff --git a/src/Bindings/Libusb/Miscellaneous.hsc b/src/Bindings/Libusb/Miscellaneous.hsc
--- a/src/Bindings/Libusb/Miscellaneous.hsc
+++ b/src/Bindings/Libusb/Miscellaneous.hsc
@@ -8,6 +8,15 @@
 module Bindings.Libusb.Miscellaneous where
 #strict_import
 
+#integral_t enum libusb_capability
+
+#num LIBUSB_CAP_HAS_CAPABILITY
+#num LIBUSB_CAP_HAS_HOTPLUG
+#num LIBUSB_CAP_HAS_HID_ACCESS
+#num LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER
+
+#ccall libusb_has_capability , <libusb_capability> -> CInt
+
 #cinline libusb_cpu_to_le16 , Word16 -> Word16
 #cinline libusb_le16_to_cpu , Word16 -> Word16
 
@@ -55,4 +64,3 @@
 #num LIBUSB_ERROR_NO_MEM
 #num LIBUSB_ERROR_NOT_SUPPORTED
 #num LIBUSB_ERROR_OTHER
-
diff --git a/src/Bindings/Libusb/PollingAndTiming.hsc b/src/Bindings/Libusb/PollingAndTiming.hsc
--- a/src/Bindings/Libusb/PollingAndTiming.hsc
+++ b/src/Bindings/Libusb/PollingAndTiming.hsc
@@ -30,6 +30,10 @@
   Ptr <timeval> -> IO CInt
 #ccall libusb_handle_events_timeout , Ptr <libusb_context> ->  \
   Ptr <timeval> -> IO CInt
+#ccall libusb_handle_events_completed , Ptr <libusb_context> ->  \
+  Ptr CInt -> IO CInt
+#ccall libusb_handle_events_timeout_completed , Ptr <libusb_context> ->  \
+  Ptr <timeval> -> Ptr CInt -> IO CInt
 #ccall libusb_handle_events , Ptr <libusb_context> -> IO CInt
 #ccall libusb_handle_events_locked , Ptr <libusb_context> ->  \
   Ptr <timeval> -> IO CInt
