Compare commits
11 Commits
92a019ce78
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| bbc73fc47e | |||
| ee1f72ff01 | |||
| fb5e1e2451 | |||
| c311013c0e | |||
| a1149682cb | |||
| 987029e6c8 | |||
| 104d0afbd2 | |||
| ac3834846f | |||
| 41c3ebec4b | |||
| feff32f4c0 | |||
| 706db3c704 |
@@ -6,6 +6,8 @@ Personal [NUR](https://github.com/nix-community/NUR) repository.
|
||||
|
||||
- **librepods**: LibrePods Linux app (Qt6) — AirPods controls and battery monitoring.
|
||||
- Upstream: `https://github.com/kavishdevar/librepods`
|
||||
- **looking-glass-client**: Looking Glass client.
|
||||
- Upstream: `https://github.com/gnif/LookingGlass`
|
||||
|
||||
## Usage
|
||||
|
||||
@@ -19,19 +21,15 @@ If you want to use this repo directly as a flake input:
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
my-nur.url = "github:<YOUR_GITHUB_USER>/nur-packages";
|
||||
chiasson.url = "git+https://git.chiasson.cloud/Olivier/nur-packages";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, my-nur, ... }:
|
||||
outputs = { self, nixpkgs, chiasson, ... }:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
overlays = [ my-nur.overlays.default ];
|
||||
};
|
||||
in
|
||||
{
|
||||
packages.${system}.default = pkgs.librepods;
|
||||
packages.${system}.default = chiasson.packages.${system}.librepods;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
# example-package = pkgs.callPackage ./pkgs/example-package { };
|
||||
librepods = pkgs.callPackage ./pkgs/librepods { };
|
||||
flow-browser-bin = pkgs.callPackage ./pkgs/flow-browser-bin { };
|
||||
looking-glass-client = pkgs.callPackage ./pkgs/looking-glass-client { };
|
||||
# some-qt5-package = pkgs.libsForQt5.callPackage ./pkgs/some-qt5-package { };
|
||||
# ...
|
||||
}
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
{ lib
|
||||
, appimageTools
|
||||
, fetchurl
|
||||
, runCommand
|
||||
, stdenv
|
||||
, mesa
|
||||
, vips
|
||||
}:
|
||||
|
||||
let
|
||||
pname = "flow-browser-bin";
|
||||
version = "0.8.6";
|
||||
|
||||
# Flow bundles `sharp`, which attempts to dlopen libvips with a filename that
|
||||
# includes the libvips version (e.g. libvips-cpp.so.8.17.3). Nixpkgs provides
|
||||
# libvips with a different SONAME-based filename (e.g. libvips-cpp.so.42.19.3),
|
||||
# so we provide compatibility symlinks in the FHS env.
|
||||
vipsSharpCompat = runCommand "flow-browser-vips-compat" { } ''
|
||||
mkdir -p $out/lib
|
||||
# Link to the SONAME symlinks provided by nixpkgs, so we don't hardcode the
|
||||
# 42.x.y patchlevel.
|
||||
ln -sf ${vips.out}/lib/libvips-cpp.so.42 $out/lib/libvips-cpp.so.8
|
||||
ln -sf ${vips.out}/lib/libvips.so.42 $out/lib/libvips.so.8
|
||||
|
||||
# `sharp` wants an exact libvips filename including patchlevel (observed in
|
||||
# Flow 0.8.6: libvips-cpp.so.8.17.3). Provide a small compatibility set:
|
||||
# - the version bundled with Flow (`8.17.3`)
|
||||
# - the current nixpkgs vips.version (helps when they match)
|
||||
for v in 8.17.3 ${vips.version}; do
|
||||
ln -sf ${vips.out}/lib/libvips-cpp.so.42 $out/lib/libvips-cpp.so.$v
|
||||
ln -sf ${vips.out}/lib/libvips.so.42 $out/lib/libvips.so.$v
|
||||
done
|
||||
'';
|
||||
|
||||
src =
|
||||
if stdenv.hostPlatform.system == "x86_64-linux" then
|
||||
fetchurl {
|
||||
url = "https://github.com/MultiboxLabs/flow-browser/releases/download/v${version}/flow-browser-${version}-x86_64.AppImage";
|
||||
sha256 = "1s4i419vlwgqzy8p73msb6djf6bbdk530inwc6hr7rwz611cf0gz";
|
||||
}
|
||||
else if stdenv.hostPlatform.system == "aarch64-linux" then
|
||||
fetchurl {
|
||||
url = "https://github.com/MultiboxLabs/flow-browser/releases/download/v${version}/flow-browser-${version}-arm64.AppImage";
|
||||
sha256 = "0n2cp0519z43z5aa6mc7xzrhp6mpfjl7fkls29hk6db4mzv6sfsn";
|
||||
}
|
||||
else
|
||||
throw "flow-browser-bin: unsupported system: ${stdenv.hostPlatform.system}";
|
||||
|
||||
appimageContents = appimageTools.extractType2 {
|
||||
inherit pname version src;
|
||||
};
|
||||
in
|
||||
appimageTools.wrapType2 {
|
||||
inherit pname version src;
|
||||
|
||||
extraPkgs = _pkgs: [
|
||||
vipsSharpCompat
|
||||
mesa
|
||||
];
|
||||
|
||||
# Ensure `sharp` can find libvips in the bubblewrapped FHS env.
|
||||
# (Relying on /usr/lib64 + ld.so cache can be flaky depending on the env.)
|
||||
profile = ''
|
||||
export LD_LIBRARY_PATH="${vipsSharpCompat}/lib''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
|
||||
|
||||
# Help Electron/ANGLE find GL/EGL drivers inside the FHS env.
|
||||
export LIBGL_DRIVERS_PATH="${mesa}/lib/dri"
|
||||
export __EGL_VENDOR_LIBRARY_DIRS="${mesa}/share/glvnd/egl_vendor.d''${__EGL_VENDOR_LIBRARY_DIRS:+:}$__EGL_VENDOR_LIBRARY_DIRS"
|
||||
'';
|
||||
|
||||
extraInstallCommands = ''
|
||||
# Desktop entry
|
||||
install -D -m 444 ${appimageContents}/Flow.desktop \
|
||||
$out/share/applications/flow-browser.desktop
|
||||
|
||||
substituteInPlace $out/share/applications/flow-browser.desktop \
|
||||
--replace-fail 'Exec=AppRun' "Exec=$out/bin/${pname}"
|
||||
|
||||
# Help launchers detect the binary without relying on PATH.
|
||||
if grep -q '^TryExec=' $out/share/applications/flow-browser.desktop; then
|
||||
sed -i "s|^TryExec=.*|TryExec=$out/bin/${pname}|" $out/share/applications/flow-browser.desktop
|
||||
else
|
||||
echo "TryExec=$out/bin/${pname}" >> $out/share/applications/flow-browser.desktop
|
||||
fi
|
||||
|
||||
# appimageTools.wrapType2 tends to name the wrapper with the version suffix
|
||||
# (e.g. flow-browser-bin-0.8.6). Provide a stable name for launchers/scripts.
|
||||
if [ -e "$out/bin/${pname}-${version}" ] && [ ! -e "$out/bin/${pname}" ]; then
|
||||
ln -s "$out/bin/${pname}-${version}" "$out/bin/${pname}"
|
||||
fi
|
||||
|
||||
# Keep the launcher name stable (avoid showing version suffixes in menus).
|
||||
if grep -q '^Name=' $out/share/applications/flow-browser.desktop; then
|
||||
sed -i 's/^Name=.*/Name=Flow/' $out/share/applications/flow-browser.desktop
|
||||
else
|
||||
echo 'Name=Flow' >> $out/share/applications/flow-browser.desktop
|
||||
fi
|
||||
|
||||
# Icon
|
||||
install -D -m 444 ${appimageContents}/usr/share/icons/hicolor/512x512/apps/Flow.png \
|
||||
$out/share/icons/hicolor/512x512/apps/flow-browser.png
|
||||
|
||||
substituteInPlace $out/share/applications/flow-browser.desktop \
|
||||
--replace-fail 'Icon=Flow' 'Icon=flow-browser'
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "A modern, privacy-focused browser with a minimalistic design (binary AppImage)";
|
||||
homepage = "https://github.com/multiboxlabs/flow-browser";
|
||||
license = lib.licenses.gpl3Only;
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
platforms = [ "x86_64-linux" "aarch64-linux" ];
|
||||
mainProgram = "flow-browser-bin";
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "librepods";
|
||||
version = "0.1.0";
|
||||
version = "0.2.0-alpha.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "kavishdevar";
|
||||
repo = "librepods";
|
||||
rev = "linux-v${version}";
|
||||
hash = "sha256-ZvHbSSW0rfcsNUORZURe0oBHQbnqmS5XT9ffVMwjIMU=";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-37dLiXC+eO4f5waLKgMMpHXH1m6W54O/l2axJsnyU5M=";
|
||||
};
|
||||
|
||||
sourceRoot = "${src.name}/linux";
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
{
|
||||
stdenv,
|
||||
lib,
|
||||
fetchFromGitHub,
|
||||
pkg-config,
|
||||
cmake,
|
||||
freefont_ttf,
|
||||
spice-protocol,
|
||||
nettle,
|
||||
libbfd,
|
||||
fontconfig,
|
||||
libffi,
|
||||
expat,
|
||||
libGL,
|
||||
nanosvg,
|
||||
libX11,
|
||||
libxkbcommon,
|
||||
libXext,
|
||||
libXrandr,
|
||||
libXi,
|
||||
libXScrnSaver,
|
||||
libXinerama,
|
||||
libXcursor,
|
||||
libXpresent,
|
||||
libXdmcp,
|
||||
wayland,
|
||||
wayland-protocols,
|
||||
wayland-scanner,
|
||||
pipewire,
|
||||
pulseaudio,
|
||||
libsamplerate,
|
||||
openGLSupport ? true,
|
||||
xorgSupport ? true,
|
||||
waylandSupport ? true,
|
||||
pipewireSupport ? true,
|
||||
pulseSupport ? true,
|
||||
rev ? "27fe47cb",
|
||||
hash ? "sha256-I84oVLeS63mnR19vTalgvLvA5RzCPTXV+tSsw+ImDwQ=",
|
||||
}:
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "looking-glass-client";
|
||||
version = rev;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "gnif";
|
||||
repo = "LookingGlass";
|
||||
rev = rev;
|
||||
hash = hash;
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
pkg-config
|
||||
wayland-scanner
|
||||
];
|
||||
|
||||
buildInputs =
|
||||
[
|
||||
libX11
|
||||
libGL
|
||||
freefont_ttf
|
||||
spice-protocol
|
||||
expat
|
||||
libbfd
|
||||
nettle
|
||||
fontconfig
|
||||
libffi
|
||||
nanosvg
|
||||
]
|
||||
++ lib.optionals xorgSupport [
|
||||
libxkbcommon
|
||||
libXi
|
||||
libXScrnSaver
|
||||
libXinerama
|
||||
libXcursor
|
||||
libXpresent
|
||||
libXext
|
||||
libXrandr
|
||||
libXdmcp
|
||||
]
|
||||
++ lib.optionals waylandSupport [
|
||||
libxkbcommon
|
||||
wayland
|
||||
wayland-protocols
|
||||
]
|
||||
++ lib.optionals pipewireSupport [
|
||||
pipewire
|
||||
libsamplerate
|
||||
]
|
||||
++ lib.optionals pulseSupport [
|
||||
pulseaudio
|
||||
libsamplerate
|
||||
];
|
||||
|
||||
cmakeFlags =
|
||||
[
|
||||
"-DOPTIMIZE_FOR_NATIVE=OFF"
|
||||
]
|
||||
++ lib.optionals (!openGLSupport) ["-DENABLE_OPENGL=no"]
|
||||
++ lib.optionals (!xorgSupport) ["-DENABLE_X11=no"]
|
||||
++ lib.optionals (!waylandSupport) ["-DENABLE_WAYLAND=no"]
|
||||
++ lib.optionals (!pulseSupport) ["-DENABLE_PULSEAUDIO=no"]
|
||||
++ lib.optionals (!pipewireSupport) ["-DENABLE_PIPEWIRE=no"];
|
||||
|
||||
# GCC can warn about maybe-uninitialized inside vendored nanosvg and Looking
|
||||
# Glass treats warnings as errors, which breaks the build.
|
||||
NIX_CFLAGS_COMPILE = lib.optionals stdenv.cc.isGNU [
|
||||
"-Wno-error=maybe-uninitialized"
|
||||
];
|
||||
|
||||
postUnpack = ''
|
||||
echo ${finalAttrs.src.rev} > source/VERSION
|
||||
export sourceRoot="source/client"
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $out/share/pixmaps
|
||||
cp $src/resources/lg-logo.png $out/share/pixmaps
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "KVM Frame Relay (KVMFR) implementation";
|
||||
longDescription = ''
|
||||
Looking Glass is an open source application that allows the use of a KVM
|
||||
(Kernel-based Virtual Machine) configured for VGA PCI Pass-through
|
||||
without an attached physical monitor, keyboard or mouse. This is the final
|
||||
step required to move away from dual booting with other operating systems
|
||||
for legacy programs that require high performance graphics.
|
||||
'';
|
||||
homepage = "https://looking-glass.io/";
|
||||
downloadPage = "https://github.com/gnif/LookingGlass/releases";
|
||||
changelog = "https://github.com/gnif/LookingGlass/commits/${rev}";
|
||||
branch = "master";
|
||||
license = licenses.gpl2Plus;
|
||||
sourceProvenance = with sourceTypes; [ fromSource ];
|
||||
mainProgram = "looking-glass-client";
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
})
|
||||
Reference in New Issue
Block a user