Derivation / Everdo

I’m quite new to Nixos but not to linux. Have been running Arch for a few years but recently got hit with a grub issue and let me know how unstable Arch can be despite having installed it with btrfs and taking automatic snapshots as well as backing up to my homelab. I did troubleshoot and get everything working again but now testing out Nixos. Have most things running smoothly especially when there is a pkg for my software.

I run a program called Everdo that’s not yet in Nixos pkg, but somebody has already created a derivation for it. The Nixos wiki page on derivation doesn’t make sense to me or doesn’t apply to what I’m trying to do, thus it’s very confusing. That is likely where Arch has thrived in having such a great wiki page.

My question is how do I get my nix config file to install a derivation as any other software?

Here’s the link to the code I’m trying to install Trying to package Everdo for NixOS (core dumped) - #3 by Andrei - Support - Everdo Community

Here’s the code

{ stdenv, fetchurl, autoPatchelfHook, makeWrapper, asar, dpkg, electron }:

stdenv.mkDerivation rec {
  name = "everdo-${version}";
  version = "1.5.14";

  src = fetchurl {
    url = "https://d11l8siwmn8w36.cloudfront.net/${version}/everdo_${version}_amd64.deb";
    hash = "sha256-erFYoYhVrxt+iT3B2kG4uAp39+ZLdCfTi1QC8q7uPbU=";
  };

  nativeBuildInputs = [ autoPatchelfHook makeWrapper asar dpkg ];
  buildInputs = [ stdenv.cc.cc ];

  sourceRoot = ".";

  unpackCmd = "dpkg-deb -x $src .";

  postPatch = ''
    asar e opt/Everdo/resources/app.asar app
    autoPatchelf app
    asar p app opt/Everdo/resources/app.asar
  '';

  installPhase = ''
    mkdir -p $out/bin

    cp -r usr/share $out/share
    cp -r opt/Everdo/resources $out/share/everdo

    substituteInPlace $out/share/applications/everdo.desktop \
      --replace /opt/Everdo/everdo $out/bin/everdo

    makeWrapper ${electron}/bin/electron $out/bin/everdo \
      --add-flags $out/share/everdo/app.asar
  '';
}

Put that derivation into a new file next to your configuration.nix, call it e.g. everdo.nix. Add it to environment.systemPackages like so:

environment.systemPackages = with pkgs; [
  ...
  (pkgs.callPackage ./everdo.nix {})
];

callPackage will import that file, which contains a function, and call by resolving the function arguments from nixpkgs.

That seems quite easy. Set it up and started to rebuild it then got:

error: Function called without required argument “asar” at /etc/nixos/everdo.nix:1, did you mean “acr”, “aha” or “air”?
(use ‘–show-trace’ to show detailed location information)

Using --show-trace gave me:

building Nix…
building the system configuration…
error: Function called without required argument “asar” at /etc/nixos/everdo.nix:1, did you mean “acr”, “aha” or “air”?

   … while evaluating 'callPackageWith'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/customisation.nix:117:35:

      116|   */
      117|   callPackageWith = autoArgs: fn: args:
         |                                   ^
      118|     let

   … from call site

   at /etc/nixos/configuration.nix:116:6:

      115|   # EverDo
      116|     (pkgs.callPackage ./everdo.nix {})
         |      ^
      117|   ];

   … while evaluating the attribute 'value'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/types.nix:408:38:

      407|               elemType
      408|               [{ inherit (def) file; value = def'; }]
         |                                      ^
      409|             ).optionalValue

   … while evaluating 'dischargeProperties'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:832:25:

      831|   */
      832|   dischargeProperties = def:
         |                         ^
      833|     if def._type or "" == "merge" then

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:761:137:

      760|         defs' = concatMap (m:
      761|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
         |                                                                                                                                         ^
      762|         ) defs;

   … while evaluating definitions from `/etc/nixos/configuration.nix':

   … while evaluating anonymous lambda

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:760:28:

      759|         # Process mkMerge and mkIf properties.
      760|         defs' = concatMap (m:
         |                            ^
      761|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:760:17:

      759|         # Process mkMerge and mkIf properties.
      760|         defs' = concatMap (m:
         |                 ^
      761|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

   … while evaluating the attribute 'values'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:873:7:

      872|     in {
      873|       values = concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
         |       ^
      874|       inherit highestPrio;

   … while evaluating the attribute 'values'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:774:9:

      773|       in {
      774|         values = defs''';
         |         ^
      775|         inherit (defs'') highestPrio;

   … while evaluating the attribute 'optionalValue'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:792:5:

      791|
      792|     optionalValue =
         |     ^
      793|       if isDefined then { value = mergedValue; }

   … while evaluating anonymous lambda

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/types.nix:404:21:

      403|         map (x: x.value) (filter (x: x ? value) (concatLists (imap1 (n: def:
      404|           imap1 (m: def':
         |                     ^
      405|             (mergeDefinitions

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/lists.nix:117:32:

      116|   */
      117|   imap1 = f: list: genList (n: f (n + 1) (elemAt list n)) (length list);
         |                                ^
      118|

   … while evaluating anonymous lambda

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/lists.nix:117:29:

      116|   */
      117|   imap1 = f: list: genList (n: f (n + 1) (elemAt list n)) (length list);
         |                             ^
      118|

   … from call site

   … while evaluating anonymous lambda

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/types.nix:403:35:

      402|       merge = loc: defs:
      403|         map (x: x.value) (filter (x: x ? value) (concatLists (imap1 (n: def:
         |                                   ^
      404|           imap1 (m: def':

   … from call site

   … while evaluating 'merge'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/types.nix:402:20:

      401|       check = isList;
      402|       merge = loc: defs:
         |                    ^
      403|         map (x: x.value) (filter (x: x ? value) (concatLists (imap1 (n: def:

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:782:59:

      781|       if isDefined then
      782|         if all (def: type.check def.value) defsFinal then type.merge loc defsFinal
         |                                                           ^
      783|         else let allInvalid = filter (def: ! type.check def.value) defsFinal;

   … while evaluating the attribute 'mergedValue'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:780:5:

      779|     # Type-check the remaining definitions, and merge them. Or throw if no definitions.
      780|     mergedValue =
         |     ^
      781|       if isDefined then

   … while evaluating the option `environment.systemPackages':

   … while evaluating the attribute 'value'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:746:9:

      745|     in warnDeprecation opt //
      746|       { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
         |         ^
      747|         inherit (res.defsFinal') highestPrio;

   … while evaluating anonymous lambda

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:296:72:

      295|           # For definitions that have an associated option
      296|           declaredConfig = mapAttrsRecursiveCond (v: ! isOption v) (_: v: v.value) options;
         |                                                                        ^
      297|

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:401:20:

      400|               then recurse (path ++ [name]) value
      401|               else f (path ++ [name]) value;
         |                    ^
      402|         in mapAttrs g;

   … while evaluating 'g'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:398:19:

      397|           g =
      398|             name: value:
         |                   ^
      399|             if isAttrs value && cond value

   … from call site

   … while evaluating the attribute 'passAsFile'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/pkgs/build-support/buildenv/default.nix:77:5:

       76|     # XXX: The size is somewhat arbitrary
       77|     passAsFile = if builtins.stringLength pkgs >= 128*1024 then [ "pkgs" ] else [ ];
         |     ^
       78|   }

   … while evaluating the attribute 'passAsFile' of the derivation 'system-path'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/pkgs/stdenv/generic/make-derivation.nix:278:7:

      277|     // (lib.optionalAttrs (attrs ? name || (attrs ? pname && attrs ? version)) {
      278|       name =
         |       ^
      279|         let

   … while evaluating 'check'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/types.nix:394:15:

      393|       name = "path";
      394|       check = x: isCoercibleToString x && builtins.substring 0 1 (toString x) == "/";
         |               ^
      395|       merge = mergeEqualOption;

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:782:22:

      781|       if isDefined then
      782|         if all (def: type.check def.value) defsFinal then type.merge loc defsFinal
         |                      ^
      783|         else let allInvalid = filter (def: ! type.check def.value) defsFinal;

   … while evaluating anonymous lambda

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:782:17:

      781|       if isDefined then
      782|         if all (def: type.check def.value) defsFinal then type.merge loc defsFinal
         |                 ^
      783|         else let allInvalid = filter (def: ! type.check def.value) defsFinal;

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:782:12:

      781|       if isDefined then
      782|         if all (def: type.check def.value) defsFinal then type.merge loc defsFinal
         |            ^
      783|         else let allInvalid = filter (def: ! type.check def.value) defsFinal;

   … while evaluating the attribute 'value'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:793:27:

      792|     optionalValue =
      793|       if isDefined then { value = mergedValue; }
         |                           ^
      794|       else {};

   … while evaluating anonymous lambda

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/types.nix:403:14:

      402|       merge = loc: defs:
      403|         map (x: x.value) (filter (x: x ? value) (concatLists (imap1 (n: def:
         |              ^
      404|           imap1 (m: def':

   … from call site

   … while evaluating the attribute 'serviceDirectories' of the derivation 'dbus-1'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/pkgs/stdenv/generic/make-derivation.nix:278:7:

      277|     // (lib.optionalAttrs (attrs ? name || (attrs ? pname && attrs ? version)) {
      278|       name =
         |       ^
      279|         let

   … while evaluating 'check'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/types.nix:394:15:

      393|       name = "path";
      394|       check = x: isCoercibleToString x && builtins.substring 0 1 (toString x) == "/";
         |               ^
      395|       merge = mergeEqualOption;

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:782:22:

      781|       if isDefined then
      782|         if all (def: type.check def.value) defsFinal then type.merge loc defsFinal
         |                      ^
      783|         else let allInvalid = filter (def: ! type.check def.value) defsFinal;

   … while evaluating anonymous lambda

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:782:17:

      781|       if isDefined then
      782|         if all (def: type.check def.value) defsFinal then type.merge loc defsFinal
         |                 ^
      783|         else let allInvalid = filter (def: ! type.check def.value) defsFinal;

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:782:12:

      781|       if isDefined then
      782|         if all (def: type.check def.value) defsFinal then type.merge loc defsFinal
         |            ^
      783|         else let allInvalid = filter (def: ! type.check def.value) defsFinal;

   … while evaluating the attribute 'mergedValue'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:780:5:

      779|     # Type-check the remaining definitions, and merge them. Or throw if no definitions.
      780|     mergedValue =
         |     ^
      781|       if isDefined then

   … while evaluating the option `environment.etc.dbus-1.source':

   … while evaluating the attribute 'value'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:746:9:

      745|     in warnDeprecation opt //
      746|       { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
         |         ^
      747|         inherit (res.defsFinal') highestPrio;

   … while evaluating anonymous lambda

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:296:72:

      295|           # For definitions that have an associated option
      296|           declaredConfig = mapAttrsRecursiveCond (v: ! isOption v) (_: v: v.value) options;
         |                                                                        ^
      297|

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:401:20:

      400|               then recurse (path ++ [name]) value
      401|               else f (path ++ [name]) value;
         |                    ^
      402|         in mapAttrs g;

   … while evaluating 'g'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:398:19:

      397|           g =
      398|             name: value:
         |                   ^
      399|             if isAttrs value && cond value

   … from call site

   … while evaluating 'escapeShellArg'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/strings.nix:316:20:

      315|   */
      316|   escapeShellArg = arg: "'${replaceStrings ["'"] ["'\\''"] (toString arg)}'";
         |                    ^
      317|

   … from call site

   … while evaluating 'concatMapStringsSep'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/strings.nix:111:5:

      110|     # List of input strings
      111|     list: concatStringsSep sep (map f list);
         |     ^
      112|

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/system/etc/etc.nix:54:43:

       53|     mkdir -p "$out/etc"
       54|     ${concatMapStringsSep "\n" (etcEntry: escapeShellArgs [
         |                                           ^
       55|       "makeEtcEntry"

   … while evaluating anonymous lambda

   at /nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/system/etc/etc.nix:54:33:

       53|     mkdir -p "$out/etc"
       54|     ${concatMapStringsSep "\n" (etcEntry: escapeShellArgs [
         |                                 ^
       55|       "makeEtcEntry"

   … from call site

   … while evaluating 'concatMapStringsSep'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/strings.nix:111:5:

      110|     # List of input strings
      111|     list: concatStringsSep sep (map f list);
         |     ^
      112|

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/system/etc/etc.nix:54:7:

       53|     mkdir -p "$out/etc"
       54|     ${concatMapStringsSep "\n" (etcEntry: escapeShellArgs [
         |       ^
       55|       "makeEtcEntry"

   … while evaluating the attribute 'buildCommand' of the derivation 'etc'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/pkgs/stdenv/generic/make-derivation.nix:278:7:

      277|     // (lib.optionalAttrs (attrs ? name || (attrs ? pname && attrs ? version)) {
      278|       name =
         |       ^
      279|         let

   … while evaluating the attribute 'value'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:581:44:

      580|       defnsByName' = byName "config" (module: value:
      581|           [{ inherit (module) file; inherit value; }]
         |                                            ^
      582|         ) configs;

   … while evaluating 'atDepth'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:60:17:

       59|       len = length attrPath;
       60|       atDepth = n:
         |                 ^
       61|         if n == len

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:63:39:

       62|         then value
       63|         else { ${elemAt attrPath n} = atDepth (n + 1); };
         |                                       ^
       64|     in atDepth 0;

   … while evaluating the attribute 'value'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/types.nix:461:58:

      460|         # Push down position info.
      461|         (map (def: mapAttrs (n: v: { inherit (def) file; value = v; }) def.value) defs);
         |                                                          ^
      462|       emptyValue = { value = {}; };

   … while evaluating 'dischargeProperties'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:832:25:

      831|   */
      832|   dischargeProperties = def:
         |                         ^
      833|     if def._type or "" == "merge" then

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:761:137:

      760|         defs' = concatMap (m:
      761|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
         |                                                                                                                                         ^
      762|         ) defs;

   … while evaluating definitions from `/nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/system/etc/etc.nix':

   … while evaluating anonymous lambda

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:760:28:

      759|         # Process mkMerge and mkIf properties.
      760|         defs' = concatMap (m:
         |                            ^
      761|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:760:17:

      759|         # Process mkMerge and mkIf properties.
      760|         defs' = concatMap (m:
         |                 ^
      761|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

   … while evaluating the attribute 'values'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:873:7:

      872|     in {
      873|       values = concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
         |       ^
      874|       inherit highestPrio;

   … while evaluating the attribute 'values'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:774:9:

      773|       in {
      774|         values = defs''';
         |         ^
      775|         inherit (defs'') highestPrio;

   … while evaluating the attribute 'optionalValue.value'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:792:5:

      791|
      792|     optionalValue =
         |     ^
      793|       if isDefined then { value = mergedValue; }

   … while evaluating anonymous lambda

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/types.nix:455:29:

      454|       merge = loc: defs:
      455|         zipAttrsWith (name: defs:
         |                             ^
      456|           let merged = mergeDefinitions (loc ++ [name]) elemType defs;

   … from call site

   … while evaluating anonymous lambda

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:518:24:

      517|     let f = attrPath:
      518|       zipAttrsWith (n: values:
         |                        ^
      519|         let here = attrPath ++ [n]; in

   … from call site

   … while evaluating the attribute 'value'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:581:44:

      580|       defnsByName' = byName "config" (module: value:
      581|           [{ inherit (module) file; inherit value; }]
         |                                            ^
      582|         ) configs;

   … while evaluating 'dischargeProperties'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:832:25:

      831|   */
      832|   dischargeProperties = def:
         |                         ^
      833|     if def._type or "" == "merge" then

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:761:137:

      760|         defs' = concatMap (m:
      761|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
         |                                                                                                                                         ^
      762|         ) defs;

   … while evaluating definitions from `/nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/system/etc/etc-activation.nix':

   … while evaluating anonymous lambda

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:760:28:

      759|         # Process mkMerge and mkIf properties.
      760|         defs' = concatMap (m:
         |                            ^
      761|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:760:17:

      759|         # Process mkMerge and mkIf properties.
      760|         defs' = concatMap (m:
         |                 ^
      761|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

   … while evaluating the attribute 'values'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:873:7:

      872|     in {
      873|       values = concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
         |       ^
      874|       inherit highestPrio;

   … while evaluating the attribute 'values'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:774:9:

      773|       in {
      774|         values = defs''';
         |         ^
      775|         inherit (defs'') highestPrio;

   … while evaluating the attribute 'mergedValue'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:780:5:

      779|     # Type-check the remaining definitions, and merge them. Or throw if no definitions.
      780|     mergedValue =
         |     ^
      781|       if isDefined then

   … while evaluating the option `system.activationScripts.etc.text':

   … while evaluating the attribute 'value'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:746:9:

      745|     in warnDeprecation opt //
      746|       { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
         |         ^
      747|         inherit (res.defsFinal') highestPrio;

   … while evaluating anonymous lambda

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/modules.nix:296:72:

      295|           # For definitions that have an associated option
      296|           declaredConfig = mapAttrsRecursiveCond (v: ! isOption v) (_: v: v.value) options;
         |                                                                        ^
      297|

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:401:20:

      400|               then recurse (path ++ [name]) value
      401|               else f (path ++ [name]) value;
         |                    ^
      402|         in mapAttrs g;

   … while evaluating 'g'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/attrsets.nix:398:19:

      397|           g =
      398|             name: value:
         |                   ^
      399|             if isAttrs value && cond value

   … from call site

   … while evaluating the attribute 'text'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/system/activation/activation-script.nix:9:5:

        8|   addAttributeName = mapAttrs (a: v: v // {
        9|     text = ''
         |     ^
       10|       #### Activation script snippet ${a}:

   … while evaluating 'id'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/trivial.nix:14:5:

       13|     # The value to return
       14|     x: x;
         |     ^
       15|

   … from call site

   … while evaluating 'textClosureMap'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/lib/strings-with-deps.nix:75:35:

       74|
       75|   textClosureMap = f: predefined: names:
         |                                   ^
       76|     concatStringsSep "\n" (map f (textClosureList predefined names));

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/system/activation/activation-script.nix:49:9:

       48|
       49|       ${textClosureMap id (withDrySnippets) (attrNames withDrySnippets)}
         |         ^
       50|

   … while evaluating 'systemActivationScript'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/system/activation/activation-script.nix:20:33:

       19|
       20|   systemActivationScript = set: onlyDry: let
         |                                 ^
       21|     set' = mapAttrs (_: v: if isString v then (noDepEntry v) // { supportsDryActivation = false; } else v) set;

   … from call site

   at /nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/system/activation/activation-script.nix:137:18:

      136|       apply = set: set // {
      137|         script = systemActivationScript set false;
         |                  ^
      138|       };

   … while evaluating the attribute 'system.activationScripts.script'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/system/activation/activation-script.nix:137:9:

      136|       apply = set: set // {
      137|         script = systemActivationScript set false;
         |         ^
      138|       };

   … while evaluating the attribute 'activationScript' of the derivation 'nixos-system-nixos-22.05.2397.5c211b47aea'

   at /nix/var/nix/profiles/per-user/root/channels/nixos/pkgs/stdenv/generic/make-derivation.nix:278:7:

      277|     // (lib.optionalAttrs (attrs ? name || (attrs ? pname && attrs ? version)) {
      278|       name =
         |       ^
      279|         let

Try this, asar is in nodePackages:

    (pkgs.callPackage ./everdo.nix {
      asar = nodePackages.asar;
    })
1 Like

This runs it, but the software screen is black. Maybe if I update it to a newer version, but now having an issue with hash mismatch. Where would I find the hash?

raphi, that was the final fix to get it to run. Except the software itself didn’t quite run right despite using the original version of the original poster. I did end up getting the software to run using an appimage. The solution is found on AppImage / Derivation

I appreciate your help and glad to have it working. My other programs will likely be easier as they are more mainstream.