Packaging a Binary with Provided Libraries

I am trying to package a CAD system (BricsCAD) for Nix, which has many of its dependencies bundled in the download. I found as many as I could using nix-locate, and included those in the build inputs, but there are still a lot of libraries that aren’t available in nixpkgs from what I can tell.

I am trying to use autopatchelf as described on the NixOS Wiki. I am copying all of the included libraries to $out/lib during the install phase, they have execute permissions already, and it builds without any error. However, when I try to run the binary I get the error:

zsh: no such file or directory: ./result/bin/bricscad

And running ldd on the binary shows most of the dependencies are not found.

From my understanding, autopatchelf expects these dependencies from other packages in nixpkgs to be in $out/lib for the respective packages, but does not seem to find them when they are part of the package I am trying to build. I have tried a few other things but haven’t found anything that works yet.

Do I need to do something with makeWrapper, or are there other flags I can pass to autopatchelf to have it use the provided libraries?

I feel like I’m missing something obvious, I’m pretty new to Nix and I’m not a programmer, so I don’t really have the best understanding of what is really going on.

My flake.nix is below:

{
  description = "BricsCAD";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs";
  };

  outputs = { self, nixpkgs }: {
    defaultPackage.x86_64-linux =
      with import nixpkgs { system = "x86_64-linux"; };
  
      stdenv.mkDerivation rec {
        pname = "bricscad";
        version = "24.1.07";
        src = ./BricsCAD-V${version}-1-en_US-amd64.deb;
      
        dontFixup = true;
      
        nativeBuildInputs = [
          pkgs.autoPatchelfHook
        ];

        buildInputs = [
          pkgs.remarkable2-toolchain 
          pkgs.opendylan_bin
          pkgs.xercesc
          pkgs.gtk3
          pkgs.wxGTK31
          pkgs.qt6.full
          pkgs.webkitgtk
          pkgs.dpkg
        ];
      
        sourceRoot = ".";

        installPhase = ''
          runHook preInstall
          mkdir -p $out
          dpkg -x $src $out
          chmod 755 $out
          mv $out/usr/* $out
          rm -r $out/usr
          mkdir -p $out/lib
          cp $out/opt/bricsys/bricscad/v24/*.so $out/lib
          cp $out/opt/bricsys/bricscad/v24/*.so.* $out/lib
          cp $out/opt/bricsys/bricscad/v24/*.tx $out/lib
          ln -s $out/opt/bricsys/bricscad/v24/bricscad $out/bin/bricscad
          runHook postInstall
        '';
      
        meta = with lib; {
          description = "BricsCAD";
          platforms = platforms.linux;
        };
      };
  };
}

Changed dontFixUp by autoPatchelfIgnoreMissingDeps and at least it starts.
Do not forget to add your deb to git (flakes requirement)

{
  description = "BricsCAD";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs";
  };

  outputs = { self, nixpkgs }: {
    packages.x86_64-linux.default =
      with import nixpkgs { system = "x86_64-linux"; };
  
      stdenv.mkDerivation rec {
        pname = "bricscad";
        version = "24.1.07";
        src = ./BricsCAD-V24.1.07-1-en_US-amd64.deb;
      
        nativeBuildInputs = [
          autoPatchelfHook
        ];
        autoPatchelfIgnoreMissingDeps = true;

        buildInputs = [
          remarkable2-toolchain 
          opendylan_bin
          xercesc
          gtk3
          wxGTK31
          qt6.full
          webkitgtk
          dpkg
        ];
      
        sourceRoot = ".";

        installPhase = ''
          runHook preInstall
          mkdir -p  $out
          dpkg  -x  $src $out
          chmod 755 $out
          mv $out/usr/* $out
          rm    -r  $out/usr
          mkdir -p  $out/lib
          cp $out/opt/bricsys/bricscad/v24/*.so   $out/lib
          cp $out/opt/bricsys/bricscad/v24/*.so.* $out/lib
          cp $out/opt/bricsys/bricscad/v24/*.tx   $out/lib
          ln -s $out/opt/bricsys/bricscad/v24/bricscad $out/bin/bricscad
          runHook postInstall
        '';
      
        meta = with lib; {
          description = "BricsCAD";
          platforms = platforms.linux;
        };
      };
  };
}
1 Like

That worked, thank you!

Hi @ogre23

Does that still work for you? The program opens up but as soon as I create new file it crashes with fish: Job 1, 'nix run BricsCAD/' terminated by signal SIGTRAP (Trace or breakpoint trap)

Or the full log:

Failed to determine the install path!

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.386: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.386: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.386: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.386: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.386: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.386: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.396: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.396: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.396: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.396: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.396: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.396: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.417: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.417: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.417: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.417: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.417: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.417: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.430: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.431: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.431: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.431: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.431: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.431: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.432: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.432: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.433: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.433: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.433: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.433: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.439: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.439: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.439: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.439: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.439: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.439: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.452: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.453: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.453: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.453: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.453: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.453: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.463: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.463: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.463: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.463: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.463: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.463: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.481: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.481: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.481: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.481: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.481: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.482: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.484: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.484: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.484: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.484: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.484: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.484: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.502: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.502: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.502: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.502: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.502: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.502: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.576: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.576: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.576: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.576: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.576: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.576: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.677: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.677: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.677: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.677: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.677: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.677: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.742: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.742: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.742: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.742: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.742: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.742: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.751: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.751: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.751: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.751: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.751: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.751: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.753: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.753: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.753: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.753: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.753: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.753: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.754: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.754: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.754: gtk_widget_get_style_context: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.754: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.754: gtk_widget_get_parent: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:04:50.754: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed

(bricscad:262281): Gtk-WARNING **: 15:04:51.496: Negative content height -1 (allocation 23, extents 12x12) while allocating gadget (node scale, owner GtkScale)

(bricscad:262281): Gtk-WARNING **: 15:04:51.496: Negative content height -2 (allocation 0, extents 1x1) while allocating gadget (node trough, owner GtkScale)

(bricscad:262281): Gtk-CRITICAL **: 15:04:55.806: gtk_window_get_has_resize_grip: assertion 'GTK_IS_WINDOW (window)' failed

(bricscad:262281): Gtk-CRITICAL **: 15:05:02.952: gtk_window_get_has_resize_grip: assertion 'GTK_IS_WINDOW (window)' failed
*** BUG ***
In pixman_region32_init_rect: Invalid rectangle passed
Set a breakpoint on '_pixman_log_error' to debug

xkbcommon: ERROR: Couldn't find file "rules/evdev" in include paths
xkbcommon: ERROR: There are no include paths to search
xkbcommon: ERROR: 1 include paths could not be added:
xkbcommon: ERROR:       /usr/share/X11/xkb
xkbcommon: ERROR: Couldn't look up rules 'evdev', model 'pc101', layout 'us', variant 'dvp', options ''
[262281:265907:0310/150504.454954:FATAL:xkb_keyboard_layout_engine.cc(652)] Keymap file failed to load: us-dvp
fish: Job 1, 'nix run BricsCAD/' terminated by signal SIGTRAP (Trace or breakpoint trap)

I am a little lost as to why, and guessing that it could be related to the way NixOS is structured, it does not provide /usr/share/X11

Will be grateful for any clues on how to fix that :sweat_smile:

Honestly I haven’t had a chance to look at this very much. I got the splash screen but can’t activate the trial so I haven’t tried to use it yet. I have a license, I just need to move it from my work computer to test it.

1 Like

I fixed the issue @reptee had, but a new error came up.

# configuration.nix
services.xserver.exportConfiguration = true;

^ exposes xkb directory under /etc/X11/xkb/. Then i add a symlink

sudo mkdir -p /usr/share/X11/
sudo ln -s /etc/X11/xkb/ /usr/share/X11/xkb

The above solution is not very nix-style. I did it only to experiment, but at some point i started looking for an alternative solution.

And an alternative solution i found (maybe).
Since I am running X11, it is easy to run GUI apps in docker.

I created a Dockerfile that took care of some required (and some other?) dependecies

FROM ubuntu

RUN apt update
RUN apt upgrade -y
# obviously this file must exist
COPY ./bricscad.deb /
RUN apt install -y /bricscad.deb
RUN apt install -y libsecret-1-0 libglu1-mesa libsm6 libegl1 libgl1
RUN apt install -y libxkbcommon-x11-0
RUN apt install -y libasound2t64 libxkbfile1 libqt6pdf6 libnss3

ENV LD_LIBRARY_PATH=/opt/bricsys/bricscad/v24
ENV QT_DEBUG_PLUGINS=1
ENV GTK_IS_WINDOW=true

USER ubuntu
# i am still experimenting, therefore this strange entrypoint
ENTRYPOINT [ "sleep", "infinity" ]

and a docker-compose file to take care of x11 auth

  app:
    build: .
    environment:
      - DISPLAY=${DISPLAY}
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix
      - ${HOME}/.Xauthority:/home/ubuntu/.Xauthority:ro
    devices:
      - /dev/dri/
    network_mode: host

now one can docker compose up -d --build and enter the shell via
docker compose exec -it app bash and run bricscadv24 or run it directly via docker compose exec -it app bricscadv24.

With this, a window should appear on the screen. Sometimes, after entering 3d → 3dcm mode and reaching the rendering window, the app craches. but often enough, it works. im still working out details and i am not really a bricscad pro (not even a noob lol), but for now i am concidering this progress.

1 Like

@polferov

This is pretty neat, I’ll have to try it out. I’m considering switching from Windows to Linux at work soon and would really like to use NixOS, but need BricsCAD to work, so I am going to look at it again soon.

Please keep us updated if you get this working better.

Hello,
Did you manage to package BricsCAD?
Do you have a git repo with it?