CCE

NixGL

Contents

NixGL builds little wrapper programs which use the system libGL or nvidia libraries to run nixpkgs/home-manager programs which need OpenGL or whatever.

The nixGL source is pulled in as a flake input pinned by flake.lock:

nix:tangle ~/nix/snippets/nixgl-input.nix:mkdirp yes
nixgl = {
  url = "github:nix-community/nixGL";
  flake = false;
};

nixGL Wrapper helper

This plugs in to CCE Hypermedia to make it somewhat more durable to create functional wrappers for nixGL:

nix:tangle ~/nix/lib/nixgl.nix
{ pkgs, stdenv, ... }:

{ name, package_name ? name, pkg ? null }:
let
  nixGL = pkgs.nixGL;
  pkg_to_shadow = if (isNull pkg)
                  then pkgs."${package_name}"
                  else pkg;
in
pkgs.symlinkJoin {
  name = "${name}-nixgl-wrapper";
  paths = [
    (pkgs.writeScriptBin name ''
       #!${pkgs.stdenv.shell}
       exec ${nixGL}/bin/nixGLIntel ${pkg_to_shadow}/bin/${name} $@
     '')
    pkg_to_shadow
  ];
}
nix:tangle ~/nix/pkgs/nixgl.nix
{ inputs, stdenv, pkgs ? import <nixpkgs> {}, ... }:

let
  nixGLgh = inputs.nixgl;
  nixGL = (pkgs.callPackage nixGLgh {}).nixGLIntel;
in
  nixGL

NEXT mark this for tangling in home-manager somehow...