Merge pull request #128970 from AndersonTorres/new-arcan

Arcan environment
This commit is contained in:
Anderson Torres 2021-07-08 15:09:28 -03:00 committed by GitHub
commit ad9a2ed50f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 467 additions and 0 deletions

View File

@ -0,0 +1,157 @@
{ lib
, stdenv
, fetchFromGitHub
, SDL2
, cmake
, espeak
, ffmpeg
, file
, freetype
, harfbuzz
, leptonica
, libGL
, libX11
, libXau
, libXcomposite
, libXdmcp
, libXfixes
, libdrm
, libffi
, libusb1
, libuvc
, libvlc
, libvncserver
, libxcb
, libxkbcommon
, luajit
, makeWrapper
, mesa
, openal
, pkg-config
, sqlite
, tesseract
, valgrind
, wayland
, wayland-protocols
, xcbutil
, xcbutilwm
, xz
, buildManPages ? true, ruby
}:
let
# TODO: investigate vendoring, especially OpenAL
# WARN: vendoring of OpenAL is required for running arcan_lwa
# INFO: maybe it needs leaveDotGit, but it is dangerous/impure
letoram-openal-src = fetchFromGitHub {
owner = "letoram";
repo = "openal";
rev = "1c7302c580964fee9ee9e1d89ff56d24f934bdef";
hash = "sha256-InqU59J0zvwJ20a7KU54xTM7d76VoOlFbtj7KbFlnTU=";
};
in
stdenv.mkDerivation rec {
pname = "arcan";
version = "0.6.1pre1+unstable=2021-07-07";
src = fetchFromGitHub {
owner = "letoram";
repo = "arcan";
rev = "f3341ab94b32d02f3d15c3b91a512b2614e950a5";
hash = "sha256-YBtRA5uCk4tjX3Bsu5vMkaNaCLRlM6HVQ53sna3gDsY=";
};
postUnpack = ''
(
cd $sourceRoot/external/git/
cp -a ${letoram-openal-src}/ openal/
chmod --recursive 744 openal/
)
'';
# TODO: work with upstream in order to get rid of these hardcoded paths
postPatch = ''
substituteInPlace ./src/platform/posix/paths.c \
--replace "/usr/bin" "$out/bin" \
--replace "/usr/share" "$out/share"
substituteInPlace ./src/CMakeLists.txt --replace "SETUID" "# SETUID"
'';
nativeBuildInputs = [
cmake
makeWrapper
pkg-config
] ++ lib.optionals buildManPages [
ruby
];
buildInputs = [
SDL2
espeak
ffmpeg
file
freetype
harfbuzz
leptonica
libGL
libX11
libXau
libXcomposite
libXdmcp
libXfixes
libdrm
libffi
libusb1
libuvc
libvlc
libvncserver
libxcb
libxkbcommon
luajit
mesa
openal
sqlite
tesseract
valgrind
wayland
wayland-protocols
xcbutil
xcbutilwm
xz
];
# INFO: According to the source code, the manpages need to be generated before
# the configure phase
preConfigure = lib.optionalString buildManPages ''
(cd doc; ruby docgen.rb mangen)
'';
cmakeFlags = [
"-DBUILD_PRESET=everything"
# The upstream project recommends tagging the distribution
"-DDISTR_TAG=Nixpkgs"
"-DENGINE_BUILDTAG=${version}"
"-DHYBRID_SDL=on"
"-DSTATIC_OPENAL=off"
"../src"
];
hardeningDisable = [
"format"
];
meta = with lib; {
homepage = "https://arcan-fe.com/";
description = "Combined Display Server, Multimedia Framework, Game Engine";
longDescription = ''
Arcan is a portable and fast self-sufficient multimedia engine for
advanced visualization and analysis work in a wide range of applications
e.g. game development, real-time streaming video, monitoring and
surveillance, up to and including desktop compositors and window managers.
'';
license = with licenses; [ bsd3 gpl2Plus lgpl2Plus ];
maintainers = with maintainers; [ AndersonTorres ];
platforms = platforms.unix;
};
}

View File

@ -0,0 +1,42 @@
{ callPackage, lib, pkgs }:
rec {
# Dependencies
espeak = pkgs.espeak-ng;
ffmpeg = pkgs.ffmpeg-full;
harfbuzz = pkgs.harfbuzzFull;
# Arcan
arcan = callPackage ./arcan.nix { };
arcan-wrapped = callPackage ./wrapper.nix { };
xarcan = callPackage ./xarcan.nix { };
# Appls
durden = callPackage ./durden.nix { };
durden-wrapped = callPackage ./wrapper.nix {
name = "durden-wrapped";
appls = [ durden ];
};
pipeworld = callPackage ./pipeworld.nix { };
pipeworld-wrapped = callPackage ./wrapper.nix {
name = "pipeworld-wrapped";
appls = [ pipeworld ];
};
prio = callPackage ./prio.nix { };
prio-wrapped = callPackage ./wrapper.nix {
name = "prio-wrapped";
appls = [ prio ];
};
# One Expression to SymlinkJoin Them All
everyone-wrapped = callPackage ./wrapper.nix {
name = "everyone-wrapped";
appls = [ durden pipeworld prio ];
};
}

View File

@ -0,0 +1,39 @@
{ lib
, stdenv
, fetchFromGitHub
}:
stdenv.mkDerivation rec {
pname = "durden";
version = "0.6.1+unstable=2021-06-25";
src = fetchFromGitHub {
owner = "letoram";
repo = pname;
rev = "fb618fccc57a68b6ce933b4df5822acd1965d591";
hash = "sha256-PovI837Xca4wV0g0s4tYUMFGVUDf+f8HcdvM1+0aDxk=";
};
installPhase = ''
runHook preInstall
mkdir -p ${placeholder "out"}/share/arcan/appl/
cp -a ./durden ${placeholder "out"}/share/arcan/appl/
runHook postInstall
'';
meta = with lib; {
homepage = "https://durden.arcan-fe.com/";
description = "Reference Desktop Environment for Arcan";
longDescription = ''
Durden is a desktop environment for the Arcan Display Server. It serves
both as a reference showcase on how to take advantage of some of the
features in Arcan, and as a very competent entry to the advanced-user side
of the desktop environment spectrum.
'';
license = licenses.bsd3;
maintainers = with maintainers; [ AndersonTorres ];
platforms = platforms.all;
};
}

View File

@ -0,0 +1,46 @@
{ lib
, stdenv
, fetchFromGitHub
}:
stdenv.mkDerivation rec {
pname = "pipeworld";
version = "0.0.0+unstable=2021-05-27";
src = fetchFromGitHub {
owner = "letoram";
repo = pname;
rev = "c26df9ca0225ce2fd4f89e7ec59d4ab1f94a4c2e";
hash = "sha256-RkDAbM1q4o61RGPLPLXHLvbvClp+bfjodlWgUGoODzA=";
};
installPhase = ''
runHook preInstall
mkdir -p ${placeholder "out"}/share/arcan/appl/
cp -a ./pipeworld ${placeholder "out"}/share/arcan/appl/
runHook postInstall
'';
meta = with lib; {
homepage = "https://github.com/letoram/pipeworld";
description = "Dataflow 'spreadsheet' desktop environment";
longDescription = ''
Pipeworld is a zooming dataflow tool and desktop heavily inspired by
userland. It is built using the arcan desktop engine.
It combines the programmable processing of shell scripts and pipes, the
interactive visual addressing/programming model of spread sheets, the
scenegraph- and interactive controls-, IPC- and client processing- of
display servers into one model with zoomable tiling window management.
It can be used as a standalone desktop of its own, or as a normal
application within another desktop as a 'substitute' for your normal
terminal emulator.
'';
license = licenses.bsd3;
maintainers = with maintainers; [ AndersonTorres ];
platforms = platforms.all;
};
}

View File

@ -0,0 +1,33 @@
{ lib
, stdenv
, fetchFromGitHub
}:
stdenv.mkDerivation rec {
pname = "prio";
version = "0.0.0+unstable=2018-09-13";
src = fetchFromGitHub {
owner = "letoram";
repo = pname;
rev = "c3f97491339d15f063d6937d5f89bcfaea774dd1";
hash = "sha256-Idv/duEYmDk/rO+TI8n+FY3VFDtUEh8C292jh12BJuM=";
};
installPhase = ''
runHook preInstall
mkdir -p ${placeholder "out"}/share/arcan/appl/prio
cp -a ./* ${placeholder "out"}/share/arcan/appl/prio
runHook postInstall
'';
meta = with lib; {
homepage = "https://github.com/letoram/prio";
description = "Plan9- Rio like Window Manager for Arcan";
license = licenses.bsd3;
maintainers = with maintainers; [ AndersonTorres ];
platforms = platforms.all;
};
}

View File

@ -0,0 +1,28 @@
{ arcan
, makeWrapper
, symlinkJoin
, appls ? [ ]
, name ? "arcan-wrapped"
}:
symlinkJoin rec {
inherit name;
paths = appls ++ [ arcan ];
nativeBuildInputs = [ makeWrapper ];
postBuild = ''
for prog in ${placeholder "out"}/bin/*; do
wrapProgram $prog \
--prefix PATH ":" "${placeholder "out"}/bin" \
--set ARCAN_APPLBASEPATH "${placeholder "out"}/share/arcan/appl/" \
--set ARCAN_BINPATH "${placeholder "out"}/bin/arcan_frameserver" \
--set ARCAN_LIBPATH "${placeholder "out"}/lib/" \
--set ARCAN_RESOURCEPATH "${placeholder "out"}/share/arcan/resources/" \
--set ARCAN_SCRIPTPATH "${placeholder "out"}/share/arcan/scripts/" \
--set ARCAN_STATEBASEPATH "$HOME/.arcan/resources/savestates/"
done
'';
}
# TODO: set ARCAN_FONTPATH to a set of fonts that can be provided in a parameter

View File

@ -0,0 +1,118 @@
{ lib
, stdenv
, fetchFromGitHub
, arcan
, audit
, dbus
, epoxy
, fontutil
, libGL
, libX11
, libXau
, libXdmcp
, libXfont2
, libdrm
, libgcrypt
, libmd
, libselinux
, libtirpc
, libxcb
, libxkbfile
, libxshmfence
, mesa
, meson
, nettle
, ninja
, openssl
, pixman
, pkg-config
, systemd
, xcbutil
, xcbutilwm
, xkbcomp
, xkeyboard_config
, xorgproto
, xtrans
}:
stdenv.mkDerivation rec {
pname = "xarcan";
version = "0.6.0+unstable=2021-06-14";
src = fetchFromGitHub {
owner = "letoram";
repo = pname;
rev = "98d28a5f2c6860bb191fbc1c9e577c18e4c9a9b7";
hash = "sha256-UTIVDKnYD/q0K6G7NJUKh1tHcqnsuiJ/cQxWuPMJ2G4=";
};
nativeBuildInputs = [
meson
ninja
pkg-config
];
buildInputs = [
arcan
audit
dbus
epoxy
fontutil
libGL
libX11
libXau
libXdmcp
libXfont2
libdrm
libgcrypt
libmd
libselinux
libtirpc
libxcb
libxkbfile
libxshmfence
mesa
nettle
openssl
pixman
systemd
xcbutil
xcbutilwm
xkbcomp
xkeyboard_config
xorgproto
xtrans
];
configureFlags = [
"--disable-int10-module"
"--disable-static"
"--disable-xnest"
"--disable-xorg"
"--disable-xvfb"
"--disable-xwayland"
"--enable-glamor"
"--enable-glx"
"--enable-ipv6"
"--enable-kdrive"
"--enable-record"
"--enable-xarcan"
"--enable-xcsecurity"
"--with-xkb-bin-directory=${xkbcomp}/bin"
"--with-xkb-output=/tmp"
"--with-xkb-path=${xkeyboard_config}/share/X11/xkb"
];
meta = with lib; {
homepage = "https://github.com/letoram/letoram";
description = "Patched Xserver that bridges connections to Arcan";
longDescription = ''
xarcan is a patched X server with a KDrive backend that uses the
arcan-shmif to map Xlib/Xcb/X clients to a running arcan instance. It
allows running an X session as a window under Arcan.
'';
license = licenses.mit;
maintainers = with maintainers; [ AndersonTorres ];
platforms = platforms.all;
};
}

View File

@ -29600,6 +29600,10 @@ in
gtk = gtk2; gtk = gtk2;
}; };
arcan = recurseIntoAttrs (callPackage ../desktops/arcan {
callPackage = newScope pkgs.arcan;
});
xfce = recurseIntoAttrs (callPackage ../desktops/xfce { }); xfce = recurseIntoAttrs (callPackage ../desktops/xfce { });
xrandr-invert-colors = callPackage ../applications/misc/xrandr-invert-colors { }; xrandr-invert-colors = callPackage ../applications/misc/xrandr-invert-colors { };