uboot: (firmwareOdroidC2/C4) don't invoke patch tool, use patches = [] instead

https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/setup.sh#L948
this can do it nicely.

Signed-off-by: Anton Arapov <anton@deadbeef.mx>
This commit is contained in:
Anton Arapov 2021-04-03 12:58:10 +02:00 committed by Alan Daniels
commit 56de2bcd43
30691 changed files with 3076956 additions and 0 deletions

View file

@ -0,0 +1,57 @@
{ lib, stdenv, coreutils, fetchFromGitHub, autoconf, automake, pkg-config, procps, ronn,
libpng, uthash , which, xnee, xorg, python3Packages }:
stdenv.mkDerivation rec {
version = "1.6.1";
pname = "alttab";
src = fetchFromGitHub {
owner = "sagb";
repo = pname;
rev = "v${version}";
sha256 = "sha256-g56207IGNDnBIqZmbpcgOLcfAGKwBE0DYu2Dq0bLS8o=";
};
nativeBuildInputs = [
autoconf
automake
pkg-config
ronn
];
preConfigure = "./bootstrap.sh";
buildInputs = [
libpng
uthash
xorg.libX11
xorg.libXft
xorg.libXmu
xorg.libXpm
xorg.libXrandr
xorg.libXrender
];
enableParallelBuilding = true;
doCheck = true;
checkInputs = [
coreutils
procps
python3Packages.xvfbwrapper
which
xnee
xorg.xeyes
xorg.xprop
];
meta = with lib; {
homepage = "https://github.com/sagb/alttab";
description = "X11 window switcher designed for minimalistic window managers or standalone X11 session";
license = licenses.gpl3Plus;
platforms = platforms.all;
maintainers = [ maintainers.sgraf ];
};
}

View file

@ -0,0 +1,40 @@
{ lib, fetchurl, python3Packages
, gobject-introspection, gsettings-desktop-schemas, gtk3
, wrapGAppsHook, xrandr
}:
let
inherit (python3Packages) buildPythonApplication docutils pygobject3;
pname = "arandr";
version = "0.1.10";
name = "${pname}-${version}";
in buildPythonApplication rec {
inherit pname version;
src = fetchurl {
url = "https://christian.amsuess.com/tools/arandr/files/${name}.tar.gz";
sha256 = "135q0llvm077jil2fr92ssw3p095m4r8jfj0lc5rr3m71n4srj6v";
};
patchPhase = ''
rm -rf data/po/*
'';
# no tests
doCheck = false;
# hook for gobject-introspection doesn't like strictDeps
# https://github.com/NixOS/nixpkgs/issues/56943
strictDeps = false;
buildInputs = [ docutils gsettings-desktop-schemas gtk3 ];
nativeBuildInputs = [ gobject-introspection wrapGAppsHook ];
propagatedBuildInputs = [ xrandr pygobject3 ];
meta = {
homepage = "https://christian.amsuess.com/tools/arandr/";
description = "A simple visual front end for XRandR";
license = lib.licenses.gpl3;
maintainers = [ lib.maintainers.domenkozar ];
};
}

View file

@ -0,0 +1,24 @@
{lib, stdenv, fetchurl, libX11, libXaw}:
stdenv.mkDerivation rec {
version = "0.10.1";
pname = "autocutsel";
src = fetchurl {
url = "https://github.com/sigmike/autocutsel/releases/download/${version}/${pname}-${version}.tar.gz";
sha256 = "sha256-8X4G1C90lENtSyb0vgtrDaOUgcBADJZ3jkuQW2NB6xc=";
};
buildInputs = [ libX11 libXaw ];
installPhase = ''
mkdir -p $out/bin
cp autocutsel $out/bin/
'';
meta = {
homepage = "https://www.nongnu.org/autocutsel/";
description = "Tracks changes in the server's cutbuffer and CLIPBOARD selection";
license = lib.licenses.gpl2Plus;
platforms = with lib.platforms; all;
};
}

View file

@ -0,0 +1,27 @@
{ lib, stdenv, fetchFromGitHub, pkg-config, libX11, libXinerama, imlib2 }:
stdenv.mkDerivation rec {
pname = "bgs";
version = "0.8";
src = fetchFromGitHub {
owner = "Gottox";
repo = "bgs";
rev = "v${version}";
sha256 = "V8GP+xLSiCvaYZt8Bi3/3KlTBaGnMYQUeNCHwH6Ejzo=";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ libX11 libXinerama imlib2 ];
preConfigure = ''sed -i "s@PREFIX = /usr/local@PREFIX = $out@g" config.mk'';
meta = with lib; {
description = "Extremely fast and small background setter for X";
license = licenses.mit;
platforms = platforms.linux;
maintainers = with maintainers; [ pSub ];
};
}

View file

@ -0,0 +1,141 @@
# The bumblebee package allows a program to be rendered on an
# dedicated video card by spawning an additional X11 server and
# streaming the results via VirtualGL or primus to the primary server.
# The package is rather chaotic; it's also quite recent.
# As it may change a lot, some of the hacks in this nix expression
# will hopefully not be needed in the future anymore.
# To test:
# 1. make sure that the 'bbswitch' kernel module is installed,
# 2. then run 'bumblebeed' as root
# 3. Then either 'optirun glxinfo' or 'primusrun glxinfo' as user.
#
# The glxinfo output should indicate the NVidia driver is being used
# and all expected extensions are supported.
#
# To use at startup, see hardware.bumblebee options.
{ stdenv, lib, fetchurl, fetchpatch, pkg-config, help2man, makeWrapper
, glib, libbsd
, libX11, xorgserver, kmod, xf86videonouveau
, nvidia_x11, virtualgl, libglvnd
, automake111x, autoconf
# The below should only be non-null in a x86_64 system. On a i686
# system the above nvidia_x11 and virtualgl will be the i686 packages.
# TODO: Confusing. Perhaps use "SubArch" instead of i686?
, nvidia_x11_i686 ? null
, libglvnd_i686 ? null
, useDisplayDevice ? false
, extraNvidiaDeviceOptions ? ""
, extraNouveauDeviceOptions ? ""
, useNvidia ? true
}:
let
nvidia_x11s = [ nvidia_x11 ]
++ lib.optional nvidia_x11.useGLVND libglvnd
++ lib.optionals (nvidia_x11_i686 != null)
([ nvidia_x11_i686 ] ++ lib.optional nvidia_x11_i686.useGLVND libglvnd_i686);
nvidiaLibs = lib.makeLibraryPath nvidia_x11s;
bbdPath = lib.makeBinPath [ kmod xorgserver ];
xmodules = lib.concatStringsSep "," (map (x: "${x.out or x}/lib/xorg/modules") ([ xorgserver ] ++ lib.optional (!useNvidia) xf86videonouveau));
modprobePatch = fetchpatch {
url = "https://github.com/Bumblebee-Project/Bumblebee/commit/1ada79fe5916961fc4e4917f8c63bb184908d986.patch";
sha256 = "02vq3vba6nx7gglpjdfchws9vjhs1x02a543yvqrxqpvvdfim2x2";
};
libkmodPatch = fetchpatch {
url = "https://github.com/Bumblebee-Project/Bumblebee/commit/deceb14cdf2c90ff64ebd1010a674305464587da.patch";
sha256 = "00c05i5lxz7vdbv445ncxac490vbl5g9w3vy3gd71qw1f0si8vwh";
};
in stdenv.mkDerivation rec {
pname = "bumblebee";
version = "3.2.1";
src = fetchurl {
url = "https://www.bumblebee-project.org/${pname}-${version}.tar.gz";
sha256 = "03p3gvx99lwlavznrpg9l7jnl1yfg2adcj8jcjj0gxp20wxp060h";
};
patches = [
./nixos.patch
modprobePatch
libkmodPatch
];
# By default we don't want to use a display device
nvidiaDeviceOptions = lib.optionalString (!useDisplayDevice) ''
# Disable display device
Option "UseEDID" "false"
Option "UseDisplayDevice" "none"
'' + extraNvidiaDeviceOptions;
nouveauDeviceOptions = extraNouveauDeviceOptions;
# the have() function is deprecated and not available to bash completions the
# way they are currently loaded in NixOS, so use _have. See #10936
postPatch = ''
substituteInPlace scripts/bash_completion/bumblebee \
--replace "have optirun" "_have optirun"
'';
preConfigure = ''
# Don't use a special group, just reuse wheel.
substituteInPlace configure \
--replace 'CONF_GID="bumblebee"' 'CONF_GID="wheel"'
# Apply configuration options
substituteInPlace conf/xorg.conf.nvidia \
--subst-var nvidiaDeviceOptions
substituteInPlace conf/xorg.conf.nouveau \
--subst-var nouveauDeviceOptions
'';
# Build-time dependencies of bumblebeed and optirun.
# Note that it has several runtime dependencies.
buildInputs = [ libX11 glib libbsd kmod ];
nativeBuildInputs = [ makeWrapper pkg-config help2man automake111x autoconf ];
# The order of LDPATH is very specific: First X11 then the host
# environment then the optional sub architecture paths.
#
# The order for MODPATH is the opposite: First the environment that
# includes the acceleration driver. As this is used for the X11
# server, which runs under the host architecture, this does not
# include the sub architecture components.
configureFlags = [
"--with-udev-rules=$out/lib/udev/rules.d"
# see #10282
#"CONF_PRIMUS_LD_PATH=${primusLibs}"
] ++ lib.optionals useNvidia [
"CONF_LDPATH_NVIDIA=${nvidiaLibs}"
"CONF_MODPATH_NVIDIA=${nvidia_x11.bin}/lib/xorg/modules"
];
CFLAGS = [
"-DX_MODULE_APPENDS=\\\"${xmodules}\\\""
];
postInstall = ''
wrapProgram "$out/sbin/bumblebeed" \
--prefix PATH : "${bbdPath}"
wrapProgram "$out/bin/optirun" \
--prefix PATH : "${virtualgl}/bin"
'';
meta = with lib; {
homepage = "https://github.com/Bumblebee-Project/Bumblebee";
description = "Daemon for managing Optimus videocards (power-on/off, spawns xservers)";
platforms = platforms.linux;
license = licenses.gpl3;
maintainers = with maintainers; [ abbradar ];
};
}

View file

@ -0,0 +1,80 @@
diff --git a/conf/xorg.conf.nouveau b/conf/xorg.conf.nouveau
index 87e48cb..60d6eaf 100644
--- a/conf/xorg.conf.nouveau
+++ b/conf/xorg.conf.nouveau
@@ -15,4 +15,5 @@ Section "Device"
# This Setting is needed on Ubuntu 13.04.
# BusID "PCI:01:00:0"
+@nouveauDeviceOptions@
EndSection
diff --git a/conf/xorg.conf.nvidia b/conf/xorg.conf.nvidia
index c3107f9..17072f4 100644
--- a/conf/xorg.conf.nvidia
+++ b/conf/xorg.conf.nvidia
@@ -29,6 +29,6 @@ Section "Device"
Option "ProbeAllGpus" "false"
Option "NoLogo" "true"
- Option "UseEDID" "false"
- Option "UseDisplayDevice" "none"
+
+@nvidiaDeviceOptions@
EndSection
diff --git a/src/bbsecondary.c b/src/bbsecondary.c
index 71a6b73..a682d8a 100644
--- a/src/bbsecondary.c
+++ b/src/bbsecondary.c
@@ -145,6 +145,23 @@ bool start_secondary(bool need_secondary) {
}
bb_log(LOG_INFO, "Starting X server on display %s.\n", bb_config.x_display);
+ const char mod_appends[] = X_MODULE_APPENDS;
+
+ char *mod_path;
+ int pathlen = strlen(bb_config.mod_path);
+ if (pathlen == 0) {
+ mod_path = mod_appends;
+ } else {
+ mod_path = malloc(pathlen + 1 + sizeof(mod_appends));
+ if (!mod_path) {
+ set_bb_error("Could not allocate memory for modules path\n");
+ return false;
+ }
+ strcpy(mod_path, bb_config.mod_path);
+ mod_path[pathlen] = ',';
+ strcpy(mod_path + pathlen + 1, mod_appends);
+ }
+
char *x_argv[] = {
XORG_BINARY,
bb_config.x_display,
@@ -153,24 +170,24 @@ bool start_secondary(bool need_secondary) {
"-sharevts",
"-nolisten", "tcp",
"-noreset",
+ "-logfile", "/var/log/X.bumblebee.log",
"-verbose", "3",
"-isolateDevice", pci_id,
- "-modulepath", bb_config.mod_path, // keep last
+ "-modulepath", mod_path,
NULL
};
enum {n_x_args = sizeof(x_argv) / sizeof(x_argv[0])};
- if (!*bb_config.mod_path) {
- x_argv[n_x_args - 3] = 0; //remove -modulepath if not set
- }
//close any previous pipe, if it (still) exists
if (bb_status.x_pipe[0] != -1){close(bb_status.x_pipe[0]); bb_status.x_pipe[0] = -1;}
if (bb_status.x_pipe[1] != -1){close(bb_status.x_pipe[1]); bb_status.x_pipe[1] = -1;}
//create a new pipe
if (pipe2(bb_status.x_pipe, O_NONBLOCK | O_CLOEXEC)){
set_bb_error("Could not create output pipe for X");
+ if (pathlen > 0) free(mod_path);
return false;
}
bb_status.x_pid = bb_run_fork_ld_redirect(x_argv, bb_config.ld_path, bb_status.x_pipe[1]);
+ if (pathlen > 0) free(mod_path);
//close the end of the pipe that is not ours
if (bb_status.x_pipe[1] != -1){close(bb_status.x_pipe[1]); bb_status.x_pipe[1] = -1;}
}

View file

@ -0,0 +1,54 @@
{ gdk-pixbuf, glib, gobject-introspection, gtk3, lib, libnotify,
procps, xset, xautolock, xscreensaver, python3Packages, wrapGAppsHook
}:
python3Packages.buildPythonApplication rec {
pname = "caffeine-ng";
version = "3.5.1";
src = python3Packages.fetchPypi{
inherit pname version;
sha256="0akzldqvxnqngpj1s6y2phgj7ch8wfm02j6z2drqvsbvaadw0jbm";
};
nativeBuildInputs = [ wrapGAppsHook glib ];
buildInputs = [
gdk-pixbuf gobject-introspection libnotify gtk3
python3Packages.setuptools-scm
];
pythonPath = with python3Packages; [
dbus-python docopt ewmh pygobject3 pyxdg
setproctitle pulsectl
];
doCheck = false; # There are no tests.
postPatch = ''
substituteInPlace caffeine/inhibitors.py \
--replace 'os.system("xset' 'os.system("${xset}/bin/xset' \
--replace 'os.system("xautolock' 'os.system("${xautolock}/bin/xautolock' \
--replace 'os.system("pgrep' 'os.system("${procps}/bin/pgrep' \
--replace 'os.system("xscreensaver-command' 'os.system("${xscreensaver}/bin/xscreensaver-command'
'';
postInstall = ''
mkdir -p $out/share
cp -r share $out/
cp -r caffeine/assets/icons $out/share/icons
# autostart file
cp -r $out/lib/python*/site-packages/etc $out/etc/
glib-compile-schemas --strict $out/share/glib-2.0/schemas
for i in $(find $out -name "*.desktop"); do
substituteInPlace $i --replace /usr $out
done
'';
meta = with lib; {
mainProgram = "caffeine";
maintainers = with maintainers; [ marzipankaiser ];
description = "Status bar application to temporarily inhibit screensaver and sleep mode";
homepage = "https://github.com/caffeine-ng/caffeine-ng";
license = licenses.gpl3;
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,36 @@
{ lib, stdenv, fetchFromGitLab, perl, xkeyboard_config }:
stdenv.mkDerivation rec {
pname = "ckbcomp";
version = "1.207";
src = fetchFromGitLab {
domain = "salsa.debian.org";
owner = "installer-team";
repo = "console-setup";
rev = version;
sha256 = "sha256-pT9dA2sRTozVAYA8VKPlL+AU8r9FABHXp6Pbqa8aSTo=";
};
buildInputs = [ perl ];
patchPhase = ''
substituteInPlace Keyboard/ckbcomp --replace "/usr/share/X11/xkb" "${xkeyboard_config}/share/X11/xkb"
substituteInPlace Keyboard/ckbcomp --replace "rules = 'xorg'" "rules = 'base'"
'';
dontBuild = true;
installPhase = ''
install -Dm0555 -t $out/bin Keyboard/ckbcomp
install -Dm0444 -t $out/share/man/man1 man/ckbcomp.1
'';
meta = with lib; {
description = "Compiles a XKB keyboard description to a keymap suitable for loadkeys";
homepage = "https://salsa.debian.org/installer-team/console-setup";
license = licenses.gpl2Plus;
maintainers = with lib.maintainers; [ dezgeg ];
platforms = platforms.unix;
};
}

View file

@ -0,0 +1,28 @@
{ lib, stdenv, fetchFromGitHub, libX11 }:
stdenv.mkDerivation rec {
pname = "devour";
version = "12";
src = fetchFromGitHub {
owner = "salman-abedin";
repo = "devour";
rev = version;
sha256 = "1qq5l6d0fn8azg7sj7a4m2jsmhlpswl5793clcxs1p34vy4wb2lp";
};
installPhase = ''
install -Dm555 -t $out/bin devour
'';
buildInputs = [ libX11 ];
meta = with lib; {
description = "Devour hides your current window when launching an external program";
longDescription = "Devour hides your current window before launching an external program and unhides it after quitting";
homepage = "https://github.com/salman-abedin/devour";
license = licenses.gpl2Only;
maintainers = with maintainers; [ mazurel ];
platforms = platforms.unix;
};
}

View file

@ -0,0 +1,24 @@
{ lib, stdenv, fetchFromGitHub, python3 }:
stdenv.mkDerivation rec {
pname = "dex";
version = "0.9.0";
src = fetchFromGitHub {
owner = "jceb";
repo = pname;
rev = "v${version}";
sha256 = "03aapcywnz4kl548cygpi25m8adwbmqlmwgxa66v4156ax9dqs86";
};
propagatedBuildInputs = [ python3 ];
nativeBuildInputs = [ python3.pkgs.sphinx ];
makeFlags = [ "PREFIX=$(out)" "VERSION=$(version)" ];
meta = with lib; {
description = "A program to generate and execute DesktopEntry files of the Application type";
homepage = "https://github.com/jceb/dex";
platforms = platforms.linux;
license = licenses.gpl3Plus;
};
}

View file

@ -0,0 +1,23 @@
{ lib, stdenv, fetchFromGitHub, libX11, libXi, libconfuse }:
stdenv.mkDerivation rec {
pname = "dispad";
version = "0.3.1";
src = fetchFromGitHub {
owner = "BlueDragonX";
repo = "dispad";
rev = "v${version}";
sha256 = "0y0n9mf1hs3s706gkpmg1lh74m6vvkqc9rdbzgc6s2k7vdl2zp1y";
};
buildInputs = [ libX11 libXi libconfuse ];
meta = with lib; {
description = "A small daemon for disabling trackpads while typing";
homepage = "https://github.com/BlueDragonX/dispad";
license = licenses.gpl2;
maintainers = with maintainers; [ zimbatm ];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,30 @@
{ lib, stdenv, fetchFromGitHub, autoreconfHook, perl, libX11 }:
stdenv.mkDerivation rec {
pname = "ffcast";
version = "2.5.0";
src = fetchFromGitHub {
owner = "lolilolicon";
repo = "FFcast";
rev = version;
sha256 = "047y32bixhc8ksr98vwpgd0k1xxgsv2vs0n3kc2xdac4krc9454h";
};
nativeBuildInputs = [ autoreconfHook ];
buildInputs = [ perl libX11 ];
configureFlags = [ "--disable-xrectsel" ];
postBuild = ''
make install
'';
meta = with lib; {
description = "Run commands on rectangular screen regions";
homepage = "https://github.com/lolilolicon/FFcast";
license = licenses.gpl3;
maintainers = [ maintainers.guyonvarch ];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,26 @@
{ lib, stdenv, fetchFromGitHub, libX11, libXdamage, libXrender, libXcomposite, libXext, installShellFiles, git }:
stdenv.mkDerivation rec {
pname = "find-cursor";
version = "1.8";
src = fetchFromGitHub {
owner = "arp242";
repo = "find-cursor";
rev = "v${version}";
sha256 = "sha256-/Dw4bOTCnpCbeI0YJ5DJ9Q2AGBognylUk7xYGn0KIA8=";
};
nativeBuildInputs = [ installShellFiles git ];
buildInputs = [ libX11 libXdamage libXrender libXcomposite libXext ];
preInstall = "mkdir -p $out/share/man/man1";
installFlags = "PREFIX=${placeholder "out"}";
meta = with lib; {
description = "Simple XLib program to highlight the cursor position";
homepage = "https://github.com/arp242/find-cursor";
license = licenses.mit;
platforms = platforms.linux;
maintainers = [ maintainers.yanganto ];
};
}

View file

@ -0,0 +1,32 @@
{ lib, buildGoModule, fetchFromGitHub, xorg, wayland }:
buildGoModule rec {
pname = "go-sct";
version = "unstable-2022-01-32";
src = fetchFromGitHub {
owner = "d4l3k";
repo = "go-sct";
rev = "4ae88a6bf50e0b917541ddbcec1ff10ab77a0b15";
sha256 = "sha256-/0ilM1g3CNaseqV9i+cKWyzxvWnj+TFqazt+aYDtNVs=";
};
postPatch = ''
# Disable tests require network access
rm -f geoip/geoip_test.go
'';
vendorSha256 = "sha256-Rx5/oORink2QtRcD+JqbyFroWYhuYmuYDzZ391R4Jsw=";
buildInputs = [ xorg.libX11 xorg.libXrandr wayland.dev ];
ldflags = [ "-s" "-w" ];
meta = with lib; {
description = "Color temperature setting library and CLI that operates in a similar way to f.lux and Redshift";
homepage = "https://github.com/d4l3k/go-sct";
license = licenses.mit;
maintainers = with maintainers; [ cstrahan ];
mainProgram = "sct";
};
}

View file

@ -0,0 +1,30 @@
{ lib, fetchFromGitHub, buildGoModule, fetchpatch }:
buildGoModule rec {
version = "0.6.0";
pname = "grobi";
src = fetchFromGitHub {
rev = "v${version}";
owner = "fd0";
repo = "grobi";
sha256 = "032lvnl2qq9258y6q1p60lfi7qir68zgq8zyh4khszd3wdih7y3s";
};
vendorSha256 = "1ibwx5rbxkygfx78j3g364dmbwwa5b34qmzq3sqcbrsnv8rzrwvj";
patches = [
# fix failing test on go 1.15
(fetchpatch {
url = "https://github.com/fd0/grobi/commit/176988ab087ff92d1408fbc454c77263457f3d7e.patch";
sha256 = "0j8y3gns4lm0qxqxzmdn2ll0kq34mmfhf83lvsq13iqhp5bx3y31";
})
];
meta = with lib; {
homepage = "https://github.com/fd0/grobi";
description = "Automatically configure monitors/outputs for Xorg via RANDR";
license = with licenses; [ bsd2 ];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,44 @@
{ lib, stdenv
, fetchFromGitHub
, pkg-config
, imlib2
, libX11
, libXinerama
}:
stdenv.mkDerivation rec {
pname = "hsetroot";
version = "1.0.5";
src = fetchFromGitHub {
owner = "himdel";
repo = "hsetroot";
rev = version;
sha256 = "1jbk5hlxm48zmjzkaq5946s58rqwg1v1ds2sdyd2ba029hmvr722";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [
imlib2
libX11
libXinerama
];
postPatch = lib.optionalString (!stdenv.cc.isGNU) ''
sed -i -e '/--no-as-needed/d' Makefile
'';
makeFlags = [ "PREFIX=$(out)" ];
preInstall = ''
mkdir -p "$out/bin"
'';
meta = with lib; {
description = "Allows you to compose wallpapers ('root pixmaps') for X";
homepage = "https://github.com/himdel/hsetroot";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ henrytill shamilton ];
platforms = platforms.unix;
};
}

View file

@ -0,0 +1,29 @@
{ lib, stdenv, fetchurl, pkg-config, gdk-pixbuf, popt }:
stdenv.mkDerivation rec {
pname = "icon-slicer";
version = "0.3";
src = fetchurl {
url = "https://freedesktop.org/software/icon-slicer/releases/icon-slicer-${version}.tar.gz";
sha256 = "0kdnc08k2rs8llfg7xgvnrsk60x59pv5fqz6kn2ifnn2s1nj3w05";
};
patches = [
# Fixes hotspot `y` coordinate. The `x` coordinate is used on the y-axis.
(fetchurl {
url = "https://aur.archlinux.org/cgit/aur.git/plain/hotspotfix.patch?h=icon-slicer";
sha256 = "1l1dc1x5p4hys02arkmq3x6b1xdi510969d25g928zr4gf4an03h";
})
];
nativeBuildInputs = [ popt pkg-config ];
buildInputs = [ gdk-pixbuf ];
meta = with lib; {
description = "Utility for generating icon themes and libXcursor cursor themes";
homepage = "https://www.freedesktop.org/wiki/Software/icon-slicer/";
license = licenses.mit;
maintainers = with maintainers; [ zaninime ];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,31 @@
{ lib, stdenv, fetchurl, libX11, libXext, libXi, libXmu, libXt, libXtst }:
stdenv.mkDerivation rec {
pname = "imwheel";
version = "1.0.0pre12";
src = fetchurl {
url = "mirror://sourceforge/imwheel/imwheel-${version}.tar.gz";
sha256 = "2320ed019c95ca4d922968e1e1cbf0c075a914e865e3965d2bd694ca3d57cfe3";
};
buildInputs = [ libX11 libXext libXi libXmu libXt libXtst ];
makeFlags = [
"sysconfdir=/etc"
"ETCDIR=/etc"
];
installFlags = [
"sysconfdir=${placeholder "out"}/etc"
"ETCDIR=${placeholder "out"}/etc"
];
meta = with lib; {
homepage = "http://imwheel.sourceforge.net/";
description = "Mouse wheel configuration tool for XFree86/Xorg";
maintainers = with maintainers; [ jhillyerd ];
platforms = platforms.linux;
license = licenses.gpl2;
};
}

View file

@ -0,0 +1,35 @@
{ fetchCrate
, installShellFiles
, lib
, libbsd
, pkg-config
, rustPlatform
}:
rustPlatform.buildRustPackage rec {
pname = "inputplug";
version = "0.4.0";
src = fetchCrate {
inherit pname version;
sha256 = "00gv2i2pxy56l6ysslbscxinr4r0mpk9p2ivkrnjnwhc8j3v8v7h";
};
nativeBuildInputs = [ installShellFiles pkg-config ];
buildInputs = [ libbsd ];
cargoSha256 = "161kz47d4psfvh0vm98k8qappg50lpsw1ybyy7s3g3bp6ivfz8jv";
postInstall = ''
installManPage inputplug.1
'';
meta = with lib; {
description = "Monitor XInput events and run arbitrary scripts on hierarchy change events";
homepage = "https://github.com/andrewshadura/inputplug";
license = licenses.mit;
maintainers = with maintainers; [ jecaro ];
};
}

View file

@ -0,0 +1,31 @@
{ stdenv, lib, perl, pandoc, fetchFromGitHub, xdotool, wmctrl, xprop, nettools }:
stdenv.mkDerivation rec {
pname = "jumpapp";
version = "1.2";
src = fetchFromGitHub {
owner = "mkropat";
repo = "jumpapp";
rev = "v${version}";
sha256 = "sha256-9sh0+zpDxwqRGC1jUgGTDdSDRdAFsL12mQ/Opwh/UBc=";
};
makeFlags = [ "PREFIX=$(out)" ];
nativeBuildInputs = [ pandoc perl ];
buildInputs = [ xdotool wmctrl xprop nettools perl ];
postFixup = let
runtimePath = lib.makeBinPath buildInputs;
in
''
sed -i "2 i export PATH=${runtimePath}:\$PATH" $out/bin/jumpapp
sed -i "2 i export PATH=${perl}/bin:\$PATH" $out/bin/jumpappify-desktop-entry
'';
meta = {
homepage = "https://github.com/mkropat/jumpapp";
description = "A run-or-raise application switcher for any X11 desktop";
license = lib.licenses.mit;
maintainers = [ lib.maintainers.matklad ];
};
}

View file

@ -0,0 +1,62 @@
{ lib
, stdenv
, fetchFromGitHub
, pkg-config
, libX11
, xorgproto
, libXtst
, libXi
, libXext
, libXinerama
, libXrandr
, glib
, cairo
, xdotool
}:
let release = "20180821"; in
stdenv.mkDerivation {
pname = "keynav";
version = "0.${release}.0";
src = fetchFromGitHub {
owner = "jordansissel";
repo = "keynav";
rev = "78f9e076a5618aba43b030fbb9344c415c30c1e5";
sha256 = "0hmc14fj612z5h7gjgk95zyqab3p35c4a99snnblzxfg0p3x2f1d";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [
libX11
xorgproto
libXtst
libXi
libXext
libXinerama
libXrandr
glib
cairo
xdotool
];
postPatch = ''
echo >>VERSION MAJOR=0
echo >>VERSION RELEASE=${release}
echo >>VERSION REVISION=0
'';
installPhase = ''
mkdir -p $out/bin $out/share/keynav/doc
cp keynav $out/bin
cp keynavrc $out/share/keynav/doc
'';
meta = with lib; {
description = "Generate X11 mouse clicks from keyboard";
homepage = "https://www.semicomplete.com/projects/keynav/";
license = licenses.bsd3;
maintainers = with maintainers; [ pSub ];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,26 @@
{ lib, stdenv, fetchFromGitHub, libX11, libXtst, pkg-config, xorgproto, libXi }:
stdenv.mkDerivation rec {
pname = "ksuperkey";
version = "0.4";
src = fetchFromGitHub {
owner = "hanschen";
repo = "ksuperkey";
rev = "v${version}";
sha256 = "1dvgf356fihfav8pjzww1q6vgd96c5h18dh8vpv022g9iipiwq8a";
};
makeFlags = [ "PREFIX=${placeholder "out"}" ];
nativeBuildInputs = [ pkg-config ];
buildInputs = [ libX11 libXtst xorgproto libXi ];
meta = with lib; {
description = "A tool to be able to bind the super key as a key rather than a modifier";
homepage = "https://github.com/hanschen/ksuperkey";
license = licenses.gpl3;
maintainers = [ ];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,35 @@
{ lib, stdenv, fetchFromGitLab, libGL, libX11 }:
stdenv.mkDerivation rec {
pname = "libstrangle";
version = "unstable-202202022";
buildInputs = [ libGL libX11 ];
src = fetchFromGitLab {
owner = "torkel104";
repo = pname;
rev = "0273e318e3b0cc759155db8729ad74266b74cb9b";
sha256 = "sha256-h10QA7m7hIQHq1g/vCYuZsFR2NVbtWBB46V6OWP5wgM=";
};
makeFlags = [ "prefix=" "DESTDIR=$(out)" ];
patches = [
./nixos.patch
];
postPatch = ''
substituteAllInPlace src/strangle.sh
substituteAllInPlace src/stranglevk.sh
'';
meta = with lib; {
homepage = "https://gitlab.com/torkel104/libstrangle";
description = "Frame rate limiter for Linux/OpenGL";
license = licenses.gpl3;
platforms = [ "x86_64-linux" ];
maintainers = with maintainers; [ aske ];
mainProgram = "strangle";
};
}

View file

@ -0,0 +1,43 @@
diff --git a/makefile b/makefile
--- a/makefile
+++ b/makefile
@@ -86,10 +86,6 @@ install-common:
install -m 0755 -D -T $(SOURCEDIR)/stranglevk.sh $(DESTDIR)$(bindir)/stranglevk
install -m 0644 -D -T $(SOURCEDIR)/vulkan/libstrangle_vk.json $(DESTDIR)$(datarootdir)/vulkan/implicit_layer.d/libstrangle_vk.json
-install-ld: ld
- install -m 0644 -D -T $(BUILDDIR)/libstrangle.conf $(DESTDIR)/etc/ld.so.conf.d/libstrangle.conf
- if [ -z "$(DESTDIR)" ]; then ldconfig; fi
-
install-32: 32-bit
install -m 0755 -D -T $(BUILDDIR)/libstrangle32.so $(DESTDIR)$(LIB32_PATH)/libstrangle.so
install -m 0755 -D -T $(BUILDDIR)/libstrangle32_nodlsym.so $(DESTDIR)$(LIB32_PATH)/libstrangle_nodlsym.so
@@ -109,8 +105,7 @@ install: \
all \
install-common \
install-32 \
- install-64 \
- install-ld
+ install-64
clean:
rm -f $(BUILDDIR)/libstrangle64.so
diff --git a/src/strangle.sh b/src/strangle.sh
--- a/src/strangle.sh
+++ b/src/strangle.sh
@@ -130,6 +130,5 @@ if [ "$STRANGLE_VKONLY" != "1" ]; then
fi
fi
-# Execute the strangled program under a clean environment
# pass through the FPS and overriden LD_PRELOAD environment variables
-exec env ENABLE_VK_LAYER_TORKEL104_libstrangle=1 LD_PRELOAD="${LD_PRELOAD}" "$@"
+ENABLE_VK_LAYER_TORKEL104_libstrangle=1 XDG_DATA_DIRS="${XDG_DATA_DIRS}${XDG_DATA_DIRS:+:}@out@/share" LD_LIBRARY_PATH="${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}@out@/lib/libstrangle/lib64:@out@/lib/libstrangle/lib32" LD_PRELOAD="${LD_PRELOAD}" exec "$@"
diff --git a/src/stranglevk.sh b/src/stranglevk.sh
--- a/src/stranglevk.sh
+++ b/src/stranglevk.sh
@@ -1,3 +1,3 @@
#!/bin/sh
-ENABLE_VK_LAYER_TORKEL104_libstrangle=1 STRANGLE_VKONLY=1 strangle "$@"
+ENABLE_VK_LAYER_TORKEL104_libstrangle=1 STRANGLE_VKONLY=1 @out@/bin/strangle "$@"

View file

@ -0,0 +1,24 @@
{ lib, stdenv, fetchFromGitHub, libxcb }:
stdenv.mkDerivation rec {
pname = "wmutils";
version = "1.4.1";
src = fetchFromGitHub {
owner = "pockata";
repo = "mmutils";
rev = "v${version}";
sha256 = "08wlb278m5lr218c87yqashk7farzny51ybl5h6j60i7pbpm01ml";
};
buildInputs = [ libxcb ];
installFlags = [ "PREFIX=$(out)" ];
meta = with lib; {
description = "A set of utilities for querying xrandr monitor information";
homepage = "https://github.com/pockata/mmutils";
license = licenses.isc;
platforms = platforms.unix;
};
}

View file

@ -0,0 +1,25 @@
{ lib, stdenv, fetchurl
, netcdf, xlibsWrapper, xorg, udunits, expat
}:
let
pname = "ncview";
version = "2.1.8";
in stdenv.mkDerivation {
name = "${pname}-${version}";
src = fetchurl {
url = "ftp://cirrus.ucsd.edu/pub/ncview/ncview-2.1.8.tar.gz";
sha256 = "1gliziyxil2fcz85hj6z0jq33avrxdcjs74d500lhxwvgd8drfp8";
};
buildInputs = [ netcdf xlibsWrapper xorg.libXaw udunits expat ];
meta = with lib; {
description = "Visual browser for netCDF format files";
homepage = "http://meteora.ucsd.edu/~pierce/ncview_home_page.html";
license = licenses.gpl3;
maintainers = with maintainers; [ jmettes ];
};
}

View file

@ -0,0 +1,33 @@
{ lib, stdenv, fetchurl, pkg-config, glib, gtkmm2 }:
stdenv.mkDerivation rec {
pname = "nitrogen";
version = "1.6.1";
src = fetchurl {
url = "http://projects.l3ib.org/nitrogen/files/${pname}-${version}.tar.gz";
sha256 = "0zc3fl1mbhq0iyndy4ysmy8vv5c7xwf54rbgamzfhfvsgdq160pl";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ glib gtkmm2 ];
patchPhase = ''
patchShebangs data/icon-theme-installer
'';
meta = {
description = "A wallpaper browser and setter for X11";
longDescription = ''
nitrogen is a lightweight utility that can set the root background on X11.
It operates independently of any desktop environment, and supports
multi-head with Xinerama. Wallpapers are browsable with a convenient GUI,
and settings are stored in a human-readable config file.
'';
homepage = "https://github.com/l3ib/nitrogen";
license = lib.licenses.gpl2;
platforms = lib.platforms.linux;
maintainers = [ lib.maintainers.auntie ];
};
}

View file

@ -0,0 +1,21 @@
{ lib, stdenv, fetchFromGitHub, libX11, libXext, autoconf }:
stdenv.mkDerivation rec {
version = "1.2";
pname = "numlockx";
src = fetchFromGitHub {
owner = "rg3";
repo = pname;
rev = "9159fd3c5717c595dadfcb33b380a85c88406185";
sha256 = "1w49fayhwzn5rx0z1q2lrvm7z8jrd34lgb89p853a024bixc3cf2";
};
buildInputs = [ libX11 libXext autoconf ];
meta = with lib; {
description = "Allows to start X with NumLock turned on";
license = licenses.mit;
platforms = platforms.all;
};
}

View file

@ -0,0 +1,63 @@
{ lib, stdenv, autoconf, automake, fetchFromGitHub, fetchpatch
, libgcc, libjpeg_turbo
, libpng, libtool, libxml2, pkg-config, which, xorg
, libtirpc
}:
stdenv.mkDerivation rec {
pname = "nx-libs";
version = "3.5.99.26";
src = fetchFromGitHub {
owner = "ArcticaProject";
repo = "nx-libs";
rev = version;
sha256 = "sha256-qVOdD85sBMxKYx1cSLAGKeODsKKAm9UPBmYzPBbBOzQ=";
};
patches = [
(fetchpatch {
name = "binutils-2.36.patch";
url = "https://github.com/ArcticaProject/nx-libs/commit/605a266911b50ababbb3f8a8b224efb42743379c.patch";
sha256 = "sha256-kk5ms3i0PrHL74I4OlsqDrdDcCJ0us03cQcBy4zjAoQ=";
})
];
nativeBuildInputs = [ autoconf automake libtool pkg-config which
xorg.gccmakedep xorg.imake ];
buildInputs = [ libgcc libjpeg_turbo libpng libxml2 xorg.fontutil
xorg.libXcomposite xorg.libXdamage xorg.libXdmcp xorg.libXext xorg.libXfont2
xorg.libXinerama xorg.libXpm xorg.libXrandr xorg.libXtst xorg.pixman
xorg.xkbcomp xorg.xkeyboardconfig libtirpc
];
NIX_CFLAGS_COMPILE = [ "-I${libtirpc.dev}/include/tirpc" ];
NIX_LDFLAGS = [ "-ltirpc" ];
postPatch = ''
patchShebangs .
find . -type f -name Makefile -exec sed -i 's|^\(SHELL:=\)/bin/bash$|\1${stdenv.shell}|g' {} \;
ln -s libNX_X11.so.6.3.0
'';
preConfigure = ''
# binutils 2.37 fix
# https://github.com/ArcticaProject/nx-libs/issues/1003
substituteInPlace nx-X11/config/cf/Imake.tmpl --replace "clq" "cq"
'';
PREFIX=""; # Don't install to $out/usr/local
installPhase = ''
make DESTDIR="$out" install
# See:
# - https://salsa.debian.org/debian-remote-team/nx-libs/blob/bcc152100617dc59156015a36603a15db530a64f/debian/rules#L66-72
# - https://github.com/ArcticaProject/nx-libs/issues/652
patchelf --remove-needed "libX11.so.6" $out/bin/nxagent
'';
meta = {
description = "NX X server based on Xnest";
homepage = "https://github.com/ArcticaProject/nx-libs";
license = lib.licenses.gpl2;
maintainers = with lib.maintainers; [ ];
platforms = lib.platforms.linux;
};
}

View file

@ -0,0 +1,44 @@
{ lib, stdenv, fetchgit, autoreconfHook, pkg-config, gtk3, openbox,
imlib2, libxml2, libstartup_notification, makeWrapper, libSM }:
stdenv.mkDerivation rec {
pname = "obconf";
version = "unstable-2015-02-13";
src = fetchgit {
url = "git://git.openbox.org/dana/obconf";
rev = "63ec47c5e295ad4f09d1df6d92afb7e10c3fec39";
sha256 = "sha256-qwm66VA/ueRMFtSUcrmuObNkz+KYgWRnmR7TnQwpxiE=";
};
nativeBuildInputs = [
autoreconfHook
makeWrapper
pkg-config
];
buildInputs = [
gtk3
imlib2
libSM
libstartup_notification
libxml2
openbox
];
postPatch = ''
substituteInPlace configure.ac --replace 2.0.4 ${version}
'';
postInstall = ''
wrapProgram $out/bin/obconf --prefix XDG_DATA_DIRS : ${openbox}/share/
'';
meta = {
description = "GUI configuration tool for openbox";
homepage = "http://openbox.org/wiki/ObConf";
license = lib.licenses.gpl2Plus;
maintainers = [ lib.maintainers.sfrijters ];
platforms = lib.platforms.linux;
};
}

View file

@ -0,0 +1,119 @@
{ lib
, buildDotnetModule
, fetchFromGitHub
, fetchurl
, dotnetCorePackages
, gtk3
, libX11
, libXrandr
, libappindicator
, libevdev
, libnotify
, udev
, copyDesktopItems
, makeDesktopItem
, nixosTests
, wrapGAppsHook
, dpkg
}:
buildDotnetModule rec {
pname = "OpenTabletDriver";
version = "0.6.0.4";
src = fetchFromGitHub {
owner = "OpenTabletDriver";
repo = "OpenTabletDriver";
rev = "v${version}";
sha256 = "sha256-VvxW8Ck+XC4nXSUyDhcbGoeSr5uSAZ66jtZNoADuVR8=";
};
debPkg = fetchurl {
url = "https://github.com/OpenTabletDriver/OpenTabletDriver/releases/download/v${version}/OpenTabletDriver.deb";
sha256 = "sha256-LJqH3+JckPF7S/1uBE2X81jxWg0MF9ff92Ei8WPEA2w=";
};
dotnetInstallFlags = [ "--framework=net6.0" ];
projectFile = [ "OpenTabletDriver.Console" "OpenTabletDriver.Daemon" "OpenTabletDriver.UX.Gtk" ];
nugetDeps = ./deps.nix;
executables = [ "OpenTabletDriver.Console" "OpenTabletDriver.Daemon" "OpenTabletDriver.UX.Gtk" ];
nativeBuildInputs = [
copyDesktopItems
wrapGAppsHook
dpkg
];
runtimeDeps = [
gtk3
libX11
libXrandr
libappindicator
libevdev
libnotify
udev
];
doCheck = true;
testProjectFile = "OpenTabletDriver.Tests/OpenTabletDriver.Tests.csproj";
disabledTests = [
# Require networking
"OpenTabletDriver.Tests.PluginRepositoryTest.ExpandRepositoryTarballFork"
"OpenTabletDriver.Tests.PluginRepositoryTest.ExpandRepositoryTarball"
# Require networking & unused in Linux build
"OpenTabletDriver.Tests.UpdaterTests.UpdaterBase_ProperlyChecks_Version_Async"
"OpenTabletDriver.Tests.UpdaterTests.Updater_PreventsUpdate_WhenAlreadyUpToDate_Async"
"OpenTabletDriver.Tests.UpdaterTests.Updater_AllowsReupdate_WhenInstallFailed_Async"
"OpenTabletDriver.Tests.UpdaterTests.Updater_HasUpdateReturnsFalse_During_UpdateInstall_Async"
"OpenTabletDriver.Tests.UpdaterTests.Updater_HasUpdateReturnsFalse_After_UpdateInstall_Async"
"OpenTabletDriver.Tests.UpdaterTests.Updater_Prevents_ConcurrentAndConsecutive_Updates_Async"
"OpenTabletDriver.Tests.UpdaterTests.Updater_ProperlyBackups_BinAndAppDataDirectory_Async"
# Intended only to be run in continuous integration, unnecessary for functionality
"OpenTabletDriver.Tests.ConfigurationTest.Configurations_DeviceIdentifier_IsNotConflicting"
# Depends on processor load
"OpenTabletDriver.Tests.TimerTests.TimerAccuracy"
];
postFixup = ''
# Give a more "*nix" name to the binaries
mv $out/bin/OpenTabletDriver.Console $out/bin/otd
mv $out/bin/OpenTabletDriver.Daemon $out/bin/otd-daemon
mv $out/bin/OpenTabletDriver.UX.Gtk $out/bin/otd-gui
install -Dm644 $src/OpenTabletDriver.UX/Assets/otd.png -t $out/share/pixmaps
# TODO: Ideally this should be build from OpenTabletDriver/OpenTabletDriver-udev instead
dpkg-deb --fsys-tarfile ${debPkg} | tar xf - ./usr/lib/udev/rules.d/99-opentabletdriver.rules
install -Dm644 ./usr/lib/udev/rules.d/99-opentabletdriver.rules -t $out/lib/udev/rules.d
'';
desktopItems = [
(makeDesktopItem {
desktopName = "OpenTabletDriver";
name = "OpenTabletDriver";
exec = "otd-gui";
icon = "otd";
comment = meta.description;
categories = [ "Utility" ];
})
];
passthru = {
updateScript = ./update.sh;
tests = {
otd-runs = nixosTests.opentabletdriver;
};
};
meta = with lib; {
description = "Open source, cross-platform, user-mode tablet driver";
homepage = "https://github.com/OpenTabletDriver/OpenTabletDriver";
license = licenses.lgpl3Plus;
maintainers = with maintainers; [ thiagokokada ];
platforms = platforms.linux;
mainProgram = "otd";
};
}

196
pkgs/tools/X11/opentabletdriver/deps.nix generated Normal file
View file

@ -0,0 +1,196 @@
{ fetchNuGet }: [
(fetchNuGet { pname = "AtkSharp"; version = "3.24.24.34"; sha256 = "1jn1vgi9xm0jp7769k6sbdi8d273kigjrsh93i6s4c03hqxv7cqs"; })
(fetchNuGet { pname = "CairoSharp"; version = "3.24.24.34"; sha256 = "0pydn1k0cam1gclg9sc1sbnmbyzh28qlc5qanyxcylwghink3kgz"; })
(fetchNuGet { pname = "Castle.Core"; version = "4.4.0"; sha256 = "0rpcbmyhckvlvp6vbzpj03c1gqz56ixc6f15vgmxmyf1g40c24pf"; })
(fetchNuGet { pname = "coverlet.collector"; version = "3.0.2"; sha256 = "1xf6z6izmsl4g8w3z1wbp4pa8f8qsf6sil4mf1c9fb22hq8c5hkg"; })
(fetchNuGet { pname = "Eto.Forms"; version = "2.5.10"; sha256 = "1d71wglk4ixfqfbm6sxmj753x5iwbar8i9zzjy3bh64fy1dn8lz7"; })
(fetchNuGet { pname = "Eto.Forms"; version = "2.5.11"; sha256 = "0h86jc19wy3ssj7pb34w1h02v92mg29gdipszwjs3y15piy66z3s"; })
(fetchNuGet { pname = "Eto.Platform.Gtk"; version = "2.5.11"; sha256 = "1s9njz7l9zghrbzli7lbiav5ss3glqf17npj07f3jldd933nb95j"; })
(fetchNuGet { pname = "GdkSharp"; version = "3.24.24.34"; sha256 = "0r0x0yib7chwsyrbpvicrfwldwqx5lyqq4p86zaxpmzd6zdaj0x5"; })
(fetchNuGet { pname = "GioSharp"; version = "3.24.24.34"; sha256 = "02hxvgjd4w9jpzbkk7qf9q9bkvyp5hfzwxfqp10vg5lpl9yl3xpx"; })
(fetchNuGet { pname = "GLibSharp"; version = "3.24.24.34"; sha256 = "0kvp033fgdwc8p2abfp5z9pzq66cvwbnjfvr4v4bkpy5s5h181kq"; })
(fetchNuGet { pname = "GtkSharp"; version = "3.24.24.34"; sha256 = "0028hzmmqyfx87qqmaf9cgb5psn7gkbmqvixcid67x1d6mzxjicb"; })
(fetchNuGet { pname = "HidSharpCore"; version = "1.2.1.1"; sha256 = "1zkndglmz0s8rblfhnqcvv90rkq2i7lf4bc380g7z8h1avf2ikll"; })
(fetchNuGet { pname = "MessagePack"; version = "2.1.194"; sha256 = "1v2gyd9sd6hppfhlzngmzzhnpr39b95rwrqq0r9zzp480b6vzaj0"; })
(fetchNuGet { pname = "MessagePack.Annotations"; version = "2.1.194"; sha256 = "1jkhq3hiy4brvzsywl4p4jb9jrnzs3vmgr3s8fxpb1dzafadw8b0"; })
(fetchNuGet { pname = "Microsoft.AspNetCore.App.Ref"; version = "5.0.0"; sha256 = "0d7sjr89zwq0wxirf8la05hfalv9nhvlczg1c7a508k8aw79jvfg"; })
(fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "1.1.1"; sha256 = "0a1ahssqds2ympr7s4xcxv5y8jgxs7ahd6ah6fbgglj4rki1f1vw"; })
(fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "16.9.4"; sha256 = "11wiyy3ykgk1sa9amy3lgcsg2v7d1sz59ggw647vx8ibpjxijjpp"; })
(fetchNuGet { pname = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; })
(fetchNuGet { pname = "Microsoft.CSharp"; version = "4.4.1"; sha256 = "0z6d1i6xcf0c00z6rs75rgw4ncs9q2m8amasf6mmbf40fm02ry7g"; })
(fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "6.0.0-rc.1.21451.13"; sha256 = "0r6945jq7c2f1wjifq514zvngicndjqfnsjya6hqw0yzah0jr56c"; })
(fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "6.0.0-rc.1.21451.13"; sha256 = "11dg16x6g0gssb143qpghxz1s41himvhr7yhjwxs9hacx4ij2dm1"; })
(fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "16.9.4"; sha256 = "1jdx05zmrqj1s7xfgn3wgy10qb5cl1n1jcj5kz43zvkw1amc7ra4"; })
(fetchNuGet { pname = "Microsoft.NETCore.App.Ref"; version = "5.0.0"; sha256 = "1p62khf9zk23lh91lvz7plv3g1nzmm3b5szqrcm6mb8w3sjk03wi"; })
(fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
(fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
(fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.1"; sha256 = "164wycgng4mi9zqi2pnsf1pq6gccbqvw6ib916mqizgjmd8f44pj"; })
(fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "3.0.0"; sha256 = "1bk8r4r3ihmi6322jmcag14jmw11mjqys202azqjzglcx59pxh51"; })
(fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
(fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
(fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "16.9.4"; sha256 = "1jizkbrnm4pv60zch29ki7gj8m7j5whk141x9cwx4kwsd6cfzwi6"; })
(fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "16.9.4"; sha256 = "14110qzmypr72ywvx3npq7mf4n0gvdr4536v91z1xbapms65am6x"; })
(fetchNuGet { pname = "Microsoft.VisualStudio.Threading"; version = "16.7.56"; sha256 = "13x0xrsjxd86clf9cjjwmpzlyp8pkrf13riya7igs8zy93zw2qap"; })
(fetchNuGet { pname = "Microsoft.VisualStudio.Threading.Analyzers"; version = "16.7.56"; sha256 = "04v9df0k7bsc0rzgkw4mnvi43pdrh42vk6xdcwn9m6im33m0nnz2"; })
(fetchNuGet { pname = "Microsoft.VisualStudio.Validation"; version = "15.5.31"; sha256 = "1ah99rn922qa0sd2k3h64m324f2r32pw8cn4cfihgvwx4qdrpmgw"; })
(fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
(fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "4.6.0"; sha256 = "0i4y782yrqqyx85pg597m20gm0v126w0j9ddk5z7xb3crx4z9f2s"; })
(fetchNuGet { pname = "Moq"; version = "4.16.1"; sha256 = "1m2gwbx0gsy84rl9c3hgdaw9gz8d08ffg19nwg0idsdqmmiq887l"; })
(fetchNuGet { pname = "Nerdbank.Streams"; version = "2.6.77"; sha256 = "13dnfwxa8syx7vfjmd5pcrqz31k0q8y3mmh6yz6bmljhjri65q5c"; })
(fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; })
(fetchNuGet { pname = "Newtonsoft.Json"; version = "12.0.2"; sha256 = "0w2fbji1smd2y7x25qqibf1qrznmv4s6s0jvrbvr6alb7mfyqvh5"; })
(fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; })
(fetchNuGet { pname = "Newtonsoft.Json"; version = "9.0.1"; sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r"; })
(fetchNuGet { pname = "NuGet.Frameworks"; version = "5.0.0"; sha256 = "18ijvmj13cwjdrrm52c8fpq021531zaz4mj4b4zapxaqzzxf2qjr"; })
(fetchNuGet { pname = "Octokit"; version = "0.50.0"; sha256 = "1ignj5i6a1c19qqrw00wlr9fdjmwrxkxz7gdxj0x653w84gbv7qq"; })
(fetchNuGet { pname = "PangoSharp"; version = "3.24.24.34"; sha256 = "1r0h14cklglfpv1lhv93cxmzi2w7d5s03gzpq3j5dmrz43flg9zw"; })
(fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
(fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0rwpqngkqiapqc5c2cpkj7idhngrgss5qpnqg0yh40mbyflcxf8i"; })
(fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
(fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1n06gxwlinhs0w7s8a94r1q3lwqzvynxwd3mp10ws9bg6gck8n4r"; })
(fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
(fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0404wqrc7f2yc0wxv71y3nnybvqx8v4j9d47hlscxy759a525mc3"; })
(fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
(fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
(fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
(fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; })
(fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
(fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0zy5r25jppz48i2bkg8b9lfig24xixg6nm3xyr1379zdnqnpm8f6"; })
(fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
(fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "096ch4n4s8k82xga80lfmpimpzahd2ip1mgwdqgar0ywbbl6x438"; })
(fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
(fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1dm8fifl7rf1gy7lnwln78ch4rw54g0pl5g1c189vawavll7p6rj"; })
(fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; })
(fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
(fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1m9z1k9kzva9n9kwinqxl97x2vgl79qhqjlv17k9s2ymcyv2bwr6"; })
(fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
(fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1cpx56mcfxz7cpn57wvj18sjisvzq8b5vd9rw16ihd2i6mcp3wa1"; })
(fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
(fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "15gsm1a8jdmgmf8j5v1slfz8ks124nfdhk2vxs2rw3asrxalg8hi"; })
(fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
(fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0q0n5q1r1wnqmr5i5idsrd9ywl33k0js4pngkwq9p368mbxp8x1w"; })
(fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
(fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1x0g58pbpjrmj2x2qw17rdwwnrcl0wvim2hdwz48lixvwvp22n9c"; })
(fetchNuGet { pname = "SharpZipLib"; version = "1.3.3"; sha256 = "1gij11wfj1mqm10631cjpnhzw882bnzx699jzwhdqakxm1610q8x"; })
(fetchNuGet { pname = "StreamJsonRpc"; version = "2.6.121"; sha256 = "0xzvpk17w2skndzdg47j7gkrrvw6521db4mv8lc3v8hm97vs9m76"; })
(fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
(fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
(fetchNuGet { pname = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; })
(fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
(fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
(fetchNuGet { pname = "System.Collections.Immutable"; version = "1.7.1"; sha256 = "1nh4nlxfc7lbnbl86wwk1a3jwl6myz5j6hvgh5sp4krim9901hsq"; })
(fetchNuGet { pname = "System.Collections.NonGeneric"; version = "4.3.0"; sha256 = "07q3k0hf3mrcjzwj8fwk6gv3n51cb513w4mgkfxzm3i37sc9kz7k"; })
(fetchNuGet { pname = "System.Collections.Specialized"; version = "4.3.0"; sha256 = "1sdwkma4f6j85m3dpb53v9vcgd0zyc9jb33f8g63byvijcj39n20"; })
(fetchNuGet { pname = "System.CommandLine"; version = "2.0.0-beta1.20253.1"; sha256 = "16saf1fm9q80bb624fkqz0ksrwpnbw9617d7xg3jib7a2wgagm2r"; })
(fetchNuGet { pname = "System.ComponentModel"; version = "4.3.0"; sha256 = "0986b10ww3nshy30x9sjyzm0jx339dkjxjj3401r3q0f6fx2wkcb"; })
(fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "4.7.0"; sha256 = "06x1m46ddxj0ng28d7gry9gjkqdg2kp89jyf480g5gznyybbs49z"; })
(fetchNuGet { pname = "System.ComponentModel.Primitives"; version = "4.3.0"; sha256 = "1svfmcmgs0w0z9xdw2f2ps05rdxmkxxhf0l17xk9l1l8xfahkqr0"; })
(fetchNuGet { pname = "System.ComponentModel.TypeConverter"; version = "4.3.0"; sha256 = "17ng0p7v3nbrg3kycz10aqrrlw4lz9hzhws09pfh8gkwicyy481x"; })
(fetchNuGet { pname = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; })
(fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11"; sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz"; })
(fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
(fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
(fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; })
(fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
(fetchNuGet { pname = "System.Diagnostics.TraceSource"; version = "4.3.0"; sha256 = "1kyw4d7dpjczhw6634nrmg7yyyzq72k75x38y0l0nwhigdlp1766"; })
(fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
(fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.0.11"; sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9"; })
(fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
(fetchNuGet { pname = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; })
(fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
(fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
(fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
(fetchNuGet { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
(fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
(fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
(fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.3.0"; sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar"; })
(fetchNuGet { pname = "System.IO.FileSystem"; version = "4.0.1"; sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1"; })
(fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
(fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; })
(fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
(fetchNuGet { pname = "System.IO.Pipelines"; version = "4.7.2"; sha256 = "16v4qaypm72cfsfqr8z3k6yrpzn0m3apgkh6aljfwpycdk150sf9"; })
(fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
(fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
(fetchNuGet { pname = "System.Linq.Expressions"; version = "4.1.0"; sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg"; })
(fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
(fetchNuGet { pname = "System.Memory"; version = "4.5.3"; sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a"; })
(fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
(fetchNuGet { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; })
(fetchNuGet { pname = "System.Net.Http"; version = "4.3.4"; sha256 = "0kdp31b8819v88l719j6my0yas6myv9d1viql3qz5577mv819jhl"; })
(fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
(fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
(fetchNuGet { pname = "System.Net.WebSockets"; version = "4.3.0"; sha256 = "1gfj800078kggcgl0xyl00a6y5k4wwh2k2qm69rjy22wbmq7fy4p"; })
(fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
(fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
(fetchNuGet { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; })
(fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
(fetchNuGet { pname = "System.Reflection.Emit"; version = "4.0.1"; sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp"; })
(fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
(fetchNuGet { pname = "System.Reflection.Emit"; version = "4.7.0"; sha256 = "121l1z2ypwg02yz84dy6gr82phpys0njk7yask3sihgy214w43qp"; })
(fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.0.1"; sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0"; })
(fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
(fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.0.1"; sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr"; })
(fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
(fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.6.0"; sha256 = "0hry2k6b7kicg4zxnq0hhn0ys52711pxy7l9v5sp7gvp9cicwpgp"; })
(fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1"; sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn"; })
(fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
(fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; })
(fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; })
(fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
(fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.1.0"; sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7"; })
(fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
(fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; })
(fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
(fetchNuGet { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; })
(fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
(fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.2"; sha256 = "1vz4275fjij8inf31np78hw50al8nqkngk04p3xv5n4fcmf1grgi"; })
(fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.7.1"; sha256 = "119br3pd85lq8zcgh4f60jzmv1g976q1kdgi3hvqdlhfbw6siz2j"; })
(fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0-rc.1.21451.13"; sha256 = "0v5bc80p35jj5b5xdgsn5r1v4w68gqz0sahi214rprrrlr3sl206"; })
(fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
(fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
(fetchNuGet { pname = "System.Runtime.Handles"; version = "4.0.1"; sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g"; })
(fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
(fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; })
(fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
(fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
(fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
(fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.1.1"; sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k"; })
(fetchNuGet { pname = "System.Security.AccessControl"; version = "4.6.0"; sha256 = "1wl1dyghi0qhpap1vgfhg2ybdyyhy9vc2a7dpm1xb30vfgmlkjmf"; })
(fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
(fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
(fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
(fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
(fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
(fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
(fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
(fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.6.0"; sha256 = "1jmfzfz1n8hp63s5lja5xxpzkinbp6g59l3km9h8avjiisdrg5wm"; })
(fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
(fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
(fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; })
(fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
(fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.1.0"; sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7"; })
(fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
(fetchNuGet { pname = "System.Threading"; version = "4.0.11"; sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls"; })
(fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
(fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
(fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
(fetchNuGet { pname = "System.Threading.Tasks.Dataflow"; version = "4.11.1"; sha256 = "09fbfsiay1xcbpvnq2j38b6mb2scvf0s8mpn78bcqsldidg7k2vw"; })
(fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0"; sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr"; })
(fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
(fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
(fetchNuGet { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; })
(fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; })
(fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; })
(fetchNuGet { pname = "System.Xml.XDocument"; version = "4.0.11"; sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18"; })
(fetchNuGet { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
(fetchNuGet { pname = "System.Xml.XmlDocument"; version = "4.3.0"; sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi"; })
(fetchNuGet { pname = "WaylandNET"; version = "0.2.0"; sha256 = "1qjpvra08vdqdw4j1gamz6451x5sd5r1j86lsvrl8akq4nymfr8k"; })
(fetchNuGet { pname = "xunit"; version = "2.4.1"; sha256 = "0xf3kaywpg15flqaqfgywqyychzk15kz0kz34j21rcv78q9ywq20"; })
(fetchNuGet { pname = "xunit.abstractions"; version = "2.0.3"; sha256 = "00wl8qksgkxld76fgir3ycc5rjqv1sqds6x8yx40927q5py74gfh"; })
(fetchNuGet { pname = "xunit.analyzers"; version = "0.10.0"; sha256 = "15n02q3akyqbvkp8nq75a8rd66d4ax0rx8fhdcn8j78pi235jm7j"; })
(fetchNuGet { pname = "xunit.assert"; version = "2.4.1"; sha256 = "1imynzh80wxq2rp9sc4gxs4x1nriil88f72ilhj5q0m44qqmqpc6"; })
(fetchNuGet { pname = "xunit.core"; version = "2.4.1"; sha256 = "1nnb3j4kzmycaw1g76ii4rfqkvg6l8gqh18falwp8g28h802019a"; })
(fetchNuGet { pname = "xunit.extensibility.core"; version = "2.4.1"; sha256 = "103qsijmnip2pnbhciqyk2jyhdm6snindg5z2s57kqf5pcx9a050"; })
(fetchNuGet { pname = "xunit.extensibility.execution"; version = "2.4.1"; sha256 = "1pbilxh1gp2ywm5idfl0klhl4gb16j86ib4x83p8raql1dv88qia"; })
(fetchNuGet { pname = "xunit.runner.visualstudio"; version = "2.4.3"; sha256 = "0j1d0rbcm7pp6dypi61sjxp8l22sv261252z55b243l39jgv2rp3"; })
]

View file

@ -0,0 +1,42 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl gnused jq common-updater-scripts nuget-to-nix dotnet-sdk_6 dotnet-sdk_5
set -eo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")"
deps_file="$(realpath "./deps.nix")"
new_version="$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} -s "https://api.github.com/repos/OpenTabletDriver/OpenTabletDriver/releases" | jq -r 'map(select(.prerelease == false)) | .[0].tag_name' | cut -c2-)"
old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
if [[ "$new_version" == "$old_version" ]]; then
echo "Already up to date!"
[[ "${1}" != "--force" ]] && exit 0
fi
# Updating the hash of deb package manually since there seems to be no way to do it automatically
oldDebPkgUrl="https://github.com/OpenTabletDriver/OpenTabletDriver/releases/download/v${old_version}/OpenTabletDriver.deb";
newDebPkgUrl="https://github.com/OpenTabletDriver/OpenTabletDriver/releases/download/v${new_version}/OpenTabletDriver.deb";
oldDebSha256=$(nix-prefetch-url "$oldDebPkgUrl")
newDebSha256=$(nix-prefetch-url "$newDebPkgUrl")
echo "oldDebSha256: $oldDebSha256 newDebSha256: $newDebSha256"
sed -i ./default.nix -re "s|\"$oldDebSha256\"|\"$newDebSha256\"|"
pushd ../../../..
update-source-version opentabletdriver "$new_version"
store_src="$(nix-build -A opentabletdriver.src --no-out-link)"
src="$(mktemp -d /tmp/opentabletdriver-src.XXX)"
cp -rT "$store_src" "$src"
chmod -R +w "$src"
pushd "$src"
trap "rm -rf $src" EXIT
export DOTNET_NOLOGO=1
export DOTNET_CLI_TELEMETRY_OPTOUT=1
mkdir ./nuget_pkgs
for project in OpenTabletDriver.{Console,Daemon,UX.Gtk,Tests}; do
dotnet restore $project --packages ./nuget_pkgs
done
nuget-to-nix ./nuget_pkgs > "$deps_file"

View file

@ -0,0 +1,34 @@
# For a 64bit + 32bit system the LD_LIBRARY_PATH must contain both the 32bit and 64bit primus
# libraries. Providing a different primusrun for each architecture will not work as expected. EG:
# Using steam under wine can involve both 32bit and 64bit process. All of which inherit the
# same LD_LIBRARY_PATH.
# Other distributions do the same.
{ stdenv
, stdenv_i686
, lib
, primusLib
, writeScriptBin
, runtimeShell
, primusLib_i686 ? null
, useNvidia ? true
}:
let
# We override stdenv in case we need different ABI for libGL
primusLib_ = primusLib.override { inherit stdenv; };
primusLib_i686_ = primusLib_i686.override { stdenv = stdenv_i686; };
primus = if useNvidia then primusLib_ else primusLib_.override { nvidia_x11 = null; };
primus_i686 = if useNvidia then primusLib_i686_ else primusLib_i686_.override { nvidia_x11 = null; };
ldPath = lib.makeLibraryPath (lib.filter (x: x != null) (
[ primus primus.glvnd ]
++ lib.optionals (primusLib_i686 != null) [ primus_i686 primus_i686.glvnd ]
));
in writeScriptBin "primusrun" ''
#!${runtimeShell}
export LD_LIBRARY_PATH=${ldPath}''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH
# https://bugs.launchpad.net/ubuntu/+source/bumblebee/+bug/1758243
export __GLVND_DISALLOW_PATCHING=1
exec "$@"
''

View file

@ -0,0 +1,60 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, libX11
, libGL
, mesa
, nvidia_x11 ? null
, libglvnd
}:
let
aPackage =
if nvidia_x11 == null then libGL
else if nvidia_x11.useGLVND then libglvnd
else nvidia_x11;
in
stdenv.mkDerivation {
pname = "primus-lib";
version = "unstable-2015-04-28";
src = fetchFromGitHub {
owner = "amonakov";
repo = "primus";
rev = "d1afbf6fce2778c0751eddf19db9882e04f18bfd";
sha256 = "118jm57ccawskb8vjq3a9dpa2gh72nxzvx2zk7zknpy0arrdznj1";
};
patches = [
# Bump buffer size for long library paths.
(fetchpatch {
url = "https://github.com/abbradar/primus/commit/2f429e232581c556df4f4bf210aee8a0c99c60b7.patch";
sha256 = "1da6ynz7r7x98495i329sf821308j1rpy8prcdraqahz7p4c89nc";
})
];
buildInputs = [ libX11 libGL ];
makeFlags = [
"LIBDIR=$(out)/lib"
"PRIMUS_libGLa=${aPackage}/lib/libGL.so"
"PRIMUS_libGLd=${libGL}/lib/libGL.so"
"PRIMUS_LOAD_GLOBAL=${mesa}/lib/libglapi.so"
];
installPhase = ''
ln -s $out/lib/libGL.so.1 $out/lib/libGL.so
'';
passthru.glvnd = if nvidia_x11 != null && nvidia_x11.useGLVND then nvidia_x11 else null;
meta = with lib; {
description = "Low-overhead client-side GPU offloading";
homepage = "https://github.com/amonakov/primus";
platforms = [ "i686-linux" "x86_64-linux" ];
license = licenses.bsd2;
maintainers = with maintainers; [ abbradar ];
};
}

View file

@ -0,0 +1,26 @@
{ lib, stdenv, fetchurl, perl, xorgproto, libX11 }:
stdenv.mkDerivation rec {
pname = "ratmen";
version = "2.2.3";
src = fetchurl {
url = "http://www.update.uu.se/~zrajm/programs/ratmen/ratmen-${version}.tar.gz";
sha256 = "0gnfqhnch9x8jhr87gvdjcp1wsqhchfjilpnqcwx5j0nlqyz6wi6";
};
buildInputs = [
perl
xorgproto
libX11
];
makeFlags = [
"PREFIX=$(out)"
];
meta = with lib; {
description = "A minimalistic X11 menu creator";
license = licenses.free; # 9menu derivative with 9menu license
maintainers = with maintainers; [ raskin ];
platforms = platforms.linux;
homepage = "http://www.update.uu.se/~zrajm/programs/";
downloadPage = "http://www.update.uu.se/~zrajm/programs/ratmen/";
};
}

View file

@ -0,0 +1,30 @@
{ lib, stdenv, fetchFromGitHub, makeWrapper, bc, xorgserver, xpra, xrandr }:
stdenv.mkDerivation {
version = "unstable-2018-06-03";
pname = "run-scaled";
src = fetchFromGitHub {
owner = "kaueraal";
repo = "run_scaled";
rev = "fa71b3c17e627a96ff707ad69f1def5361f2245c";
sha256 = "1ma4ax7ydq4xvyzrc4zapihmf7v3d9zl9mbi8bgpps7nlgz544ys";
};
nativeBuildInputs = [ makeWrapper ];
installPhase = ''
mkdir -p $out/bin
cp run_scaled $out/bin
wrapProgram $out/bin/run_scaled --prefix PATH ":" \
${lib.makeBinPath [ bc xorgserver xpra xrandr ]}
'';
meta = with lib; {
description = "Run an X application scaled via xpra";
homepage = "https://github.com/kaueraal/run_scaled";
maintainers = [ maintainers.snaar ];
license = licenses.bsd3;
platforms = platforms.unix;
};
}

View file

@ -0,0 +1,35 @@
{ lib, stdenv, fetchurl, pkg-config, libX11 }:
stdenv.mkDerivation {
pname = "runningx";
version = "1.0";
src = fetchurl {
url = "http://www.fiction.net/blong/programs/mutt/autoview/RunningX.c";
sha256 = "1mikkhrx6jsx716041qdy3nwjac08pxxvxyq2yablm8zg9hrip0d";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ libX11 ];
dontUnpack = true;
buildPhase = ''
cc -O2 -o RunningX $(pkg-config --cflags --libs x11) $src
'';
installPhase = ''
mkdir -p "$out"/bin
cp -vai RunningX "$out/bin"
'';
meta = {
homepage = "http://www.fiction.net/blong/programs/mutt/";
description = "A program for testing if X is running";
license = lib.licenses.free;
platforms = lib.platforms.unix;
maintainers = [ lib.maintainers.romildo ];
mainProgram = "RunningX";
};
}

View file

@ -0,0 +1,26 @@
{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, gtk3 }:
stdenv.mkDerivation rec {
pname = "screen-message";
version = "0.26";
src = fetchurl {
url = "mirror://debian/pool/main/s/screen-message/screen-message_${version}.orig.tar.gz";
sha256 = "sha256-vBKnuXOEQZDACmlNP9wjJ3NbIdixIx7I72a6Nj6pjzc=";
};
nativeBuildInputs = [ autoreconfHook pkg-config ];
buildInputs = [ gtk3 ];
# screen-message installs its binary in $(prefix)/games per default
makeFlags = [ "execgamesdir=$(out)/bin" ];
meta = {
homepage = "https://www.joachim-breitner.de/en/projects#screen-message";
description = "Displays a short text fullscreen in an X11 window";
license = lib.licenses.gpl2Plus;
maintainers = [ lib.maintainers.fpletz ];
mainProgram = "sm";
platforms = lib.platforms.unix;
};
}

View file

@ -0,0 +1,27 @@
{ lib, stdenv, fetchzip, libX11, libXrandr, xorgproto }:
stdenv.mkDerivation rec {
pname = "sct";
version = "0.5";
src = fetchzip {
url = "https://www.umaxx.net/dl/sct-0.5.tar.gz";
sha256 = "sha256-nyYcdnCq8KcSUpc0HPCGzJI6NNrrTJLAHqPawfwPR/Q=";
};
buildInputs = [ libX11 libXrandr xorgproto ];
preInstall = ''
mkdir -p $out/bin $out/share/man/man1
'';
makeFlags = [ "PREFIX=$(out)" ];
meta = with lib; {
homepage = "https://www.umaxx.net/";
description = "A minimal utility to set display colour temperature";
maintainers = with maintainers; [ raskin somasis ];
license = licenses.publicDomain;
platforms = with platforms; linux ++ freebsd ++ openbsd;
};
}

View file

@ -0,0 +1,39 @@
{ lib, stdenv, fetchFromGitHub, libX11, imlib2, pkg-config, fetchpatch
, enableXinerama ? true, libXinerama
}:
stdenv.mkDerivation rec {
version = "2.0.2";
pname = "setroot";
src = fetchFromGitHub {
owner = "ttzhou";
repo = "setroot";
rev = "v${version}";
sha256 = "0w95828v0splk7bj5kfacp4pq6wxpyamvyjmahyvn5hc3ycq21mq";
};
patches = [
(fetchpatch {
url = "https://github.com/ttzhou/setroot/commit/d8ff8edd7d7594d276d741186bf9ccf0bce30277.patch";
sha256 = "sha256-e0iMSpiOmTOpQnp599fjH2UCPU4Oq1VKXcVypVoR9hw=";
})
];
nativeBuildInputs = [ pkg-config ];
buildInputs = [ libX11 imlib2 ]
++ lib.optionals enableXinerama [ libXinerama ];
buildFlags = [ (if enableXinerama then "xinerama=1" else "xinerama=0") ] ;
installFlags = [ "PREFIX=$(out)" ];
meta = with lib; {
description = "Simple X background setter inspired by imlibsetroot and feh";
homepage = "https://github.com/ttzhou/setroot";
license = licenses.gpl3Plus;
maintainers = [ maintainers.vyp ];
platforms = platforms.unix;
};
}

View file

@ -0,0 +1,46 @@
{ lib
, stdenv
, fetchFromGitHub
, xorgproto
, libX11
, libXft
, libXcomposite
, libXdamage
, libXext
, libXinerama
, libjpeg
, giflib
, pkg-config
}:
stdenv.mkDerivation rec {
pname = "skippy-xd";
version = "unstable-2015-03-01";
src = fetchFromGitHub {
owner = "richardgv";
repo = "skippy-xd";
rev = "397216ca67074c71314f5e9a6e3f1710ccabc29e";
sha256 = "sha256-iP6g3iS1aPPkauBLHbgZH/l+TXbWyIJ2TmbrSiNTkn0=";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [
xorgproto
libX11
libXft
libXcomposite
libXdamage
libXext
libXinerama
libjpeg
giflib
];
makeFlags = [ "PREFIX=$(out)" ];
preInstall = ''
sed -e "s@/etc/xdg@$out&@" -i Makefile
'';
meta = with lib; {
description = "Expose-style compositing-based standalone window switcher";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ raskin ];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,31 @@
{ lib, stdenv
, fetchFromGitHub
, libX11
, libXrandr
, libXinerama
}:
stdenv.mkDerivation rec {
pname = "srandrd";
version = "0.6.0";
src = fetchFromGitHub {
owner = "jceb";
repo = pname;
rev = "v${version}";
sha256 = "07r1ck2ijj30n19ylndgw75ly9k3815kj9inpxblfnjpwbbw6ic0";
};
buildInputs = [ libX11 libXrandr libXinerama ];
makeFlags = [ "PREFIX=$(out)" ];
meta = with lib; {
homepage = "https://github.com/jceb/srandrd";
description = "Simple randr daemon";
license = licenses.mit;
platforms = platforms.linux;
maintainers = [ maintainers.utdemir ];
};
}

View file

@ -0,0 +1,27 @@
{ lib, stdenv, fetchurl, libX11 }:
stdenv.mkDerivation rec {
version = "0.2";
pname = "sselp";
src = fetchurl {
url = "https://dl.suckless.org/tools/${pname}-${version}.tar.gz";
sha256 = "08mqp00lrh1chdrbs18qr0xv63h866lkmfj87kfscwdm1vn9a3yd";
};
buildInputs = [ libX11 ];
patchPhase = ''
sed -i "s@/usr/local@$out@g" config.mk
sed -i "s@/usr/X11R6/include@${libX11}/include@g" config.mk
sed -i "s@/usr/X11R6/lib@${libX11}/lib@g" config.mk
'';
meta = {
homepage = "https://tools.suckless.org/sselp";
description = "Prints the X selection to stdout, useful in scripts";
license = lib.licenses.mit;
maintainers = [lib.maintainers.magnetophon ];
platforms = lib.platforms.linux;
};
}

View file

@ -0,0 +1,30 @@
{ coreutils, fetchFromGitHub, lib, makeWrapper, stdenv, util-linux, xauth, xorgserver }:
stdenv.mkDerivation rec {
pname = "sx";
version = "2.1.7";
src = fetchFromGitHub {
owner = "earnestly";
repo = pname;
rev = version;
sha256 = "0xv15m30nhcknasqiybj5wwf7l91q4a4jf6xind8x5x00c6br6nl";
};
nativeBuildInputs = [ makeWrapper ];
makeFlags = [ "PREFIX=$(out)" ];
postInstall = ''
wrapProgram $out/bin/sx \
--prefix PATH : ${lib.makeBinPath [ coreutils util-linux xorgserver xauth ]}
'';
meta = with lib; {
description = "Simple alternative to both xinit and startx for starting a Xorg server";
homepage = "https://github.com/earnestly/sx";
license = licenses.mit;
platforms = platforms.linux;
maintainers = with maintainers; [ figsoda ];
};
}

View file

@ -0,0 +1,22 @@
{ lib, stdenv, fetchurl, pkg-config, libvdpau }:
stdenv.mkDerivation rec {
pname = "vdpauinfo";
version = "1.3";
src = fetchurl {
url = "https://gitlab.freedesktop.org/vdpau/vdpauinfo/uploads/6fa9718c507ef0fb6966170ef55344bf/${pname}-${version}.tar.gz";
sha256 = "0s6jdadnycyd1agsnfx7hrf17hmipasx1fpmppd4m1z6i9sp1i6g";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ libvdpau ];
meta = with lib; {
homepage = "https://people.freedesktop.org/~aplattner/vdpau/";
description = "Tool to query the Video Decode and Presentation API for Unix (VDPAU) abilities of the system";
license = licenses.mit; # expat version
platforms = platforms.unix;
maintainers = [ maintainers.vcunat ];
};
}

View file

@ -0,0 +1,25 @@
{ stdenv, lib
, virtualglLib
, virtualglLib_i686 ? null
}:
stdenv.mkDerivation {
pname = "virtualgl";
version = lib.getVersion virtualglLib;
paths = [ virtualglLib ];
buildCommand = ''
mkdir -p $out/bin
for i in ${virtualglLib}/bin/* ${virtualglLib}/bin/.vglrun*; do
ln -s "$i" $out/bin
done
'' + lib.optionalString (virtualglLib_i686 != null) ''
ln -sf ${virtualglLib_i686}/bin/.vglrun.vars32 $out/bin
'';
meta = {
platforms = lib.platforms.linux;
inherit (virtualglLib.meta) license;
};
}

View file

@ -0,0 +1,41 @@
{ lib, stdenv, fetchurl, cmake
, libGL, libGLU, libXv, libXtst, libXi, libjpeg_turbo, fltk
, xorg
, opencl-headers, opencl-clhpp, ocl-icd
}:
stdenv.mkDerivation rec {
pname = "virtualgl-lib";
version = "2.6.5";
src = fetchurl {
url = "mirror://sourceforge/virtualgl/VirtualGL-${version}.tar.gz";
sha256 = "1giin3jmcs6y616bb44bpz30frsmj9f8pz2vg7jvb9vcfc9456rr";
};
cmakeFlags = [ "-DVGL_SYSTEMFLTK=1" "-DTJPEG_LIBRARY=${libjpeg_turbo.out}/lib/libturbojpeg.so" ];
makeFlags = [ "PREFIX=$(out)" ];
nativeBuildInputs = [ cmake ];
buildInputs = [ libjpeg_turbo libGL libGLU fltk
libXv libXtst libXi xorg.xcbutilkeysyms
opencl-headers opencl-clhpp ocl-icd
];
fixupPhase = ''
substituteInPlace $out/bin/vglrun \
--replace "LD_PRELOAD=libvglfaker" "LD_PRELOAD=$out/lib/libvglfaker" \
--replace "LD_PRELOAD=libdlfaker" "LD_PRELOAD=$out/lib/libdlfaker" \
--replace "LD_PRELOAD=libgefaker" "LD_PRELOAD=$out/lib/libgefaker"
'';
meta = with lib; {
homepage = "http://www.virtualgl.org/";
description = "X11 GL rendering in a remote computer with full 3D hw acceleration";
license = licenses.wxWindows;
platforms = platforms.linux;
maintainers = with maintainers; [ abbradar ];
};
}

View file

@ -0,0 +1,41 @@
{lib, stdenv, fetchFromGitHub, fetchpatch, libX11}:
stdenv.mkDerivation rec {
pname = "wayv";
version = "0.3";
src = fetchFromGitHub {
owner = "mikemb";
repo = pname;
rev = "b716877603250f690f08b593bf30fd5e8a93a872";
sha256 = "046dvaq6na1fyxz5nrjg13aaz6ific9wbygck0dknqqfmmjrsv3b";
};
patches = [
# Pull patch pending upstream inclusion for -fno-common toolchain support:
# https://github.com/mikemb/wayV/pull/1
(fetchpatch {
name = "fno-common.patch";
url = "https://github.com/mikemb/wayV/commit/b927793e2a2c92ff1f97b9df9e58c26e73e72012.patch";
sha256 = "19i10966b0n710dic64p5ajsllkjnz16bp0crxfy9vv08hj1xygi";
})
];
buildInputs = [ libX11 ];
postInstall = ''
make -C doc install
mkdir -p "$out"/share/doc/wayv
cp [A-Z][A-Z]* "$out"/share/doc/wayv
cp doc/[A-Z][A-Z]* "$out"/share/doc/wayv
cp doc/*.txt "$out"/share/doc/wayv
cp doc/*.jpg "$out"/share/doc/wayv
'';
meta = {
description = "A gesture control for X11";
license = lib.licenses.gpl2Plus ;
maintainers = [lib.maintainers.raskin];
platforms = lib.platforms.linux;
homepage = "https://github.com/mikemb/wayV";
};
}

View file

@ -0,0 +1,32 @@
Description: Correct 64 Architecture implementation of 32 bit data
Author: Chris Donoghue <cdonoghu@gmail.com>
Bug-Debian: http://bugs.debian.org/362068
--- wmctrl-1.07.orig/main.c
+++ wmctrl-1.07/main.c
@@ -1425,6 +1425,16 @@ static gchar *get_property (Display *dis
*
* long_length = Specifies the length in 32-bit multiples of the
* data to be retrieved.
+ *
+ * NOTE: see
+ * http://mail.gnome.org/archives/wm-spec-list/2003-March/msg00067.html
+ * In particular:
+ *
+ * When the X window system was ported to 64-bit architectures, a
+ * rather peculiar design decision was made. 32-bit quantities such
+ * as Window IDs, atoms, etc, were kept as longs in the client side
+ * APIs, even when long was changed to 64 bits.
+ *
*/
if (XGetWindowProperty(disp, win, xa_prop_name, 0, MAX_PROPERTY_VALUE_LEN / 4, False,
xa_prop_type, &xa_ret_type, &ret_format,
@@ -1441,6 +1451,8 @@ static gchar *get_property (Display *dis
/* null terminate the result to make string handling easier */
tmp_size = (ret_format / 8) * ret_nitems;
+ /* Correct 64 Architecture implementation of 32 bit data */
+ if(ret_format==32) tmp_size *= sizeof(long)/4;
ret = g_malloc(tmp_size + 1);
memcpy(ret, ret_prop, tmp_size);
ret[tmp_size] = '\0';

View file

@ -0,0 +1,35 @@
{ lib, stdenv
, fetchurl
, libX11
, glib
, pkg-config
, libXmu
}:
stdenv.mkDerivation rec {
pname = "wmctrl";
version = "1.07";
src = fetchurl {
# NOTE: 2019-04-11: There is also a semi-official mirror: http://tripie.sweb.cz/utils/wmctrl/
url = "https://sites.google.com/site/tstyblo/wmctrl/${pname}-${version}.tar.gz";
sha256 = "1afclc57b9017a73mfs9w7lbdvdipmf9q0xdk116f61gnvyix2np";
};
strictDeps = true;
depsBuildBuild = [ pkg-config ];
nativeBuildInputs = [ glib.dev ];
buildInputs = [ libX11 libXmu glib ];
patches = [ ./64-bit-data.patch ];
meta = {
homepage = "https://sites.google.com/site/tstyblo/wmctrl";
description = "CLI tool to interact with EWMH/NetWM compatible X Window Managers";
license = lib.licenses.gpl2;
platforms = with lib.platforms; all;
maintainers = [ lib.maintainers.Anton-Latukha ];
};
}

View file

@ -0,0 +1,24 @@
{ lib, stdenv, fetchFromGitHub, libxcb, xcbutil, xcb-util-cursor }:
stdenv.mkDerivation rec {
pname = "wmutils-core";
version = "1.6";
src = fetchFromGitHub {
owner = "wmutils";
repo = "core";
rev = "v${version}";
sha256 = "sha256-Nv8ZTi3qVQyOkwyErjtE6/lLCubcLM2BRTY48r1HhHo=";
};
buildInputs = [ libxcb xcbutil xcb-util-cursor ];
installFlags = [ "PREFIX=$(out)" ];
meta = with lib; {
description = "Set of window manipulation tools";
homepage = "https://github.com/wmutils/core";
license = licenses.isc;
platforms = platforms.unix;
};
}

View file

@ -0,0 +1,25 @@
{ lib, stdenv, fetchFromGitHub, libxcb }:
stdenv.mkDerivation rec {
pname = "wmutils-libwm";
version = "1.0";
src = fetchFromGitHub {
owner = "wmutils";
repo = "libwm";
rev = "v${version}";
sha256 = "1lpbqrilhffpzc0b7vnp08jr1wr96lndwc7y0ck8hlbzlvm662l0";
};
buildInputs = [ libxcb ];
installFlags = [ "PREFIX=$(out)" ];
meta = with lib; {
description = "A small library for X window manipulation";
homepage = "https://github.com/wmutils/libwm";
license = licenses.isc;
maintainers = with maintainers; [ bhougland ];
platforms = platforms.unix;
};
}

View file

@ -0,0 +1,25 @@
{ lib, stdenv, fetchFromGitHub, libxcb }:
stdenv.mkDerivation rec {
pname = "wmutils-opt";
version = "1.0";
src = fetchFromGitHub {
owner = "wmutils";
repo = "opt";
rev = "v${version}";
sha256 = "0gd05qsir1lnzfrbnfh08qwsryz7arwj20f886nqh41m87yqaljz";
};
buildInputs = [ libxcb ];
installFlags = [ "PREFIX=$(out)" ];
meta = with lib; {
description = "Optional addons to wmutils";
homepage = "https://github.com/wmutils/opt";
license = licenses.isc;
maintainers = with maintainers; [ vifino ];
platforms = platforms.unix;
};
}

View file

@ -0,0 +1,51 @@
{ lib, python3Packages, fetchFromGitHub, libxslt,
gobject-introspection, gtk3, wrapGAppsHook, gnome }:
python3Packages.buildPythonApplication rec {
pname = "wpgtk";
version = "6.5.0";
src = fetchFromGitHub {
owner = "deviantfero";
repo = "wpgtk";
rev = version;
sha256 = "0gv607jrdfbmadjyy3pbrj5ksh1dmaw5hz7l8my2z7sh0ifds0n2";
};
buildInputs = [
wrapGAppsHook
gtk3
gobject-introspection
gnome.adwaita-icon-theme
libxslt
];
propagatedBuildInputs = with python3Packages; [
pygobject3
pillow
pywal
];
# The $HOME variable must be set to build the package. A "permission denied" error will occur otherwise
preBuild = ''
export HOME=$(pwd)
'';
# No test exist
doCheck = false;
meta = with lib; {
description = "Template based wallpaper/colorscheme generator and manager";
longDescription = ''
In short, wpgtk is a colorscheme/wallpaper manager with a template system attached which lets you create templates from any textfile and will replace keywords on it on the fly, allowing for great styling and theming possibilities.
wpgtk uses pywal as its colorscheme generator, but builds upon it with a UI and other features, such as the abilty to mix and edit the colorschemes generated and save them with their respective wallpapers, having light and dark themes, hackable and fast GTK theme made specifically for wpgtk and custom keywords and values to replace in templates.
INFO: To work properly, this tool needs "programs.dconf.enable = true" on nixos or dconf installed. A reboot may be required after installing dconf.
'';
homepage = "https://github.com/deviantfero/wpgtk";
license = licenses.gpl2Only;
platforms = platforms.linux;
maintainers = [ maintainers.melkor333 ];
};
}

View file

@ -0,0 +1,33 @@
{ lib, stdenv, fetchFromGitLab, autoreconfHook, pkg-config
, xorg, gtk2, spice, spice-protocol
}:
stdenv.mkDerivation rec {
pname = "x11spice";
version = "2019-08-20";
src = fetchFromGitLab {
domain = "gitlab.freedesktop.org";
owner = "spice";
repo = "x11spice";
rev = "51d2a8ba3813469264959bb3ba2fc6fe08097be6";
sha256 = "0va5ix14vnqch59gq8wvrhw6q0w0n27sy70xx5kvfj2cl0h1xpg8";
};
nativeBuildInputs = [ autoreconfHook pkg-config ];
buildInputs = [
xorg.libxcb xorg.xcbutil xorg.utilmacros
gtk2 spice spice-protocol
];
NIX_LDFLAGS = "-lpthread";
meta = with lib; {
description = "Enable a running X11 desktop to be available via a Spice server";
homepage = "https://gitlab.freedesktop.org/spice/x11spice";
platforms = platforms.linux;
license = licenses.gpl3;
maintainers = with maintainers; [ rnhmjoj ];
};
}

View file

@ -0,0 +1,65 @@
{ lib, stdenv, fetchFromGitHub, fetchpatch,
openssl, zlib, libjpeg, xorg, coreutils, libvncserver,
autoreconfHook, pkg-config }:
stdenv.mkDerivation rec {
pname = "x11vnc";
version = "0.9.16";
src = fetchFromGitHub {
owner = "LibVNC";
repo = "x11vnc";
rev = version;
sha256 = "1g652mmi79pfq4p5p7spaswa164rpzjhc5rn2phy5pm71lm0vib1";
};
patches = [
(fetchpatch {
name = "CVE-2020-29074.patch";
url = "https://github.com/LibVNC/x11vnc/commit/69eeb9f7baa14ca03b16c9de821f9876def7a36a.patch";
sha256 = "0hdhp32g2i5m0ihmaxkxhsn3d5f2qasadvwpgxify4xnzabmyb2d";
})
# Pull upstream fix for -fno-common toolchains:
# https://github.com/LibVNC/x11vnc/pull/121
(fetchpatch {
name = "fno-common.patch";
url = "https://github.com/LibVNC/x11vnc/commit/a48b0b1cd887d7f3ae67f525d7d334bd2feffe60.patch";
sha256 = "046gjsmg0vm0m4y9ny17y2jayc4ba7vib2whw71l5x1hjp6pksjs";
})
];
nativeBuildInputs = [ autoreconfHook pkg-config ];
buildInputs =
[ xorg.libXfixes xorg.xorgproto openssl xorg.libXdamage
zlib xorg.libX11 libjpeg
xorg.libXtst xorg.libXinerama xorg.libXrandr
xorg.libXext
xorg.libXi xorg.libXrender
libvncserver
];
postPatch = ''
substituteInPlace src/unixpw.c \
--replace '"/bin/su"' '"/run/wrappers/bin/su"' \
--replace '"/bin/true"' '"${coreutils}/bin/true"'
sed -i -e '/#!\/bin\/sh/a"PATH=${xorg.xdpyinfo}\/bin:${xorg.xauth}\/bin:$PATH\\n"' -e 's|/bin/su|/run/wrappers/bin/su|g' src/ssltools.h
# Xdummy script is currently broken, so we avoid building it. This removes everything Xdummy-related from the affected Makefile
sed -i -e '/^\tXdummy.c\ \\$/,$d' -e 's/\tx11vnc_loop\ \\/\tx11vnc_loop/' misc/Makefile.am
'';
preConfigure = ''
configureFlags="--mandir=$out/share/man"
'';
meta = with lib; {
description = "A VNC server connected to a real X11 screen";
homepage = "https://github.com/LibVNC/x11vnc/";
platforms = platforms.linux;
license = licenses.gpl2;
maintainers = with maintainers; [ OPNA2608 ];
};
}

View file

@ -0,0 +1,24 @@
{ lib, stdenv, fetchurl, xorg }:
stdenv.mkDerivation rec {
pname = "x2vnc";
version = "1.7.2";
src = fetchurl {
url = "https://fredrik.hubbe.net/x2vnc/x2vnc-${version}.tar.gz";
sha256 = "00bh9j3m6snyd2fgnzhj5vlkj9ibh69gfny9bfzlxbnivb06s1yw";
};
buildInputs = with xorg; [
libX11 xorgproto libXext libXrandr
];
hardeningDisable = [ "format" ];
meta = with lib; {
homepage = "http://fredrik.hubbe.net/x2vnc.html";
description = "A program to control a remote VNC server";
platforms = platforms.unix;
license = licenses.gpl2;
};
}

View file

@ -0,0 +1,30 @@
{ lib, stdenv, fetchurl, imake, libX11, libXtst, libXext, gccmakedep }:
stdenv.mkDerivation rec {
pname = "x2x";
version = "1.27";
src = fetchurl {
url = "https://github.com/downloads/dottedmag/x2x/x2x-${version}.tar.gz";
sha256 = "0dha0kn1lbc4as0wixsvk6bn4innv49z9a0sm5wlx4q1v0vzqzyj";
};
nativeBuildInputs = [ imake gccmakedep ];
buildInputs = [ libX11 libXtst libXext ];
hardeningDisable = [ "format" ];
buildFlags = [ "x2x" ];
installPhase = ''
install -D x2x $out/bin/x2x
install -D x2x.1 $out/man/man1/x2x.1
'';
meta = with lib; {
description = "Allows the keyboard, mouse on one X display to be used to control another X display";
homepage = "https://github.com/dottedmag/x2x";
license = licenses.bsd3;
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,32 @@
{lib, stdenv, fetchFromBitbucket, fetchpatch, libX11}:
stdenv.mkDerivation rec {
pname = "xannotate";
version = "20150301";
src = fetchFromBitbucket {
owner = "blais";
repo = pname;
rev = "e5591c2ec67ca39988f1fb2966e94f0f623f9aa7";
sha256 = "02jy19if0rnbxvs6b0l5mi9ifvdj2qmv0pv278v9kfs0kvir68ik";
};
patches = [
# Pull patch pending upstream inclusion for -gno-common tollchains:
# https://github.com/blais/xannotate/pull/1
(fetchpatch {
name = "fno-common.patch";
url = "https://github.com/blais/xannotate/commit/ee637e2dee103d0e654865c2202ea1b3af2a20d6.patch";
sha256 = "1lw22d5qs1bwp53l332yl3yypfvwrbi750wp7yv90nfn3ia0xhni";
})
];
buildInputs = [ libX11 ];
meta = {
description = "A tool to scribble over X windows";
license = lib.licenses.gpl2Plus ;
maintainers = [lib.maintainers.raskin];
platforms = lib.platforms.linux;
homepage = "https://github.com/blais/xannotate";
};
}

View file

@ -0,0 +1,21 @@
{ lib, stdenv, fetchurl, pkg-config, libpng, libX11, libXext, libXi, libXtst }:
stdenv.mkDerivation rec {
pname = "xautomation";
version = "1.09";
src = fetchurl {
url = "https://www.hoopajoo.net/static/projects/xautomation-${version}.tar.gz";
sha256 = "03azv5wpg65h40ip2kk1kdh58vix4vy1r9bihgsq59jx2rhjr3zf";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ libpng libX11 libXext libXi libXtst ];
meta = {
homepage = "https://www.hoopajoo.net/projects/xautomation.html";
description = "Control X from the command line for scripts, and do \"visual scraping\" to find things on the screen";
license = lib.licenses.gpl2Plus;
maintainers = with lib.maintainers; [ vaibhavsagar ];
platforms = with lib.platforms; linux;
};
}

View file

@ -0,0 +1,42 @@
{lib, stdenv, fetchFromGitHub, libX11, libXi, libXt, libXfixes, libXext}:
stdenv.mkDerivation rec {
version = "1.8";
pname = "xbanish";
buildInputs = [
libX11 libXi libXt libXfixes libXext
];
src = fetchFromGitHub {
owner = "jcs";
repo = pname;
rev = "v${version}";
sha256 = "sha256-jwCoJ2shFGuJHhmXmlw/paFpMl5ARD6e5zDnDZHlsoo=";
};
makeFlags=[ "PREFIX=$(out)" ];
preInstall = ''
mkdir -p $out/bin $out/man/man1
'';
meta = {
description = "Hides mouse pointer while not in use";
longDescription = ''
xbanish hides the mouse cursor when you start typing, and shows it again when
the mouse cursor moves or a mouse button is pressed. This is similar to
xterm's pointerMode setting, but xbanish works globally in the X11 session.
unclutter's -keystroke mode is supposed to do this, but it's broken[0]. I
looked into fixing it, but the unclutter source code is terrible, so I wrote
xbanish.
The name comes from ratpoison's "banish" command that sends the cursor to the
corner of the screen.
'';
license = lib.licenses.bsd3;
maintainers = [lib.maintainers.choochootrain];
platforms = lib.platforms.linux;
};
}

View file

@ -0,0 +1,42 @@
{ lib, stdenv, fetchurl, gtk, pkg-config, procps, makeWrapper, ... }:
stdenv.mkDerivation rec {
pname = "xbindkeys-config";
version = "0.1.3";
# Workaround build failure on -fno-common toolchains like upstream
# gcc-10.
NIX_CFLAGS_COMPILE = "-fcommon";
nativeBuildInputs = [ pkg-config makeWrapper ];
buildInputs = [ gtk ];
src = fetchurl {
url = "mirror://debian/pool/main/x/xbindkeys-config/xbindkeys-config_${version}.orig.tar.gz";
sha256 = "1rs3li2hyig6cdzvgqlbz0vw6x7rmgr59qd6m0cvrai8xhqqykda";
};
hardeningDisable = [ "format" ];
meta = {
homepage = "https://packages.debian.org/source/xbindkeys-config";
description = "Graphical interface for configuring xbindkeys";
license = lib.licenses.gpl2Plus;
maintainers = with lib.maintainers; [benley];
platforms = with lib.platforms; linux;
};
patches = [ ./xbindkeys-config-patch1.patch ];
# killall is dangerous on non-gnu platforms. Use pkill instead.
postPatch = ''
substituteInPlace middle.c --replace "killall" "pkill -x"
'';
installPhase = ''
mkdir -p $out/bin $out/share/man/man1
gzip -c ${./xbindkeys-config.1} > $out/share/man/man1/xbindkeys-config.1.gz
cp xbindkeys_config $out/bin/xbindkeys-config
wrapProgram $out/bin/xbindkeys-config --prefix PATH ":" "${procps}/bin"
'';
}

View file

@ -0,0 +1,108 @@
---
Makefile | 6 +++---
menu.c | 11 ++++++++---
middle.c | 9 +++++++--
xbindkeys_config.c | 3 ++-
4 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/Makefile b/Makefile
index 602875c..28e46cd 100644
--- a/Makefile
+++ b/Makefile
@@ -1,9 +1,9 @@
# makefile crée par Laurent VUIBERT
-CC= gcc -O3 -Wall
+CC= gcc $(CFLAGS)
STD= _GNU_SOURCE
-GTK= `gtk-config --cflags --libs`
-GTK2= `gtk-config --cflags`
+GTK= `pkg-config --cflags --libs gtk+-2.0`
+GTK2= `pkg-config --cflags gtk+-2.0`
OBJS= xbindkeys_config.o menu.o middle.o speedc.o
NOM= xbindkeys_config
diff --git a/menu.c b/menu.c
index ed3e7ec..f11526d 100644
--- a/menu.c
+++ b/menu.c
@@ -283,6 +283,8 @@ void menu_manual (GtkMenuItem *menuitem, gpointer user_data)
GtkWidget *window;
GtkWidget *text;
GtkWidget *vbox;
+ GtkTextBuffer *textbuffer;
+ GtkTextIter iter;
window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
gtk_window_set_title(GTK_WINDOW(window),
@@ -293,10 +295,13 @@ void menu_manual (GtkMenuItem *menuitem, gpointer user_data)
text = gtk_label_new("\nManual\n");
gtk_box_pack_start(GTK_BOX(vbox), text, FALSE, FALSE, 0);
- text = gtk_text_new(NULL,NULL);
+/* BDD - FIXME */
+/* text = gtk_text_new(NULL,NULL); */
+ text = gtk_text_view_new();
+ textbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
+ gtk_text_buffer_get_iter_at_offset (textbuffer, &iter, 0);
-
- gtk_text_insert (GTK_TEXT(text), NULL, NULL, NULL,
+ gtk_text_buffer_insert (textbuffer, &iter,
MANUAL_TEXT, sizeof(MANUAL_TEXT)-1);
gtk_box_pack_start(GTK_BOX(vbox), text, TRUE, TRUE, 0);
gtk_widget_set_usize(text,300,250);
diff --git a/middle.c b/middle.c
index daa61aa..605ab10 100644
--- a/middle.c
+++ b/middle.c
@@ -551,6 +551,8 @@ void view_generated_file()
GtkWidget *window;
GtkWidget *text;
GtkWidget *src;
+ GtkTextBuffer *textbuffer;
+ GtkTextIter iter;
char line [1024];
unlink(TEMP_FILE);
@@ -561,11 +563,13 @@ void view_generated_file()
gtk_window_set_title(GTK_WINDOW(window), "Generated File");
src = gtk_scrolled_window_new ( NULL, NULL );
gtk_widget_set_usize(src,500,400);
- text = gtk_text_new (NULL, NULL);
+ text = gtk_text_view_new ();
+ textbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
+ gtk_text_buffer_get_iter_at_offset (textbuffer, &iter, 0);
gtk_container_add (GTK_CONTAINER(src), text);
while (fgets (line, sizeof(line), f))
- gtk_text_insert (GTK_TEXT(text), NULL, NULL, NULL,
+ gtk_text_buffer_insert (textbuffer, &iter,
line, strlen(line));
gtk_container_add(GTK_CONTAINER(window),src);
@@ -610,6 +614,7 @@ void save_file(char file_out[])
fprintf(f, "# m:xxx + c:xxx \n");
fprintf(f, "# Shift+... \n\n\n\n\n");
+
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(Flag_NumLock)))
fprintf(f,"keystate_numlock = enable\n");
else
diff --git a/xbindkeys_config.c b/xbindkeys_config.c
index 75bad30..3c02a2b 100644
--- a/xbindkeys_config.c
+++ b/xbindkeys_config.c
@@ -95,7 +95,8 @@ int main (int argc, char *argv[])
accel_group = gtk_accel_group_new();
menu=xbindkeys_config_menu(accel_group);
gtk_box_pack_start(GTK_BOX(vbox),menu,FALSE,FALSE,0);
- gtk_accel_group_attach(accel_group, GTK_OBJECT(window));
+/* BDD - FIXME - Don't need this? */
+/* gtk_accel_group_attach(accel_group, GTK_OBJECT(window)); */
middle= xbindkeys_config_middle();
gtk_box_pack_start(GTK_BOX(vbox),middle,TRUE,TRUE,0);
--
2.1.3

View file

@ -0,0 +1,21 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.27.
.TH XBINDKEYS_CONFIG "1" "April 2002" "xbindkeys-config" "User Commands"
.SH NAME
xbindkeys-config \- GTK+ configuration tool for xbindkeys
.SH "SYNOPSIS"
xbindkeys-config
[\-\-file|\-f file]
[\-\-help|\-h]
[\-\-show|\-s]
.TP
\fB\-h\fR, \fB\-\-help\fR
This Help
.TP
\fB\-f\fR, \fB\-\-file\fR
Use an alternative rc file
.TP
\fB\-s\fR, \fB\-\-show\fR
show only the rc file
.SH AUTHOR
This manual page was written by Joerg Jaspert <joerg@debian.org>,
for the Debian GNU/Linux system (but may be used by others).

View file

@ -0,0 +1,21 @@
{ lib, stdenv, fetchurl, pkg-config, libX11, guile }:
stdenv.mkDerivation rec {
pname = "xbindkeys";
version = "1.8.7";
src = fetchurl {
url = "https://www.nongnu.org/xbindkeys/xbindkeys-${version}.tar.gz";
sha256 = "1wl2vc5alisiwyk8m07y1ryq8w3ll9ym83j27g4apm4ixjl8d6x2";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ libX11 guile ];
meta = {
homepage = "https://www.nongnu.org/xbindkeys/xbindkeys.html";
description = "Launch shell commands with your keyboard or your mouse under X Window";
license = lib.licenses.gpl2Plus;
maintainers = with lib.maintainers; [viric];
platforms = with lib.platforms; linux;
};
}

View file

@ -0,0 +1,25 @@
{ lib, stdenv, fetchurl, imake, gccmakedep
, libX11, libXaw, libXext, libXmu, libXpm, libXxf86vm }:
stdenv.mkDerivation rec {
pname = "xbrightness";
version = "0.3-mika-akk";
src = fetchurl {
url = "https://shallowsky.com/software/xbrightness/xbrightness-${version}.tar.gz";
sha256 = "2564dbd393544657cdabe4cbf535d9cfb9abe8edddb1b8cdb1ed4d12f358626e";
};
nativeBuildInputs = [ imake gccmakedep ];
buildInputs = [ libX11 libXaw libXext libXmu libXpm libXxf86vm ];
makeFlags = [ "BINDIR=$(out)/bin" "MANPATH=$(out)/share/man" ];
installTargets = [ "install" "install.man" ];
meta = {
description = "X11 brigthness and gamma software control";
homepage = "http://shallowsky.com/software";
license = lib.licenses.mit;
platforms = lib.platforms.linux;
};
}

View file

@ -0,0 +1,28 @@
{ lib, stdenv, fetchFromGitHub, libX11, libXxf86vm, libXext, libXrandr }:
stdenv.mkDerivation rec {
pname = "xcalib";
version = "0.10";
src = fetchFromGitHub {
owner = "OpenICC";
repo = "xcalib";
rev = version;
sha256 = "05fzdjmhiafgi2jf0k41i3nm0837a78sb6yv59cwc23nla8g0bhr";
};
buildInputs = [ libX11 libXxf86vm libXext libXrandr ];
installPhase = ''
mkdir -p $out/bin
cp xcalib $out/bin/
'';
meta = with lib; {
inherit (src.meta) homepage;
description = "A tiny monitor calibration loader for X and MS-Windows";
license = licenses.gpl2;
maintainers = [];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,41 @@
{ lib, stdenv, fetchFromGitHub, pkg-config, libX11, libXtst, xorgproto,
libXi }:
stdenv.mkDerivation rec {
pname = "xcape";
version = "unstable-2018-03-01";
src = fetchFromGitHub {
owner = "alols";
repo = pname;
rev = "a34d6bae27bbd55506852f5ed3c27045a3c0bd9e";
sha256 = "04grs4w9kpfzz25mqw82zdiy51g0w355gpn5b170p7ha5972ykc8";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ libX11 libXtst xorgproto libXi ];
makeFlags = [
"PREFIX=$(out)"
"MANDIR=/share/man/man1"
];
postInstall = "install -Dm444 --target-directory $out/share/doc README.md";
meta = with lib; {
description = "Utility to configure modifier keys to act as other keys";
longDescription = ''
xcape allows you to use a modifier key as another key when
pressed and released on its own. Note that it is slightly
slower than pressing the original key, because the pressed event
does not occur until the key is released. The default behaviour
is to generate the Escape key when Left Control is pressed and
released on its own.
'';
homepage = "https://github.com/alols/xcape";
license = licenses.gpl3 ;
maintainers = with maintainers; [ raskin ];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,20 @@
{ lib, stdenv, fetchurl, libX11 }:
stdenv.mkDerivation rec {
pname = "xchainkeys";
version = "0.11";
src = fetchurl {
url = "http://henning-bekel.de/download/xchainkeys/xchainkeys-${version}.tar.gz";
sha256 = "1rpqs7h5krral08vqxwb0imy33z17v5llvrg5hy8hkl2ap7ya0mn";
};
buildInputs = [ libX11 ];
meta = {
homepage = "http://henning-bekel.de/xchainkeys/";
description = "A standalone X11 program to create chained key bindings";
license = lib.licenses.gpl3;
platforms = lib.platforms.unix;
};
}

View file

@ -0,0 +1,31 @@
{ lib, stdenv, fetchFromGitHub, libX11 }:
stdenv.mkDerivation {
version = "2019-05-09";
pname = "xcwd";
src = fetchFromGitHub {
owner = "schischi";
repo = "xcwd";
rev = "99738e1176acf3f39c2e709236c3fd87b806f2ed";
sha256 = "1wvhj5x8ysi1q73f9cw1f6znvp2zivd8pp6z1p3znw732h4zlv6v";
};
buildInputs = [ libX11 ];
makeFlags = [ "prefix=$(out)" ];
installPhase = ''
install -D xcwd "$out/bin/xcwd"
'';
meta = with lib; {
description = ''
A simple tool which print the current working directory of the currently focused window
'';
homepage = "https://github.com/schischi/xcwd";
maintainers = [ maintainers.grburst ];
license = licenses.bsd3;
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,27 @@
{ lib, stdenv, fetchurl, libxslt, docbook_xsl, makeWrapper }:
stdenv.mkDerivation rec {
pname = "xdg-user-dirs";
version = "0.17";
src = fetchurl {
url = "https://user-dirs.freedesktop.org/releases/xdg-user-dirs-${version}.tar.gz";
sha256 = "13216b8rfkzak5k6bvpx6jvqv3cnbgpijnjwj8a8d3kq4cl0a1ra";
};
nativeBuildInputs = [ makeWrapper libxslt docbook_xsl ];
preFixup = ''
# fallback values need to be last
wrapProgram "$out/bin/xdg-user-dirs-update" \
--suffix XDG_CONFIG_DIRS : "$out/etc/xdg"
'';
meta = with lib; {
homepage = "http://freedesktop.org/wiki/Software/xdg-user-dirs";
description = "A tool to help manage well known user directories like the desktop folder and the music folder";
license = licenses.gpl2;
maintainers = with maintainers; [ ];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,70 @@
{ lib, stdenv, fetchFromGitLab, fetchFromGitHub
, file, libxslt, docbook_xml_dtd_412, docbook_xsl, xmlto
, w3m, gnugrep, gnused, coreutils, xset, perlPackages
, mimiSupport ? false, gawk }:
let
# A much better xdg-open
mimisrc = fetchFromGitHub {
owner = "march-linux";
repo = "mimi";
rev = "8e0070f17bcd3612ee83cb84e663e7c7fabcca3d";
sha256 = "15gw2nyrqmdsdin8gzxihpn77grhk9l97jp7s7pr7sl4n9ya2rpj";
};
perlPath = with perlPackages; makePerlPath [
NetDBus XMLTwig XMLParser X11Protocol
];
in
stdenv.mkDerivation rec {
pname = "xdg-utils";
version = "unstable-2020-10-21";
src = fetchFromGitLab {
domain = "gitlab.freedesktop.org";
owner = "xdg";
repo = "xdg-utils";
rev = "d11b33ec7f24cfb1546f6b459611d440013bdc72";
sha256 = "sha256-8PtXfI8hRneEpnUvIV3M+6ACjlkx0w/NEiJFdGbbHnQ=";
};
# just needed when built from git
buildInputs = [ libxslt docbook_xml_dtd_412 docbook_xsl xmlto w3m ];
postInstall = lib.optionalString mimiSupport ''
cp ${mimisrc}/xdg-open $out/bin/xdg-open
'' + ''
sed '2s#.#\
sed() { ${gnused}/bin/sed "$@"; }\
grep() { ${gnugrep}/bin/grep "$@"; }\
egrep() { ${gnugrep}/bin/egrep "$@"; }\
file() { ${file}/bin/file "$@"; }\
awk() { ${gawk}/bin/awk "$@"; }\
xset() { ${xset}/bin/xset "$@"; }\
perl() { PERL5LIB=${perlPath} ${perlPackages.perl}/bin/perl "$@"; }\
mimetype() { ${perlPackages.FileMimeInfo}/bin/mimetype "$@"; }\
PATH=$PATH:'$out'/bin:${coreutils}/bin\
&#' -i "$out"/bin/*
substituteInPlace $out/bin/xdg-open \
--replace "/usr/bin/printf" "${coreutils}/bin/printf"
substituteInPlace $out/bin/xdg-mime \
--replace "/usr/bin/file" "${file}/bin/file"
substituteInPlace $out/bin/xdg-email \
--replace "/bin/echo" "${coreutils}/bin/echo"
sed 's|\bwhich\b|type -P|g' -i "$out"/bin/*
'';
meta = with lib; {
homepage = "https://www.freedesktop.org/wiki/Software/xdg-utils/";
description = "A set of command line tools that assist applications with a variety of desktop integration tasks";
license = if mimiSupport then licenses.gpl2 else licenses.free;
maintainers = [ maintainers.eelco ];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,30 @@
{ lib, stdenv, fetchFromGitHub, pkg-config, libX11, perl, libXtst, xorgproto, libXi, libXinerama, libxkbcommon, libXext }:
stdenv.mkDerivation rec {
pname = "xdotool";
version = "3.20211022.1";
src = fetchFromGitHub {
owner = "jordansissel";
repo = pname;
rev = "v${version}";
sha256 = "sha256-XFiaiHHtUSNFw+xhUR29+2RUHOa+Eyj1HHfjCUjwd9k=";
};
nativeBuildInputs = [ pkg-config perl ];
buildInputs = [ libX11 libXtst xorgproto libXi libXinerama libxkbcommon libXext ];
preBuild = ''
mkdir -p $out/lib
'';
makeFlags = [ "PREFIX=$(out)" ];
meta = {
homepage = "https://www.semicomplete.com/projects/xdotool/";
description = "Fake keyboard/mouse input, window management, and more";
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [viric];
platforms = with lib.platforms; linux;
};
}

View file

@ -0,0 +1,28 @@
{ lib, stdenv, fetchFromGitHub, pkg-config, gtk3 }:
stdenv.mkDerivation rec {
pname = "xdragon";
version = "1.2.0";
src = fetchFromGitHub {
owner = "mwh";
repo = "dragon";
rev = "v${version}";
sha256 = "sha256-wqG6idlVvdN+sPwYgWu3UL0la5ssvymZibiak3KeV7M=";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ gtk3 ];
installFlags = [ "PREFIX=${placeholder "out"}" ];
postInstall = ''
ln -s $out/bin/dragon $out/bin/xdragon
'';
meta = with lib; {
description = "Simple drag-and-drop source/sink for X (called dragon in upstream)";
homepage = "https://github.com/mwh/dragon";
license = licenses.gpl3;
maintainers = with maintainers; [ das_j ];
};
}

View file

@ -0,0 +1,31 @@
{ lib, stdenv, fetchurl, libX11 }:
stdenv.mkDerivation rec {
pname = "xgeometry-select";
version = "0.1";
src = fetchurl {
url = "https://gist.githubusercontent.com/obadz/7e008b1f803c4cdcfaf7321c78bcbe92/raw/7e7361e71ff0f74655ee92bd6d2c042f8586f2ae/xgeometry-select.c";
sha256 = "0s7kirgh5iz91m3qy8xiq0j4gljy8zrcnylf4szl5h0lrsaqj7ya";
};
dontUnpack = true;
buildInputs = [ libX11 ];
buildPhase = ''
gcc -Wall -lX11 ${src} -o xgeometry-select
'';
installPhase = ''
mkdir -p $out/bin
mv -v xgeometry-select $out/bin
'';
meta = with lib; {
description = "Select a region with mouse and prints geometry information (x/y/w/h)";
homepage = "https://bbs.archlinux.org/viewtopic.php?pid=660837";
maintainers = with maintainers; [ obadz ];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,49 @@
{ lib
, stdenv
, rustPlatform
, fetchFromGitLab
, python3
, xlibsWrapper
, xorg
, libpulseaudio
, pkg-config
, patchelf
, Security
}:
rustPlatform.buildRustPackage rec {
pname = "xidlehook";
version = "0.10.0";
doCheck = false;
src = fetchFromGitLab {
owner = "jD91mZM2";
repo = "xidlehook";
rev = version;
sha256 = "1pl7f8fhxfcy0c6c08vkagp0x1ak96vc5wgamigrk1nkd6l371lb";
};
cargoSha256 = "1y7m61j07gvqfqz97mda39nc602sv7a826c06m8l22i7z380xfms";
buildInputs = [ xlibsWrapper xorg.libXScrnSaver libpulseaudio ] ++ lib.optional stdenv.isDarwin Security;
nativeBuildInputs = [ pkg-config patchelf python3 ];
buildNoDefaultFeatures = !stdenv.isLinux;
buildFeatures = lib.optional (!stdenv.isLinux) "pulse";
postFixup = lib.optionalString stdenv.isLinux ''
RPATH="$(patchelf --print-rpath $out/bin/xidlehook)"
patchelf --set-rpath "$RPATH:${libpulseaudio}/lib" $out/bin/xidlehook
'';
meta = with lib; {
description = "xautolock rewrite in Rust, with a few extra features";
homepage = "https://github.com/jD91mZM2/xidlehook";
license = licenses.mit;
maintainers = with maintainers; [ ];
platforms = platforms.unix;
badPlatforms = platforms.darwin;
};
}

View file

@ -0,0 +1,26 @@
{ lib, stdenv, fetchFromGitHub, libXi, xorgproto, autoconf, automake, libtool, m4, xlibsWrapper, pkg-config }:
stdenv.mkDerivation rec {
pname = "xinput_calibrator";
version = "0.7.5";
src = fetchFromGitHub {
owner = "tias";
repo = "xinput_calibrator";
rev = "v${version}";
sha256 = "5ZkNw+CKNUcPt1PY5PLzB/OT2wcf5n3UcaQlmMcwRVE=";
};
preConfigure = "./autogen.sh --with-gui=X11";
nativeBuildInputs = [ pkg-config autoconf automake ];
buildInputs = [ xorgproto libXi libtool m4 xlibsWrapper ];
meta = {
homepage = "https://github.com/tias/xinput_calibrator";
description = "A generic touchscreen calibration program for X.Org";
license = lib.licenses.mit;
maintainers = [ lib.maintainers.flosse ];
platforms = lib.platforms.linux;
};
}

View file

@ -0,0 +1,34 @@
{ lib, stdenv
, cmake
, fetchFromGitHub
, i3
, jsoncpp
, libsigcxx
, libX11
, libxkbfile
, pkg-config
}:
stdenv.mkDerivation rec {
pname = "xkb-switch-i3";
version = "1.8.1";
src = fetchFromGitHub {
owner = "Zebradil";
repo = "xkb-switch-i3";
rev = version;
sha256 = "15c19hp0n1k3w15qn97j6wp5b8hbk0mq6x3xjfn6dkkjfz1fl6cn";
fetchSubmodules = true;
};
nativeBuildInputs = [ cmake pkg-config ];
buildInputs = [ i3 jsoncpp libsigcxx libX11 libxkbfile ];
meta = with lib; {
description = "Switch your X keyboard layouts from the command line(i3 edition)";
homepage = "https://github.com/Zebradil/xkb-switch-i3";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ ewok ];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,24 @@
{ lib, stdenv, fetchFromGitHub, cmake, libX11, libxkbfile }:
stdenv.mkDerivation rec {
pname = "xkb-switch";
version = "1.8.5";
src = fetchFromGitHub {
owner = "ierton";
repo = "xkb-switch";
rev = version;
sha256 = "sha256-DZAIL6+D+Hgs+fkJwRaQb9BHrEjAkxiqhOZyrR+Mpuk=";
};
nativeBuildInputs = [ cmake ];
buildInputs = [ libX11 libxkbfile ];
meta = with lib; {
description = "Switch your X keyboard layouts from the command line";
homepage = "https://github.com/ierton/xkb-switch";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ smironov ];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,34 @@
{ lib, stdenv, fetchurl, perl, libX11 }:
stdenv.mkDerivation rec {
pname = "xkbset";
version = "0.6";
src = fetchurl {
url = "http://faculty.missouri.edu/~stephen/software/xkbset/xkbset-${version}.tar.gz";
sha256 = "sha256-rAMv7EnExPDyMY0/RhiXDFFBkbFC4GxRpmH+I0KlNaU=";
};
buildInputs = [ perl libX11 ];
postPatch = ''
sed "s:^X11PREFIX=.*:X11PREFIX=$out:" -i Makefile
'';
preInstall = ''
mkdir -p $out/bin
mkdir -p $out/man/man1
'';
postInstall = ''
rm -f $out/bin/xkbset-gui
'';
meta = with lib; {
homepage = "http://faculty.missouri.edu/~stephen/software/#xkbset";
description = "Program to help manage many of XKB features of X window";
maintainers = with maintainers; [ drets ];
platforms = platforms.linux;
license = licenses.bsd3;
};
}

View file

@ -0,0 +1,15 @@
{ lib, runCommandCC, libxkbcommon }:
runCommandCC "xkbvalidate" {
buildInputs = [ libxkbcommon ];
meta = {
description = "NixOS tool to validate X keyboard configuration";
license = lib.licenses.mit;
platforms = lib.platforms.unix;
maintainers = [ lib.maintainers.aszlig ];
};
} ''
mkdir -p "$out/bin"
$CC -std=c11 -Wall -pedantic -lxkbcommon ${./xkbvalidate.c} \
-o "$out/bin/xkbvalidate"
''

View file

@ -0,0 +1,150 @@
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <xkbcommon/xkbcommon.h>
static char **log_buffer = NULL;
static int log_buffer_size = 0;
static bool log_alloc_success = true;
static void add_log(struct xkb_context *ctx, enum xkb_log_level level,
const char *fmt, va_list args)
{
size_t buflen;
va_list tmpargs;
log_buffer_size++;
if (log_buffer == NULL)
log_buffer = malloc(sizeof(char *));
else
log_buffer = realloc(log_buffer, sizeof(char *) * log_buffer_size);
if (log_buffer == NULL) {
perror("buffer alloc");
log_alloc_success = false;
log_buffer_size--;
return;
}
/* Unfortunately, vasprintf() is a GNU extension and thus not very
* portable, so let's first get the required buffer size using a dummy
* vsnprintf and afterwards allocate the returned amount of bytes.
*
* We also need to make a copy of the args, because the value of the args
* will be indeterminate after the return.
*/
va_copy(tmpargs, args);
buflen = vsnprintf(NULL, 0, fmt, tmpargs);
va_end(tmpargs);
log_buffer[log_buffer_size - 1] = malloc(++buflen);
if (vsnprintf(log_buffer[log_buffer_size - 1], buflen, fmt, args) == -1) {
perror("log line alloc");
log_alloc_success = false;
}
va_end(args);
}
static void print_logs(void)
{
for (int i = 0; i < log_buffer_size; ++i)
fprintf(stderr, " %s", log_buffer[i]);
}
static void free_logs(void)
{
if (log_buffer == NULL)
return;
for (int i = 0; i < log_buffer_size; ++i)
free(log_buffer[i]);
free(log_buffer);
log_buffer = NULL;
log_buffer_size = 0;
}
static bool try_keymap(struct xkb_context *ctx, struct xkb_rule_names *rdef)
{
struct xkb_keymap *keymap;
bool result = true;
if ((keymap = xkb_keymap_new_from_names(ctx, rdef, 0)) == NULL)
result = false;
else
xkb_keymap_unref(keymap);
return result;
}
static void print_error(const char *name, const char *value,
const char *nixos_option)
{
fprintf(stderr, "\nThe value `%s' for keyboard %s is invalid.\n\n"
"Please check the definition in `services.xserver.%s'.\n",
value, name, nixos_option);
fputs("\nDetailed XKB compiler errors:\n\n", stderr);
print_logs();
putc('\n', stderr);
}
#define TRY_KEYMAP(name, value, nixos_option) \
*rdef = (struct xkb_rule_names) {0}; \
free_logs(); \
rdef->name = value; \
result = try_keymap(ctx, rdef); \
if (!log_alloc_success) \
goto out; \
if (!result) { \
print_error(#name, value, nixos_option); \
exit_code = EXIT_FAILURE; \
goto out; \
}
int main(int argc, char **argv)
{
int exit_code = EXIT_SUCCESS;
bool result;
struct xkb_context *ctx;
struct xkb_rule_names *rdef;
if (argc != 5) {
fprintf(stderr, "Usage: %s model layout variant options\n", argv[0]);
return EXIT_FAILURE;
}
ctx = xkb_context_new(XKB_CONTEXT_NO_ENVIRONMENT_NAMES);
xkb_context_set_log_fn(ctx, add_log);
rdef = malloc(sizeof(struct xkb_rule_names));
TRY_KEYMAP(model, argv[1], "xkbModel");
TRY_KEYMAP(layout, argv[2], "layout");
TRY_KEYMAP(variant, argv[3], "xkbVariant");
TRY_KEYMAP(options, argv[4], "xkbOptions");
free_logs();
rdef->model = argv[1];
rdef->layout = argv[2];
rdef->variant = argv[3];
rdef->options = argv[4];
result = try_keymap(ctx, rdef);
if (!log_alloc_success)
goto out;
if (!result) {
fputs("The XKB keyboard definition failed to compile:\n", stderr);
print_logs();
exit_code = EXIT_FAILURE;
}
out:
free_logs();
free(rdef);
xkb_context_unref(ctx);
return exit_code;
}

View file

@ -0,0 +1,53 @@
# -*- coding: utf-8 -*-
import re
from xkeysnail.transform import *
aa = False
def aa_setvar(v):
def _aa_setvar():
transform._mark_set = False
global aa; aa = v
return _aa_setvar
def aa_ifvar():
def _aa_ifvar():
transform._mark_set = False
global aa
if aa: aa = False; return K("esc")
return K("enter")
return _aa_ifvar
def aa_flipmark():
def _aa_flipmark():
transform._mark_set = not transform._mark_set;
return _aa_flipmark
define_keymap(re.compile("Google-chrome|Chromium-browser|firefox"), {
K("C-b"): with_mark(K("left")),
K("C-f"): with_mark(K("right")),
K("C-p"): with_mark(K("up")),
K("C-n"): with_mark(K("down")),
K("M-b"): with_mark(K("C-left")),
K("M-f"): with_mark(K("C-right")),
K("C-a"): with_mark(K("home")),
K("C-e"): with_mark(K("end")),
K("C-w"): [K("C-x"), set_mark(False)],
K("M-w"): [K("C-c"), K("right"), set_mark(False)],
K("C-y"): [K("C-v"), set_mark(False)],
K("C-k"): [K("Shift-end"), K("C-x"), set_mark(False)],
K("C-d"): [K("delete"), set_mark(False)],
K("M-d"): [K("C-delete"), set_mark(False)],
K("M-backspace"): [K("C-backspace"), set_mark(False)],
K("C-slash"): [K("C-z"), set_mark(False)],
K("C-space"): aa_flipmark(),
K("C-M-space"): with_or_set_mark(K("C-right")),
# K("C-s"): K("F3"),
# K("C-r"): K("Shift-F3"),
# K("C-g"): [K("esc"), set_mark(False)]
K("C-s"): [K("F3"), aa_setvar(True)],
K("C-r"): [K("Shift-F3"), aa_setvar(True)],
K("C-g"): [K("esc"), aa_setvar(False)],
K("enter"): aa_ifvar()
})

View file

@ -0,0 +1,42 @@
{ lib, fetchFromGitHub, makeWrapper, python3Packages }:
python3Packages.buildPythonApplication rec {
pname = "xkeysnail";
version = "0.4.0";
src = fetchFromGitHub {
owner = "mooz";
repo = pname;
rev = "bf3c93b4fe6efd42893db4e6588e5ef1c4909cfb";
sha256 = "0plcpb4ndzfsd5hj32m0g32swnhyph9sd759cdhhzmjvlq3j8q6p";
};
nativeBuildInputs = [ makeWrapper ];
propagatedBuildInputs = with python3Packages; [
evdev
xlib
inotify-simple
appdirs
];
doCheck = false;
postInstall = ''
mkdir -p $out/share
cp ./example/config.py $out/share/example.py
cp ${./browser-emacs-bindings.py} $out/share/browser.py
makeWrapper $out/bin/xkeysnail $out/bin/xkeysnail-example \
--add-flags "-q" --add-flags "$out/share/example.py"
makeWrapper $out/bin/xkeysnail $out/bin/xkeysnail-browser \
--add-flags "-q" --add-flags "$out/share/browser.py"
'';
meta = with lib; {
description = "Yet another keyboard remapping tool for X environment";
homepage = "https://github.com/mooz/xkeysnail";
platforms = platforms.linux;
license = licenses.gpl1Only;
maintainers = with maintainers; [ bb2020 ];
};
}

View file

@ -0,0 +1,35 @@
{ lib, stdenv, fetchFromGitHub, xorg, boost, gtest }:
stdenv.mkDerivation rec {
pname = "xlayoutdisplay";
version = "1.3.0";
src = fetchFromGitHub {
owner = "alex-courtis";
repo = pname;
rev = "v${version}";
sha256 = "sha256-8K9SoZToJTk/sL4PC4Fcsu9XzGLYfNIZlbIyxc9jf84=";
};
buildInputs = with xorg; [ libX11 libXrandr libXcursor boost ];
checkInputs = [ gtest ];
doCheck = true;
checkTarget = "gtest";
# Fixup reference to hardcoded boost path, dynamically link as seems fine and we don't have static for this
postPatch = ''
substituteInPlace config.mk --replace '/usr/lib/libboost_program_options.a' '-lboost_program_options'
'';
makeFlags = [ "PREFIX=${placeholder "out"}" ];
enableParallelBuilding = true;
meta = with lib; {
description = "Detects and arranges linux display outputs, using XRandR for detection and xrandr for arrangement";
homepage = "https://github.com/alex-courtis/xlayoutdisplay";
maintainers = with maintainers; [ dtzWill ];
license = licenses.asl20;
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,88 @@
{ lib, stdenv
, fetchurl
, libX11
, libXt
, libjpeg ? null
, libpng ? null
, libtiff ? null
, withJpegSupport ? true
, withPngSupport ? true
, withTiffSupport ? true
}:
assert withJpegSupport -> libjpeg != null;
assert withPngSupport -> libpng != null;
assert withTiffSupport -> libtiff != null;
let
deb_patch = "25";
in
stdenv.mkDerivation rec {
version = "4.1";
pname = "xloadimage";
src = fetchurl {
url = "mirror://debian/pool/main/x/xloadimage/xloadimage_${version}.orig.tar.gz";
sha256 = "1i7miyvk5ydhi6yi8593vapavhwxcwciir8wg9d2dcyg9pccf2s0";
};
patches = fetchurl {
url = "mirror://debian/pool/main/x/xloadimage/xloadimage_${version}-${deb_patch}.debian.tar.xz";
sha256 = "17k518vrdrya5c9dqhpmm4g0h2vlkq1iy87sg2ngzygypbli1xvn";
};
buildInputs = [
libX11 libXt
] ++ lib.optionals withJpegSupport [
libjpeg
] ++ lib.optionals withPngSupport [
libpng
] ++ lib.optionals withTiffSupport [
libtiff
];
# NOTE: we patch the build-info script so that it never detects the utilities
# it's trying to find; one of the Debian patches adds support for
# $SOURCE_DATE_EPOCH, but we want to make sure we don't even call these.
preConfigure = ''
substituteInPlace build-info \
--replace '[ -x /bin/date ]' 'false' \
--replace '[ -x /bin/id ]' 'false' \
--replace '[ -x /bin/uname ]' 'false' \
--replace '[ -x /usr/bin/id ]' 'false'
chmod +x build-info configure
'';
enableParallelBuilding = true;
# NOTE: we're not installing the `uufilter` binary; if needed, the standard
# `uudecode` tool should work just fine.
installPhase = ''
install -Dm755 xloadimage $out/bin/xloadimage
ln -sv $out/bin/{xloadimage,xsetbg}
install -D -m644 xloadimagerc $out/etc/xloadimagerc.example
install -D -m644 xloadimage.man $out/share/man/man1/xloadimage.1x
ln -sv $out/share/man/man1/{xloadimage,xsetbg}.1x
'';
meta = {
description = "Graphics file viewer under X11";
longDescription = ''
Can view png, jpeg, gif, tiff, niff, sunraster, fbm, cmuraster, pbm,
faces, rle, xwd, vff, mcidas, vicar, pcx, gem, macpaint, xpm and xbm
files. Can view images, put them on the root window, or dump them. Does a
variety of processing, including: clipping, dithering, depth reduction,
zoom, brightening/darkening and merging.
'';
license = lib.licenses.gpl2Plus;
maintainers = with lib.maintainers; [ andrew-d ];
platforms = lib.platforms.linux; # arbitrary choice
};
}

View file

@ -0,0 +1,20 @@
{ lib, stdenv, fetchurl, libX11, libXtst, xorgproto, libXi }:
stdenv.mkDerivation rec {
pname = "xmacro";
version = "0.4.6";
src = fetchurl {
url = "http://download.sarine.nl/xmacro/${pname}-${version}.tar.gz";
sha256 = "1p9jljxyn4j6piljiyi2xv6f8jhjbzhabprp8p0qmqxaxgdipi61";
};
preInstall = "echo -e 'install:\n mkdir \${out}/bin;\n cp xmacrorec2 xmacroplay \${out}/bin;' >>Makefile; ";
buildInputs = [ libX11 libXtst xorgproto libXi ];
meta = {
platforms = lib.platforms.linux;
license = lib.licenses.gpl2;
};
}

View file

@ -0,0 +1,26 @@
{ lib, stdenv, fetchFromGitLab, libX11, xorgproto }:
stdenv.mkDerivation rec {
pname = "xmagnify";
version = "0.1.0";
src = fetchFromGitLab {
owner = "amiloradovsky";
repo = "magnify";
rev = version;
sha256 = "1ngnp5f5zl3v35vhbdyjpymy6mwrs0476fm5nd7dzkba7n841jdh";
};
prePatch = "substituteInPlace ./Makefile --replace /usr $out";
buildInputs = [ libX11 xorgproto ];
meta = with lib; {
description = "Tiny screen magnifier for X11";
homepage = "https://gitlab.com/amiloradovsky/magnify";
license = licenses.mit; # or GPL2+, optionally
maintainers = with maintainers; [ amiloradovsky ];
mainProgram = "magnify";
platforms = platforms.all;
};
}

View file

@ -0,0 +1,21 @@
{ xorg, lib, stdenv, libev, fetchFromGitHub, pkg-config }:
stdenv.mkDerivation rec {
pname = "xmousepasteblock";
version = "1.0";
src = fetchFromGitHub {
owner = "milaq";
repo = "XMousePasteBlock";
sha256 = "0vidckfp277cg2gsww8a8q5b18m10iy4ppyp2qipr89771nrcmns";
rev = version;
};
makeFlags = "PREFIX=$(out)";
buildInputs = with xorg; [ libX11 libXext libXi libev ];
nativeBuildInputs = [ pkg-config ];
meta = with lib; {
description = "Middle mouse button primary X selection/clipboard paste disabler";
homepage = "https://github.com/milaq/XMousePasteBlock";
license = lib.licenses.gpl2;
maintainers = [ maintainers.petercommand ];
};
}

View file

@ -0,0 +1,71 @@
{ fetchurl, fetchpatch, lib, stdenv, libX11, xorgproto, libXext, libXtst
, gtk2, libXi, pkg-config, texinfo }:
stdenv.mkDerivation rec {
version = "3.19";
pname = "xnee";
src = fetchurl {
url = "mirror://gnu/xnee/${pname}-${version}.tar.gz";
sha256 = "04n2lac0vgpv8zsn7nmb50hf3qb56pmj90dmwnivg09gyrf1x92j";
};
patches = [
# Pull fix pending upstream inclusion for -fno-common
# toolchain support: https://savannah.gnu.org/bugs/?58810
(fetchpatch {
name = "fno-common.patch";
url = "https://savannah.gnu.org/bugs/download.php?file_id=49534";
sha256 = "04j2cjy2yaiigg31a6k01vw0fq19yj3zpriikkjcz9q4ab4m5gh2";
})
];
postPatch =
'' for i in `find cnee/test -name \*.sh`
do
sed -i "$i" -e's|/bin/bash|${stdenv.shell}|g ; s|/usr/bin/env bash|${stdenv.shell}|g'
done
# Fix for glibc-2.34. For some reason, `LIBSEMA="CCC"` is added
# if `sem_init` is part of libc which causes errors like
# `gcc: error: CCC: No such file or directory` during the build.
substituteInPlace configure \
--replace 'LIBSEMA="CCC"' 'LIBSEMA=""'
'';
buildInputs =
[ libX11 xorgproto libXext libXtst gtk2
libXi pkg-config
texinfo
];
configureFlags =
# Do a static build because `libxnee' doesn't get installed anyway.
[ "--disable-gnome-applet" "--enable-static" ];
# `cnee' is linked without `-lXi' and as a consequence has a RUNPATH that
# lacks libXi.
makeFlags = [ "LDFLAGS=-lXi" ];
# XXX: Actually tests require an X server.
doCheck = true;
meta = {
description = "X11 event recording and replay tool";
longDescription =
'' Xnee is a suite of programs that can record, replay and distribute
user actions under the X11 environment. Think of it as a robot that
can imitate the job you just did. Xnee can be used to automate
tests, demonstrate programs, distribute actions, record & replay
"macros", retype a file.
'';
license = lib.licenses.gpl3Plus;
homepage = "https://www.gnu.org/software/xnee/";
maintainers = with lib.maintainers; [ ];
platforms = lib.platforms.gnu ++ lib.platforms.linux; # arbitrary choice
};
}

View file

@ -0,0 +1,35 @@
{ lib, stdenv, fetchFromGitHub, pkg-config, xorg, libconfig }:
stdenv.mkDerivation rec {
pname = "xob";
version = "0.3";
src = fetchFromGitHub {
owner = "florentc";
repo = pname;
rev = "v${version}";
sha256 = "1x4aafiyd9k4y8cmvn7rgfif3g5s5hhlbj5nz71qsyqg21nn7hrw";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ xorg.libX11 xorg.libXrender libconfig ];
makeFlags = [ "prefix=$(out)" ];
meta = with lib; {
description = "A lightweight overlay bar for the X Window System";
longDescription = ''
A lightweight configurable overlay volume/backlight/progress/anything bar
for the X Window System (and Wayland compositors with XWayland). Each
time a new value is read on the standard input, it is displayed as a
tv-like bar over other windows. It then vanishes after a configurable
amount of time. A value followed by a bang '!' is displayed using an
alternate color to account for special states (e.g. muted audio). There
is also support for overflows (when the value exceeds the maximum).
'';
inherit (src.meta) homepage;
license = licenses.gpl3Plus;
platforms = platforms.unix;
maintainers = with maintainers; [ florentc ];
};
}

View file

@ -0,0 +1,41 @@
{ lib, stdenv, fetchurl, libX11 }:
stdenv.mkDerivation rec {
pname = "xosview2";
version = "2.3.2";
src = fetchurl {
url = "mirror://sourceforge/xosview/${pname}-${version}.tar.gz";
sha256 = "sha256-ex1GDBgx9Zzx5tOkZ2IRYskmBh/bUYpRTXHWRoE30vA=";
};
# The software failed to buid with this enabled; it seemed tests were not implemented
doCheck = false;
buildInputs = [ libX11 ];
meta = with lib; {
description = "Lightweight program that gathers information from your operating system and displays it in graphical form";
longDescription = ''
xosview is a lightweight program that gathers information from your
operating system and displays it in graphical form. It attempts to show
you in a quick glance an overview of how your system resources are being
utilized.
It can be configured to be nothing more than a small strip showing a
couple of parameters on a desktop task bar. Or it can display dozens of
meters and rolling graphical charts over your entire screen.
Since xosview renders all graphics with core X11 drawing methods, you can
run it on one machine and display it on another. This works even if your
other host is an operating system not running an X server inside a
virtual machine running on a physically different host. If you can
connect to it on a network, then you can popup an xosview instance and
monitor what is going on.
'';
homepage = "http://xosview.sourceforge.net/index.html";
license = with licenses; [ gpl2 bsdOriginal ];
maintainers = [ maintainers.SeanZicari ];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,30 @@
{ lib
, stdenv
, xorg
, pkg-config
, fetchFromGitHub
, autoreconfHook
}:
stdenv.mkDerivation rec {
pname = "xplugd";
version = "1.4";
src = fetchFromGitHub {
owner = "troglobit";
repo = "xplugd";
rev = "v${version}";
sha256 = "11vjr69prrs4ir9c267zwq4g9liipzrqi0kmw1zg95dbn7r7zmql";
};
buildInputs = with xorg; [ libX11 libXi libXrandr libXext ];
nativeBuildInputs = [ pkg-config autoreconfHook ];
meta = with lib; {
homepage = "https://github.com/troglobit/xplugd";
description = "A UNIX daemon that executes a script on X input and RandR changes";
license = licenses.mit;
platforms = platforms.linux;
maintainers = with maintainers; [ akho ];
};
}

View file

@ -0,0 +1,22 @@
{ lib, stdenv, xorg, fetchgit }:
stdenv.mkDerivation rec {
pname = "xpointerbarrier";
version = "18.06";
src = fetchgit {
url = "https://www.uninformativ.de/git/xpointerbarrier.git";
rev = "v${version}";
sha256 = "1k7i641x18qhjm0llsaqn2h2g9k31kgv6p8sildllmbvgxyrgvq7";
};
buildInputs = [ xorg.libX11 xorg.libXfixes xorg.libXrandr ];
makeFlags = [ "prefix=$(out)" ];
meta = {
homepage = "https://uninformativ.de/git/xpointerbarrier";
description = "Create X11 pointer barriers around your working area";
license = lib.licenses.mit;
maintainers = [ lib.maintainers.xzfc ];
platforms = lib.platforms.linux;
};
}

View file

@ -0,0 +1,96 @@
--- a/src/dummy.h 2016-12-17 23:02:53.396287041 +0100
+++ b/src/dummy.h 2016-12-17 23:03:30.319616550 +0100
@@ -51,6 +51,7 @@
/* options */
OptionInfoPtr Options;
Bool swCursor;
+ Bool constantDPI;
/* proc pointer */
CloseScreenProcPtr CloseScreen;
xf86CursorInfoPtr CursorInfo;
--- a/src/dummy_driver.c 2016-12-14 21:54:20.000000000 +0100
+++ b/src/dummy_driver.c 2016-12-17 23:04:59.916416126 +0100
@@ -17,6 +17,12 @@
/* All drivers using the mi colormap manipulation need this */
#include "micmap.h"
+#ifdef RANDR
+#include "randrstr.h"
+#endif
+
+#include "windowstr.h"
+
/* identifying atom needed by magnifiers */
#include <X11/Xatom.h>
#include "property.h"
@@ -115,11 +121,15 @@
};
typedef enum {
- OPTION_SW_CURSOR
+ OPTION_SW_CURSOR,
+ OPTION_CONSTANT_DPI
} DUMMYOpts;
static const OptionInfoRec DUMMYOptions[] = {
{ OPTION_SW_CURSOR, "SWcursor", OPTV_BOOLEAN, {0}, FALSE },
+#ifdef RANDR
+ { OPTION_CONSTANT_DPI, "ConstantDPI", OPTV_BOOLEAN, {0}, FALSE },
+#endif
{ -1, NULL, OPTV_NONE, {0}, FALSE }
};
@@ -359,6 +369,7 @@
xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, dPtr->Options);
xf86GetOptValBool(dPtr->Options, OPTION_SW_CURSOR,&dPtr->swCursor);
+ xf86GetOptValBool(dPtr->Options, OPTION_CONSTANT_DPI, &dPtr->constantDPI);
if (device->videoRam != 0) {
pScrn->videoRam = device->videoRam;
@@ -639,10 +650,45 @@
return TRUE;
}
+const char *XDPY_PROPERTY = "dummy-constant-xdpi";
+const char *YDPY_PROPERTY = "dummy-constant-ydpi";
+static int get_dpi_value(WindowPtr root, const char *property_name, int default_dpi)
+{
+ PropertyPtr prop;
+ Atom type_atom = MakeAtom("CARDINAL", 8, TRUE);
+ Atom prop_atom = MakeAtom(property_name, strlen(property_name), FALSE);
+
+ for (prop = wUserProps(root); prop; prop = prop->next) {
+ if (prop->propertyName == prop_atom && prop->type == type_atom && prop->data) {
+ int v = (int) (*((CARD32 *) prop->data));
+ if ((v>0) && (v<4096)) {
+ xf86DrvMsg(0, X_INFO, "get_constant_dpi_value() found property \"%s\" with value=%i\n", property_name, (int) v);
+ return (int) v;
+ }
+ break;
+ }
+ }
+ return default_dpi;
+}
+
/* Mandatory */
Bool
DUMMYSwitchMode(SWITCH_MODE_ARGS_DECL)
{
+ SCRN_INFO_PTR(arg);
+#ifdef RANDR
+ DUMMYPtr dPtr = DUMMYPTR(pScrn);
+ if (dPtr->constantDPI) {
+ int xDpi = get_dpi_value(pScrn->pScreen->root, XDPY_PROPERTY, pScrn->xDpi);
+ int yDpi = get_dpi_value(pScrn->pScreen->root, YDPY_PROPERTY, pScrn->yDpi);
+ //25.4 mm per inch: (254/10)
+ pScrn->pScreen->mmWidth = mode->HDisplay * 254 / xDpi / 10;
+ pScrn->pScreen->mmHeight = mode->VDisplay * 254 / yDpi / 10;
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "mm(dpi %ix%i)=%ix%i\n", xDpi, yDpi, pScrn->pScreen->mmWidth, pScrn->pScreen->mmHeight);
+ RRScreenSizeNotify(pScrn->pScreen);
+ RRTellChanged(pScrn->pScreen);
+ }
+#endif
return TRUE;
}

View file

@ -0,0 +1,39 @@
--- xf86-video-dummy-0.3.6/src/dummy_driver.c 2014-11-05 19:24:02.668656601 +0700
+++ xf86-video-dummy-0.3.6.new/src/dummy_driver.c 2014-11-05 19:37:53.076061853 +0700
@@ -55,6 +55,9 @@
#include <X11/extensions/xf86dgaproto.h>
#endif
+/* Needed for fixing pointer limits on resize */
+#include "inputstr.h"
+
/* Mandatory functions */
static const OptionInfoRec * DUMMYAvailableOptions(int chipid, int busid);
static void DUMMYIdentify(int flags);
@@ -713,6 +716,26 @@
RRTellChanged(pScrn->pScreen);
}
#endif
+ //ensure the screen dimensions are also updated:
+ pScrn->pScreen->width = mode->HDisplay;
+ pScrn->pScreen->height = mode->VDisplay;
+ pScrn->virtualX = mode->HDisplay;
+ pScrn->virtualY = mode->VDisplay;
+ pScrn->frameX1 = mode->HDisplay;
+ pScrn->frameY1 = mode->VDisplay;
+
+ //ensure the pointer uses the new limits too:
+ DeviceIntPtr pDev;
+ SpritePtr pSprite;
+ for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
+ if (pDev->spriteInfo!=NULL && pDev->spriteInfo->sprite!=NULL) {
+ pSprite = pDev->spriteInfo->sprite;
+ pSprite->hotLimits.x2 = mode->HDisplay;
+ pSprite->hotLimits.y2 = mode->VDisplay;
+ pSprite->physLimits.x2 = mode->HDisplay;
+ pSprite->physLimits.y2 = mode->VDisplay;
+ }
+ }
return TRUE;
}

View file

@ -0,0 +1,41 @@
--- a/src/dummy.h 2016-12-17 23:33:33.279533389 +0100
+++ b/src/dummy.h 2016-12-17 23:33:56.695739166 +0100
@@ -69,7 +69,7 @@
int overlay_offset;
int videoKey;
int interlace;
- dummy_colors colors[256];
+ dummy_colors colors[1024];
pointer* FBBase;
Bool (*CreateWindow)() ; /* wrapped CreateWindow */
Bool prop;
--- a/src/dummy_driver.c 2016-12-17 23:33:47.446657886 +0100
+++ b/src/dummy_driver.c 2016-12-17 23:33:56.696739175 +0100
@@ -317,6 +317,7 @@
case 15:
case 16:
case 24:
+ case 30:
break;
default:
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
@@ -331,8 +332,8 @@
pScrn->rgbBits = 8;
/* Get the depth24 pixmap format */
- if (pScrn->depth == 24 && pix24bpp == 0)
- pix24bpp = xf86GetBppFromDepth(pScrn, 24);
+ if (pScrn->depth >= 24 && pix24bpp == 0)
+ pix24bpp = xf86GetBppFromDepth(pScrn, pScrn->depth);
/*
* This must happen after pScrn->display has been set because
@@ -623,7 +624,7 @@
if(!miCreateDefColormap(pScreen))
return FALSE;
- if (!xf86HandleColormaps(pScreen, 256, pScrn->rgbBits,
+ if (!xf86HandleColormaps(pScreen, 1024, pScrn->rgbBits,
DUMMYLoadPalette, NULL,
CMAP_PALETTED_TRUECOLOR
| CMAP_RELOAD_ON_MODE_SWITCH))

View file

@ -0,0 +1,211 @@
{ lib
, fetchurl
, substituteAll
, pkg-config
, runCommand
, writeText
, wrapGAppsHook
, withNvenc ? false
, atk
, cairo
, cudatoolkit
, ffmpeg
, gdk-pixbuf
, getopt
, glib
, gobject-introspection
, gst_all_1
, gtk3
, libfakeXinerama
, librsvg
, libvpx
, libwebp
, nv-codec-headers-10
, nvidia_x11 ? null
, pam
, pandoc
, pango
, pulseaudio
, python3
, util-linux
, which
, x264
, x265
, xauth
, xorg
, xorgserver
}:
with lib;
let
inherit (python3.pkgs) cython buildPythonApplication;
xf86videodummy = xorg.xf86videodummy.overrideDerivation (p: {
patches = [
# patch provided by Xpra upstream
./0002-Constant-DPI.patch
# https://github.com/Xpra-org/xpra/issues/349
./0003-fix-pointer-limits.patch
# patch provided by Xpra upstream
./0005-support-for-30-bit-depth-in-dummy-driver.patch
];
});
xorgModulePaths = writeText "module-paths" ''
Section "Files"
ModulePath "${xorgserver}/lib/xorg/modules"
ModulePath "${xorgserver}/lib/xorg/modules/extensions"
ModulePath "${xorgserver}/lib/xorg/modules/drivers"
ModulePath "${xf86videodummy}/lib/xorg/modules/drivers"
EndSection
'';
nvencHeaders = runCommand "nvenc-headers" {
inherit nvidia_x11;
} ''
mkdir -p $out/include $out/lib/pkgconfig
cp ${nv-codec-headers-10}/include/ffnvcodec/nvEncodeAPI.h $out/include
substituteAll ${./nvenc.pc} $out/lib/pkgconfig/nvenc.pc
'';
in buildPythonApplication rec {
pname = "xpra";
version = "4.3.3";
src = fetchurl {
url = "https://xpra.org/src/${pname}-${version}.tar.xz";
hash = "sha256-J6zzkho0A1faCVzS/0wDlbgLtJmyPrnBkEcR7kDld7A=";
};
patches = [
(substituteAll { # correct hardcoded paths
src = ./fix-paths.patch;
inherit libfakeXinerama;
})
./fix-41106.patch # https://github.com/NixOS/nixpkgs/issues/41106
./fix-122159.patch # https://github.com/NixOS/nixpkgs/issues/122159
];
INCLUDE_DIRS = "${pam}/include";
nativeBuildInputs = [
pkg-config
wrapGAppsHook
pandoc
] ++ lib.optional withNvenc cudatoolkit;
buildInputs = with xorg; [
libX11
libXcomposite
libXdamage
libXfixes
libXi
libxkbfile
libXrandr
libXrender
libXres
libXtst
xorgproto
] ++ (with gst_all_1; [
gst-libav
gst-plugins-bad
gst-plugins-base
gst-plugins-good
gstreamer
]) ++ [
atk.out
cairo
cython
ffmpeg
gdk-pixbuf
glib
gobject-introspection
gtk3
librsvg
libvpx
libwebp
pam
pango
x264
x265
] ++ lib.optional withNvenc nvencHeaders;
propagatedBuildInputs = with python3.pkgs; ([
cryptography
dbus-python
gst-python
idna
lz4
netifaces
numpy
opencv4
pam
paramiko
pillow
pycairo
pycrypto
pycups
pygobject3
pyinotify
pyopengl
python-uinput
pyxdg
rencode
] ++ lib.optionals withNvenc [
pycuda
pynvml
]);
# error: 'import_cairo' defined but not used
NIX_CFLAGS_COMPILE = "-Wno-error=unused-function";
setupPyBuildFlags = [
"--with-Xdummy"
"--without-Xdummy_wrapper"
"--without-strict"
"--with-gtk3"
# Override these, setup.py checks for headers in /usr/* paths
"--with-pam"
"--with-vsock"
] ++ lib.optional withNvenc "--with-nvenc";
dontWrapGApps = true;
preFixup = ''
makeWrapperArgs+=(
"''${gappsWrapperArgs[@]}"
--set XPRA_INSTALL_PREFIX "$out"
--set XPRA_COMMAND "$out/bin/xpra"
--set XPRA_XKB_CONFIG_ROOT "${xorg.xkeyboardconfig}/share/X11/xkb"
--set XORG_CONFIG_PREFIX ""
--prefix LD_LIBRARY_PATH : ${libfakeXinerama}/lib
--prefix PATH : ${lib.makeBinPath [ getopt xorgserver xauth which util-linux pulseaudio ]}
'' + lib.optionalString withNvenc ''
--prefix LD_LIBRARY_PATH : ${nvidia_x11}/lib
'' + ''
)
'';
# append module paths to xorg.conf
postInstall = ''
cat ${xorgModulePaths} >> $out/etc/xpra/xorg.conf
'';
doCheck = false;
enableParallelBuilding = true;
passthru = {
inherit xf86videodummy;
updateScript = ./update.sh;
};
meta = {
homepage = "https://xpra.org/";
downloadPage = "https://xpra.org/src/";
description = "Persistent remote applications for X";
platforms = platforms.linux;
license = licenses.gpl2;
maintainers = with maintainers; [ tstrobel offline numinit mvnetbiz ];
};
}

View file

@ -0,0 +1,16 @@
diff --git a/xpra/scripts/main.py b/xpra/scripts/main.py
index 6def9e0ad..031f8aba9 100755
--- a/xpra/scripts/main.py
+++ b/xpra/scripts/main.py
@@ -364,11 +364,7 @@ def run_mode(script_file, cmdline, error_cb, options, args, mode, defaults):
"shadow",
) and not display_is_remote:
if use_systemd_run(options.systemd_run):
- #make sure we run via the same interpreter,
- #inject it into the command line if we have to:
argv = list(cmdline)
- if argv[0].find("python")<0:
- argv.insert(0, "python%i.%i" % (sys.version_info.major, sys.version_info.minor))
return systemd_run_wrap(mode, argv, options.systemd_run_args)
configure_env(options.env)
configure_logging(options, mode)

Some files were not shown because too many files have changed in this diff Show more