[Errno 13] when trying to build a python application

I wanted to build a python application on Nix, more exactly Key-mapper, I have already a release.nix for the application, but when I try to do a nixos-rebuild it shows me an error 13 saying it doesn’t have permission to write to /home.
I wanted this application to be system-wide as it is used to map keyboard and mouse keys so I can access it from start menu. If there’s something I could change that made it to be global but compile at the same I would be pleased to know as I’m very novice on nix expressions.
I’m using NixOS 21.03 with kde plasma if it’s relevant.

Thanks in advance for the help.

release.nix

{ lib, python39Packages, fetchFromGitHub }:

python39Packages.buildPythonApplication rec {
    pname = "key-mapper-git";
    version = "0.4.0";
    
    src = fetchFromGitHub {
        owner = "sezanzeb";
        repo = "key-mapper";
        rev = "d457b5efbecd79d1ee6cfe3e1172f392731b829e";
        sha256 = "1ssgfp7rh4q8bbkxhsp2l63fvwhn2bhfkd2hxfvgnibbfp8r5vk7";
    };
    
   buildInputs = with python39Packages; [ pydbus pygobject3 evdev ];

   propagateBuildInputs = with python39Packages; [ pydbus pygobject3 evdev ];

    meta = with lib; {
        homepage = "https://github.com/sezanzeb/key-mapper";
        description = "Key mapping tool";
        license = licenses.gpl3;
        maintainers = with maintainers; [ Alderaeney ];
    };
}

configuration.nix

{ config, pkgs, ... }:

with import <nixpkgs> {};

let 
    key-mapper = callPackage /etc/nixos/key-mapper/release.nix { };
in
....
  environment.systemPackages = with pkgs; [
....
key-mapper
];
....

Console output

sudo nixos-rebuild boot --upgrade
unpacking channels...
building Nix...
building the system configuration...
these derivations will be built:
  /nix/store/l1flr1xayqddpj3sbpi88l7dpbqhy59l-key-mapper-git-0.4.0.drv
  /nix/store/ns5sjkzfzpwrwcrv082llanqc171k5h2-system-path.drv
  /nix/store/67cp0q63db6c61cqcxrjjpw8bkp8jnpv-unit-polkit.service.drv
  /nix/store/ffq5ckg53flnyaavnpn6dh9kkh8izmim-dbus-1.drv
  /nix/store/n6v3r3d364a6xa29sfl3334qzz8nh6jw-unit-dbus.service.drv
  /nix/store/f4302z7m1yhc90pncqkrzn8mxsqzvfra-user-units.drv
  /nix/store/f4ry9im8zi253yqhx4x9n60gxfy7zw5g-unit-systemd-fsck-.service.drv
  /nix/store/l9f9mhd4qd0asrc3cmm7a0zdac89jyk5-unit-dbus.service.drv
  /nix/store/vwwiqg4x6ap5mq4yma2n3bw5d9c005g2-system-units.drv
  /nix/store/ks4nan2jknfdwfblvrpr60v0f8r2s9qv-etc.drv
  /nix/store/bqnd0cjg6zfxyprcdcvrvbfizcv1k2dk-nixos-system-link-gl63-8rc-21.03pre259928.2f47650c2f2.drv
building '/nix/store/l1flr1xayqddpj3sbpi88l7dpbqhy59l-key-mapper-git-0.4.0.drv'...
Sourcing python-remove-tests-dir-hook
Sourcing python-catch-conflicts-hook.sh
Sourcing python-remove-bin-bytecode-hook.sh
Sourcing setuptools-build-hook
Using setuptoolsBuildPhase
Using setuptoolsShellHook
Sourcing pip-install-hook
Using pipInstallPhase
Sourcing python-imports-check-hook.sh
Using pythonImportsCheckPhase
Sourcing python-namespaces-hook
Sourcing setuptools-check-hook
Using setuptoolsCheckPhase
unpacking sources
unpacking source archive /nix/store/r9jm975nn8czyhq5w0v9mjvkplnr6j2w-source
source root is source
setting SOURCE_DATE_EPOCH to timestamp 315619200 of file source/tests/testcases/test_test.py
patching sources
configuring
no configure script, doing nothing
building
Executing setuptoolsBuildPhase
running bdist_wheel
running build
running build_py
creating build
creating build/lib
creating build/lib/keymapper
copying keymapper/__init__.py -> build/lib/keymapper
copying keymapper/config.py -> build/lib/keymapper
copying keymapper/daemon.py -> build/lib/keymapper
copying keymapper/data.py -> build/lib/keymapper
copying keymapper/getdevices.py -> build/lib/keymapper
copying keymapper/logger.py -> build/lib/keymapper
copying keymapper/mapping.py -> build/lib/keymapper
copying keymapper/paths.py -> build/lib/keymapper
copying keymapper/presets.py -> build/lib/keymapper
copying keymapper/state.py -> build/lib/keymapper
copying keymapper/util.py -> build/lib/keymapper
creating build/lib/keymapper/dev
copying keymapper/dev/__init__.py -> build/lib/keymapper/dev
copying keymapper/dev/ev_abs_mapper.py -> build/lib/keymapper/dev
copying keymapper/dev/injector.py -> build/lib/keymapper/dev
copying keymapper/dev/keycode_mapper.py -> build/lib/keymapper/dev
copying keymapper/dev/macros.py -> build/lib/keymapper/dev
copying keymapper/dev/permissions.py -> build/lib/keymapper/dev
copying keymapper/dev/reader.py -> build/lib/keymapper/dev
creating build/lib/keymapper/gtk
copying keymapper/gtk/__init__.py -> build/lib/keymapper/gtk
copying keymapper/gtk/row.py -> build/lib/keymapper/gtk
copying keymapper/gtk/unsaved.py -> build/lib/keymapper/gtk
copying keymapper/gtk/window.py -> build/lib/keymapper/gtk
installing to build/bdist.linux-x86_64/wheel
running install
running install_lib
creating build/bdist.linux-x86_64
creating build/bdist.linux-x86_64/wheel
creating build/bdist.linux-x86_64/wheel/keymapper
copying build/lib/keymapper/__init__.py -> build/bdist.linux-x86_64/wheel/keymapper
copying build/lib/keymapper/config.py -> build/bdist.linux-x86_64/wheel/keymapper
copying build/lib/keymapper/daemon.py -> build/bdist.linux-x86_64/wheel/keymapper
copying build/lib/keymapper/data.py -> build/bdist.linux-x86_64/wheel/keymapper
copying build/lib/keymapper/getdevices.py -> build/bdist.linux-x86_64/wheel/keymapper
copying build/lib/keymapper/logger.py -> build/bdist.linux-x86_64/wheel/keymapper
copying build/lib/keymapper/mapping.py -> build/bdist.linux-x86_64/wheel/keymapper
copying build/lib/keymapper/paths.py -> build/bdist.linux-x86_64/wheel/keymapper
copying build/lib/keymapper/presets.py -> build/bdist.linux-x86_64/wheel/keymapper
copying build/lib/keymapper/state.py -> build/bdist.linux-x86_64/wheel/keymapper
copying build/lib/keymapper/util.py -> build/bdist.linux-x86_64/wheel/keymapper
creating build/bdist.linux-x86_64/wheel/keymapper/dev
copying build/lib/keymapper/dev/__init__.py -> build/bdist.linux-x86_64/wheel/keymapper/dev
copying build/lib/keymapper/dev/ev_abs_mapper.py -> build/bdist.linux-x86_64/wheel/keymapper/dev
copying build/lib/keymapper/dev/injector.py -> build/bdist.linux-x86_64/wheel/keymapper/dev
copying build/lib/keymapper/dev/keycode_mapper.py -> build/bdist.linux-x86_64/wheel/keymapper/dev
copying build/lib/keymapper/dev/macros.py -> build/bdist.linux-x86_64/wheel/keymapper/dev
copying build/lib/keymapper/dev/permissions.py -> build/bdist.linux-x86_64/wheel/keymapper/dev
copying build/lib/keymapper/dev/reader.py -> build/bdist.linux-x86_64/wheel/keymapper/dev
creating build/bdist.linux-x86_64/wheel/keymapper/gtk
copying build/lib/keymapper/gtk/__init__.py -> build/bdist.linux-x86_64/wheel/keymapper/gtk
copying build/lib/keymapper/gtk/row.py -> build/bdist.linux-x86_64/wheel/keymapper/gtk
copying build/lib/keymapper/gtk/unsaved.py -> build/bdist.linux-x86_64/wheel/keymapper/gtk
copying build/lib/keymapper/gtk/window.py -> build/bdist.linux-x86_64/wheel/keymapper/gtk
running install_data
creating build/bdist.linux-x86_64/wheel/key_mapper-0.4.0.data
creating build/bdist.linux-x86_64/wheel/key_mapper-0.4.0.data/data
creating build/bdist.linux-x86_64/wheel/usr
creating build/bdist.linux-x86_64/wheel/usr/share
creating build/bdist.linux-x86_64/wheel/usr/share/key-mapper
copying data/key-mapper-autoload.desktop -> build/bdist.linux-x86_64/wheel/usr/share/key-mapper/
copying data/key-mapper.desktop -> build/bdist.linux-x86_64/wheel/usr/share/key-mapper/
copying data/key-mapper.glade -> build/bdist.linux-x86_64/wheel/usr/share/key-mapper/
copying data/key-mapper.policy -> build/bdist.linux-x86_64/wheel/usr/share/key-mapper/
copying data/key-mapper.service -> build/bdist.linux-x86_64/wheel/usr/share/key-mapper/
copying data/key-mapper.svg -> build/bdist.linux-x86_64/wheel/usr/share/key-mapper/
copying data/keymapper.Control.conf -> build/bdist.linux-x86_64/wheel/usr/share/key-mapper/
copying data/style.css -> build/bdist.linux-x86_64/wheel/usr/share/key-mapper/
creating build/bdist.linux-x86_64/wheel/usr/share/applications
copying data/key-mapper.desktop -> build/bdist.linux-x86_64/wheel/usr/share/applications/
creating build/bdist.linux-x86_64/wheel/usr/share/polkit-1
creating build/bdist.linux-x86_64/wheel/usr/share/polkit-1/actions
copying data/key-mapper.policy -> build/bdist.linux-x86_64/wheel/usr/share/polkit-1/actions/
creating build/bdist.linux-x86_64/wheel/usr/lib
creating build/bdist.linux-x86_64/wheel/usr/lib/systemd
creating build/bdist.linux-x86_64/wheel/usr/lib/systemd/system
copying data/key-mapper.service -> build/bdist.linux-x86_64/wheel/usr/lib/systemd/system
creating build/bdist.linux-x86_64/wheel/etc
creating build/bdist.linux-x86_64/wheel/etc/dbus-1
creating build/bdist.linux-x86_64/wheel/etc/dbus-1/system.d
copying data/keymapper.Control.conf -> build/bdist.linux-x86_64/wheel/etc/dbus-1/system.d/
creating build/bdist.linux-x86_64/wheel/etc/xdg
creating build/bdist.linux-x86_64/wheel/etc/xdg/autostart
copying data/key-mapper-autoload.desktop -> build/bdist.linux-x86_64/wheel/etc/xdg/autostart/
creating build/bdist.linux-x86_64/wheel/usr/bin
copying bin/key-mapper-gtk -> build/bdist.linux-x86_64/wheel/usr/bin/
copying bin/key-mapper-service -> build/bdist.linux-x86_64/wheel/usr/bin/
copying bin/key-mapper-control -> build/bdist.linux-x86_64/wheel/usr/bin/
running install_egg_info
running egg_info
creating key_mapper.egg-info
writing key_mapper.egg-info/PKG-INFO
writing dependency_links to key_mapper.egg-info/dependency_links.txt
writing requirements to key_mapper.egg-info/requires.txt
writing top-level names to key_mapper.egg-info/top_level.txt
writing manifest file 'key_mapper.egg-info/SOURCES.txt'
reading manifest file 'key_mapper.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'key_mapper.egg-info/SOURCES.txt'
Copying key_mapper.egg-info to build/bdist.linux-x86_64/wheel/key_mapper-0.4.0-py3.9.egg-info
running install_scripts
adding license file "LICENSE" (matched pattern "LICEN[CS]E*")
creating build/bdist.linux-x86_64/wheel/key_mapper-0.4.0.dist-info/WHEEL
creating 'dist/key_mapper-0.4.0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
adding 'etc/dbus-1/system.d/keymapper.Control.conf'
adding 'etc/xdg/autostart/key-mapper-autoload.desktop'
adding 'keymapper/__init__.py'
adding 'keymapper/config.py'
adding 'keymapper/daemon.py'
adding 'keymapper/data.py'
adding 'keymapper/getdevices.py'
adding 'keymapper/logger.py'
adding 'keymapper/mapping.py'
adding 'keymapper/paths.py'
adding 'keymapper/presets.py'
adding 'keymapper/state.py'
adding 'keymapper/util.py'
adding 'keymapper/dev/__init__.py'
adding 'keymapper/dev/ev_abs_mapper.py'
adding 'keymapper/dev/injector.py'
adding 'keymapper/dev/keycode_mapper.py'
adding 'keymapper/dev/macros.py'
adding 'keymapper/dev/permissions.py'
adding 'keymapper/dev/reader.py'
adding 'keymapper/gtk/__init__.py'
adding 'keymapper/gtk/row.py'
adding 'keymapper/gtk/unsaved.py'
adding 'keymapper/gtk/window.py'
adding 'usr/bin/key-mapper-control'
adding 'usr/bin/key-mapper-gtk'
adding 'usr/bin/key-mapper-service'
adding 'usr/lib/systemd/system/key-mapper.service'
adding 'usr/share/applications/key-mapper.desktop'
adding 'usr/share/key-mapper/key-mapper-autoload.desktop'
adding 'usr/share/key-mapper/key-mapper.desktop'
adding 'usr/share/key-mapper/key-mapper.glade'
adding 'usr/share/key-mapper/key-mapper.policy'
adding 'usr/share/key-mapper/key-mapper.service'
adding 'usr/share/key-mapper/key-mapper.svg'
adding 'usr/share/key-mapper/keymapper.Control.conf'
adding 'usr/share/key-mapper/style.css'
adding 'usr/share/polkit-1/actions/key-mapper.policy'
adding 'key_mapper-0.4.0.dist-info/LICENSE'
adding 'key_mapper-0.4.0.dist-info/METADATA'
adding 'key_mapper-0.4.0.dist-info/WHEEL'
adding 'key_mapper-0.4.0.dist-info/top_level.txt'
adding 'key_mapper-0.4.0.dist-info/RECORD'
removing build/bdist.linux-x86_64/wheel
Finished executing setuptoolsBuildPhase
glibPreInstallPhase
installing
Executing pipInstallPhase
/build/source/dist /build/source
Processing ./key_mapper-0.4.0-py3-none-any.whl
Requirement already satisfied: pydbus in /nix/store/680sq6kpnlvliwbcpl25yqk4n45r6i3x-python3.9-pydbus-0.6.0/lib/python3.9/site-packages (from key-mapper==0.4.0) (0.6.0)
Requirement already satisfied: setuptools in /nix/store/c9knlhpqa1ci98f8r2ccwxh593qxa2m4-python3.9-setuptools-50.3.1/lib/python3.9/site-packages (from key-mapper==0.4.0) (50.3.1.post0)
Requirement already satisfied: evdev in /nix/store/5rr8py2f5a1sh02x3hr98sy3cm3xgjhb-python3.9-evdev-1.3.0/lib/python3.9/site-packages (from key-mapper==0.4.0) (1.3.0)
Installing collected packages: key-mapper
Successfully installed key-mapper-0.4.0
/build/source
Finished executing pipInstallPhase
glibPreFixupPhase
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0
strip is /nix/store/kcp0y7g1ir4dxq2gqz687i4vb7gqy8s0-binutils-2.31.1/bin/strip
stripping (with command strip and flags -S) in /nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib 
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/etc/dbus-1/system.d/keymapper.Control.conf: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/etc/xdg/autostart/key-mapper-autoload.desktop: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/config.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/daemon.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/data.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/getdevices.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/logger.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/mapping.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/paths.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/presets.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/state.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/util.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/dev/ev_abs_mapper.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/dev/injector.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/dev/keycode_mapper.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/dev/macros.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/dev/permissions.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/dev/reader.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/dev/__pycache__/__init__.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/dev/__pycache__/ev_abs_mapper.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/dev/__pycache__/injector.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/dev/__pycache__/keycode_mapper.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/dev/__pycache__/macros.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/dev/__pycache__/permissions.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/dev/__pycache__/reader.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/gtk/row.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/gtk/unsaved.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/gtk/window.py: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/gtk/__pycache__/__init__.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/gtk/__pycache__/row.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/gtk/__pycache__/unsaved.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/gtk/__pycache__/window.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/__pycache__/__init__.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/__pycache__/config.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/__pycache__/daemon.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/__pycache__/data.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/__pycache__/getdevices.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/__pycache__/logger.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/__pycache__/mapping.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/__pycache__/paths.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/__pycache__/presets.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/__pycache__/state.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/keymapper/__pycache__/util.cpython-39.pyc: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/bin/key-mapper-control: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/bin/key-mapper-gtk: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/bin/key-mapper-service: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/lib/systemd/system/key-mapper.service: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/share/applications/key-mapper.desktop: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/share/key-mapper/key-mapper-autoload.desktop: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/share/key-mapper/key-mapper.desktop: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/share/key-mapper/key-mapper.glade: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/share/key-mapper/key-mapper.policy: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/share/key-mapper/key-mapper.service: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/share/key-mapper/key-mapper.svg: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/share/key-mapper/keymapper.Control.conf: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/share/key-mapper/style.css: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/share/polkit-1/actions/key-mapper.policy: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/key_mapper-0.4.0.dist-info/LICENSE: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/key_mapper-0.4.0.dist-info/METADATA: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/key_mapper-0.4.0.dist-info/WHEEL: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/key_mapper-0.4.0.dist-info/top_level.txt: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/key_mapper-0.4.0.dist-info/INSTALLER: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/key_mapper-0.4.0.dist-info/direct_url.json: file format not recognized
strip:/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/key_mapper-0.4.0.dist-info/RECORD: file format not recognized
patching script interpreter paths in /nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0
/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/bin/key-mapper-control: interpreter directive changed from "/usr/bin/python3" to "/nix/store/sabbshvff0hfmd1wnk5vwy2mma3l0m40-python3-3.9.1/bin/python3"
/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/bin/key-mapper-gtk: interpreter directive changed from "/usr/bin/python3" to "/nix/store/sabbshvff0hfmd1wnk5vwy2mma3l0m40-python3-3.9.1/bin/python3"
/nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0/lib/python3.9/site-packages/usr/bin/key-mapper-service: interpreter directive changed from "/usr/bin/python3" to "/nix/store/sabbshvff0hfmd1wnk5vwy2mma3l0m40-python3-3.9.1/bin/python3"
checking for references to /build/ in /nix/store/w56j4lymy6v3ddapgkvrginajqyfxr0a-key-mapper-git-0.4.0...
Executing pythonRemoveTestsDir
Finished executing pythonRemoveTestsDir
running install tests
no Makefile or custom installCheckPhase, doing nothing
pythonCatchConflictsPhase
pythonRemoveBinBytecodePhase
pythonImportsCheckPhase
Executing pythonImportsCheckPhase
setuptoolsCheckPhase
Executing setuptoolsCheckPhase
running test
WARNING: Testing via this command is deprecated and will be removed in a future version. Users looking for a generic test entry point independent of test runner are encouraged to use tox.
running egg_info
writing key_mapper.egg-info/PKG-INFO
writing dependency_links to key_mapper.egg-info/dependency_links.txt
writing requirements to key_mapper.egg-info/requires.txt
writing top-level names to key_mapper.egg-info/top_level.txt
reading manifest file 'key_mapper.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'key_mapper.egg-info/SOURCES.txt'
running build_ext
Creating file "/home/nixbld/.config/key-mapper/config.json"
error: [Errno 13] Permission denied: '/home'
builder for '/nix/store/l1flr1xayqddpj3sbpi88l7dpbqhy59l-key-mapper-git-0.4.0.drv' failed with exit code 1
cannot build derivation '/nix/store/ns5sjkzfzpwrwcrv082llanqc171k5h2-system-path.drv': 1 dependencies couldn't be built
cannot build derivation '/nix/store/bqnd0cjg6zfxyprcdcvrvbfizcv1k2dk-nixos-system-link-gl63-8rc-21.03pre259928.2f47650c2f2.drv': 1 dependencies couldn't be built
error: build of '/nix/store/bqnd0cjg6zfxyprcdcvrvbfizcv1k2dk-nixos-system-link-gl63-8rc-21.03pre259928.2f47650c2f2.drv' failed

It is trying to run checkPhase which tries to create a file outside the build folder, I would disable tests entirely by putting doCheck = false; in release.nix.

Note also gpl3 is a deprecated license, please use either gpl3Only or gpl3Plus, which usually can be determined by looking at the license headers of one of the source files or asking the package author.

rather than disabling test, you may use :

preCheck = ``
  export HOME=$(mktemp -d)
``

As the folder it seem to write outside the store is the home folder, settings this variable would set the home to a temporary directory.

Thanks, that solved the issue.
But now it doesn’t seem like the files have been made available to the system as I cannot access the main executable from the command line and the .desktop file doesn’t apper in the start menu, is there something I’m missing?
The program has built correctly and is installed on /nix/store but it seems that it hasn’t created the proper env links to the executables.
Thanks for the help again.

Running find on the resulting package may help. Here, I found that for some reason I have a result/lib/python3.9/site-packages/usr/ folder, that should probably be at root.

adding a

postInstall = ''
    mv $out/lib/python*/site-packages/usr/bin $out
  '';

should solve this issue, but now, it complain that there are no module named gi… Not sure how to solve this.

Having the files in ${site-packages}/usr is due to Python packages installing absolute paths to $out/lib/python-xxx/site-packages · Issue #23438 · NixOS/nixpkgs · GitHub.

You’ll need the gobject-introspection hook. Add it to nativeBuildInputs.

I already did that, but it doesn’t seem to solve the issue.
I have this right now with the gobject-introspection, but doesn’t seem to affect the result at all.

{ lib, python38Packages, fetchFromGitHub, gobject-introspection }:

python38Packages.buildPythonApplication rec {
    pname = "key-mapper-git";
    version = "0.4.0";
    
    src = fetchFromGitHub {
        owner = "sezanzeb";
        repo = "key-mapper";
        rev = "d457b5efbecd79d1ee6cfe3e1172f392731b829e";
        sha256 = "1ssgfp7rh4q8bbkxhsp2l63fvwhn2bhfkd2hxfvgnibbfp8r5vk7";
    };

    nativeBuildInputs = [ gobject-introspection ];
    
    buildInputs = with python38Packages; [ pydbus pygobject3 evdev ];

    propagateBuildInputs = with python38Packages; [ pydbus pygobject3 evdev gst-python ];

    doCheck = false;

#    preCheck = ''
#      export HOME=$(mktemp -d)
#    '';

    postInstall = ''
      mv $out/lib/python*/site-packages/usr/bin $out
    '';

    meta = with lib; {
        homepage = "https://github.com/sezanzeb/key-mapper";
        description = "Key mapping tool";
        license = licenses.gpl3Only;
        maintainers = with maintainers; [ Alderaeney ];
    };
}

Ok, so far everything is sorted out, and after creating a group with the same name as my user it only complains about a permission error when trying to do a chown on their config folder.

This is the final release.nix

{ lib, python3Packages, fetchFromGitHub, gobject-introspection, python3, wrapGAppsHook, pango, gdk-pixbuf, atk }:

python3Packages.buildPythonApplication rec {
    pname = "key-mapper-git";
    version = "0.4.0";
    
    src = fetchFromGitHub {
        owner = "sezanzeb";
        repo = "key-mapper";
        rev = "d457b5efbecd79d1ee6cfe3e1172f392731b829e";
        sha256 = "1ssgfp7rh4q8bbkxhsp2l63fvwhn2bhfkd2hxfvgnibbfp8r5vk7";
    };

    nativeBuildInputs = [ gobject-introspection wrapGAppsHook pango gdk-pixbuf atk ];
    
    buildInputs = [
      (python3.withPackages (ps: with ps; [ pydbus pygobject3 evdev setuptools ]))
      gobject-introspection
      pango
      gdk-pixbuf
      atk
    ];

    propagateBuildInputs = with python3Packages; [ pydbus pygobject3 evdev setuptools ];

    doCheck = false;

    postInstall = ''
      mv $out/lib/python*/site-packages/usr/bin $out
    '';

    meta = with lib; {
        homepage = "https://github.com/sezanzeb/key-mapper";
        description = "Key mapping tool";
        license = licenses.gpl3Only;
        maintainers = with maintainers; [ Alderaeney ];
    };
}

Now, the only issue I have is this:

Creating file "/home/link/.config/key-mapper/config.json"
Traceback (most recent call last):
  File "/nix/store/1d7kd0xvqix8wzh90wfs7gcpmdiji8xf-key-mapper-git-0.4.0/bin/..key-mapper-gtk-wrapped-wrapped", line 36, in <module>
    from keymapper.gtk.window import Window
  File "/nix/store/1d7kd0xvqix8wzh90wfs7gcpmdiji8xf-key-mapper-git-0.4.0/lib/python3.8/site-packages/keymapper/gtk/window.py", line 34, in <module>
    from keymapper.state import custom_mapping, XMODMAP_FILENAME
  File "/nix/store/1d7kd0xvqix8wzh90wfs7gcpmdiji8xf-key-mapper-git-0.4.0/lib/python3.8/site-packages/keymapper/state.py", line 32, in <module>
    from keymapper.mapping import Mapping
  File "/nix/store/1d7kd0xvqix8wzh90wfs7gcpmdiji8xf-key-mapper-git-0.4.0/lib/python3.8/site-packages/keymapper/mapping.py", line 31, in <module>
    from keymapper.config import ConfigBase, config
  File "/nix/store/1d7kd0xvqix8wzh90wfs7gcpmdiji8xf-key-mapper-git-0.4.0/lib/python3.8/site-packages/keymapper/config.py", line 247, in <module>
    config = GlobalConfig()
  File "/nix/store/1d7kd0xvqix8wzh90wfs7gcpmdiji8xf-key-mapper-git-0.4.0/lib/python3.8/site-packages/keymapper/config.py", line 185, in __init__
    self.load_config()
  File "/nix/store/1d7kd0xvqix8wzh90wfs7gcpmdiji8xf-key-mapper-git-0.4.0/lib/python3.8/site-packages/keymapper/config.py", line 222, in load_config
    self.save_config()
  File "/nix/store/1d7kd0xvqix8wzh90wfs7gcpmdiji8xf-key-mapper-git-0.4.0/lib/python3.8/site-packages/keymapper/config.py", line 238, in save_config
    touch(self.path)
  File "/nix/store/1d7kd0xvqix8wzh90wfs7gcpmdiji8xf-key-mapper-git-0.4.0/lib/python3.8/site-packages/keymapper/paths.py", line 66, in touch
    mkdir(os.path.dirname(path), log=False)
  File "/nix/store/1d7kd0xvqix8wzh90wfs7gcpmdiji8xf-key-mapper-git-0.4.0/lib/python3.8/site-packages/keymapper/paths.py", line 86, in mkdir
    shutil.chown(path, USER, USER)
  File "/nix/store/m7080pw0ryjk0jhljp55rq1hd2qy8gki-python3-3.8.6/lib/python3.8/shutil.py", line 1296, in chown
    os.chown(path, _user, _group)
PermissionError: [Errno 1] Operation not permitted: '/home/link/.config/key-mapper'

That is a permission issue, how are you running/starting the key-mapper? I’m guessing not as the link user, which appears to be the homedir the app is trying to change. If this is running through systemd, there are permissions in the unit config that specify if the app is allowed to play in the homedir or not.

This is almost certainly specific to the application and not something NixOS is doing.

I was starting it as the link user which is my personal user but it seems like it doesn’t have permission to do a chown on my home folder and it fails to write the configuration to the file, I’ve tried to copy an existing configuration I have but then it complained about not being able to access the application files, I’ve tried to run it as sudo, as it needs superuser permissions to apply the configuration but it doesn’t seem like it does anything different.
This is the output after copying a good configuration:

Loaded config from "/home/link/.config/key-mapper/config.json"
Writing "/home/link/.config/key-mapper/xmodmap.json"
key-mapper 0.4.0
WARNING: The daemon "key-mapper-service" is not running, mapping keys only works as long as the window is open.
ERROR: Could not find the application data

I’m pretty sure this is something bad with either the way I’m packaging the application or the way the application works, but I’m not so proficient with python development or nix expressions to know how to solve this.

Thanks anyways to all people that helped me.

I’ll put the latest version of the builder in case anyone would continue it, quite probably it would need some patching in upstream to make it functional for nixos.

{ lib, python3Packages, fetchFromGitHub
, gobject-introspection
, python3
, wrapGAppsHook
, pango
, gdk-pixbuf
, atk
, coreutils
, xmodmap }:

let 

binPath = lib.makeBinPath [
    coreutils
    xmodmap
];

in python3Packages.buildPythonApplication rec {
    pname = "key-mapper-git";
    version = "0.4.0";
    
    src = fetchFromGitHub {
        owner = "sezanzeb";
        repo = "key-mapper";
        rev = version;
        sha256 = "1ssgfp7rh4q8bbkxhsp2l63fvwhn2bhfkd2hxfvgnibbfp8r5vk7";
    };

    nativeBuildInputs = [ gobject-introspection wrapGAppsHook pango gdk-pixbuf atk ];
    
    buildInputs = [
      (python3.withPackages (ps: with ps; [ pydbus pygobject3 evdev setuptools ]))
      gobject-introspection
      pango
      gdk-pixbuf
      atk
    ];

    propagateBuildInputs = with python3Packages; [ pydbus pygobject3 evdev setuptools ];

    doCheck = false;

    dontWrapGApps = true;
    makeWrapperArgs = [
        "--prefix PATH : ${binPath}"
        ''''${gappsWrapperArgs[@]}''
    ];
    
    strictDeps = false;

    postInstall = ''
      mv $out/lib/python*/site-packages/usr/bin $out
      mv $out/lib/python*/site-packages/usr/share $out
      mv $out/lib/python*/site-packages/etc $out
    '';

    meta = with lib; {
        homepage = "https://github.com/sezanzeb/key-mapper";
        description = "Key mapping tool";
        license = licenses.gpl3Only;
        maintainers = with maintainers; [ Alderaeney ];
    };
}

I’ve never even heard of the key-mapper application, so I’m totally not very helpful when it comes to making key-mapper work. You might want to see what’s different between the key-mapper on whatever os you got that output from and the key-mapper running on NixOS.

When I said how are you running key-mapper, it seems like it wants to run as a service, for NixOS that means systemd, so you will need to add the systemd settings to your nixos config eventually, but it’s probably better to get it working first.

Don’t give up!

You say you have a good configuration, so what is different between the good configuration and the nixos broken configuration? that’s important information. Run through each difference and understand what is different and why it is different.

Seriously, don’t give up because of “lack of ability”, as you can totally figure it out, if you put your time and energy into it. Computers are not rocket science, I promise!

1 Like