diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 292feb948828..9c5cb6de83c3 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -144,6 +144,7 @@ ./services/games/minecraft-server.nix ./services/hardware/acpid.nix ./services/hardware/amd-hybrid-graphics.nix + ./services/hardware/cdemu.nix ./services/hardware/bluetooth.nix ./services/hardware/freefall.nix ./services/hardware/nvidia-optimus.nix diff --git a/nixos/modules/services/hardware/cdemu.nix b/nixos/modules/services/hardware/cdemu.nix new file mode 100644 index 000000000000..32a454b39c07 --- /dev/null +++ b/nixos/modules/services/hardware/cdemu.nix @@ -0,0 +1,49 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let cfg = config.services.cdemu; +in { + + options = { + services.cdemu = { + enable = mkOption { + default = false; + description = "Whether to enable cdemu for users of appropriate group (default cdrom)"; + }; + group = mkOption { + default = "cdrom"; + description = "Required group for users of cdemu"; + }; + gui = mkOption { + default = true; + description = "Whether to install cdemu GUI (gCDEmu)"; + }; + image-analyzer = mkOption { + default = true; + description = "Whether to install image analyzer"; + }; + }; + }; + + config = mkIf cfg.enable { + + boot = { + extraModulePackages = [ pkgs.linuxPackages.vhba ]; + kernelModules = [ "vhba" ]; + }; + + services = { + udev.extraRules = '' + KERNEL=="vhba_ctl", MODE="0660", OWNER="root", GROUP="${cfg.group}" + ''; + dbus.packages = [ pkgs.cdemu-daemon ]; + }; + + environment.systemPackages = + [ pkgs.cdemu-daemon pkgs.cdemu-client ] + ++ optional cfg.gui pkgs.gcdemu + ++ optional cfg.image-analyzer pkgs.image-analyzer; + }; + +} diff --git a/pkgs/misc/emulators/cdemu/analyzer.nix b/pkgs/misc/emulators/cdemu/analyzer.nix new file mode 100644 index 000000000000..30d622ca46fb --- /dev/null +++ b/pkgs/misc/emulators/cdemu/analyzer.nix @@ -0,0 +1,15 @@ +{ callPackage, gtk3, libxml2, gnuplot, makeWrapper, stdenv }: +let pkg = import ./base.nix { + version = "3.0.0"; + pkgName = "image-analyzer"; + pkgSha256 = "1rb3f7c08dxc02zrwrkfvq7qlzlmm0kd2ah1fhxj6ajiyshi8q4v"; +}; +in callPackage pkg { + buildInputs = [ gtk3 libxml2 gnuplot (callPackage ./libmirage.nix {}) makeWrapper ]; + drvParams = { + postFixup = '' + wrapProgram $out/bin/image-analyzer \ + --set XDG_DATA_DIRS "$out/share:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_DATA_DIRS" + ''; + }; +} diff --git a/pkgs/misc/emulators/cdemu/base.nix b/pkgs/misc/emulators/cdemu/base.nix new file mode 100644 index 000000000000..b2b641e3f7a6 --- /dev/null +++ b/pkgs/misc/emulators/cdemu/base.nix @@ -0,0 +1,37 @@ +{ pkgName, version, pkgSha256 }: +{ stdenv, fetchurl, cmake, pkgconfig, buildInputs, drvParams ? {} }: +let name = "${pkgName}-${version}"; +in stdenv.mkDerivation ({ + inherit name buildInputs; + src = fetchurl { + url = "http://downloads.sourceforge.net/cdemu/${name}.tar.bz2"; + sha256 = pkgSha256; + }; + nativeBuildInputs = [ pkgconfig cmake ]; + setSourceRoot = '' + mkdir build + cd build + sourceRoot="`pwd`" + ''; + configurePhase = '' + cmake ../${name} -DCMAKE_INSTALL_PREFIX=$out -DCMAKE_BUILD_TYPE=Release -DCMAKE_SKIP_RPATH=ON + ''; + meta = { + description = "CDemu is a software suite designed to emulate an optical drive and disc (including CD-ROMs and DVD-ROMs) on the Linux operating system."; + longDescription = '' + CDEmu consists of: + + - a kernel module implementing a virtual drive-controller + - libmirage which is a software library for interpreting optical disc images + - a daemon which emulates the functionality of an optical drive+disc + - textmode and GTK clients for controlling the emulator + - an image analyzer to view the structure of image files + + Optical media emulated by CDemu can be mounted within Linux. Automounting is also allowed. + ''; + homepage = "http://cdemu.sourceforge.net/"; + license = stdenv.lib.licenses.gpl2Plus; + platforms = stdenv.lib.platforms.linux; + maintainers = [ "Rok Mandeljc " ]; + }; +} // drvParams) diff --git a/pkgs/misc/emulators/cdemu/client.nix b/pkgs/misc/emulators/cdemu/client.nix new file mode 100644 index 000000000000..e590cf60ac0d --- /dev/null +++ b/pkgs/misc/emulators/cdemu/client.nix @@ -0,0 +1,15 @@ +{ callPackage, python, dbus_python, intltool, makeWrapper }: +let pkg = import ./base.nix { + version = "3.0.0"; + pkgName = "cdemu-client"; + pkgSha256 = "125f6j7c52a0c7smbx323vdpwhx24yl0vglkiyfcbm92fjji14rm"; +}; +in callPackage pkg { + buildInputs = [ python dbus_python intltool makeWrapper ]; + drvParams = { + postFixup = '' + wrapProgram $out/bin/cdemu \ + --set PYTHONPATH "$PYTHONPATH" + ''; + }; +} diff --git a/pkgs/misc/emulators/cdemu/daemon.nix b/pkgs/misc/emulators/cdemu/daemon.nix new file mode 100644 index 000000000000..cc7a619b14fb --- /dev/null +++ b/pkgs/misc/emulators/cdemu/daemon.nix @@ -0,0 +1,9 @@ +{ callPackage, glib, libao }: +let pkg = import ./base.nix { + version = "3.0.2"; + pkgName = "cdemu-daemon"; + pkgSha256 = "01jg9b1nkqrbh6binfcbyraz83s9yjavgwi3y4w1bmqg5qlhv6lc"; +}; +in callPackage pkg { + buildInputs = [ glib libao (callPackage ./libmirage.nix {}) ]; +} diff --git a/pkgs/misc/emulators/cdemu/gui.nix b/pkgs/misc/emulators/cdemu/gui.nix new file mode 100644 index 000000000000..a6982f13cf50 --- /dev/null +++ b/pkgs/misc/emulators/cdemu/gui.nix @@ -0,0 +1,18 @@ +{ callPackage, python, pygobject3, gtk3, glib, libnotify, intltool, makeWrapper, gobjectIntrospection }: +let pkg = import ./base.nix { + version = "3.0.0"; + pkgName = "gcdemu"; + pkgSha256 = "1m5ab325r586v2y2d93a817phn6wck67y5mfkf948mph40ks0mqk"; +}; +in callPackage pkg { + buildInputs = [ python pygobject3 gtk3 glib libnotify intltool makeWrapper ]; + drvParams = { + postFixup = '' + wrapProgram $out/bin/gcdemu \ + --set PYTHONPATH "$PYTHONPATH" \ + --set GI_TYPELIB_PATH "$GI_TYPELIB_PATH" \ + --set XDG_DATA_DIRS "$out/share:$XDG_DATA_DIRS" + ''; + # TODO AppIndicator + }; +} diff --git a/pkgs/misc/emulators/cdemu/libmirage.nix b/pkgs/misc/emulators/cdemu/libmirage.nix new file mode 100644 index 000000000000..f6ae5d132fcd --- /dev/null +++ b/pkgs/misc/emulators/cdemu/libmirage.nix @@ -0,0 +1,9 @@ +{ callPackage, glib, libsndfile, zlib, bzip2, lzma, libsamplerate }: +let pkg = import ./base.nix { + version = "3.0.3"; + pkgName = "libmirage"; + pkgSha256 = "03idg94h5qhmnnc8g9dw8yqf14yv2paph5n77dfmg925f3z70nyn"; +}; +in callPackage pkg { + buildInputs = [ glib libsndfile zlib bzip2 lzma libsamplerate ]; +} diff --git a/pkgs/misc/emulators/cdemu/vhba.nix b/pkgs/misc/emulators/cdemu/vhba.nix new file mode 100644 index 000000000000..d4596be03a69 --- /dev/null +++ b/pkgs/misc/emulators/cdemu/vhba.nix @@ -0,0 +1,12 @@ +{ stdenv, fetchurl, kernel }: +let version = "20140928"; +in stdenv.mkDerivation { + name = "vhba-${version}"; + src = fetchurl { + url = "http://downloads.sourceforge.net/cdemu/vhba-module-${version}.tar.bz2"; + sha256 = "18jmpg2kpx87f32b8aprr1pxla9dlhf901rkj1sp3ammf94nxxa5"; + }; + preBuild = '' + makeFlags="KDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build INSTALL_MOD_PATH=$out"; + ''; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6698fe681d88..01d8c9e6092d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -686,6 +686,14 @@ let catdoc = callPackage ../tools/text/catdoc { }; + cdemu-daemon = callPackage ../misc/emulators/cdemu/daemon.nix { }; + + cdemu-client = callPackage ../misc/emulators/cdemu/client.nix { }; + + gcdemu = callPackage ../misc/emulators/cdemu/gui.nix { }; + + image-analyzer = callPackage ../misc/emulators/cdemu/analyzer.nix { }; + ccnet = callPackage ../tools/networking/ccnet { }; cloud-init = callPackage ../tools/virtualization/cloud-init { }; @@ -8798,6 +8806,8 @@ let v86d = callPackage ../os-specific/linux/v86d { }; + vhba = callPackage ../misc/emulators/cdemu/vhba.nix { }; + virtualbox = callPackage ../applications/virtualization/virtualbox { stdenv = stdenv_32bit; inherit (gnome) libIDL;