Merge pull request #128970 from AndersonTorres/new-arcan
Arcan environment
This commit is contained in:
commit
ad9a2ed50f
157
pkgs/desktops/arcan/arcan.nix
Normal file
157
pkgs/desktops/arcan/arcan.nix
Normal 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;
|
||||||
|
};
|
||||||
|
}
|
42
pkgs/desktops/arcan/default.nix
Normal file
42
pkgs/desktops/arcan/default.nix
Normal 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 ];
|
||||||
|
};
|
||||||
|
}
|
39
pkgs/desktops/arcan/durden.nix
Normal file
39
pkgs/desktops/arcan/durden.nix
Normal 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;
|
||||||
|
};
|
||||||
|
}
|
46
pkgs/desktops/arcan/pipeworld.nix
Normal file
46
pkgs/desktops/arcan/pipeworld.nix
Normal 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;
|
||||||
|
};
|
||||||
|
}
|
33
pkgs/desktops/arcan/prio.nix
Normal file
33
pkgs/desktops/arcan/prio.nix
Normal 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;
|
||||||
|
};
|
||||||
|
}
|
28
pkgs/desktops/arcan/wrapper.nix
Normal file
28
pkgs/desktops/arcan/wrapper.nix
Normal 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
|
118
pkgs/desktops/arcan/xarcan.nix
Normal file
118
pkgs/desktops/arcan/xarcan.nix
Normal 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;
|
||||||
|
};
|
||||||
|
}
|
@ -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 { };
|
||||||
|
Loading…
Reference in New Issue
Block a user