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?
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
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.