Compare changes

Choose any two refs to compare.

Changed files
+4321 -738
.direnv
dns
home
hosts
modules
overlays
pkgs
+8
.direnv/bin/nix-direnv-reload
··· 1 + #!/usr/bin/env bash 2 + dir="$(realpath $(dirname ${BASH_SOURCE[0]})/../..)" 3 + _nix_direnv_force_reload=1 direnv exec "$dir" true 4 + direnv reload 5 + # direnv reload updates the mtime of .envrc. Also update the timestamp of the 6 + # profile_rc file to keep track that we actually are up to date. 7 + touch $dir/.direnv/{nix,flake}-profile-*.rc 8 +
+1863
.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc
··· 1 + unset shellHook 2 + PATH=${PATH:-} 3 + nix_saved_PATH="$PATH" 4 + XDG_DATA_DIRS=${XDG_DATA_DIRS:-} 5 + nix_saved_XDG_DATA_DIRS="$XDG_DATA_DIRS" 6 + AR='ar' 7 + export AR 8 + AS='as' 9 + export AS 10 + BASH='/nix/store/7dpxg7ki7g8ynkdwcqf493p2x8divb4i-bash-5.2-p15/bin/bash' 11 + CC='gcc' 12 + export CC 13 + CONFIG_SHELL='/nix/store/7dpxg7ki7g8ynkdwcqf493p2x8divb4i-bash-5.2-p15/bin/bash' 14 + export CONFIG_SHELL 15 + CXX='g++' 16 + export CXX 17 + HOSTTYPE='x86_64' 18 + HOST_PATH='/nix/store/m38gwq0w8w7qyjn9s00balyp7cv3m5p9-coreutils-9.3/bin:/nix/store/01znf87kiw5xx1dj0f7djrnrbg84ij28-findutils-4.9.0/bin:/nix/store/vq4vmndw555m7ld2bi6pq8kr348qvb6a-diffutils-3.10/bin:/nix/store/rwa7qyds01qzxvq7zq3kgnkrzzpw4s66-gnused-4.9/bin:/nix/store/n062zcsmfl9gfp6vfkcg0asb8jjwmy5i-gnugrep-3.11/bin:/nix/store/4v7m4yx07b3anmbznfhihjc8xiizyna9-gawk-5.2.2/bin:/nix/store/mi3pm67ps7c7k11aqki9182ygzg8j503-gnutar-1.35/bin:/nix/store/5c0ancqnpi0cf1h49mv13w68a950s9z0-gzip-1.13/bin:/nix/store/q5cv7r1sh3s4niyq7vm6h1j74394naxs-bzip2-1.0.8-bin/bin:/nix/store/bh7sbl99ygfvw9w96936nrhw46jmcmqq-gnumake-4.4.1/bin:/nix/store/7dpxg7ki7g8ynkdwcqf493p2x8divb4i-bash-5.2-p15/bin:/nix/store/mbh9gx43gsc5av019vsdkazbyiic3f0f-patch-2.7.6/bin:/nix/store/3q6fnwcm677l1q60vkhcf9m1gxhv83jm-xz-5.4.4-bin/bin:/nix/store/a5s2dmba16pw8l52f496gw0b7nli7mbn-file-5.45/bin' 19 + export HOST_PATH 20 + IFS=' 21 + ' 22 + IN_NIX_SHELL='impure' 23 + export IN_NIX_SHELL 24 + LD='ld' 25 + export LD 26 + LINENO='76' 27 + MACHTYPE='x86_64-pc-linux-gnu' 28 + NIX_BINTOOLS='/nix/store/qcg3rpl1l103zb1xfsw40wm9j5hzrp7y-binutils-wrapper-2.40' 29 + export NIX_BINTOOLS 30 + NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1' 31 + export NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu 32 + NIX_BUILD_CORES='4' 33 + export NIX_BUILD_CORES 34 + NIX_CC='/nix/store/vylmp73qymnv4siaqn1kl2hghj07hrj8-gcc-wrapper-12.3.0' 35 + export NIX_CC 36 + NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1' 37 + export NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu 38 + NIX_CFLAGS_COMPILE=' -frandom-seed=q6hnwi6rdy -isystem /nix/store/hsv5438lvzq106llix5xi0f7cdvqk95q-nix-2.18.1-dev/include -isystem /nix/store/gdz3j02p6mfzmxs9zsssszwpppigb70g-boehm-gc-8.2.2-dev/include -isystem /nix/store/d7jspi1ws93ya34zriyrdxz5v5z6lijj-nlohmann_json-3.11.2/include -isystem /nix/store/hsv5438lvzq106llix5xi0f7cdvqk95q-nix-2.18.1-dev/include -isystem /nix/store/gdz3j02p6mfzmxs9zsssszwpppigb70g-boehm-gc-8.2.2-dev/include -isystem /nix/store/d7jspi1ws93ya34zriyrdxz5v5z6lijj-nlohmann_json-3.11.2/include' 39 + export NIX_CFLAGS_COMPILE 40 + NIX_CONFIG='experimental-features = nix-command flakes' 41 + export NIX_CONFIG 42 + NIX_ENFORCE_NO_NATIVE='1' 43 + export NIX_ENFORCE_NO_NATIVE 44 + NIX_HARDENING_ENABLE='fortify fortify3 stackprotector pic strictoverflow format relro bindnow' 45 + export NIX_HARDENING_ENABLE 46 + NIX_LDFLAGS='-rpath /home/anish/usr/helm/outputs/out/lib -L/nix/store/gfmmah5rc4vl8mhli495lh5savq842p0-boehm-gc-8.2.2/lib -L/nix/store/j7nl2pj606d8ld5818hw3z3fbz00sdc5-nix-2.18.1/lib -L/nix/store/gfmmah5rc4vl8mhli495lh5savq842p0-boehm-gc-8.2.2/lib -L/nix/store/j7nl2pj606d8ld5818hw3z3fbz00sdc5-nix-2.18.1/lib' 47 + export NIX_LDFLAGS 48 + NIX_NO_SELF_RPATH='1' 49 + NIX_STORE='/nix/store' 50 + export NIX_STORE 51 + NM='nm' 52 + export NM 53 + OBJCOPY='objcopy' 54 + export OBJCOPY 55 + OBJDUMP='objdump' 56 + export OBJDUMP 57 + OLDPWD='' 58 + export OLDPWD 59 + OPTERR='1' 60 + OSTYPE='linux-gnu' 61 + PATH='/nix/store/j7nl2pj606d8ld5818hw3z3fbz00sdc5-nix-2.18.1/bin:/nix/store/p3s38kgwd16d2dimspckp5f1rri43mnq-home-manager-unstable-2023-12-31/bin:/nix/store/pz4jng8kb4iv9x67r730las2mdkv8s8q-git-2.42.0/bin:/nix/store/p8p72q6anyf0whaf9i75jynzk2z4ml36-agenix-0.13.0/bin:/nix/store/lfx4in7iqbbx5b6b85cndw268ria5512-deploy-rs-unstable-2023-12-20/bin:/nix/store/8nwmr2kmkrl1mnggka7fjibcglk68rc0-dnscontrol-4.6.0/bin:/nix/store/h3ayxf5dk1gdf3s5716fh1ys815qxxag-patchelf-0.15.0/bin:/nix/store/vylmp73qymnv4siaqn1kl2hghj07hrj8-gcc-wrapper-12.3.0/bin:/nix/store/f94yr35af3xdiscbj6cp6kafvmn55gv9-gcc-12.3.0/bin:/nix/store/vksrk76p5cfbjxb0n95vdkxy7fl2cbcm-glibc-2.38-27-bin/bin:/nix/store/m38gwq0w8w7qyjn9s00balyp7cv3m5p9-coreutils-9.3/bin:/nix/store/qcg3rpl1l103zb1xfsw40wm9j5hzrp7y-binutils-wrapper-2.40/bin:/nix/store/idiaraknw071d20nlqp49s18gbvw4wa0-binutils-2.40/bin:/nix/store/m38gwq0w8w7qyjn9s00balyp7cv3m5p9-coreutils-9.3/bin:/nix/store/01znf87kiw5xx1dj0f7djrnrbg84ij28-findutils-4.9.0/bin:/nix/store/vq4vmndw555m7ld2bi6pq8kr348qvb6a-diffutils-3.10/bin:/nix/store/rwa7qyds01qzxvq7zq3kgnkrzzpw4s66-gnused-4.9/bin:/nix/store/n062zcsmfl9gfp6vfkcg0asb8jjwmy5i-gnugrep-3.11/bin:/nix/store/4v7m4yx07b3anmbznfhihjc8xiizyna9-gawk-5.2.2/bin:/nix/store/mi3pm67ps7c7k11aqki9182ygzg8j503-gnutar-1.35/bin:/nix/store/5c0ancqnpi0cf1h49mv13w68a950s9z0-gzip-1.13/bin:/nix/store/q5cv7r1sh3s4niyq7vm6h1j74394naxs-bzip2-1.0.8-bin/bin:/nix/store/bh7sbl99ygfvw9w96936nrhw46jmcmqq-gnumake-4.4.1/bin:/nix/store/7dpxg7ki7g8ynkdwcqf493p2x8divb4i-bash-5.2-p15/bin:/nix/store/mbh9gx43gsc5av019vsdkazbyiic3f0f-patch-2.7.6/bin:/nix/store/3q6fnwcm677l1q60vkhcf9m1gxhv83jm-xz-5.4.4-bin/bin:/nix/store/a5s2dmba16pw8l52f496gw0b7nli7mbn-file-5.45/bin' 62 + export PATH 63 + PS4='+ ' 64 + RANLIB='ranlib' 65 + export RANLIB 66 + READELF='readelf' 67 + export READELF 68 + SIZE='size' 69 + export SIZE 70 + SOURCE_DATE_EPOCH='315532800' 71 + export SOURCE_DATE_EPOCH 72 + STRINGS='strings' 73 + export STRINGS 74 + STRIP='strip' 75 + export STRIP 76 + XDG_DATA_DIRS='/nix/store/gfmmah5rc4vl8mhli495lh5savq842p0-boehm-gc-8.2.2/share:/nix/store/d7jspi1ws93ya34zriyrdxz5v5z6lijj-nlohmann_json-3.11.2/share:/nix/store/j7nl2pj606d8ld5818hw3z3fbz00sdc5-nix-2.18.1/share:/nix/store/p3s38kgwd16d2dimspckp5f1rri43mnq-home-manager-unstable-2023-12-31/share:/nix/store/pz4jng8kb4iv9x67r730las2mdkv8s8q-git-2.42.0/share:/nix/store/h3ayxf5dk1gdf3s5716fh1ys815qxxag-patchelf-0.15.0/share' 77 + export XDG_DATA_DIRS 78 + __structuredAttrs='' 79 + export __structuredAttrs 80 + buildInputs='' 81 + export buildInputs 82 + buildPhase='{ echo "------------------------------------------------------------"; 83 + echo " WARNING: the existence of this path is not guaranteed."; 84 + echo " It is an internal implementation detail for pkgs.mkShell."; 85 + echo "------------------------------------------------------------"; 86 + echo; 87 + # Record all build inputs as runtime dependencies 88 + export; 89 + } >> "$out" 90 + ' 91 + export buildPhase 92 + builder='/nix/store/7dpxg7ki7g8ynkdwcqf493p2x8divb4i-bash-5.2-p15/bin/bash' 93 + export builder 94 + cmakeFlags='' 95 + export cmakeFlags 96 + configureFlags='' 97 + export configureFlags 98 + defaultBuildInputs='' 99 + defaultNativeBuildInputs='/nix/store/h3ayxf5dk1gdf3s5716fh1ys815qxxag-patchelf-0.15.0 /nix/store/v5qyd49a256y44pz75qnsp9741mg336k-update-autotools-gnu-config-scripts-hook /nix/store/h9lc1dpi14z7is86ffhl3ld569138595-audit-tmpdir.sh /nix/store/m54bmrhj6fqz8nds5zcj97w9s9bckc9v-compress-man-pages.sh /nix/store/wgrbkkaldkrlrni33ccvm3b6vbxzb656-make-symlinks-relative.sh /nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh /nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh /nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh /nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh /nix/store/jivxp510zxakaaic7qkrb7v1dd2rdbw9-multiple-outputs.sh /nix/store/wzdsbnv2ba3nj91aql8jjdddfmkkdh7h-patch-shebangs.sh /nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh /nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh /nix/store/ngg1cv31c8c7bcm2n8ww4g06nq7s4zhm-set-source-date-epoch-to-latest.sh /nix/store/wmknncrif06fqxa16hpdldhixk95nds0-strip.sh /nix/store/vylmp73qymnv4siaqn1kl2hghj07hrj8-gcc-wrapper-12.3.0' 100 + depsBuildBuild='' 101 + export depsBuildBuild 102 + depsBuildBuildPropagated='' 103 + export depsBuildBuildPropagated 104 + depsBuildTarget='' 105 + export depsBuildTarget 106 + depsBuildTargetPropagated='' 107 + export depsBuildTargetPropagated 108 + depsHostHost='' 109 + export depsHostHost 110 + depsHostHostPropagated='' 111 + export depsHostHostPropagated 112 + depsTargetTarget='' 113 + export depsTargetTarget 114 + depsTargetTargetPropagated='' 115 + export depsTargetTargetPropagated 116 + doCheck='' 117 + export doCheck 118 + doInstallCheck='' 119 + export doInstallCheck 120 + dontAddDisableDepTrack='1' 121 + export dontAddDisableDepTrack 122 + declare -a envBuildBuildHooks=() 123 + declare -a envBuildHostHooks=() 124 + declare -a envBuildTargetHooks=() 125 + declare -a envHostHostHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) 126 + declare -a envHostTargetHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) 127 + declare -a envTargetTargetHooks=() 128 + declare -a fixupOutputHooks=('if [ -z "${dontPatchELF-}" ]; then patchELF "$prefix"; fi' 'if [[ -z "${noAuditTmpdir-}" && -e "$prefix" ]]; then auditTmpdir "$prefix"; fi' 'if [ -z "${dontGzipMan-}" ]; then compressManPages "$prefix"; fi' '_moveLib64' '_moveSbin' '_moveSystemdUserUnits' 'patchShebangsAuto' '_pruneLibtoolFiles' '_doStrip' ) 129 + guess='4' 130 + initialPath='/nix/store/m38gwq0w8w7qyjn9s00balyp7cv3m5p9-coreutils-9.3 /nix/store/01znf87kiw5xx1dj0f7djrnrbg84ij28-findutils-4.9.0 /nix/store/vq4vmndw555m7ld2bi6pq8kr348qvb6a-diffutils-3.10 /nix/store/rwa7qyds01qzxvq7zq3kgnkrzzpw4s66-gnused-4.9 /nix/store/n062zcsmfl9gfp6vfkcg0asb8jjwmy5i-gnugrep-3.11 /nix/store/4v7m4yx07b3anmbznfhihjc8xiizyna9-gawk-5.2.2 /nix/store/mi3pm67ps7c7k11aqki9182ygzg8j503-gnutar-1.35 /nix/store/5c0ancqnpi0cf1h49mv13w68a950s9z0-gzip-1.13 /nix/store/q5cv7r1sh3s4niyq7vm6h1j74394naxs-bzip2-1.0.8-bin /nix/store/bh7sbl99ygfvw9w96936nrhw46jmcmqq-gnumake-4.4.1 /nix/store/7dpxg7ki7g8ynkdwcqf493p2x8divb4i-bash-5.2-p15 /nix/store/mbh9gx43gsc5av019vsdkazbyiic3f0f-patch-2.7.6 /nix/store/3q6fnwcm677l1q60vkhcf9m1gxhv83jm-xz-5.4.4-bin /nix/store/a5s2dmba16pw8l52f496gw0b7nli7mbn-file-5.45' 131 + mesonFlags='' 132 + export mesonFlags 133 + name='nix-shell-env' 134 + export name 135 + nativeBuildInputs='/nix/store/hsv5438lvzq106llix5xi0f7cdvqk95q-nix-2.18.1-dev /nix/store/p3s38kgwd16d2dimspckp5f1rri43mnq-home-manager-unstable-2023-12-31 /nix/store/pz4jng8kb4iv9x67r730las2mdkv8s8q-git-2.42.0 /nix/store/p8p72q6anyf0whaf9i75jynzk2z4ml36-agenix-0.13.0 /nix/store/lfx4in7iqbbx5b6b85cndw268ria5512-deploy-rs-unstable-2023-12-20 /nix/store/8nwmr2kmkrl1mnggka7fjibcglk68rc0-dnscontrol-4.6.0' 136 + export nativeBuildInputs 137 + out='/home/anish/usr/helm/outputs/out' 138 + export out 139 + outputBin='out' 140 + outputDev='out' 141 + outputDevdoc='REMOVE' 142 + outputDevman='out' 143 + outputDoc='out' 144 + outputInclude='out' 145 + outputInfo='out' 146 + outputLib='out' 147 + outputMan='out' 148 + outputs='out' 149 + export outputs 150 + patches='' 151 + export patches 152 + phases='buildPhase' 153 + export phases 154 + pkg='/nix/store/vylmp73qymnv4siaqn1kl2hghj07hrj8-gcc-wrapper-12.3.0' 155 + declare -a pkgsBuildBuild=() 156 + declare -a pkgsBuildHost=('/nix/store/hsv5438lvzq106llix5xi0f7cdvqk95q-nix-2.18.1-dev' '/nix/store/gdz3j02p6mfzmxs9zsssszwpppigb70g-boehm-gc-8.2.2-dev' '/nix/store/gfmmah5rc4vl8mhli495lh5savq842p0-boehm-gc-8.2.2' '/nix/store/d7jspi1ws93ya34zriyrdxz5v5z6lijj-nlohmann_json-3.11.2' '/nix/store/j7nl2pj606d8ld5818hw3z3fbz00sdc5-nix-2.18.1' '/nix/store/p3s38kgwd16d2dimspckp5f1rri43mnq-home-manager-unstable-2023-12-31' '/nix/store/pz4jng8kb4iv9x67r730las2mdkv8s8q-git-2.42.0' '/nix/store/p8p72q6anyf0whaf9i75jynzk2z4ml36-agenix-0.13.0' '/nix/store/lfx4in7iqbbx5b6b85cndw268ria5512-deploy-rs-unstable-2023-12-20' '/nix/store/8nwmr2kmkrl1mnggka7fjibcglk68rc0-dnscontrol-4.6.0' '/nix/store/h3ayxf5dk1gdf3s5716fh1ys815qxxag-patchelf-0.15.0' '/nix/store/v5qyd49a256y44pz75qnsp9741mg336k-update-autotools-gnu-config-scripts-hook' '/nix/store/h9lc1dpi14z7is86ffhl3ld569138595-audit-tmpdir.sh' '/nix/store/m54bmrhj6fqz8nds5zcj97w9s9bckc9v-compress-man-pages.sh' '/nix/store/wgrbkkaldkrlrni33ccvm3b6vbxzb656-make-symlinks-relative.sh' '/nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh' '/nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh' '/nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh' '/nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh' '/nix/store/jivxp510zxakaaic7qkrb7v1dd2rdbw9-multiple-outputs.sh' '/nix/store/wzdsbnv2ba3nj91aql8jjdddfmkkdh7h-patch-shebangs.sh' '/nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh' '/nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh' '/nix/store/ngg1cv31c8c7bcm2n8ww4g06nq7s4zhm-set-source-date-epoch-to-latest.sh' '/nix/store/wmknncrif06fqxa16hpdldhixk95nds0-strip.sh' '/nix/store/vylmp73qymnv4siaqn1kl2hghj07hrj8-gcc-wrapper-12.3.0' '/nix/store/qcg3rpl1l103zb1xfsw40wm9j5hzrp7y-binutils-wrapper-2.40' ) 157 + declare -a pkgsBuildTarget=() 158 + declare -a pkgsHostHost=() 159 + declare -a pkgsHostTarget=() 160 + declare -a pkgsTargetTarget=() 161 + declare -a postFixupHooks=('_makeSymlinksRelativeInAllOutputs' '_multioutPropagateDev' ) 162 + declare -a postUnpackHooks=('_updateSourceDateEpochFromSourceRoot' ) 163 + declare -a preConfigureHooks=('_multioutConfig' ) 164 + preConfigurePhases=' updateAutotoolsGnuConfigScriptsPhase' 165 + declare -a preFixupHooks=('_moveToShare' '_multioutDocs' '_multioutDevs' ) 166 + preferLocalBuild='1' 167 + export preferLocalBuild 168 + prefix='/home/anish/usr/helm/outputs/out' 169 + declare -a propagatedBuildDepFiles=('propagated-build-build-deps' 'propagated-native-build-inputs' 'propagated-build-target-deps' ) 170 + propagatedBuildInputs='' 171 + export propagatedBuildInputs 172 + declare -a propagatedHostDepFiles=('propagated-host-host-deps' 'propagated-build-inputs' ) 173 + propagatedNativeBuildInputs='' 174 + export propagatedNativeBuildInputs 175 + declare -a propagatedTargetDepFiles=('propagated-target-target-deps' ) 176 + shell='/nix/store/7dpxg7ki7g8ynkdwcqf493p2x8divb4i-bash-5.2-p15/bin/bash' 177 + export shell 178 + shellHook='' 179 + export shellHook 180 + stdenv='/nix/store/kv5wkk7xgc8paw9azshzlmxraffqcg0i-stdenv-linux' 181 + export stdenv 182 + strictDeps='' 183 + export strictDeps 184 + system='x86_64-linux' 185 + export system 186 + declare -a unpackCmdHooks=('_defaultUnpack' ) 187 + _accumFlagsArray () 188 + { 189 + 190 + local name; 191 + if [ -n "$__structuredAttrs" ]; then 192 + for name in "$@"; 193 + do 194 + local -n nameref="$name"; 195 + flagsArray+=(${nameref+"${nameref[@]}"}); 196 + done; 197 + else 198 + for name in "$@"; 199 + do 200 + local -n nameref="$name"; 201 + case "$name" in 202 + *Array) 203 + flagsArray+=(${nameref+"${nameref[@]}"}) 204 + ;; 205 + *) 206 + flagsArray+=(${nameref-}) 207 + ;; 208 + esac; 209 + done; 210 + fi 211 + } 212 + _activatePkgs () 213 + { 214 + 215 + local hostOffset targetOffset; 216 + local pkg; 217 + for hostOffset in "${allPlatOffsets[@]}"; 218 + do 219 + local pkgsVar="${pkgAccumVarVars[hostOffset + 1]}"; 220 + for targetOffset in "${allPlatOffsets[@]}"; 221 + do 222 + (( hostOffset <= targetOffset )) || continue; 223 + local pkgsRef="${pkgsVar}[$targetOffset - $hostOffset]"; 224 + local pkgsSlice="${!pkgsRef}[@]"; 225 + for pkg in ${!pkgsSlice+"${!pkgsSlice}"}; 226 + do 227 + activatePackage "$pkg" "$hostOffset" "$targetOffset"; 228 + done; 229 + done; 230 + done 231 + } 232 + _addRpathPrefix () 233 + { 234 + 235 + if [ "${NIX_NO_SELF_RPATH:-0}" != 1 ]; then 236 + export NIX_LDFLAGS="-rpath $1/lib ${NIX_LDFLAGS-}"; 237 + fi 238 + } 239 + _addToEnv () 240 + { 241 + 242 + local depHostOffset depTargetOffset; 243 + local pkg; 244 + for depHostOffset in "${allPlatOffsets[@]}"; 245 + do 246 + local hookVar="${pkgHookVarVars[depHostOffset + 1]}"; 247 + local pkgsVar="${pkgAccumVarVars[depHostOffset + 1]}"; 248 + for depTargetOffset in "${allPlatOffsets[@]}"; 249 + do 250 + (( depHostOffset <= depTargetOffset )) || continue; 251 + local hookRef="${hookVar}[$depTargetOffset - $depHostOffset]"; 252 + if [[ -z "${strictDeps-}" ]]; then 253 + local visitedPkgs=""; 254 + for pkg in "${pkgsBuildBuild[@]}" "${pkgsBuildHost[@]}" "${pkgsBuildTarget[@]}" "${pkgsHostHost[@]}" "${pkgsHostTarget[@]}" "${pkgsTargetTarget[@]}"; 255 + do 256 + if [[ "$visitedPkgs" = *"$pkg"* ]]; then 257 + continue; 258 + fi; 259 + runHook "${!hookRef}" "$pkg"; 260 + visitedPkgs+=" $pkg"; 261 + done; 262 + else 263 + local pkgsRef="${pkgsVar}[$depTargetOffset - $depHostOffset]"; 264 + local pkgsSlice="${!pkgsRef}[@]"; 265 + for pkg in ${!pkgsSlice+"${!pkgsSlice}"}; 266 + do 267 + runHook "${!hookRef}" "$pkg"; 268 + done; 269 + fi; 270 + done; 271 + done 272 + } 273 + _allFlags () 274 + { 275 + 276 + export system pname name version; 277 + for varName in $(awk 'BEGIN { for (v in ENVIRON) if (v ~ /^[a-z][a-zA-Z0-9_]*$/) print v }'); 278 + do 279 + if (( "${NIX_DEBUG:-0}" >= 1 )); then 280 + printf "@%s@ -> %q\n" "${varName}" "${!varName}" 1>&2; 281 + fi; 282 + args+=("--subst-var" "$varName"); 283 + done 284 + } 285 + _assignFirst () 286 + { 287 + 288 + local varName="$1"; 289 + local _var; 290 + local REMOVE=REMOVE; 291 + shift; 292 + for _var in "$@"; 293 + do 294 + if [ -n "${!_var-}" ]; then 295 + eval "${varName}"="${_var}"; 296 + return; 297 + fi; 298 + done; 299 + echo; 300 + echo "error: _assignFirst: could not find a non-empty variable whose name to assign to ${varName}."; 301 + echo " The following variables were all unset or empty:"; 302 + echo " $*"; 303 + if [ -z "${out:-}" ]; then 304 + echo ' If you do not want an "out" output in your derivation, make sure to define'; 305 + echo ' the other specific required outputs. This can be achieved by picking one'; 306 + echo " of the above as an output."; 307 + echo ' You do not have to remove "out" if you want to have a different default'; 308 + echo ' output, because the first output is taken as a default.'; 309 + echo; 310 + fi; 311 + return 1 312 + } 313 + _callImplicitHook () 314 + { 315 + 316 + local def="$1"; 317 + local hookName="$2"; 318 + if declare -F "$hookName" > /dev/null; then 319 + "$hookName"; 320 + else 321 + if type -p "$hookName" > /dev/null; then 322 + source "$hookName"; 323 + else 324 + if [ -n "${!hookName:-}" ]; then 325 + eval "${!hookName}"; 326 + else 327 + return "$def"; 328 + fi; 329 + fi; 330 + fi 331 + } 332 + _defaultUnpack () 333 + { 334 + 335 + local fn="$1"; 336 + local destination; 337 + if [ -d "$fn" ]; then 338 + destination="$(stripHash "$fn")"; 339 + if [ -e "$destination" ]; then 340 + echo "Cannot copy $fn to $destination: destination already exists!"; 341 + echo "Did you specify two \"srcs\" with the same \"name\"?"; 342 + return 1; 343 + fi; 344 + cp -pr --reflink=auto -- "$fn" "$destination"; 345 + else 346 + case "$fn" in 347 + *.tar.xz | *.tar.lzma | *.txz) 348 + xz -d < "$fn" | tar xf - --warning=no-timestamp 349 + ;; 350 + *.tar | *.tar.* | *.tgz | *.tbz2 | *.tbz) 351 + tar xf "$fn" --warning=no-timestamp 352 + ;; 353 + *) 354 + return 1 355 + ;; 356 + esac; 357 + fi 358 + } 359 + _doStrip () 360 + { 361 + 362 + local -ra flags=(dontStripHost dontStripTarget); 363 + local -ra debugDirs=(stripDebugList stripDebugListTarget); 364 + local -ra allDirs=(stripAllList stripAllListTarget); 365 + local -ra stripCmds=(STRIP STRIP_FOR_TARGET); 366 + local -ra ranlibCmds=(RANLIB RANLIB_FOR_TARGET); 367 + stripDebugList=${stripDebugList[*]:-lib lib32 lib64 libexec bin sbin}; 368 + stripDebugListTarget=${stripDebugListTarget[*]:-}; 369 + stripAllList=${stripAllList[*]:-}; 370 + stripAllListTarget=${stripAllListTarget[*]:-}; 371 + local i; 372 + for i in ${!stripCmds[@]}; 373 + do 374 + local -n flag="${flags[$i]}"; 375 + local -n debugDirList="${debugDirs[$i]}"; 376 + local -n allDirList="${allDirs[$i]}"; 377 + local -n stripCmd="${stripCmds[$i]}"; 378 + local -n ranlibCmd="${ranlibCmds[$i]}"; 379 + if [[ -n "${dontStrip-}" || -n "${flag-}" ]] || ! type -f "${stripCmd-}" 2> /dev/null 1>&2; then 380 + continue; 381 + fi; 382 + stripDirs "$stripCmd" "$ranlibCmd" "$debugDirList" "${stripDebugFlags[*]:--S -p}"; 383 + stripDirs "$stripCmd" "$ranlibCmd" "$allDirList" "${stripAllFlags[*]:--s -p}"; 384 + done 385 + } 386 + _eval () 387 + { 388 + 389 + if declare -F "$1" > /dev/null 2>&1; then 390 + "$@"; 391 + else 392 + eval "$1"; 393 + fi 394 + } 395 + _makeSymlinksRelative () 396 + { 397 + 398 + local symlinkTarget; 399 + if [ "${dontRewriteSymlinks-}" ] || [ ! -e "$prefix" ]; then 400 + return; 401 + fi; 402 + while IFS= read -r -d '' f; do 403 + symlinkTarget=$(readlink "$f"); 404 + if [[ "$symlinkTarget"/ != "$prefix"/* ]]; then 405 + continue; 406 + fi; 407 + if [ ! -e "$symlinkTarget" ]; then 408 + echo "the symlink $f is broken, it points to $symlinkTarget (which is missing)"; 409 + fi; 410 + echo "rewriting symlink $f to be relative to $prefix"; 411 + ln -snrf "$symlinkTarget" "$f"; 412 + done < <(find $prefix -type l -print0) 413 + } 414 + _makeSymlinksRelativeInAllOutputs () 415 + { 416 + 417 + local output; 418 + for output in $(getAllOutputNames); 419 + do 420 + prefix="${!output}" _makeSymlinksRelative; 421 + done 422 + } 423 + _moveLib64 () 424 + { 425 + 426 + if [ "${dontMoveLib64-}" = 1 ]; then 427 + return; 428 + fi; 429 + if [ ! -e "$prefix/lib64" -o -L "$prefix/lib64" ]; then 430 + return; 431 + fi; 432 + echo "moving $prefix/lib64/* to $prefix/lib"; 433 + mkdir -p $prefix/lib; 434 + shopt -s dotglob; 435 + for i in $prefix/lib64/*; 436 + do 437 + mv --no-clobber "$i" $prefix/lib; 438 + done; 439 + shopt -u dotglob; 440 + rmdir $prefix/lib64; 441 + ln -s lib $prefix/lib64 442 + } 443 + _moveSbin () 444 + { 445 + 446 + if [ "${dontMoveSbin-}" = 1 ]; then 447 + return; 448 + fi; 449 + if [ ! -e "$prefix/sbin" -o -L "$prefix/sbin" ]; then 450 + return; 451 + fi; 452 + echo "moving $prefix/sbin/* to $prefix/bin"; 453 + mkdir -p $prefix/bin; 454 + shopt -s dotglob; 455 + for i in $prefix/sbin/*; 456 + do 457 + mv "$i" $prefix/bin; 458 + done; 459 + shopt -u dotglob; 460 + rmdir $prefix/sbin; 461 + ln -s bin $prefix/sbin 462 + } 463 + _moveSystemdUserUnits () 464 + { 465 + 466 + if [ "${dontMoveSystemdUserUnits:-0}" = 1 ]; then 467 + return; 468 + fi; 469 + if [ ! -e "${prefix:?}/lib/systemd/user" ]; then 470 + return; 471 + fi; 472 + local source="$prefix/lib/systemd/user"; 473 + local target="$prefix/share/systemd/user"; 474 + echo "moving $source/* to $target"; 475 + mkdir -p "$target"; 476 + ( shopt -s dotglob; 477 + for i in "$source"/*; 478 + do 479 + mv "$i" "$target"; 480 + done ); 481 + rmdir "$source"; 482 + ln -s "$target" "$source" 483 + } 484 + _moveToShare () 485 + { 486 + 487 + if [ -n "$__structuredAttrs" ]; then 488 + if [ -z "${forceShare-}" ]; then 489 + forceShare=(man doc info); 490 + fi; 491 + else 492 + forceShare=(${forceShare:-man doc info}); 493 + fi; 494 + if [[ -z "$out" ]]; then 495 + return; 496 + fi; 497 + for d in "${forceShare[@]}"; 498 + do 499 + if [ -d "$out/$d" ]; then 500 + if [ -d "$out/share/$d" ]; then 501 + echo "both $d/ and share/$d/ exist!"; 502 + else 503 + echo "moving $out/$d to $out/share/$d"; 504 + mkdir -p $out/share; 505 + mv $out/$d $out/share/; 506 + fi; 507 + fi; 508 + done 509 + } 510 + _multioutConfig () 511 + { 512 + 513 + if [ "$(getAllOutputNames)" = "out" ] || [ -z "${setOutputFlags-1}" ]; then 514 + return; 515 + fi; 516 + if [ -z "${shareDocName:-}" ]; then 517 + local confScript="${configureScript:-}"; 518 + if [ -z "$confScript" ] && [ -x ./configure ]; then 519 + confScript=./configure; 520 + fi; 521 + if [ -f "$confScript" ]; then 522 + local shareDocName="$(sed -n "s/^PACKAGE_TARNAME='\(.*\)'$/\1/p" < "$confScript")"; 523 + fi; 524 + if [ -z "$shareDocName" ] || echo "$shareDocName" | grep -q '[^a-zA-Z0-9_-]'; then 525 + shareDocName="$(echo "$name" | sed 's/-[^a-zA-Z].*//')"; 526 + fi; 527 + fi; 528 + prependToVar configureFlags --bindir="${!outputBin}"/bin --sbindir="${!outputBin}"/sbin --includedir="${!outputInclude}"/include --oldincludedir="${!outputInclude}"/include --mandir="${!outputMan}"/share/man --infodir="${!outputInfo}"/share/info --docdir="${!outputDoc}"/share/doc/"${shareDocName}" --libdir="${!outputLib}"/lib --libexecdir="${!outputLib}"/libexec --localedir="${!outputLib}"/share/locale; 529 + prependToVar installFlags pkgconfigdir="${!outputDev}"/lib/pkgconfig m4datadir="${!outputDev}"/share/aclocal aclocaldir="${!outputDev}"/share/aclocal 530 + } 531 + _multioutDevs () 532 + { 533 + 534 + if [ "$(getAllOutputNames)" = "out" ] || [ -z "${moveToDev-1}" ]; then 535 + return; 536 + fi; 537 + moveToOutput include "${!outputInclude}"; 538 + moveToOutput lib/pkgconfig "${!outputDev}"; 539 + moveToOutput share/pkgconfig "${!outputDev}"; 540 + moveToOutput lib/cmake "${!outputDev}"; 541 + moveToOutput share/aclocal "${!outputDev}"; 542 + for f in "${!outputDev}"/{lib,share}/pkgconfig/*.pc; 543 + do 544 + echo "Patching '$f' includedir to output ${!outputInclude}"; 545 + sed -i "/^includedir=/s,=\${prefix},=${!outputInclude}," "$f"; 546 + done 547 + } 548 + _multioutDocs () 549 + { 550 + 551 + local REMOVE=REMOVE; 552 + moveToOutput share/info "${!outputInfo}"; 553 + moveToOutput share/doc "${!outputDoc}"; 554 + moveToOutput share/gtk-doc "${!outputDevdoc}"; 555 + moveToOutput share/devhelp/books "${!outputDevdoc}"; 556 + moveToOutput share/man "${!outputMan}"; 557 + moveToOutput share/man/man3 "${!outputDevman}" 558 + } 559 + _multioutPropagateDev () 560 + { 561 + 562 + if [ "$(getAllOutputNames)" = "out" ]; then 563 + return; 564 + fi; 565 + local outputFirst; 566 + for outputFirst in $(getAllOutputNames); 567 + do 568 + break; 569 + done; 570 + local propagaterOutput="$outputDev"; 571 + if [ -z "$propagaterOutput" ]; then 572 + propagaterOutput="$outputFirst"; 573 + fi; 574 + if [ -z "${propagatedBuildOutputs+1}" ]; then 575 + local po_dirty="$outputBin $outputInclude $outputLib"; 576 + set +o pipefail; 577 + propagatedBuildOutputs=`echo "$po_dirty" | tr -s ' ' '\n' | grep -v -F "$propagaterOutput" | sort -u | tr '\n' ' ' `; 578 + set -o pipefail; 579 + fi; 580 + if [ -z "$propagatedBuildOutputs" ]; then 581 + return; 582 + fi; 583 + mkdir -p "${!propagaterOutput}"/nix-support; 584 + for output in $propagatedBuildOutputs; 585 + do 586 + echo -n " ${!output}" >> "${!propagaterOutput}"/nix-support/propagated-build-inputs; 587 + done 588 + } 589 + _overrideFirst () 590 + { 591 + 592 + if [ -z "${!1-}" ]; then 593 + _assignFirst "$@"; 594 + fi 595 + } 596 + _pruneLibtoolFiles () 597 + { 598 + 599 + if [ "${dontPruneLibtoolFiles-}" ] || [ ! -e "$prefix" ]; then 600 + return; 601 + fi; 602 + find "$prefix" -type f -name '*.la' -exec grep -q '^# Generated by .*libtool' {} \; -exec grep -q "^old_library=''" {} \; -exec sed -i {} -e "/^dependency_libs='[^']/ c dependency_libs='' #pruned" \; 603 + } 604 + _updateSourceDateEpochFromSourceRoot () 605 + { 606 + 607 + if [ -n "$sourceRoot" ]; then 608 + updateSourceDateEpoch "$sourceRoot"; 609 + fi 610 + } 611 + activatePackage () 612 + { 613 + 614 + local pkg="$1"; 615 + local -r hostOffset="$2"; 616 + local -r targetOffset="$3"; 617 + (( hostOffset <= targetOffset )) || exit 1; 618 + if [ -f "$pkg" ]; then 619 + source "$pkg"; 620 + fi; 621 + if [[ -z "${strictDeps-}" || "$hostOffset" -le -1 ]]; then 622 + addToSearchPath _PATH "$pkg/bin"; 623 + fi; 624 + if (( hostOffset <= -1 )); then 625 + addToSearchPath _XDG_DATA_DIRS "$pkg/share"; 626 + fi; 627 + if [[ "$hostOffset" -eq 0 && -d "$pkg/bin" ]]; then 628 + addToSearchPath _HOST_PATH "$pkg/bin"; 629 + fi; 630 + if [[ -f "$pkg/nix-support/setup-hook" ]]; then 631 + source "$pkg/nix-support/setup-hook"; 632 + fi 633 + } 634 + addEnvHooks () 635 + { 636 + 637 + local depHostOffset="$1"; 638 + shift; 639 + local pkgHookVarsSlice="${pkgHookVarVars[$depHostOffset + 1]}[@]"; 640 + local pkgHookVar; 641 + for pkgHookVar in "${!pkgHookVarsSlice}"; 642 + do 643 + eval "${pkgHookVar}s"'+=("$@")'; 644 + done 645 + } 646 + addToSearchPath () 647 + { 648 + 649 + addToSearchPathWithCustomDelimiter ":" "$@" 650 + } 651 + addToSearchPathWithCustomDelimiter () 652 + { 653 + 654 + local delimiter="$1"; 655 + local varName="$2"; 656 + local dir="$3"; 657 + if [[ -d "$dir" && "${!varName:+${delimiter}${!varName}${delimiter}}" != *"${delimiter}${dir}${delimiter}"* ]]; then 658 + export "${varName}=${!varName:+${!varName}${delimiter}}${dir}"; 659 + fi 660 + } 661 + appendToVar () 662 + { 663 + 664 + local -n nameref="$1"; 665 + local useArray type; 666 + if [ -n "$__structuredAttrs" ]; then 667 + useArray=true; 668 + else 669 + useArray=false; 670 + fi; 671 + if declare -p "$1" 2> /dev/null | grep -q '^'; then 672 + type="$(declare -p "$1")"; 673 + if [[ "$type" =~ "declare -A" ]]; then 674 + echo "appendToVar(): ERROR: trying to use appendToVar on an associative array, use variable+=([\"X\"]=\"Y\") instead." 1>&2; 675 + return 1; 676 + else 677 + if [[ "$type" =~ "declare -a" ]]; then 678 + useArray=true; 679 + else 680 + useArray=false; 681 + fi; 682 + fi; 683 + fi; 684 + shift; 685 + if $useArray; then 686 + nameref=(${nameref+"${nameref[@]}"} "$@"); 687 + else 688 + nameref="${nameref-} $*"; 689 + fi 690 + } 691 + auditTmpdir () 692 + { 693 + 694 + local dir="$1"; 695 + [ -e "$dir" ] || return 0; 696 + echo "checking for references to $TMPDIR/ in $dir..."; 697 + local i; 698 + find "$dir" -type f -print0 | while IFS= read -r -d '' i; do 699 + if [[ "$i" =~ .build-id ]]; then 700 + continue; 701 + fi; 702 + if isELF "$i"; then 703 + if { 704 + printf :; 705 + patchelf --print-rpath "$i" 706 + } | grep -q -F ":$TMPDIR/"; then 707 + echo "RPATH of binary $i contains a forbidden reference to $TMPDIR/"; 708 + exit 1; 709 + fi; 710 + fi; 711 + if isScript "$i"; then 712 + if [ -e "$(dirname "$i")/.$(basename "$i")-wrapped" ]; then 713 + if grep -q -F "$TMPDIR/" "$i"; then 714 + echo "wrapper script $i contains a forbidden reference to $TMPDIR/"; 715 + exit 1; 716 + fi; 717 + fi; 718 + fi; 719 + done 720 + } 721 + bintoolsWrapper_addLDVars () 722 + { 723 + 724 + local role_post; 725 + getHostRoleEnvHook; 726 + if [[ -d "$1/lib64" && ! -L "$1/lib64" ]]; then 727 + export NIX_LDFLAGS${role_post}+=" -L$1/lib64"; 728 + fi; 729 + if [[ -d "$1/lib" ]]; then 730 + local -a glob=($1/lib/lib*); 731 + if [ "${#glob[*]}" -gt 0 ]; then 732 + export NIX_LDFLAGS${role_post}+=" -L$1/lib"; 733 + fi; 734 + fi 735 + } 736 + buildPhase () 737 + { 738 + 739 + runHook preBuild; 740 + if [[ -z "${makeFlags-}" && -z "${makefile:-}" && ! ( -e Makefile || -e makefile || -e GNUmakefile ) ]]; then 741 + echo "no Makefile or custom buildPhase, doing nothing"; 742 + else 743 + foundMakefile=1; 744 + local flagsArray=(${enableParallelBuilding:+-j${NIX_BUILD_CORES}} SHELL=$SHELL); 745 + _accumFlagsArray makeFlags makeFlagsArray buildFlags buildFlagsArray; 746 + echoCmd 'build flags' "${flagsArray[@]}"; 747 + make ${makefile:+-f $makefile} "${flagsArray[@]}"; 748 + unset flagsArray; 749 + fi; 750 + runHook postBuild 751 + } 752 + ccWrapper_addCVars () 753 + { 754 + 755 + local role_post; 756 + getHostRoleEnvHook; 757 + if [ -d "$1/include" ]; then 758 + export NIX_CFLAGS_COMPILE${role_post}+=" -isystem $1/include"; 759 + fi; 760 + if [ -d "$1/Library/Frameworks" ]; then 761 + export NIX_CFLAGS_COMPILE${role_post}+=" -iframework $1/Library/Frameworks"; 762 + fi 763 + } 764 + checkPhase () 765 + { 766 + 767 + runHook preCheck; 768 + if [[ -z "${foundMakefile:-}" ]]; then 769 + echo "no Makefile or custom checkPhase, doing nothing"; 770 + runHook postCheck; 771 + return; 772 + fi; 773 + if [[ -z "${checkTarget:-}" ]]; then 774 + if make -n ${makefile:+-f $makefile} check > /dev/null 2>&1; then 775 + checkTarget=check; 776 + else 777 + if make -n ${makefile:+-f $makefile} test > /dev/null 2>&1; then 778 + checkTarget=test; 779 + fi; 780 + fi; 781 + fi; 782 + if [[ -z "${checkTarget:-}" ]]; then 783 + echo "no check/test target in ${makefile:-Makefile}, doing nothing"; 784 + else 785 + local flagsArray=(${enableParallelChecking:+-j${NIX_BUILD_CORES}} SHELL=$SHELL); 786 + _accumFlagsArray makeFlags makeFlagsArray; 787 + if [ -n "$__structuredAttrs" ]; then 788 + flagsArray+=("${checkFlags[@]:-VERBOSE=y}"); 789 + else 790 + flagsArray+=(${checkFlags:-VERBOSE=y}); 791 + fi; 792 + _accumFlagsArray checkFlagsArray; 793 + flagsArray+=(${checkTarget}); 794 + echoCmd 'check flags' "${flagsArray[@]}"; 795 + make ${makefile:+-f $makefile} "${flagsArray[@]}"; 796 + unset flagsArray; 797 + fi; 798 + runHook postCheck 799 + } 800 + compressManPages () 801 + { 802 + 803 + local dir="$1"; 804 + if [ -L "$dir"/share ] || [ -L "$dir"/share/man ] || [ ! -d "$dir/share/man" ]; then 805 + return; 806 + fi; 807 + echo "gzipping man pages under $dir/share/man/"; 808 + find "$dir"/share/man/ -type f -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 | while IFS= read -r -d '' f; do 809 + if gzip -c -n "$f" > "$f".gz; then 810 + rm "$f"; 811 + else 812 + rm "$f".gz; 813 + fi; 814 + done; 815 + find "$dir"/share/man/ -type l -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 | sort -z | while IFS= read -r -d '' f; do 816 + local target; 817 + target="$(readlink -f "$f")"; 818 + if [ -f "$target".gz ]; then 819 + ln -sf "$target".gz "$f".gz && rm "$f"; 820 + fi; 821 + done 822 + } 823 + configurePhase () 824 + { 825 + 826 + runHook preConfigure; 827 + : "${configureScript=}"; 828 + if [[ -z "$configureScript" && -x ./configure ]]; then 829 + configureScript=./configure; 830 + fi; 831 + if [ -z "${dontFixLibtool:-}" ]; then 832 + export lt_cv_deplibs_check_method="${lt_cv_deplibs_check_method-pass_all}"; 833 + local i; 834 + find . -iname "ltmain.sh" -print0 | while IFS='' read -r -d '' i; do 835 + echo "fixing libtool script $i"; 836 + fixLibtool "$i"; 837 + done; 838 + CONFIGURE_MTIME_REFERENCE=$(mktemp configure.mtime.reference.XXXXXX); 839 + find . -executable -type f -name configure -exec grep -l 'GNU Libtool is free software; you can redistribute it and/or modify' {} \; -exec touch -r {} "$CONFIGURE_MTIME_REFERENCE" \; -exec sed -i s_/usr/bin/file_file_g {} \; -exec touch -r "$CONFIGURE_MTIME_REFERENCE" {} \;; 840 + rm -f "$CONFIGURE_MTIME_REFERENCE"; 841 + fi; 842 + if [[ -z "${dontAddPrefix:-}" && -n "$prefix" ]]; then 843 + prependToVar configureFlags "${prefixKey:---prefix=}$prefix"; 844 + fi; 845 + if [[ -f "$configureScript" ]]; then 846 + if [ -z "${dontAddDisableDepTrack:-}" ]; then 847 + if grep -q dependency-tracking "$configureScript"; then 848 + prependToVar configureFlags --disable-dependency-tracking; 849 + fi; 850 + fi; 851 + if [ -z "${dontDisableStatic:-}" ]; then 852 + if grep -q enable-static "$configureScript"; then 853 + prependToVar configureFlags --disable-static; 854 + fi; 855 + fi; 856 + fi; 857 + if [ -n "$configureScript" ]; then 858 + local -a flagsArray; 859 + _accumFlagsArray configureFlags configureFlagsArray; 860 + echoCmd 'configure flags' "${flagsArray[@]}"; 861 + $configureScript "${flagsArray[@]}"; 862 + unset flagsArray; 863 + else 864 + echo "no configure script, doing nothing"; 865 + fi; 866 + runHook postConfigure 867 + } 868 + consumeEntire () 869 + { 870 + 871 + if IFS='' read -r -d '' "$1"; then 872 + echo "consumeEntire(): ERROR: Input null bytes, won't process" 1>&2; 873 + return 1; 874 + fi 875 + } 876 + distPhase () 877 + { 878 + 879 + runHook preDist; 880 + local flagsArray=(); 881 + _accumFlagsArray distFlags distFlagsArray; 882 + flagsArray+=(${distTarget:-dist}); 883 + echo 'dist flags: %q' "${flagsArray[@]}"; 884 + make ${makefile:+-f $makefile} "${flagsArray[@]}"; 885 + if [ "${dontCopyDist:-0}" != 1 ]; then 886 + mkdir -p "$out/tarballs"; 887 + cp -pvd ${tarballs[*]:-*.tar.gz} "$out/tarballs"; 888 + fi; 889 + runHook postDist 890 + } 891 + dumpVars () 892 + { 893 + 894 + if [ "${noDumpEnvVars:-0}" != 1 ]; then 895 + export 2> /dev/null >| "$NIX_BUILD_TOP/env-vars" || true; 896 + fi 897 + } 898 + echoCmd () 899 + { 900 + 901 + printf "%s:" "$1"; 902 + shift; 903 + printf ' %q' "$@"; 904 + echo 905 + } 906 + exitHandler () 907 + { 908 + 909 + exitCode="$?"; 910 + set +e; 911 + if [ -n "${showBuildStats:-}" ]; then 912 + read -r -d '' -a buildTimes < <(times); 913 + echo "build times:"; 914 + echo "user time for the shell ${buildTimes[0]}"; 915 + echo "system time for the shell ${buildTimes[1]}"; 916 + echo "user time for all child processes ${buildTimes[2]}"; 917 + echo "system time for all child processes ${buildTimes[3]}"; 918 + fi; 919 + if (( "$exitCode" != 0 )); then 920 + runHook failureHook; 921 + if [ -n "${succeedOnFailure:-}" ]; then 922 + echo "build failed with exit code $exitCode (ignored)"; 923 + mkdir -p "$out/nix-support"; 924 + printf "%s" "$exitCode" > "$out/nix-support/failed"; 925 + exit 0; 926 + fi; 927 + else 928 + runHook exitHook; 929 + fi; 930 + return "$exitCode" 931 + } 932 + findInputs () 933 + { 934 + 935 + local -r pkg="$1"; 936 + local -r hostOffset="$2"; 937 + local -r targetOffset="$3"; 938 + (( hostOffset <= targetOffset )) || exit 1; 939 + local varVar="${pkgAccumVarVars[hostOffset + 1]}"; 940 + local varRef="$varVar[$((targetOffset - hostOffset))]"; 941 + local var="${!varRef}"; 942 + unset -v varVar varRef; 943 + local varSlice="$var[*]"; 944 + case "${!varSlice-}" in 945 + *" $pkg "*) 946 + return 0 947 + ;; 948 + esac; 949 + unset -v varSlice; 950 + eval "$var"'+=("$pkg")'; 951 + if ! [ -e "$pkg" ]; then 952 + echo "build input $pkg does not exist" 1>&2; 953 + exit 1; 954 + fi; 955 + function mapOffset () 956 + { 957 + local -r inputOffset="$1"; 958 + local -n outputOffset="$2"; 959 + if (( inputOffset <= 0 )); then 960 + outputOffset=$((inputOffset + hostOffset)); 961 + else 962 + outputOffset=$((inputOffset - 1 + targetOffset)); 963 + fi 964 + }; 965 + local relHostOffset; 966 + for relHostOffset in "${allPlatOffsets[@]}"; 967 + do 968 + local files="${propagatedDepFilesVars[relHostOffset + 1]}"; 969 + local hostOffsetNext; 970 + mapOffset "$relHostOffset" hostOffsetNext; 971 + (( -1 <= hostOffsetNext && hostOffsetNext <= 1 )) || continue; 972 + local relTargetOffset; 973 + for relTargetOffset in "${allPlatOffsets[@]}"; 974 + do 975 + (( "$relHostOffset" <= "$relTargetOffset" )) || continue; 976 + local fileRef="${files}[$relTargetOffset - $relHostOffset]"; 977 + local file="${!fileRef}"; 978 + unset -v fileRef; 979 + local targetOffsetNext; 980 + mapOffset "$relTargetOffset" targetOffsetNext; 981 + (( -1 <= hostOffsetNext && hostOffsetNext <= 1 )) || continue; 982 + [[ -f "$pkg/nix-support/$file" ]] || continue; 983 + local pkgNext; 984 + read -r -d '' pkgNext < "$pkg/nix-support/$file" || true; 985 + for pkgNext in $pkgNext; 986 + do 987 + findInputs "$pkgNext" "$hostOffsetNext" "$targetOffsetNext"; 988 + done; 989 + done; 990 + done 991 + } 992 + fixLibtool () 993 + { 994 + 995 + local search_path; 996 + for flag in $NIX_LDFLAGS; 997 + do 998 + case $flag in 999 + -L*) 1000 + search_path+=" ${flag#-L}" 1001 + ;; 1002 + esac; 1003 + done; 1004 + sed -i "$1" -e "s^eval \(sys_lib_search_path=\).*^\1'${search_path:-}'^" -e 's^eval sys_lib_.+search_path=.*^^' 1005 + } 1006 + fixupPhase () 1007 + { 1008 + 1009 + local output; 1010 + for output in $(getAllOutputNames); 1011 + do 1012 + if [ -e "${!output}" ]; then 1013 + chmod -R u+w "${!output}"; 1014 + fi; 1015 + done; 1016 + runHook preFixup; 1017 + local output; 1018 + for output in $(getAllOutputNames); 1019 + do 1020 + prefix="${!output}" runHook fixupOutput; 1021 + done; 1022 + recordPropagatedDependencies; 1023 + if [ -n "${setupHook:-}" ]; then 1024 + mkdir -p "${!outputDev}/nix-support"; 1025 + substituteAll "$setupHook" "${!outputDev}/nix-support/setup-hook"; 1026 + fi; 1027 + if [ -n "${setupHooks:-}" ]; then 1028 + mkdir -p "${!outputDev}/nix-support"; 1029 + local hook; 1030 + for hook in ${setupHooks[@]}; 1031 + do 1032 + local content; 1033 + consumeEntire content < "$hook"; 1034 + substituteAllStream content "file '$hook'" >> "${!outputDev}/nix-support/setup-hook"; 1035 + unset -v content; 1036 + done; 1037 + unset -v hook; 1038 + fi; 1039 + if [ -n "${propagatedUserEnvPkgs:-}" ]; then 1040 + mkdir -p "${!outputBin}/nix-support"; 1041 + printWords $propagatedUserEnvPkgs > "${!outputBin}/nix-support/propagated-user-env-packages"; 1042 + fi; 1043 + runHook postFixup 1044 + } 1045 + genericBuild () 1046 + { 1047 + 1048 + export GZIP_NO_TIMESTAMPS=1; 1049 + if [ -f "${buildCommandPath:-}" ]; then 1050 + source "$buildCommandPath"; 1051 + return; 1052 + fi; 1053 + if [ -n "${buildCommand:-}" ]; then 1054 + eval "$buildCommand"; 1055 + return; 1056 + fi; 1057 + if [ -z "${phases[*]:-}" ]; then 1058 + phases="${prePhases[*]:-} unpackPhase patchPhase ${preConfigurePhases[*]:-} configurePhase ${preBuildPhases[*]:-} buildPhase checkPhase ${preInstallPhases[*]:-} installPhase ${preFixupPhases[*]:-} fixupPhase installCheckPhase ${preDistPhases[*]:-} distPhase ${postPhases[*]:-}"; 1059 + fi; 1060 + for curPhase in ${phases[*]}; 1061 + do 1062 + runPhase "$curPhase"; 1063 + done 1064 + } 1065 + getAllOutputNames () 1066 + { 1067 + 1068 + if [ -n "$__structuredAttrs" ]; then 1069 + echo "${!outputs[*]}"; 1070 + else 1071 + echo "$outputs"; 1072 + fi 1073 + } 1074 + getHostRole () 1075 + { 1076 + 1077 + getRole "$hostOffset" 1078 + } 1079 + getHostRoleEnvHook () 1080 + { 1081 + 1082 + getRole "$depHostOffset" 1083 + } 1084 + getRole () 1085 + { 1086 + 1087 + case $1 in 1088 + -1) 1089 + role_post='_FOR_BUILD' 1090 + ;; 1091 + 0) 1092 + role_post='' 1093 + ;; 1094 + 1) 1095 + role_post='_FOR_TARGET' 1096 + ;; 1097 + *) 1098 + echo "binutils-wrapper-2.40: used as improper sort of dependency" 1>&2; 1099 + return 1 1100 + ;; 1101 + esac 1102 + } 1103 + getTargetRole () 1104 + { 1105 + 1106 + getRole "$targetOffset" 1107 + } 1108 + getTargetRoleEnvHook () 1109 + { 1110 + 1111 + getRole "$depTargetOffset" 1112 + } 1113 + getTargetRoleWrapper () 1114 + { 1115 + 1116 + case $targetOffset in 1117 + -1) 1118 + export NIX_BINTOOLS_WRAPPER_TARGET_BUILD_x86_64_unknown_linux_gnu=1 1119 + ;; 1120 + 0) 1121 + export NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu=1 1122 + ;; 1123 + 1) 1124 + export NIX_BINTOOLS_WRAPPER_TARGET_TARGET_x86_64_unknown_linux_gnu=1 1125 + ;; 1126 + *) 1127 + echo "binutils-wrapper-2.40: used as improper sort of dependency" 1>&2; 1128 + return 1 1129 + ;; 1130 + esac 1131 + } 1132 + installCheckPhase () 1133 + { 1134 + 1135 + runHook preInstallCheck; 1136 + if [[ -z "${foundMakefile:-}" ]]; then 1137 + echo "no Makefile or custom installCheckPhase, doing nothing"; 1138 + else 1139 + if [[ -z "${installCheckTarget:-}" ]] && ! make -n ${makefile:+-f $makefile} "${installCheckTarget:-installcheck}" > /dev/null 2>&1; then 1140 + echo "no installcheck target in ${makefile:-Makefile}, doing nothing"; 1141 + else 1142 + local flagsArray=(${enableParallelChecking:+-j${NIX_BUILD_CORES}} SHELL=$SHELL); 1143 + _accumFlagsArray makeFlags makeFlagsArray installCheckFlags installCheckFlagsArray; 1144 + flagsArray+=(${installCheckTarget:-installcheck}); 1145 + echoCmd 'installcheck flags' "${flagsArray[@]}"; 1146 + make ${makefile:+-f $makefile} "${flagsArray[@]}"; 1147 + unset flagsArray; 1148 + fi; 1149 + fi; 1150 + runHook postInstallCheck 1151 + } 1152 + installPhase () 1153 + { 1154 + 1155 + runHook preInstall; 1156 + if [[ -z "${makeFlags-}" && -z "${makefile:-}" && ! ( -e Makefile || -e makefile || -e GNUmakefile ) ]]; then 1157 + echo "no Makefile or custom installPhase, doing nothing"; 1158 + runHook postInstall; 1159 + return; 1160 + else 1161 + foundMakefile=1; 1162 + fi; 1163 + if [ -n "$prefix" ]; then 1164 + mkdir -p "$prefix"; 1165 + fi; 1166 + local flagsArray=(${enableParallelInstalling:+-j${NIX_BUILD_CORES}} SHELL=$SHELL); 1167 + _accumFlagsArray makeFlags makeFlagsArray installFlags installFlagsArray; 1168 + if [ -n "$__structuredAttrs" ]; then 1169 + flagsArray+=("${installTargets[@]:-install}"); 1170 + else 1171 + flagsArray+=(${installTargets:-install}); 1172 + fi; 1173 + echoCmd 'install flags' "${flagsArray[@]}"; 1174 + make ${makefile:+-f $makefile} "${flagsArray[@]}"; 1175 + unset flagsArray; 1176 + runHook postInstall 1177 + } 1178 + isELF () 1179 + { 1180 + 1181 + local fn="$1"; 1182 + local fd; 1183 + local magic; 1184 + exec {fd}< "$fn"; 1185 + read -r -n 4 -u "$fd" magic; 1186 + exec {fd}>&-; 1187 + if [ "$magic" = 'ELF' ]; then 1188 + return 0; 1189 + else 1190 + return 1; 1191 + fi 1192 + } 1193 + isMachO () 1194 + { 1195 + 1196 + local fn="$1"; 1197 + local fd; 1198 + local magic; 1199 + exec {fd}< "$fn"; 1200 + read -r -n 4 -u "$fd" magic; 1201 + exec {fd}>&-; 1202 + if [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xcf") || "$magic" = $(echo -ne "\xcf\xfa\xed\xfe") ]]; then 1203 + return 0; 1204 + else 1205 + if [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xce") || "$magic" = $(echo -ne "\xce\xfa\xed\xfe") ]]; then 1206 + return 0; 1207 + else 1208 + if [[ "$magic" = $(echo -ne "\xca\xfe\xba\xbe") || "$magic" = $(echo -ne "\xbe\xba\xfe\xca") ]]; then 1209 + return 0; 1210 + else 1211 + return 1; 1212 + fi; 1213 + fi; 1214 + fi 1215 + } 1216 + isScript () 1217 + { 1218 + 1219 + local fn="$1"; 1220 + local fd; 1221 + local magic; 1222 + exec {fd}< "$fn"; 1223 + read -r -n 2 -u "$fd" magic; 1224 + exec {fd}>&-; 1225 + if [[ "$magic" =~ \#! ]]; then 1226 + return 0; 1227 + else 1228 + return 1; 1229 + fi 1230 + } 1231 + mapOffset () 1232 + { 1233 + 1234 + local -r inputOffset="$1"; 1235 + local -n outputOffset="$2"; 1236 + if (( inputOffset <= 0 )); then 1237 + outputOffset=$((inputOffset + hostOffset)); 1238 + else 1239 + outputOffset=$((inputOffset - 1 + targetOffset)); 1240 + fi 1241 + } 1242 + moveToOutput () 1243 + { 1244 + 1245 + local patt="$1"; 1246 + local dstOut="$2"; 1247 + local output; 1248 + for output in $(getAllOutputNames); 1249 + do 1250 + if [ "${!output}" = "$dstOut" ]; then 1251 + continue; 1252 + fi; 1253 + local srcPath; 1254 + for srcPath in "${!output}"/$patt; 1255 + do 1256 + if [ ! -e "$srcPath" ] && [ ! -L "$srcPath" ]; then 1257 + continue; 1258 + fi; 1259 + if [ "$dstOut" = REMOVE ]; then 1260 + echo "Removing $srcPath"; 1261 + rm -r "$srcPath"; 1262 + else 1263 + local dstPath="$dstOut${srcPath#${!output}}"; 1264 + echo "Moving $srcPath to $dstPath"; 1265 + if [ -d "$dstPath" ] && [ -d "$srcPath" ]; then 1266 + rmdir "$srcPath" --ignore-fail-on-non-empty; 1267 + if [ -d "$srcPath" ]; then 1268 + mv -t "$dstPath" "$srcPath"/*; 1269 + rmdir "$srcPath"; 1270 + fi; 1271 + else 1272 + mkdir -p "$(readlink -m "$dstPath/..")"; 1273 + mv "$srcPath" "$dstPath"; 1274 + fi; 1275 + fi; 1276 + local srcParent="$(readlink -m "$srcPath/..")"; 1277 + if [ -n "$(find "$srcParent" -maxdepth 0 -type d -empty 2> /dev/null)" ]; then 1278 + echo "Removing empty $srcParent/ and (possibly) its parents"; 1279 + rmdir -p --ignore-fail-on-non-empty "$srcParent" 2> /dev/null || true; 1280 + fi; 1281 + done; 1282 + done 1283 + } 1284 + patchELF () 1285 + { 1286 + 1287 + local dir="$1"; 1288 + [ -e "$dir" ] || return 0; 1289 + echo "shrinking RPATHs of ELF executables and libraries in $dir"; 1290 + local i; 1291 + while IFS= read -r -d '' i; do 1292 + if [[ "$i" =~ .build-id ]]; then 1293 + continue; 1294 + fi; 1295 + if ! isELF "$i"; then 1296 + continue; 1297 + fi; 1298 + echo "shrinking $i"; 1299 + patchelf --shrink-rpath "$i" || true; 1300 + done < <(find "$dir" -type f -print0) 1301 + } 1302 + patchPhase () 1303 + { 1304 + 1305 + runHook prePatch; 1306 + local -a patchesArray; 1307 + if [ -n "$__structuredAttrs" ]; then 1308 + patchesArray=(${patches:+"${patches[@]}"}); 1309 + else 1310 + patchesArray=(${patches:-}); 1311 + fi; 1312 + for i in "${patchesArray[@]}"; 1313 + do 1314 + echo "applying patch $i"; 1315 + local uncompress=cat; 1316 + case "$i" in 1317 + *.gz) 1318 + uncompress="gzip -d" 1319 + ;; 1320 + *.bz2) 1321 + uncompress="bzip2 -d" 1322 + ;; 1323 + *.xz) 1324 + uncompress="xz -d" 1325 + ;; 1326 + *.lzma) 1327 + uncompress="lzma -d" 1328 + ;; 1329 + esac; 1330 + local -a flagsArray; 1331 + if [ -n "$__structuredAttrs" ]; then 1332 + flagsArray=("${patchFlags[@]:--p1}"); 1333 + else 1334 + flagsArray=(${patchFlags:--p1}); 1335 + fi; 1336 + $uncompress < "$i" 2>&1 | patch "${flagsArray[@]}"; 1337 + done; 1338 + runHook postPatch 1339 + } 1340 + patchShebangs () 1341 + { 1342 + 1343 + local pathName; 1344 + local update; 1345 + while [[ $# -gt 0 ]]; do 1346 + case "$1" in 1347 + --host) 1348 + pathName=HOST_PATH; 1349 + shift 1350 + ;; 1351 + --build) 1352 + pathName=PATH; 1353 + shift 1354 + ;; 1355 + --update) 1356 + update=true; 1357 + shift 1358 + ;; 1359 + --) 1360 + shift; 1361 + break 1362 + ;; 1363 + -* | --*) 1364 + echo "Unknown option $1 supplied to patchShebangs" 1>&2; 1365 + return 1 1366 + ;; 1367 + *) 1368 + break 1369 + ;; 1370 + esac; 1371 + done; 1372 + echo "patching script interpreter paths in $@"; 1373 + local f; 1374 + local oldPath; 1375 + local newPath; 1376 + local arg0; 1377 + local args; 1378 + local oldInterpreterLine; 1379 + local newInterpreterLine; 1380 + if [[ $# -eq 0 ]]; then 1381 + echo "No arguments supplied to patchShebangs" 1>&2; 1382 + return 0; 1383 + fi; 1384 + local f; 1385 + while IFS= read -r -d '' f; do 1386 + isScript "$f" || continue; 1387 + read -r oldInterpreterLine < "$f"; 1388 + read -r oldPath arg0 args <<< "${oldInterpreterLine:2}"; 1389 + if [[ -z "${pathName:-}" ]]; then 1390 + if [[ -n $strictDeps && $f == "$NIX_STORE"* ]]; then 1391 + pathName=HOST_PATH; 1392 + else 1393 + pathName=PATH; 1394 + fi; 1395 + fi; 1396 + if [[ "$oldPath" == *"/bin/env" ]]; then 1397 + if [[ $arg0 == "-S" ]]; then 1398 + arg0=${args%% *}; 1399 + args=${args#* }; 1400 + newPath="$(PATH="${!pathName}" command -v "env" || true)"; 1401 + args="-S $(PATH="${!pathName}" command -v "$arg0" || true) $args"; 1402 + else 1403 + if [[ $arg0 == "-"* || $arg0 == *"="* ]]; then 1404 + echo "$f: unsupported interpreter directive \"$oldInterpreterLine\" (set dontPatchShebangs=1 and handle shebang patching yourself)" 1>&2; 1405 + exit 1; 1406 + else 1407 + newPath="$(PATH="${!pathName}" command -v "$arg0" || true)"; 1408 + fi; 1409 + fi; 1410 + else 1411 + if [[ -z $oldPath ]]; then 1412 + oldPath="/bin/sh"; 1413 + fi; 1414 + newPath="$(PATH="${!pathName}" command -v "$(basename "$oldPath")" || true)"; 1415 + args="$arg0 $args"; 1416 + fi; 1417 + newInterpreterLine="$newPath $args"; 1418 + newInterpreterLine=${newInterpreterLine%${newInterpreterLine##*[![:space:]]}}; 1419 + if [[ -n "$oldPath" && ( "$update" == true || "${oldPath:0:${#NIX_STORE}}" != "$NIX_STORE" ) ]]; then 1420 + if [[ -n "$newPath" && "$newPath" != "$oldPath" ]]; then 1421 + echo "$f: interpreter directive changed from \"$oldInterpreterLine\" to \"$newInterpreterLine\""; 1422 + escapedInterpreterLine=${newInterpreterLine//\\/\\\\}; 1423 + timestamp=$(stat --printf "%y" "$f"); 1424 + sed -i -e "1 s|.*|#\!$escapedInterpreterLine|" "$f"; 1425 + touch --date "$timestamp" "$f"; 1426 + fi; 1427 + fi; 1428 + done < <(find "$@" -type f -perm -0100 -print0) 1429 + } 1430 + patchShebangsAuto () 1431 + { 1432 + 1433 + if [[ -z "${dontPatchShebangs-}" && -e "$prefix" ]]; then 1434 + if [[ "$output" != out && "$output" = "$outputDev" ]]; then 1435 + patchShebangs --build "$prefix"; 1436 + else 1437 + patchShebangs --host "$prefix"; 1438 + fi; 1439 + fi 1440 + } 1441 + prependToVar () 1442 + { 1443 + 1444 + local -n nameref="$1"; 1445 + local useArray type; 1446 + if [ -n "$__structuredAttrs" ]; then 1447 + useArray=true; 1448 + else 1449 + useArray=false; 1450 + fi; 1451 + if declare -p "$1" 2> /dev/null | grep -q '^'; then 1452 + type="$(declare -p "$1")"; 1453 + if [[ "$type" =~ "declare -A" ]]; then 1454 + echo "prependToVar(): ERROR: trying to use prependToVar on an associative array." 1>&2; 1455 + return 1; 1456 + else 1457 + if [[ "$type" =~ "declare -a" ]]; then 1458 + useArray=true; 1459 + else 1460 + useArray=false; 1461 + fi; 1462 + fi; 1463 + fi; 1464 + shift; 1465 + if $useArray; then 1466 + nameref=("$@" ${nameref+"${nameref[@]}"}); 1467 + else 1468 + nameref="$* ${nameref-}"; 1469 + fi 1470 + } 1471 + printLines () 1472 + { 1473 + 1474 + (( "$#" > 0 )) || return 0; 1475 + printf '%s\n' "$@" 1476 + } 1477 + printWords () 1478 + { 1479 + 1480 + (( "$#" > 0 )) || return 0; 1481 + printf '%s ' "$@" 1482 + } 1483 + recordPropagatedDependencies () 1484 + { 1485 + 1486 + declare -ra flatVars=(depsBuildBuildPropagated propagatedNativeBuildInputs depsBuildTargetPropagated depsHostHostPropagated propagatedBuildInputs depsTargetTargetPropagated); 1487 + declare -ra flatFiles=("${propagatedBuildDepFiles[@]}" "${propagatedHostDepFiles[@]}" "${propagatedTargetDepFiles[@]}"); 1488 + local propagatedInputsIndex; 1489 + for propagatedInputsIndex in "${!flatVars[@]}"; 1490 + do 1491 + local propagatedInputsSlice="${flatVars[$propagatedInputsIndex]}[@]"; 1492 + local propagatedInputsFile="${flatFiles[$propagatedInputsIndex]}"; 1493 + [[ -n "${!propagatedInputsSlice}" ]] || continue; 1494 + mkdir -p "${!outputDev}/nix-support"; 1495 + printWords ${!propagatedInputsSlice} > "${!outputDev}/nix-support/$propagatedInputsFile"; 1496 + done 1497 + } 1498 + runHook () 1499 + { 1500 + 1501 + local hookName="$1"; 1502 + shift; 1503 + local hooksSlice="${hookName%Hook}Hooks[@]"; 1504 + local hook; 1505 + for hook in "_callImplicitHook 0 $hookName" ${!hooksSlice+"${!hooksSlice}"}; 1506 + do 1507 + _eval "$hook" "$@"; 1508 + done; 1509 + return 0 1510 + } 1511 + runOneHook () 1512 + { 1513 + 1514 + local hookName="$1"; 1515 + shift; 1516 + local hooksSlice="${hookName%Hook}Hooks[@]"; 1517 + local hook ret=1; 1518 + for hook in "_callImplicitHook 1 $hookName" ${!hooksSlice+"${!hooksSlice}"}; 1519 + do 1520 + if _eval "$hook" "$@"; then 1521 + ret=0; 1522 + break; 1523 + fi; 1524 + done; 1525 + return "$ret" 1526 + } 1527 + runPhase () 1528 + { 1529 + 1530 + local curPhase="$*"; 1531 + if [[ "$curPhase" = unpackPhase && -n "${dontUnpack:-}" ]]; then 1532 + return; 1533 + fi; 1534 + if [[ "$curPhase" = patchPhase && -n "${dontPatch:-}" ]]; then 1535 + return; 1536 + fi; 1537 + if [[ "$curPhase" = configurePhase && -n "${dontConfigure:-}" ]]; then 1538 + return; 1539 + fi; 1540 + if [[ "$curPhase" = buildPhase && -n "${dontBuild:-}" ]]; then 1541 + return; 1542 + fi; 1543 + if [[ "$curPhase" = checkPhase && -z "${doCheck:-}" ]]; then 1544 + return; 1545 + fi; 1546 + if [[ "$curPhase" = installPhase && -n "${dontInstall:-}" ]]; then 1547 + return; 1548 + fi; 1549 + if [[ "$curPhase" = fixupPhase && -n "${dontFixup:-}" ]]; then 1550 + return; 1551 + fi; 1552 + if [[ "$curPhase" = installCheckPhase && -z "${doInstallCheck:-}" ]]; then 1553 + return; 1554 + fi; 1555 + if [[ "$curPhase" = distPhase && -z "${doDist:-}" ]]; then 1556 + return; 1557 + fi; 1558 + if [[ -n $NIX_LOG_FD ]]; then 1559 + echo "@nix { \"action\": \"setPhase\", \"phase\": \"$curPhase\" }" >&"$NIX_LOG_FD"; 1560 + fi; 1561 + showPhaseHeader "$curPhase"; 1562 + dumpVars; 1563 + local startTime=$(date +"%s"); 1564 + eval "${!curPhase:-$curPhase}"; 1565 + local endTime=$(date +"%s"); 1566 + showPhaseFooter "$curPhase" "$startTime" "$endTime"; 1567 + if [ "$curPhase" = unpackPhase ]; then 1568 + [ -n "${sourceRoot:-}" ] && chmod +x "${sourceRoot}"; 1569 + cd "${sourceRoot:-.}"; 1570 + fi 1571 + } 1572 + showPhaseFooter () 1573 + { 1574 + 1575 + local phase="$1"; 1576 + local startTime="$2"; 1577 + local endTime="$3"; 1578 + local delta=$(( endTime - startTime )); 1579 + (( delta < 30 )) && return; 1580 + local H=$((delta/3600)); 1581 + local M=$((delta%3600/60)); 1582 + local S=$((delta%60)); 1583 + echo -n "$phase completed in "; 1584 + (( H > 0 )) && echo -n "$H hours "; 1585 + (( M > 0 )) && echo -n "$M minutes "; 1586 + echo "$S seconds" 1587 + } 1588 + showPhaseHeader () 1589 + { 1590 + 1591 + local phase="$1"; 1592 + echo "Running phase: $phase" 1593 + } 1594 + stripDirs () 1595 + { 1596 + 1597 + local cmd="$1"; 1598 + local ranlibCmd="$2"; 1599 + local paths="$3"; 1600 + local stripFlags="$4"; 1601 + local excludeFlags=(); 1602 + local pathsNew=; 1603 + [ -z "$cmd" ] && echo "stripDirs: Strip command is empty" 1>&2 && exit 1; 1604 + [ -z "$ranlibCmd" ] && echo "stripDirs: Ranlib command is empty" 1>&2 && exit 1; 1605 + local pattern; 1606 + if [ -n "${stripExclude:-}" ]; then 1607 + for pattern in "${stripExclude[@]}"; 1608 + do 1609 + excludeFlags+=(-a '!' '(' -name "$pattern" -o -wholename "$prefix/$pattern" ')'); 1610 + done; 1611 + fi; 1612 + local p; 1613 + for p in ${paths}; 1614 + do 1615 + if [ -e "$prefix/$p" ]; then 1616 + pathsNew="${pathsNew} $prefix/$p"; 1617 + fi; 1618 + done; 1619 + paths=${pathsNew}; 1620 + if [ -n "${paths}" ]; then 1621 + echo "stripping (with command $cmd and flags $stripFlags) in $paths"; 1622 + local striperr; 1623 + striperr="$(mktemp --tmpdir="$TMPDIR" 'striperr.XXXXXX')"; 1624 + find $paths -type f "${excludeFlags[@]}" -a '!' -path "$prefix/lib/debug/*" -print0 | xargs -r -0 -n1 -- realpath -z | sort -u -z | xargs -r -0 -n1 -P "$NIX_BUILD_CORES" -- $cmd $stripFlags 2> "$striperr" || exit_code=$?; 1625 + [[ "$exit_code" = 123 || -z "$exit_code" ]] || ( cat "$striperr" 1>&2 && exit 1 ); 1626 + rm "$striperr"; 1627 + find $paths -name '*.a' -type f -exec $ranlibCmd '{}' \; 2> /dev/null; 1628 + fi 1629 + } 1630 + stripHash () 1631 + { 1632 + 1633 + local strippedName casematchOpt=0; 1634 + strippedName="$(basename -- "$1")"; 1635 + shopt -q nocasematch && casematchOpt=1; 1636 + shopt -u nocasematch; 1637 + if [[ "$strippedName" =~ ^[a-z0-9]{32}- ]]; then 1638 + echo "${strippedName:33}"; 1639 + else 1640 + echo "$strippedName"; 1641 + fi; 1642 + if (( casematchOpt )); then 1643 + shopt -s nocasematch; 1644 + fi 1645 + } 1646 + substitute () 1647 + { 1648 + 1649 + local input="$1"; 1650 + local output="$2"; 1651 + shift 2; 1652 + if [ ! -f "$input" ]; then 1653 + echo "substitute(): ERROR: file '$input' does not exist" 1>&2; 1654 + return 1; 1655 + fi; 1656 + local content; 1657 + consumeEntire content < "$input"; 1658 + if [ -e "$output" ]; then 1659 + chmod +w "$output"; 1660 + fi; 1661 + substituteStream content "file '$input'" "$@" > "$output" 1662 + } 1663 + substituteAll () 1664 + { 1665 + 1666 + local input="$1"; 1667 + local output="$2"; 1668 + local -a args=(); 1669 + _allFlags; 1670 + substitute "$input" "$output" "${args[@]}" 1671 + } 1672 + substituteAllInPlace () 1673 + { 1674 + 1675 + local fileName="$1"; 1676 + shift; 1677 + substituteAll "$fileName" "$fileName" "$@" 1678 + } 1679 + substituteAllStream () 1680 + { 1681 + 1682 + local -a args=(); 1683 + _allFlags; 1684 + substituteStream "$1" "$2" "${args[@]}" 1685 + } 1686 + substituteInPlace () 1687 + { 1688 + 1689 + local -a fileNames=(); 1690 + for arg in "$@"; 1691 + do 1692 + if [[ "$arg" = "--"* ]]; then 1693 + break; 1694 + fi; 1695 + fileNames+=("$arg"); 1696 + shift; 1697 + done; 1698 + for file in "${fileNames[@]}"; 1699 + do 1700 + substitute "$file" "$file" "$@"; 1701 + done 1702 + } 1703 + substituteStream () 1704 + { 1705 + 1706 + local var=$1; 1707 + local description=$2; 1708 + shift 2; 1709 + while (( "$#" )); do 1710 + case "$1" in 1711 + --replace) 1712 + pattern="$2"; 1713 + replacement="$3"; 1714 + shift 3; 1715 + local savedvar; 1716 + savedvar="${!var}"; 1717 + eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}'; 1718 + if [ "$pattern" != "$replacement" ]; then 1719 + if [ "${!var}" == "$savedvar" ]; then 1720 + echo "substituteStream(): WARNING: pattern '$pattern' doesn't match anything in $description" 1>&2; 1721 + fi; 1722 + fi 1723 + ;; 1724 + --subst-var) 1725 + local varName="$2"; 1726 + shift 2; 1727 + if ! [[ "$varName" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then 1728 + echo "substituteStream(): ERROR: substitution variables must be valid Bash names, \"$varName\" isn't." 1>&2; 1729 + return 1; 1730 + fi; 1731 + if [ -z ${!varName+x} ]; then 1732 + echo "substituteStream(): ERROR: variable \$$varName is unset" 1>&2; 1733 + return 1; 1734 + fi; 1735 + pattern="@$varName@"; 1736 + replacement="${!varName}"; 1737 + eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}' 1738 + ;; 1739 + --subst-var-by) 1740 + pattern="@$2@"; 1741 + replacement="$3"; 1742 + eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}'; 1743 + shift 3 1744 + ;; 1745 + *) 1746 + echo "substituteStream(): ERROR: Invalid command line argument: $1" 1>&2; 1747 + return 1 1748 + ;; 1749 + esac; 1750 + done; 1751 + printf "%s" "${!var}" 1752 + } 1753 + unpackFile () 1754 + { 1755 + 1756 + curSrc="$1"; 1757 + echo "unpacking source archive $curSrc"; 1758 + if ! runOneHook unpackCmd "$curSrc"; then 1759 + echo "do not know how to unpack source archive $curSrc"; 1760 + exit 1; 1761 + fi 1762 + } 1763 + unpackPhase () 1764 + { 1765 + 1766 + runHook preUnpack; 1767 + if [ -z "${srcs:-}" ]; then 1768 + if [ -z "${src:-}" ]; then 1769 + echo 'variable $src or $srcs should point to the source'; 1770 + exit 1; 1771 + fi; 1772 + srcs="$src"; 1773 + fi; 1774 + local -a srcsArray; 1775 + if [ -n "$__structuredAttrs" ]; then 1776 + srcsArray=("${srcs[@]}"); 1777 + else 1778 + srcsArray=($srcs); 1779 + fi; 1780 + local dirsBefore=""; 1781 + for i in *; 1782 + do 1783 + if [ -d "$i" ]; then 1784 + dirsBefore="$dirsBefore $i "; 1785 + fi; 1786 + done; 1787 + for i in "${srcsArray[@]}"; 1788 + do 1789 + unpackFile "$i"; 1790 + done; 1791 + : "${sourceRoot=}"; 1792 + if [ -n "${setSourceRoot:-}" ]; then 1793 + runOneHook setSourceRoot; 1794 + else 1795 + if [ -z "$sourceRoot" ]; then 1796 + for i in *; 1797 + do 1798 + if [ -d "$i" ]; then 1799 + case $dirsBefore in 1800 + *\ $i\ *) 1801 + 1802 + ;; 1803 + *) 1804 + if [ -n "$sourceRoot" ]; then 1805 + echo "unpacker produced multiple directories"; 1806 + exit 1; 1807 + fi; 1808 + sourceRoot="$i" 1809 + ;; 1810 + esac; 1811 + fi; 1812 + done; 1813 + fi; 1814 + fi; 1815 + if [ -z "$sourceRoot" ]; then 1816 + echo "unpacker appears to have produced no directories"; 1817 + exit 1; 1818 + fi; 1819 + echo "source root is $sourceRoot"; 1820 + if [ "${dontMakeSourcesWritable:-0}" != 1 ]; then 1821 + chmod -R u+w -- "$sourceRoot"; 1822 + fi; 1823 + runHook postUnpack 1824 + } 1825 + updateAutotoolsGnuConfigScriptsPhase () 1826 + { 1827 + 1828 + if [ -n "${dontUpdateAutotoolsGnuConfigScripts-}" ]; then 1829 + return; 1830 + fi; 1831 + for script in config.sub config.guess; 1832 + do 1833 + for f in $(find . -type f -name "$script"); 1834 + do 1835 + echo "Updating Autotools / GNU config script to a newer upstream version: $f"; 1836 + cp -f "/nix/store/7lk76vdawbx478qq9lvi3mgf73rvcyhd-gnu-config-2023-09-19/$script" "$f"; 1837 + done; 1838 + done 1839 + } 1840 + updateSourceDateEpoch () 1841 + { 1842 + 1843 + local path="$1"; 1844 + local -a res=($(find "$path" -type f -not -newer "$NIX_BUILD_TOP/.." -printf '%T@ %p\0' | sort -n --zero-terminated | tail -n1 --zero-terminated | head -c -1)); 1845 + local time="${res[0]//\.[0-9]*/}"; 1846 + local newestFile="${res[1]}"; 1847 + if [ "${time:-0}" -gt "$SOURCE_DATE_EPOCH" ]; then 1848 + echo "setting SOURCE_DATE_EPOCH to timestamp $time of file $newestFile"; 1849 + export SOURCE_DATE_EPOCH="$time"; 1850 + local now="$(date +%s)"; 1851 + if [ "$time" -gt $((now - 60)) ]; then 1852 + echo "warning: file $newestFile may be generated; SOURCE_DATE_EPOCH may be non-deterministic"; 1853 + fi; 1854 + fi 1855 + } 1856 + PATH="$PATH${nix_saved_PATH:+:$nix_saved_PATH}" 1857 + XDG_DATA_DIRS="$XDG_DATA_DIRS${nix_saved_XDG_DATA_DIRS:+:$nix_saved_XDG_DATA_DIRS}" 1858 + export NIX_BUILD_TOP="$(mktemp -d -t nix-shell.XXXXXX)" 1859 + export TMP="$NIX_BUILD_TOP" 1860 + export TMPDIR="$NIX_BUILD_TOP" 1861 + export TEMP="$NIX_BUILD_TOP" 1862 + export TEMPDIR="$NIX_BUILD_TOP" 1863 + eval "$shellHook"
+2
.envrc
··· 1 + export HE_PASSWORD=SuperDuper 2 + use flake
+2
.gitignore
··· 1 + .worktrees/* 2 + .direnv/
+5 -4
dns/dnsconfig.js
··· 6 6 7 7 D("lakhwara.com", REG_NONE, 8 8 DnsProvider(DNS_HEDNS), 9 - DefaultTTL(86400), 9 + DefaultTTL(300), 10 10 //SOA('@', 'ns1.he.net.', 'hostmaster.he.net.', 2022041702, 86400, 7200, 3600000, 86400, TTL(172800)), 11 - A('anish', '103.16.130.98'), 12 - A('coaching', '103.16.130.98'), 11 + A('anish', '69.61.2.203'), 12 + A('@', '69.61.2.203'), 13 + //A('coaching', '103.16.130.98'), 13 14 TXT('anish', 'datkey=dat://1a240a14fab2bae9c85ebad29bddc04505aaba24e5fb809c2ccb4cdf71e3a7d5'), 14 15 CNAME('fm1._domainkey', 'fm1.lakhwara.com.dkim.fmhosted.com.'), 15 16 CNAME('fm2._domainkey', 'fm2.lakhwara.com.dkim.fmhosted.com.'), 16 17 CNAME('fm3._domainkey', 'fm3.lakhwara.com.dkim.fmhosted.com.'), 17 - A('@', '103.16.130.98'), 18 18 MX('@', 10, 'in1-smtp.messagingengine.com.'), 19 19 MX('@', 20, 'in2-smtp.messagingengine.com.'), 20 20 //NAMESERVER('ns1.he.net.'), ··· 39 39 A('git', '69.61.2.203', TTL(300)), 40 40 A('bin', '69.61.2.203', TTL(300)), 41 41 A('ci', '69.61.2.203', TTL(300)), 42 + A('write', '69.61.2.203', TTL(300)), 42 43 // vultr -> nulled: lituus 43 44 A('@', '45.77.48.108', TTL(300)), 44 45 A('jitsi', '45.77.48.108', TTL(300)),
dns/test_nullhex.sh
+426 -273
flake.lock
··· 6 6 "home-manager": "home-manager", 7 7 "nixpkgs": [ 8 8 "nixpkgs" 9 - ] 9 + ], 10 + "systems": "systems" 10 11 }, 11 12 "locked": { 12 - "lastModified": 1690228878, 13 - "narHash": "sha256-9Xe7JV0krp4RJC9W9W9WutZVlw6BlHTFMiUP/k48LQY=", 13 + "lastModified": 1747575206, 14 + "narHash": "sha256-NwmAFuDUO/PFcgaGGr4j3ozG9Pe5hZ/ogitWhY+D81k=", 14 15 "owner": "ryantm", 15 16 "repo": "agenix", 16 - "rev": "d8c973fd228949736dedf61b7f8cc1ece3236792", 17 + "rev": "4835b1dc898959d8547a871ef484930675cb47f1", 17 18 "type": "github" 18 19 }, 19 20 "original": { ··· 34 35 }, 35 36 "locked": { 36 37 "lastModified": 1682226636, 37 - "narHash": "sha256-f/XuEoZYh+aubCfjeduvwZjd5X7IgRYnmuuhGsdfP/U=", 38 + "narHash": "sha256-fmETHfUtQ5zOVr/4MT5wE7eNALCSQCnEUYZYmV3UEwg=", 38 39 "ref": "main", 39 40 "rev": "095d14ff2469c8f3de7cbf45d229c0f46a733aae", 40 41 "revCount": 77, ··· 47 48 "url": "ssh://gitea@git.sealight.xyz/aynish/basant" 48 49 } 49 50 }, 51 + "breezy": { 52 + "inputs": { 53 + "flake-compat": "flake-compat", 54 + "flake-utils": "flake-utils_2", 55 + "nixpkgs": [ 56 + "unstable" 57 + ] 58 + }, 59 + "locked": { 60 + "lastModified": 1746128594, 61 + "narHash": "sha256-yynk80vxbBk3zhcGj/FT8lz2DBrjxb/1OoRy8JEbqtQ=", 62 + "owner": "shymega", 63 + "repo": "breezy-desktop", 64 + "rev": "77b9d4ef8dbf6a26427be6f3edae49d3c36fd5bc", 65 + "type": "github" 66 + }, 67 + "original": { 68 + "owner": "shymega", 69 + "ref": "shymega/add-nix-flake-support", 70 + "repo": "breezy-desktop", 71 + "type": "github" 72 + } 73 + }, 50 74 "brew-src": { 51 75 "flake": false, 52 76 "locked": { 53 - "lastModified": 1705326576, 54 - "narHash": "sha256-9PvMgHgdbpb5vBO8fHCRufodR731ynzGMF9+68vKWck=", 77 + "lastModified": 1746795192, 78 + "narHash": "sha256-Cv+RXuzmn2iGBY2Ny/nXBTH+LFKDWIvMxf9a+btKI6M=", 55 79 "owner": "Homebrew", 56 80 "repo": "brew", 57 - "rev": "1c612baa096c69f2fcb221c74e6f5b9979efdcee", 81 + "rev": "6f39076b3c2251994419215279d0525ef667fc31", 58 82 "type": "github" 59 83 }, 60 84 "original": { 61 85 "owner": "Homebrew", 62 - "ref": "4.2.4", 86 + "ref": "4.5.2", 63 87 "repo": "brew", 64 88 "type": "github" 65 89 } ··· 67 91 "crane": { 68 92 "flake": false, 69 93 "locked": { 70 - "lastModified": 1686108916, 71 - "narHash": "sha256-looLH5MdY4erLiJw0XwQohGdr0fJL9y6TJY3898RA2U=", 94 + "lastModified": 1699217310, 95 + "narHash": "sha256-xpW3VFUG7yE6UE6Wl0dhqencuENSkV7qpnpe9I8VbPw=", 72 96 "owner": "ipetkov", 73 97 "repo": "crane", 74 - "rev": "8ab1a49432695bd80ff4b7f6c6515da0e926d922", 98 + "rev": "d535642bbe6f377077f7c23f0febb78b1463f449", 75 99 "type": "github" 76 100 }, 77 101 "original": { 78 102 "owner": "ipetkov", 79 - "ref": "v0.12.2", 103 + "ref": "v0.15.0", 80 104 "repo": "crane", 81 105 "type": "github" 82 106 } ··· 89 113 ] 90 114 }, 91 115 "locked": { 92 - "lastModified": 1673295039, 93 - "narHash": "sha256-AsdYgE8/GPwcelGgrntlijMg4t3hLFJFCRF3tL5WVjA=", 116 + "lastModified": 1744478979, 117 + "narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=", 94 118 "owner": "lnl7", 95 119 "repo": "nix-darwin", 96 - "rev": "87b9d090ad39b25b2400029c64825fc2a8868943", 120 + "rev": "43975d782b418ebf4969e9ccba82466728c2851b", 97 121 "type": "github" 98 122 }, 99 123 "original": { ··· 110 134 ] 111 135 }, 112 136 "locked": { 113 - "lastModified": 1747752302, 114 - "narHash": "sha256-XqNAcEFfe5tJZGlx+Su0G67ZwRwZmHNWwiMK0fji0Hw=", 115 - "owner": "nix-darwin", 137 + "lastModified": 1748065210, 138 + "narHash": "sha256-dFqlLNW6UW19m0vg5FHWLH2G2LGkqYyPs/4YqfoZMoM=", 139 + "owner": "LnL7", 116 140 "repo": "nix-darwin", 117 - "rev": "74ecd01d2c122f8a4a48066ab1d48f3e01671671", 141 + "rev": "acd6aa5a9065c6695212be313e06f08f7184cb25", 118 142 "type": "github" 119 143 }, 120 144 "original": { 121 - "owner": "nix-darwin", 122 - "ref": "nix-darwin-25.05", 145 + "owner": "LnL7", 146 + "ref": "master", 123 147 "repo": "nix-darwin", 124 148 "type": "github" 125 149 } 126 150 }, 127 151 "deploy-rs": { 128 152 "inputs": { 129 - "flake-compat": "flake-compat", 153 + "flake-compat": "flake-compat_2", 130 154 "nixpkgs": [ 131 155 "nixpkgs" 132 156 ], 133 157 "utils": "utils" 134 158 }, 135 159 "locked": { 136 - "lastModified": 1704875591, 137 - "narHash": "sha256-eWRLbqRcrILgztU/m/k7CYLzETKNbv0OsT2GjkaNm8A=", 160 + "lastModified": 1727447169, 161 + "narHash": "sha256-3KyjMPUKHkiWhwR91J1YchF6zb6gvckCAY1jOE+ne0U=", 138 162 "owner": "serokell", 139 163 "repo": "deploy-rs", 140 - "rev": "1776009f1f3fb2b5d236b84d9815f2edee463a9b", 164 + "rev": "aa07eb05537d4cd025e2310397a6adcedfe72c76", 141 165 "type": "github" 142 166 }, 143 167 "original": { ··· 164 188 "dirt-samples-src": { 165 189 "flake": false, 166 190 "locked": { 167 - "lastModified": 1588278411, 168 - "narHash": "sha256-h8vQxRym6QzNLOTZU7A43VCHuG0H77l+BFwXnC0L1CE=", 191 + "lastModified": 1698439458, 192 + "narHash": "sha256-Mp8qBpsOvW9Zguv95Kv7EU6S3ICaF2aO02Wz6xGURtE=", 169 193 "owner": "tidalcycles", 170 194 "repo": "dirt-samples", 171 - "rev": "66d432418c9a7d82cf049d9246adfa62f46df2a6", 195 + "rev": "9a6dff8f9ec3cd55b287290cf04e01afa6b8f532", 172 196 "type": "github" 173 197 }, 174 198 "original": { 175 199 "owner": "tidalcycles", 176 - "ref": "master", 177 200 "repo": "dirt-samples", 178 201 "type": "github" 179 202 } ··· 185 208 ] 186 209 }, 187 210 "locked": { 188 - "lastModified": 1690739034, 189 - "narHash": "sha256-roW02IaiQ3gnEEDMCDWL5YyN+C4nBf/te6vfL7rG0jk=", 211 + "lastModified": 1747742835, 212 + "narHash": "sha256-kYL4GCwwznsypvsnA20oyvW8zB/Dvn6K5G/tgMjVMT4=", 190 213 "owner": "nix-community", 191 214 "repo": "disko", 192 - "rev": "4015740375676402a2ee6adebc3c30ea625b9a94", 215 + "rev": "df522e787fdffc4f32ed3e1fca9ed0968a384d62", 193 216 "type": "github" 194 217 }, 195 218 "original": { ··· 200 223 }, 201 224 "dream2nix": { 202 225 "inputs": { 203 - "devshell": [ 204 - "sg-nvim", 205 - "nci" 206 - ], 207 - "flake-compat": [ 208 - "sg-nvim", 209 - "nci" 210 - ], 211 - "flake-parts": [ 212 - "sg-nvim", 213 - "nci", 214 - "parts" 215 - ], 216 - "nix-unit": [ 217 - "sg-nvim", 218 - "nci" 219 - ], 220 226 "nixpkgs": [ 221 227 "sg-nvim", 222 228 "nci", 223 229 "nixpkgs" 224 230 ], 225 - "pre-commit-hooks": [ 226 - "sg-nvim", 227 - "nci" 228 - ] 231 + "purescript-overlay": "purescript-overlay", 232 + "pyproject-nix": "pyproject-nix" 229 233 }, 230 234 "locked": { 231 - "lastModified": 1696373678, 232 - "narHash": "sha256-D5yaEkxi7VnoRsBDeHYB86FikFYDL/vq77ajo3Pa3Og=", 235 + "lastModified": 1722526955, 236 + "narHash": "sha256-fFS8aDnfK9Qfm2FLnQ8pqWk8FzvFEv5LvTuZTZLREnc=", 233 237 "owner": "nix-community", 234 238 "repo": "dream2nix", 235 - "rev": "5e2577caaf87661e29405db7e117bda57b0e749d", 239 + "rev": "3fd4c14d3683baac8d1f94286ae14fe160888b51", 236 240 "type": "github" 237 241 }, 238 242 "original": { ··· 260 264 "flake-compat_2": { 261 265 "flake": false, 262 266 "locked": { 267 + "lastModified": 1696426674, 268 + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", 269 + "owner": "edolstra", 270 + "repo": "flake-compat", 271 + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", 272 + "type": "github" 273 + }, 274 + "original": { 275 + "owner": "edolstra", 276 + "repo": "flake-compat", 277 + "type": "github" 278 + } 279 + }, 280 + "flake-compat_3": { 281 + "flake": false, 282 + "locked": { 263 283 "lastModified": 1641205782, 264 284 "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", 265 285 "owner": "edolstra", ··· 273 293 "type": "github" 274 294 } 275 295 }, 276 - "flake-compat_3": { 296 + "flake-compat_4": { 277 297 "flake": false, 278 298 "locked": { 279 - "lastModified": 1673956053, 280 - "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", 299 + "lastModified": 1696426674, 300 + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", 301 + "owner": "edolstra", 302 + "repo": "flake-compat", 303 + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", 304 + "type": "github" 305 + }, 306 + "original": { 307 + "owner": "edolstra", 308 + "repo": "flake-compat", 309 + "type": "github" 310 + } 311 + }, 312 + "flake-compat_5": { 313 + "flake": false, 314 + "locked": { 315 + "lastModified": 1733328505, 316 + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", 281 317 "owner": "edolstra", 282 318 "repo": "flake-compat", 283 - "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", 319 + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", 284 320 "type": "github" 285 321 }, 286 322 "original": { ··· 291 327 }, 292 328 "flake-parts": { 293 329 "inputs": { 294 - "nixpkgs-lib": "nixpkgs-lib" 330 + "nixpkgs-lib": [ 331 + "nur", 332 + "nixpkgs" 333 + ] 295 334 }, 296 335 "locked": { 297 - "lastModified": 1696343447, 298 - "narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=", 336 + "lastModified": 1733312601, 337 + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", 299 338 "owner": "hercules-ci", 300 339 "repo": "flake-parts", 301 - "rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4", 340 + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", 302 341 "type": "github" 303 342 }, 304 343 "original": { ··· 307 346 "type": "github" 308 347 } 309 348 }, 310 - "flake-utils": { 349 + "flake-parts_2": { 350 + "inputs": { 351 + "nixpkgs-lib": "nixpkgs-lib" 352 + }, 311 353 "locked": { 312 - "lastModified": 1638122382, 313 - "narHash": "sha256-sQzZzAbvKEqN9s0bzWuYmRaA03v40gaJ4+iL1LXjaeI=", 314 - "owner": "numtide", 315 - "repo": "flake-utils", 316 - "rev": "74f7e4319258e287b0f9cb95426c9853b282730b", 354 + "lastModified": 1725234343, 355 + "narHash": "sha256-+ebgonl3NbiKD2UD0x4BszCZQ6sTfL4xioaM49o5B3Y=", 356 + "owner": "hercules-ci", 357 + "repo": "flake-parts", 358 + "rev": "567b938d64d4b4112ee253b9274472dc3a346eb6", 317 359 "type": "github" 318 360 }, 319 361 "original": { 320 - "owner": "numtide", 321 - "repo": "flake-utils", 362 + "owner": "hercules-ci", 363 + "repo": "flake-parts", 322 364 "type": "github" 323 365 } 324 366 }, 325 - "flake-utils_2": { 367 + "flake-utils": { 326 368 "locked": { 327 - "lastModified": 1667395993, 328 - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", 369 + "lastModified": 1638122382, 370 + "narHash": "sha256-sQzZzAbvKEqN9s0bzWuYmRaA03v40gaJ4+iL1LXjaeI=", 329 371 "owner": "numtide", 330 372 "repo": "flake-utils", 331 - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", 373 + "rev": "74f7e4319258e287b0f9cb95426c9853b282730b", 332 374 "type": "github" 333 375 }, 334 376 "original": { ··· 337 379 "type": "github" 338 380 } 339 381 }, 340 - "flake-utils_3": { 382 + "flake-utils_2": { 341 383 "inputs": { 342 384 "systems": "systems_2" 343 385 }, 344 386 "locked": { 345 - "lastModified": 1687709756, 346 - "narHash": "sha256-Y5wKlQSkgEK2weWdOu4J3riRd+kV/VCgHsqLNTTWQ/0=", 387 + "lastModified": 1726560853, 388 + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", 347 389 "owner": "numtide", 348 390 "repo": "flake-utils", 349 - "rev": "dbabf0ca0c0c4bce6ea5eaf65af5cb694d2082c7", 391 + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", 350 392 "type": "github" 351 393 }, 352 394 "original": { ··· 355 397 "type": "github" 356 398 } 357 399 }, 358 - "flake-utils_4": { 359 - "inputs": { 360 - "systems": "systems_3" 361 - }, 400 + "flake-utils_3": { 362 401 "locked": { 363 - "lastModified": 1681202837, 364 - "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", 402 + "lastModified": 1667395993, 403 + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", 365 404 "owner": "numtide", 366 405 "repo": "flake-utils", 367 - "rev": "cfacdce06f30d2b68473a46042957675eebb3401", 406 + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", 368 407 "type": "github" 369 408 }, 370 409 "original": { ··· 373 412 "type": "github" 374 413 } 375 414 }, 376 - "flake-utils_5": { 415 + "flake-utils_4": { 377 416 "inputs": { 378 417 "systems": "systems_4" 379 418 }, 380 419 "locked": { 381 - "lastModified": 1685518550, 382 - "narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=", 383 - "owner": "numtide", 384 - "repo": "flake-utils", 385 - "rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef", 386 - "type": "github" 387 - }, 388 - "original": { 389 - "owner": "numtide", 390 - "repo": "flake-utils", 391 - "type": "github" 392 - } 393 - }, 394 - "flake-utils_6": { 395 - "inputs": { 396 - "systems": "systems_5" 397 - }, 398 - "locked": { 399 - "lastModified": 1681202837, 400 - "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", 420 + "lastModified": 1731533236, 421 + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 401 422 "owner": "numtide", 402 423 "repo": "flake-utils", 403 - "rev": "cfacdce06f30d2b68473a46042957675eebb3401", 424 + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 404 425 "type": "github" 405 426 }, 406 427 "original": { ··· 418 439 ] 419 440 }, 420 441 "locked": { 421 - "lastModified": 1660459072, 422 - "narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=", 442 + "lastModified": 1709087332, 443 + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", 423 444 "owner": "hercules-ci", 424 445 "repo": "gitignore.nix", 425 - "rev": "a20de23b925fd8264fd7fad6454652e142fd7f73", 446 + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", 426 447 "type": "github" 427 448 }, 428 449 "original": { ··· 433 454 }, 434 455 "grasp": { 435 456 "inputs": { 436 - "flake-utils": "flake-utils_2", 457 + "flake-utils": "flake-utils_3", 437 458 "nixpkgs": [ 438 459 "nixpkgs" 439 460 ] ··· 455 476 }, 456 477 "hardware": { 457 478 "locked": { 458 - "lastModified": 1691179816, 459 - "narHash": "sha256-WSMwqzU70ZMRHv1CUAfHEEKJuB0c9c9r0F+lJehXfSI=", 479 + "lastModified": 1747900541, 480 + "narHash": "sha256-dn64Pg9xLETjblwZs9Euu/SsjW80pd6lr5qSiyLY1pg=", 460 481 "owner": "nixos", 461 482 "repo": "nixos-hardware", 462 - "rev": "87e3122b67587492a617764f88c71991893fcf8a", 483 + "rev": "11f2d9ea49c3e964315215d6baa73a8d42672f06", 463 484 "type": "github" 464 485 }, 465 486 "original": { ··· 476 497 ] 477 498 }, 478 499 "locked": { 479 - "lastModified": 1682203081, 480 - "narHash": "sha256-kRL4ejWDhi0zph/FpebFYhzqlOBrk0Pl3dzGEKSAlEw=", 500 + "lastModified": 1745494811, 501 + "narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=", 481 502 "owner": "nix-community", 482 503 "repo": "home-manager", 483 - "rev": "32d3e39c491e2f91152c84f8ad8b003420eab0a1", 504 + "rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be", 484 505 "type": "github" 485 506 }, 486 507 "original": { ··· 513 534 "homebrew-bundle": { 514 535 "flake": false, 515 536 "locked": { 516 - "lastModified": 1709834002, 517 - "narHash": "sha256-KNRwMnyo6ZLphIh2bn02KNOtRf2X3NHqUbS7y4Vmn+M=", 537 + "lastModified": 1745335228, 538 + "narHash": "sha256-TIKR2UgtyUmHLNZp255/vLs+1I10hXe+sciMEbAGFwE=", 518 539 "owner": "homebrew", 519 540 "repo": "homebrew-bundle", 520 - "rev": "bb1c80baa7fac67bbffe81a2862c75a5dc7ea4a7", 541 + "rev": "a3265c84b232e13048ecbf6fc18a2eedfadbeb08", 521 542 "type": "github" 522 543 }, 523 544 "original": { ··· 529 550 "homebrew-cask": { 530 551 "flake": false, 531 552 "locked": { 532 - "lastModified": 1709955474, 533 - "narHash": "sha256-pE5x579FqCieeeEmrUtNKoBsMG41WSOfGWtXCTI9FP4=", 553 + "lastModified": 1748113418, 554 + "narHash": "sha256-lX4WosoMtusSD4GRDRvzwQwzLJUetg5HEWlMcJ4IQmI=", 534 555 "owner": "homebrew", 535 556 "repo": "homebrew-cask", 536 - "rev": "43b9db57368e350c116398c7da6cb5401cd37ebe", 557 + "rev": "ed1a02852e1c4a5fab4aef776082ca89cd70f09a", 537 558 "type": "github" 538 559 }, 539 560 "original": { ··· 545 566 "homebrew-core": { 546 567 "flake": false, 547 568 "locked": { 548 - "lastModified": 1709956143, 549 - "narHash": "sha256-5eyfpnVhxVv3+n53vp4j9DNx7O+mqtQqUn90JKS1PMM=", 569 + "lastModified": 1748120562, 570 + "narHash": "sha256-b4Qd9nAVW8yMqZ5T9B7HfSrDLCrtsw07D98/NWz2xsE=", 550 571 "owner": "homebrew", 551 572 "repo": "homebrew-core", 552 - "rev": "a38d7e99bc103e9564208f2d155701d70001c8cc", 573 + "rev": "b26cd07a06b15767688137a68461cb34fe985efa", 553 574 "type": "github" 554 575 }, 555 576 "original": { ··· 558 579 "type": "github" 559 580 } 560 581 }, 582 + "jovian": { 583 + "inputs": { 584 + "nix-github-actions": "nix-github-actions", 585 + "nixpkgs": [ 586 + "unstable" 587 + ] 588 + }, 589 + "locked": { 590 + "lastModified": 1747990026, 591 + "narHash": "sha256-sG5VbID+x5+xUC+jjgHibnzg8IllVcH+K2TLmYHLPME=", 592 + "owner": "jovian-experiments", 593 + "repo": "jovian-nixos", 594 + "rev": "e2f4ced874406541a7957f7e2b8f05a0d59a0f00", 595 + "type": "github" 596 + }, 597 + "original": { 598 + "owner": "jovian-experiments", 599 + "repo": "jovian-nixos", 600 + "type": "github" 601 + } 602 + }, 561 603 "mk-naked-shell": { 562 604 "flake": false, 563 605 "locked": { ··· 579 621 "crane": "crane", 580 622 "dream2nix": "dream2nix", 581 623 "mk-naked-shell": "mk-naked-shell", 582 - "nixpkgs": "nixpkgs_5", 624 + "nixpkgs": "nixpkgs_6", 583 625 "parts": "parts", 584 626 "rust-overlay": "rust-overlay_2", 585 627 "treefmt": "treefmt" 586 628 }, 587 629 "locked": { 588 - "lastModified": 1696572678, 589 - "narHash": "sha256-rcznf00l41VtjzvEGMWOxaj5J/5twES6n30VwbJMgl0=", 630 + "lastModified": 1725862543, 631 + "narHash": "sha256-tq5GovIMh1CaC4wtf7qdnzyab+tlpIspuR13FHAVibA=", 590 632 "owner": "yusdacra", 591 633 "repo": "nix-cargo-integration", 592 - "rev": "cacb6c94004a35676c193f04afa8821758986bf0", 634 + "rev": "b60e6590f9d54041660d5dc86242721eb568371d", 593 635 "type": "github" 594 636 }, 595 637 "original": { ··· 603 645 "nixpkgs": "nixpkgs" 604 646 }, 605 647 "locked": { 606 - "lastModified": 1688307440, 607 - "narHash": "sha256-7PTjbN+/+b799YN7Tk2SS5Vh8A0L3gBo8hmB7Y0VXug=", 648 + "lastModified": 1716329735, 649 + "narHash": "sha256-ap51w+VqG21vuzyQ04WrhI2YbWHd3UGz0e7dc/QQmoA=", 608 650 "owner": "LnL7", 609 651 "repo": "nix-darwin", 610 - "rev": "b06bab83bdf285ea0ae3c8e145a081eb95959047", 652 + "rev": "eac4f25028c1975a939c8f8fba95c12f8a25e01c", 611 653 "type": "github" 612 654 }, 613 655 "original": { ··· 616 658 "type": "github" 617 659 } 618 660 }, 661 + "nix-github-actions": { 662 + "inputs": { 663 + "nixpkgs": [ 664 + "jovian", 665 + "nixpkgs" 666 + ] 667 + }, 668 + "locked": { 669 + "lastModified": 1729697500, 670 + "narHash": "sha256-VFTWrbzDlZyFHHb1AlKRiD/qqCJIripXKiCSFS8fAOY=", 671 + "owner": "zhaofengli", 672 + "repo": "nix-github-actions", 673 + "rev": "e418aeb728b6aa5ca8c5c71974e7159c2df1d8cf", 674 + "type": "github" 675 + }, 676 + "original": { 677 + "owner": "zhaofengli", 678 + "ref": "matrix-name", 679 + "repo": "nix-github-actions", 680 + "type": "github" 681 + } 682 + }, 619 683 "nix-homebrew": { 620 684 "inputs": { 621 685 "brew-src": "brew-src", 622 - "flake-utils": "flake-utils_3", 623 686 "nix-darwin": "nix-darwin", 624 687 "nixpkgs": "nixpkgs_2" 625 688 }, 626 689 "locked": { 627 - "lastModified": 1705952034, 628 - "narHash": "sha256-H0nk8Gk8kPw4yi2WwOTsSHgPrzSwyNgWEYHk10IJwfc=", 690 + "lastModified": 1747444109, 691 + "narHash": "sha256-fSufrKr8NdhLMuGZGwjGUfH+TIWrjFTRIBhgCRIyxno=", 629 692 "owner": "zhaofengli-wip", 630 693 "repo": "nix-homebrew", 631 - "rev": "40f5ee46b58e7c5f1927e2c5a583dc3d7e571ed9", 694 + "rev": "159f21ae77da757bbaeb98c0b16ff2e7b2738350", 632 695 "type": "github" 633 696 }, 634 697 "original": { ··· 640 703 "nix-matrix-appservices": { 641 704 "inputs": { 642 705 "devshell": "devshell", 643 - "flake-compat": "flake-compat_2", 706 + "flake-compat": "flake-compat_3", 644 707 "nixlib": "nixlib", 645 708 "nixpkgs": "nixpkgs_3" 646 709 }, ··· 675 738 }, 676 739 "nixos-hardware": { 677 740 "locked": { 678 - "lastModified": 1691179816, 679 - "narHash": "sha256-WSMwqzU70ZMRHv1CUAfHEEKJuB0c9c9r0F+lJehXfSI=", 741 + "lastModified": 1747900541, 742 + "narHash": "sha256-dn64Pg9xLETjblwZs9Euu/SsjW80pd6lr5qSiyLY1pg=", 680 743 "owner": "NixOS", 681 744 "repo": "nixos-hardware", 682 - "rev": "87e3122b67587492a617764f88c71991893fcf8a", 745 + "rev": "11f2d9ea49c3e964315215d6baa73a8d42672f06", 683 746 "type": "github" 684 747 }, 685 748 "original": { ··· 704 767 }, 705 768 "nixpkgs-lib": { 706 769 "locked": { 707 - "dir": "lib", 708 - "lastModified": 1696019113, 709 - "narHash": "sha256-X3+DKYWJm93DRSdC5M6K5hLqzSya9BjibtBsuARoPco=", 710 - "owner": "NixOS", 711 - "repo": "nixpkgs", 712 - "rev": "f5892ddac112a1e9b3612c39af1b72987ee5783a", 713 - "type": "github" 770 + "lastModified": 1725233747, 771 + "narHash": "sha256-Ss8QWLXdr2JCBPcYChJhz4xJm+h/xjl4G0c0XlP6a74=", 772 + "type": "tarball", 773 + "url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz" 714 774 }, 715 775 "original": { 716 - "dir": "lib", 717 - "owner": "NixOS", 718 - "ref": "nixos-unstable", 719 - "repo": "nixpkgs", 720 - "type": "github" 776 + "type": "tarball", 777 + "url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz" 721 778 } 722 779 }, 723 780 "nixpkgs-stable": { 724 781 "locked": { 725 - "lastModified": 1685801374, 726 - "narHash": "sha256-otaSUoFEMM+LjBI1XL/xGB5ao6IwnZOXc47qhIgJe8U=", 782 + "lastModified": 1720386169, 783 + "narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=", 727 784 "owner": "NixOS", 728 785 "repo": "nixpkgs", 729 - "rev": "c37ca420157f4abc31e26f436c1145f8951ff373", 786 + "rev": "194846768975b7ad2c4988bdb82572c00222c0d7", 730 787 "type": "github" 731 788 }, 732 789 "original": { 733 790 "owner": "NixOS", 734 - "ref": "nixos-23.05", 791 + "ref": "nixos-24.05", 735 792 "repo": "nixpkgs", 736 793 "type": "github" 737 794 } 738 795 }, 739 796 "nixpkgs_2": { 740 797 "locked": { 741 - "lastModified": 1688049487, 742 - "narHash": "sha256-100g4iaKC9MalDjUW9iN6Jl/OocTDtXdeAj7pEGIRh4=", 798 + "lastModified": 1746328495, 799 + "narHash": "sha256-uKCfuDs7ZM3QpCE/jnfubTg459CnKnJG/LwqEVEdEiw=", 743 800 "owner": "NixOS", 744 801 "repo": "nixpkgs", 745 - "rev": "4bc72cae107788bf3f24f30db2e2f685c9298dc9", 802 + "rev": "979daf34c8cacebcd917d540070b52a3c2b9b16e", 746 803 "type": "github" 747 804 }, 748 805 "original": { ··· 770 827 }, 771 828 "nixpkgs_4": { 772 829 "locked": { 773 - "lastModified": 1747610100, 774 - "narHash": "sha256-rpR5ZPMkWzcnCcYYo3lScqfuzEw5Uyfh+R0EKZfroAc=", 830 + "lastModified": 1747862697, 831 + "narHash": "sha256-U4HaNZ1W26cbOVm0Eb5OdGSnfQVWQKbLSPrSSa78KC0=", 775 832 "owner": "nixos", 776 833 "repo": "nixpkgs", 777 - "rev": "ca49c4304acf0973078db0a9d200fd2bae75676d", 834 + "rev": "2baa12ff69913392faf0ace833bc54bba297ea95", 778 835 "type": "github" 779 836 }, 780 837 "original": { 781 838 "owner": "nixos", 782 - "ref": "nixos-25.05", 839 + "ref": "nixos-24.11", 783 840 "repo": "nixpkgs", 784 841 "type": "github" 785 842 } 786 843 }, 787 844 "nixpkgs_5": { 788 845 "locked": { 789 - "lastModified": 1696193975, 790 - "narHash": "sha256-mnQjUcYgp9Guu3RNVAB2Srr1TqKcPpRXmJf4LJk6KRY=", 846 + "lastModified": 1748026106, 847 + "narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=", 848 + "owner": "nixos", 849 + "repo": "nixpkgs", 850 + "rev": "063f43f2dbdef86376cc29ad646c45c46e93234c", 851 + "type": "github" 852 + }, 853 + "original": { 854 + "owner": "nixos", 855 + "ref": "nixos-unstable", 856 + "repo": "nixpkgs", 857 + "type": "github" 858 + } 859 + }, 860 + "nixpkgs_6": { 861 + "locked": { 862 + "lastModified": 1725634671, 863 + "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", 791 864 "owner": "NixOS", 792 865 "repo": "nixpkgs", 793 - "rev": "fdd898f8f79e8d2f99ed2ab6b3751811ef683242", 866 + "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", 794 867 "type": "github" 795 868 }, 796 869 "original": { ··· 800 873 "type": "github" 801 874 } 802 875 }, 803 - "nixpkgs_6": { 876 + "nixpkgs_7": { 804 877 "locked": { 805 - "lastModified": 1696419054, 806 - "narHash": "sha256-EdR+dIKCfqL3voZUDYwcvgRDOektQB9KbhBVcE0/3Mo=", 878 + "lastModified": 1725816686, 879 + "narHash": "sha256-0Kq2MkQ/sQX1rhWJ/ySBBQlBJBUK8mPMDcuDhhdBkSU=", 807 880 "owner": "nixos", 808 881 "repo": "nixpkgs", 809 - "rev": "7131f3c223a2d799568e4b278380cd9dac2b8579", 882 + "rev": "add0443ee587a0c44f22793b8c8649a0dbc3bb00", 810 883 "type": "github" 811 884 }, 812 885 "original": { ··· 816 889 "type": "github" 817 890 } 818 891 }, 819 - "nixpkgs_7": { 892 + "nixpkgs_8": { 820 893 "locked": { 821 - "lastModified": 1689261696, 822 - "narHash": "sha256-LzfUtFs9MQRvIoQ3MfgSuipBVMXslMPH/vZ+nM40LkA=", 894 + "lastModified": 1719082008, 895 + "narHash": "sha256-jHJSUH619zBQ6WdC21fFAlDxHErKVDJ5fpN0Hgx4sjs=", 823 896 "owner": "NixOS", 824 897 "repo": "nixpkgs", 825 - "rev": "df1eee2aa65052a18121ed4971081576b25d6b5c", 898 + "rev": "9693852a2070b398ee123a329e68f0dab5526681", 826 899 "type": "github" 827 900 }, 828 901 "original": { ··· 832 905 "type": "github" 833 906 } 834 907 }, 835 - "nixpkgs_8": { 908 + "nixpkgs_9": { 836 909 "locked": { 837 - "lastModified": 1681358109, 838 - "narHash": "sha256-eKyxW4OohHQx9Urxi7TQlFBTDWII+F+x2hklDOQPB50=", 910 + "lastModified": 1718428119, 911 + "narHash": "sha256-WdWDpNaq6u1IPtxtYHHWpl5BmabtpmLnMAx0RdJ/vo8=", 839 912 "owner": "NixOS", 840 913 "repo": "nixpkgs", 841 - "rev": "96ba1c52e54e74c3197f4d43026b3f3d92e83ff9", 914 + "rev": "e6cea36f83499eb4e9cd184c8a8e823296b50ad5", 842 915 "type": "github" 843 916 }, 844 917 "original": { ··· 849 922 } 850 923 }, 851 924 "nur": { 925 + "inputs": { 926 + "flake-parts": "flake-parts", 927 + "nixpkgs": "nixpkgs_5", 928 + "treefmt-nix": "treefmt-nix" 929 + }, 852 930 "locked": { 853 - "lastModified": 1691214006, 854 - "narHash": "sha256-kdfBd+Y0DTOOdgSA6h6iIn403xVj4bzLnXqb7+yM6lQ=", 931 + "lastModified": 1748119613, 932 + "narHash": "sha256-BvOMqlTgRbz8ldRcaf7OTKIRsGlOw4AssphiZGLd0fo=", 855 933 "owner": "nix-community", 856 934 "repo": "NUR", 857 - "rev": "963ad2d1bb0a8f59b2c23ab521d4dff2148aad16", 935 + "rev": "48380b491e6415284292516fe919d78207969e30", 858 936 "type": "github" 859 937 }, 860 938 "original": { ··· 872 950 ] 873 951 }, 874 952 "locked": { 875 - "lastModified": 1696343447, 876 - "narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=", 953 + "lastModified": 1725234343, 954 + "narHash": "sha256-+ebgonl3NbiKD2UD0x4BszCZQ6sTfL4xioaM49o5B3Y=", 877 955 "owner": "hercules-ci", 878 956 "repo": "flake-parts", 879 - "rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4", 957 + "rev": "567b938d64d4b4112ee253b9274472dc3a346eb6", 880 958 "type": "github" 881 959 }, 882 960 "original": { ··· 892 970 ] 893 971 }, 894 972 "locked": { 895 - "lastModified": 1724637654, 896 - "narHash": "sha256-YXmWxUEG3NDsLn46Ctrgn7YcT/h0fsCAxKcSgIhCSLo=", 973 + "lastModified": 1738465265, 974 + "narHash": "sha256-v8nD/2gq8/mILEJqvWgx1q7Fc1purQvV3/WZLQ/t/wc=", 897 975 "ref": "main", 898 - "rev": "521e360df123a530fc4c99187e3580bd5d086a9d", 899 - "revCount": 1467, 976 + "rev": "115f8af750c0d4b6a8c6f97119b12d7e3eb20c6a", 977 + "revCount": 1552, 900 978 "type": "git", 901 979 "url": "ssh://gitea@git.sealight.xyz/aynish/kitaab" 902 980 }, ··· 908 986 }, 909 987 "pre-commit-nix": { 910 988 "inputs": { 911 - "flake-compat": "flake-compat_3", 912 - "flake-utils": "flake-utils_5", 989 + "flake-compat": "flake-compat_4", 913 990 "gitignore": "gitignore", 914 - "nixpkgs": "nixpkgs_7", 991 + "nixpkgs": "nixpkgs_8", 915 992 "nixpkgs-stable": "nixpkgs-stable" 916 993 }, 917 994 "locked": { 918 - "lastModified": 1696516544, 919 - "narHash": "sha256-8rKE8Je6twTNFRTGF63P9mE3lZIq917RAicdc4XJO80=", 995 + "lastModified": 1725513492, 996 + "narHash": "sha256-tyMUA6NgJSvvQuzB7A1Sf8+0XCHyfSPRx/b00o6K0uo=", 920 997 "owner": "cachix", 921 998 "repo": "pre-commit-hooks.nix", 922 - "rev": "66c352d33e0907239e4a69416334f64af2c685cc", 999 + "rev": "7570de7b9b504cfe92025dd1be797bf546f66528", 923 1000 "type": "github" 924 1001 }, 925 1002 "original": { ··· 928 1005 "type": "github" 929 1006 } 930 1007 }, 1008 + "purescript-overlay": { 1009 + "inputs": { 1010 + "nixpkgs": [ 1011 + "sg-nvim", 1012 + "nci", 1013 + "dream2nix", 1014 + "nixpkgs" 1015 + ], 1016 + "slimlock": "slimlock" 1017 + }, 1018 + "locked": { 1019 + "lastModified": 1696022621, 1020 + "narHash": "sha256-eMjFmsj2G1E0Q5XiibUNgFjTiSz0GxIeSSzzVdoN730=", 1021 + "owner": "thomashoneyman", 1022 + "repo": "purescript-overlay", 1023 + "rev": "047c7933abd6da8aa239904422e22d190ce55ead", 1024 + "type": "github" 1025 + }, 1026 + "original": { 1027 + "owner": "thomashoneyman", 1028 + "repo": "purescript-overlay", 1029 + "type": "github" 1030 + } 1031 + }, 1032 + "pyproject-nix": { 1033 + "flake": false, 1034 + "locked": { 1035 + "lastModified": 1702448246, 1036 + "narHash": "sha256-hFg5s/hoJFv7tDpiGvEvXP0UfFvFEDgTdyHIjDVHu1I=", 1037 + "owner": "davhau", 1038 + "repo": "pyproject.nix", 1039 + "rev": "5a06a2697b228c04dd2f35659b4b659ca74f7aeb", 1040 + "type": "github" 1041 + }, 1042 + "original": { 1043 + "owner": "davhau", 1044 + "ref": "dream2nix", 1045 + "repo": "pyproject.nix", 1046 + "type": "github" 1047 + } 1048 + }, 931 1049 "root": { 932 1050 "inputs": { 933 1051 "agenix": "agenix", 934 1052 "basant": "basant", 1053 + "breezy": "breezy", 935 1054 "darwin": "darwin_2", 936 1055 "deploy-rs": "deploy-rs", 937 1056 "disko": "disko", ··· 941 1060 "homebrew-bundle": "homebrew-bundle", 942 1061 "homebrew-cask": "homebrew-cask", 943 1062 "homebrew-core": "homebrew-core", 1063 + "jovian": "jovian", 944 1064 "nix-homebrew": "nix-homebrew", 945 1065 "nix-matrix-appservices": "nix-matrix-appservices", 946 1066 "nixos-hardware": "nixos-hardware", ··· 952 1072 "sourcegraph-src-cli-cask": "sourcegraph-src-cli-cask", 953 1073 "tidalcycles": "tidalcycles", 954 1074 "unstable": "unstable", 955 - "vimwikicli": "vimwikicli" 1075 + "vimwikicli": "vimwikicli", 1076 + "xr-linux": "xr-linux" 956 1077 } 957 1078 }, 958 1079 "rust-overlay": { 959 1080 "inputs": { 960 - "flake-utils": "flake-utils_4", 961 1081 "nixpkgs": [ 962 1082 "nixpkgs" 963 1083 ] 964 1084 }, 965 1085 "locked": { 966 - "lastModified": 1691201768, 967 - "narHash": "sha256-h+QJMpawZoK1+8efF6UjQoY1EHZfHteXVa5OYnlqRWA=", 1086 + "lastModified": 1748054080, 1087 + "narHash": "sha256-rwFiLLNCwkj9bqePtH1sMqzs1xmohE0Ojq249piMzF4=", 968 1088 "owner": "oxalica", 969 1089 "repo": "rust-overlay", 970 - "rev": "18ee2a71de24273e4ad4503b5604532f0b53f382", 1090 + "rev": "2221d8d53c128beb69346fa3ab36da3f19bb1691", 971 1091 "type": "github" 972 1092 }, 973 1093 "original": { ··· 979 1099 "rust-overlay_2": { 980 1100 "flake": false, 981 1101 "locked": { 982 - "lastModified": 1696558324, 983 - "narHash": "sha256-TnnP4LGwDB8ZGE7h2n4nA9Faee8xPkMdNcyrzJ57cbw=", 1102 + "lastModified": 1725848835, 1103 + "narHash": "sha256-u4lCr+tOEWhsFiww5G04U5jUNzaQJi0/ZMIDGiLeT14=", 984 1104 "owner": "oxalica", 985 1105 "repo": "rust-overlay", 986 - "rev": "fdb37574a04df04aaa8cf7708f94a9309caebe2b", 1106 + "rev": "2ef910a6276a2f34513d18f2f826a8dea72c3b3f", 987 1107 "type": "github" 988 1108 }, 989 1109 "original": { ··· 994 1114 }, 995 1115 "rust-overlay_3": { 996 1116 "inputs": { 997 - "flake-utils": "flake-utils_6", 998 - "nixpkgs": "nixpkgs_8" 1117 + "nixpkgs": "nixpkgs_9" 999 1118 }, 1000 1119 "locked": { 1001 - "lastModified": 1696558324, 1002 - "narHash": "sha256-TnnP4LGwDB8ZGE7h2n4nA9Faee8xPkMdNcyrzJ57cbw=", 1120 + "lastModified": 1725848835, 1121 + "narHash": "sha256-u4lCr+tOEWhsFiww5G04U5jUNzaQJi0/ZMIDGiLeT14=", 1003 1122 "owner": "oxalica", 1004 1123 "repo": "rust-overlay", 1005 - "rev": "fdb37574a04df04aaa8cf7708f94a9309caebe2b", 1124 + "rev": "2ef910a6276a2f34513d18f2f826a8dea72c3b3f", 1006 1125 "type": "github" 1007 1126 }, 1008 1127 "original": { ··· 1013 1132 }, 1014 1133 "sg-nvim": { 1015 1134 "inputs": { 1016 - "flake-parts": "flake-parts", 1135 + "flake-parts": "flake-parts_2", 1017 1136 "nci": "nci", 1018 - "nixpkgs": "nixpkgs_6", 1137 + "nixpkgs": "nixpkgs_7", 1019 1138 "pre-commit-nix": "pre-commit-nix", 1020 1139 "rust-overlay": "rust-overlay_3" 1021 1140 }, 1022 1141 "locked": { 1023 - "lastModified": 1716664639, 1024 - "narHash": "sha256-5wzTW9kJGYq41kXG9JoVAaA5601K26cDrweT2PtpEw8=", 1142 + "lastModified": 1737448478, 1143 + "narHash": "sha256-i5g+pzxB8pAORLbr1wlYWUTsrJJmVj9UwlCg8pU3Suw=", 1025 1144 "owner": "sourcegraph", 1026 1145 "repo": "sg.nvim", 1027 - "rev": "8bdd4d19da2268072708d5fe18fda9c23e16509d", 1146 + "rev": "775f22b75a9826eabf69b0094dd1d51d619fe552", 1028 1147 "type": "github" 1029 1148 }, 1030 1149 "original": { ··· 1033 1152 "type": "github" 1034 1153 } 1035 1154 }, 1155 + "slimlock": { 1156 + "inputs": { 1157 + "nixpkgs": [ 1158 + "sg-nvim", 1159 + "nci", 1160 + "dream2nix", 1161 + "purescript-overlay", 1162 + "nixpkgs" 1163 + ] 1164 + }, 1165 + "locked": { 1166 + "lastModified": 1688610262, 1167 + "narHash": "sha256-Wg0ViDotFWGWqKIQzyYCgayeH8s4U1OZcTiWTQYdAp4=", 1168 + "owner": "thomashoneyman", 1169 + "repo": "slimlock", 1170 + "rev": "b5c6cdcaf636ebbebd0a1f32520929394493f1a6", 1171 + "type": "github" 1172 + }, 1173 + "original": { 1174 + "owner": "thomashoneyman", 1175 + "repo": "slimlock", 1176 + "type": "github" 1177 + } 1178 + }, 1036 1179 "sourcegraph-src-cli-cask": { 1037 1180 "flake": false, 1038 1181 "locked": { 1039 - "lastModified": 1722629753, 1040 - "narHash": "sha256-3OwvDSoVzklr3ca1qCXR27Kc8hGjshRRdtVQ8OUXQCc=", 1182 + "lastModified": 1747940755, 1183 + "narHash": "sha256-rS+LEcZKOoRN3bH+aZIV1Y4AlPR8dWosiRAA8Q1itBs=", 1041 1184 "owner": "sourcegraph", 1042 1185 "repo": "homebrew-src-cli", 1043 - "rev": "130bd8ab70961e5c1f890811bfb1f7552a2ee5a9", 1186 + "rev": "34bb40706f3f9641958db65c5c77a1db51140b3d", 1044 1187 "type": "github" 1045 1188 }, 1046 1189 "original": { ··· 1052 1195 "superdirt-src": { 1053 1196 "flake": false, 1054 1197 "locked": { 1055 - "lastModified": 1611740180, 1056 - "narHash": "sha256-GtnqZeMFqFkVhgx2Exu0wY687cHa7mNnVCgjQd6fiIA=", 1198 + "lastModified": 1697377840, 1199 + "narHash": "sha256-9qU9CHYAXbN1IE3xXDqGipuroifVaSVXj3c/cDfwM80=", 1057 1200 "owner": "musikinformatik", 1058 1201 "repo": "superdirt", 1059 - "rev": "7abb62e89649daa1232b9cbd6427241868abd30e", 1202 + "rev": "c7f32998572984705d340e7c1b9ed9ad998a39b6", 1060 1203 "type": "github" 1061 1204 }, 1062 1205 "original": { 1063 1206 "owner": "musikinformatik", 1064 - "ref": "master", 1065 1207 "repo": "superdirt", 1066 1208 "type": "github" 1067 1209 } ··· 1126 1268 "type": "github" 1127 1269 } 1128 1270 }, 1129 - "systems_5": { 1130 - "locked": { 1131 - "lastModified": 1681028828, 1132 - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 1133 - "owner": "nix-systems", 1134 - "repo": "default", 1135 - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 1136 - "type": "github" 1137 - }, 1138 - "original": { 1139 - "owner": "nix-systems", 1140 - "repo": "default", 1141 - "type": "github" 1142 - } 1143 - }, 1144 1271 "tidal-src": { 1145 1272 "flake": false, 1146 1273 "locked": { 1147 - "lastModified": 1654350756, 1148 - "narHash": "sha256-tONM5SYYBca0orTLH1EUOilSC1FCluWrFt8AetUx+YQ=", 1274 + "lastModified": 1712519522, 1275 + "narHash": "sha256-LbvxQmVxHElidCgvt+w0g1k+QQbNLebK46vtRCgsLeQ=", 1149 1276 "owner": "tidalcycles", 1150 1277 "repo": "tidal", 1151 - "rev": "fda9c1ecb3722698935245e5409ef8ccdfca16c8", 1278 + "rev": "88f09edf6bef2228d5f530dea872b08a9d803066", 1152 1279 "type": "github" 1153 1280 }, 1154 1281 "original": { 1155 1282 "owner": "tidalcycles", 1156 - "ref": "main", 1283 + "ref": "v1.9.5", 1157 1284 "repo": "tidal", 1158 1285 "type": "github" 1159 1286 } ··· 1166 1293 ], 1167 1294 "superdirt-src": "superdirt-src", 1168 1295 "tidal-src": "tidal-src", 1169 - "utils": "utils_2", 1170 1296 "vim-tidal-src": "vim-tidal-src", 1171 1297 "vowel-src": "vowel-src" 1172 1298 }, 1173 1299 "locked": { 1174 - "lastModified": 1664760044, 1175 - "narHash": "sha256-e5LGk/tDnphory1mYhADgPnVtShofY2w/3xY09jEE2A=", 1300 + "lastModified": 1730626669, 1301 + "narHash": "sha256-nFyZrvTPn9OM9UZmuAwy3e1Ba0ZuYc2FaDCOOhGtqg4=", 1176 1302 "owner": "mitchmindtree", 1177 1303 "repo": "tidalcycles.nix", 1178 - "rev": "3f3a820cd43709077d15a24fa6062de7d623a6bf", 1304 + "rev": "0db0918e7a3d3c30ed7a6e81dc9d4e3832870ac4", 1179 1305 "type": "github" 1180 1306 }, 1181 1307 "original": { ··· 1193 1319 ] 1194 1320 }, 1195 1321 "locked": { 1196 - "lastModified": 1695822946, 1197 - "narHash": "sha256-IQU3fYo0H+oGlqX5YrgZU3VRhbt2Oqe6KmslQKUO4II=", 1322 + "lastModified": 1725271838, 1323 + "narHash": "sha256-VcqxWT0O/gMaeWTTjf1r4MOyG49NaNxW4GHTO3xuThE=", 1198 1324 "owner": "numtide", 1199 1325 "repo": "treefmt-nix", 1200 - "rev": "720bd006d855b08e60664e4683ccddb7a9ff614a", 1326 + "rev": "9fb342d14b69aefdf46187f6bb80a4a0d97007cd", 1327 + "type": "github" 1328 + }, 1329 + "original": { 1330 + "owner": "numtide", 1331 + "repo": "treefmt-nix", 1332 + "type": "github" 1333 + } 1334 + }, 1335 + "treefmt-nix": { 1336 + "inputs": { 1337 + "nixpkgs": [ 1338 + "nur", 1339 + "nixpkgs" 1340 + ] 1341 + }, 1342 + "locked": { 1343 + "lastModified": 1733222881, 1344 + "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", 1345 + "owner": "numtide", 1346 + "repo": "treefmt-nix", 1347 + "rev": "49717b5af6f80172275d47a418c9719a31a78b53", 1201 1348 "type": "github" 1202 1349 }, 1203 1350 "original": { ··· 1208 1355 }, 1209 1356 "unstable": { 1210 1357 "locked": { 1211 - "lastModified": 1747542820, 1212 - "narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", 1358 + "lastModified": 1748026106, 1359 + "narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=", 1213 1360 "owner": "nixos", 1214 1361 "repo": "nixpkgs", 1215 - "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", 1362 + "rev": "063f43f2dbdef86376cc29ad646c45c46e93234c", 1216 1363 "type": "github" 1217 1364 }, 1218 1365 "original": { ··· 1224 1371 }, 1225 1372 "utils": { 1226 1373 "inputs": { 1227 - "systems": "systems" 1374 + "systems": "systems_3" 1228 1375 }, 1229 1376 "locked": { 1230 1377 "lastModified": 1701680307, ··· 1240 1387 "type": "github" 1241 1388 } 1242 1389 }, 1243 - "utils_2": { 1244 - "locked": { 1245 - "lastModified": 1653893745, 1246 - "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", 1247 - "owner": "numtide", 1248 - "repo": "flake-utils", 1249 - "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", 1250 - "type": "github" 1251 - }, 1252 - "original": { 1253 - "owner": "numtide", 1254 - "repo": "flake-utils", 1255 - "type": "github" 1256 - } 1257 - }, 1258 1390 "vim-tidal-src": { 1259 1391 "flake": false, 1260 1392 "locked": { 1261 - "lastModified": 1664252474, 1262 - "narHash": "sha256-hleiK2Q7xYndpB+tIbyyXIM2sk4NunUh9DPgMqmf/Wc=", 1393 + "lastModified": 1685703852, 1394 + "narHash": "sha256-8gyk17YLeKpLpz3LRtxiwbpsIbZka9bb63nK5/9IUoA=", 1263 1395 "owner": "tidalcycles", 1264 1396 "repo": "vim-tidal", 1265 - "rev": "b07f5c12986fb837e055d7fcf0acf3b7e248148f", 1397 + "rev": "e440fe5bdfe07f805e21e6872099685d38e8b761", 1266 1398 "type": "github" 1267 1399 }, 1268 1400 "original": { 1269 1401 "owner": "tidalcycles", 1270 - "ref": "master", 1271 1402 "repo": "vim-tidal", 1272 1403 "type": "github" 1273 1404 } ··· 1305 1436 }, 1306 1437 "original": { 1307 1438 "owner": "supercollider-quarks", 1308 - "ref": "master", 1309 1439 "repo": "vowel", 1440 + "type": "github" 1441 + } 1442 + }, 1443 + "xr-linux": { 1444 + "inputs": { 1445 + "flake-compat": "flake-compat_5", 1446 + "flake-utils": "flake-utils_4", 1447 + "nixpkgs": [ 1448 + "unstable" 1449 + ] 1450 + }, 1451 + "locked": { 1452 + "lastModified": 1746033220, 1453 + "narHash": "sha256-l4pISN7GDSL2o0BddkWtdCX4k4BjAaW0xwo5DbhfO8A=", 1454 + "owner": "shymega", 1455 + "repo": "XRLinuxDriver", 1456 + "rev": "c6cd02d547f87a156538c131e09ee4d41eb79325", 1457 + "type": "github" 1458 + }, 1459 + "original": { 1460 + "owner": "shymega", 1461 + "ref": "shymega/nix-flake-support", 1462 + "repo": "XRLinuxDriver", 1310 1463 "type": "github" 1311 1464 } 1312 1465 }
+66 -23
flake.nix
··· 1 1 { 2 - description = "Your new nix config"; 2 + description = "Sealight NixOS Config"; 3 3 4 4 inputs = { 5 5 # Nixpkgs 6 - nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; 6 + nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; 7 7 unstable.url = "github:nixos/nixpkgs/nixos-unstable"; 8 8 nixos-hardware.url = "github:NixOS/nixos-hardware/master"; 9 + 10 + # ngipkgs.url = "github:Chickensoupwithrice/ngipkgs?ref=aynish/atomic-server-module"; 11 + # ngipkgs-local.url = "path:/home/anish/usr/ngipkgs"; 9 12 10 13 # Home manager 11 14 home-manager.url = "github:nix-community/home-manager/release-25.05"; ··· 34 37 # Matrix 35 38 nix-matrix-appservices.url = "gitlab:coffeetables/nix-matrix-appservices"; 36 39 40 + # Jovian 41 + jovian = { 42 + url = "github:jovian-experiments/jovian-nixos"; 43 + inputs.nixpkgs.follows = "unstable"; 44 + }; 45 + # Breezy XR for Jovian 46 + xr-linux = { 47 + url = "github:shymega/XRLinuxDriver?ref=shymega/nix-flake-support"; 48 + inputs.nixpkgs.follows = "unstable"; 49 + }; 50 + breezy = { 51 + url = "github:shymega/breezy-desktop?ref=shymega/add-nix-flake-support"; 52 + inputs.nixpkgs.follows = "unstable"; 53 + }; 37 54 # OSX 38 55 darwin = { 39 - url = "github:nix-darwin/nix-darwin/nix-darwin-25.05"; 56 + url = "github:LnL7/nix-darwin/master"; 40 57 inputs.nixpkgs.follows = "nixpkgs"; 41 58 }; 42 59 nix-homebrew = { ··· 102 119 , homebrew-cask 103 120 , sourcegraph-src-cli-cask 104 121 , sg-nvim 122 + , jovian 123 + , breezy 124 + , xr-linux 105 125 , ... 106 126 }@inputs: 107 127 let ··· 167 187 # ]; 168 188 overlays = [ 169 189 agenix.overlays.default 190 + self.overlays.additions 191 + self.overlays.modifications 170 192 tidalcycles.overlays.default # needed for nvim which comes pre-installed lol 171 193 ]; 172 194 }); 173 195 196 + # for deck 197 + deckPkgsFor = forAllSystems (system: import unstable { 198 + inherit system; 199 + config = { 200 + allowUnfree = true; 201 + }; 202 + overlays = [ 203 + breezy.overlays.default 204 + xr-linux.overlays.default 205 + nur.overlay 206 + ]; 207 + }); 208 + 174 209 darwinSystems = [ "aarch64-darwin" "x86_64-darwin" ]; 175 210 in 176 211 { ··· 240 275 agenix.nixosModules.age 241 276 self.nixosModules.backup 242 277 self.nixosModules.wireguard 278 + self.nixosModules.wallabag 243 279 nixos-hardware.nixosModules.lenovo-thinkpad-x270 244 280 home-manager.nixosModules.home-manager 245 281 { ··· 261 297 agenix.nixosModules.age 262 298 self.nixosModules.backup 263 299 self.nixosModules.wireguard 300 + basant.nixosModule 264 301 # self.nixosModules.microbin 265 302 disko.nixosModules.disko 303 + { 304 + nixpkgs.flake.setNixPath = false; 305 + nixpkgs.flake.setFlakeRegistry = false; 306 + } 266 307 ]; 267 308 }; 268 309 ··· 285 326 ]; 286 327 }; 287 328 288 - cube = nixpkgs.lib.nixosSystem rec { 289 - specialArgs = { inherit inputs self; }; 290 - system = "x86_64-linux"; 291 - pkgs = litePkgsFor.${system}; 292 - modules = [ 293 - ./hosts/cube 294 - agenix.nixosModules.age 295 - self.nixosModules.backup 296 - self.nixosModules.wireguard 297 - basant.nixosModule 298 - ]; 299 - }; 300 - 301 329 box = nixpkgs.lib.nixosSystem rec { 302 330 specialArgs = { inherit inputs self; }; 303 331 system = "x86_64-linux"; ··· 308 336 self.nixosModules.backup 309 337 self.nixosModules.wireguard 310 338 self.nixosModules.gonic 339 + self.nixosModules.gpodder2go 311 340 self.nixosModules.wallabag 312 341 self.nixosModules.ulogger-server 313 342 grasp.nixosModule ··· 320 349 } 321 350 ]; 322 351 }; 352 + 353 + deck = unstable.lib.nixosSystem rec { 354 + specialArgs = { inherit inputs self; }; 355 + system = "x86_64-linux"; 356 + pkgs = deckPkgsFor.${system}; 357 + modules = [ 358 + ./hosts/deck 359 + jovian.nixosModules.default 360 + self.nixosModules.wireguard 361 + agenix.nixosModules.age 362 + self.nixosModules.backup 363 + home-manager.nixosModules.home-manager 364 + { 365 + nix.registry.nixpkgs.flake = unstable; 366 + home-manager.useGlobalPkgs = true; 367 + home-manager.useUserPackages = true; 368 + home-manager.users.anish = import ./home/gui; 369 + } 370 + ]; 371 + }; 323 372 }; 324 373 325 374 # Standalone home-manager configuration entrypoint ··· 340 389 hostname = "mossnet.lan"; 341 390 autoRollback = false; 342 391 magicRollback = false; 392 + remoteBuild = true; 343 393 profiles.system = { 344 394 user = "root"; 345 395 path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.box; ··· 360 410 profiles.system = { 361 411 user = "root"; 362 412 path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.helix; 363 - }; 364 - }; 365 - cube = { 366 - hostname = "lakhwara.com"; 367 - profiles.system = { 368 - user = "root"; 369 - path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.cube; 370 413 }; 371 414 }; 372 415 };
+1 -2
home/core/default.nix
··· 1 1 { self, pkgs, ... }: 2 2 { 3 3 imports = [ 4 - # ../profiles/nvim 4 + ../profiles/nvim 5 5 ../profiles/cli 6 6 ../profiles/direnv 7 7 ../profiles/git 8 - ../profiles/task 9 8 ]; 10 9 home.stateVersion = "22.05"; 11 10 }
+1 -1
home/darwin/default.nix
··· 14 14 home.homeDirectory = "/Users/anishlakhwara"; 15 15 home.stateVersion = "22.05"; 16 16 17 - programs.zsh.initContent = '' 17 + programs.zsh.initExtra = '' 18 18 PATH=/Users/anishlakhwara/.sourcegraph/bin:/Users/anishlakhwara/.sourcegraph/sg.zsh_autocomplete:/Users/anishlakhwara/google-cloud-sdk/bin:/Users/anishlakhwara/google-cloud-sdk/completion.zsh.inc:/Users/anishlakhwara/google-cloud-sdk/path.zsh.inc:/Users/anishlakhwara/.sg:/opt/homebrew/bin:$PATH 19 19 ''; 20 20
+1
home/gui/default.nix
··· 2 2 { 3 3 imports = [ 4 4 ../core 5 + ../profiles/nvim 5 6 ../profiles/firefox 6 7 ../profiles/desktop 7 8 ../profiles/email
+15 -11
home/profiles/cli/default.nix
··· 1 1 { lib, pkgs, config, ... }: 2 2 { 3 3 home.packages = with pkgs; [ 4 - #unstable.claude-code 4 + # unstable.claude-code 5 5 binutils 6 6 # coreutils 7 7 dnsutils ··· 9 9 dosfstools 10 10 # git 11 11 git-machete 12 + git-spice 13 + # jujitsu 12 14 asciinema 13 15 bottom 14 16 gptfdisk ··· 35 37 iftop 36 38 wget 37 39 curl 38 - eza 40 + eza 39 41 bat 40 42 fd 41 - # ncdu 43 + ncdu 44 + du-dust 45 + # dia-cli 42 46 duf 43 47 trash-cli 44 48 nix-index ··· 65 69 taskwarrior-tui 66 70 zk 67 71 diffnav 68 - jujutsu 69 - git-spice 70 72 71 73 # llms (needs 24.11) 72 74 aider-chat ··· 139 141 enableCompletion = true; 140 142 autosuggestion.enable = false; 141 143 142 - initContent = '' 143 - bindkey -v 144 + initExtra = '' 144 145 autopair-init 145 146 ''; 146 147 sessionVariables = { ··· 228 229 229 230 # modern cli tools 230 231 ls = "eza --icons"; 231 - l = "eza -l --icons"; 232 + l = "esa -l --icons"; 232 233 la = "eza -la --icons"; 233 234 tree = "ls --tree --icons"; 234 235 cat = "bat"; ··· 240 241 make-secret = "< /dev/urandom \\tr -dc _A-Za-z0-9 | head -c \${1:-32};echo;"; 241 242 242 243 # task warrior 243 - # TODO: make blocked a context? 244 244 t = "task -BLOCKED -idea -backlog"; 245 + tw = "t rc.context:work"; 246 + # TODO find a reasonable way to manage this from a non-nix managed file in ~/.task/context or something 247 + # we can do something like task rc.context:$(cat ~/.task/context) to read context 248 + # and write a little script make-context = cat $@ > ~/.task/context or something 245 249 tt = "taskwarrior-tui -r list"; 246 250 ti = "task +idea"; 247 251 tb = "task +backlog list"; 248 252 ttb = "taskwarrior-tui -r backlog"; 249 253 tr = "task newest limit:page"; 250 - tw = "task +wait"; 254 + twait = "task +wait"; 251 255 ta = "task add"; 252 256 tai = "task add +idea"; 253 257 tn = "task-note"; ··· 284 288 srch = "ns nixpkgs"; 285 289 orch = "ns override"; 286 290 nrb = "cd /tmp; sudo nixos-rebuild switch --flake '/home/anish/usr/helm#curve'; cd $OLDPWD"; 287 - nrd = "cd /tmp; NIXPKGS_ALLOW_UNFREE=1 sudo darwin-rebuild switch --flake /Users/anishlakhwara/usr/helm#Anishs-MacBook-Pro --impure; cd $OLDPWD"; 291 + nrd = "cd /tmp; NIXPKGS_ALLOW_UNFREE=1 darwin-rebuild switch --flake /Users/anishlakhwara/usr/helm#Anishs-MacBook-Pro --impure; cd $OLDPWD"; 288 292 nrt = "cd /tmp; sudo nixos-rebuild test --flake '/home/anish/usr/helm#curve'; cd $OLDPWD"; 289 293 ned = "cd /home/anish/usr/helm; vim; cd $OLDPWD"; 290 294 ncd = "cd /home/anish/usr/helm";
home/profiles/desktop/Xresources
+2 -2
home/profiles/desktop/bspwmrc
··· 6 6 # esac 7 7 8 8 export MONITOR=$(xrandr -q | grep primary | cut -d' ' -f1) 9 - export MONITORS=( $(xrandr -q | grep ' connected' | cut -d' ' -f1) ) 9 + export MONITORS=($(xrandr -q | grep ' connected' | cut -d' ' -f1)) 10 10 MONITOR=${MONITOR:-${MONITORS[0]}} 11 11 12 12 # Only have workspaces for primary monitor ··· 26 26 bspc config focused_border_color "#bd93f9" 27 27 bspc config presel_feedback_color "#bd93f9" 28 28 29 - bspc config split_ratio 0.71 29 + bspc config split_ratio 0.71 30 30 31 31 # Extra padding for polybar 32 32 bspc config -m primary top_padding 34
+4 -7
home/profiles/desktop/default.nix
··· 22 22 paper-icon-theme 23 23 papirus-icon-theme 24 24 libsForQt5.qtstyleplugin-kvantum 25 - qt5ct 25 + # qt5ct 26 26 gtk-engine-murrine 27 27 gtk_engines 28 28 maim ··· 30 30 inotify-tools 31 31 offpunk 32 32 termpdfpy 33 - libsForQt5.kontact 34 - thunderbird 33 + # libsForQt5.kontact 34 + # thunderbird 35 35 ]; 36 36 37 37 # GTK4 color scheme? ··· 99 99 ".local/bin/mpv-ify".source = ./bin/mpv-ify; 100 100 ".local/bin/bspswallow".source = ./bin/bspswallow; 101 101 ".config/bspwm/terminals".text = "Kitty"; 102 - ".config/eww/eww.yuck".source = ./eww/eww.yuck; 103 - ".config/eww/eww.scss".source = ./eww/eww.scss; 104 - ".config/eww/widgets.yuck".source = ./eww/widgets.yuck; 105 102 # ".local/bin/hotplug-monitor.sh".source = ./bin/hotplug-monitor.sh; 106 103 }; 107 104 ··· 123 120 124 121 qt = { 125 122 enable = true; 126 - platformTheme = "gtk"; 123 + platformTheme.name = "gtk"; 127 124 style = { name = "qt5ct-style"; }; 128 125 }; 129 126
home/profiles/desktop/polybar/run.sh
+1 -1
home/profiles/email/default.nix
··· 175 175 bind editor ^T complete 176 176 177 177 # Press A to archive 178 - macro index,pager A "<clear-flag>N<save-message>=/Archive" "mark message as Archived" 178 + macro index,pager A "<clear-flag><save-message>=/Archive" "mark message as Archived" 179 179 # Press C to add contact to Khard address book 180 180 macro index,pager C \ 181 181 "<pipe-message>khard add-email<return>" \
+1 -1
home/profiles/firefox/default.nix
··· 21 21 extensions = with pkgs.nur.repos.rycee.firefox-addons; [ 22 22 # Find extensions: https://github.com/nix-community/nur-combined/blob/master/repos/rycee/pkgs/firefox-addons/generated-firefox-addons.nix 23 23 ublock-origin 24 - wallabagger 24 + # wallabagger 25 25 # tree-style-tab 26 26 tridactyl 27 27 promnesia
+1 -4
home/profiles/git/default.nix
··· 12 12 userName = "Anish Lakhwara"; 13 13 userEmail = "anish+git@lakhwara.com"; 14 14 delta.enable = true; 15 - signing = { 16 - signByDefault = true; 17 - key = "7FC5DF072EF7B716"; 18 - }; 15 + # TODO enable signing 19 16 20 17 ignores = [ 21 18 "*~"
+4
home/profiles/nvim/config/after/syntax/vimwiki.vim
··· 1 + " match with %update 2 + syntax match VimwikiPlaceholder /^\s*%update\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite 3 + " match with %link 4 + syntax match VimwikiPlaceholder /^\s*%link\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite
+11
home/profiles/nvim/config/fnl/conf/formatting.fnl
··· 1 + (import-macros {: do-req } :lib/macros) 2 + 3 + (do-req :conform :setup 4 + {:formatters_by_ft {:lua ["stylua"] 5 + :nix ["nixfmt"] 6 + ; :go ["goimports" "gofmt"] ; Go handled in special case 7 + :terraform ["terraform_fmt"] 8 + :sh ["shfmt"] 9 + :bazel ["buildifier"]} 10 + :format_on_save {:lsp_format "fallback" 11 + :timeout_ms 500}})
+51
home/profiles/nvim/config/fnl/conf/init.fnl
··· 1 + (local nvim (require :lib/nvim)) 2 + 3 + (nvim.g :mapleader " ") 4 + 5 + ; (nvim.opt :runtimepath (.. vim.opt.runtimepath "/home/anish/.config/nvim/,")) 6 + (nvim.opt :tabstop 2) 7 + (nvim.opt :showmatch true) 8 + (nvim.opt :shiftwidth 2) 9 + (nvim.opt :autoindent true) 10 + (nvim.opt :undofile true) 11 + (nvim.opt :signcolumn "auto:4") 12 + (nvim.opt :title true) 13 + (nvim.opt :number true) 14 + ; (nvim.opt :nocompatible) 15 + (nvim.opt :relativenumber true) 16 + (nvim.opt :showtabline 2) 17 + (nvim.opt :expandtab true) 18 + (nvim.opt :autowriteall true) 19 + (nvim.opt :cmdheight 2) 20 + (nvim.opt :spelllang "en_gb") 21 + (nvim.opt :ignorecase true) 22 + (nvim.opt :smartcase true) 23 + (nvim.opt :incsearch true) 24 + (nvim.opt :updatetime 300) ; Diagnostics response time 25 + (nvim.opt :signcolumn "yes") 26 + (nvim.opt :cursorline true) 27 + 28 + (nvim.opt :lisp true) ; include - in word to move better in snake-case) 29 + (nvim.g :sexp_filetypes "clojure,scheme,lisp,janet,fennel,yuck") ; include the lisps I use 30 + 31 + (nvim.opt :termguicolors) 32 + (nvim.colorscheme "ayu-mirage") 33 + 34 + (require :conf.plugins) 35 + (require :conf.mappings) 36 + (require :conf.lsp) 37 + (require :conf.plugins.cmp) 38 + (require :conf.formatting) 39 + ; (require :conf.kitaab) 40 + 41 + ; Spelling 42 + (vim.api.nvim_create_autocmd ["BufRead" "BufNewFile"] 43 + {:pattern ["*.wiki" "*.txt" "*.md" "*.tex"] 44 + :command "setlocal spell"}) 45 + (vim.api.nvim_create_autocmd ["FileType"] 46 + {:pattern ["mail"] 47 + :command "setlocal spell"}) 48 + 49 + ; Svelte 50 + (vim.api.nvim_create_autocmd ["BufNewFile" "BufRead"] {:pattern ["*.svelte"] 51 + :command "setf svelte"})
+99
home/profiles/nvim/config/fnl/conf/lsp.fnl
··· 1 + (import-macros {: do-req } :lib/macros) 2 + (local lspkind (require :lspkind)) 3 + (local lspconfig (require :lspconfig)) 4 + ; (local lspsaga (require :lspsaga)) 5 + (local cmp (require :cmp)) 6 + (local nvim (require :lib/nvim)) 7 + ; (local lspfuzzy (require :lspfuzzy)) ; Not available on Nix 8 + ; (local sg (require :sg)) 9 + ; (local lsputil (require :lspconfig/util)) 10 + 11 + ;(lspsaga.setup {:border_style "rounded" 12 + ; :code_action_icon "" 13 + ; :code_action_num_shortcut false 14 + ; :ui {:code_action ""} 15 + ; :show_outline {:enable false})) 16 + ; 17 + ;(nvim.opt :winbar nil) 18 + 19 + (local signs {:Error "๎ช‡ " 20 + :Warn "๏ฑ " 21 + :Hint "๏™ " 22 + :Info "๏‘‰ "}) 23 + (each [t icon (pairs signs)] 24 + (let [hl (.. "DiagnosticSign" t)] 25 + (vim.fn.sign_define hl {:text icon 26 + :texthl hl 27 + :numhl hl}))) 28 + 29 + (tset vim.lsp.handlers 30 + :textDocument/hover 31 + (vim.lsp.with vim.lsp.handlers.hover 32 + {:focusable false :border "rounded"})) 33 + (tset vim.lsp.handlers 34 + :textDocument/signatureHelp 35 + (vim.lsp.with vim.lsp.handlers.signature_help 36 + {:focusable false :border "rounded"})) 37 + 38 + (local capabilities (let [cmp_nvim_lsp (require :cmp_nvim_lsp)] 39 + (cmp_nvim_lsp.default_capabilities))) 40 + 41 + (local formatting-augroup (nvim.augroup :LspFormatting)) 42 + 43 + (fn goimports [wait-ms] 44 + (let [params (vim.lsp.util.make_range_params) 45 + result (do 46 + (tset params :context {:only [:source.organizeImports]}) 47 + (vim.lsp.buf_request_sync 0 :textDocument/codeAction params wait-ms))] 48 + (each [_ res (pairs (or result {}))] 49 + (each [_ r (pairs (or res.result {}))] 50 + (if r.edit 51 + (vim.lsp.util.apply_workspace_edit r.edit "utf-16") 52 + (vim.lsp.buf.execute_command r.command)))) 53 + (vim.lsp.buf.format))) 54 + 55 + (fn on-attach [client bufnr] 56 + (let [filetype (vim.api.nvim_buf_get_option 0 "filetype")] 57 + (if (client.supports_method "textDocument/formatting") 58 + (do (nvim.autocmd "BufWritePre" 59 + {:group formatting-augroup 60 + :buffer bufnr 61 + :callback (fn [_] (if (= filetype "go") 62 + (goimports 2000) 63 + (vim.lsp.buf.format {:bufnr bufnr})))}))))) 64 + 65 + (lspconfig.gopls.setup 66 + {:capabilities capabilities 67 + :codelens {:generate true :gc_details true} 68 + :semanticTokens true 69 + :flags {:debounce_text_changes 200} 70 + :analyses {:unusedparams true 71 + :unusedvariables true 72 + :unusedwrite true 73 + :nilness true 74 + :unusedwrite true 75 + :useany true} 76 + :completeUnimported true 77 + :staticcheck true 78 + :experimentalPostfixCompletions true 79 + :hints {:constantValues true 80 + :functionTypeParameters true 81 + :assignVariablesTypes true 82 + :compositeLiteralTypes true 83 + :compositeLiteralFields true 84 + :parameterNames true 85 + :rangeVariableTypes true} 86 + :on_attach on-attach}) 87 + 88 + (local lsps [:nil_ls :terraform_lsp :fennel_ls :tsserver :starbin]) 89 + (each [index lsp (ipairs lsps)] 90 + ((. (. lspconfig lsp) :setup) {})) 91 + 92 + ; null-ls 93 + (let [null-ls (require :null-ls)] 94 + (null-ls.setup {:sources [; TODO fix these 95 + ;null-ls.builtins.diagnostics.shellcheck 96 + null-ls.builtins.diagnostics.commitlint]})) 97 + ;null-ls.builtins.diagnostics.jsonlint]})) 98 + ;(null-ls.builtins.diagnostics.proselint.with {:filetypes ["vimwiki" "mail"]})]})) 99 +
+140
home/profiles/nvim/config/fnl/conf/mappings.fnl
··· 1 + (local nvim (require :lib/nvim)) 2 + (import-macros {: do-req } :lib/macros) 3 + 4 + (local wk (require :which-key)) 5 + 6 + ;; Convenient way to indent stuff in visual mode 7 + (nvim.keymap [:v] "<" "<gv" {:noremap true}) 8 + (nvim.keymap [:v] ">" ">gv" {:noremap true}) 9 + (nvim.keymap [:n] "<space>" "<NOP>" {:noremap true :silent true}) 10 + ;; Convenient way to move stuff in visual mode 11 + (nvim.keymap [:v] "J" ":m '>+1<CR>gv=gv" {:noremap true}) 12 + (nvim.keymap [:v] "K" ":m '>-2<CR>gv=gv" {:noremap true}) 13 + ;; Convientent screen shifting 14 + (nvim.keymap [:n] "n" "nzzzv" {:noremap true}) 15 + (nvim.keymap [:n] "N" "Nzzzv" {:noremap true}) 16 + (nvim.keymap [:n] "J" "mzJ'z" {:noremap true}) 17 + ; Fix Y 18 + (nvim.keymap [:n] "Y" "y$") 19 + ; Unmap Q 20 + (nvim.keymap [] "Q" "<Nop>") 21 + ; TODO 22 + ; ESC clears search 23 + ; (nvim.keymap [:n] "<ESC>" "") 24 + 25 + ; FTerm 26 + (vim.api.nvim_create_user_command "FTermToggle" (fn [_] 27 + ((-> (require :FTerm) 28 + (. :toggle)))) 29 + {:bang true}) 30 + (nvim.keymap [:t] "<TAB>" "<cmd>:FTermToggle<CR>") 31 + (nvim.keymap [:n] "<TAB>" "<cmd>:FTermToggle<CR>" {:noremap true}) 32 + 33 + ; Buffer Movement 34 + (nvim.keymap [:n] "gT" ":BufferPrevious<CR>" {:silent true :noremap true}) 35 + (nvim.keymap [:n] "gt" ":BufferNext<CR>" {:silent true :noremap true}) 36 + (nvim.keymap [:n] "gj" ":BufferPick<CR>" {:silent true :noremap true}) 37 + (nvim.keymap [:n] "gb" ":Telescope buffers<CR>" {:silent true :noremap true}) 38 + (nvim.keymap [:n] "gq" ":BufferClose<CR>" {:silent true :noremap true}) 39 + 40 + ; Flash 41 + (vim.api.nvim_create_user_command "Flash" (fn [_] (do-req :flash :jump)) {}) 42 + (vim.api.nvim_create_user_command "FlashTreesitter" (fn [] (do-req :flash :treesitter)) {}) 43 + (nvim.keymap [:n] "f" "<cmd>Flash<CR>") 44 + (nvim.keymap [:n] "s" "<cmd>FlashTreesitter<CR>") 45 + 46 + (local 47 + normal-map-leader 48 + {"t" [":Neotree toggle<CR>" 49 + "Toggle neo-tree"] 50 + "w" ["<cmd>:w<cr>" 51 + "Write file"] 52 + "q" ["<cmd>:q<cr>" 53 + "Quit"] 54 + "r" [":RainbowParenthesesToggleAll<CR>" 55 + "Toggle Rainbow Parens"] 56 + "u" [":UndotreeToggle<CR>" 57 + "Toggle Undo Tree"] 58 + ; Telescope 59 + "f" {:name "Files" 60 + :f ["<cmd>Telescope find_files<cr>" 61 + "Find Files (in Telescope)"] 62 + :g ["<cmd>Telescope live_grep<cr>" 63 + "Find Grep (in Telescope)"] 64 + :b ["<cmd>Telescope buffers<cr>" 65 + "Find Buffers"] 66 + :h ["<cmd>Telescope help_tags<cr>" 67 + "Find Help"] 68 + :t ["<cmd>Telescope tags<cr>" 69 + "Find Tags"] 70 + :r ["<cmd>Telescope oldfiles<CR>" 71 + "Recent files"]} 72 + ; Git 73 + "g" {:name "Git" 74 + "s" [":G<CR>" 75 + "Git Status"] 76 + "f" [":G fetch --all<cr>" 77 + "Git Fetch"] 78 + "b" [":GBranches<cr>" 79 + "Git Branch"] 80 + "p" [":Git! push<cr>" 81 + "Git Push"] 82 + "d" [":GDiff<cr>" 83 + "Git Diff"] 84 + "h" ["" 85 + "Commit Hunk under Cursor"]} 86 + ; For handling merges 87 + ; nmap <leader>gl :diffget //3<CR> 88 + ; nmap <leader>gh :diffget //2<CR> 89 + ; nnoremap <leader>gc :G commit -v -q %:p<CR> 90 + ; Buffers 91 + "b" {:name "Buffer" 92 + :b ["<cmd>:Telescope buffers<CR>" 93 + "Buffer List"] 94 + :q ["<cmd>:BufferClose<CR>" 95 + "Buffer Quit"] 96 + :n ["<cmd>:BufferNext<CR>" 97 + "Buffer Next"] 98 + :N ["<cmd>:tabp<CR>" 99 + "Buffer Previous"] 100 + :p ["<cmd>:tabp<CR>" 101 + "Buffer Previous"]} 102 + ; Search 103 + "s" {:name "Search" 104 + :b ["<cmd>Telescope current_buffer_fuzzy_find<CR>" 105 + "Search in current buffer"] 106 + :s ["<cmd>Telescope live_grep<CR>" 107 + "Search in project"] 108 + :t ["<cmd>TodoTelescope<CR>" 109 + "Search TODOs in project"] 110 + :c ["<cmd>let @/ = \"\"<CR>:echo 'Search highlight cleared'<CR>" 111 + "Clear search"] 112 + :g ["<cmd>Telescope live_grep<cr>" 113 + "Find Grep (in Telescope)"]} 114 + ; Code 115 + "c" {:name "Code" 116 + :d [":lua vim.lsp.buf.definition()<CR>" 117 + "Go to Definition"] 118 + :i [":lua require('telescope.builtin').lsp_implementation()<CR>" 119 + "Implementation"] 120 + :s [":lua vim.lsp.buf.signature_help()<CR>" 121 + "Signature Help"] 122 + :r [":Lspsaga rename<CR>" 123 + "Rename Symbol"] 124 + :h [":Lspsaga hover_doc<CR>" 125 + "Hover doc"] 126 + :o ["<cmd>AerialToggle!<CR>" 127 + "Outline"] 128 + :t [":LspDiagnostics 0" 129 + "Find Errors in Buffer"]} 130 + ; Kitaab 131 + "z" {:name "Kitaab" 132 + :n [":ZettelNew<CR>" 133 + "Zettel New"]} 134 + "v" {:name "Tabs" 135 + :v [":vnew<CR>" 136 + "Vertical Split"] 137 + :h [":new<CR>" 138 + "Horizontal Split"]}}) 139 + 140 + (wk.register normal-map-leader {:prefix "<leader>"})
+30
home/profiles/nvim/config/fnl/conf/music.fnl
··· 1 + (local nvim (require :lib/nvim)) 2 + 3 + (nvim.g :tidal_target "terminal") 4 + (nvim.g :scnvim_snippet_format "luasnip") 5 + 6 + ; -- supercollider 7 + ; local scnvim = require 'scnvim' 8 + ; local map = scnvim.map 9 + ; local map_expr = scnvim.map_expr 10 + ; scnvim.setup { 11 + ; keymaps = { 12 + ; ['<localleader>e'] = map('editor.send_line', {'i', 'n'}), 13 + ; ['<localleader>s'] = map_expr('CmdPeriod.run', {'i', 'n'}), 14 + ; ['<localleader>t'] = { 15 + ; map('editor.send_block', {'i', 'n'}), 16 + ; map('editor.send_selection', 'x'), 17 + ; }, 18 + ; ['<CR>'] = map('postwin.toggle'), 19 + ; ['<M-CR>'] = map('postwin.toggle', 'i'), 20 + ; ['<M-L>'] = map('postwin.clear', {'n', 'i'}), 21 + ; ['<C-k>'] = map('signature.show', {'n', 'i'}), 22 + ; ['<F12>'] = map('sclang.hard_stop', {'n', 'x', 'i'}), 23 + ; ['<leader>st'] = map('sclang.start'), 24 + ; ['<leader>sk'] = map('sclang.recompile'), 25 + ; ['<F1>'] = map_expr('s.boot'), 26 + ; ['<F2>'] = map_expr('s.meter'), 27 + ; } 28 + ; } 29 + ; -- You gotta run :SCNvimGenerateAssets for this first 30 + ; -- require("luasnip").add_snippets("supercollider", require("scnvim/utils").get_snippets())
+35
home/profiles/nvim/config/fnl/conf/plugins/cmp.fnl
··· 1 + (local cmp (require :cmp)) 2 + 3 + (fn has-words-before [] 4 + (let [(line col) (unpack (vim.api.nvim_win_get_cursor 0)) 5 + cur-line (. (vim.api.nvim_buf_get_lines 0 6 + (- line 1) 7 + line 8 + true 9 + 1))] 10 + (and (not= col 0) 11 + (= (: (: cur-line :sub col col) :match "%s") 12 + nil)))) 13 + 14 + (let [lspkind (require :lspkind)] 15 + (cmp.setup {:formatting {:format (lspkind.cmp_format {:mode "symbol_text" 16 + :maxwidth 50}) 17 + :show_labelDetails true} 18 + :snippet {:expand (fn [args] (vim.snippet.expand args.body))} 19 + :sources [{:name "buffer"} {:name "nvim_lsp"} 20 + {:name "look"} {:name "path"} 21 + {:name "calc"} {:name "spell"} 22 + {:name "tags"}] 23 + :mapping {"<C-d>" (cmp.mapping.scroll_docs -4) 24 + "<C-u>" (cmp.mapping.scroll_docs 4) 25 + "<C-g>" (cmp.mapping.close) 26 + "<CR>" (cmp.mapping.confirm {:select true}) 27 + "<Tab>" (cmp.mapping (fn [fallback] 28 + (if (cmp.visible) (cmp.select_next_item) 29 + (has-words-before) (cmp.complete) 30 + (fallback))) 31 + [:i :s]) 32 + "<S-Tab>" (cmp.mapping (fn [fallback] 33 + (if (cmp.visible) (cmp.select_prev_item) 34 + (fallback))) 35 + [:i :s])}}))
+38
home/profiles/nvim/config/fnl/conf/plugins/kitaab.fnl
··· 1 + ; Kitaab is why I'm so tied to vim. 2 + ; If only I could find a nice notes editor... 3 + 4 + (local nvim (require :lib/nvim)) 5 + 6 + (import-macros {: do-req } :lib/macros) 7 + 8 + (nvim.g :vimwiki_list [{:path "~/kitaab/vimwiki" 9 + :auto_tags 1 10 + :auto_diary_index 1 11 + :auto_generate_links 0 12 + :nested_syntaxes {:python "python" 13 + :c++ "cpp" 14 + :nix "nix" 15 + :bash "sh"}}]) 16 + (nvim.g :zettel_format "%y%m%d-%H%M") 17 + 18 + ; Custom functions 19 + (fn update_date [] 20 + (var written false) 21 + (let [time (os.date "%Y-%m-%d %H:%M") 22 + message (.. "%update " time) 23 + lines (vim.api.nvim_buf_get_lines 0 0 4 false)] 24 + (each [index line (ipairs lines)] 25 + (if (and (= (length line) 0) (not written)) 26 + (do 27 + (vim.api.nvim_buf_set_lines 0 (- index 1) index false [message ""]) 28 + (set written true))) 29 + (if (and (= index 4) (not written)) 30 + (vim.api.nvim_buf_set_lines 0 3 index false [message]))))) 31 + 32 + ; Custom function for inserting links through telescope grep_search 33 + ; Visual mode too! 34 + 35 + (vim.api.nvim_create_autocmd "BufWritePre" {:pattern ["*.wiki"] 36 + :callback update_date}) 37 + 38 + (do-req :hologram :setup {:auto_display false})
+47
home/profiles/nvim/config/fnl/conf/plugins.fnl
··· 1 + (local nvim (require :lib/nvim)) 2 + (local navic (require :nvim-navic)) 3 + 4 + (import-macros {: do-req } :lib/macros) 5 + 6 + (let [lualine (require :lualine)] 7 + (lualine.setup {:options {:theme "ayu"} 8 + :sections {; :lualine_c [:filename (fn [] 9 + ; (let [lspsaga (require :lspsaga.symbol.winbar)] 10 + ; (lspsaga.get_bar)) 11 + :lualine_y [(fn [] 12 + (var msg "No Active LSP") 13 + (let [buf_ft (vim.api.nvim_buf_get_option 0 "filetype") 14 + clients (vim.lsp.get_active_clients)] 15 + (each [_ client (ipairs clients)] 16 + (let [filetypes (. client :config :filetypes)] 17 + (if (and filetypes (vim.fn.index filetypes buf_ft)) (set msg client.name)))) 18 + msg))] 19 + :lualine_x [:filetype]}})) 20 + 21 + (require :neo-tree) 22 + (do-req :gitsigns :setup) 23 + (do-req :marks :setup) 24 + ; (do-req :mini.pairs :setup) 25 + (do-req :mini.diff :setup) 26 + (do-req :mini.ai :setup) 27 + (do-req :mini.surround :setup {:mappings {:add "ys" 28 + :delete "ds" 29 + :replace "cs"}}) 30 + (do-req :todo-comments :setup) 31 + (do-req :ibl :setup {:scope {:exclude {:language ["fennel" "clojure" "janet"]}}}) 32 + 33 + (do-req :nvim-treesitter.configs :setup {:highlight {:enable true} 34 + :textobjects {:enable true} 35 + :indent {:enable true}}) 36 + (do-req :treesitter-context :setup {:max_lines 5}) 37 + 38 + (do-req :auto-session :setup {:log_level "info" 39 + :auto_session_suppress_dirs ["~/"]}) 40 + (nvim.opt :sessionoptions "blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions") 41 + 42 + (do-req :aerial :setup {}) ;{:on_attach (fn [bufnr] 43 + ; (do 44 + ; (vim.keymap.set "n" "{" "<cmd>AerialPrev<CR>" { :buffer bufnr}) 45 + ; (vim.keymap.set "n" "}" "<cmd>AerialNext<CR>" { :buffer bufnr})) 46 + 47 + (do-req :zk :setup)
+8
home/profiles/nvim/config/fnl/lib/macros.fnl
··· 1 + ;; fennel-ls: macro-file 2 + 3 + (fn do-req [mod key ...] 4 + `(let [name# (require ,mod) 5 + fun# (. name# ,key)] 6 + (fun# ,...))) 7 + 8 + {: do-req}
+37
home/profiles/nvim/config/fnl/lib/nvim.fnl
··· 1 + (fn autocmd [events opts] 2 + "Create autocommand" 3 + (vim.api.nvim_create_autocmd events opts)) 4 + 5 + (fn clear-autocmds [opts] 6 + "Clear autocommands" 7 + (vim.api.nvim_clear_autocmds opts)) 8 + 9 + (fn augroup [name ?opts] 10 + "Create autocommand group" 11 + (vim.api.nvim_create_augroup name (or ?opts {}))) 12 + 13 + (fn keymap [mode lhs rhs ?opts] 14 + "Sets a global mapping for the given mode. 15 + Ex: `(keymap [:n :i] ...)`" 16 + (let [string-mode (table.concat mode)] 17 + (vim.api.nvim_set_keymap string-mode lhs rhs (or ?opts {})))) 18 + 19 + (fn opt [key value] 20 + "Set a vim option" 21 + (tset vim.opt key value)) 22 + 23 + (fn g [key value] 24 + "Set a vim global" 25 + (tset vim.g key value)) 26 + 27 + (fn colorscheme [name] 28 + "Set the current colorscheme" 29 + (vim.cmd (.. "colorscheme " name))) 30 + 31 + {: autocmd 32 + : clear-autocmds 33 + : augroup 34 + : keymap 35 + : opt 36 + : g 37 + : colorscheme}
+26
home/profiles/nvim/config/init.lua
··· 1 + if pcall(require, "hotpot") then 2 + -- Setup hotpot.nvim 3 + require("hotpot").setup({ 4 + provide_require_fennel = true, 5 + -- show fennel compiler results in when editing fennel files 6 + enable_hotpot_diagnostics = true, 7 + compiler = { 8 + -- options passed to fennel.compile for modules, defaults to {} 9 + modules = { 10 + -- not default but recommended, align lua lines with fnl source 11 + -- for more debuggable errors, but less readable lua. 12 + correlate = true 13 + }, 14 + macros = { 15 + -- allow macros to access vim global, needed for nyoom modules 16 + env = "_COMPILER", 17 + compilerEnv = _G, 18 + allowGlobals = true, 19 + }, 20 + } 21 + }) 22 + -- Import neovim configuration 23 + require("conf") 24 + else 25 + print("Unable to require hotpot") 26 + end
+132 -4
home/profiles/nvim/default.nix
··· 1 1 { pkgs, ... }: 2 + # TODO Need to find a solution to have my own packages? 3 + # Or at least update to recent versions of the packages I do use in nixpkgs 2 4 { 3 5 home.sessionVariables.EDITOR = "nvim"; 4 6 home.shellAliases = { 7 + vim = "nvim"; 5 8 k = "cd ~/kitaab/vimwiki; vim -c :VimwikiIndex; cd $OLDPWD"; 9 + # kitaab zettel 10 + kz = "cd ~/kitaab/vimwiki; vim -c :VimwikiIndex -c :ZettelNew; cd $OLDPWD"; 11 + # kitaab get by tagged 12 + kt = 13 + "cd /home/anish/kitaab/vimwiki; eza *_index.wiki | fzf --preview 'bat --style=numbers --color=always --terminal-width -1 ./{}';cd $OLDPWD"; 6 14 }; 7 15 16 + home.file.".config/nvim".source = ./config; 17 + 8 18 programs.neovim = { 9 19 enable = true; 10 - package = pkgs.unstable.neovim-unwrapped; 11 20 extraPackages = with pkgs; [ 12 - # used for Cody 13 - nodejs 21 + # used to compile tree-sitter grammar 22 + # python-with-my-packages 23 + # nodejs 24 + # clojure-lsp 25 + # clojure 26 + # clj-kondo 27 + terraform-lsp 28 + nil 29 + gopls 30 + gcc 31 + shellcheck 32 + shfmt 33 + proselint 34 + nixfmt 35 + # statix 36 + # nodePackages.typescript 37 + # nodePackages.typescript-language-server 38 + # luajitPackages.lua-lsp 39 + fennel-ls 14 40 ]; 15 41 16 - vimAlias = true; 42 + plugins = with pkgs.vimPlugins; 43 + [ 44 + #hotpot 45 + hotpot-nvim 46 + nvim-navic 47 + # ui 48 + lualine-nvim 49 + neo-tree-nvim 50 + fzf-vim 51 + vim-devicons 52 + nvim-web-devicons 53 + telescope-nvim 54 + plenary-nvim 55 + FTerm-nvim 56 + barbar-nvim 57 + neovim-ayu 58 + rainbow_parentheses-vim 59 + auto-session 60 + which-key-nvim 61 + aerial-nvim 62 + todo-comments-nvim 63 + indent-blankline-nvim 64 + nvim-parinfer 65 + 66 + # Tree sitter 67 + (nvim-treesitter.withPlugins (p: [ 68 + p.nix 69 + p.clojure 70 + p.fennel 71 + p.lua 72 + p.html 73 + p.css 74 + p.regex 75 + p.supercollider 76 + p.beancount 77 + p.markdown_inline 78 + p.markdown 79 + p.glsl 80 + p.yaml 81 + p.toml 82 + p.dockerfile 83 + p.json 84 + p.go 85 + p.svelte 86 + p.javascript 87 + p.janet-simple 88 + p.starlark 89 + ])) 90 + nvim-treesitter-context 91 + nvim-treesitter-textobjects 92 + 93 + # TODO 94 + undotree 95 + marks-nvim 96 + 97 + # language 98 + vim-nix 99 + emmet-vim 100 + csv-vim 101 + direnv-vim 102 + vim-svelte 103 + # conjure 104 + 105 + # kitaab stuff 106 + vimwiki 107 + vim-zettel 108 + hologram-nvim 109 + zk-nvim 110 + 111 + # lsp stuff 112 + nvim-lspconfig 113 + nvim-cmp 114 + cmp-nvim-lsp 115 + cmp-treesitter 116 + # cmp-conjure 117 + cmp-buffer 118 + cmp-path 119 + cmp-spell 120 + lspkind-nvim 121 + conform-nvim 122 + none-ls-nvim 123 + mini-nvim 124 + # nvim-lspfuzzy 125 + 126 + # git stuff 127 + vim-fugitive 128 + gitsigns-nvim 129 + fzf-checkout-vim 130 + 131 + # Clojure stuff 132 + # conjure 133 + vim-sexp 134 + vim-sexp-mappings-for-regular-people 135 + fennel-vim 136 + 137 + # nvim-luapad 138 + # scnvim 139 + flash-nvim 140 + vim-beancount 141 + ]; # ++ [ pkgs.vimPlugins.vim-tidal ]; 142 + # withPython3 = true; 143 + # extraPython3Packages = pkgs: with pkgs; [ tasklib six ]; 144 + # vimAlias = true; 17 145 }; 18 146 } 19 147
home/profiles/task/bin/set-backlog.sh
home/profiles/task/bin/set-focus.sh
+5
home/profiles/task/taskrc
··· 82 82 report.every.labels=ID,Active,Deps,P,Project,Tag,Recur,S,Due,Until,Description 83 83 report.every.columns=id,start.age,depends,priority,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description 84 84 85 + report.poms.filter=(status:pending -idea -backlog -BLOCKED) 86 + report.poms.labels=UUID,ID,Project,Tag,Description 87 + report.poms.columns=uuid,id,project,tags,description 88 + report.poms.sort=start+,urgency+ 89 + 85 90 # Urgency 86 91 urgency.user.project.wait.coefficient=-10.0 87 92 urgency.user.project.craft.coefficient=1.9
+1 -1
hosts/box/configuration.nix
··· 91 91 sound.enable = false; 92 92 93 93 programs.gnupg.agent.enable = true; 94 - programs.gnupg.agent.pinentryFlavor = "curses"; 94 + programs.gnupg.agent.pinentryPackage = pkgs.pinentry-curses; 95 95 programs.gnupg.agent.enableSSHSupport = true; 96 96 97 97 # This value determines the NixOS release with which your system is to be
+7 -5
hosts/box/default.nix
··· 7 7 ../profiles/taskd 8 8 ../profiles/shaarli 9 9 ../profiles/dns 10 - ../profiles/monitoring 10 + # ../profiles/monitoring 11 11 ../profiles/nfs 12 12 ../profiles/gonic 13 - ../profiles/headphones 13 + # ../profiles/headphones # TODO broken on 23.11, see: https://github.com/rembo10/headphones/issues/3320 14 14 ../profiles/radicale 15 - ../profiles/seafile 15 + # ../profiles/seafile # waiting for https://github.com/NixOS/nixpkgs/pull/249523 to be merged 16 16 ../profiles/syncthing 17 17 ../profiles/dhyan 18 18 ../profiles/calibre ··· 22 22 ../profiles/grasp 23 23 # ../profiles/archivebox 24 24 # ../profiles/woodpecker-agent 25 - ../profiles/jellyfin 25 + # ../profiles/jellyfin 26 26 ../profiles/ulogger-server 27 - ../profiles/photoprism 27 + ../profiles/photoprism # Replace with immich 28 + ../profiles/gpodder 29 + #../profiles/postgres_upgrade_script 28 30 ]; 29 31 30 32 # Backups
+1 -1
hosts/curve/configuration.nix
··· 36 36 37 37 sound.enable = true; 38 38 39 - services.xserver.libinput.enable = true; 39 + services.libinput.enable = true; 40 40 }
+29 -12
hosts/curve/default.nix
··· 1 - { self, pkgs, ... }: 2 - { 1 + { self, pkgs, ... }: { 3 2 imports = [ 4 3 ./configuration.nix 5 4 ../users/anish ··· 17 16 # ../profiles/mount-mossnet 18 17 ]; 19 18 19 + # temporarily allow ssh access for work, to be able to do deploy new services 20 + services.openssh = { 21 + enable = true; 22 + settings.PasswordAuthentication = false; 23 + settings.PermitRootLogin = "no"; 24 + }; 25 + 20 26 # import profiling tools 21 27 programs.systemtap.enable = true; 22 28 29 + virtualisation.docker.enable = true; 30 + virtualisation.docker.storageDriver = "btrfs"; 31 + environment.systemPackages = with pkgs; [ docker-compose ]; 32 + 23 33 # Speed up boot by removing dependency on network 24 34 systemd = { 25 - targets.network-online.wantedBy = pkgs.lib.mkForce [ ]; # Normally ["multi-user.target"] 26 - services.NetworkManager-wait-online.wantedBy = pkgs.lib.mkForce [ ]; # Normally ["network-online.target"] 35 + targets.network-online.wantedBy = 36 + pkgs.lib.mkForce [ ]; # Normally ["multi-user.target"] 37 + services.NetworkManager-wait-online.wantedBy = 38 + pkgs.lib.mkForce [ ]; # Normally ["network-online.target"] 27 39 }; 28 40 29 41 programs.gnupg.agent.enable = true; 30 - programs.gnupg.agent.pinentryFlavor = "gnome3"; 42 + programs.gnupg.agent.pinentryPackage = pkgs.pinentry-gnome3; 31 43 32 44 fileSystems."/mnt/ftp" = { 33 45 device = "192.168.1.240:/home/ftp"; ··· 58 70 59 71 # lazy enable of ports necessary for KDE connect which is installed via cli home profile (for some reason?) 60 72 networking.firewall = { 61 - allowedTCPPortRanges = [{ from = 1714; to = 1764; }]; 62 - allowedUDPPortRanges = [{ from = 1714; to = 1764; }]; 73 + allowedTCPPorts = [ 22 ]; # allow ssh 74 + allowedTCPPortRanges = [{ 75 + from = 1714; 76 + to = 1764; 77 + }]; 78 + allowedUDPPortRanges = [{ 79 + from = 1714; 80 + to = 1764; 81 + }]; 63 82 }; 64 83 65 84 age.secrets.curve-wg.file = "${self}/secrets/curve-wg.age"; ··· 75 94 mossnet.backup = { 76 95 enable = true; 77 96 name = "curve"; 78 - paths = [ 79 - "/home/anish/usr" 80 - "/home/anish/.ssh" 81 - ]; 97 + paths = [ "/home/anish/usr" "/home/anish/.ssh" ]; 82 98 }; 83 99 84 100 # enable adb ··· 87 103 #virtualisation.docker.enable = true; 88 104 boot.blacklistedKernelModules = [ "qcserial" ]; 89 105 # Used for packer Capsul 90 - users.users.anish.extraGroups = [ "adbusers" "wheel" "plugdev" "libvertd" ]; 106 + users.users.anish.extraGroups = 107 + [ "adbusers" "wheel" "plugdev" "libvertd" "docker" ]; 91 108 virtualisation.libvirtd.enable = true; 92 109 hardware.keyboard.zsa.enable = true; 93 110 services.udev.extraRules = ''
+12 -16
hosts/curve/hardware-configuration.nix
··· 5 5 6 6 { 7 7 imports = 8 - [ 9 - (modulesPath + "/installer/scan/not-detected.nix") 8 + [ (modulesPath + "/installer/scan/not-detected.nix") 10 9 ]; 11 10 12 - boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" "rtsx_pci_sdmmc" ]; 11 + boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; 13 12 boot.initrd.kernelModules = [ "dm-snapshot" ]; 14 13 boot.kernelModules = [ "kvm-intel" ]; 15 14 boot.extraModulePackages = [ ]; 16 15 17 - fileSystems."/boot" = 18 - { 19 - device = "/dev/disk/by-uuid/2C41-3DAA"; 20 - fsType = "vfat"; 21 - }; 22 - 23 16 fileSystems."/" = 24 - { 25 - device = "/dev/disk/by-uuid/a4ae2855-10b9-49f3-adb0-acd82b74eeb9"; 17 + { device = "/dev/disk/by-uuid/e1268753-4f18-4e6f-8edb-d4724ad8eb4a"; 26 18 fsType = "btrfs"; 27 19 options = [ "subvol=root" ]; 28 20 }; 29 21 30 22 fileSystems."/home" = 31 - { 32 - device = "/dev/disk/by-uuid/a4ae2855-10b9-49f3-adb0-acd82b74eeb9"; 23 + { device = "/dev/disk/by-uuid/e1268753-4f18-4e6f-8edb-d4724ad8eb4a"; 33 24 fsType = "btrfs"; 34 25 options = [ "subvol=home" ]; 35 26 }; 36 27 28 + fileSystems."/boot" = 29 + { device = "/dev/disk/by-uuid/8244-A184"; 30 + fsType = "vfat"; 31 + }; 32 + 37 33 swapDevices = 38 - [{ device = "/dev/disk/by-uuid/23658926-6ffa-42dc-8915-a6479c385e0b"; }]; 34 + [ { device = "/dev/disk/by-uuid/e220fea6-cf3b-4687-bfe1-9cf6d3ba57f7"; } 35 + ]; 39 36 40 37 # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 41 38 # (the default) this is the recommended approach. When using systemd-networkd it's ··· 46 43 # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true; 47 44 48 45 nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 49 - powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; 50 - # hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 46 + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 51 47 }
+3 -4
hosts/darwin/default.nix
··· 44 44 }; 45 45 }; 46 46 47 - system.primaryUser = "anishlakhwara"; 48 47 # Auto upgrade nix package and the daemon service. 48 + services.nix-daemon.enable = true; 49 49 nixpkgs.hostPlatform = "aarch64-darwin"; 50 50 programs.zsh.enable = true; 51 51 ··· 55 55 settings.trusted-users = [ "@admin" "anishlakhwara" ]; 56 56 57 57 gc = { 58 + user = "root"; 58 59 automatic = true; 59 60 interval = { Weekday = 0; Hour = 2; Minute = 0; }; 60 61 options = "--delete-older-than 30d"; ··· 84 85 siji 85 86 font-awesome 86 87 proggyfonts 87 - nerd-fonts.fira-code 88 - nerd-fonts.droid-sans-mono 89 - nerd-fonts.iosevka 88 + (nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "Iosevka" ]; }) 90 89 ]; 91 90 92 91 system = {
+120
hosts/deck/configuration.nix
··· 1 + # Edit this configuration file to define what should be installed on 2 + # your system. Help is available in the configuration.nix(5) man page 3 + # and in the NixOS manual (accessible by running โ€˜nixos-helpโ€™). 4 + 5 + { config, pkgs, ... }: 6 + 7 + { 8 + imports = 9 + [ # Include the results of the hardware scan. 10 + ./hardware-configuration.nix 11 + ]; 12 + 13 + # Bootloader. 14 + boot.loader.systemd-boot.enable = true; 15 + boot.loader.efi.canTouchEfiVariables = true; 16 + 17 + networking.hostName = "deck"; # Define your hostname. 18 + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. 19 + 20 + # Configure network proxy if necessary 21 + # networking.proxy.default = "http://user:password@proxy:port/"; 22 + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; 23 + 24 + # Enable networking 25 + networking.networkmanager.enable = true; 26 + 27 + # Set your time zone. 28 + # time.timeZone = "America/Los_Angeles"; 29 + 30 + # Select internationalisation properties. 31 + i18n.defaultLocale = "en_US.UTF-8"; 32 + 33 + # i18n.extraLocaleSettings = { 34 + # LC_ADDRESS = "en_US.UTF-8"; 35 + # LC_IDENTIFICATION = "en_US.UTF-8"; 36 + # LC_MEASUREMENT = "en_US.UTF-8"; 37 + # LC_MONETARY = "en_US.UTF-8"; 38 + # LC_NAME = "en_US.UTF-8"; 39 + # LC_NUMERIC = "en_US.UTF-8"; 40 + # LC_PAPER = "en_US.UTF-8"; 41 + # LC_TELEPHONE = "en_US.UTF-8"; 42 + # LC_TIME = "en_US.UTF-8"; 43 + # }; 44 + 45 + # Enable the X11 windowing system. 46 + # services.xserver.enable = true; 47 + 48 + # Enable the GNOME Desktop Environment. 49 + # services.xserver.displayManager.gdm.enable = true; 50 + # services.xserver.desktopManager.gnome.enable = true; 51 + 52 + # Configure keymap in X11 53 + # services.xserver.xkb = { 54 + # layout = "us"; 55 + # variant = ""; 56 + # }; 57 + 58 + 59 + # use the example session manager (no others are packaged yet so this is enabled by default, 60 + # no need to redefine it in your config for now) 61 + #media-session.enable = true; 62 + 63 + # Enable touchpad support (enabled default in most desktopManager). 64 + # services.xserver.libinput.enable = true; 65 + 66 + # Define a user account. Don't forget to set a password with โ€˜passwdโ€™. 67 + # users.users.anish = { 68 + # isNormalUser = true; 69 + # extraGroups = [ "networkmanager" "wheel" ]; 70 + # packages = with pkgs; [ 71 + # # thunderbird 72 + # ]; 73 + # }; 74 + 75 + # Enable automatic login for the user. 76 + services.xserver.displayManager.autoLogin.enable = true; 77 + services.xserver.displayManager.autoLogin.user = "anish"; 78 + 79 + # Workaround for GNOME autologin: https://github.com/NixOS/nixpkgs/issues/103746#issuecomment-945091229 80 + systemd.services."getty@tty1".enable = false; 81 + systemd.services."autovt@tty1".enable = false; 82 + 83 + # Install firefox. 84 + # programs.firefox.enable = true; 85 + 86 + # List packages installed in system profile. To search, run: 87 + # $ nix search wget 88 + environment.systemPackages = with pkgs; [ 89 + # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. 90 + # wget 91 + ]; 92 + 93 + # Some programs need SUID wrappers, can be configured further or are 94 + # started in user sessions. 95 + # programs.mtr.enable = true; 96 + # programs.gnupg.agent = { 97 + # enable = true; 98 + # enableSSHSupport = true; 99 + # }; 100 + 101 + # List services that you want to enable: 102 + 103 + # Enable the OpenSSH daemon. 104 + # services.openssh.enable = true; 105 + 106 + # Open ports in the firewall. 107 + # networking.firewall.allowedTCPPorts = [ ... ]; 108 + # networking.firewall.allowedUDPPorts = [ ... ]; 109 + # Or disable the firewall altogether. 110 + # networking.firewall.enable = false; 111 + 112 + # This value determines the NixOS release from which the default 113 + # settings for stateful data, like file locations and database versions 114 + # on your system were taken. Itโ€˜s perfectly fine and recommended to leave 115 + # this value at the release version of the first install of this system. 116 + # Before changing this value read the documentation for this option 117 + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). 118 + system.stateVersion = "24.11"; # Did you read the comment? 119 + 120 + }
+54
hosts/deck/default.nix
··· 1 + { self, pkgs, config, ... }: { 2 + imports = [ 3 + ./configuration.nix 4 + ../users/anish 5 + ../profiles/core 6 + # ../profiles/bluetooth 7 + # ../profiles/music 8 + ../profiles/sync/cal 9 + ../profiles/wifi 10 + ../profiles/desktop 11 + ../profiles/mimetypes 12 + ../profiles/syncthing 13 + ../profiles/mossnet-hosts 14 + # ../profiles/fly-wg 15 + # ../profiles/mount-mossnet 16 + ]; 17 + 18 + # age.secrets.deck-wg.file = "${self}/secrets/deck-wg.age"; 19 + # age.secrets.deck-wg.owner = "deck"; 20 + # mossnet.wg = { 21 + # enable = true; 22 + # ips = [ "10.0.69.6/24" ]; 23 + # privateKeyFile = "/run/agenix/deck-wg"; 24 + # }; 25 + 26 + users.users.anish.extraGroups = [ "adbusers" "wheel" "plugdev" "libvertd" ]; 27 + # boot.plymouth = { 28 + # enable = true; 29 + # themePackages = [ pkgs.plymouth-themes ]; 30 + # theme = "motion"; 31 + # }; 32 + 33 + jovian.steam.enable = true; 34 + jovian.devices.steamdeck.enable = true; 35 + jovian.steam.user = "anish"; 36 + jovian.steam.autoStart = true; 37 + jovian.steam.desktopSession = "gnome"; 38 + # jovian.steam.desktopSession = "none+bspwm"; 39 + 40 + # Install XR drivers 41 + environment.systemPackages = with pkgs; [ 42 + xrlinuxdriver 43 + stardust-xr-server 44 + # breezy-gnome 45 + ]; 46 + 47 + services.udev.packages = with pkgs; [ xrlinuxdriver ]; 48 + 49 + services.monado = { 50 + enable = true; 51 + defaultRuntime = true; 52 + }; 53 + 54 + }
+40
hosts/deck/hardware-configuration.nix
··· 1 + # Do not modify this file! It was generated by โ€˜nixos-generate-configโ€™ 2 + # and may be overwritten by future invocations. Please make changes 3 + # to /etc/nixos/configuration.nix instead. 4 + { config, lib, pkgs, modulesPath, ... }: 5 + 6 + { 7 + imports = 8 + [ (modulesPath + "/installer/scan/not-detected.nix") 9 + ]; 10 + 11 + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "usbhid" "sdhci_pci" ]; 12 + boot.initrd.kernelModules = [ ]; 13 + boot.kernelModules = [ "kvm-amd" ]; 14 + boot.extraModulePackages = [ ]; 15 + 16 + fileSystems."/" = 17 + { device = "/dev/disk/by-uuid/d432dae0-3512-4891-9582-56d7ecd8524c"; 18 + fsType = "ext4"; 19 + }; 20 + 21 + fileSystems."/boot" = 22 + { device = "/dev/disk/by-uuid/5B4C-7406"; 23 + fsType = "vfat"; 24 + options = [ "fmask=0077" "dmask=0077" ]; 25 + }; 26 + 27 + swapDevices = 28 + [ { device = "/dev/disk/by-uuid/f75a730e-c849-4edd-a17f-52492d4260dc"; } 29 + ]; 30 + 31 + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 32 + # (the default) this is the recommended approach. When using systemd-networkd it's 33 + # still possible to use this option, but it's recommended to use it in conjunction 34 + # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. 35 + networking.useDHCP = lib.mkDefault true; 36 + # networking.interfaces.wlo1.useDHCP = lib.mkDefault true; 37 + 38 + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 39 + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 40 + }
+337
hosts/development/mirlo/docker-compose.nix
··· 1 + # Auto-generated using compose2nix v0.1.6. 2 + { pkgs, lib, ... }: 3 + 4 + { 5 + # Runtime 6 + virtualisation.podman = { 7 + enable = true; 8 + autoPrune.enable = true; 9 + dockerCompat = true; 10 + defaultNetwork.settings = { 11 + # Required for container networking to be able to use names. 12 + dns_enabled = true; 13 + }; 14 + }; 15 + virtualisation.oci-containers.backend = "podman"; 16 + 17 + # Containers 18 + virtualisation.oci-containers.containers."blackbird-api" = { 19 + image = ""; 20 + environment = { 21 + API_DOMAIN = "http://localhost:3000"; 22 + DATABASE_URL = "postgresql://nomads:nomads@pgsql:5432/nomads?schema=public"; 23 + JWT_SECRET = "test1234"; 24 + MEDIA_LOCATION = "./data/media/"; 25 + MEDIA_LOCATION_DOWNLOAD_CACHE = "/data/media/downloadCache"; 26 + MEDIA_LOCATION_INCOMING = "/data/media/incoming"; 27 + MINIO_HOST = "minio"; 28 + MINIO_PORT = "9000"; 29 + MINIO_ROOT_PASSWORD = "password"; 30 + MINIO_ROOT_USER = "blackbird"; 31 + NODE_ENV = "development"; 32 + PORT = "3000"; 33 + POSTGRES_LOCAL_MACHINE_PORT = "5434"; 34 + POSTGRES_PASSWORD = "nomads"; 35 + POSTGRES_USER = "nomads"; 36 + REACT_APP_API_DOMAIN = "http://localhost:3000"; 37 + REDIS_HOST = "redis"; 38 + REDIS_PASSWORD = "password"; 39 + REDIS_PORT = "6379"; 40 + REFRESH_TOKEN_SECRET = "test1234"; 41 + STATIC_MEDIA_HOST = "http://localhost:3000"; 42 + STRIPE_KEY = ""; 43 + }; 44 + volumes = [ 45 + "/home/anish/.ssh:/root/.ssh:rw" 46 + "/home/anish/usr/mirlo:/var/www/api:rw" 47 + "/home/anish/usr/mirlo/data/media/downloadCache:/data/media/downloadCache:rw" 48 + "/home/anish/usr/mirlo/data/media/incoming:/data/media/incoming:rw" 49 + ]; 50 + ports = [ 51 + "3000:3000/tcp" 52 + ]; 53 + cmd = [ "/bin/sh" "-c" "yarn && yarn migrate:deploy && yarn dev:api" ]; 54 + dependsOn = [ 55 + "blackbird-minio" 56 + "blackbird-pgsql" 57 + "blackbird-redis" 58 + ]; 59 + log-driver = "journald"; 60 + extraOptions = [ 61 + "--network-alias=api" 62 + "--network=mirlo-api-network" 63 + "--network=mirlo-redis-network" 64 + ]; 65 + }; 66 + systemd.services."podman-blackbird-api" = { 67 + serviceConfig = { 68 + Restart = lib.mkOverride 500 "always"; 69 + }; 70 + after = [ 71 + "podman-network-mirlo-api-network.service" 72 + "podman-network-mirlo-redis-network.service" 73 + ]; 74 + requires = [ 75 + "podman-network-mirlo-api-network.service" 76 + "podman-network-mirlo-redis-network.service" 77 + ]; 78 + partOf = [ 79 + "podman-compose-mirlo-root.target" 80 + ]; 81 + unitConfig.UpheldBy = [ 82 + "podman-blackbird-minio.service" 83 + "podman-blackbird-pgsql.service" 84 + "podman-blackbird-redis.service" 85 + ]; 86 + wantedBy = [ 87 + "podman-compose-mirlo-root.target" 88 + ]; 89 + }; 90 + virtualisation.oci-containers.containers."blackbird-background" = { 91 + image = ""; 92 + environment = { 93 + API_DOMAIN = "http://localhost:3000"; 94 + DATABASE_URL = "postgresql://nomads:nomads@pgsql:5432/nomads?schema=public"; 95 + JWT_SECRET = "test1234"; 96 + MEDIA_LOCATION = "./data/media/"; 97 + MEDIA_LOCATION_DOWNLOAD_CACHE = "/data/media/downloadCache"; 98 + MEDIA_LOCATION_INCOMING = "/data/media/incoming"; 99 + MINIO_HOST = "minio"; 100 + MINIO_PORT = "9000"; 101 + MINIO_ROOT_PASSWORD = "password"; 102 + MINIO_ROOT_USER = "blackbird"; 103 + NODE_ENV = "development"; 104 + PORT = "3000"; 105 + POSTGRES_LOCAL_MACHINE_PORT = "5434"; 106 + POSTGRES_PASSWORD = "nomads"; 107 + POSTGRES_USER = "nomads"; 108 + REACT_APP_API_DOMAIN = "http://localhost:3000"; 109 + REDIS_HOST = "redis"; 110 + REDIS_PASSWORD = "password"; 111 + REDIS_PORT = "6379"; 112 + REFRESH_TOKEN_SECRET = "test1234"; 113 + STATIC_MEDIA_HOST = "http://localhost:3000"; 114 + STRIPE_KEY = ""; 115 + }; 116 + volumes = [ 117 + "/home/anish/.ssh:/root/.ssh:rw" 118 + "/home/anish/usr/mirlo:/var/www/api:rw" 119 + "/home/anish/usr/mirlo/data/media/processing:/data/media/processing:rw" 120 + ]; 121 + dependsOn = [ 122 + "blackbird-api" 123 + "blackbird-minio" 124 + "blackbird-pgsql" 125 + "blackbird-redis" 126 + ]; 127 + log-driver = "journald"; 128 + extraOptions = [ 129 + "--network-alias=background" 130 + "--network=mirlo-api-network" 131 + "--network=mirlo-redis-network" 132 + ]; 133 + }; 134 + systemd.services."podman-blackbird-background" = { 135 + serviceConfig = { 136 + Restart = lib.mkOverride 500 "always"; 137 + }; 138 + after = [ 139 + "podman-network-mirlo-api-network.service" 140 + "podman-network-mirlo-redis-network.service" 141 + ]; 142 + requires = [ 143 + "podman-network-mirlo-api-network.service" 144 + "podman-network-mirlo-redis-network.service" 145 + ]; 146 + partOf = [ 147 + "podman-compose-mirlo-root.target" 148 + ]; 149 + unitConfig.UpheldBy = [ 150 + "podman-blackbird-api.service" 151 + "podman-blackbird-minio.service" 152 + "podman-blackbird-pgsql.service" 153 + "podman-blackbird-redis.service" 154 + ]; 155 + wantedBy = [ 156 + "podman-compose-mirlo-root.target" 157 + ]; 158 + }; 159 + virtualisation.oci-containers.containers."blackbird-minio" = { 160 + image = "minio/minio"; 161 + environment = { 162 + API_DOMAIN = "http://localhost:3000"; 163 + DATABASE_URL = "postgresql://nomads:nomads@pgsql:5432/nomads?schema=public"; 164 + JWT_SECRET = "test1234"; 165 + MEDIA_LOCATION = "./data/media/"; 166 + MEDIA_LOCATION_DOWNLOAD_CACHE = "/data/media/downloadCache"; 167 + MEDIA_LOCATION_INCOMING = "/data/media/incoming"; 168 + MINIO_HOST = "minio"; 169 + MINIO_PORT = "9000"; 170 + MINIO_ROOT_PASSWORD = "password"; 171 + MINIO_ROOT_USER = "blackbird"; 172 + PORT = "3000"; 173 + POSTGRES_LOCAL_MACHINE_PORT = "5434"; 174 + POSTGRES_PASSWORD = "nomads"; 175 + POSTGRES_USER = "nomads"; 176 + REACT_APP_API_DOMAIN = "http://localhost:3000"; 177 + REDIS_HOST = "redis"; 178 + REDIS_PASSWORD = "password"; 179 + REDIS_PORT = "6379"; 180 + REFRESH_TOKEN_SECRET = "test1234"; 181 + STATIC_MEDIA_HOST = "http://localhost:3000"; 182 + STRIPE_KEY = ""; 183 + }; 184 + volumes = [ 185 + "/home/anish/usr/mirlo/data/minio_storage:/data:rw" 186 + ]; 187 + ports = [ 188 + "9000:9000/tcp" 189 + "9001:9001/tcp" 190 + ]; 191 + cmd = [ "server" "--console-address" ":9001" "/data" ]; 192 + log-driver = "journald"; 193 + extraOptions = [ 194 + "--network-alias=minio" 195 + "--network=mirlo-api-network:alias=minio" 196 + ]; 197 + }; 198 + systemd.services."podman-blackbird-minio" = { 199 + serviceConfig = { 200 + Restart = lib.mkOverride 500 "no"; 201 + }; 202 + after = [ 203 + "podman-network-mirlo-api-network.service" 204 + ]; 205 + requires = [ 206 + "podman-network-mirlo-api-network.service" 207 + ]; 208 + partOf = [ 209 + "podman-compose-mirlo-root.target" 210 + ]; 211 + wantedBy = [ 212 + "podman-compose-mirlo-root.target" 213 + ]; 214 + }; 215 + virtualisation.oci-containers.containers."blackbird-pgsql" = { 216 + image = "postgres:14-alpine"; 217 + environment = { 218 + API_DOMAIN = "http://localhost:3000"; 219 + DATABASE_URL = "postgresql://nomads:nomads@pgsql:5432/nomads?schema=public"; 220 + JWT_SECRET = "test1234"; 221 + MEDIA_LOCATION = "./data/media/"; 222 + MEDIA_LOCATION_DOWNLOAD_CACHE = "/data/media/downloadCache"; 223 + MEDIA_LOCATION_INCOMING = "/data/media/incoming"; 224 + MINIO_HOST = "minio"; 225 + MINIO_PORT = "9000"; 226 + MINIO_ROOT_PASSWORD = "password"; 227 + MINIO_ROOT_USER = "blackbird"; 228 + PORT = "3000"; 229 + POSTGRES_LOCAL_MACHINE_PORT = "5434"; 230 + POSTGRES_PASSWORD = "nomads"; 231 + POSTGRES_USER = "nomads"; 232 + REACT_APP_API_DOMAIN = "http://localhost:3000"; 233 + REDIS_HOST = "redis"; 234 + REDIS_PASSWORD = "password"; 235 + REDIS_PORT = "6379"; 236 + REFRESH_TOKEN_SECRET = "test1234"; 237 + STATIC_MEDIA_HOST = "http://localhost:3000"; 238 + STRIPE_KEY = ""; 239 + }; 240 + volumes = [ 241 + "/home/anish/usr/mirlo/data/pgsql:/var/lib/postgresql/data:rw" 242 + "/home/anish/usr/mirlo/data/pgsql_backups:/backups:rw" 243 + ]; 244 + ports = [ 245 + "5432:5432/tcp" 246 + ]; 247 + log-driver = "journald"; 248 + extraOptions = [ 249 + "--network-alias=pgsql" 250 + "--network=mirlo-api-network:alias=pgsql" 251 + ]; 252 + }; 253 + systemd.services."podman-blackbird-pgsql" = { 254 + serviceConfig = { 255 + Restart = lib.mkOverride 500 "no"; 256 + }; 257 + after = [ 258 + "podman-network-mirlo-api-network.service" 259 + ]; 260 + requires = [ 261 + "podman-network-mirlo-api-network.service" 262 + ]; 263 + partOf = [ 264 + "podman-compose-mirlo-root.target" 265 + ]; 266 + wantedBy = [ 267 + "podman-compose-mirlo-root.target" 268 + ]; 269 + }; 270 + virtualisation.oci-containers.containers."blackbird-redis" = { 271 + image = "redis"; 272 + ports = [ 273 + "6379:6379/tcp" 274 + ]; 275 + cmd = [ "redis-server" "--appendonly" "yes" "--requirepass " ]; 276 + log-driver = "journald"; 277 + extraOptions = [ 278 + "--network-alias=redis" 279 + "--network=mirlo-redis-network" 280 + ]; 281 + }; 282 + systemd.services."podman-blackbird-redis" = { 283 + serviceConfig = { 284 + Restart = lib.mkOverride 500 "always"; 285 + }; 286 + after = [ 287 + "podman-network-mirlo-redis-network.service" 288 + ]; 289 + requires = [ 290 + "podman-network-mirlo-redis-network.service" 291 + ]; 292 + partOf = [ 293 + "podman-compose-mirlo-root.target" 294 + ]; 295 + wantedBy = [ 296 + "podman-compose-mirlo-root.target" 297 + ]; 298 + }; 299 + 300 + # Networks 301 + systemd.services."podman-network-mirlo-api-network" = { 302 + path = [ pkgs.podman ]; 303 + serviceConfig = { 304 + Type = "oneshot"; 305 + RemainAfterExit = true; 306 + ExecStop = "${pkgs.podman}/bin/podman network rm -f mirlo-api-network"; 307 + }; 308 + script = '' 309 + podman network inspect mirlo-api-network || podman network create mirlo-api-network --opt isolate=true 310 + ''; 311 + partOf = [ "podman-compose-mirlo-root.target" ]; 312 + wantedBy = [ "podman-compose-mirlo-root.target" ]; 313 + }; 314 + systemd.services."podman-network-mirlo-redis-network" = { 315 + path = [ pkgs.podman ]; 316 + serviceConfig = { 317 + Type = "oneshot"; 318 + RemainAfterExit = true; 319 + ExecStop = "${pkgs.podman}/bin/podman network rm -f mirlo-redis-network"; 320 + }; 321 + script = '' 322 + podman network inspect mirlo-redis-network || podman network create mirlo-redis-network --opt isolate=true 323 + ''; 324 + partOf = [ "podman-compose-mirlo-root.target" ]; 325 + wantedBy = [ "podman-compose-mirlo-root.target" ]; 326 + }; 327 + 328 + # Root service 329 + # When started, this will automatically create all resources and start 330 + # the containers. When stopped, this will teardown all resources. 331 + systemd.targets."podman-compose-mirlo-root" = { 332 + unitConfig = { 333 + Description = "Root target generated by compose2nix."; 334 + }; 335 + wantedBy = [ "multi-user.target" ]; 336 + }; 337 + }
+6 -3
hosts/helix/default.nix
··· 11 11 # ../profiles/mount-mossnet 12 12 ../profiles/freshrss 13 13 ../profiles/microbin 14 + ../profiles/site 15 + 16 + # ../profiles/postgres_upgrade_script 14 17 ]; 15 18 16 19 # Capsul specific ··· 27 30 privateKeyFile = "/run/agenix/helix-wg"; 28 31 }; 29 32 30 - services.postgresql.package = pkgs.postgresql_11; 33 + services.postgresql.package = pkgs.postgresql_15; 31 34 services.postgresqlBackup = { 32 35 # TODO needs working wireguard to box 33 36 enable = false; 34 - databases = [ "gitea" "freshrss" "woodpecker" ]; 37 + databases = [ "gitea" "freshrss" ]; # "woodpecker" 35 38 location = "/mnt/two/postgres"; 36 39 }; 37 40 ··· 41 44 paths = [ 42 45 "/var/lib/gitea" 43 46 "/var/lib/freshrss" 44 - "/var/lib/woodpecker" 47 + # "/var/lib/woodpecker" 45 48 "/var/lib/microbin" 46 49 ]; 47 50
-5
hosts/lituus/hardware-configuration.nix
··· 20 20 fsType = "btrfs"; 21 21 }; 22 22 23 - fileSystems."/storage" = 24 - { device = "/dev/disk/by-uuid/c2181608-cbb0-40ab-b62b-158cdc9b9300"; 25 - fsType = "btrfs"; 26 - }; 27 - 28 23 swapDevices = [ ]; 29 24 30 25 hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+1 -1
hosts/profiles/core/default.nix
··· 32 32 }; 33 33 34 34 environment.systemPackages = with pkgs; [ 35 - pinentry_gnome 35 + pinentry-gnome3 36 36 cached-nix-shell 37 37 ]; 38 38
+21 -20
hosts/profiles/desktop/default.nix
··· 62 62 }; 63 63 64 64 environment.systemPackages = with pkgs; [ 65 - unstable.sublime-music 66 - unstable.nheko 67 - unstable.signal-desktop 68 - unstable.tuba 69 - unstable.newsflash 70 - unstable.liferea 71 - unstable.gh 72 - unstable.flyctl 65 + sublime-music 66 + # nheko 67 + signal-desktop 68 + tuba 69 + newsflash 70 + liferea 71 + gh 72 + flyctl 73 73 74 74 kooha 75 75 light ··· 77 77 feh 78 78 sxiv 79 79 xkblayout-state 80 - vcv-rack 81 80 zathura 82 81 calibre 83 82 mpv ··· 87 86 rofi 88 87 rofimoji 89 88 rofi-calc 90 - # eww 91 89 obs-studio 92 90 lightdm 93 91 dunst ··· 99 97 papirus-icon-theme 100 98 calendar-cli 101 99 wyrd 102 - tic-80 100 + # tic-80 103 101 ytfzf 104 102 yt-dlp 105 103 ]; 106 104 107 - xdg.portal = { 105 + # xdg.portal = { 108 106 # Breaks link clicking in nheko 109 107 # Portal doesn't seem to find Firefox as an acceptable app to open links? 110 - enable = false; 111 - extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; 112 - xdgOpenUsePortal = false; 113 - }; 108 + # enable = false; 109 + # extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; 110 + #xdgOpenUsePortal = false; 111 + # }; 114 112 115 113 location.provider = "geoclue2"; 116 114 services = { ··· 121 119 night = 3700; 122 120 }; 123 121 }; 122 + displayManager.defaultSession = "none+bspwm"; 124 123 xserver = { 125 - enable = true; 124 + enable = false; 126 125 xkb.layout = "us,dvorak"; 127 126 desktopManager.wallpaper.mode = "fill"; 127 + desktopManager.gnome.enable = true; 128 128 displayManager = { 129 - defaultSession = "none+bspwm"; 129 + # gdm.enable = true; 130 + # defaultSession = "none+bspwm"; 130 131 sessionCommands = '' 131 132 ${pkgs.xorg.xrdb}/bin/xrdb -merge <<EOF 132 133 #define blk #1F2430 ··· 193 194 EOF 194 195 ''; 195 196 lightdm = { 196 - enable = true; 197 + enable = false; 197 198 background = "/etc/nixos/users/profiles/desktop/background.jpg"; 198 199 greeters.mini = { 199 200 enable = true; ··· 221 222 siji 222 223 font-awesome 223 224 proggyfonts 224 - (nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "Iosevka" ]; }) 225 + # (nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "Iosevka" ]; }) 225 226 ]; 226 227 }
+1
hosts/profiles/dns/default.nix
··· 39 39 "tracks.mossnet.lan" 40 40 "grasp.mossnet.lan" 41 41 "photos.mossnet.lan" 42 + "pod.mossnet.lan" 42 43 ]; 43 44 44 45 in
+1 -1
hosts/profiles/finance/default.nix
··· 4 4 services.paperless = { 5 5 enable = false; 6 6 consumptionDirIsPublic = true; 7 - extraConfig.PAPERLESS_AUTO_LOGIN_USERNAME = "admin"; 7 + settings.PAPERLESS_AUTO_LOGIN_USERNAME = "admin"; 8 8 }; 9 9 10 10 environment.systemPackages = [
+8 -7
hosts/profiles/freshrss/default.nix
··· 17 17 18 18 services.postgresql = { 19 19 enable = true; # Ensure postgresql is enabled 20 - authentication = '' 21 - local freshrss all ident map=freshrss-users 22 - ''; 23 - identMap = # Map the freshrss user to postgresql 24 - '' 25 - freshrss-users freshrss freshrss 26 - ''; 20 + # authentication = '' 21 + # local freshrss all ident map=freshrss-users 22 + # ''; 23 + # identMap = # Map the freshrss user to postgresql 24 + # '' 25 + # freshrss-users freshrss freshrss 26 + # freshrss-users postgres freshrss 27 + # ''; 27 28 ensureDatabases = [ "freshrss" ]; 28 29 ensureUsers = [{ 29 30 name = "freshrss";
+25 -10
hosts/profiles/gitea/default.nix
··· 4 4 age.secrets.gitea-dbpass.file = "${self}/secrets/gitea-dbpass.age"; 5 5 age.secrets.gitea-dbpass.owner = "gitea"; 6 6 7 - services.gitea = { 7 + services.forgejo = { 8 8 enable = true; 9 - package = pkgs.forgejo; 10 - appName = "Sealight Git Forge"; 9 + user = "gitea"; 10 + group = "gitea"; 11 + stateDir = "/var/lib/gitea"; 11 12 database = { 12 13 type = "postgres"; 14 + user = "gitea"; 15 + name = "gitea"; 13 16 passwordFile = "/run/agenix/gitea-dbpass"; 14 17 }; 15 18 settings = { 19 + DEFAULT.APP_NAME = "Sealight Git Forge"; 16 20 server = { 17 21 DOMAIN = "git.sealight.xyz"; 18 22 ROOT_URL = "https://git.sealight.xyz"; ··· 24 28 repository = { 25 29 DEFAULT_BRANCH = "main"; 26 30 }; 31 + service.DISABLE_REGISTRATION = true; 27 32 "markup.restructuredtext" = { 28 33 ENABLED = true; 29 34 FILE_EXTENSIONS = ".rst"; ··· 43 48 }; 44 49 }; 45 50 51 + users.users.gitea = { 52 + home = "/var/lib/gitea"; 53 + useDefaultShell = true; 54 + group = "gitea"; 55 + isSystemUser = true; 56 + }; 57 + 58 + users.groups.gitea = {}; 59 + 46 60 environment.systemPackages = [ pkgs.pandoc ]; 47 61 services.postgresql = { 48 62 enable = true; # Ensure postgresql is enabled 49 - authentication = '' 50 - local gitea all ident map=gitea-users 51 - ''; 52 - identMap = # Map the gitea user to postgresql 53 - '' 54 - gitea-users gitea gitea 55 - ''; 63 + # authentication = '' 64 + # local gitea all ident map=gitea-users 65 + # ''; 66 + # identMap = # Map the gitea user to postgresql 67 + # '' 68 + # gitea-users gitea gitea 69 + # gitea-users postgres gitea 70 + # ''; 56 71 ensureDatabases = [ "gitea" ]; 57 72 ensureUsers = [{ 58 73 name = "gitea";
+10 -1
hosts/profiles/gonic/default.nix
··· 5 5 music-path /mnt/two/music/ 6 6 podcast-path /data/podcasts 7 7 cache-path /data/cache 8 + playlists-path /data/playlists 8 9 ''; 9 - mossnet.gonic.user = "headphones"; 10 + mossnet.gonic.user = "gonic"; 10 11 mossnet.gonic.group = "audio"; 11 12 networking.firewall.allowedTCPPorts = [ 4747 ]; 13 + 14 + users.users.gonic = { 15 + # uid = config.ids.uids.headphones; 16 + # isSystemUser = true; 17 + group = "audio"; 18 + # home = "/var/lib/headphones"; 19 + createHome = true; 20 + }; 12 21 }
-4
hosts/profiles/gonic/module-gonic.nix
··· 68 68 Group = cfg.group; 69 69 DevicePolicy = "closed"; 70 70 NoNewPrivileges = " yes"; 71 - PrivateTmp = "yes"; 72 - PrivateUsers = "yes"; 73 71 ProtectControlGroups = "yes"; 74 72 ProtectKernelModules = "yes"; 75 73 ProtectKernelTunables = "yes"; 76 74 RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6"; 77 - RestrictNamespaces = "yes"; 78 - RestrictRealtime = "yes"; 79 75 SystemCallFilter = "~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap"; 80 76 ReadWritePaths = dataFolder; 81 77 StateDirectory = baseNameOf dataFolder;
+16
hosts/profiles/gpodder/default.nix
··· 1 + { 2 + services.gpodder.enable = true; 3 + networking.firewall.allowedTCPPorts = [ 3005 ]; 4 + services.nginx.virtualHosts."pod.mossnet.lan" = { 5 + extraConfig = "client_max_body_size 20M;"; 6 + 7 + locations."/" = { 8 + extraConfig = '' 9 + proxy_pass http://localhost:3005/; 10 + proxy_set_header X-Forwarded-Proto $scheme; 11 + proxy_set_header X-Real-IP $remote_addr; 12 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 13 + ''; 14 + }; 15 + }; 16 + }
+1
hosts/profiles/headphones/default.nix
··· 4 4 enable = true; 5 5 host = "0.0.0.0"; 6 6 port = 8181; 7 + package = "${pkgs.unstable.headphones}"; 7 8 user = "headphones"; 8 9 group = "audio"; 9 10 dataDir = "/data/music";
+1 -1
hosts/profiles/matrix/mautrix-services.nix
··· 34 34 signal = { 35 35 port = 29184; 36 36 format = "mautrix-python"; 37 - package = pkgs.mautrix-signal; 37 + package = pkgs.unstable.mautrix-signal; 38 38 serviceConfig = { 39 39 StateDirectory = [ "matrix-as-signal" "signald" ]; 40 40 SupplementaryGroups = [ "signald" ];
+2 -2
hosts/profiles/microbin/default.nix
··· 1 1 { config, lib, pkgs, ... }: 2 2 { 3 3 services.microbin.enable = true; 4 - services.microbin.hostname = "bin.sealight.xyz"; 5 - services.microbin.port = 4949; 4 + services.microbin.settings.PUBLIC_PATH = "bin.sealight.xyz"; 5 + services.microbin.settings.MICROBIN_PORT = 4949; 6 6 networking.firewall.allowedTCPPorts = [ 4949 ]; 7 7 services.nginx.virtualHosts."bin.sealight.xyz" = { 8 8 enableACME = true;
+1
hosts/profiles/mossnet-hosts/default.nix
··· 18 18 192.168.1.240 tracks.mossnet.lan 19 19 192.168.1.240 grasp.mossnet.lan 20 20 192.168.1.240 photos.mossnet.lan 21 + 192.168.1.240 pod.mossnet.lan 21 22 ''; 22 23 # 10.0.69.4 mossnet.lan 23 24 # 10.0.69.4 links.mossnet.lan
+2 -2
hosts/profiles/music/default.nix
··· 16 16 orca-c 17 17 supercollider 18 18 dirt 19 - sunvox 19 + # sunvox 20 20 vcv-rack 21 21 lmms 22 22 bespokesynth ··· 38 38 alsa.enable = true; 39 39 alsa.support32Bit = false; 40 40 pulse.enable = true; 41 - jack.enable = true; 41 + jack.enable = true; 42 42 # Deprecated as of 23.05 43 43 # config = { 44 44 # pipewire."context.properties"."default.clock.rate" = "48000";
+3 -4
hosts/profiles/postgres_upgrade_script/default.nix
··· 6 6 # TODO it's perhaps advisable to stop all services that depend on postgresql 7 7 systemctl stop postgresql 8 8 9 - # TODO replace `<new version>` with the psqlSchema here 10 9 # The schema can be found by running: 11 - # nix-instantiate '<nixpkgs>' --eval -A postgresql_14.psqlSchema 12 - export NEWDATA="/var/lib/postgresql/<new version>" 10 + # nix eval --raw nixpkgs#postgresql_15.psqlSchema 11 + export NEWDATA="/var/lib/postgresql/15" 13 12 14 13 # TODO specify the postgresql package you'd like to upgrade to 15 - export NEWBIN="${pkgs.postgresql_14}/bin" 14 + export NEWBIN="${pkgs.postgresql_15}/bin" 16 15 17 16 export OLDDATA="${config.services.postgresql.dataDir}" 18 17 export OLDBIN="${config.services.postgresql.package}/bin"
+1 -1
hosts/profiles/rss-bridge/default.nix
··· 3 3 services.rss-bridge = { 4 4 enable = true; 5 5 virtualHost = "bridge.sealight.xyz"; 6 - whitelist = [ "Facebook" "Bandcamp" "Twitter" "Telegram" "Instagram" "Reddit" ]; 6 + config.system.enabled_bridges = [ "Facebook" "Bandcamp" "Twitter" "Telegram" "Instagram" "Reddit" ]; 7 7 }; 8 8 9 9 services.nginx.virtualHosts."bridge.sealight.xyz".forceSSL = true;
hosts/profiles/sync/music/get-music.sh
+2 -2
hosts/profiles/sync/website/default.nix
··· 6 6 path = [ 7 7 pkgs.git 8 8 pkgs.coreutils 9 - pkgs.nixUnstable 9 + pkgs.nixVersions.latest 10 10 pkgs.openssh 11 11 pkgs.deploy 12 12 ]; ··· 18 18 git add flake.lock 19 19 git diff-index --quiet HEAD || git commit -m 'updating website' # if nothing, don't exit 1 20 20 git push 21 - deploy .#cube 21 + deploy .#helix 22 22 exit 0 23 23 ''; 24 24 serviceConfig = {
+1 -1
hosts/profiles/ulogger-server/default.nix
··· 6 6 ensureDatabases = [ "ulogger" ]; 7 7 ensureUsers = [{ 8 8 name = "ulogger"; 9 - nsureDBOwnership = true; 9 + ensureDBOwnership = true; 10 10 }]; 11 11 }; 12 12
+14 -67
hosts/profiles/wallabag/default.nix
··· 1 1 { self, pkgs, config, lib, ... }: 2 2 3 3 { 4 - # age.secrets.wallabag-password.file = "${self}/secrets/wallabag-password.age"; 5 - # age.secrets.wallabag-secret.file = "${self}/secrets/wallabag-secret.age"; 6 - # age.secrets.wallabag-password.owner = "wallabag"; 7 - # age.secrets.wallabag-secret.owner = "wallabag"; 4 + age.secrets.wallabag-password.file = "${self}/secrets/wallabag-password.age"; 5 + age.secrets.wallabag-secret.file = "${self}/secrets/wallabag-secret.age"; 6 + age.secrets.wallabag-password.owner = "wallabag"; 7 + age.secrets.wallabag-secret.owner = "wallabag"; 8 8 services.postgresql = { 9 9 enable = true; 10 10 package = pkgs.postgresql_15; ··· 18 18 } 19 19 ]; 20 20 authentication = '' 21 - local wallabag all md5 21 + local wallabag all peer 22 22 ''; 23 23 }; 24 24 25 25 services.wallabag = { 26 26 enable = true; 27 - hostName = "read.mossnet.lan"; 28 - package = pkgs.wallabag; 29 - conf = '' 30 - # This file is a "template" of what your parameters.yml file should look like 31 - parameters: 32 - database_driver: pdo_pgsql 33 - database_host: localhost 34 - database_port: ~ 35 - database_name: wallabag 36 - database_user: wallabag 37 - database_password: wallabag 38 - # For SQLite, database_path should be "%kernel.project_dir%/data/db/wallabag.sqlite" 39 - database_path: ~ 40 - database_table_prefix: wallabag_ 41 - database_socket: null 42 - # with PostgreSQL and SQLite, you must set "utf8" 43 - database_charset: utf8 44 - 45 - domain_name: http://read.mossnet.lan/ 46 - server_name: "mossnet wallabag instance" 47 - 48 - mailer_dsn: null:// 49 - locale: en 50 - 51 - # A secret key that's used to generate certain security-related tokens 52 - secret: SAFGOECRIlfal89oe6u0(*^dsaaih961 53 - 54 - # two factor stuff 55 - twofactor_auth: false 56 - twofactor_sender: no-reply@wallabag.org 57 - 58 - # fosuser stuff 59 - fosuser_registration: false 60 - fosuser_confirmation: true 61 - 62 - # how long the access token should live in seconds for the API 63 - fos_oauth_server_access_token_lifetime: 3600 64 - # how long the refresh token should life in seconds for the API 65 - fos_oauth_server_refresh_token_lifetime: 1209600 66 - 67 - from_email: ops@sealight.xyz 68 - 69 - rss_limit: 50 70 - 71 - # RabbitMQ processing 72 - rabbitmq_host: localhost 73 - rabbitmq_port: 5672 74 - rabbitmq_user: guest 75 - rabbitmq_password: guest 76 - rabbitmq_prefetch_count: 10 77 - 78 - # Redis processing 79 - redis_scheme: tcp 80 - redis_host: localhost 81 - redis_port: 6379 82 - redis_path: null 83 - redis_password: null 84 - 85 - # sentry logging 86 - sentry_dsn: ~ 87 - ''; 27 + domain = "read.mossnet.lan"; 28 + virtualHost.enable = true; 29 + package = pkgs.my-wallabag; 30 + # Systemd now defaults to /var/lib? 31 + # dataDir = "/var/lib/wallabag"; 32 + parameters = { 33 + "env(SECRET_FILE)" = config.age.secrets.wallabag-secret.path; 34 + secret = "%env(file:resolve:SECRET_FILE)%"; 35 + }; 88 36 }; 89 - # networking.firewall.allowedTCPPorts = [ 8080 ]; 90 37 }
+10 -5
hosts/profiles/wireguard-server/default.nix
··· 36 36 publicKey = "gcdq86hhEUlqF2chqYB/F8pALyAMNFvwLycxBoHuoDs="; 37 37 allowedIPs = [ "10.0.69.5/32" ]; 38 38 } 39 - # { 40 - # # hyperplane 41 - # publicKey = ""; 42 - # allowedIPs = [ "10.0.69.6/32" ]; 43 - # } 39 + { 40 + # hyperplane 41 + publicKey = "v+EUuM60yZLvBmdCG9GxfFAtSjS1VvbUWcyNb8emjDg="; 42 + allowedIPs = [ "10.0.69.6/32" ]; 43 + } 44 + { 45 + # work 46 + publicKey = "/gv66s8DfppCCjaEN/jlc8z95IhEWPgDumykqKEl0QU="; 47 + allowedIPs = [ "10.0.69.7/32" ]; 48 + } 44 49 ]; 45 50 }; 46 51 }
+6 -3
hosts/users/anish/default.nix
··· 4 4 programs.zsh.enable = true; 5 5 users.users.anish = { 6 6 description = "Personal user for Anish"; 7 - hashedPassword = "$y$j9T$y3DPt/dWaPE.gRazQqw1w0$1RMH5sl/Nu8kW3ZMywYCPRniHD/jF5qRh0VKrdJ.bV2"; 7 + hashedPassword = 8 + "$y$j9T$y3DPt/dWaPE.gRazQqw1w0$1RMH5sl/Nu8kW3ZMywYCPRniHD/jF5qRh0VKrdJ.bV2"; 8 9 shell = pkgs.zsh; 9 10 isNormalUser = true; 10 11 extraGroups = [ "wheel" "audio" "networkmanager" "video" ]; 11 12 openssh.authorizedKeys.keys = [ 12 13 # Curve 13 14 "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDM0Zvei46x/yZl/IeBCq6+IYQQ0avulzVyBysF9cPigZMCybWRV7IEU+E3k9t6JrbdbdGfJkcZIWmsWDdKS8W8mBnZpVoT0ffLynu8JQ/TKdGm4Qv6bgUeKNrGsNv0ZPs2CDaGSLj0oJfRF7Ko10tcLP0vW+yujrh+y6TH/vVzJioaV4TGvtCUpn+wEQah9ROwPQLUUofsSWdnRsDJ/gp37zXWs4l5wyjSKtP3O9RZUP7kBekbSqEgSXiTk0oUQSVqIWl9NDiP6onk/gSOjXsR/JPqsSN/XI/c/yj6gyY0f51Ru2D7iBxuMJIJcWV+rU6coIj+ULcQWLzt/7TI8jq5AOOzI/ll4zbL24Eo84Rz+TP9tvMMhDZ0VaMN22AJ8qQEjc5P09tWKsX7Jg39XelyV1jHXncE4yvIE9F4RSCHzWCeKeXakizQNuzSaxTxIExRFYHjNW5bR6+3MTGwVrEIXU+qML+0yFTR86MT+tdY5AreAJQLwbog79O1NupeXJE= anish@curve" 14 - # Line 15 - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDtU2GMYjXj6RGO1+mwM4TDGOo0qrKLTL4Di8+QgDX0p5vUEsnE1PS9wnuqCmSu75U8g0XIAMtvtdYyGk1N+Bx01erAZpT8DLYtIXFCyaiN28PVu5T1D0T+TQ7xgIH1qenXZR2DOQdf6kpvKEfm7+7bWhCo0N/KFMpmReubyzHDQcq/1qQasxTL+YALQFOjwKqsOTBXbHwZ103AEAcQX4ftBFEOfVli4/1aKIK4dNSZYB7J9Htq707YnsEqo9RLAMh0aOTTYgTx9AoSUDeqGuh/AGkcB7NcS7EEtI6d5YUGylwZh/gF6hqE0jl8kn2m5jMKXL3CRohZvjifue8x/GIjpu5WRabUuhBEbrfTQQaC7taHnt5rvYCGzKZx09TexUzhuz2CL480DRoxSG+P+lCNm1dIg/EZrnGEzXCSr36PlOqS5t5gm8tPkzCmZf2wU15A3ZIYUPmnYLqsn4WmIV7rKmdqt2ctWELUXow3PPiZXBucP9P3xpsYEfF1SB2SGNc= u0_a139@localhost" 16 15 # Box 17 16 "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKN8/SH55DBiwVoSnTU8k2Pen+wmovL9QaMyehxGEsJJv/8fzwsswGalD4C/4O51LOvdu4UKkZW5hG02uVSK+58p3UV3pOPyoqsu/aDeIsWsqmTeTzUrBIWOlNzcDKnohLz2oGC5YO+wyTJ9Iteq6aGJDjErsW7sG3h5lXCs551EmJNNGhtBQaaoytMNnWqSdlVjDNCijurH7WUpp40U/RjEp532l4rX6eIIj3jBKEFbhZkFSSjqbj4xM4SyFt+Jmigb1RMjsQjmpfY1vDtM84RcYfpTUte/T5w2dkD5H6kccmWnwKSJpm9wXfx4E7lR9APdUGnau2U1+XxiD3ytGl anish@box" 17 + # Nix-on-droid line 18 + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJOiXBPVvZAp1fY0a0Tupxj0Ml6MoA51lvqt/jAQq249 nix-on-droid@localhost" 19 + # Work 20 + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC/vvh0i6+uAN0GWlK6ZfyTlc/AW54xe2CroUDsDSoGnFKeIUiSsWexobODlVakNhqwCKfsvUh6g+RdA8ZVcamATcYqxysP4X5fRksmAzRm5281O7ZBDHMB2BdcfHSTgiz7JvMRIQYWDlU8Ck6IL4wlN0b2GMUj9t/GeG37us8280rxpRNoIY7M27AJEZ7XNQhctBIVujxctVBgIMYmZiTwziU7ywJv4rNT5OAWvjRXSo1rkxdvx3VESv4y/mp8m7dEupZpIjIFsLs52+UG5LtadulUqtTWg05sCw8LEcmRhflgZSAvjw60RrKFCuWxc8+/Pmaw+zExeBMenqi0NzuTc3S3k2wCKVIZDh/0tlXzIwZ6WRqxDevUtEKfvbEFMXd8akhTfYs0dyszcFRevBxOBPbcKku+FK/HkdPLmEANvxYty3cv+Eipkz3c8JPJPvXNTXrjepXMm0LUKodO3c15hGogCOxUO38kykkyYnn+MxxHparoMfEr2+oHNpQoS5wA1G43ppqjVoRDgnhleu6ixwRkLZzphY3cnOd5jL9Ie5xIGbFWH1qSlQRdHBkHjuf85z7+QK8nFYAhmG1K3Vt3GNtF8LN1tYQkfwBJ/vsroMNzGPoq4PjVbqb80Eq+96cP89XKfU2/xw1g+p2lJDm/zC1WCjXVzf8NRwC7gqPavQ== anishlakhwara@anishs-mbp.lan" 18 21 ]; 19 22 }; 20 23 }
install-encrypted.sh
+2 -2
install-yubikey.sh
··· 19 19 20 20 # Yubikey Setup 21 21 SLOT=2 22 - ykpersonalize -"$SLOT" -ochal-resp -ochal-hmac 22 + # ykpersonalize -"$SLOT" -ochal-resp -ochal-hmac 23 23 SALT_LENGTH=16 24 24 salt="$(dd if=/dev/random bs=1 count=$SALT_LENGTH 2>/dev/null | rbtohex)" 25 25 k_user=PASSWORDCHANGEMEPLAEASES ··· 147 147 sound.enable = true; 148 148 hardware.pulseaudio.enable = true; 149 149 150 - services.xserver.libinput.enable = true; 150 + services.libinput.enable = true; 151 151 152 152 # Hmmm maybe somewhere else? 153 153 users.users.anish = {
+2 -1
modules/nixos/default.nix
··· 9 9 wireguard = import ./wireguard.nix; 10 10 backup = import ./backup.nix; 11 11 ulogger-server = import ./ulogger.nix; 12 - # microbin = import ./microbin.nix; includide in 23.11 12 + gpodder2go = import ./gpodder2go.nix; 13 + # microbin = import ./microbin.nix; # includide in 23.11 13 14 }
+120
modules/nixos/gpodder2go.nix
··· 1 + { self, config, lib, pkgs, ... }: 2 + 3 + with lib; 4 + 5 + let 6 + cfg = config.services.gpodder; 7 + in 8 + { 9 + options = { 10 + 11 + services.gpodder = { 12 + enable = mkEnableOption "A gpodder instance"; 13 + 14 + user = mkOption { 15 + type = types.str; 16 + default = "gpodder"; 17 + description = "User account under which gpodder runs."; 18 + }; 19 + 20 + group = mkOption { 21 + type = types.str; 22 + default = "gpodder"; 23 + description = "Group account under which gpodder runs."; 24 + }; 25 + 26 + hostname = mkOption { 27 + type = types.str; 28 + description = "Hostname of your gpodder service"; 29 + }; 30 + 31 + dataFolder = mkOption { 32 + type = types.str; 33 + default = "/var/lib/gpodder"; 34 + description = "State director"; 35 + }; 36 + 37 + VERIFIER_SECRET_KEY = mkOption { 38 + type = types.str; 39 + default = "satnheiycglsrcgaecrlufg"; 40 + description = "Verifer Secret"; 41 + }; 42 + 43 + }; 44 + }; 45 + 46 + config = mkIf cfg.enable { 47 + systemd.services.gpodder = { 48 + description = "gpodder2go A gpodder instance"; 49 + after = [ "remote-fs.target" "network.target" ]; 50 + wantedBy = [ "multi-user.target" ]; 51 + serviceConfig = { 52 + ExecStart = "${pkgs.gpodder2go}/bin/gpodder2go serve"; 53 + Environment = [ 54 + "VERIFIER_SECRET_KEY=${cfg.VERIFIER_SECRET_KEY}" 55 + ]; 56 + WorkingDirectory = cfg.dataFolder; 57 + TimeoutStopSec = " 20 "; 58 + KillMode = " process "; 59 + RestartSec = " 10 "; 60 + User = cfg.user; 61 + Group = cfg.group; 62 + DevicePolicy = " closed "; 63 + NoNewPrivileges = " yes "; 64 + PrivateTmp = " yes "; 65 + PrivateUsers = " yes "; 66 + ProtectControlGroups = " yes "; 67 + ProtectKernelModules = " yes "; 68 + ProtectKernelTunables = " yes "; 69 + RestrictAddressFamilies = " 70 + AF_UNIX 71 + AF_INET 72 + AF_INET6 "; 73 + RestrictNamespaces = " yes "; 74 + RestrictRealtime = " yes "; 75 + SystemCallFilter = "~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap"; 76 + ReadWritePaths = cfg.dataFolder; 77 + StateDirectory = baseNameOf cfg.dataFolder; 78 + }; 79 + }; 80 + 81 + users.users = optionalAttrs (cfg.user == "gpodder") ({ 82 + gpodder = { 83 + description = "gpodder service user"; 84 + name = cfg.user; 85 + group = cfg.group; 86 + isSystemUser = true; 87 + }; 88 + }); 89 + 90 + users.groups = optionalAttrs (cfg.group == "gpodder") ({ 91 + gpodder = { }; 92 + }); 93 + 94 + # systemd.services.gpodder-install = { 95 + # description = "gpodder install service"; 96 + # wantedBy = [ "multi-user.target" ]; 97 + # before = [ "gpodder.service" ]; 98 + # path = with pkgs; [ gpodder2go ]; 99 + 100 + # serviceConfig = { 101 + # User = cfg.user; 102 + # Type = "oneshot"; 103 + # CacheDirectory = "gpodder"; 104 + # # Stores sessions. 105 + # CacheDirectoryMode = "700"; 106 + # ConfigurationDirectory = "gpodder"; 107 + # LogsDirectory = "gpodder"; 108 + # StateDirectory = "gpodder"; 109 + # }; 110 + 111 + # script = '' 112 + # if [ ! -f "${cfg.dataFolder}/installed" ]; then 113 + # ${pkgs.gpodder2go}/bin/gpodder2go init 114 + # touch "${cfg.dataFolder}/installed" 115 + # fi 116 + # ''; 117 + # }; 118 + }; 119 + } 120 +
+198 -212
modules/nixos/wallabag.nix
··· 1 - { config, options, lib, pkgs, ... }: 2 - 3 - with lib; 1 + { config, lib, pkgs, ... }: 4 2 let 5 - cfg = config.services.wallabag; 3 + # Based on https://github.com/wallabag/wallabag/blob/2.6.6/app/config/parameters.yml.dist 4 + settings = { 5 + database_driver = "${cfg.database_type}"; 6 + database_host = null; 7 + database_port = 5432; 8 + database_name = "wallabag"; 9 + database_user = "wallabag"; 10 + database_password = null; 11 + database_path = null; 12 + database_table_prefix = "wallabag_"; 13 + database_socket = "/run/postgresql"; 14 + database_charset = "utf8"; 6 15 7 - poolName = "wallabag"; 16 + domain_name = "http://${cfg.domain}"; 17 + server_name = "Wallabag"; 8 18 9 - configFile = pkgs.writeTextFile { 10 - name = "wallabag-config"; 11 - text = cfg.conf; 12 - destination = "/app/config/parameters.yml"; 13 - }; 19 + # Needs an explicit command since Symfony version used by Wallabag does not yet support the `native` transport 20 + # and the `sendmail` transport does not respect `sendmail_path` configured in `php.ini`. 21 + mailer_dsn = "sendmail://default?command=/run/wrappers/bin/sendmail%%20-t%%20-i"; 14 22 15 - appDir = pkgs.buildEnv { 16 - name = "wallabag-app-dir"; 17 - ignoreCollisions = true; 18 - checkCollisionContents = false; 19 - paths = [ configFile "${cfg.package}" ]; 20 - pathsToLink = [ "/app" "/src" "/translations" ]; 21 - }; 23 + locale = "en"; 22 24 23 - # See there for available commands: 24 - # https://doc.wallabag.org/en/admin/console_commands.html 25 - # A user can be made admin with the fos:user:promote --super <user> command 26 - console = pkgs.writeShellScriptBin "wallabag-console" '' 27 - export WALLABAG_DATA="${cfg.dataDir}" 28 - cd "${cfg.dataDir}" 29 - ${pkgs.php}/bin/php ${pkgs.wallabag}/bin/console --env=prod $@ 30 - ''; 25 + # A secret key that's used to generate certain security-related tokens. 26 + # "env(SECRET_FILE)" = "/run/secrets/wallabag"; 27 + # secret = "%env(file:resolve:SECRET_FILE)%"; 31 28 32 - in 33 - { 29 + # two factor stuff 30 + twofactor_auth = false; 31 + twofactor_sender = ""; 34 32 35 - options = { 33 + # fosuser stuff 34 + fosuser_registration = false; 35 + fosuser_confirmation = false; 36 36 37 - services.wallabag = { 38 - enable = mkEnableOption "wallabag"; 37 + # how long the access token should live in seconds for the API 38 + fos_oauth_server_access_token_lifetime = 3600; 39 + # how long the refresh token should life in seconds for the API 40 + fos_oauth_server_refresh_token_lifetime = 1209600; 39 41 40 - user = mkOption { 41 - type = types.str; 42 - default = "nginx"; 43 - description = '' 44 - User account under which both the update daemon and the web-application run. 45 - ''; 46 - }; 42 + from_email = "wallabag@read.mossnet.lan"; 47 43 48 - dataDir = mkOption { 49 - type = types.path; 50 - default = "/var/lib/wallabag"; 51 - description = '' 52 - Data directory. 53 - ''; 54 - }; 44 + # RabbitMQ processing 45 + redis_scheme = "unix"; 46 + redis_host = ""; # Ignored for unix scheme 47 + redis_port = 0; # Ignored for unix scheme 48 + redis_path = config.services.redis.servers.wallabag.unixSocket; 49 + redis_password = null; 55 50 56 - package = mkOption { 57 - type = types.package; 58 - default = pkgs.wallabag; 59 - description = '' 60 - Wallabag package to use. 61 - ''; 62 - }; 51 + # Redis processing 52 + rabbitmq_host = ""; 53 + rabbitmq_port = 0; 54 + rabbitmq_user = ""; 55 + rabbitmq_password = ""; 56 + rabbitmq_prefetch_count = 0; 63 57 64 - hostName = mkOption { 65 - type = types.str; 66 - description = '' 67 - Name of the nginx virtualhost to use and setup. 68 - ''; 69 - }; 58 + # sentry logging 59 + sentry_dsn = null; 60 + } // cfg.parameters; 70 61 71 - poolConfig = mkOption { 72 - type = types.lines; 73 - default = '' 74 - pm = dynamic 75 - pm.max_children = 75 76 - pm.start_servers = 1 77 - pm.min_spare_servers = 1 78 - pm.max_spare_servers = 20 79 - pm.max_requests = 500 80 - catch_workers_output = 1 81 - ''; 82 - description = '' 83 - Options for wallabag's PHP pool. See the documentation on <literal>php-fpm.conf</literal> for details on configuration directives. 84 - ''; 85 - }; 62 + php = cfg.php.package.withExtensions ({ enabled, all }: enabled ++ (with all; [ 63 + imagick 64 + tidy 65 + ])); 86 66 87 - conf = mkOption { 88 - type = types.str; 89 - description = '' 90 - Contents of the wallabag configuration file (parameters.yml) 91 - ''; 92 - }; 93 - }; 67 + commonServiceConfig = { 68 + CacheDirectory = "wallabag"; 69 + # Stores sessions. 70 + CacheDirectoryMode = "700"; 71 + ConfigurationDirectory = "wallabag"; 72 + LogsDirectory = "wallabag"; 73 + StateDirectory = "wallabag"; 74 + # Stores site-credentials-secret-key.txt. 75 + StateDirectoryMode = "700"; 94 76 }; 95 77 78 + cfg = config.services.wallabag; 79 + in { 80 + options.services.wallabag = with lib; { 81 + enable = mkEnableOption (mdDoc "Wallabag read-it-later service"); 96 82 97 - config = mkIf cfg.enable { 83 + package = mkOption { 84 + type = types.package; 85 + default = pkgs.wallabag; 86 + }; 98 87 99 - services.phpfpm.pools."${poolName}" = { 100 - user = "${cfg.user}"; 101 - group = "nginx"; 102 - phpPackage = pkgs.php; 103 - phpEnv = { 104 - WALLABAG_DATA = cfg.dataDir; 105 - PATH = lib.makeBinPath [pkgs.php]; 106 - }; 107 - settings = { 108 - "listen.owner" = "nginx"; 109 - "listen.group" = "nginx"; 110 - "listen.mode" = "0600"; 111 - "user" = "${cfg.user}"; 112 - "group" = "nginx"; 113 - "pm" = "dynamic"; 114 - "pm.max_children" = "75"; 115 - "pm.min_spare_servers" = "5"; 116 - "pm.max_spare_servers" = "20"; 117 - "pm.max_requests" = "10"; 118 - "catch_workers_output" = "1"; 119 - "php_admin_value[error_log]" = "stderr"; 120 - "php_admin_flag[log_errors]" = true; 121 - }; 88 + php.package = mkOption { 89 + type = types.package; 90 + default = pkgs.php; 122 91 }; 123 - services.phpfpm.phpOptions = '' 124 - max_execution_time = 120 125 - ''; 126 92 127 - services.nginx.enable = mkDefault true; 128 - environment.systemPackages = [ console ]; 93 + parameters = mkOption { 94 + type = types.attrsOf types.str; 95 + default = {}; 96 + description = mdDoc "Parameters to override from the default. See <https://doc.wallabag.org/en/admin/parameters.html> for values."; 97 + }; 129 98 130 - # services.nginx.virtualHosts."${cfg.hostName}" = { 131 - # forceSSL = false; 132 - # enableACME = false; 133 - # extraConfig = '' 134 - # error_log /var/log/nginx/wallabag_error.log; 135 - # access_log /var/log/nginx/wallabag_access.log; 136 - # ''; 99 + database_type = mkOption { 100 + type = types.enum [ 101 + "pdo_sqlite3" 102 + "pdo_pgsql" 103 + ]; 104 + default = if config.services.postgresql.enable 105 + then "pdo_pgsql" 106 + else "pdo_sqlite3"; 107 + defaultText = '' 108 + if config.services.postgresql.enable 109 + then "pdo_pgsql" 110 + else "pdo_sqlite3" 111 + ''; 112 + description = mdDoc '' 113 + The database engine name. Can be pdo_sqlite3 or pdo_pgsql. 114 + ''; 115 + }; 137 116 138 - # root = "${cfg.package}/web"; 139 - # locations."/" = { 140 - # priority = 10; 141 - # tryFiles = "$uri /app.php$is_args$args"; 142 - # }; 143 - # locations."/assets".root = "${cfg.dataDir}/web"; 144 - # locations."~ ^/app\\.php(/|$)" = { 145 - # priority = 100; 146 - # fastcgiParams = { 147 - # SCRIPT_FILENAME = "$realpath_root$fastcgi_script_name"; 148 - # DOCUMENT_ROOT = "$realpath_root"; 149 - # }; 150 - # extraConfig = '' 151 - # fastcgi_pass unix:${config.services.phpfpm.pools."${poolName}".socket}; 152 - # include ${config.services.nginx.package}/conf/fastcgi_params; 153 - # include ${config.services.nginx.package}/conf/fastcgi.conf; 154 - # internal; 155 - # ''; 156 - # }; 157 - # locations."~ \\.php$" = { 158 - # priority = 1000; 159 - # return = "404"; 160 - # }; 161 - # }; 117 + domain = mkOption { 118 + type = types.str; 119 + description = "Bare domain name for Wallabag"; 120 + }; 162 121 122 + virtualHost.enable = mkEnableOption (mdDoc "Define nginx virtualhost for Wallabag"); 123 + }; 163 124 164 - services.nginx.virtualHosts."${cfg.hostName}" = { 165 - enableACME = false; 166 - forceSSL = false; 167 - root = "${cfg.package}/web"; 125 + config = lib.mkIf cfg.enable { 126 + environment.etc."wallabag/parameters.yml" = { 127 + source = pkgs.writeTextFile { 128 + name = "wallabag-config"; 129 + text = builtins.toJSON { 130 + parameters = settings; 131 + }; 132 + }; 133 + }; 134 + 135 + services.nginx = lib.mkIf cfg.virtualHost.enable { 136 + enable = true; 137 + 138 + virtualHosts = { 139 + "${cfg.domain}" = { 140 + root = "${pkgs.wallabag}/web"; 141 + 142 + extraConfig = '' 143 + add_header X-Frame-Options SAMEORIGIN; 144 + add_header X-Content-Type-Options nosniff; 145 + add_header X-XSS-Protection "1; mode=block"; 146 + ''; 168 147 169 - extraConfig = '' 170 - add_header X-Frame-Options SAMEORIGIN; 171 - add_header X-Content-Type-Options nosniff; 172 - add_header X-XSS-Protection "1; mode=block"; 173 - ''; 148 + locations."/" = { 149 + extraConfig = '' 150 + try_files $uri /app.php$is_args$args; 151 + ''; 152 + }; 174 153 175 - locations."/" = { 176 - tryFiles = "$uri /app.php$is_args$args"; 177 - }; 154 + locations."/assets".root = "${pkgs.wallabag}/app/web"; 178 155 179 - locations."/assets".root = "${cfg.dataDir}/web"; 156 + locations."~ ^/app\\.php(/|$)" = { 157 + extraConfig = '' 158 + fastcgi_pass unix:${config.services.phpfpm.pools.wallabag.socket}; 159 + include ${config.services.nginx.package}/conf/fastcgi.conf; 160 + fastcgi_param PATH_INFO $fastcgi_path_info; 161 + fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; 162 + fastcgi_param SCRIPT_FILENAME ${pkgs.wallabag}/web/$fastcgi_script_name; 163 + fastcgi_param DOCUMENT_ROOT ${pkgs.wallabag}/web; 164 + fastcgi_read_timeout 120; 165 + internal; 166 + ''; 167 + }; 180 168 181 - locations."~ ^/app\\.php(/|$)" = { 182 - fastcgiParams = { 183 - SCRIPT_FILENAME = "$realpath_root$fastcgi_script_name"; 184 - DOCUMENT_ROOT = "$realpath_root"; 169 + locations."~ /(?!app)\\.php$" = { 170 + extraConfig = '' 171 + return 404; 172 + ''; 173 + }; 185 174 }; 186 - extraConfig = '' 187 - fastcgi_pass unix:${config.services.phpfpm.pools."${poolName}".socket}; 188 - include ${config.services.nginx.package}/conf/fastcgi_params; 189 - include ${config.services.nginx.package}/conf/fastcgi.conf; 190 - internal; 191 - ''; 192 - # extraConfig = '' 193 - # fastcgi_pass unix:${config.services.phpfpm.pools."${poolName}".socket}; 194 - # fastcgi_split_path_info ^(.+\.php)(/.*)$; 195 - # include ${pkgs.nginx}/conf/fastcgi_params; 196 - # fastcgi_param SCRIPT_FILENAME ${cfg.package}/web/$fastcgi_script_name; 197 - # fastcgi_param DOCUMENT_ROOT ${cfg.package}/web; 198 - # fastcgi_read_timeout 120; 199 - # internal; 200 - # ''; 201 175 }; 176 + }; 202 177 203 - locations."~ /(?!app)\\.php$" = { 204 - extraConfig = '' 205 - return 404; 206 - ''; 178 + services.phpfpm.pools.wallabag = { 179 + user = config.users.users.wallabag.name; 180 + phpPackage = php; 181 + settings = { 182 + "catch_workers_output" = true; 183 + 184 + "listen.owner" = config.services.nginx.user; 185 + "listen.group" = "root"; 186 + "pm" = "dynamic"; 187 + "pm.max_children" = 5; 188 + "pm.start_servers" = 2; 189 + "pm.min_spare_servers" = 1; 190 + "pm.max_spare_servers" = 3; 191 + "php_admin_value[error_log]" = "/var/log/wallabag/error.log"; 192 + "php_admin_value[access_log]" = "/var/log/wallabag/access.log"; 193 + "php_admin_flag[log_errors]" = true; 194 + }; 195 + phpOptions = '' 196 + ; Set up $_ENV superglobal. 197 + ; http://php.net/request-order 198 + variables_order = "EGPCS" 199 + # Wallabag will crash on start-up. 200 + # https://github.com/wallabag/wallabag/issues/6042 201 + # error_reporting = E_ALL & ~E_USER_DEPRECATED & ~E_DEPRECATED 202 + ''; 203 + settings = { 204 + # Accept settings from the systemd service. 205 + clear_env = false; 207 206 }; 208 207 }; 209 208 209 + users.users.wallabag = { 210 + isSystemUser = true; 211 + group = "wallabag"; 212 + }; 213 + users.groups.wallabag = {}; 214 + services.redis.servers.wallabag = { 215 + enable = true; 216 + user = "wallabag"; 217 + }; 218 + services.rabbitmq.enable = false; 219 + 220 + systemd.services.phpfpm-wallabag.serviceConfig = commonServiceConfig; 221 + 210 222 systemd.services.wallabag-install = { 211 223 description = "Wallabag install service"; 212 224 wantedBy = [ "multi-user.target" ]; 213 225 before = [ "phpfpm-wallabag.service" ]; 214 - after = [ "mysql.service" "postgresql.service" ]; 226 + after = [ "postgresql.service" ]; 215 227 path = with pkgs; [ coreutils php phpPackages.composer ]; 216 228 217 229 serviceConfig = { 218 - User = cfg.user; 230 + User = "wallabag"; 219 231 Type = "oneshot"; 220 - RemainAfterExit = "yes"; 221 - PermissionsStartOnly = true; 222 - }; 223 - 224 - preStart = '' 225 - mkdir -p "${cfg.dataDir}" 226 - chown ${cfg.user}:nginx "${cfg.dataDir}" 227 - ''; 232 + } // commonServiceConfig; 228 233 229 234 script = '' 230 - echo "Setting up wallabag files in ${cfg.dataDir} ..." 231 - cd "${cfg.dataDir}" 232 - 233 - rm -rf var/cache/* 234 - rm -f app src translations 235 - ln -sf ${appDir}/app app 236 - ln -sf ${appDir}/src src 237 - ln -sf ${appDir}/translations translations 238 - ln -sf ${cfg.package}/composer.{json,lock} . 239 - 240 - export WALLABAG_DATA="${cfg.dataDir}" 241 - if [ ! -f installed ]; then 242 - echo "Install file not found, installing ..." 243 - php ${cfg.package}/bin/console --env=prod doctrine:database:create --if-not-exists --no-interaction 244 - php ${cfg.package}/bin/console --env=prod doctrine:migrations:migrate --no-interaction 245 - # Until https://github.com/wallabag/wallabag/issues/3662 is fixed 246 - # yes no | php ${cfg.package}/bin/console --env=prod wallabag:install 247 - touch installed 248 - else 249 - php ${cfg.package}/bin/console --env=prod doctrine:migrations:migrate --no-interaction 250 - fi 251 - php ${cfg.package}/bin/console --env=prod cache:clear 252 - ''; 235 + if [ ! -f "$STATE_DIRECTORY/installed" ]; then 236 + php ${pkgs.wallabag}/bin/console --env=prod wallabag:install 237 + touch "$STATE_DIRECTORY/installed" 238 + else 239 + php ${pkgs.wallabag}/bin/console --env=prod doctrine:migrations:migrate --no-interaction 240 + fi 241 + php ${pkgs.wallabag}/bin/console --env=prod cache:clear 242 + ''; 253 243 }; 254 - }; 255 - 256 - meta = with stdenv.lib; { 257 - maintainers = with maintainers; [ nadrieril ]; 258 244 }; 259 245 }
+15 -3
mount-crypted.sh
··· 1 1 #!/usr/bin/env bash 2 + 3 + # nix-shell https://github.com/sgillespie/nixos-yubikey-luks/archive/master.tar.gz 4 + 5 + rbtohex() { 6 + ( od -An -vtx1 | tr -d ' \n' ) 7 + } 8 + 9 + hextorb() { 10 + ( tr '[:lower:]' '[:upper:]' | sed -e 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI'| xargs printf ) 11 + } 12 + 2 13 key_length=512 3 - iterations="$(head -n 2 /boot/crypted-storage/default)" 4 - salt="$(head -n 1 /boot/crypted-storage/default)" 14 + iterations=1000000 15 + salt="$(head -n 1 /mnt/crypt-storage/default)" 5 16 chal="$(echo -n $salt | openssl dgst -binary -sha512 | rbtohex)" 6 17 resp="$(ykchalresp -2 -x $chal 2>/dev/null)" 7 - user_key="$(read -s)" 18 + user_key= 19 + read -r user_key 8 20 luks_key="$(echo -n $user_key | pbkdf2-sha512 $(($key_length / 8)) $iterations $resp | rbtohex)" 9 21 echo -n $luks_key | hextorb | sudo cryptsetup luksOpen /dev/sda2 crypted --key-file=-
+9
overlays/default.nix
··· 14 14 buildInputs = prevAttrs.propagatedBuildInputs ++ [ final.python3.pkgs.aiosqlite ]; # We're using sqlite and upstream doesn't package this dependency 15 15 }); 16 16 17 + wallabag = prev.wallabag.overrideAttrs (attrs: { 18 + patches = builtins.filter (patch: builtins.baseNameOf patch != "wallabag-data.patch") attrs.patches ++ [ 19 + # Out of the box, Wallabag wants to write to various subdirectories of the project directory. 20 + # Letโ€™s replace references to such paths with designated systemd locations 21 + # so that the project source can remain immutable. 22 + ../pkgs/wallabag-data.patch 23 + ]; 24 + }); 25 + 17 26 # Need to do server and agent too, maybe 18 27 # woodpecker-cli-next = 19 28 # let
+6 -1
pkgs/default.nix
··· 5 5 plymouth-themes = pkgs.callPackage ./plymouth.nix { }; 6 6 tic-80 = pkgs.callPackage ./tic-80.nix { }; 7 7 fennel-ls = pkgs.callPackage ./fennel-ls.nix { }; 8 - kobopatch = pkgs.callPackage ./kobopatch.nix { }; 8 + # kobopatch = pkgs.callPackage ./kobopatch.nix { }; 9 9 my-mautrix-discord = pkgs.callPackage ./mautrix-discord.nix { }; # Handled by matrix-appservices input 10 10 ulogger-server = pkgs.callPackage ./ulogger.nix { }; 11 + # Wallabag is now an overlay 12 + # TODO: we still use the patch from this folder though 13 + my-wallabag = pkgs.callPackage ./wallabag.nix { }; 14 + mautrix-slack = pkgs.callPackage ./mautrix-slack.nix { }; 15 + gpodder2go = pkgs.callPackage ./gpodder2go.nix { }; 11 16 }
+14
pkgs/gpodder2go.nix
··· 1 + { pkgs, ... }: 2 + 3 + pkgs.buildGoModule rec { 4 + name = "gpodder2go"; 5 + src = pkgs.fetchFromGitHub { 6 + owner = "oxtyped"; 7 + repo = "gpodder2go"; 8 + rev = "v0.1.2"; 9 + hash = "sha256-RAt0rd4DZwI7b7IEFd1o4s4ivADzgzBzBaeGVL8OmYo"; 10 + }; 11 + 12 + vendorHash = "sha256-mbSgY5WjIAesT27uRgaiRF3N06yuUntjTp6kjUMh6Bw"; 13 + doCheck = false; 14 + }
+3 -3
pkgs/kobopatch.nix
··· 1 1 { lib, buildGoModule, fetchFromGitHub }: 2 2 3 - buildGoModule rec { 3 + buildGoModule { 4 4 name = "kobopatch"; 5 5 version = "0.15.0"; 6 6 7 - vendorSha256 = "1i6srhyig4x8mywyc2l8wzzm1afvb7wxmjsr84c447sb1xss6p7x"; 7 + vendorHash = "sha256-1i6srhyig4x8mywyc2l8wzzm1afvb7wxmjsr84c447sb1xss6p7x"; 8 8 9 9 src = fetchFromGitHub { 10 10 owner = "geek1011"; 11 11 repo = "kobopatch"; 12 12 rev = "653070c67c83ec61884854efc4f8a3132d82a2e5"; 13 - sha256 = "09hr3zh0w0f78cx40d2yydqv0mmjdh4iwdgia7sikraphvha85nn"; 13 + hash = "sha256-09hr3zh0w0f78cx40d2yydqv0mmjdh4iwdgia7sikraphvha85nn"; 14 14 }; 15 15 16 16 meta = with lib; {
+1 -1
pkgs/koboutils.nix
··· 4 4 name = "koboutils"; 5 5 version = "git_2020-04-08"; 6 6 7 - vendorSha256 = "1hqvizvbc29yib6awmvlklxkq7j8c0d32gxsipdiwhkh79xbd6wq"; 7 + vendorha256 = "1hqvizvbc29yib6awmvlklxkq7j8c0d32gxsipdiwhkh79xbd6wq"; 8 8 deleteVendor = true; 9 9 10 10 src = fetchFromGitHub {
+29
pkgs/mautrix-slack.nix
··· 1 + { lib, buildGoModule, fetchFromGitHub, olm }: 2 + 3 + buildGoModule rec { 4 + pname = "mautrix-discord"; 5 + version = "unstable-2022-11-04"; 6 + 7 + src = fetchFromGitHub { 8 + owner = "mautrix"; 9 + repo = "slack"; 10 + rev = "4530ff397d08d93b673cd71da4c2a75d969ca0df"; 11 + hash = ""; 12 + }; 13 + 14 + buildInputs = [ olm ]; 15 + 16 + vendorHash = "sha256-yday2mSnPwuhXWkCG4XY7qoBl3DXHcSvzBoZbjgYz/c="; 17 + 18 + ldflags = [ "-s" "-w" ]; # https://github.com/NixOS/nixpkgs/issues/177698 19 + 20 + doCheck = false; # No tests available 21 + 22 + meta = with lib; { 23 + homepage = "https://go.mau.fi/mautrix-slack"; 24 + description = "Matrix to Slack hybrid puppeting/relaybot bridge"; 25 + license = licenses.agpl3Plus; 26 + maintainers = with maintainers; [ ]; 27 + }; 28 + } 29 +
+2 -2
pkgs/tic-80.nix
··· 10 10 }; 11 11 buildInputs = with pkgs; [ 12 12 gcc 13 - pkgconfig 13 + pkg-config 14 14 autoconf 15 15 automake 16 16 libtool ··· 27 27 gtk3-x11 28 28 cmake 29 29 cmakeCurses 30 - elementary-cmake-modules 30 + # elementary-cmake-modules 31 31 extra-cmake-modules 32 32 libglvnd 33 33 mesa_glu
+55
pkgs/wallabag-data.patch
··· 1 + diff --git a/app/AppKernel.php b/app/AppKernel.php 2 + index 61b734e06..0902c20fc 100644 3 + --- a/app/AppKernel.php 4 + +++ b/app/AppKernel.php 5 + @@ -64,12 +64,12 @@ class AppKernel extends Kernel 6 + 7 + public function getCacheDir() 8 + { 9 + - return dirname(__DIR__) . '/var/cache/' . $this->getEnvironment(); 10 + + return getenv('CACHE_DIRECTORY') . '/' . $this->getEnvironment(); 11 + } 12 + 13 + public function getLogDir() 14 + { 15 + - return dirname(__DIR__) . '/var/logs'; 16 + + return getenv('LOGS_DIRECTORY'); 17 + } 18 + 19 + public function registerContainerConfiguration(LoaderInterface $loader) 20 + diff --git a/app/config/config.yml b/app/config/config.yml 21 + index 7f0a4ca6c..77b5175c8 100644 22 + --- a/app/config/config.yml 23 + +++ b/app/config/config.yml 24 + @@ -1,5 +1,7 @@ 25 + imports: 26 + - - { resource: parameters.yml } 27 + + # Unfortunately, we cannot use %env(string:CONFIGURATION_DIRECTORY)%. Hardcoding the path for simplicity. 28 + + # https://symfony.com/doc/current/service_container/import.html#importing-configuration-with-imports 29 + + - { resource: '/etc/wallabag/parameters.yml' } 30 + - { resource: security.yml } 31 + - { resource: services.yml } 32 + - { resource: wallabag.yml } 33 + @@ -28,7 +30,7 @@ framework: 34 + session: 35 + # handler_id set to null will use default session handler from php.ini 36 + handler_id: session.handler.native_file 37 + - save_path: "%kernel.project_dir%/var/sessions/%kernel.environment%" 38 + + save_path: "%env(string:CACHE_DIRECTORY)%/sessions/%kernel.environment%" 39 + cookie_secure: auto 40 + fragments: ~ 41 + http_method_override: true 42 + diff --git a/app/config/wallabag.yml b/app/config/wallabag.yml 43 + index bd57d6377..8e1cd0970 100644 44 + --- a/app/config/wallabag.yml 45 + +++ b/app/config/wallabag.yml 46 + @@ -35,7 +35,7 @@ wallabag_core: 47 + fetching_error_message: | 48 + wallabag can't retrieve contents for this article. Please <a href="https://doc.wallabag.org/en/user/errors_during_fetching.html#how-can-i-help-to-fix-that">troubleshoot this issue</a>. 49 + api_limit_mass_actions: 10 50 + - encryption_key_path: "%kernel.project_dir%/data/site-credentials-secret-key.txt" 51 + + encryption_key_path: "%env(string:STATE_DIRECTORY)%/site-credentials-secret-key.txt" 52 + default_internal_settings: 53 + - 54 + name: share_public 55 +
+57
pkgs/wallabag.nix
··· 1 + { lib 2 + , stdenv 3 + , fetchurl 4 + }: 5 + 6 + # Point the environment variable $WALLABAG_DATA to a data directory 7 + # that contains the folder `app` which must be a clone of 8 + # wallabag's configuration files with your customized `parameters.yml`. 9 + # In practice you need to copy `${pkgs.wallabag}/app` and the 10 + # customizzed `parameters.yml` to $WALLABAG_DATA. 11 + # These need to be updated every package upgrade. 12 + # 13 + # After a package upgrade, empty the `var/cache` folder or unexpected 14 + # error will occur. 15 + 16 + let 17 + pname = "wallabag"; 18 + version = "2.6.9"; 19 + in 20 + stdenv.mkDerivation { 21 + inherit pname version; 22 + 23 + # Release tarball includes vendored files 24 + src = fetchurl { 25 + url = "https://github.com/wallabag/wallabag/releases/download/${version}/wallabag-${version}.tar.gz"; 26 + hash = "sha256-V4s5/y9fFAmZ+WnUxU03UyRivEihD1ZUKQOOq4TLEKw="; 27 + }; 28 + 29 + patches = [ 30 + ./wallabag-data.patch # exposes $WALLABAG_DATA 31 + ]; 32 + 33 + dontBuild = true; 34 + 35 + installPhase = '' 36 + runHook preInstall 37 + 38 + mkdir $out 39 + cp -R * $out/ 40 + 41 + runHook postInstall 42 + ''; 43 + 44 + meta = with lib; { 45 + description = "wallabag is a self hostable application for saving web pages"; 46 + longDescription = '' 47 + wallabag is a self-hostable PHP application allowing you to not 48 + miss any content anymore. Click, save and read it when you can. 49 + It extracts content so that you can read it when you have time. 50 + ''; 51 + license = licenses.mit; 52 + homepage = "http://wallabag.org"; 53 + changelog = "https://github.com/wallabag/wallabag/releases/tag/${version}"; 54 + maintainers = with maintainers; [ schneefux ]; 55 + platforms = platforms.all; 56 + }; 57 + }
+9 -1
shell.nix
··· 5 5 default = pkgs.mkShell { 6 6 # Enable experimental features without having to specify the argument 7 7 NIX_CONFIG = "experimental-features = nix-command flakes"; 8 - nativeBuildInputs = with pkgs; [ nix home-manager git agenix deploy-rs dnscontrol ]; 8 + nativeBuildInputs = with pkgs; [ 9 + nix 10 + home-manager 11 + git 12 + agenix 13 + deploy-rs 14 + dnscontrol 15 + git-bug 16 + ]; 9 17 }; 10 18 }