about summary refs log tree commit diff
path: root/nixpkgs/pkgs/os-specific/linux/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/os-specific/linux/firmware')
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware-cutter/default.nix21
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware-cutter/no-root-install.patch18
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware/5.1.138.nix28
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware/6.30.163.46.nix29
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/broadcom-bt-firmware/default.nix46
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/bt-fw-converter/default.nix35
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/facetimehd-firmware/default.nix64
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/firmware-linux-nonfree/default.nix32
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/fwupd/add-option-for-installation-sysconfdir.patch169
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/fwupd/default.nix122
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/fwupd/fix-paths.patch15
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/fwupdate/default.nix60
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/fwupdate/do-not-create-sharedstatedir.patch10
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/intel2200BGFirmware/default.nix25
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/openelec-dvb-firmware/default.nix26
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi-wireless/default.nix53
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi/default.nix26
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi/tools-dont-install-sysv-init-scripts.patch20
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi/tools.nix31
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/rt5677/default.nix24
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/rtl8192su-firmware/default.nix36
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/rtl8723bs-firmware/default.nix22
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/rtlwifi_new-firmware/default.nix23
-rw-r--r--nixpkgs/pkgs/os-specific/linux/firmware/zd1211/default.nix24
24 files changed, 959 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware-cutter/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware-cutter/default.nix
new file mode 100644
index 000000000000..8aa78e65dec1
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware-cutter/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "b43-fwcutter-019";
+
+  src = fetchurl {
+    url = "https://bues.ch/b43/fwcutter/${name}.tar.bz2";
+    sha256 = "1ki1f5fy3yrw843r697f8mqqdz0pbsbqnvg4yzkhibpn1lqqbsnn";
+  };
+
+  patches = [ ./no-root-install.patch ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "Firmware extractor for cards supported by the b43 kernel module";
+    homepage = http://wireless.kernel.org/en/users/Drivers/b43;
+    license = stdenv.lib.licenses.free;
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware-cutter/no-root-install.patch b/nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware-cutter/no-root-install.patch
new file mode 100644
index 000000000000..578812e0ad0b
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware-cutter/no-root-install.patch
@@ -0,0 +1,18 @@
+diff -Naur b43-fwcutter-015-orig/Makefile b43-fwcutter-015/Makefile
+--- b43-fwcutter-015-orig/Makefile	2011-08-21 08:17:01.000000000 -0400
++++ b43-fwcutter-015/Makefile	2012-07-13 17:57:53.002154557 -0400
+@@ -51,10 +51,10 @@
+ 	$(QUIET_CC) $(CFLAGS) -o $(BIN) $(call OBJS,$(SRCS)) $(LDFLAGS)
+ 
+ install: all
+-	install -d -o 0 -g 0 -m 755 $(PREFIX)/bin/
+-	install -o 0 -g 0 -m 755 $(BIN) $(PREFIX)/bin/
+-	install -d -o 0 -g 0 -m 755 $(PREFIX)/man/man1/
+-	install -o 0 -g 0 -m 644 $(BIN).1 $(PREFIX)/man/man1/
++	install -d -m 755 $(PREFIX)/bin/
++	install -m 755 $(BIN) $(PREFIX)/bin/
++	install -d -m 755 $(PREFIX)/man/man1/
++	install -m 644 $(BIN).1 $(PREFIX)/man/man1/
+ 
+ clean:
+ 	-rm -Rf obj dep *.orig *.rej *~
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware/5.1.138.nix b/nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware/5.1.138.nix
new file mode 100644
index 000000000000..1cc0e7ae4ca7
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware/5.1.138.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchurl, b43FirmwareCutter }:
+
+let version = "5.100.138"; in
+
+stdenv.mkDerivation {
+  name = "b43-firmware-${version}";
+
+  src = fetchurl {
+    url = "http://www.lwfinger.com/b43-firmware/broadcom-wl-${version}.tar.bz2";
+    sha256 = "0vz4ka8gycf72gmnaq61k8rh8y17j1wm2k3fidxvcqjvmix0drzi";
+  };
+
+  buildInputs = [ b43FirmwareCutter ];
+
+  phases = [ "unpackPhase" "installPhase" ];
+
+  installPhase = ''
+    mkdir -p $out/lib/firmware
+    b43-fwcutter -w $out/lib/firmware linux/wl_apsta.o
+  '';
+
+  meta = {
+    description = "Firmware for cards supported by the b43 kernel module";
+    homepage = http://wireless.kernel.org/en/users/Drivers/b43;
+    license = stdenv.lib.licenses.unfree;
+  };
+}
+
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware/6.30.163.46.nix b/nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware/6.30.163.46.nix
new file mode 100644
index 000000000000..2637beb517a3
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/b43-firmware/6.30.163.46.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, b43FirmwareCutter }:
+
+stdenv.mkDerivation rec {
+  name = "b43-firmware-${version}";
+  version = "6.30.163.46";
+
+  src = fetchurl {
+    url = "http://www.lwfinger.com/b43-firmware/broadcom-wl-${version}.tar.bz2";
+    sha256 = "0baw6gcnrhxbb447msv34xg6rmlcj0gm3ahxwvdwfcvq4xmknz50";
+  };
+
+  buildInputs = [ b43FirmwareCutter ];
+
+  phases = [ "unpackPhase" "installPhase" ];
+
+  sourceRoot = ".";
+
+  installPhase = ''
+    mkdir $out
+    b43-fwcutter -w $out *.wl_apsta.o
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Firmware for cards supported by the b43 kernel module";
+    homepage = http://wireless.kernel.org/en/users/Drivers/b43;
+    downloadPage = http://www.lwfinger.com/b43-firmware;
+    license = licenses.unfree;
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/broadcom-bt-firmware/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/broadcom-bt-firmware/default.nix
new file mode 100644
index 000000000000..a57a6f1d70f6
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/broadcom-bt-firmware/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, cabextract, bt-fw-converter }:
+
+# Kernels between 4.2 and 4.7 will not work with
+# this packages as they expect the firmware to be named "BCM.hcd"
+# see: https://github.com/NixOS/nixpkgs/pull/25478#issuecomment-299034865
+stdenv.mkDerivation rec {
+  name = "broadcom-bt-firmware-${version}";
+  version = "12.0.1.1012";
+
+  src = fetchurl {
+    url = "http://download.windowsupdate.com/c/msdownload/update/driver/drvs/2017/04/852bb503-de7b-4810-a7dd-cbab62742f09_7cf83a4c194116648d17707ae37d564f9c70bec2.cab";
+    sha256 = "1b1qjwxjk4y91l3iz157kms8601n0mmiik32cs6w9b1q4sl4pxx9";
+  };
+
+  nativeBuildInputs = [ cabextract bt-fw-converter ];
+
+  unpackCmd = ''
+    mkdir -p ${name}
+    cabextract $src --directory ${name}
+  '';
+
+  installPhase = ''
+    mkdir -p $out/lib/firmware/brcm
+    bt-fw-converter -f bcbtums.inf -o $out/lib/firmware/brcm
+    for filename in $out/lib/firmware/brcm/*.hcd
+    do
+      linkname=$(basename $filename | awk 'match($0,/^(BCM)[0-9A-Z]+(-[0-9a-z]{4}-[0-9a-z]{4}\.hcd)$/,c) { print c[1]c[2] }')
+      if ! [ -z $linkname ]
+      then
+        ln -s --relative -T $filename $out/lib/firmware/brcm/$linkname
+      fi
+    done
+  '';
+
+  outputHashMode = "recursive";
+  outputHashAlgo = "sha256";
+  outputHash = "042frb2dmrqfj8q83h5p769q6hg2b3i8fgnyvs9r9a71z7pbsagq";
+
+  meta = with stdenv.lib; {
+    description = "Firmware for Broadcom WIDCOMM® Bluetooth devices";
+    homepage = http://www.catalog.update.microsoft.com/Search.aspx?q=Broadcom+bluetooth;
+    license = licenses.unfree;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ zraexy ];
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/bt-fw-converter/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/bt-fw-converter/default.nix
new file mode 100644
index 000000000000..8927e1a28e7c
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/bt-fw-converter/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchurl, makeWrapper, perl, perlPackages, bluez }:
+
+stdenv.mkDerivation  rec {
+  name = "bt-fw-converter-${version}";
+  version = "2017-02-19";
+  rev = "2d8b34402df01c6f7f4b8622de9e8b82fadf4153";
+
+  src = fetchurl {
+    url = "https://raw.githubusercontent.com/winterheart/broadcom-bt-firmware/${rev}/tools/bt-fw-converter.pl";
+    sha256 = "c259b414a4a273c89a0fa7159b3ef73d1ea62b6de91c3a7c2fcc832868e39f4b";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ perl perlPackages.RegexpGrammars bluez ];
+
+  unpackCmd = ''
+    mkdir -p ${name}
+    cp $src ${name}/bt-fw-converter.pl
+  '';
+
+  installPhase = ''
+    install -D -m755 bt-fw-converter.pl $out/bin/bt-fw-converter
+    substituteInPlace $out/bin/bt-fw-converter --replace /usr/bin/hex2hcd ${bluez}/bin/hex2hcd
+    wrapProgram $out/bin/bt-fw-converter --set PERL5LIB $PERL5LIB
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/winterheart/broadcom-bt-firmware/;
+    description = "A tool that converts hex to hcd based on inf file";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ zraexy ];
+  };
+} 
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/facetimehd-firmware/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/facetimehd-firmware/default.nix
new file mode 100644
index 000000000000..5f8f6c542521
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/facetimehd-firmware/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, fetchurl, cpio, xz, pkgs }:
+
+let
+
+  version = "1.43_4";
+
+
+  # Updated according to https://github.com/patjak/bcwc_pcie/pull/81/files
+  # and https://github.com/patjak/bcwc_pcie/blob/5a7083bd98b38ef3bd223f7ee531d58f4fb0fe7c/firmware/Makefile#L3-L9
+  # and https://github.com/patjak/bcwc_pcie/blob/5a7083bd98b38ef3bd223f7ee531d58f4fb0fe7c/firmware/extract-firmware.sh
+
+  # From the Makefile:
+  dmgUrl = "https://support.apple.com/downloads/DL1877/en_US/osxupd10.11.5.dmg";
+  dmgRange = "205261917-208085450"; # the whole download is 1.3GB, this cuts it down to 2MB
+  # Notes:
+  # 1. Be sure to update the sha256 below in the fetch_url
+  # 2. Be sure to update the homepage in the meta
+
+  # Also from the Makefile (OS_DRV, OS_DRV_DIR), but seems to not change:
+  firmwareIn = "./System/Library/Extensions/AppleCameraInterface.kext/Contents/MacOS/AppleCameraInterface";
+  firmwareOut = "firmware.bin";
+
+  # The following are from the extract-firmware.sh
+  firmwareOffset = "81920"; # Variable: firmw_offsets
+  firmwareSize = "603715"; # Variable: firmw_sizes
+
+
+  # separated this here as the script will fail without the 'exit 0'
+  unpack = pkgs.writeScriptBin "unpack" ''
+    xzcat -Q $src | cpio --format odc -i -d ${firmwareIn}
+    exit 0
+  '';
+
+in
+
+stdenv.mkDerivation {
+
+  name = "facetimehd-firmware-${version}";
+  src = fetchurl {
+    url = dmgUrl;
+    sha256 = "0xqkl4yds0n9fdjvnk0v5mj382q02crry6wm2q7j3ncdqwsv02sv";
+    curlOpts = "-r ${dmgRange}";
+  };
+
+  phases = [ "buildPhase" ];
+
+  buildInputs = [ cpio xz ];
+
+  buildPhase = ''
+    ${unpack}/bin/unpack
+    dd bs=1 skip=${firmwareOffset} count=${firmwareSize} if=${firmwareIn} of=${firmwareOut}.gz &> /dev/null
+    mkdir -p $out/lib/firmware/facetimehd
+    gunzip -c ${firmwareOut}.gz > $out/lib/firmware/facetimehd/${firmwareOut}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "facetimehd firmware";
+    homepage = https://support.apple.com/downloads/DL1877;
+    license = licenses.unfree;
+    maintainers = with maintainers; [ womfoo grahamc ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/firmware-linux-nonfree/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/firmware-linux-nonfree/default.nix
new file mode 100644
index 000000000000..57135bf515b6
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/firmware-linux-nonfree/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchgit }:
+
+stdenv.mkDerivation rec {
+  name = "firmware-linux-nonfree-${version}";
+  version = "2018-12-13";
+
+  src = fetchgit {
+    url = "https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git";
+    rev = "813fa1fc6fba6638decd974c4a6a2e485069ea15";
+    sha256 = "0zspisbrvplgz1plk4ya22h7ilnsk60srk4q38h6n5d18fpn7rdw";
+  };
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  # Firmware blobs do not need fixing and should not be modified
+  dontFixup = true;
+
+  outputHashMode = "recursive";
+  outputHashAlgo = "sha256";
+  outputHash = "1yr6wcvc3s97h4w0qapma4l17dqsj175an6kmn5w6dppz19g0r5b";
+
+  meta = with stdenv.lib; {
+    description = "Binary firmware collection packaged by kernel.org";
+    homepage = http://packages.debian.org/sid/firmware-linux-nonfree;
+    license = licenses.unfreeRedistributableFirmware;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fpletz ];
+    priority = 6; # give precedence to kernel firmware
+  };
+
+  passthru = { inherit version; };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/fwupd/add-option-for-installation-sysconfdir.patch b/nixpkgs/pkgs/os-specific/linux/firmware/fwupd/add-option-for-installation-sysconfdir.patch
new file mode 100644
index 000000000000..44369dc5117f
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/fwupd/add-option-for-installation-sysconfdir.patch
@@ -0,0 +1,169 @@
+From 2fe9625cc6dec10531482a3947ef75009eb21489 Mon Sep 17 00:00:00 2001
+From: Jan Tojnar <jtojnar@gmail.com>
+Date: Tue, 30 Oct 2018 22:26:30 +0100
+Subject: [PATCH] build: Add option for installation sysconfdir
+
+On NixOS, sysconfdir is read-only by default, and packages are not supposed to
+install files there. Instead, NixOS has a concept of modules that declaratively
+describe the system configuration.
+
+We still want to install the config files and certificates to fwupd prefix,
+so that the modules can use them as they see fit, but at the same time, we
+cannot set sysconfdir=${prefix}/etc because the daemon needs to read the
+configuration from the directory created by the module.
+
+With autotools, we could easily solve this by passing a the sysconfdir inside
+prefix only to `make install`, but Meson does not support anything like that.
+Until we manage to convince Meson to support install flags, we need to create
+our own install flag.
+---
+ data/meson.build            | 4 ++--
+ data/pki/meson.build        | 8 ++++----
+ data/remotes.d/meson.build  | 6 +++---
+ meson.build                 | 6 ++++++
+ meson_options.txt           | 1 +
+ plugins/redfish/meson.build | 2 +-
+ plugins/uefi/meson.build    | 2 +-
+ 7 files changed, 18 insertions(+), 11 deletions(-)
+
+diff --git a/data/meson.build b/data/meson.build
+index 8dd2ac9ad..d4ad1cbc1 100644
+--- a/data/meson.build
++++ b/data/meson.build
+@@ -9,7 +9,7 @@ if get_option('tests') and get_option('daemon')
+ endif
+ 
+ install_data(['daemon.conf'],
+-  install_dir : join_paths(sysconfdir, 'fwupd')
++  install_dir : join_paths(sysconfdir_install, 'fwupd')
+ )
+ 
+ install_data(['org.freedesktop.fwupd.metainfo.xml'],
+@@ -17,7 +17,7 @@ install_data(['org.freedesktop.fwupd.metainfo.xml'],
+ )
+ 
+ install_data(['org.freedesktop.fwupd.conf'],
+-  install_dir : join_paths(sysconfdir, 'dbus-1', 'system.d')
++  install_dir : join_paths(sysconfdir_install, 'dbus-1', 'system.d')
+ )
+ 
+ install_data(['metadata.xml'],
+diff --git a/data/pki/meson.build b/data/pki/meson.build
+index eefcc9142..dc801fa18 100644
+--- a/data/pki/meson.build
++++ b/data/pki/meson.build
+@@ -4,14 +4,14 @@ if get_option('gpg')
+       'GPG-KEY-Linux-Foundation-Firmware',
+       'GPG-KEY-Linux-Vendor-Firmware-Service',
+     ],
+-    install_dir : join_paths(sysconfdir, 'pki', 'fwupd')
++    install_dir : join_paths(sysconfdir_install, 'pki', 'fwupd')
+   )
+ 
+   install_data([
+       'GPG-KEY-Linux-Foundation-Metadata',
+       'GPG-KEY-Linux-Vendor-Firmware-Service',
+     ],
+-    install_dir : join_paths(sysconfdir, 'pki', 'fwupd-metadata')
++    install_dir : join_paths(sysconfdir_install, 'pki', 'fwupd-metadata')
+   )
+ endif
+ 
+@@ -19,12 +19,12 @@ if get_option('pkcs7')
+   install_data([
+       'LVFS-CA.pem',
+     ],
+-    install_dir : join_paths(sysconfdir, 'pki', 'fwupd')
++    install_dir : join_paths(sysconfdir_install, 'pki', 'fwupd')
+   )
+   install_data([
+       'LVFS-CA.pem',
+     ],
+-    install_dir : join_paths(sysconfdir, 'pki', 'fwupd-metadata')
++    install_dir : join_paths(sysconfdir_install, 'pki', 'fwupd-metadata')
+   )
+ endif
+ 
+diff --git a/data/remotes.d/meson.build b/data/remotes.d/meson.build
+index 824291fc5..d0599a00a 100644
+--- a/data/remotes.d/meson.build
++++ b/data/remotes.d/meson.build
+@@ -3,7 +3,7 @@ if get_option('daemon') and get_option('lvfs')
+       'lvfs.conf',
+       'lvfs-testing.conf',
+     ],
+-    install_dir : join_paths(sysconfdir, 'fwupd', 'remotes.d')
++    install_dir : join_paths(sysconfdir_install, 'fwupd', 'remotes.d')
+   )
+   i18n.merge_file(
+     input: 'lvfs.metainfo.xml',
+@@ -37,12 +37,12 @@ configure_file(
+   output : 'fwupd.conf',
+   configuration : con2,
+   install: true,
+-  install_dir: join_paths(sysconfdir, 'fwupd', 'remotes.d'),
++  install_dir: join_paths(sysconfdir_install, 'fwupd', 'remotes.d'),
+ )
+ configure_file(
+   input : 'vendor.conf',
+   output : 'vendor.conf',
+   configuration : con2,
+   install: true,
+-  install_dir: join_paths(sysconfdir, 'fwupd', 'remotes.d'),
++  install_dir: join_paths(sysconfdir_install, 'fwupd', 'remotes.d'),
+ )
+diff --git a/meson.build b/meson.build
+index 737841f1a..23bd7a2e3 100644
+--- a/meson.build
++++ b/meson.build
+@@ -144,6 +144,12 @@ localstatedir = join_paths(prefix, get_option('localstatedir'))
+ mandir = join_paths(prefix, get_option('mandir'))
+ localedir = join_paths(prefix, get_option('localedir'))
+ 
++if get_option('sysconfdir_install') != ''
++  sysconfdir_install = join_paths(prefix, get_option('sysconfdir_install'))
++else
++  sysconfdir_install = sysconfdir
++endif
++
+ gio = dependency('gio-2.0', version : '>= 2.45.8')
+ if gio.version().version_compare ('>= 2.55.0')
+   conf.set('HAVE_GIO_2_55_0', '1')
+diff --git a/meson_options.txt b/meson_options.txt
+index 23ef8cdb8..db8f93b6c 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -17,6 +17,7 @@ option('plugin_uefi', type : 'boolean', value : true, description : 'enable UEFI
+ option('plugin_nvme', type : 'boolean', value : true, description : 'enable NVMe support')
+ option('systemd', type : 'boolean', value : true, description : 'enable systemd support')
+ option('systemdunitdir', type: 'string', value: '', description: 'Directory for systemd units')
++option('sysconfdir_install', type: 'string', value: '', description: 'sysconfdir to use during installation')
+ option('tests', type : 'boolean', value : true, description : 'enable tests')
+ option('udevdir', type: 'string', value: '', description: 'Directory for udev rules')
+ option('efi-cc', type : 'string', value : 'gcc', description : 'the compiler to use for EFI modules')
+diff --git a/plugins/redfish/meson.build b/plugins/redfish/meson.build
+index 288f614e4..90cfe6484 100644
+--- a/plugins/redfish/meson.build
++++ b/plugins/redfish/meson.build
+@@ -22,7 +22,7 @@ shared_module('fu_plugin_redfish',
+ )
+ 
+ install_data(['redfish.conf'],
+-  install_dir:  join_paths(sysconfdir, 'fwupd')
++  install_dir:  join_paths(sysconfdir_install, 'fwupd')
+ )
+ 
+ if get_option('tests')
+diff --git a/plugins/uefi/meson.build b/plugins/uefi/meson.build
+index c037e1b30..a0e8cd3e6 100644
+--- a/plugins/uefi/meson.build
++++ b/plugins/uefi/meson.build
+@@ -69,7 +69,7 @@ executable(
+ )
+ 
+ install_data(['uefi.conf'],
+-  install_dir:  join_paths(sysconfdir, 'fwupd')
++  install_dir:  join_paths(sysconfdir_install, 'fwupd')
+ )
+ 
+ if get_option('tests')
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/fwupd/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/fwupd/default.nix
new file mode 100644
index 000000000000..de0a1e2ee0d7
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/fwupd/default.nix
@@ -0,0 +1,122 @@
+{ stdenv, fetchurl, gtk-doc, pkgconfig, gobject-introspection, intltool
+, libgudev, polkit, libxmlb, gusb, sqlite, libarchive, glib-networking
+, libsoup, help2man, gpgme, libxslt, elfutils, libsmbios, efivar, glibcLocales
+, gnu-efi, libyaml, valgrind, meson, libuuid, colord, docbook_xml_dtd_43, docbook_xsl
+, ninja, gcab, gnutls, python3, wrapGAppsHook, json-glib, bash-completion
+, shared-mime-info, umockdev, vala, makeFontsConf, freefont_ttf
+, cairo, freetype, fontconfig, pango
+}:
+let
+  # Updating? Keep $out/etc synchronized with passthru.filesInstalledToEtc
+  version = "1.2.1";
+  python = python3.withPackages (p: with p; [ pygobject3 pycairo pillow ]);
+  installedTestsPython = python3.withPackages (p: with p; [ pygobject3 requests ]);
+
+  fontsConf = makeFontsConf {
+    fontDirectories = [ freefont_ttf ];
+  };
+in stdenv.mkDerivation {
+  name = "fwupd-${version}";
+  src = fetchurl {
+    url = "https://people.freedesktop.org/~hughsient/releases/fwupd-${version}.tar.xz";
+    sha256 = "126b3lsh4gkyajsqm2c8l6wqr4dd7m26krz2527khmlps0lxdhg1";
+  };
+
+  outputs = [ "out" "lib" "dev" "devdoc" "man" "installedTests" ];
+
+  nativeBuildInputs = [
+    meson ninja gtk-doc pkgconfig gobject-introspection intltool glibcLocales shared-mime-info
+    valgrind gcab docbook_xml_dtd_43 docbook_xsl help2man libxslt python wrapGAppsHook vala
+  ];
+  buildInputs = [
+    polkit libxmlb gusb sqlite libarchive libsoup elfutils libsmbios gnu-efi libyaml
+    libgudev colord gpgme libuuid gnutls glib-networking efivar json-glib umockdev
+    bash-completion cairo freetype fontconfig pango
+  ];
+
+  LC_ALL = "en_US.UTF-8"; # For po/make-images
+
+  patches = [
+    ./fix-paths.patch
+    ./add-option-for-installation-sysconfdir.patch
+  ];
+
+  postPatch = ''
+    # needs a different set of modules than po/make-images
+    escapedInterpreterLine=$(echo "${installedTestsPython}/bin/python3" | sed 's|\\|\\\\|g')
+    sed -i -e "1 s|.*|#\!$escapedInterpreterLine|" data/installed-tests/hardware.py
+
+    patchShebangs .
+    substituteInPlace data/installed-tests/fwupdmgr.test.in --subst-var-by installedtestsdir "$installedTests/share/installed-tests/fwupd"
+  '';
+
+  # /etc/os-release not available in sandbox
+  # doCheck = true;
+
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "${shared-mime-info}/share")
+  '';
+
+  mesonFlags = [
+    "-Dplugin_dummy=true"
+    "-Dudevdir=lib/udev"
+    "-Dsystemdunitdir=lib/systemd/system"
+    "-Defi-libdir=${gnu-efi}/lib"
+    "-Defi-ldsdir=${gnu-efi}/lib"
+    "-Defi-includedir=${gnu-efi}/include/efi"
+    "--localstatedir=/var"
+    "--sysconfdir=/etc"
+    "-Dsysconfdir_install=${placeholder "out"}/etc"
+  ];
+
+  # TODO: We need to be able to override the directory flags from meson setup hook
+  # better – declaring them multiple times might become an error.
+  preConfigure = ''
+    mesonFlagsArray+=("--libexecdir=$out/libexec")
+  '';
+
+  postInstall = ''
+    moveToOutput share/installed-tests "$installedTests"
+    wrapProgram $installedTests/share/installed-tests/fwupd/hardware.py \
+      --prefix GI_TYPELIB_PATH : "$out/lib/girepository-1.0:${libsoup}/lib/girepository-1.0"
+  '';
+
+  FONTCONFIG_FILE = fontsConf; # Fontconfig error: Cannot load default config file
+
+  # TODO: wrapGAppsHook wraps efi capsule even though it is not elf
+  dontWrapGApps = true;
+  # so we need to wrap the executables manually
+  postFixup = ''
+    find -L "$out/bin" "$out/libexec" -type f -executable -print0 \
+      | while IFS= read -r -d ''' file; do
+      if [[ "''${file}" != *.efi ]]; then
+        echo "Wrapping program ''${file}"
+        wrapProgram "''${file}" "''${gappsWrapperArgs[@]}"
+      fi
+    done
+  '';
+
+  # /etc/fwupd/uefi.conf is created by the services.hardware.fwupd NixOS module
+  passthru = {
+    filesInstalledToEtc = [
+      "fwupd/remotes.d/fwupd.conf"
+      "fwupd/remotes.d/lvfs-testing.conf"
+      "fwupd/remotes.d/lvfs.conf"
+      "fwupd/remotes.d/vendor.conf"
+      "pki/fwupd/GPG-KEY-Hughski-Limited"
+      "pki/fwupd/GPG-KEY-Linux-Foundation-Firmware"
+      "pki/fwupd/GPG-KEY-Linux-Vendor-Firmware-Service"
+      "pki/fwupd/LVFS-CA.pem"
+      "pki/fwupd-metadata/GPG-KEY-Linux-Foundation-Metadata"
+      "pki/fwupd-metadata/GPG-KEY-Linux-Vendor-Firmware-Service"
+      "pki/fwupd-metadata/LVFS-CA.pem"
+    ];
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://fwupd.org/;
+    maintainers = with maintainers; [];
+    license = [ licenses.gpl2 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/fwupd/fix-paths.patch b/nixpkgs/pkgs/os-specific/linux/firmware/fwupd/fix-paths.patch
new file mode 100644
index 000000000000..d1024438d8a7
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/fwupd/fix-paths.patch
@@ -0,0 +1,15 @@
+--- a/data/builder/meson.build
++++ b/data/builder/meson.build
+@@ -1,3 +0,0 @@
+-install_data('README.md',
+-  install_dir : join_paths(localstatedir, 'lib', 'fwupd', 'builder')
+-)
+--- a/meson_post_install.sh
++++ b/meson_post_install.sh
+@@ -11,6 +11,4 @@
+     echo 'Updating systemd deps'
+     mkdir -p ${DESTDIR}${SYSTEMDUNITDIR}/system-update.target.wants
+     ln -sf ../fwupd-offline-update.service ${DESTDIR}${SYSTEMDUNITDIR}/system-update.target.wants/fwupd-offline-update.service
+-    echo 'Creating stateful directory'
+-    mkdir -p ${DESTDIR}${LOCALSTATEDIR}/lib/fwupd
+ #fi
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/fwupdate/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/fwupdate/default.nix
new file mode 100644
index 000000000000..5b14546c90fd
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/fwupdate/default.nix
@@ -0,0 +1,60 @@
+{ efivar, fetchurl, gettext, gnu-efi, libsmbios, pkgconfig, popt, stdenv }:
+let
+  version = "12";
+in stdenv.mkDerivation {
+  name = "fwupdate-${version}";
+  src = fetchurl {
+    url = "https://github.com/rhinstaller/fwupdate/releases/download/${version}/fwupdate-${version}.tar.bz2";
+    sha256 = "00w7jsg7wrlq4cpfz26m9rbv2jwyf0sansf343vfq02fy5lxars1";
+  };
+
+  patches = [
+    ./do-not-create-sharedstatedir.patch
+  ];
+
+  NIX_CFLAGS_COMPILE = [ "-I${gnu-efi}/include/efi" ];
+
+  # TODO: Just apply the disable to the efi subdir
+  hardeningDisable = [ "stackprotector" ];
+
+  makeFlags = [
+    "EFIDIR=nixos"
+    "prefix=$(out)"
+    "LIBDIR=$(out)/lib"
+    "GNUEFIDIR=${gnu-efi}/lib"
+    "ESPMOUNTPOINT=$(out)/boot"
+  ];
+
+  nativeBuildInputs = [
+    pkgconfig
+    gettext
+  ];
+
+  buildInputs = [
+    gnu-efi
+    libsmbios
+    popt
+  ];
+
+  propagatedBuildInputs = [
+    efivar
+  ];
+
+  # TODO: fix wrt cross-compilation
+  preConfigure = ''
+    arch=$(cc -dumpmachine | cut -f1 -d- | sed 's,i[3456789]86,ia32,' )
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${gnu-efi}/include/efi/$arch"
+  '';
+
+  postInstall = ''
+    rm -rf $out/src
+    rm -rf $out/lib/debug
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Tools for using the ESRT and UpdateCapsule() to apply firmware updates";
+    maintainers = with maintainers; [ ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/fwupdate/do-not-create-sharedstatedir.patch b/nixpkgs/pkgs/os-specific/linux/firmware/fwupdate/do-not-create-sharedstatedir.patch
new file mode 100644
index 000000000000..b8588ef2b11a
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/fwupdate/do-not-create-sharedstatedir.patch
@@ -0,0 +1,10 @@
+--- a/linux/Makefile
++++ b/linux/Makefile
+@@ -131,7 +131,6 @@
+ 		ln -fs $(x) $(patsubst %.so.1.$(VERSION),%.so.1,$(DESTDIR)$(libdir)/$(x)) ;\
+ 		ln -fs $(x) $(patsubst %.so.1.$(VERSION),%.so,$(DESTDIR)$(libdir)/$(x)) ;\
+ 		)
+-	$(INSTALL) -d -m 755 $(DESTDIR)$(sharedstatedir)/fwupdate/
+ 	$(INSTALL) -d -m 755 $(DESTDIR)$(libexecdir)/fwupdate/
+ 	$(INSTALL) -m 755 cleanup $(DESTDIR)$(libexecdir)/fwupdate/cleanup
+ 	$(INSTALL) -d -m 755 $(DESTDIR)$(libdatadir)/systemd/system
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/intel2200BGFirmware/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/intel2200BGFirmware/default.nix
new file mode 100644
index 000000000000..372be2d71f2c
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/intel2200BGFirmware/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchzip }:
+
+let version = "3.1"; in
+
+fetchzip {
+  name = "intel2200BGFirmware-${version}";
+  url = "https://src.fedoraproject.org/repo/pkgs/ipw2200-firmware/ipw2200-fw-${version}.tgz/eaba788643c7cc7483dd67ace70f6e99/ipw2200-fw-${version}.tgz";
+  sha256 = "0zjyjndyc401pn5x5lgypxdal21n82ymi3vbb2ja1b89yszj432b";
+
+  postFetch = ''
+    tar -xzvf $downloadedFile --strip-components=1
+    install -D -m644 ipw2200-bss.fw     $out/lib/firmware/ipw2200-bss.fw
+    install -D -m644 ipw2200-ibss.fw    $out/lib/firmware/ipw2200-ibss.fw
+    install -D -m644 ipw2200-sniffer.fw $out/lib/firmware/ipw2200-sniffer.fw
+    install -D -m644 LICENSE.ipw2200-fw $out/share/doc/intel2200BGFirmware/LICENSE
+  '';
+
+  meta = with lib; {
+    description = "Firmware for Intel 2200BG cards";
+    homepage = http://ipw2200.sourceforge.net/firmware.php;
+    license = licenses.unfreeRedistributableFirmware;
+    maintainers = with maintainers; [ sternenseemann ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/openelec-dvb-firmware/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/openelec-dvb-firmware/default.nix
new file mode 100644
index 000000000000..b60ce6f1b4af
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/openelec-dvb-firmware/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "openelec-dvb-firmware-${version}";
+  version = "0.0.51";
+
+  src = fetchurl {
+    url = "https://github.com/OpenELEC/dvb-firmware/archive/${version}.tar.gz";
+    sha256 = "cef3ce537d213e020af794cecf9de207e2882c375ceda39102eb6fa2580bad8d";
+  };
+
+  phases = [ "unpackPhase" "installPhase" ];
+
+  installPhase = ''
+    DESTDIR="$out" ./install
+    find $out \( -name 'README.*' -or -name 'LICEN[SC]E.*' -or -name '*.txt' \) | xargs rm
+  '';
+
+  meta = with stdenv.lib; {
+    description = "DVB firmware from OpenELEC";
+    homepage = https://github.com/OpenELEC/dvb-firmware;
+    license = licenses.unfreeRedistributableFirmware;
+    platforms = platforms.linux;
+    priority = 7;
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi-wireless/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi-wireless/default.nix
new file mode 100644
index 000000000000..89b4f70264eb
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi-wireless/default.nix
@@ -0,0 +1,53 @@
+{ stdenv, fetchurl, fetchFromGitHub, dpkg }:
+
+stdenv.mkDerivation rec {
+  name = "raspberrypi-wireless-firmware-${version}";
+  version = "2018-08-20";
+
+  srcs = [
+    (fetchFromGitHub {
+      name = "bluez-firmware";
+      owner = "RPi-Distro";
+      repo = "bluez-firmware";
+      rev = "ade2bae1aaaebede09abb8fb546f767a0e4c7804";
+      sha256 = "07gm76gxp5anv6paryvxcp34a86fkny8kdlzqhzcpfczzglkp6ag";
+    })
+    (fetchFromGitHub {
+      name = "firmware-nonfree";
+      owner = "RPi-Distro";
+      repo = "firmware-nonfree";
+      rev = "b518de45ced519e8f7a499f4778100173402ae43";
+      sha256 = "1d5026ic9awji6c67irpwsxpxgsc0dhn11d3abkxi2vvra1pir4g";
+    })
+  ];
+
+  sourceRoot = ".";
+
+  dontBuild = true;
+  # Firmware blobs do not need fixing and should not be modified
+  dontFixup = true;
+
+  installPhase = ''
+    mkdir -p "$out/lib/firmware/brcm"
+
+    # Wifi firmware
+    for filename in firmware-nonfree/brcm/brcmfmac434??-sdio.*; do
+      cp "$filename" "$out/lib/firmware/brcm"
+    done
+
+    # Bluetooth firmware
+    cp bluez-firmware/broadcom/*.hcd "$out/lib/firmware/brcm"
+  '';
+
+  outputHashMode = "recursive";
+  outputHashAlgo = "sha256";
+  outputHash = "1s5gb00v42s5izbaw8irs1fwvhh7z9wl07czc0nkw6p91871ivb7";
+
+  meta = with stdenv.lib; {
+    description = "Firmware for builtin Wifi/Bluetooth devices in the Raspberry Pi 3 and Zero W";
+    homepage = https://github.com/RPi-Distro/firmware-nonfree;
+    license = licenses.unfreeRedistributableFirmware;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ lopsided98 ];
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi/default.nix
new file mode 100644
index 000000000000..8965e5d60d78
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  name = "raspberrypi-firmware-${version}";
+  version = "1.20181112";
+
+  src = fetchFromGitHub {
+    owner = "raspberrypi";
+    repo = "firmware";
+    rev = version;
+    sha256 = "0jjxr8k8vdziynj8101ikcc9hmm61r2la51nrx6zv8a7j9a4m5zg";
+  };
+
+  installPhase = ''
+    mkdir -p $out/share/raspberrypi/boot
+    cp -R boot/* $out/share/raspberrypi/boot
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Firmware for the Raspberry Pi board";
+    homepage = https://github.com/raspberrypi/firmware;
+    license = licenses.unfreeRedistributableFirmware; # See https://github.com/raspberrypi/firmware/blob/master/boot/LICENCE.broadcom
+    platforms = [ "armv6l-linux" "armv7l-linux" "aarch64-linux" ];
+    maintainers = with maintainers; [ dezgeg tavyc ];
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi/tools-dont-install-sysv-init-scripts.patch b/nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi/tools-dont-install-sysv-init-scripts.patch
new file mode 100644
index 000000000000..e12aeeb0cdb8
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi/tools-dont-install-sysv-init-scripts.patch
@@ -0,0 +1,20 @@
+diff --git a/interface/vmcs_host/linux/vcfiled/CMakeLists.txt b/interface/vmcs_host/linux/vcfiled/CMakeLists.txt
+index aed0e83..b325676 100644
+--- a/interface/vmcs_host/linux/vcfiled/CMakeLists.txt
++++ b/interface/vmcs_host/linux/vcfiled/CMakeLists.txt
+@@ -17,15 +17,6 @@ target_link_libraries(vcfiled
+ install(TARGETS vcfiled 
+         RUNTIME DESTINATION sbin)
+ 
+-configure_file (etc/init.d/vcfiled ${PROJECT_BINARY_DIR}/etc/init.d/vcfiled)
+-
+-# script to start up vcfiled at start of day
+-install(PROGRAMS ${PROJECT_BINARY_DIR}/etc/init.d/vcfiled
+-        DESTINATION /etc/init.d)
+-# install locally to the installation directory too
+-install(PROGRAMS ${PROJECT_BINARY_DIR}/etc/init.d/vcfiled
+-        DESTINATION ${VMCS_INSTALL_PREFIX}/share/install)
+-
+ # test program for vcfiled_check library
+ add_executable(vcfiled_lock_test vcfiled_lock_test.c)
+ target_link_libraries(vcfiled_lock_test vcfiled_check)
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi/tools.nix b/nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi/tools.nix
new file mode 100644
index 000000000000..4685f6757179
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/raspberrypi/tools.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, cmake, pkgconfig }:
+
+stdenv.mkDerivation rec {
+  name = "raspberrypi-tools-${version}";
+  version = "2018-10-03";
+
+  src = fetchFromGitHub {
+    owner = "raspberrypi";
+    repo = "userland";
+    rev = "de4a7f2e3c391e2d3bc76af31864270e7802d9ac";
+    sha256 = "0w96xa98ngdk9m6wv185w8waa7wm2hkn2bhxz52zd477hchzrxlg";
+  };
+
+  patches = [ ./tools-dont-install-sysv-init-scripts.patch ];
+
+  nativeBuildInputs = [ cmake pkgconfig ];
+
+  preConfigure = ''
+    cmakeFlagsArray+=("-DVMCS_INSTALL_PREFIX=$out")
+  '' + stdenv.lib.optionalString stdenv.isAarch64 ''
+    cmakeFlagsArray+=("-DARM64=1")
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Userland tools for the Raspberry Pi board";
+    homepage = https://github.com/raspberrypi/userland;
+    license = licenses.bsd3;
+    platforms = [ "armv6l-linux" "armv7l-linux" "aarch64-linux" ];
+    maintainers = with maintainers; [ dezgeg tavyc ];
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/rt5677/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/rt5677/default.nix
new file mode 100644
index 000000000000..af0c07d10596
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/rt5677/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchgit }:
+
+stdenv.mkDerivation {
+  name = "rt5677-firmware";
+
+  src = fetchgit {
+    url = "https://github.com/raphael/linux-samus";
+    rev = "995de6c2093797905fbcd79f1a3625dd3f50be37";
+    sha256 = "0a6lz9wadm47cmva136q6wd0lw03bmymf9ispnzb091a7skwacry";
+  };
+
+
+  installPhase = ''
+    mkdir -p $out/lib/firmware
+    cp ./firmware/rt5677_elf_vad $out/lib/firmware
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Firmware for Realtek rt5677 device";
+    license = licenses.unfreeRedistributableFirmware;
+    maintainers = [ maintainers.zohl ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/rtl8192su-firmware/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/rtl8192su-firmware/default.nix
new file mode 100644
index 000000000000..d8d4c37fd886
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/rtl8192su-firmware/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchFromGitHub }:
+with stdenv.lib;
+stdenv.mkDerivation {
+  name = "rtl8192su-unstable-2016-10-05";
+
+  src = fetchFromGitHub {
+    owner = "chunkeey";
+    repo = "rtl8192su";
+    rev = "c00112c9a14133290fe30bd3b44e45196994cb1c";
+    sha256 = "0j3c35paapq1icmxq0mg7pm2xa2m69q7bkfmwgq99d682yr2cb5l";
+  };
+
+  phases = [ "unpackPhase" "installPhase" ];
+
+  installPhase = ''
+    for i in rtl8192sfw.bin \
+             rtl8192sufw-ap.bin \
+             rtl8192sufw-apple.bin \
+             rtl8192sufw-windows.bin \
+             rtl8712u-linux-firmware-bad.bin \
+             rtl8712u-most-recent-v2.6.6-bad.bin \
+             rtl8712u-most-recent-v2.6.6-bad.bin \
+             rtl8712u-oldest-but-good.bin;
+    do
+      install -D -pm644 firmwares/$i $out/lib/firmware/rtlwifi/$i
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Firmware for Realtek RTL8188SU/RTL8191SU/RTL8192SU";
+    homepage = https://github.com/chunkeey/rtl8192su;
+    license = licenses.unfreeRedistributableFirmware;
+    maintainers = with maintainers; [ mic92 ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/rtl8723bs-firmware/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/rtl8723bs-firmware/default.nix
new file mode 100644
index 000000000000..eea6f2893f22
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/rtl8723bs-firmware/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, linuxPackages }:
+with stdenv.lib;
+stdenv.mkDerivation {
+  name = "rtl8723bs-firmware-${linuxPackages.rtl8723bs.version}";
+  inherit (linuxPackages.rtl8723bs) src;
+
+  phases = [ "unpackPhase" "installPhase" ];
+
+  installPhase = ''
+    mkdir -p                "$out/lib/firmware/rtlwifi"
+    cp rtl8723bs_nic.bin    "$out/lib/firmware/rtlwifi"
+    cp rtl8723bs_wowlan.bin "$out/lib/firmware/rtlwifi"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Firmware for RealTek 8723bs";
+    homepage = https://github.com/hadess/rtl8723bs;
+    license = licenses.unfreeRedistributableFirmware;
+    maintainers = with maintainers; [ elitak ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/rtlwifi_new-firmware/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/rtlwifi_new-firmware/default.nix
new file mode 100644
index 000000000000..673ef686e488
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/rtlwifi_new-firmware/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, lib, linuxPackages }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  name = "rtlwifi_new-firmware-${linuxPackages.rtlwifi_new.version}";
+  inherit (linuxPackages.rtlwifi_new) src;
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p "$out/lib/firmware"
+    cp -rf firmware/rtlwifi/ "$out/lib/firmware"
+  '';
+
+  meta = {
+    description = "Firmware for the newest Realtek rtlwifi codes";
+    inherit (src.meta) homepage;
+    license = licenses.unfreeRedistributableFirmware;
+    platforms = with platforms; linux;
+    maintainers = with maintainers; [ tvorog ];
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/firmware/zd1211/default.nix b/nixpkgs/pkgs/os-specific/linux/firmware/zd1211/default.nix
new file mode 100644
index 000000000000..2c9db47539f7
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/firmware/zd1211/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchzip }:
+
+let
+  pname = "zd1211-firmware";
+  version = "1.5";
+in fetchzip rec {
+  name = "${pname}-${version}";
+  url = "mirror://sourceforge/zd1211/${name}.tar.bz2";
+
+  postFetch = ''
+    tar -xjvf $downloadedFile
+    mkdir -p $out/lib/firmware/zd1211
+    cp zd1211-firmware/* $out/lib/firmware/zd1211
+  '';
+
+  sha256 = "0sj2zl3r0549mjz37xy6iilm1hm7ak5ax02gwrn81r5yvphqzd52";
+
+  meta = {
+    description = "Firmware for the ZyDAS ZD1211(b) 802.11a/b/g USB WLAN chip";
+    homepage = https://sourceforge.net/projects/zd1211/;
+    license = "GPL";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}