Hello nix community,
I am very new to nixos, so please apologize if I ask basic questions. I am currently writing a package for eruption, which is an RGB LED driver for ROCCAT devices (keyboards, mice etc.). Below you can find the default.nix
and eruption.nix
:
default.nix
let
# rustc version 1.78.0
nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/archive/05bbf675397d5366259409139039af8077d695ce.tar.gz";
# nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-24.11.tar.gz";
pkgs = import nixpkgs { config = {}; overlays = []; };
in
{
eruption = pkgs.callPackage ./eruption.nix {};
}
eruption.nix
{ lib, rustPlatform, fetchFromGitHub, libevdev, hidapi, systemd, dbus, lua54Packages, gtksourceview4, gtk3, protobuf, xorg, libpulseaudio, pkg-config, libusb1, libxkbcommon, tree }:
rustPlatform.buildRustPackage rec {
pname = "eruption";
version = "v0.3.6";
src = fetchFromGitHub {
owner = "eruption-project";
repo = "eruption";
rev = "4884ace33ed560ba058e5fa2824b4f3852f0ca90";
sha256 = "sha256-Ty5TWW+o2hQiAko20sqZEYKS2LOqkFmyOxqWVbRP7Kc=";
};
useFetchCargoVendor = true;
cargoLock = {
lockFile = "${src}/Cargo.lock";
outputHashes = {
"hidapi-2.5.0" = "sha256-3hivDzxdZ2w4++QkyTS1DMXTkUHi9BfK9vc2oeZslVE=";
"rust-pulsectl-0.2.7" = "sha256-jkZJiTbCkPCe20d08ExY/VmdFOaV3GxMxMVOnXl2HlM=";
};
};
nativeBuildInputs = [ pkg-config protobuf tree ];
buildInputs = [ libevdev hidapi systemd dbus lua54Packages.lua lua54Packages.luasocket gtksourceview4 gtk3 xorg.libX11 xorg.libXrandr libpulseaudio libusb1 libxkbcommon];
postInstall = ''
mkdir -p "$out/etc/eruption"
mkdir -p "$out/etc/profile.d"
mkdir -p "$out/usr/share/doc/eruption"
mkdir -p "$out/usr/share/eruption/scripts/lib/macros"
mkdir -p "$out/usr/share/eruption/scripts/lib/keymaps"
mkdir -p "$out/usr/share/eruption/scripts/lib/themes"
mkdir -p "$out/usr/share/eruption/scripts/lib/hwdevices/keyboards"
mkdir -p "$out/usr/share/eruption/scripts/lib/hwdevices/mice"
mkdir -p "$out/usr/share/eruption/scripts/examples"
mkdir -p "$out/usr/share/applications"
mkdir -p "$out/usr/share/icons/hicolor/64x64/apps"
mkdir -p "$out/usr/share/eruption-gui-gtk3/schemas"
mkdir -p "$out/var/lib/eruption/profiles"
mkdir -p "$out/lib/systemd/system"
mkdir -p "$out/lib/systemd/system-preset"
mkdir -p "$out/lib/systemd/user"
mkdir -p "$out/lib/systemd/user-preset"
mkdir -p "$out/lib/systemd/system-sleep"
mkdir -p "$out/lib/udev/rules.d/"
mkdir -p "$out/usr/share/dbus-1/system.d"
mkdir -p "$out/usr/share/dbus-1/session.d"
mkdir -p "$out/usr/share/polkit-1/actions"
mkdir -p "$out/usr/share/man/man8"
mkdir -p "$out/usr/share/man/man5"
mkdir -p "$out/usr/share/man/man1"
mkdir -p "$out/usr/share/bash-completion/completions"
mkdir -p "$out/usr/share/fish/completions"
mkdir -p "$out/usr/share/zsh/site-functions"
mkdir -p "$out/usr/share/eruption/i18n"
mkdir -p "$out/usr/share/eruption/sfx"
mkdir -p "$out/usr/bin"
cp "support/assets/eruption-gui-gtk3/eruption-gui-gtk3.desktop" "$out/usr/share/applications/"
cp "support/assets/eruption-gui-gtk3/eruption-gui.png" "$out/usr/share/icons/hicolor/64x64/apps/"
cp "eruption-gui-gtk3/schemas/gschemas.compiled" "$out/usr/share/eruption-gui-gtk3/schemas/"
cp "support/systemd/eruption-suspend.sh" "$out/lib/systemd/system-sleep/eruption"
cp "support/config/eruption.conf" "$out/etc/eruption/"
cp "support/config/fx-proxy.conf" "$out/etc/eruption/"
cp "support/config/audio-proxy.conf" "$out/etc/eruption/"
cp "support/config/process-monitor.conf" "$out/etc/eruption/"
cp "support/profile.d/eruption.sh" "$out/etc/profile.d/eruption.sh"
cp "support/systemd/eruption.service" "$out/lib/systemd/system/"
cp "support/systemd/eruption.preset" "$out/lib/systemd/system-preset/50-eruption.preset"
cp "support/systemd/eruption-fx-proxy.service" "$out/lib/systemd/user/"
cp "support/systemd/eruption-fx-proxy.preset" "$out/lib/systemd/user-preset/50-eruption-fx-proxy.preset"
cp "support/systemd/eruption-audio-proxy.service" "$out/lib/systemd/user/"
cp "support/systemd/eruption-audio-proxy.preset" "$out/lib/systemd/user-preset/50-eruption-audio-proxy.preset"
cp "support/systemd/eruption-process-monitor.service" "$out/lib/systemd/user/"
cp "support/systemd/eruption-process-monitor.preset" "$out/lib/systemd/user-preset/50-eruption-process-monitor.preset"
cp "support/systemd/eruption-hotplug-helper.service" "$out/lib/systemd/system/"
cp "support/systemd/eruption-hotplug-helper.preset" "$out/lib/systemd/system-preset/50-eruption-hotplug-helper.preset"
cp "support/udev/99-eruption.rules" "$out/lib/udev/rules.d/"
cp "support/dbus/org.eruption.control.conf" "$out/usr/share/dbus-1/system.d/"
cp "support/dbus/org.eruption.process_monitor.conf" "$out/usr/share/dbus-1/session.d/"
cp "support/dbus/org.eruption.fx_proxy.conf" "$out/usr/share/dbus-1/session.d/"
cp "support/policykit/org.eruption.policy" "$out/usr/share/polkit-1/actions/"
cp "support/man/eruption.8" "$out/usr/share/man/man8/"
cp "support/man/eruption-cmd.8" "$out/usr/share/man/man8/"
cp "support/man/eruption.conf.5" "$out/usr/share/man/man5/"
cp "support/man/process-monitor.conf.5" "$out/usr/share/man/man5/"
cp "support/man/eruptionctl.1" "$out/usr/share/man/man1/"
cp "support/man/eruption-hwutil.8" "$out/usr/share/man/man8/"
cp "support/man/eruption-macro.1" "$out/usr/share/man/man1/"
cp "support/man/eruption-keymap.1" "$out/usr/share/man/man1/"
cp "support/man/eruption-netfx.1" "$out/usr/share/man/man1/"
cp "support/man/eruption-fx-proxy.1" "$out/usr/share/man/man1/"
cp "support/man/eruption-audio-proxy.1" "$out/usr/share/man/man1/"
cp "support/man/eruption-process-monitor.1" "$out/usr/share/man/man1/"
cp "support/shell/completions/en_US/eruption-cmd.bash-completion" "$out/usr/share/bash-completion/completions/eruption-cmd"
cp "support/shell/completions/en_US/eruption-hwutil.bash-completion" "$out/usr/share/bash-completion/completions/eruption-hwutil"
cp "support/shell/completions/en_US/eruption-debug-tool.bash-completion" "$out/usr/share/bash-completion/completions/eruption-debug-tool"
cp "support/shell/completions/en_US/eruption-macro.bash-completion" "$out/usr/share/bash-completion/completions/eruption-macro"
cp "support/shell/completions/en_US/eruption-keymap.bash-completion" "$out/usr/share/bash-completion/completions/eruption-keymap"
cp "support/shell/completions/en_US/eruption-netfx.bash-completion" "$out/usr/share/bash-completion/completions/eruption-netfx"
cp "support/shell/completions/en_US/eruption-fx-proxy.bash-completion" "$out/usr/share/bash-completion/completions/eruption-fx-proxy"
cp "support/shell/completions/en_US/eruption-audio-proxy.bash-completion" "$out/usr/share/bash-completion/completions/eruption-audio-proxy"
cp "support/shell/completions/en_US/eruption-process-monitor.bash-completion" "$out/usr/share/bash-completion/completions/eruption-process-monitor"
cp "support/shell/completions/en_US/eruptionctl.bash-completion" "$out/usr/share/bash-completion/completions/eruptionctl"
cp "support/shell/completions/en_US/eruption-cmd.fish-completion" "$out/usr/share/fish/completions/eruption-cmd.fish"
cp "support/shell/completions/en_US/eruption-hwutil.fish-completion" "$out/usr/share/fish/completions/eruption-hwutil.fish"
cp "support/shell/completions/en_US/eruption-debug-tool.fish-completion" "$out/usr/share/fish/completions/eruption-debug-tool.fish"
cp "support/shell/completions/en_US/eruption-macro.fish-completion" "$out/usr/share/fish/completions/eruption-macro.fish"
cp "support/shell/completions/en_US/eruption-keymap.fish-completion" "$out/usr/share/fish/completions/eruption-keymap.fish"
cp "support/shell/completions/en_US/eruption-netfx.fish-completion" "$out/usr/share/fish/completions/eruption-netfx.fish"
cp "support/shell/completions/en_US/eruption-fx-proxy.fish-completion" "$out/usr/share/fish/completions/eruption-fx-proxy.fish"
cp "support/shell/completions/en_US/eruption-audio-proxy.fish-completion" "$out/usr/share/fish/completions/eruption-audio-proxy.fish"
cp "support/shell/completions/en_US/eruption-process-monitor.fish-completion" "$out/usr/share/fish/completions/eruption-process-monitor.fish"
cp "support/shell/completions/en_US/eruptionctl.fish-completion" "$out/usr/share/fish/completions/eruptionctl.fish"
cp "support/shell/completions/en_US/eruption-cmd.zsh-completion" "$out/usr/share/zsh/site-functions/_eruption-cmd"
cp "support/shell/completions/en_US/eruption-hwutil.zsh-completion" "$out/usr/share/zsh/site-functions/_eruption-hwutil"
cp "support/shell/completions/en_US/eruption-debug-tool.zsh-completion" "$out/usr/share/zsh/site-functions/_eruption-debug-tool"
cp "support/shell/completions/en_US/eruption-macro.zsh-completion" "$out/usr/share/zsh/site-functions/_eruption-macro"
cp "support/shell/completions/en_US/eruption-keymap.zsh-completion" "$out/usr/share/zsh/site-functions/_eruption-keymap"
cp "support/shell/completions/en_US/eruption-netfx.zsh-completion" "$out/usr/share/zsh/site-functions/_eruption-netfx"
cp "support/shell/completions/en_US/eruption-fx-proxy.zsh-completion" "$out/usr/share/zsh/site-functions/_eruption-fx-proxy"
cp "support/shell/completions/en_US/eruption-audio-proxy.zsh-completion" "$out/usr/share/zsh/site-functions/_eruption-audio-proxy"
cp "support/shell/completions/en_US/eruption-process-monitor.zsh-completion" "$out/usr/share/zsh/site-functions/_eruption-process-monitor"
cp "support/shell/completions/en_US/eruptionctl.zsh-completion" "$out/usr/share/zsh/site-functions/_eruptionctl"
cp "support/sfx/typewriter1.wav" "$out/usr/share/eruption/sfx/"
cp "support/sfx/phaser1.wav" "$out/usr/share/eruption/sfx/"
cp "support/sfx/phaser2.wav" "$out/usr/share/eruption/sfx/"
chmod 0755 $out/lib/systemd/system-sleep/eruption
ln -fs "phaser1.wav" "$out/usr/share/eruption/sfx/key-down.wav"
ln -fs "phaser2.wav" "$out/usr/share/eruption/sfx/key-up.wav"
cp -r eruption/src/scripts/* $out/usr/share/eruption/scripts/
cp -r support/profiles/* $out/var/lib/eruption/profiles/
ln -fs "../../bin/eruption" "$out/usr/bin/eruption"
ln -fs "../../bin/eruption-fx-proxy" "$out/usr/bin/eruption-fx-proxy"
ln -fs "../../bin/eruption-audio-proxy" "$out/usr/bin/eruption-audio-proxy"
ln -fs "../../bin/eruption-process-monitor" "$out/usr/bin/eruption-process-monitor"
'';
}
I then build it using nix-build -A eruption
while in the directory of default.nix
.
As you can see eruption contains a lot of additional files and systemd services. But if I “install” the package into my configuration.nix
like this:
environment.systemPackages = with pkgs;
let eruption_pkg = import /path/to/default.nix in [
...
eruption_pkg.eruption
...
]
This works and the eruption
binary is available and can be executed (also the systemd services are accessable via systemctl
). It even has access to my keyboard and turns of the default rainbow wave. But none of the config files have been “installed”. eruption
also needs to write into /var/lib/eruption
which seems to fail.
What is the correct way to “install” these config files? I had a look at the openrgb
service. Do I need to define these systemd services differently like there? Do I maybe need to patch eruption to make it compatible with nixos?
I am currently stuck. Any help would be appreciated.