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;
|
||||
};
|
||||
|
||||
arcan = recurseIntoAttrs (callPackage ../desktops/arcan {
|
||||
callPackage = newScope pkgs.arcan;
|
||||
});
|
||||
|
||||
xfce = recurseIntoAttrs (callPackage ../desktops/xfce { });
|
||||
|
||||
xrandr-invert-colors = callPackage ../applications/misc/xrandr-invert-colors { };
|
||||
|
Loading…
Reference in New Issue
Block a user