about summary refs log tree commit diff
path: root/nixpkgs/pkgs/os-specific/linux/kbd
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/os-specific/linux/kbd')
-rw-r--r--nixpkgs/pkgs/os-specific/linux/kbd/default.nix72
-rw-r--r--nixpkgs/pkgs/os-specific/linux/kbd/keymaps.nix35
-rw-r--r--nixpkgs/pkgs/os-specific/linux/kbd/search-paths.patch71
3 files changed, 178 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/os-specific/linux/kbd/default.nix b/nixpkgs/pkgs/os-specific/linux/kbd/default.nix
new file mode 100644
index 000000000000..a37e65f8cb50
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/kbd/default.nix
@@ -0,0 +1,72 @@
+{ stdenv, fetchurl, autoreconfHook,
+  gzip, bzip2, pkgconfig, flex, check,
+  pam, coreutils
+}:
+
+stdenv.mkDerivation rec {
+  name = "kbd-${version}";
+  version = "2.0.4";
+
+  src = fetchurl {
+    url = "mirror://kernel/linux/utils/kbd/${name}.tar.xz";
+    sha256 = "124swm93dm4ca0pifgkrand3r9gvj3019d4zkfxsj9djpvv0mnaz";
+  };
+
+  configureFlags = [
+    "--enable-optional-progs"
+    "--enable-libkeymap"
+    "--disable-nls"
+  ];
+
+  patches = [ ./search-paths.patch ];
+
+  postPatch =
+    ''
+      # Add Neo keymap subdirectory
+      sed -i -e 's,^KEYMAPSUBDIRS *= *,&i386/neo ,' data/Makefile.am
+
+      # Renaming keymaps with name clashes, because loadkeys just picks
+      # the first keymap it sees. The clashing names lead to e.g.
+      # "loadkeys no" defaulting to a norwegian dvorak map instead of
+      # the much more common qwerty one.
+      pushd data/keymaps/i386
+      mv qwertz/cz{,-qwertz}.map
+      mv olpc/es{,-olpc}.map
+      mv olpc/pt{,-olpc}.map
+      mv dvorak/{no.map,dvorak-no.map}
+      mv fgGIod/trf{,-fgGIod}.map
+      mv colemak/{en-latin9,colemak}.map
+      popd
+
+      # Fix the path to gzip/bzip2.
+      substituteInPlace src/libkeymap/findfile.c \
+        --replace gzip ${gzip}/bin/gzip \
+        --replace bzip2 ${bzip2.bin}/bin/bzip2 \
+
+      # We get a warning in armv5tel-linux and the fuloong2f, so we
+      # disable -Werror in it.
+      ${stdenv.lib.optionalString (stdenv.isAarch32 || stdenv.hostPlatform.isMips) ''
+        sed -i s/-Werror// src/Makefile.am
+      ''}
+    '';
+
+  postInstall = ''
+    for i in $out/bin/unicode_{start,stop}; do
+      substituteInPlace "$i" \
+        --replace /usr/bin/tty ${coreutils}/bin/tty
+    done
+  '';
+
+
+  buildInputs = [ check pam ];
+  nativeBuildInputs = [ autoreconfHook pkgconfig flex ];
+
+  makeFlags = [ "setowner=" ];
+
+  meta = with stdenv.lib; {
+    homepage = ftp://ftp.altlinux.org/pub/people/legion/kbd/;
+    description = "Linux keyboard utilities and keyboard maps";
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/kbd/keymaps.nix b/nixpkgs/pkgs/os-specific/linux/kbd/keymaps.nix
new file mode 100644
index 000000000000..ecb7045ed278
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/kbd/keymaps.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, fetchurl, gzip }:
+
+{
+  dvp = stdenv.mkDerivation rec {
+    name = "dvp-${version}";
+    version = "1.2.1";
+
+    src = fetchurl {
+      url = "http://kaufmann.no/downloads/linux/dvp-${lib.replaceStrings ["."] ["_"] version}.map.gz";
+      sha256 = "0e859211cfe16a18a3b9cbf2ca3e280a23a79b4e40b60d8d01d0fde7336b6d50";
+    };
+
+    nativeBuildInputs = [ gzip ];
+
+    buildCommand = ''
+      mkdir -p $out/share/keymaps/i386/dvorak
+      gzip -c -d $src > $out/share/keymaps/i386/dvorak/dvp.map
+    '';
+  };
+
+  neo = stdenv.mkDerivation rec {
+    name = "neo-${version}";
+    version = "2476";
+
+    src = fetchurl {
+      name = "neo.map";
+      url = "https://svn.neo-layout.org/linux/console/neo.map?r=${version}";
+      sha256 = "19mfrd31vzpsjiwc7pshxm0b0sz5dd17xrz6k079cy4im1vf0r4g";
+    };
+
+    buildCommand = ''
+      install -D $src $out/share/keymaps/i386/neo/neo.map
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/os-specific/linux/kbd/search-paths.patch b/nixpkgs/pkgs/os-specific/linux/kbd/search-paths.patch
new file mode 100644
index 000000000000..c9405a56721d
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/kbd/search-paths.patch
@@ -0,0 +1,71 @@
+--- a/src/libkeymap/analyze.l
++++ b/src/libkeymap/analyze.l
+@@ -101,6 +101,9 @@ stack_pop(struct lk_ctx *ctx, void *scan
+ static const char *const include_dirpath0[] = { "", 0 };
+ static const char *const include_dirpath1[] = { "", "../include/", "../../include/", 0 };
+ static const char *const include_dirpath3[] = {
++ 	"/etc/kbd/" KEYMAPDIR "/include/",
++ 	"/etc/kbd/" KEYMAPDIR "/i386/include/",
++ 	"/etc/kbd/" KEYMAPDIR "/mac/include/",
+ 	DATADIR "/" KEYMAPDIR "/include/",
+ 	DATADIR "/" KEYMAPDIR "/i386/include/",
+ 	DATADIR "/" KEYMAPDIR "/mac/include/", 0
+--- a/src/loadkeys.c
++++ b/src/loadkeys.c
+@@ -27,7 +27,7 @@
+ #include "keymap.h"
+ 
+ static const char *progname         = NULL;
+-static const char *const dirpath1[] = { "", DATADIR "/" KEYMAPDIR "/**", KERNDIR "/", 0 };
++static const char *const dirpath1[] = { "", "/etc/kbd/" KEYMAPDIR "/**", DATADIR "/" KEYMAPDIR "/**", 0 };
+ static const char *const suffixes[] = { "", ".kmap", ".map", 0 };
+ 
+ static void __attribute__((noreturn))
+--- a/src/loadunimap.c
++++ b/src/loadunimap.c
+@@ -30,7 +30,7 @@
+ extern char *progname;
+ extern int force;
+ 
+-static const char *const unidirpath[]  = { "", DATADIR "/" UNIMAPDIR "/", 0 };
++static const char *const unidirpath[]  = { "", "/etc/kbd/" UNIMAPDIR "/", DATADIR "/" UNIMAPDIR "/", 0 };
+ static const char *const unisuffixes[] = { "", ".uni", ".sfm", 0 };
+ 
+ #ifdef MAIN
+--- a/src/mapscrn.c
++++ b/src/mapscrn.c
+@@ -27,7 +27,7 @@ void loadnewmap(int fd, char *mfil);
+ static int ctoi(char *);
+ 
+ /* search for the map file in these directories (with trailing /) */
+-static const char *const mapdirpath[]  = { "", DATADIR "/" TRANSDIR "/", 0 };
++static const char *const mapdirpath[]  = { "", "/etc/kbd/" TRANSDIR "/", DATADIR "/" TRANSDIR "/", 0 };
+ static const char *const mapsuffixes[] = { "", ".trans", "_to_uni.trans", ".acm", 0 };
+ 
+ #ifdef MAIN
+--- a/src/resizecons.c
++++ b/src/resizecons.c
+@@ -101,7 +101,7 @@ static int vga_get_fontheight(void);
+ static void vga_set_cursor(int, int);
+ static void vga_set_verticaldisplayend_lowbyte(int);
+ 
+-const char *const dirpath[]  = { "", DATADIR "/" VIDEOMODEDIR "/", 0 };
++const char *const dirpath[]  = { "", "/etc/kbd/" VIDEOMODEDIR "/", DATADIR "/" VIDEOMODEDIR "/", 0};
+ const char *const suffixes[] = { "", 0 };
+ 
+ int main(int argc, char **argv)
+--- a/src/setfont.c
++++ b/src/setfont.c
+@@ -53,10 +53,10 @@ int force   = 0;
+ int debug   = 0;
+ 
+ /* search for the font in these directories (with trailing /) */
+-const char *const fontdirpath[]  = { "", DATADIR "/" FONTDIR "/", 0 };
++const char *const fontdirpath[]  = { "", "/etc/kbd/" FONTDIR "/", DATADIR "/" FONTDIR "/", 0 };
+ const char *const fontsuffixes[] = { "", ".psfu", ".psf", ".cp", ".fnt", 0 };
+ /* hide partial fonts a bit - loading a single one is a bad idea */
+-const char *const partfontdirpath[]  = { "", DATADIR "/" FONTDIR "/" PARTIALDIR "/", 0 };
++const char *const partfontdirpath[]  = { "", "/etc/kbd/" FONTDIR "/" PARTIALDIR "/", DATADIR "/" FONTDIR "/" PARTIALDIR "/", 0 };
+ const char *const partfontsuffixes[] = { "", 0 };
+ 
+ static inline int