feat: firefly working

This commit is contained in:
Patrick 2024-04-05 13:31:30 +02:00
parent 42f1a7ebe3
commit d7b649395c
Signed by: patrick
GPG key ID: 451F95EFB8BECD0F
10 changed files with 55 additions and 2585 deletions

View file

@ -17,7 +17,7 @@
; ;
package = cfg.package.override { package = cfg.package.override {
dataDir = cfg.dataDir; inherit (cfg) dataDir;
}; };
in { in {
options.services.firefly-iii = { options.services.firefly-iii = {
@ -77,16 +77,15 @@ in {
services.phpfpm = { services.phpfpm = {
settings = { settings = {
error_log = "syslog"; error_log = "syslog";
log_level = "debug";
}; };
pools.firefly-iii = { pools.firefly-iii = {
inherit (cfg) phpPackage;
phpOptions = '' phpOptions = ''
log_errors = yes log_errors = yes
error_reporting = E_ALL error_reporting = E_ALL
''; '';
user = "firefly-iii"; user = "firefly-iii";
group = "firefly-iii"; group = "firefly-iii";
phpPackage = cfg.phpPackage;
phpEnv = cfg.settings; phpEnv = cfg.settings;
settings = mapAttrs (_: mkDefault) { settings = mapAttrs (_: mkDefault) {
catch_workers_output = "yes"; catch_workers_output = "yes";
@ -117,11 +116,14 @@ in {
Type = "oneshot"; Type = "oneshot";
RemainAfterExit = true; RemainAfterExit = true;
User = "firefly-iii"; User = "firefly-iii";
WorkingDirectory = package; WorkingDirectory = cfg.dataDir;
}; };
script = '' script = ''
set -euo pipefail set -euo pipefail
umask 077 umask 077
cp -f -r ${package}/* ${cfg.dataDir}
find ${cfg.dataDir} -perm 400 -exec chmod 444 {} \;
find ${cfg.dataDir} -perm 500 -exec chmod 555 {} \;
${lib.optionalString cfg.dbCreateLocally '' ${lib.optionalString cfg.dbCreateLocally ''
mkdir -p ${cfg.dataDir}/storage/database/ mkdir -p ${cfg.dataDir}/storage/database/
touch ${cfg.dataDir}/storage/database/database.sqlite touch ${cfg.dataDir}/storage/database/database.sqlite
@ -138,7 +140,9 @@ in {
# Data dir # Data dir
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [
"d ${cfg.dataDir} 0710 firefly-iii firefly-iii - -" "d ${cfg.dataDir} 0750 firefly-iii firefly-iii - -"
"d ${cfg.dataDir}/bootstrap 0700 firefly-iii firefly-iii - -"
"d ${cfg.dataDir}/bootstrap/cache 0700 firefly-iii firefly-iii - -"
"d ${cfg.dataDir}/storage 0700 firefly-iii firefly-iii - -" "d ${cfg.dataDir}/storage 0700 firefly-iii firefly-iii - -"
"d ${cfg.dataDir}/storage/app 0700 firefly-iii firefly-iii - -" "d ${cfg.dataDir}/storage/app 0700 firefly-iii firefly-iii - -"
"d ${cfg.dataDir}/storage/database 0700 firefly-iii firefly-iii - -" "d ${cfg.dataDir}/storage/database 0700 firefly-iii firefly-iii - -"
@ -153,22 +157,20 @@ in {
services.nginx = { services.nginx = {
enable = mkDefault true; enable = mkDefault true;
recommendedSetup = true;
recommendedTlsSettings = mkDefault true; recommendedTlsSettings = mkDefault true;
recommendedOptimisation = mkDefault true; recommendedOptimisation = mkDefault true;
recommendedGzipSettings = mkDefault true; recommendedGzipSettings = mkDefault true;
virtualHosts.${cfg.virtualHost} = { virtualHosts.${cfg.virtualHost} = {
root = "${package}/public"; root = "${cfg.dataDir}/public";
locations = { locations = {
"/" = { "/" = {
index = "index.php";
tryFiles = "$uri $uri/ /index.php?$query_string"; tryFiles = "$uri $uri/ /index.php?$query_string";
index = "index.php";
extraConfig = '' extraConfig = ''
autoindex on;
sendfile off; sendfile off;
''; '';
}; };
"~* \\.php(?:$|/)" = { "~ \.php$" = {
extraConfig = '' extraConfig = ''
include ${config.services.nginx.package}/conf/fastcgi_params ; include ${config.services.nginx.package}/conf/fastcgi_params ;
fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param SCRIPT_FILENAME $request_filename;

View file

@ -1,4 +1,8 @@
{config, ...}: { {
config,
lib,
...
}: {
imports = [../fireflyIII.nix]; imports = [../fireflyIII.nix];
wireguard.elisabeth = { wireguard.elisabeth = {
@ -12,9 +16,9 @@
settings = { settings = {
APP_URL = "https://money.${config.secrets.secrets.global.domains.web}"; APP_URL = "https://money.${config.secrets.secrets.global.domains.web}";
TZ = "Europe/Berlin"; TZ = "Europe/Berlin";
TRUSTED_PROXIES = "**"; TRUSTED_PROXIES = lib.trace "fix" "*";
SITE_OWNER = "firefly-admin@${config.secrets.secrets.global.domains.mail_public}"; SITE_OWNER = "firefly-admin@${config.secrets.secrets.global.domains.mail_public}";
APP_KEY = "ctiectiectiectctiectiectiectieie"; APP_KEY = lib.trace "fix" "ctiectiectiectctiectiectiectieie";
}; };
}; };
} }

View file

@ -8,7 +8,7 @@
deploy = super.callPackage ./deploy.nix {}; deploy = super.callPackage ./deploy.nix {};
netbird-dashboard = super.callPackage ./netbird-dashboard {}; netbird-dashboard = super.callPackage ./netbird-dashboard {};
minify = super.callPackage ./minify {}; minify = super.callPackage ./minify {};
firefly-iii = super.callPackage ./firefly-iii {}; firefly-iii = super.callPackage ./firefly-iii.nix {};
mongodb-bin = super.callPackage ./mongodb-bin.nix {}; mongodb-bin = super.callPackage ./mongodb-bin.nix {};
awakened-poe-trade = super.callPackage ./awakened-poe-trade.nix {}; awakened-poe-trade = super.callPackage ./awakened-poe-trade.nix {};
neovim-clean = super.neovim-unwrapped.overrideAttrs (_neovimFinal: neovimPrev: { neovim-clean = super.neovim-unwrapped.overrideAttrs (_neovimFinal: neovimPrev: {

35
pkgs/firefly-iii.nix Normal file
View file

@ -0,0 +1,35 @@
{
stdenv,
lib,
fetchurl,
dataDir ? "/var/lib/firefly-iii",
}: let
version = "6.1.13";
src = fetchurl {
url = "https://github.com/firefly-iii/firefly-iii/releases/download/v${version}/FireflyIII-v${version}.tar.gz";
hash = "sha256-uQzk3pgdZ0baqmBouHfcuzrymwrsDy6b4IwSY3br6f0=";
};
in
stdenv.mkDerivation rec {
inherit src version;
pname = "firefly-iii";
sourceRoot = ".";
installPhase = ''
mkdir -p $out/storage
cp -r ./ $out
rm -R $out/storage
#ln -fs ${dataDir}/storage $out/storage
#ln -fs ${dataDir}/bootstrap/cache $out/bootstrap/cache
#ln -fs ${dataDir}/.env $out/.env
'';
meta = with lib; {
description = "Firefly III: a personal finances manager";
homepage = "https://github.com/firefly-iii/firefly-iii/";
changelog = "https://github.com/firefly-iii/firefly-iii/releases/tag/v${version}";
license = licenses.agpl3Only;
maintainers = with maintainers; [patrickdag];
mainProgram = "firefly-iii";
platforms = platforms.all;
};
}

View file

@ -1,19 +0,0 @@
{
pkgs ?
import <nixpkgs> {
inherit system;
},
system ? builtins.currentSystem,
noDev ? false,
php ? pkgs.php,
phpPackages ? pkgs.phpPackages,
}: let
composerEnv = import ./composer-env.nix {
inherit (pkgs) stdenv lib writeTextFile fetchurl unzip;
inherit php phpPackages;
};
in
import ./php-packages.nix {
inherit composerEnv noDev;
inherit (pkgs) fetchurl fetchgit fetchhg fetchsvn;
}

View file

@ -1,259 +0,0 @@
# This file originates from composer2nix
{
stdenv,
lib,
writeTextFile,
fetchurl,
php,
unzip,
phpPackages,
}: let
inherit (phpPackages) composer;
filterSrc = src:
builtins.filterSource (path: type: type != "directory" || (baseNameOf path != ".git" && baseNameOf path != ".git" && baseNameOf path != ".svn")) src;
buildZipPackage = {
name,
src,
}:
stdenv.mkDerivation {
inherit name src;
nativeBuildInputs = [unzip];
buildCommand = ''
shopt -s dotglob
unzip $src
baseDir=$(find . -type d -mindepth 1 -maxdepth 1)
cd $baseDir
mkdir -p $out
mv * $out
'';
};
buildPackage = {
name,
src,
packages ? {},
devPackages ? {},
buildInputs ? [],
symlinkDependencies ? false,
executable ? false,
removeComposerArtifacts ? false,
postInstall ? "",
noDev ? false,
composerExtraArgs ? "",
unpackPhase ? "true",
buildPhase ? "true",
...
} @ args: let
reconstructInstalled = writeTextFile {
name = "reconstructinstalled.php";
executable = true;
text = ''
#! ${php}/bin/php
<?php
if(file_exists($argv[1]))
{
$composerLockStr = file_get_contents($argv[1]);
if($composerLockStr === false)
{
fwrite(STDERR, "Cannot open composer.lock contents\n");
exit(1);
}
else
{
$config = json_decode($composerLockStr, true);
if(array_key_exists("packages", $config))
$allPackages = $config["packages"];
else
$allPackages = array();
${lib.optionalString (!noDev) ''
if(array_key_exists("packages-dev", $config))
$allPackages = array_merge($allPackages, $config["packages-dev"]);
''}
$packagesStr = json_encode($allPackages, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
print($packagesStr);
}
}
else
print("[]");
?>
'';
};
constructBin = writeTextFile {
name = "constructbin.php";
executable = true;
text = ''
#! ${php}/bin/php
<?php
$composerJSONStr = file_get_contents($argv[1]);
if($composerJSONStr === false)
{
fwrite(STDERR, "Cannot open composer.json contents\n");
exit(1);
}
else
{
$config = json_decode($composerJSONStr, true);
if(array_key_exists("bin-dir", $config))
$binDir = $config["bin-dir"];
else
$binDir = "bin";
if(array_key_exists("bin", $config))
{
if(!file_exists("vendor/".$binDir))
mkdir("vendor/".$binDir);
foreach($config["bin"] as $bin)
symlink("../../".$bin, "vendor/".$binDir."/".basename($bin));
}
}
?>
'';
};
bundleDependencies = dependencies:
lib.concatMapStrings (dependencyName: let
dependency = dependencies.${dependencyName};
in ''
${
if dependency.targetDir == ""
then ''
vendorDir="$(dirname ${dependencyName})"
mkdir -p "$vendorDir"
${
if symlinkDependencies
then ''ln -s "${dependency.src}" "$vendorDir/$(basename "${dependencyName}")"''
else ''cp -av "${dependency.src}" "$vendorDir/$(basename "${dependencyName}")"''
}
''
else ''
namespaceDir="${dependencyName}/$(dirname "${dependency.targetDir}")"
mkdir -p "$namespaceDir"
${
if symlinkDependencies
then ''ln -s "${dependency.src}" "$namespaceDir/$(basename "${dependency.targetDir}")"''
else ''cp -av "${dependency.src}" "$namespaceDir/$(basename "${dependency.targetDir}")"''
}
''
}
'') (builtins.attrNames dependencies);
extraArgs = removeAttrs args ["packages" "devPackages" "buildInputs"];
in
stdenv.mkDerivation ({
buildInputs = [php composer] ++ buildInputs;
inherit unpackPhase buildPhase;
installPhase = ''
${
if executable
then ''
mkdir -p $out/share/php
cp -av $src $out/share/php/$name
chmod -R u+w $out/share/php/$name
cd $out/share/php/$name
''
else ''
cp -av $src $out
chmod -R u+w $out
cd $out
''
}
# Remove unwanted files
rm -f *.nix
export HOME=$TMPDIR
# Remove the provided vendor folder if it exists
rm -Rf vendor
# If there is no composer.lock file, compose a dummy file.
# Otherwise, composer attempts to download the package.json file from
# the registry which we do not want.
if [ ! -f composer.lock ]
then
cat > composer.lock <<EOF
{
"packages": []
}
EOF
fi
# Reconstruct the installed.json file from the lock file
mkdir -p vendor/composer
${php}/bin/php ${reconstructInstalled} composer.lock > vendor/composer/installed.json
# Copy or symlink the provided dependencies
cd vendor
${bundleDependencies packages}
${lib.optionalString (!noDev) (bundleDependencies devPackages)}
cd ..
# The post Install phase needs an APP_KEY
echo "APP_KEY=SomeRandomStringOf32CharsExactly" > .env
# Reconstruct autoload scripts
# We use the optimize feature because Nix packages cannot change after they have been built
# Using the dynamic loader for a Nix package is useless since there is nothing to dynamically reload.
composer dump-autoload --optimize ${lib.optionalString noDev "--no-dev"} ${composerExtraArgs}
# Run the install step as a validation to confirm that everything works out as expected
composer install --optimize-autoloader ${lib.optionalString noDev "--no-dev"} ${composerExtraArgs}
${lib.optionalString executable ''
# Reconstruct the bin/ folder if we deploy an executable project
${php}/bin/php ${constructBin} composer.json
ln -s $(pwd)/vendor/bin $out/bin
''}
${lib.optionalString (!symlinkDependencies) ''
# Patch the shebangs if possible
if [ -d $(pwd)/vendor/bin ]
then
# Look for all executables in bin/
for i in $(pwd)/vendor/bin/*
do
# Look for their location
realFile=$(readlink -f "$i")
# Restore write permissions
chmod u+wx "$(dirname "$realFile")"
chmod u+w "$realFile"
# Patch shebang
sed -e "s|#!/usr/bin/php|#!${php}/bin/php|" \
-e "s|#!/usr/bin/env php|#!${php}/bin/php|" \
"$realFile" > tmp
mv tmp "$realFile"
chmod u+x "$realFile"
done
fi
''}
if [ "$removeComposerArtifacts" = "1" ]
then
# Remove composer stuff
rm -f composer.json composer.lock
fi
# Execute post install hook
runHook postInstall
'';
}
// extraArgs);
in {
inherit filterSrc;
composer = lib.makeOverridable composer;
buildZipPackage = lib.makeOverridable buildZipPackage;
buildPackage = lib.makeOverridable buildPackage;
}

View file

@ -1,46 +0,0 @@
{
pkgs,
stdenv,
lib,
fetchFromGitHub,
dataDir ? "/var/lib/firefly-iii",
}: let
version = "6.1.13";
src = fetchFromGitHub {
owner = "firefly-iii";
repo = "firefly-iii";
rev = "v${version}";
hash = "sha256-85zI8uCyyoCflzxDkvba6FWa9B3kh179DJfQ2Um6MGM=";
};
package =
(import ./compose2nix.nix {
inherit pkgs;
inherit (stdenv.hostPlatform) system;
noDev = true;
php = pkgs.php83;
phpPackages = pkgs.php83Packages;
})
.overrideAttrs (oldAttrs: {
installPhase =
oldAttrs.installPhase
+ ''
rm -R $out/storage
ln -s ${dataDir}/storage $out/storage
'';
});
in
package.override rec {
inherit src version;
pname = "firefly-iii";
meta = with lib; {
description = "Firefly III: a personal finances manager";
homepage = "https://github.com/firefly-iii/firefly-iii/";
changelog = "https://github.com/firefly-iii/firefly-iii/releases/tag/v${version}";
license = licenses.agpl3Only;
maintainers = with maintainers; [patrickdag];
mainProgram = "firefly-iii";
platforms = platforms.all;
};
}

File diff suppressed because it is too large Load diff

View file

@ -1,563 +0,0 @@
{
"attributes": null,
"cpuTime": 0.05694299936294556,
"envs": {
"bytes": 10040,
"elements": 611,
"number": 322
},
"functions": [
{
"column": 1,
"count": 1,
"file": "/nix/store/na7sykizsgkzh9i3wc8m8pz5xfqib2rv-source/lib.nix",
"line": 1,
"name": null
},
{
"column": 43,
"count": 4,
"file": "/nix/store/k90n9mjy7v6s7m1gabx3y4pvwfgcp9zf-source/flake.nix",
"line": 154,
"name": null
},
{
"column": 13,
"count": 1,
"file": "/nix/store/k90n9mjy7v6s7m1gabx3y4pvwfgcp9zf-source/flake.nix",
"line": 109,
"name": "outputs"
},
{
"column": 32,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/flake.nix",
"line": 18,
"name": null
},
{
"column": 7,
"count": 3,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/fixed-points.nix",
"line": 248,
"name": "extends"
},
{
"column": 5,
"count": 2,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/fixed-points.nix",
"line": 244,
"name": "extends"
},
{
"column": 5,
"count": 2,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/fixed-points.nix",
"line": 242,
"name": "extends"
},
{
"column": 13,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/flake.nix",
"line": 6,
"name": "outputs"
},
{
"column": 12,
"count": 4,
"file": "/nix/store/na7sykizsgkzh9i3wc8m8pz5xfqib2rv-source/lib.nix",
"line": 34,
"name": "op"
},
{
"column": 23,
"count": 24,
"file": "/nix/store/na7sykizsgkzh9i3wc8m8pz5xfqib2rv-source/lib.nix",
"line": 37,
"name": "op"
},
{
"column": 16,
"count": 24,
"file": "/nix/store/na7sykizsgkzh9i3wc8m8pz5xfqib2rv-source/lib.nix",
"line": 37,
"name": "op"
},
{
"column": 25,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/flake.nix",
"line": 18,
"name": null
},
{
"column": 25,
"count": 1,
"file": "/nix/store/na7sykizsgkzh9i3wc8m8pz5xfqib2rv-source/lib.nix",
"line": 31,
"name": "eachSystem"
},
{
"column": 16,
"count": 1,
"file": "/nix/store/na7sykizsgkzh9i3wc8m8pz5xfqib2rv-source/lib.nix",
"line": 31,
"name": "eachSystem"
},
{
"column": 13,
"count": 1,
"file": "/nix/store/yj1wxm9hh8610iyzqnz75kvs6xl8j3my-source/flake.nix",
"line": 5,
"name": "outputs"
},
{
"column": 19,
"count": 4,
"file": "/nix/store/na7sykizsgkzh9i3wc8m8pz5xfqib2rv-source/lib.nix",
"line": 34,
"name": "op"
},
{
"column": 16,
"count": 3,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/default.nix",
"line": 11,
"name": "callLibs"
},
{
"column": 5,
"count": 5,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 961,
"name": "recursiveUpdateUntil"
},
{
"column": 5,
"count": 5,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 959,
"name": "recursiveUpdateUntil"
},
{
"column": 5,
"count": 5,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 957,
"name": "recursiveUpdateUntil"
},
{
"column": 38,
"count": 8,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 1000,
"name": null
},
{
"column": 33,
"count": 8,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 1000,
"name": null
},
{
"column": 27,
"count": 8,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 1000,
"name": null
},
{
"column": 5,
"count": 5,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 999,
"name": "recursiveUpdate"
},
{
"column": 5,
"count": 5,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 997,
"name": "recursiveUpdate"
},
{
"column": 1,
"count": 2,
"file": "/nix/store/k90n9mjy7v6s7m1gabx3y4pvwfgcp9zf-source/nix/hosts.nix",
"line": 1,
"name": null
},
{
"column": 25,
"count": 3,
"line": 25,
"name": null
},
{
"column": 14,
"count": 3,
"line": 25,
"name": null
},
{
"column": 23,
"count": 1,
"line": 2,
"name": null
},
{
"column": 10,
"count": 5,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 649,
"name": null
},
{
"column": 5,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 648,
"name": "mapAttrsToList"
},
{
"column": 5,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 646,
"name": "mapAttrsToList"
},
{
"column": 1,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/lists.nix",
"line": 2,
"name": null
},
{
"column": 16,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/trivial.nix",
"line": 133,
"name": "flip"
},
{
"column": 13,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/trivial.nix",
"line": 133,
"name": "flip"
},
{
"column": 10,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/trivial.nix",
"line": 133,
"name": "flip"
},
{
"column": 1,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/trivial.nix",
"line": 1,
"name": null
},
{
"column": 32,
"count": 5,
"file": "/nix/store/k90n9mjy7v6s7m1gabx3y4pvwfgcp9zf-source/nix/hosts.nix",
"line": 46,
"name": null
},
{
"column": 29,
"count": 5,
"file": "/nix/store/k90n9mjy7v6s7m1gabx3y4pvwfgcp9zf-source/nix/hosts.nix",
"line": 46,
"name": null
},
{
"column": 13,
"count": 1,
"file": "/nix/store/na7sykizsgkzh9i3wc8m8pz5xfqib2rv-source/flake.nix",
"line": 7,
"name": "outputs"
},
{
"column": 13,
"count": 4,
"line": 10,
"name": null
},
{
"column": 8,
"count": 4,
"line": 10,
"name": null
},
{
"column": 26,
"count": 4,
"line": 31,
"name": "resolveInput"
},
{
"column": 38,
"count": 2,
"line": 38,
"name": "getInputByPath"
},
{
"column": 25,
"count": 2,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/fixed-points.nix",
"line": 307,
"name": "extend"
},
{
"column": 11,
"count": 3,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/fixed-points.nix",
"line": 306,
"name": null
},
{
"column": 48,
"count": 3,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/fixed-points.nix",
"line": 305,
"name": "makeExtensibleWithCustomName"
},
{
"column": 34,
"count": 3,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/fixed-points.nix",
"line": 305,
"name": "makeExtensibleWithCustomName"
},
{
"column": 1,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/fixed-points.nix",
"line": 1,
"name": null
},
{
"column": 29,
"count": 5,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 418,
"name": null
},
{
"column": 5,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 417,
"name": "filterAttrs"
},
{
"column": 5,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 415,
"name": "filterAttrs"
},
{
"column": 25,
"count": 3,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/default.nix",
"line": 10,
"name": null
},
{
"column": 5,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/lists.nix",
"line": 138,
"name": "foldl'"
},
{
"column": 5,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/lists.nix",
"line": 136,
"name": "foldl'"
},
{
"column": 5,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/lists.nix",
"line": 134,
"name": "foldl'"
},
{
"column": 24,
"count": 9,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 963,
"name": null
},
{
"column": 21,
"count": 9,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 963,
"name": null
},
{
"column": 13,
"count": 13,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 962,
"name": "f"
},
{
"column": 24,
"count": 5,
"file": "/nix/store/k90n9mjy7v6s7m1gabx3y4pvwfgcp9zf-source/nix/generate-installer-package.nix",
"line": 1,
"name": null
},
{
"column": 14,
"count": 5,
"file": "/nix/store/k90n9mjy7v6s7m1gabx3y4pvwfgcp9zf-source/nix/generate-installer-package.nix",
"line": 1,
"name": null
},
{
"column": 1,
"count": 1,
"file": "/nix/store/k90n9mjy7v6s7m1gabx3y4pvwfgcp9zf-source/nix/generate-installer-package.nix",
"line": 1,
"name": null
},
{
"column": 14,
"count": 1,
"line": 2,
"name": null
},
{
"column": 1,
"count": 1,
"line": 2,
"name": null
},
{
"column": 5,
"count": 5,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 595,
"name": "nameValuePair"
},
{
"column": 5,
"count": 5,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 593,
"name": "nameValuePair"
},
{
"column": 11,
"count": 2,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/flake-version-info.nix",
"line": 12,
"name": null
},
{
"column": 1,
"count": 2,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/flake-version-info.nix",
"line": 12,
"name": null
},
{
"column": 1,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/flake-version-info.nix",
"line": 10,
"name": null
},
{
"column": 1,
"count": 1,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/attrsets.nix",
"line": 2,
"name": null
},
{
"column": 10,
"count": 3,
"file": "/nix/store/nra828scc8qs92b9pxra5csqzffb6hpl-source/lib/fixed-points.nix",
"line": 84,
"name": "fix'"
},
{
"column": 28,
"count": 2,
"line": 38,
"name": "getInputByPath"
}
],
"gc": {
"heapSize": 402915328,
"totalBytes": 579024
},
"list": {
"bytes": 1480,
"concats": 1,
"elements": 185
},
"nrAvoided": 324,
"nrFunctionCalls": 263,
"nrLookups": 149,
"nrOpUpdateValuesCopied": 4133,
"nrOpUpdates": 49,
"nrPrimOpCalls": 112,
"nrThunks": 1907,
"primops": {
"attrNames": 6,
"concatMap": 1,
"elemAt": 8,
"fetchTree": 3,
"foldl'": 6,
"fromJSON": 1,
"fromTOML": 2,
"head": 10,
"import": 15,
"isAttrs": 16,
"isFunction": 4,
"isList": 4,
"length": 9,
"listToAttrs": 1,
"map": 1,
"mapAttrs": 5,
"readFile": 2,
"removeAttrs": 3,
"seq": 1,
"tail": 1,
"zipAttrsWith": 13
},
"sets": {
"bytes": 132800,
"elements": 7704,
"number": 596
},
"sizes": {
"Attr": 16,
"Bindings": 16,
"Env": 16,
"Value": 24
},
"symbols": {
"bytes": 10273,
"number": 1031
},
"values": {
"bytes": 100320,
"number": 4180
}
}