merge nvim-rewrite into deck

Changed files
+3803 -480
.direnv
dns
home
hosts
box
curve
development
helix
lituus
profiles
core
desktop
dns
finance
freshrss
gitea
gonic
gpodder
headphones
matrix
microbin
mossnet-hosts
music
postgres_upgrade_script
rss-bridge
sync
music
website
ulogger-server
wallabag
wireguard-server
users
anish
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
+1
.gitignore
··· 1 .worktrees/*
··· 1 .worktrees/* 2 + .direnv/
+5 -4
dns/dnsconfig.js
··· 6 7 D("lakhwara.com", REG_NONE, 8 DnsProvider(DNS_HEDNS), 9 - DefaultTTL(86400), 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'), 13 TXT('anish', 'datkey=dat://1a240a14fab2bae9c85ebad29bddc04505aaba24e5fb809c2ccb4cdf71e3a7d5'), 14 CNAME('fm1._domainkey', 'fm1.lakhwara.com.dkim.fmhosted.com.'), 15 CNAME('fm2._domainkey', 'fm2.lakhwara.com.dkim.fmhosted.com.'), 16 CNAME('fm3._domainkey', 'fm3.lakhwara.com.dkim.fmhosted.com.'), 17 - A('@', '103.16.130.98'), 18 MX('@', 10, 'in1-smtp.messagingengine.com.'), 19 MX('@', 20, 'in2-smtp.messagingengine.com.'), 20 //NAMESERVER('ns1.he.net.'), ··· 39 A('git', '69.61.2.203', TTL(300)), 40 A('bin', '69.61.2.203', TTL(300)), 41 A('ci', '69.61.2.203', TTL(300)), 42 // vultr -> nulled: lituus 43 A('@', '45.77.48.108', TTL(300)), 44 A('jitsi', '45.77.48.108', TTL(300)),
··· 6 7 D("lakhwara.com", REG_NONE, 8 DnsProvider(DNS_HEDNS), 9 + DefaultTTL(300), 10 //SOA('@', 'ns1.he.net.', 'hostmaster.he.net.', 2022041702, 86400, 7200, 3600000, 86400, TTL(172800)), 11 + A('anish', '69.61.2.203'), 12 + A('@', '69.61.2.203'), 13 + //A('coaching', '103.16.130.98'), 14 TXT('anish', 'datkey=dat://1a240a14fab2bae9c85ebad29bddc04505aaba24e5fb809c2ccb4cdf71e3a7d5'), 15 CNAME('fm1._domainkey', 'fm1.lakhwara.com.dkim.fmhosted.com.'), 16 CNAME('fm2._domainkey', 'fm2.lakhwara.com.dkim.fmhosted.com.'), 17 CNAME('fm3._domainkey', 'fm3.lakhwara.com.dkim.fmhosted.com.'), 18 MX('@', 10, 'in1-smtp.messagingengine.com.'), 19 MX('@', 20, 'in2-smtp.messagingengine.com.'), 20 //NAMESERVER('ns1.he.net.'), ··· 39 A('git', '69.61.2.203', TTL(300)), 40 A('bin', '69.61.2.203', TTL(300)), 41 A('ci', '69.61.2.203', TTL(300)), 42 + A('write', '69.61.2.203', TTL(300)), 43 // vultr -> nulled: lituus 44 A('@', '45.77.48.108', TTL(300)), 45 A('jitsi', '45.77.48.108', TTL(300)),
dns/test_nullhex.sh
+199 -53
flake.lock
··· 10 "systems": "systems" 11 }, 12 "locked": { 13 - "lastModified": 1747514353, 14 - "narHash": "sha256-E1WjB+zvDw4x058mg3MIdK5j2huvnNpTEEt2brhg2H8=", 15 "owner": "ryantm", 16 "repo": "agenix", 17 - "rev": "6697e8babbd8f323dfd5e28f160a0128582c128b", 18 "type": "github" 19 }, 20 "original": { ··· 46 "ref": "main", 47 "type": "git", 48 "url": "ssh://gitea@git.sealight.xyz/aynish/basant" 49 } 50 }, 51 "brew-src": { ··· 111 ] 112 }, 113 "locked": { 114 - "lastModified": 1747521943, 115 - "narHash": "sha256-GMAJcB8oB9cC+TbYTE7QDfw9fwHZyloxUWnUpHnQRko=", 116 "owner": "LnL7", 117 "repo": "nix-darwin", 118 - "rev": "b9b927dd1f24094b271e8ec5277a672dc4fc860d", 119 "type": "github" 120 }, 121 "original": { ··· 127 }, 128 "deploy-rs": { 129 "inputs": { 130 - "flake-compat": "flake-compat", 131 "nixpkgs": [ 132 "nixpkgs" 133 ], ··· 185 ] 186 }, 187 "locked": { 188 - "lastModified": 1747274630, 189 - "narHash": "sha256-87RJwXbfOHyzTB9LYagAQ6vOZhszCvd8Gvudu+gf3qo=", 190 "owner": "nix-community", 191 "repo": "disko", 192 - "rev": "ec7c109a4f794fce09aad87239eab7f66540b888", 193 "type": "github" 194 }, 195 "original": { ··· 241 "flake-compat_2": { 242 "flake": false, 243 "locked": { 244 "lastModified": 1641205782, 245 "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", 246 "owner": "edolstra", ··· 254 "type": "github" 255 } 256 }, 257 - "flake-compat_3": { 258 "flake": false, 259 "locked": { 260 "lastModified": 1696426674, ··· 270 "type": "github" 271 } 272 }, 273 "flake-parts": { 274 "inputs": { 275 "nixpkgs-lib": [ ··· 325 } 326 }, 327 "flake-utils_2": { 328 "locked": { 329 "lastModified": 1667395993, 330 "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", ··· 339 "type": "github" 340 } 341 }, 342 "gitignore": { 343 "inputs": { 344 "nixpkgs": [ ··· 363 }, 364 "grasp": { 365 "inputs": { 366 - "flake-utils": "flake-utils_2", 367 "nixpkgs": [ 368 "nixpkgs" 369 ] ··· 385 }, 386 "hardware": { 387 "locked": { 388 - "lastModified": 1747129300, 389 - "narHash": "sha256-L3clA5YGeYCF47ghsI7Tcex+DnaaN/BbQ4dR2wzoiKg=", 390 "owner": "nixos", 391 "repo": "nixos-hardware", 392 - "rev": "e81fd167b33121269149c57806599045fd33eeed", 393 "type": "github" 394 }, 395 "original": { ··· 459 "homebrew-cask": { 460 "flake": false, 461 "locked": { 462 - "lastModified": 1747532349, 463 - "narHash": "sha256-MpVDXDQLeUAlKVm57PGv7v/4H43DCS2VDlhUDy1t+Z8=", 464 "owner": "homebrew", 465 "repo": "homebrew-cask", 466 - "rev": "39e4baca231c013729863c84e53cfa7c23e9da33", 467 "type": "github" 468 }, 469 "original": { ··· 475 "homebrew-core": { 476 "flake": false, 477 "locked": { 478 - "lastModified": 1747546566, 479 - "narHash": "sha256-Jbhg5Q65/YqZth9CSzTGqKgG2YHf4IbxlyWta97lXWo=", 480 "owner": "homebrew", 481 "repo": "homebrew-core", 482 - "rev": "fed56bce55ff3905d5803325e9cfdd335f07150c", 483 "type": "github" 484 }, 485 "original": { ··· 496 ] 497 }, 498 "locked": { 499 - "lastModified": 1747466853, 500 - "narHash": "sha256-/evYltwuF8Kz1odgocWnguh/8VQV1i76VB4yMTU9m7k=", 501 "owner": "jovian-experiments", 502 "repo": "jovian-nixos", 503 - "rev": "0ba1a34fa6d995fe433109f0ad66de8d5613d46e", 504 "type": "github" 505 }, 506 "original": { ··· 612 "nix-matrix-appservices": { 613 "inputs": { 614 "devshell": "devshell", 615 - "flake-compat": "flake-compat_2", 616 "nixlib": "nixlib", 617 "nixpkgs": "nixpkgs_3" 618 }, ··· 647 }, 648 "nixos-hardware": { 649 "locked": { 650 - "lastModified": 1747129300, 651 - "narHash": "sha256-L3clA5YGeYCF47ghsI7Tcex+DnaaN/BbQ4dR2wzoiKg=", 652 "owner": "NixOS", 653 "repo": "nixos-hardware", 654 - "rev": "e81fd167b33121269149c57806599045fd33eeed", 655 "type": "github" 656 }, 657 "original": { ··· 736 }, 737 "nixpkgs_4": { 738 "locked": { 739 - "lastModified": 1747335874, 740 - "narHash": "sha256-IKKIXTSYJMmUtE+Kav5Rob8SgLPnfnq4Qu8LyT4gdqQ=", 741 "owner": "nixos", 742 "repo": "nixpkgs", 743 - "rev": "ba8b70ee098bc5654c459d6a95dfc498b91ff858", 744 "type": "github" 745 }, 746 "original": { ··· 752 }, 753 "nixpkgs_5": { 754 "locked": { 755 - "lastModified": 1747327360, 756 - "narHash": "sha256-LSmTbiq/nqZR9B2t4MRnWG7cb0KVNU70dB7RT4+wYK4=", 757 "owner": "nixos", 758 "repo": "nixpkgs", 759 - "rev": "e06158e58f3adee28b139e9c2bcfcc41f8625b46", 760 "type": "github" 761 }, 762 "original": { ··· 837 "treefmt-nix": "treefmt-nix" 838 }, 839 "locked": { 840 - "lastModified": 1747542017, 841 - "narHash": "sha256-sFSV0Hfd8KRE5w8Ly11WMRPQKm9S5yCD12pdgAcsppU=", 842 "owner": "nix-community", 843 "repo": "NUR", 844 - "rev": "5ce8c2eb9c364ad7154a78878ecc838efbe8832e", 845 "type": "github" 846 }, 847 "original": { ··· 879 ] 880 }, 881 "locked": { 882 - "lastModified": 1724637654, 883 - "narHash": "sha256-86TExy5MWkXLd7Oio1QGuwzkSG9lxsYVPo/3IoFkLFM=", 884 "ref": "main", 885 - "rev": "521e360df123a530fc4c99187e3580bd5d086a9d", 886 - "revCount": 1467, 887 "type": "git", 888 "url": "ssh://gitea@git.sealight.xyz/aynish/kitaab" 889 }, ··· 895 }, 896 "pre-commit-nix": { 897 "inputs": { 898 - "flake-compat": "flake-compat_3", 899 "gitignore": "gitignore", 900 "nixpkgs": "nixpkgs_8", 901 "nixpkgs-stable": "nixpkgs-stable" ··· 959 "inputs": { 960 "agenix": "agenix", 961 "basant": "basant", 962 "darwin": "darwin_2", 963 "deploy-rs": "deploy-rs", 964 "disko": "disko", ··· 980 "sourcegraph-src-cli-cask": "sourcegraph-src-cli-cask", 981 "tidalcycles": "tidalcycles", 982 "unstable": "unstable", 983 - "vimwikicli": "vimwikicli" 984 } 985 }, 986 "rust-overlay": { ··· 990 ] 991 }, 992 "locked": { 993 - "lastModified": 1747535902, 994 - "narHash": "sha256-rKWBtLcqQeu8PpfKIBn1ORXS2udSH/MwnQFwfSpFOLg=", 995 "owner": "oxalica", 996 "repo": "rust-overlay", 997 - "rev": "b7a99615d26b82c39b73ccc9026545c3f3403b71", 998 "type": "github" 999 }, 1000 "original": { ··· 1086 "sourcegraph-src-cli-cask": { 1087 "flake": false, 1088 "locked": { 1089 - "lastModified": 1747406457, 1090 - "narHash": "sha256-AH3nqf0VIxdEKwAlacFzNn2LYmaKFp7AAjazHLjgktQ=", 1091 "owner": "sourcegraph", 1092 "repo": "homebrew-src-cli", 1093 - "rev": "ae66248cf103c4c9f72fc969c0503954bcfc0adf", 1094 "type": "github" 1095 }, 1096 "original": { ··· 1131 } 1132 }, 1133 "systems_2": { 1134 "locked": { 1135 "lastModified": 1681028828, 1136 "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", ··· 1232 }, 1233 "unstable": { 1234 "locked": { 1235 - "lastModified": 1747327360, 1236 - "narHash": "sha256-LSmTbiq/nqZR9B2t4MRnWG7cb0KVNU70dB7RT4+wYK4=", 1237 "owner": "nixos", 1238 "repo": "nixpkgs", 1239 - "rev": "e06158e58f3adee28b139e9c2bcfcc41f8625b46", 1240 "type": "github" 1241 }, 1242 "original": { ··· 1248 }, 1249 "utils": { 1250 "inputs": { 1251 - "systems": "systems_2" 1252 }, 1253 "locked": { 1254 "lastModified": 1701680307, ··· 1314 "original": { 1315 "owner": "supercollider-quarks", 1316 "repo": "vowel", 1317 "type": "github" 1318 } 1319 }
··· 10 "systems": "systems" 11 }, 12 "locked": { 13 + "lastModified": 1747575206, 14 + "narHash": "sha256-NwmAFuDUO/PFcgaGGr4j3ozG9Pe5hZ/ogitWhY+D81k=", 15 "owner": "ryantm", 16 "repo": "agenix", 17 + "rev": "4835b1dc898959d8547a871ef484930675cb47f1", 18 "type": "github" 19 }, 20 "original": { ··· 46 "ref": "main", 47 "type": "git", 48 "url": "ssh://gitea@git.sealight.xyz/aynish/basant" 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 }, 74 "brew-src": { ··· 134 ] 135 }, 136 "locked": { 137 + "lastModified": 1748065210, 138 + "narHash": "sha256-dFqlLNW6UW19m0vg5FHWLH2G2LGkqYyPs/4YqfoZMoM=", 139 "owner": "LnL7", 140 "repo": "nix-darwin", 141 + "rev": "acd6aa5a9065c6695212be313e06f08f7184cb25", 142 "type": "github" 143 }, 144 "original": { ··· 150 }, 151 "deploy-rs": { 152 "inputs": { 153 + "flake-compat": "flake-compat_2", 154 "nixpkgs": [ 155 "nixpkgs" 156 ], ··· 208 ] 209 }, 210 "locked": { 211 + "lastModified": 1747742835, 212 + "narHash": "sha256-kYL4GCwwznsypvsnA20oyvW8zB/Dvn6K5G/tgMjVMT4=", 213 "owner": "nix-community", 214 "repo": "disko", 215 + "rev": "df522e787fdffc4f32ed3e1fca9ed0968a384d62", 216 "type": "github" 217 }, 218 "original": { ··· 264 "flake-compat_2": { 265 "flake": false, 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": { 283 "lastModified": 1641205782, 284 "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", 285 "owner": "edolstra", ··· 293 "type": "github" 294 } 295 }, 296 + "flake-compat_4": { 297 "flake": false, 298 "locked": { 299 "lastModified": 1696426674, ··· 309 "type": "github" 310 } 311 }, 312 + "flake-compat_5": { 313 + "flake": false, 314 + "locked": { 315 + "lastModified": 1733328505, 316 + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", 317 + "owner": "edolstra", 318 + "repo": "flake-compat", 319 + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", 320 + "type": "github" 321 + }, 322 + "original": { 323 + "owner": "edolstra", 324 + "repo": "flake-compat", 325 + "type": "github" 326 + } 327 + }, 328 "flake-parts": { 329 "inputs": { 330 "nixpkgs-lib": [ ··· 380 } 381 }, 382 "flake-utils_2": { 383 + "inputs": { 384 + "systems": "systems_2" 385 + }, 386 + "locked": { 387 + "lastModified": 1726560853, 388 + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", 389 + "owner": "numtide", 390 + "repo": "flake-utils", 391 + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", 392 + "type": "github" 393 + }, 394 + "original": { 395 + "owner": "numtide", 396 + "repo": "flake-utils", 397 + "type": "github" 398 + } 399 + }, 400 + "flake-utils_3": { 401 "locked": { 402 "lastModified": 1667395993, 403 "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", ··· 412 "type": "github" 413 } 414 }, 415 + "flake-utils_4": { 416 + "inputs": { 417 + "systems": "systems_4" 418 + }, 419 + "locked": { 420 + "lastModified": 1731533236, 421 + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 422 + "owner": "numtide", 423 + "repo": "flake-utils", 424 + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 425 + "type": "github" 426 + }, 427 + "original": { 428 + "owner": "numtide", 429 + "repo": "flake-utils", 430 + "type": "github" 431 + } 432 + }, 433 "gitignore": { 434 "inputs": { 435 "nixpkgs": [ ··· 454 }, 455 "grasp": { 456 "inputs": { 457 + "flake-utils": "flake-utils_3", 458 "nixpkgs": [ 459 "nixpkgs" 460 ] ··· 476 }, 477 "hardware": { 478 "locked": { 479 + "lastModified": 1747900541, 480 + "narHash": "sha256-dn64Pg9xLETjblwZs9Euu/SsjW80pd6lr5qSiyLY1pg=", 481 "owner": "nixos", 482 "repo": "nixos-hardware", 483 + "rev": "11f2d9ea49c3e964315215d6baa73a8d42672f06", 484 "type": "github" 485 }, 486 "original": { ··· 550 "homebrew-cask": { 551 "flake": false, 552 "locked": { 553 + "lastModified": 1748113418, 554 + "narHash": "sha256-lX4WosoMtusSD4GRDRvzwQwzLJUetg5HEWlMcJ4IQmI=", 555 "owner": "homebrew", 556 "repo": "homebrew-cask", 557 + "rev": "ed1a02852e1c4a5fab4aef776082ca89cd70f09a", 558 "type": "github" 559 }, 560 "original": { ··· 566 "homebrew-core": { 567 "flake": false, 568 "locked": { 569 + "lastModified": 1748120562, 570 + "narHash": "sha256-b4Qd9nAVW8yMqZ5T9B7HfSrDLCrtsw07D98/NWz2xsE=", 571 "owner": "homebrew", 572 "repo": "homebrew-core", 573 + "rev": "b26cd07a06b15767688137a68461cb34fe985efa", 574 "type": "github" 575 }, 576 "original": { ··· 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": { ··· 703 "nix-matrix-appservices": { 704 "inputs": { 705 "devshell": "devshell", 706 + "flake-compat": "flake-compat_3", 707 "nixlib": "nixlib", 708 "nixpkgs": "nixpkgs_3" 709 }, ··· 738 }, 739 "nixos-hardware": { 740 "locked": { 741 + "lastModified": 1747900541, 742 + "narHash": "sha256-dn64Pg9xLETjblwZs9Euu/SsjW80pd6lr5qSiyLY1pg=", 743 "owner": "NixOS", 744 "repo": "nixos-hardware", 745 + "rev": "11f2d9ea49c3e964315215d6baa73a8d42672f06", 746 "type": "github" 747 }, 748 "original": { ··· 827 }, 828 "nixpkgs_4": { 829 "locked": { 830 + "lastModified": 1747862697, 831 + "narHash": "sha256-U4HaNZ1W26cbOVm0Eb5OdGSnfQVWQKbLSPrSSa78KC0=", 832 "owner": "nixos", 833 "repo": "nixpkgs", 834 + "rev": "2baa12ff69913392faf0ace833bc54bba297ea95", 835 "type": "github" 836 }, 837 "original": { ··· 843 }, 844 "nixpkgs_5": { 845 "locked": { 846 + "lastModified": 1748026106, 847 + "narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=", 848 "owner": "nixos", 849 "repo": "nixpkgs", 850 + "rev": "063f43f2dbdef86376cc29ad646c45c46e93234c", 851 "type": "github" 852 }, 853 "original": { ··· 928 "treefmt-nix": "treefmt-nix" 929 }, 930 "locked": { 931 + "lastModified": 1748119613, 932 + "narHash": "sha256-BvOMqlTgRbz8ldRcaf7OTKIRsGlOw4AssphiZGLd0fo=", 933 "owner": "nix-community", 934 "repo": "NUR", 935 + "rev": "48380b491e6415284292516fe919d78207969e30", 936 "type": "github" 937 }, 938 "original": { ··· 970 ] 971 }, 972 "locked": { 973 + "lastModified": 1738465265, 974 + "narHash": "sha256-v8nD/2gq8/mILEJqvWgx1q7Fc1purQvV3/WZLQ/t/wc=", 975 "ref": "main", 976 + "rev": "115f8af750c0d4b6a8c6f97119b12d7e3eb20c6a", 977 + "revCount": 1552, 978 "type": "git", 979 "url": "ssh://gitea@git.sealight.xyz/aynish/kitaab" 980 }, ··· 986 }, 987 "pre-commit-nix": { 988 "inputs": { 989 + "flake-compat": "flake-compat_4", 990 "gitignore": "gitignore", 991 "nixpkgs": "nixpkgs_8", 992 "nixpkgs-stable": "nixpkgs-stable" ··· 1050 "inputs": { 1051 "agenix": "agenix", 1052 "basant": "basant", 1053 + "breezy": "breezy", 1054 "darwin": "darwin_2", 1055 "deploy-rs": "deploy-rs", 1056 "disko": "disko", ··· 1072 "sourcegraph-src-cli-cask": "sourcegraph-src-cli-cask", 1073 "tidalcycles": "tidalcycles", 1074 "unstable": "unstable", 1075 + "vimwikicli": "vimwikicli", 1076 + "xr-linux": "xr-linux" 1077 } 1078 }, 1079 "rust-overlay": { ··· 1083 ] 1084 }, 1085 "locked": { 1086 + "lastModified": 1748054080, 1087 + "narHash": "sha256-rwFiLLNCwkj9bqePtH1sMqzs1xmohE0Ojq249piMzF4=", 1088 "owner": "oxalica", 1089 "repo": "rust-overlay", 1090 + "rev": "2221d8d53c128beb69346fa3ab36da3f19bb1691", 1091 "type": "github" 1092 }, 1093 "original": { ··· 1179 "sourcegraph-src-cli-cask": { 1180 "flake": false, 1181 "locked": { 1182 + "lastModified": 1747940755, 1183 + "narHash": "sha256-rS+LEcZKOoRN3bH+aZIV1Y4AlPR8dWosiRAA8Q1itBs=", 1184 "owner": "sourcegraph", 1185 "repo": "homebrew-src-cli", 1186 + "rev": "34bb40706f3f9641958db65c5c77a1db51140b3d", 1187 "type": "github" 1188 }, 1189 "original": { ··· 1224 } 1225 }, 1226 "systems_2": { 1227 + "locked": { 1228 + "lastModified": 1681028828, 1229 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 1230 + "owner": "nix-systems", 1231 + "repo": "default", 1232 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 1233 + "type": "github" 1234 + }, 1235 + "original": { 1236 + "owner": "nix-systems", 1237 + "repo": "default", 1238 + "type": "github" 1239 + } 1240 + }, 1241 + "systems_3": { 1242 + "locked": { 1243 + "lastModified": 1681028828, 1244 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 1245 + "owner": "nix-systems", 1246 + "repo": "default", 1247 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 1248 + "type": "github" 1249 + }, 1250 + "original": { 1251 + "owner": "nix-systems", 1252 + "repo": "default", 1253 + "type": "github" 1254 + } 1255 + }, 1256 + "systems_4": { 1257 "locked": { 1258 "lastModified": 1681028828, 1259 "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", ··· 1355 }, 1356 "unstable": { 1357 "locked": { 1358 + "lastModified": 1748026106, 1359 + "narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=", 1360 "owner": "nixos", 1361 "repo": "nixpkgs", 1362 + "rev": "063f43f2dbdef86376cc29ad646c45c46e93234c", 1363 "type": "github" 1364 }, 1365 "original": { ··· 1371 }, 1372 "utils": { 1373 "inputs": { 1374 + "systems": "systems_3" 1375 }, 1376 "locked": { 1377 "lastModified": 1701680307, ··· 1437 "original": { 1438 "owner": "supercollider-quarks", 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", 1463 "type": "github" 1464 } 1465 }
+14 -21
flake.nix
··· 1 { 2 - description = "Your new nix config"; 3 4 inputs = { 5 # Nixpkgs 6 nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; 7 unstable.url = "github:nixos/nixpkgs/nixos-unstable"; 8 nixos-hardware.url = "github:NixOS/nixos-hardware/master"; 9 10 # Home manager 11 home-manager.url = "github:nix-community/home-manager/release-25.05"; ··· 184 # ]; 185 overlays = [ 186 agenix.overlays.default 187 tidalcycles.overlays.default # needed for nvim which comes pre-installed lol 188 ]; 189 }); ··· 270 agenix.nixosModules.age 271 self.nixosModules.backup 272 self.nixosModules.wireguard 273 nixos-hardware.nixosModules.lenovo-thinkpad-x270 274 home-manager.nixosModules.home-manager 275 { ··· 291 agenix.nixosModules.age 292 self.nixosModules.backup 293 self.nixosModules.wireguard 294 # self.nixosModules.microbin 295 disko.nixosModules.disko 296 ]; 297 }; 298 ··· 315 ]; 316 }; 317 318 - cube = nixpkgs.lib.nixosSystem rec { 319 - specialArgs = { inherit inputs self; }; 320 - system = "x86_64-linux"; 321 - pkgs = litePkgsFor.${system}; 322 - modules = [ 323 - ./hosts/cube 324 - agenix.nixosModules.age 325 - self.nixosModules.backup 326 - self.nixosModules.wireguard 327 - basant.nixosModule 328 - ]; 329 - }; 330 - 331 box = nixpkgs.lib.nixosSystem rec { 332 specialArgs = { inherit inputs self; }; 333 system = "x86_64-linux"; ··· 338 self.nixosModules.backup 339 self.nixosModules.wireguard 340 self.nixosModules.gonic 341 self.nixosModules.wallabag 342 self.nixosModules.ulogger-server 343 grasp.nixosModule ··· 390 hostname = "mossnet.lan"; 391 autoRollback = false; 392 magicRollback = false; 393 profiles.system = { 394 user = "root"; 395 path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.box; ··· 410 profiles.system = { 411 user = "root"; 412 path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.helix; 413 - }; 414 - }; 415 - cube = { 416 - hostname = "lakhwara.com"; 417 - profiles.system = { 418 - user = "root"; 419 - path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.cube; 420 }; 421 }; 422 };
··· 1 { 2 + description = "Sealight NixOS Config"; 3 4 inputs = { 5 # Nixpkgs 6 nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; 7 unstable.url = "github:nixos/nixpkgs/nixos-unstable"; 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"; 12 13 # Home manager 14 home-manager.url = "github:nix-community/home-manager/release-25.05"; ··· 187 # ]; 188 overlays = [ 189 agenix.overlays.default 190 + self.overlays.additions 191 + self.overlays.modifications 192 tidalcycles.overlays.default # needed for nvim which comes pre-installed lol 193 ]; 194 }); ··· 275 agenix.nixosModules.age 276 self.nixosModules.backup 277 self.nixosModules.wireguard 278 + self.nixosModules.wallabag 279 nixos-hardware.nixosModules.lenovo-thinkpad-x270 280 home-manager.nixosModules.home-manager 281 { ··· 297 agenix.nixosModules.age 298 self.nixosModules.backup 299 self.nixosModules.wireguard 300 + basant.nixosModule 301 # self.nixosModules.microbin 302 disko.nixosModules.disko 303 + { 304 + nixpkgs.flake.setNixPath = false; 305 + nixpkgs.flake.setFlakeRegistry = false; 306 + } 307 ]; 308 }; 309 ··· 326 ]; 327 }; 328 329 box = nixpkgs.lib.nixosSystem rec { 330 specialArgs = { inherit inputs self; }; 331 system = "x86_64-linux"; ··· 336 self.nixosModules.backup 337 self.nixosModules.wireguard 338 self.nixosModules.gonic 339 + self.nixosModules.gpodder2go 340 self.nixosModules.wallabag 341 self.nixosModules.ulogger-server 342 grasp.nixosModule ··· 389 hostname = "mossnet.lan"; 390 autoRollback = false; 391 magicRollback = false; 392 + remoteBuild = true; 393 profiles.system = { 394 user = "root"; 395 path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.box; ··· 410 profiles.system = { 411 user = "root"; 412 path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.helix; 413 }; 414 }; 415 };
+1 -2
home/core/default.nix
··· 1 { self, pkgs, ... }: 2 { 3 imports = [ 4 - # ../profiles/nvim 5 ../profiles/cli 6 ../profiles/direnv 7 ../profiles/git 8 - ../profiles/task 9 ]; 10 home.stateVersion = "22.05"; 11 }
··· 1 { self, pkgs, ... }: 2 { 3 imports = [ 4 + ../profiles/nvim 5 ../profiles/cli 6 ../profiles/direnv 7 ../profiles/git 8 ]; 9 home.stateVersion = "22.05"; 10 }
+1
home/gui/default.nix
··· 2 { 3 imports = [ 4 ../core 5 ../profiles/firefox 6 ../profiles/desktop 7 ../profiles/email
··· 2 { 3 imports = [ 4 ../core 5 + ../profiles/nvim 6 ../profiles/firefox 7 ../profiles/desktop 8 ../profiles/email
+17 -4
home/profiles/cli/default.nix
··· 9 dosfstools 10 # git 11 git-machete 12 asciinema 13 bottom 14 gptfdisk ··· 35 iftop 36 wget 37 curl 38 eza 39 bat 40 fd 41 # ncdu 42 duf 43 trash-cli 44 nix-index ··· 138 autosuggestion.enable = false; 139 140 initExtra = '' 141 - bindkey -v 142 autopair-init 143 ''; 144 sessionVariables = { ··· 226 227 # modern cli tools 228 ls = "eza --icons"; 229 - l = "eza -l --icons"; 230 la = "eza -la --icons"; 231 tree = "ls --tree --icons"; 232 cat = "bat"; ··· 238 make-secret = "< /dev/urandom \\tr -dc _A-Za-z0-9 | head -c \${1:-32};echo;"; 239 240 # task warrior 241 - # TODO: make blocked a context? 242 t = "task -BLOCKED -idea -backlog"; 243 tt = "taskwarrior-tui -r list"; 244 ti = "task +idea"; 245 tb = "task +backlog list"; 246 ttb = "taskwarrior-tui -r backlog"; 247 tr = "task newest limit:page"; 248 - tw = "task +wait"; 249 ta = "task add"; 250 tai = "task add +idea"; 251 tn = "task-note";
··· 9 dosfstools 10 # git 11 git-machete 12 + git-spice 13 + jujitsu 14 asciinema 15 bottom 16 gptfdisk ··· 37 iftop 38 wget 39 curl 40 + <<<<<<< HEAD 41 eza 42 bat 43 fd 44 # ncdu 45 + ======= 46 + eza 47 + bat 48 + fd 49 + ncdu 50 + du-dust 51 + # dia-cli 52 + >>>>>>> nvim-rewrite 53 duf 54 trash-cli 55 nix-index ··· 149 autosuggestion.enable = false; 150 151 initExtra = '' 152 autopair-init 153 ''; 154 sessionVariables = { ··· 236 237 # modern cli tools 238 ls = "eza --icons"; 239 + l = "esa -l --icons"; 240 la = "eza -la --icons"; 241 tree = "ls --tree --icons"; 242 cat = "bat"; ··· 248 make-secret = "< /dev/urandom \\tr -dc _A-Za-z0-9 | head -c \${1:-32};echo;"; 249 250 # task warrior 251 t = "task -BLOCKED -idea -backlog"; 252 + tw = "t rc.context:work"; 253 + # TODO find a reasonable way to manage this from a non-nix managed file in ~/.task/context or something 254 + # we can do something like task rc.context:$(cat ~/.task/context) to read context 255 + # and write a little script make-context = cat $@ > ~/.task/context or something 256 tt = "taskwarrior-tui -r list"; 257 ti = "task +idea"; 258 tb = "task +backlog list"; 259 ttb = "taskwarrior-tui -r backlog"; 260 tr = "task newest limit:page"; 261 + twait = "task +wait"; 262 ta = "task add"; 263 tai = "task add +idea"; 264 tn = "task-note";
home/profiles/desktop/Xresources
+2 -2
home/profiles/desktop/bspwmrc
··· 6 # esac 7 8 export MONITOR=$(xrandr -q | grep primary | cut -d' ' -f1) 9 - export MONITORS=( $(xrandr -q | grep ' connected' | cut -d' ' -f1) ) 10 MONITOR=${MONITOR:-${MONITORS[0]}} 11 12 # Only have workspaces for primary monitor ··· 26 bspc config focused_border_color "#bd93f9" 27 bspc config presel_feedback_color "#bd93f9" 28 29 - bspc config split_ratio 0.71 30 31 # Extra padding for polybar 32 bspc config -m primary top_padding 34
··· 6 # esac 7 8 export MONITOR=$(xrandr -q | grep primary | cut -d' ' -f1) 9 + export MONITORS=($(xrandr -q | grep ' connected' | cut -d' ' -f1)) 10 MONITOR=${MONITOR:-${MONITORS[0]}} 11 12 # Only have workspaces for primary monitor ··· 26 bspc config focused_border_color "#bd93f9" 27 bspc config presel_feedback_color "#bd93f9" 28 29 + bspc config split_ratio 0.71 30 31 # Extra padding for polybar 32 bspc config -m primary top_padding 34
+1 -4
home/profiles/desktop/default.nix
··· 99 ".local/bin/mpv-ify".source = ./bin/mpv-ify; 100 ".local/bin/bspswallow".source = ./bin/bspswallow; 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 # ".local/bin/hotplug-monitor.sh".source = ./bin/hotplug-monitor.sh; 106 }; 107 ··· 123 124 qt = { 125 enable = true; 126 - platformTheme = "gtk"; 127 style = { name = "qt5ct-style"; }; 128 }; 129
··· 99 ".local/bin/mpv-ify".source = ./bin/mpv-ify; 100 ".local/bin/bspswallow".source = ./bin/bspswallow; 101 ".config/bspwm/terminals".text = "Kitty"; 102 # ".local/bin/hotplug-monitor.sh".source = ./bin/hotplug-monitor.sh; 103 }; 104 ··· 120 121 qt = { 122 enable = true; 123 + platformTheme.name = "gtk"; 124 style = { name = "qt5ct-style"; }; 125 }; 126
home/profiles/desktop/polybar/run.sh
+1 -1
home/profiles/email/default.nix
··· 175 bind editor ^T complete 176 177 # Press A to archive 178 - macro index,pager A "<clear-flag>N<save-message>=/Archive" "mark message as Archived" 179 # Press C to add contact to Khard address book 180 macro index,pager C \ 181 "<pipe-message>khard add-email<return>" \
··· 175 bind editor ^T complete 176 177 # Press A to archive 178 + macro index,pager A "<clear-flag><save-message>=/Archive" "mark message as Archived" 179 # Press C to add contact to Khard address book 180 macro index,pager C \ 181 "<pipe-message>khard add-email<return>" \
+1 -1
home/profiles/firefox/default.nix
··· 21 extensions = with pkgs.nur.repos.rycee.firefox-addons; [ 22 # Find extensions: https://github.com/nix-community/nur-combined/blob/master/repos/rycee/pkgs/firefox-addons/generated-firefox-addons.nix 23 ublock-origin 24 - wallabagger 25 # tree-style-tab 26 tridactyl 27 promnesia
··· 21 extensions = with pkgs.nur.repos.rycee.firefox-addons; [ 22 # Find extensions: https://github.com/nix-community/nur-combined/blob/master/repos/rycee/pkgs/firefox-addons/generated-firefox-addons.nix 23 ublock-origin 24 + # wallabagger 25 # tree-style-tab 26 tridactyl 27 promnesia
+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())
+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)
+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})
+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
+133 -4
home/profiles/nvim/default.nix
··· 1 { pkgs, ... }: 2 { 3 home.sessionVariables.EDITOR = "nvim"; 4 home.shellAliases = { 5 k = "cd ~/kitaab/vimwiki; vim -c :VimwikiIndex; cd $OLDPWD"; 6 }; 7 8 programs.neovim = { 9 enable = true; 10 - package = pkgs.unstable.neovim-unwrapped; 11 extraPackages = with pkgs; [ 12 - # used for Cody 13 - nodejs 14 ]; 15 16 - vimAlias = true; 17 }; 18 } 19
··· 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 4 { 5 home.sessionVariables.EDITOR = "nvim"; 6 home.shellAliases = { 7 + vim = "nvim"; 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"; 14 }; 15 16 + home.file.".config/nvim".source = ./config; 17 + 18 programs.neovim = { 19 enable = true; 20 extraPackages = with pkgs; [ 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 40 + unstable.starpls-bin 41 ]; 42 43 + plugins = with pkgs.unstable.vimPlugins; 44 + [ 45 + #hotpot 46 + hotpot-nvim 47 + nvim-navic 48 + # ui 49 + lualine-nvim 50 + neo-tree-nvim 51 + fzf-vim 52 + vim-devicons 53 + nvim-web-devicons 54 + telescope-nvim 55 + plenary-nvim 56 + FTerm-nvim 57 + barbar-nvim 58 + neovim-ayu 59 + rainbow_parentheses-vim 60 + auto-session 61 + which-key-nvim 62 + aerial-nvim 63 + todo-comments-nvim 64 + indent-blankline-nvim 65 + nvim-parinfer 66 + 67 + # Tree sitter 68 + (nvim-treesitter.withPlugins (p: [ 69 + p.nix 70 + p.clojure 71 + p.fennel 72 + p.lua 73 + p.html 74 + p.css 75 + p.regex 76 + p.supercollider 77 + p.beancount 78 + p.markdown_inline 79 + p.markdown 80 + p.glsl 81 + p.yaml 82 + p.toml 83 + p.dockerfile 84 + p.json 85 + p.go 86 + p.svelte 87 + p.javascript 88 + p.janet-simple 89 + p.starlark 90 + ])) 91 + nvim-treesitter-context 92 + nvim-treesitter-textobjects 93 + 94 + # TODO 95 + undotree 96 + marks-nvim 97 + 98 + # language 99 + vim-nix 100 + emmet-vim 101 + csv-vim 102 + direnv-vim 103 + vim-svelte 104 + # conjure 105 + 106 + # kitaab stuff 107 + vimwiki 108 + vim-zettel 109 + hologram-nvim 110 + zk-nvim 111 + 112 + # lsp stuff 113 + nvim-lspconfig 114 + nvim-cmp 115 + cmp-nvim-lsp 116 + cmp-treesitter 117 + # cmp-conjure 118 + cmp-buffer 119 + cmp-path 120 + cmp-spell 121 + lspkind-nvim 122 + conform-nvim 123 + none-ls-nvim 124 + mini-nvim 125 + # nvim-lspfuzzy 126 + 127 + # git stuff 128 + vim-fugitive 129 + gitsigns-nvim 130 + fzf-checkout-vim 131 + 132 + # Clojure stuff 133 + # conjure 134 + vim-sexp 135 + vim-sexp-mappings-for-regular-people 136 + fennel-vim 137 + 138 + # nvim-luapad 139 + # scnvim 140 + flash-nvim 141 + vim-beancount 142 + ] # ++ [ pkgs.vimPlugins.vim-tidal ]; 143 + # withPython3 = true; 144 + # extraPython3Packages = pkgs: with pkgs; [ tasklib six ]; 145 + # vimAlias = true; 146 }; 147 } 148
home/profiles/task/bin/set-backlog.sh
home/profiles/task/bin/set-focus.sh
+5
home/profiles/task/taskrc
··· 82 report.every.labels=ID,Active,Deps,P,Project,Tag,Recur,S,Due,Until,Description 83 report.every.columns=id,start.age,depends,priority,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description 84 85 # Urgency 86 urgency.user.project.wait.coefficient=-10.0 87 urgency.user.project.craft.coefficient=1.9
··· 82 report.every.labels=ID,Active,Deps,P,Project,Tag,Recur,S,Due,Until,Description 83 report.every.columns=id,start.age,depends,priority,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description 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 + 90 # Urgency 91 urgency.user.project.wait.coefficient=-10.0 92 urgency.user.project.craft.coefficient=1.9
+1 -1
hosts/box/configuration.nix
··· 91 sound.enable = false; 92 93 programs.gnupg.agent.enable = true; 94 - programs.gnupg.agent.pinentryFlavor = "curses"; 95 programs.gnupg.agent.enableSSHSupport = true; 96 97 # This value determines the NixOS release with which your system is to be
··· 91 sound.enable = false; 92 93 programs.gnupg.agent.enable = true; 94 + programs.gnupg.agent.pinentryPackage = pkgs.pinentry-curses; 95 programs.gnupg.agent.enableSSHSupport = true; 96 97 # This value determines the NixOS release with which your system is to be
+7 -5
hosts/box/default.nix
··· 7 ../profiles/taskd 8 ../profiles/shaarli 9 ../profiles/dns 10 - ../profiles/monitoring 11 ../profiles/nfs 12 ../profiles/gonic 13 - ../profiles/headphones 14 ../profiles/radicale 15 - ../profiles/seafile 16 ../profiles/syncthing 17 ../profiles/dhyan 18 ../profiles/calibre ··· 22 ../profiles/grasp 23 # ../profiles/archivebox 24 # ../profiles/woodpecker-agent 25 - ../profiles/jellyfin 26 ../profiles/ulogger-server 27 - ../profiles/photoprism 28 ]; 29 30 # Backups
··· 7 ../profiles/taskd 8 ../profiles/shaarli 9 ../profiles/dns 10 + # ../profiles/monitoring 11 ../profiles/nfs 12 ../profiles/gonic 13 + # ../profiles/headphones # TODO broken on 23.11, see: https://github.com/rembo10/headphones/issues/3320 14 ../profiles/radicale 15 + # ../profiles/seafile # waiting for https://github.com/NixOS/nixpkgs/pull/249523 to be merged 16 ../profiles/syncthing 17 ../profiles/dhyan 18 ../profiles/calibre ··· 22 ../profiles/grasp 23 # ../profiles/archivebox 24 # ../profiles/woodpecker-agent 25 + # ../profiles/jellyfin 26 ../profiles/ulogger-server 27 + ../profiles/photoprism # Replace with immich 28 + ../profiles/gpodder 29 + #../profiles/postgres_upgrade_script 30 ]; 31 32 # Backups
+1 -1
hosts/curve/configuration.nix
··· 36 37 sound.enable = true; 38 39 - services.xserver.libinput.enable = true; 40 }
··· 36 37 sound.enable = true; 38 39 + services.libinput.enable = true; 40 }
+29 -12
hosts/curve/default.nix
··· 1 - { self, pkgs, ... }: 2 - { 3 imports = [ 4 ./configuration.nix 5 ../users/anish ··· 17 # ../profiles/mount-mossnet 18 ]; 19 20 # import profiling tools 21 programs.systemtap.enable = true; 22 23 # Speed up boot by removing dependency on network 24 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"] 27 }; 28 29 programs.gnupg.agent.enable = true; 30 - programs.gnupg.agent.pinentryFlavor = "gnome3"; 31 32 fileSystems."/mnt/ftp" = { 33 device = "192.168.1.240:/home/ftp"; ··· 58 59 # lazy enable of ports necessary for KDE connect which is installed via cli home profile (for some reason?) 60 networking.firewall = { 61 - allowedTCPPortRanges = [{ from = 1714; to = 1764; }]; 62 - allowedUDPPortRanges = [{ from = 1714; to = 1764; }]; 63 }; 64 65 age.secrets.curve-wg.file = "${self}/secrets/curve-wg.age"; ··· 75 mossnet.backup = { 76 enable = true; 77 name = "curve"; 78 - paths = [ 79 - "/home/anish/usr" 80 - "/home/anish/.ssh" 81 - ]; 82 }; 83 84 # enable adb ··· 87 #virtualisation.docker.enable = true; 88 boot.blacklistedKernelModules = [ "qcserial" ]; 89 # Used for packer Capsul 90 - users.users.anish.extraGroups = [ "adbusers" "wheel" "plugdev" "libvertd" ]; 91 virtualisation.libvirtd.enable = true; 92 hardware.keyboard.zsa.enable = true; 93 services.udev.extraRules = ''
··· 1 + { self, pkgs, ... }: { 2 imports = [ 3 ./configuration.nix 4 ../users/anish ··· 16 # ../profiles/mount-mossnet 17 ]; 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 + 26 # import profiling tools 27 programs.systemtap.enable = true; 28 29 + virtualisation.docker.enable = true; 30 + virtualisation.docker.storageDriver = "btrfs"; 31 + environment.systemPackages = with pkgs; [ docker-compose ]; 32 + 33 # Speed up boot by removing dependency on network 34 systemd = { 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"] 39 }; 40 41 programs.gnupg.agent.enable = true; 42 + programs.gnupg.agent.pinentryPackage = pkgs.pinentry-gnome3; 43 44 fileSystems."/mnt/ftp" = { 45 device = "192.168.1.240:/home/ftp"; ··· 70 71 # lazy enable of ports necessary for KDE connect which is installed via cli home profile (for some reason?) 72 networking.firewall = { 73 + allowedTCPPorts = [ 22 ]; # allow ssh 74 + allowedTCPPortRanges = [{ 75 + from = 1714; 76 + to = 1764; 77 + }]; 78 + allowedUDPPortRanges = [{ 79 + from = 1714; 80 + to = 1764; 81 + }]; 82 }; 83 84 age.secrets.curve-wg.file = "${self}/secrets/curve-wg.age"; ··· 94 mossnet.backup = { 95 enable = true; 96 name = "curve"; 97 + paths = [ "/home/anish/usr" "/home/anish/.ssh" ]; 98 }; 99 100 # enable adb ··· 103 #virtualisation.docker.enable = true; 104 boot.blacklistedKernelModules = [ "qcserial" ]; 105 # Used for packer Capsul 106 + users.users.anish.extraGroups = 107 + [ "adbusers" "wheel" "plugdev" "libvertd" "docker" ]; 108 virtualisation.libvirtd.enable = true; 109 hardware.keyboard.zsa.enable = true; 110 services.udev.extraRules = ''
+12 -16
hosts/curve/hardware-configuration.nix
··· 5 6 { 7 imports = 8 - [ 9 - (modulesPath + "/installer/scan/not-detected.nix") 10 ]; 11 12 - boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" "rtsx_pci_sdmmc" ]; 13 boot.initrd.kernelModules = [ "dm-snapshot" ]; 14 boot.kernelModules = [ "kvm-intel" ]; 15 boot.extraModulePackages = [ ]; 16 17 - fileSystems."/boot" = 18 - { 19 - device = "/dev/disk/by-uuid/2C41-3DAA"; 20 - fsType = "vfat"; 21 - }; 22 - 23 fileSystems."/" = 24 - { 25 - device = "/dev/disk/by-uuid/a4ae2855-10b9-49f3-adb0-acd82b74eeb9"; 26 fsType = "btrfs"; 27 options = [ "subvol=root" ]; 28 }; 29 30 fileSystems."/home" = 31 - { 32 - device = "/dev/disk/by-uuid/a4ae2855-10b9-49f3-adb0-acd82b74eeb9"; 33 fsType = "btrfs"; 34 options = [ "subvol=home" ]; 35 }; 36 37 swapDevices = 38 - [{ device = "/dev/disk/by-uuid/23658926-6ffa-42dc-8915-a6479c385e0b"; }]; 39 40 # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 41 # (the default) this is the recommended approach. When using systemd-networkd it's ··· 46 # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true; 47 48 nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 49 - powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; 50 - # hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 51 }
··· 5 6 { 7 imports = 8 + [ (modulesPath + "/installer/scan/not-detected.nix") 9 ]; 10 11 + boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; 12 boot.initrd.kernelModules = [ "dm-snapshot" ]; 13 boot.kernelModules = [ "kvm-intel" ]; 14 boot.extraModulePackages = [ ]; 15 16 fileSystems."/" = 17 + { device = "/dev/disk/by-uuid/e1268753-4f18-4e6f-8edb-d4724ad8eb4a"; 18 fsType = "btrfs"; 19 options = [ "subvol=root" ]; 20 }; 21 22 fileSystems."/home" = 23 + { device = "/dev/disk/by-uuid/e1268753-4f18-4e6f-8edb-d4724ad8eb4a"; 24 fsType = "btrfs"; 25 options = [ "subvol=home" ]; 26 }; 27 28 + fileSystems."/boot" = 29 + { device = "/dev/disk/by-uuid/8244-A184"; 30 + fsType = "vfat"; 31 + }; 32 + 33 swapDevices = 34 + [ { device = "/dev/disk/by-uuid/e220fea6-cf3b-4687-bfe1-9cf6d3ba57f7"; } 35 + ]; 36 37 # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 38 # (the default) this is the recommended approach. When using systemd-networkd it's ··· 43 # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true; 44 45 nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 46 + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 47 }
+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 # ../profiles/mount-mossnet 12 ../profiles/freshrss 13 ../profiles/microbin 14 ]; 15 16 # Capsul specific ··· 27 privateKeyFile = "/run/agenix/helix-wg"; 28 }; 29 30 - services.postgresql.package = pkgs.postgresql_11; 31 services.postgresqlBackup = { 32 # TODO needs working wireguard to box 33 enable = false; 34 - databases = [ "gitea" "freshrss" "woodpecker" ]; 35 location = "/mnt/two/postgres"; 36 }; 37 ··· 41 paths = [ 42 "/var/lib/gitea" 43 "/var/lib/freshrss" 44 - "/var/lib/woodpecker" 45 "/var/lib/microbin" 46 ]; 47
··· 11 # ../profiles/mount-mossnet 12 ../profiles/freshrss 13 ../profiles/microbin 14 + ../profiles/site 15 + 16 + # ../profiles/postgres_upgrade_script 17 ]; 18 19 # Capsul specific ··· 30 privateKeyFile = "/run/agenix/helix-wg"; 31 }; 32 33 + services.postgresql.package = pkgs.postgresql_15; 34 services.postgresqlBackup = { 35 # TODO needs working wireguard to box 36 enable = false; 37 + databases = [ "gitea" "freshrss" ]; # "woodpecker" 38 location = "/mnt/two/postgres"; 39 }; 40 ··· 44 paths = [ 45 "/var/lib/gitea" 46 "/var/lib/freshrss" 47 + # "/var/lib/woodpecker" 48 "/var/lib/microbin" 49 ]; 50
-5
hosts/lituus/hardware-configuration.nix
··· 20 fsType = "btrfs"; 21 }; 22 23 - fileSystems."/storage" = 24 - { device = "/dev/disk/by-uuid/c2181608-cbb0-40ab-b62b-158cdc9b9300"; 25 - fsType = "btrfs"; 26 - }; 27 - 28 swapDevices = [ ]; 29 30 hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
··· 20 fsType = "btrfs"; 21 }; 22 23 swapDevices = [ ]; 24 25 hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+1 -1
hosts/profiles/core/default.nix
··· 32 }; 33 34 environment.systemPackages = with pkgs; [ 35 - # pinentry_gnome 36 cached-nix-shell 37 ]; 38
··· 32 }; 33 34 environment.systemPackages = with pkgs; [ 35 + pinentry-gnome3 36 cached-nix-shell 37 ]; 38
+2 -3
hosts/profiles/desktop/default.nix
··· 77 feh 78 sxiv 79 xkblayout-state 80 - vcv-rack 81 zathura 82 calibre 83 mpv ··· 87 rofi 88 rofimoji 89 rofi-calc 90 - # eww 91 obs-studio 92 lightdm 93 dunst ··· 121 night = 3700; 122 }; 123 }; 124 xserver = { 125 enable = false; 126 xkb.layout = "us,dvorak"; 127 desktopManager.wallpaper.mode = "fill"; 128 desktopManager.gnome.enable = true; 129 displayManager = { 130 - # gdm.enable = true; 131 # defaultSession = "none+bspwm"; 132 sessionCommands = '' 133 ${pkgs.xorg.xrdb}/bin/xrdb -merge <<EOF
··· 77 feh 78 sxiv 79 xkblayout-state 80 zathura 81 calibre 82 mpv ··· 86 rofi 87 rofimoji 88 rofi-calc 89 obs-studio 90 lightdm 91 dunst ··· 119 night = 3700; 120 }; 121 }; 122 + displayManager.defaultSession = "none+bspwm"; 123 xserver = { 124 enable = false; 125 xkb.layout = "us,dvorak"; 126 desktopManager.wallpaper.mode = "fill"; 127 desktopManager.gnome.enable = true; 128 displayManager = { 129 + # gdm.enable = true; 130 # defaultSession = "none+bspwm"; 131 sessionCommands = '' 132 ${pkgs.xorg.xrdb}/bin/xrdb -merge <<EOF
+1
hosts/profiles/dns/default.nix
··· 39 "tracks.mossnet.lan" 40 "grasp.mossnet.lan" 41 "photos.mossnet.lan" 42 ]; 43 44 in
··· 39 "tracks.mossnet.lan" 40 "grasp.mossnet.lan" 41 "photos.mossnet.lan" 42 + "pod.mossnet.lan" 43 ]; 44 45 in
+1 -1
hosts/profiles/finance/default.nix
··· 4 services.paperless = { 5 enable = false; 6 consumptionDirIsPublic = true; 7 - extraConfig.PAPERLESS_AUTO_LOGIN_USERNAME = "admin"; 8 }; 9 10 environment.systemPackages = [
··· 4 services.paperless = { 5 enable = false; 6 consumptionDirIsPublic = true; 7 + settings.PAPERLESS_AUTO_LOGIN_USERNAME = "admin"; 8 }; 9 10 environment.systemPackages = [
+8 -7
hosts/profiles/freshrss/default.nix
··· 17 18 services.postgresql = { 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 - ''; 27 ensureDatabases = [ "freshrss" ]; 28 ensureUsers = [{ 29 name = "freshrss";
··· 17 18 services.postgresql = { 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 + # freshrss-users postgres freshrss 27 + # ''; 28 ensureDatabases = [ "freshrss" ]; 29 ensureUsers = [{ 30 name = "freshrss";
+25 -10
hosts/profiles/gitea/default.nix
··· 4 age.secrets.gitea-dbpass.file = "${self}/secrets/gitea-dbpass.age"; 5 age.secrets.gitea-dbpass.owner = "gitea"; 6 7 - services.gitea = { 8 enable = true; 9 - package = pkgs.forgejo; 10 - appName = "Sealight Git Forge"; 11 database = { 12 type = "postgres"; 13 passwordFile = "/run/agenix/gitea-dbpass"; 14 }; 15 settings = { 16 server = { 17 DOMAIN = "git.sealight.xyz"; 18 ROOT_URL = "https://git.sealight.xyz"; ··· 24 repository = { 25 DEFAULT_BRANCH = "main"; 26 }; 27 "markup.restructuredtext" = { 28 ENABLED = true; 29 FILE_EXTENSIONS = ".rst"; ··· 43 }; 44 }; 45 46 environment.systemPackages = [ pkgs.pandoc ]; 47 services.postgresql = { 48 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 - ''; 56 ensureDatabases = [ "gitea" ]; 57 ensureUsers = [{ 58 name = "gitea";
··· 4 age.secrets.gitea-dbpass.file = "${self}/secrets/gitea-dbpass.age"; 5 age.secrets.gitea-dbpass.owner = "gitea"; 6 7 + services.forgejo = { 8 enable = true; 9 + user = "gitea"; 10 + group = "gitea"; 11 + stateDir = "/var/lib/gitea"; 12 database = { 13 type = "postgres"; 14 + user = "gitea"; 15 + name = "gitea"; 16 passwordFile = "/run/agenix/gitea-dbpass"; 17 }; 18 settings = { 19 + DEFAULT.APP_NAME = "Sealight Git Forge"; 20 server = { 21 DOMAIN = "git.sealight.xyz"; 22 ROOT_URL = "https://git.sealight.xyz"; ··· 28 repository = { 29 DEFAULT_BRANCH = "main"; 30 }; 31 + service.DISABLE_REGISTRATION = true; 32 "markup.restructuredtext" = { 33 ENABLED = true; 34 FILE_EXTENSIONS = ".rst"; ··· 48 }; 49 }; 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 + 60 environment.systemPackages = [ pkgs.pandoc ]; 61 services.postgresql = { 62 enable = true; # Ensure postgresql is enabled 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 + # ''; 71 ensureDatabases = [ "gitea" ]; 72 ensureUsers = [{ 73 name = "gitea";
+10 -1
hosts/profiles/gonic/default.nix
··· 5 music-path /mnt/two/music/ 6 podcast-path /data/podcasts 7 cache-path /data/cache 8 ''; 9 - mossnet.gonic.user = "headphones"; 10 mossnet.gonic.group = "audio"; 11 networking.firewall.allowedTCPPorts = [ 4747 ]; 12 }
··· 5 music-path /mnt/two/music/ 6 podcast-path /data/podcasts 7 cache-path /data/cache 8 + playlists-path /data/playlists 9 ''; 10 + mossnet.gonic.user = "gonic"; 11 mossnet.gonic.group = "audio"; 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 + }; 21 }
-4
hosts/profiles/gonic/module-gonic.nix
··· 68 Group = cfg.group; 69 DevicePolicy = "closed"; 70 NoNewPrivileges = " yes"; 71 - PrivateTmp = "yes"; 72 - PrivateUsers = "yes"; 73 ProtectControlGroups = "yes"; 74 ProtectKernelModules = "yes"; 75 ProtectKernelTunables = "yes"; 76 RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6"; 77 - RestrictNamespaces = "yes"; 78 - RestrictRealtime = "yes"; 79 SystemCallFilter = "~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap"; 80 ReadWritePaths = dataFolder; 81 StateDirectory = baseNameOf dataFolder;
··· 68 Group = cfg.group; 69 DevicePolicy = "closed"; 70 NoNewPrivileges = " yes"; 71 ProtectControlGroups = "yes"; 72 ProtectKernelModules = "yes"; 73 ProtectKernelTunables = "yes"; 74 RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6"; 75 SystemCallFilter = "~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap"; 76 ReadWritePaths = dataFolder; 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 enable = true; 5 host = "0.0.0.0"; 6 port = 8181; 7 user = "headphones"; 8 group = "audio"; 9 dataDir = "/data/music";
··· 4 enable = true; 5 host = "0.0.0.0"; 6 port = 8181; 7 + package = "${pkgs.unstable.headphones}"; 8 user = "headphones"; 9 group = "audio"; 10 dataDir = "/data/music";
+1 -1
hosts/profiles/matrix/mautrix-services.nix
··· 34 signal = { 35 port = 29184; 36 format = "mautrix-python"; 37 - package = pkgs.mautrix-signal; 38 serviceConfig = { 39 StateDirectory = [ "matrix-as-signal" "signald" ]; 40 SupplementaryGroups = [ "signald" ];
··· 34 signal = { 35 port = 29184; 36 format = "mautrix-python"; 37 + package = pkgs.unstable.mautrix-signal; 38 serviceConfig = { 39 StateDirectory = [ "matrix-as-signal" "signald" ]; 40 SupplementaryGroups = [ "signald" ];
+2 -2
hosts/profiles/microbin/default.nix
··· 1 { config, lib, pkgs, ... }: 2 { 3 services.microbin.enable = true; 4 - services.microbin.hostname = "bin.sealight.xyz"; 5 - services.microbin.port = 4949; 6 networking.firewall.allowedTCPPorts = [ 4949 ]; 7 services.nginx.virtualHosts."bin.sealight.xyz" = { 8 enableACME = true;
··· 1 { config, lib, pkgs, ... }: 2 { 3 services.microbin.enable = true; 4 + services.microbin.settings.PUBLIC_PATH = "bin.sealight.xyz"; 5 + services.microbin.settings.MICROBIN_PORT = 4949; 6 networking.firewall.allowedTCPPorts = [ 4949 ]; 7 services.nginx.virtualHosts."bin.sealight.xyz" = { 8 enableACME = true;
+1
hosts/profiles/mossnet-hosts/default.nix
··· 18 192.168.1.240 tracks.mossnet.lan 19 192.168.1.240 grasp.mossnet.lan 20 192.168.1.240 photos.mossnet.lan 21 ''; 22 # 10.0.69.4 mossnet.lan 23 # 10.0.69.4 links.mossnet.lan
··· 18 192.168.1.240 tracks.mossnet.lan 19 192.168.1.240 grasp.mossnet.lan 20 192.168.1.240 photos.mossnet.lan 21 + 192.168.1.240 pod.mossnet.lan 22 ''; 23 # 10.0.69.4 mossnet.lan 24 # 10.0.69.4 links.mossnet.lan
+2 -2
hosts/profiles/music/default.nix
··· 16 orca-c 17 supercollider 18 dirt 19 - sunvox 20 vcv-rack 21 lmms 22 bespokesynth ··· 38 alsa.enable = true; 39 alsa.support32Bit = false; 40 pulse.enable = true; 41 - jack.enable = true; 42 # Deprecated as of 23.05 43 # config = { 44 # pipewire."context.properties"."default.clock.rate" = "48000";
··· 16 orca-c 17 supercollider 18 dirt 19 + # sunvox 20 vcv-rack 21 lmms 22 bespokesynth ··· 38 alsa.enable = true; 39 alsa.support32Bit = false; 40 pulse.enable = true; 41 + jack.enable = true; 42 # Deprecated as of 23.05 43 # config = { 44 # pipewire."context.properties"."default.clock.rate" = "48000";
+3 -4
hosts/profiles/postgres_upgrade_script/default.nix
··· 6 # TODO it's perhaps advisable to stop all services that depend on postgresql 7 systemctl stop postgresql 8 9 - # TODO replace `<new version>` with the psqlSchema here 10 # The schema can be found by running: 11 - # nix-instantiate '<nixpkgs>' --eval -A postgresql_14.psqlSchema 12 - export NEWDATA="/var/lib/postgresql/<new version>" 13 14 # TODO specify the postgresql package you'd like to upgrade to 15 - export NEWBIN="${pkgs.postgresql_14}/bin" 16 17 export OLDDATA="${config.services.postgresql.dataDir}" 18 export OLDBIN="${config.services.postgresql.package}/bin"
··· 6 # TODO it's perhaps advisable to stop all services that depend on postgresql 7 systemctl stop postgresql 8 9 # The schema can be found by running: 10 + # nix eval --raw nixpkgs#postgresql_15.psqlSchema 11 + export NEWDATA="/var/lib/postgresql/15" 12 13 # TODO specify the postgresql package you'd like to upgrade to 14 + export NEWBIN="${pkgs.postgresql_15}/bin" 15 16 export OLDDATA="${config.services.postgresql.dataDir}" 17 export OLDBIN="${config.services.postgresql.package}/bin"
+1 -1
hosts/profiles/rss-bridge/default.nix
··· 3 services.rss-bridge = { 4 enable = true; 5 virtualHost = "bridge.sealight.xyz"; 6 - whitelist = [ "Facebook" "Bandcamp" "Twitter" "Telegram" "Instagram" "Reddit" ]; 7 }; 8 9 services.nginx.virtualHosts."bridge.sealight.xyz".forceSSL = true;
··· 3 services.rss-bridge = { 4 enable = true; 5 virtualHost = "bridge.sealight.xyz"; 6 + config.system.enabled_bridges = [ "Facebook" "Bandcamp" "Twitter" "Telegram" "Instagram" "Reddit" ]; 7 }; 8 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 path = [ 7 pkgs.git 8 pkgs.coreutils 9 - pkgs.nixUnstable 10 pkgs.openssh 11 pkgs.deploy 12 ]; ··· 18 git add flake.lock 19 git diff-index --quiet HEAD || git commit -m 'updating website' # if nothing, don't exit 1 20 git push 21 - deploy .#cube 22 exit 0 23 ''; 24 serviceConfig = {
··· 6 path = [ 7 pkgs.git 8 pkgs.coreutils 9 + pkgs.nixVersions.latest 10 pkgs.openssh 11 pkgs.deploy 12 ]; ··· 18 git add flake.lock 19 git diff-index --quiet HEAD || git commit -m 'updating website' # if nothing, don't exit 1 20 git push 21 + deploy .#helix 22 exit 0 23 ''; 24 serviceConfig = {
+1 -1
hosts/profiles/ulogger-server/default.nix
··· 6 ensureDatabases = [ "ulogger" ]; 7 ensureUsers = [{ 8 name = "ulogger"; 9 - nsureDBOwnership = true; 10 }]; 11 }; 12
··· 6 ensureDatabases = [ "ulogger" ]; 7 ensureUsers = [{ 8 name = "ulogger"; 9 + ensureDBOwnership = true; 10 }]; 11 }; 12
+14 -67
hosts/profiles/wallabag/default.nix
··· 1 { self, pkgs, config, lib, ... }: 2 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"; 8 services.postgresql = { 9 enable = true; 10 package = pkgs.postgresql_15; ··· 18 } 19 ]; 20 authentication = '' 21 - local wallabag all md5 22 ''; 23 }; 24 25 services.wallabag = { 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 - ''; 88 }; 89 - # networking.firewall.allowedTCPPorts = [ 8080 ]; 90 }
··· 1 { self, pkgs, config, lib, ... }: 2 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"; 8 services.postgresql = { 9 enable = true; 10 package = pkgs.postgresql_15; ··· 18 } 19 ]; 20 authentication = '' 21 + local wallabag all peer 22 ''; 23 }; 24 25 services.wallabag = { 26 enable = true; 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 + }; 36 }; 37 }
+10 -5
hosts/profiles/wireguard-server/default.nix
··· 36 publicKey = "gcdq86hhEUlqF2chqYB/F8pALyAMNFvwLycxBoHuoDs="; 37 allowedIPs = [ "10.0.69.5/32" ]; 38 } 39 - # { 40 - # # hyperplane 41 - # publicKey = ""; 42 - # allowedIPs = [ "10.0.69.6/32" ]; 43 - # } 44 ]; 45 }; 46 }
··· 36 publicKey = "gcdq86hhEUlqF2chqYB/F8pALyAMNFvwLycxBoHuoDs="; 37 allowedIPs = [ "10.0.69.5/32" ]; 38 } 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 + } 49 ]; 50 }; 51 }
+6 -3
hosts/users/anish/default.nix
··· 4 programs.zsh.enable = true; 5 users.users.anish = { 6 description = "Personal user for Anish"; 7 - hashedPassword = "$y$j9T$y3DPt/dWaPE.gRazQqw1w0$1RMH5sl/Nu8kW3ZMywYCPRniHD/jF5qRh0VKrdJ.bV2"; 8 shell = pkgs.zsh; 9 isNormalUser = true; 10 extraGroups = [ "wheel" "audio" "networkmanager" "video" ]; 11 openssh.authorizedKeys.keys = [ 12 # Curve 13 "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 # Box 17 "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKN8/SH55DBiwVoSnTU8k2Pen+wmovL9QaMyehxGEsJJv/8fzwsswGalD4C/4O51LOvdu4UKkZW5hG02uVSK+58p3UV3pOPyoqsu/aDeIsWsqmTeTzUrBIWOlNzcDKnohLz2oGC5YO+wyTJ9Iteq6aGJDjErsW7sG3h5lXCs551EmJNNGhtBQaaoytMNnWqSdlVjDNCijurH7WUpp40U/RjEp532l4rX6eIIj3jBKEFbhZkFSSjqbj4xM4SyFt+Jmigb1RMjsQjmpfY1vDtM84RcYfpTUte/T5w2dkD5H6kccmWnwKSJpm9wXfx4E7lR9APdUGnau2U1+XxiD3ytGl anish@box" 18 ]; 19 }; 20 }
··· 4 programs.zsh.enable = true; 5 users.users.anish = { 6 description = "Personal user for Anish"; 7 + hashedPassword = 8 + "$y$j9T$y3DPt/dWaPE.gRazQqw1w0$1RMH5sl/Nu8kW3ZMywYCPRniHD/jF5qRh0VKrdJ.bV2"; 9 shell = pkgs.zsh; 10 isNormalUser = true; 11 extraGroups = [ "wheel" "audio" "networkmanager" "video" ]; 12 openssh.authorizedKeys.keys = [ 13 # Curve 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" 15 # Box 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" 21 ]; 22 }; 23 }
install-encrypted.sh
+2 -2
install-yubikey.sh
··· 19 20 # Yubikey Setup 21 SLOT=2 22 - ykpersonalize -"$SLOT" -ochal-resp -ochal-hmac 23 SALT_LENGTH=16 24 salt="$(dd if=/dev/random bs=1 count=$SALT_LENGTH 2>/dev/null | rbtohex)" 25 k_user=PASSWORDCHANGEMEPLAEASES ··· 147 sound.enable = true; 148 hardware.pulseaudio.enable = true; 149 150 - services.xserver.libinput.enable = true; 151 152 # Hmmm maybe somewhere else? 153 users.users.anish = {
··· 19 20 # Yubikey Setup 21 SLOT=2 22 + # ykpersonalize -"$SLOT" -ochal-resp -ochal-hmac 23 SALT_LENGTH=16 24 salt="$(dd if=/dev/random bs=1 count=$SALT_LENGTH 2>/dev/null | rbtohex)" 25 k_user=PASSWORDCHANGEMEPLAEASES ··· 147 sound.enable = true; 148 hardware.pulseaudio.enable = true; 149 150 + services.libinput.enable = true; 151 152 # Hmmm maybe somewhere else? 153 users.users.anish = {
+2 -1
modules/nixos/default.nix
··· 9 wireguard = import ./wireguard.nix; 10 backup = import ./backup.nix; 11 ulogger-server = import ./ulogger.nix; 12 - # microbin = import ./microbin.nix; includide in 23.11 13 }
··· 9 wireguard = import ./wireguard.nix; 10 backup = import ./backup.nix; 11 ulogger-server = import ./ulogger.nix; 12 + gpodder2go = import ./gpodder2go.nix; 13 + # microbin = import ./microbin.nix; # includide in 23.11 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; 4 let 5 - cfg = config.services.wallabag; 6 7 - poolName = "wallabag"; 8 9 - configFile = pkgs.writeTextFile { 10 - name = "wallabag-config"; 11 - text = cfg.conf; 12 - destination = "/app/config/parameters.yml"; 13 - }; 14 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 - }; 22 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 - ''; 31 32 - in 33 - { 34 35 - options = { 36 37 - services.wallabag = { 38 - enable = mkEnableOption "wallabag"; 39 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 - }; 47 48 - dataDir = mkOption { 49 - type = types.path; 50 - default = "/var/lib/wallabag"; 51 - description = '' 52 - Data directory. 53 - ''; 54 - }; 55 56 - package = mkOption { 57 - type = types.package; 58 - default = pkgs.wallabag; 59 - description = '' 60 - Wallabag package to use. 61 - ''; 62 - }; 63 64 - hostName = mkOption { 65 - type = types.str; 66 - description = '' 67 - Name of the nginx virtualhost to use and setup. 68 - ''; 69 - }; 70 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 - }; 86 87 - conf = mkOption { 88 - type = types.str; 89 - description = '' 90 - Contents of the wallabag configuration file (parameters.yml) 91 - ''; 92 - }; 93 - }; 94 }; 95 96 97 - config = mkIf cfg.enable { 98 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 - }; 122 }; 123 - services.phpfpm.phpOptions = '' 124 - max_execution_time = 120 125 - ''; 126 127 - services.nginx.enable = mkDefault true; 128 - environment.systemPackages = [ console ]; 129 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 - # ''; 137 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 - # }; 162 163 164 - services.nginx.virtualHosts."${cfg.hostName}" = { 165 - enableACME = false; 166 - forceSSL = false; 167 - root = "${cfg.package}/web"; 168 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 - ''; 174 175 - locations."/" = { 176 - tryFiles = "$uri /app.php$is_args$args"; 177 - }; 178 179 - locations."/assets".root = "${cfg.dataDir}/web"; 180 181 - locations."~ ^/app\\.php(/|$)" = { 182 - fastcgiParams = { 183 - SCRIPT_FILENAME = "$realpath_root$fastcgi_script_name"; 184 - DOCUMENT_ROOT = "$realpath_root"; 185 }; 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 }; 202 203 - locations."~ /(?!app)\\.php$" = { 204 - extraConfig = '' 205 - return 404; 206 - ''; 207 }; 208 }; 209 210 systemd.services.wallabag-install = { 211 description = "Wallabag install service"; 212 wantedBy = [ "multi-user.target" ]; 213 before = [ "phpfpm-wallabag.service" ]; 214 - after = [ "mysql.service" "postgresql.service" ]; 215 path = with pkgs; [ coreutils php phpPackages.composer ]; 216 217 serviceConfig = { 218 - User = cfg.user; 219 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 - ''; 228 229 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 - ''; 253 }; 254 - }; 255 - 256 - meta = with stdenv.lib; { 257 - maintainers = with maintainers; [ nadrieril ]; 258 }; 259 }
··· 1 + { config, lib, pkgs, ... }: 2 let 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"; 15 16 + domain_name = "http://${cfg.domain}"; 17 + server_name = "Wallabag"; 18 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"; 22 23 + locale = "en"; 24 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)%"; 28 29 + # two factor stuff 30 + twofactor_auth = false; 31 + twofactor_sender = ""; 32 33 + # fosuser stuff 34 + fosuser_registration = false; 35 + fosuser_confirmation = false; 36 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; 41 42 + from_email = "wallabag@read.mossnet.lan"; 43 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; 50 51 + # Redis processing 52 + rabbitmq_host = ""; 53 + rabbitmq_port = 0; 54 + rabbitmq_user = ""; 55 + rabbitmq_password = ""; 56 + rabbitmq_prefetch_count = 0; 57 58 + # sentry logging 59 + sentry_dsn = null; 60 + } // cfg.parameters; 61 62 + php = cfg.php.package.withExtensions ({ enabled, all }: enabled ++ (with all; [ 63 + imagick 64 + tidy 65 + ])); 66 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"; 76 }; 77 78 + cfg = config.services.wallabag; 79 + in { 80 + options.services.wallabag = with lib; { 81 + enable = mkEnableOption (mdDoc "Wallabag read-it-later service"); 82 83 + package = mkOption { 84 + type = types.package; 85 + default = pkgs.wallabag; 86 + }; 87 88 + php.package = mkOption { 89 + type = types.package; 90 + default = pkgs.php; 91 }; 92 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 + }; 98 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 + }; 116 117 + domain = mkOption { 118 + type = types.str; 119 + description = "Bare domain name for Wallabag"; 120 + }; 121 122 + virtualHost.enable = mkEnableOption (mdDoc "Define nginx virtualhost for Wallabag"); 123 + }; 124 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 + ''; 147 148 + locations."/" = { 149 + extraConfig = '' 150 + try_files $uri /app.php$is_args$args; 151 + ''; 152 + }; 153 154 + locations."/assets".root = "${pkgs.wallabag}/app/web"; 155 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 + }; 168 169 + locations."~ /(?!app)\\.php$" = { 170 + extraConfig = '' 171 + return 404; 172 + ''; 173 + }; 174 }; 175 }; 176 + }; 177 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; 206 }; 207 }; 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 + 222 systemd.services.wallabag-install = { 223 description = "Wallabag install service"; 224 wantedBy = [ "multi-user.target" ]; 225 before = [ "phpfpm-wallabag.service" ]; 226 + after = [ "postgresql.service" ]; 227 path = with pkgs; [ coreutils php phpPackages.composer ]; 228 229 serviceConfig = { 230 + User = "wallabag"; 231 Type = "oneshot"; 232 + } // commonServiceConfig; 233 234 script = '' 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 + ''; 243 }; 244 }; 245 }
+15 -3
mount-crypted.sh
··· 1 #!/usr/bin/env bash 2 key_length=512 3 - iterations="$(head -n 2 /boot/crypted-storage/default)" 4 - salt="$(head -n 1 /boot/crypted-storage/default)" 5 chal="$(echo -n $salt | openssl dgst -binary -sha512 | rbtohex)" 6 resp="$(ykchalresp -2 -x $chal 2>/dev/null)" 7 - user_key="$(read -s)" 8 luks_key="$(echo -n $user_key | pbkdf2-sha512 $(($key_length / 8)) $iterations $resp | rbtohex)" 9 echo -n $luks_key | hextorb | sudo cryptsetup luksOpen /dev/sda2 crypted --key-file=-
··· 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 + 13 key_length=512 14 + iterations=1000000 15 + salt="$(head -n 1 /mnt/crypt-storage/default)" 16 chal="$(echo -n $salt | openssl dgst -binary -sha512 | rbtohex)" 17 resp="$(ykchalresp -2 -x $chal 2>/dev/null)" 18 + user_key= 19 + read -r user_key 20 luks_key="$(echo -n $user_key | pbkdf2-sha512 $(($key_length / 8)) $iterations $resp | rbtohex)" 21 echo -n $luks_key | hextorb | sudo cryptsetup luksOpen /dev/sda2 crypted --key-file=-
+9
overlays/default.nix
··· 14 buildInputs = prevAttrs.propagatedBuildInputs ++ [ final.python3.pkgs.aiosqlite ]; # We're using sqlite and upstream doesn't package this dependency 15 }); 16 17 # Need to do server and agent too, maybe 18 # woodpecker-cli-next = 19 # let
··· 14 buildInputs = prevAttrs.propagatedBuildInputs ++ [ final.python3.pkgs.aiosqlite ]; # We're using sqlite and upstream doesn't package this dependency 15 }); 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 + 26 # Need to do server and agent too, maybe 27 # woodpecker-cli-next = 28 # let
+6 -1
pkgs/default.nix
··· 5 plymouth-themes = pkgs.callPackage ./plymouth.nix { }; 6 tic-80 = pkgs.callPackage ./tic-80.nix { }; 7 fennel-ls = pkgs.callPackage ./fennel-ls.nix { }; 8 - kobopatch = pkgs.callPackage ./kobopatch.nix { }; 9 my-mautrix-discord = pkgs.callPackage ./mautrix-discord.nix { }; # Handled by matrix-appservices input 10 ulogger-server = pkgs.callPackage ./ulogger.nix { }; 11 }
··· 5 plymouth-themes = pkgs.callPackage ./plymouth.nix { }; 6 tic-80 = pkgs.callPackage ./tic-80.nix { }; 7 fennel-ls = pkgs.callPackage ./fennel-ls.nix { }; 8 + # kobopatch = pkgs.callPackage ./kobopatch.nix { }; 9 my-mautrix-discord = pkgs.callPackage ./mautrix-discord.nix { }; # Handled by matrix-appservices input 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 { }; 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 { lib, buildGoModule, fetchFromGitHub }: 2 3 - buildGoModule rec { 4 name = "kobopatch"; 5 version = "0.15.0"; 6 7 - vendorSha256 = "1i6srhyig4x8mywyc2l8wzzm1afvb7wxmjsr84c447sb1xss6p7x"; 8 9 src = fetchFromGitHub { 10 owner = "geek1011"; 11 repo = "kobopatch"; 12 rev = "653070c67c83ec61884854efc4f8a3132d82a2e5"; 13 - sha256 = "09hr3zh0w0f78cx40d2yydqv0mmjdh4iwdgia7sikraphvha85nn"; 14 }; 15 16 meta = with lib; {
··· 1 { lib, buildGoModule, fetchFromGitHub }: 2 3 + buildGoModule { 4 name = "kobopatch"; 5 version = "0.15.0"; 6 7 + vendorHash = "sha256-1i6srhyig4x8mywyc2l8wzzm1afvb7wxmjsr84c447sb1xss6p7x"; 8 9 src = fetchFromGitHub { 10 owner = "geek1011"; 11 repo = "kobopatch"; 12 rev = "653070c67c83ec61884854efc4f8a3132d82a2e5"; 13 + hash = "sha256-09hr3zh0w0f78cx40d2yydqv0mmjdh4iwdgia7sikraphvha85nn"; 14 }; 15 16 meta = with lib; {
+1 -1
pkgs/koboutils.nix
··· 4 name = "koboutils"; 5 version = "git_2020-04-08"; 6 7 - vendorSha256 = "1hqvizvbc29yib6awmvlklxkq7j8c0d32gxsipdiwhkh79xbd6wq"; 8 deleteVendor = true; 9 10 src = fetchFromGitHub {
··· 4 name = "koboutils"; 5 version = "git_2020-04-08"; 6 7 + vendorha256 = "1hqvizvbc29yib6awmvlklxkq7j8c0d32gxsipdiwhkh79xbd6wq"; 8 deleteVendor = true; 9 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 }; 11 buildInputs = with pkgs; [ 12 gcc 13 - pkgconfig 14 autoconf 15 automake 16 libtool ··· 27 gtk3-x11 28 cmake 29 cmakeCurses 30 - elementary-cmake-modules 31 extra-cmake-modules 32 libglvnd 33 mesa_glu
··· 10 }; 11 buildInputs = with pkgs; [ 12 gcc 13 + pkg-config 14 autoconf 15 automake 16 libtool ··· 27 gtk3-x11 28 cmake 29 cmakeCurses 30 + # elementary-cmake-modules 31 extra-cmake-modules 32 libglvnd 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 default = pkgs.mkShell { 6 # Enable experimental features without having to specify the argument 7 NIX_CONFIG = "experimental-features = nix-command flakes"; 8 - nativeBuildInputs = with pkgs; [ nix home-manager git agenix deploy-rs dnscontrol ]; 9 }; 10 }
··· 5 default = pkgs.mkShell { 6 # Enable experimental features without having to specify the argument 7 NIX_CONFIG = "experimental-features = nix-command flakes"; 8 + nativeBuildInputs = with pkgs; [ 9 + nix 10 + home-manager 11 + git 12 + agenix 13 + deploy-rs 14 + dnscontrol 15 + git-bug 16 + ]; 17 }; 18 }