+8
.direnv/bin/nix-direnv-reload
+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
+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"
+5
-4
dns/dnsconfig.js
+5
-4
dns/dnsconfig.js
···
6
6
7
7
D("lakhwara.com", REG_NONE,
8
8
DnsProvider(DNS_HEDNS),
9
-
DefaultTTL(86400),
9
+
DefaultTTL(300),
10
10
//SOA('@', 'ns1.he.net.', 'hostmaster.he.net.', 2022041702, 86400, 7200, 3600000, 86400, TTL(172800)),
11
-
A('anish', '103.16.130.98'),
12
-
A('coaching', '103.16.130.98'),
11
+
A('anish', '69.61.2.203'),
12
+
A('@', '69.61.2.203'),
13
+
//A('coaching', '103.16.130.98'),
13
14
TXT('anish', 'datkey=dat://1a240a14fab2bae9c85ebad29bddc04505aaba24e5fb809c2ccb4cdf71e3a7d5'),
14
15
CNAME('fm1._domainkey', 'fm1.lakhwara.com.dkim.fmhosted.com.'),
15
16
CNAME('fm2._domainkey', 'fm2.lakhwara.com.dkim.fmhosted.com.'),
16
17
CNAME('fm3._domainkey', 'fm3.lakhwara.com.dkim.fmhosted.com.'),
17
-
A('@', '103.16.130.98'),
18
18
MX('@', 10, 'in1-smtp.messagingengine.com.'),
19
19
MX('@', 20, 'in2-smtp.messagingengine.com.'),
20
20
//NAMESERVER('ns1.he.net.'),
···
39
39
A('git', '69.61.2.203', TTL(300)),
40
40
A('bin', '69.61.2.203', TTL(300)),
41
41
A('ci', '69.61.2.203', TTL(300)),
42
+
A('write', '69.61.2.203', TTL(300)),
42
43
// vultr -> nulled: lituus
43
44
A('@', '45.77.48.108', TTL(300)),
44
45
A('jitsi', '45.77.48.108', TTL(300)),
dns/test_nullhex.sh
dns/test_nullhex.sh
+199
-53
flake.lock
+199
-53
flake.lock
···
10
10
"systems": "systems"
11
11
},
12
12
"locked": {
13
-
"lastModified": 1747514353,
14
-
"narHash": "sha256-E1WjB+zvDw4x058mg3MIdK5j2huvnNpTEEt2brhg2H8=",
13
+
"lastModified": 1747575206,
14
+
"narHash": "sha256-NwmAFuDUO/PFcgaGGr4j3ozG9Pe5hZ/ogitWhY+D81k=",
15
15
"owner": "ryantm",
16
16
"repo": "agenix",
17
-
"rev": "6697e8babbd8f323dfd5e28f160a0128582c128b",
17
+
"rev": "4835b1dc898959d8547a871ef484930675cb47f1",
18
18
"type": "github"
19
19
},
20
20
"original": {
···
46
46
"ref": "main",
47
47
"type": "git",
48
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"
49
72
}
50
73
},
51
74
"brew-src": {
···
111
134
]
112
135
},
113
136
"locked": {
114
-
"lastModified": 1747521943,
115
-
"narHash": "sha256-GMAJcB8oB9cC+TbYTE7QDfw9fwHZyloxUWnUpHnQRko=",
137
+
"lastModified": 1748065210,
138
+
"narHash": "sha256-dFqlLNW6UW19m0vg5FHWLH2G2LGkqYyPs/4YqfoZMoM=",
116
139
"owner": "LnL7",
117
140
"repo": "nix-darwin",
118
-
"rev": "b9b927dd1f24094b271e8ec5277a672dc4fc860d",
141
+
"rev": "acd6aa5a9065c6695212be313e06f08f7184cb25",
119
142
"type": "github"
120
143
},
121
144
"original": {
···
127
150
},
128
151
"deploy-rs": {
129
152
"inputs": {
130
-
"flake-compat": "flake-compat",
153
+
"flake-compat": "flake-compat_2",
131
154
"nixpkgs": [
132
155
"nixpkgs"
133
156
],
···
185
208
]
186
209
},
187
210
"locked": {
188
-
"lastModified": 1747274630,
189
-
"narHash": "sha256-87RJwXbfOHyzTB9LYagAQ6vOZhszCvd8Gvudu+gf3qo=",
211
+
"lastModified": 1747742835,
212
+
"narHash": "sha256-kYL4GCwwznsypvsnA20oyvW8zB/Dvn6K5G/tgMjVMT4=",
190
213
"owner": "nix-community",
191
214
"repo": "disko",
192
-
"rev": "ec7c109a4f794fce09aad87239eab7f66540b888",
215
+
"rev": "df522e787fdffc4f32ed3e1fca9ed0968a384d62",
193
216
"type": "github"
194
217
},
195
218
"original": {
···
241
264
"flake-compat_2": {
242
265
"flake": false,
243
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": {
244
283
"lastModified": 1641205782,
245
284
"narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=",
246
285
"owner": "edolstra",
···
254
293
"type": "github"
255
294
}
256
295
},
257
-
"flake-compat_3": {
296
+
"flake-compat_4": {
258
297
"flake": false,
259
298
"locked": {
260
299
"lastModified": 1696426674,
···
270
309
"type": "github"
271
310
}
272
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
+
},
273
328
"flake-parts": {
274
329
"inputs": {
275
330
"nixpkgs-lib": [
···
325
380
}
326
381
},
327
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": {
328
401
"locked": {
329
402
"lastModified": 1667395993,
330
403
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
···
339
412
"type": "github"
340
413
}
341
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
+
},
342
433
"gitignore": {
343
434
"inputs": {
344
435
"nixpkgs": [
···
363
454
},
364
455
"grasp": {
365
456
"inputs": {
366
-
"flake-utils": "flake-utils_2",
457
+
"flake-utils": "flake-utils_3",
367
458
"nixpkgs": [
368
459
"nixpkgs"
369
460
]
···
385
476
},
386
477
"hardware": {
387
478
"locked": {
388
-
"lastModified": 1747129300,
389
-
"narHash": "sha256-L3clA5YGeYCF47ghsI7Tcex+DnaaN/BbQ4dR2wzoiKg=",
479
+
"lastModified": 1747900541,
480
+
"narHash": "sha256-dn64Pg9xLETjblwZs9Euu/SsjW80pd6lr5qSiyLY1pg=",
390
481
"owner": "nixos",
391
482
"repo": "nixos-hardware",
392
-
"rev": "e81fd167b33121269149c57806599045fd33eeed",
483
+
"rev": "11f2d9ea49c3e964315215d6baa73a8d42672f06",
393
484
"type": "github"
394
485
},
395
486
"original": {
···
459
550
"homebrew-cask": {
460
551
"flake": false,
461
552
"locked": {
462
-
"lastModified": 1747532349,
463
-
"narHash": "sha256-MpVDXDQLeUAlKVm57PGv7v/4H43DCS2VDlhUDy1t+Z8=",
553
+
"lastModified": 1748113418,
554
+
"narHash": "sha256-lX4WosoMtusSD4GRDRvzwQwzLJUetg5HEWlMcJ4IQmI=",
464
555
"owner": "homebrew",
465
556
"repo": "homebrew-cask",
466
-
"rev": "39e4baca231c013729863c84e53cfa7c23e9da33",
557
+
"rev": "ed1a02852e1c4a5fab4aef776082ca89cd70f09a",
467
558
"type": "github"
468
559
},
469
560
"original": {
···
475
566
"homebrew-core": {
476
567
"flake": false,
477
568
"locked": {
478
-
"lastModified": 1747546566,
479
-
"narHash": "sha256-Jbhg5Q65/YqZth9CSzTGqKgG2YHf4IbxlyWta97lXWo=",
569
+
"lastModified": 1748120562,
570
+
"narHash": "sha256-b4Qd9nAVW8yMqZ5T9B7HfSrDLCrtsw07D98/NWz2xsE=",
480
571
"owner": "homebrew",
481
572
"repo": "homebrew-core",
482
-
"rev": "fed56bce55ff3905d5803325e9cfdd335f07150c",
573
+
"rev": "b26cd07a06b15767688137a68461cb34fe985efa",
483
574
"type": "github"
484
575
},
485
576
"original": {
···
496
587
]
497
588
},
498
589
"locked": {
499
-
"lastModified": 1747466853,
500
-
"narHash": "sha256-/evYltwuF8Kz1odgocWnguh/8VQV1i76VB4yMTU9m7k=",
590
+
"lastModified": 1747990026,
591
+
"narHash": "sha256-sG5VbID+x5+xUC+jjgHibnzg8IllVcH+K2TLmYHLPME=",
501
592
"owner": "jovian-experiments",
502
593
"repo": "jovian-nixos",
503
-
"rev": "0ba1a34fa6d995fe433109f0ad66de8d5613d46e",
594
+
"rev": "e2f4ced874406541a7957f7e2b8f05a0d59a0f00",
504
595
"type": "github"
505
596
},
506
597
"original": {
···
612
703
"nix-matrix-appservices": {
613
704
"inputs": {
614
705
"devshell": "devshell",
615
-
"flake-compat": "flake-compat_2",
706
+
"flake-compat": "flake-compat_3",
616
707
"nixlib": "nixlib",
617
708
"nixpkgs": "nixpkgs_3"
618
709
},
···
647
738
},
648
739
"nixos-hardware": {
649
740
"locked": {
650
-
"lastModified": 1747129300,
651
-
"narHash": "sha256-L3clA5YGeYCF47ghsI7Tcex+DnaaN/BbQ4dR2wzoiKg=",
741
+
"lastModified": 1747900541,
742
+
"narHash": "sha256-dn64Pg9xLETjblwZs9Euu/SsjW80pd6lr5qSiyLY1pg=",
652
743
"owner": "NixOS",
653
744
"repo": "nixos-hardware",
654
-
"rev": "e81fd167b33121269149c57806599045fd33eeed",
745
+
"rev": "11f2d9ea49c3e964315215d6baa73a8d42672f06",
655
746
"type": "github"
656
747
},
657
748
"original": {
···
736
827
},
737
828
"nixpkgs_4": {
738
829
"locked": {
739
-
"lastModified": 1747335874,
740
-
"narHash": "sha256-IKKIXTSYJMmUtE+Kav5Rob8SgLPnfnq4Qu8LyT4gdqQ=",
830
+
"lastModified": 1747862697,
831
+
"narHash": "sha256-U4HaNZ1W26cbOVm0Eb5OdGSnfQVWQKbLSPrSSa78KC0=",
741
832
"owner": "nixos",
742
833
"repo": "nixpkgs",
743
-
"rev": "ba8b70ee098bc5654c459d6a95dfc498b91ff858",
834
+
"rev": "2baa12ff69913392faf0ace833bc54bba297ea95",
744
835
"type": "github"
745
836
},
746
837
"original": {
···
752
843
},
753
844
"nixpkgs_5": {
754
845
"locked": {
755
-
"lastModified": 1747327360,
756
-
"narHash": "sha256-LSmTbiq/nqZR9B2t4MRnWG7cb0KVNU70dB7RT4+wYK4=",
846
+
"lastModified": 1748026106,
847
+
"narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=",
757
848
"owner": "nixos",
758
849
"repo": "nixpkgs",
759
-
"rev": "e06158e58f3adee28b139e9c2bcfcc41f8625b46",
850
+
"rev": "063f43f2dbdef86376cc29ad646c45c46e93234c",
760
851
"type": "github"
761
852
},
762
853
"original": {
···
837
928
"treefmt-nix": "treefmt-nix"
838
929
},
839
930
"locked": {
840
-
"lastModified": 1747542017,
841
-
"narHash": "sha256-sFSV0Hfd8KRE5w8Ly11WMRPQKm9S5yCD12pdgAcsppU=",
931
+
"lastModified": 1748119613,
932
+
"narHash": "sha256-BvOMqlTgRbz8ldRcaf7OTKIRsGlOw4AssphiZGLd0fo=",
842
933
"owner": "nix-community",
843
934
"repo": "NUR",
844
-
"rev": "5ce8c2eb9c364ad7154a78878ecc838efbe8832e",
935
+
"rev": "48380b491e6415284292516fe919d78207969e30",
845
936
"type": "github"
846
937
},
847
938
"original": {
···
879
970
]
880
971
},
881
972
"locked": {
882
-
"lastModified": 1724637654,
883
-
"narHash": "sha256-86TExy5MWkXLd7Oio1QGuwzkSG9lxsYVPo/3IoFkLFM=",
973
+
"lastModified": 1738465265,
974
+
"narHash": "sha256-v8nD/2gq8/mILEJqvWgx1q7Fc1purQvV3/WZLQ/t/wc=",
884
975
"ref": "main",
885
-
"rev": "521e360df123a530fc4c99187e3580bd5d086a9d",
886
-
"revCount": 1467,
976
+
"rev": "115f8af750c0d4b6a8c6f97119b12d7e3eb20c6a",
977
+
"revCount": 1552,
887
978
"type": "git",
888
979
"url": "ssh://gitea@git.sealight.xyz/aynish/kitaab"
889
980
},
···
895
986
},
896
987
"pre-commit-nix": {
897
988
"inputs": {
898
-
"flake-compat": "flake-compat_3",
989
+
"flake-compat": "flake-compat_4",
899
990
"gitignore": "gitignore",
900
991
"nixpkgs": "nixpkgs_8",
901
992
"nixpkgs-stable": "nixpkgs-stable"
···
959
1050
"inputs": {
960
1051
"agenix": "agenix",
961
1052
"basant": "basant",
1053
+
"breezy": "breezy",
962
1054
"darwin": "darwin_2",
963
1055
"deploy-rs": "deploy-rs",
964
1056
"disko": "disko",
···
980
1072
"sourcegraph-src-cli-cask": "sourcegraph-src-cli-cask",
981
1073
"tidalcycles": "tidalcycles",
982
1074
"unstable": "unstable",
983
-
"vimwikicli": "vimwikicli"
1075
+
"vimwikicli": "vimwikicli",
1076
+
"xr-linux": "xr-linux"
984
1077
}
985
1078
},
986
1079
"rust-overlay": {
···
990
1083
]
991
1084
},
992
1085
"locked": {
993
-
"lastModified": 1747535902,
994
-
"narHash": "sha256-rKWBtLcqQeu8PpfKIBn1ORXS2udSH/MwnQFwfSpFOLg=",
1086
+
"lastModified": 1748054080,
1087
+
"narHash": "sha256-rwFiLLNCwkj9bqePtH1sMqzs1xmohE0Ojq249piMzF4=",
995
1088
"owner": "oxalica",
996
1089
"repo": "rust-overlay",
997
-
"rev": "b7a99615d26b82c39b73ccc9026545c3f3403b71",
1090
+
"rev": "2221d8d53c128beb69346fa3ab36da3f19bb1691",
998
1091
"type": "github"
999
1092
},
1000
1093
"original": {
···
1086
1179
"sourcegraph-src-cli-cask": {
1087
1180
"flake": false,
1088
1181
"locked": {
1089
-
"lastModified": 1747406457,
1090
-
"narHash": "sha256-AH3nqf0VIxdEKwAlacFzNn2LYmaKFp7AAjazHLjgktQ=",
1182
+
"lastModified": 1747940755,
1183
+
"narHash": "sha256-rS+LEcZKOoRN3bH+aZIV1Y4AlPR8dWosiRAA8Q1itBs=",
1091
1184
"owner": "sourcegraph",
1092
1185
"repo": "homebrew-src-cli",
1093
-
"rev": "ae66248cf103c4c9f72fc969c0503954bcfc0adf",
1186
+
"rev": "34bb40706f3f9641958db65c5c77a1db51140b3d",
1094
1187
"type": "github"
1095
1188
},
1096
1189
"original": {
···
1131
1224
}
1132
1225
},
1133
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": {
1134
1257
"locked": {
1135
1258
"lastModified": 1681028828,
1136
1259
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
···
1232
1355
},
1233
1356
"unstable": {
1234
1357
"locked": {
1235
-
"lastModified": 1747327360,
1236
-
"narHash": "sha256-LSmTbiq/nqZR9B2t4MRnWG7cb0KVNU70dB7RT4+wYK4=",
1358
+
"lastModified": 1748026106,
1359
+
"narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=",
1237
1360
"owner": "nixos",
1238
1361
"repo": "nixpkgs",
1239
-
"rev": "e06158e58f3adee28b139e9c2bcfcc41f8625b46",
1362
+
"rev": "063f43f2dbdef86376cc29ad646c45c46e93234c",
1240
1363
"type": "github"
1241
1364
},
1242
1365
"original": {
···
1248
1371
},
1249
1372
"utils": {
1250
1373
"inputs": {
1251
-
"systems": "systems_2"
1374
+
"systems": "systems_3"
1252
1375
},
1253
1376
"locked": {
1254
1377
"lastModified": 1701680307,
···
1314
1437
"original": {
1315
1438
"owner": "supercollider-quarks",
1316
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",
1317
1463
"type": "github"
1318
1464
}
1319
1465
}
+14
-21
flake.nix
+14
-21
flake.nix
···
1
1
{
2
-
description = "Your new nix config";
2
+
description = "Sealight NixOS Config";
3
3
4
4
inputs = {
5
5
# Nixpkgs
6
6
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
7
7
unstable.url = "github:nixos/nixpkgs/nixos-unstable";
8
8
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
9
+
10
+
# ngipkgs.url = "github:Chickensoupwithrice/ngipkgs?ref=aynish/atomic-server-module";
11
+
# ngipkgs-local.url = "path:/home/anish/usr/ngipkgs";
9
12
10
13
# Home manager
11
14
home-manager.url = "github:nix-community/home-manager/release-25.05";
···
184
187
# ];
185
188
overlays = [
186
189
agenix.overlays.default
190
+
self.overlays.additions
191
+
self.overlays.modifications
187
192
tidalcycles.overlays.default # needed for nvim which comes pre-installed lol
188
193
];
189
194
});
···
270
275
agenix.nixosModules.age
271
276
self.nixosModules.backup
272
277
self.nixosModules.wireguard
278
+
self.nixosModules.wallabag
273
279
nixos-hardware.nixosModules.lenovo-thinkpad-x270
274
280
home-manager.nixosModules.home-manager
275
281
{
···
291
297
agenix.nixosModules.age
292
298
self.nixosModules.backup
293
299
self.nixosModules.wireguard
300
+
basant.nixosModule
294
301
# self.nixosModules.microbin
295
302
disko.nixosModules.disko
303
+
{
304
+
nixpkgs.flake.setNixPath = false;
305
+
nixpkgs.flake.setFlakeRegistry = false;
306
+
}
296
307
];
297
308
};
298
309
···
315
326
];
316
327
};
317
328
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
329
box = nixpkgs.lib.nixosSystem rec {
332
330
specialArgs = { inherit inputs self; };
333
331
system = "x86_64-linux";
···
338
336
self.nixosModules.backup
339
337
self.nixosModules.wireguard
340
338
self.nixosModules.gonic
339
+
self.nixosModules.gpodder2go
341
340
self.nixosModules.wallabag
342
341
self.nixosModules.ulogger-server
343
342
grasp.nixosModule
···
390
389
hostname = "mossnet.lan";
391
390
autoRollback = false;
392
391
magicRollback = false;
392
+
remoteBuild = true;
393
393
profiles.system = {
394
394
user = "root";
395
395
path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.box;
···
410
410
profiles.system = {
411
411
user = "root";
412
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
413
};
421
414
};
422
415
};
+1
-2
home/core/default.nix
+1
-2
home/core/default.nix
+1
home/gui/default.nix
+1
home/gui/default.nix
+17
-4
home/profiles/cli/default.nix
+17
-4
home/profiles/cli/default.nix
···
9
9
dosfstools
10
10
# git
11
11
git-machete
12
+
git-spice
13
+
jujitsu
12
14
asciinema
13
15
bottom
14
16
gptfdisk
···
35
37
iftop
36
38
wget
37
39
curl
40
+
<<<<<<< HEAD
38
41
eza
39
42
bat
40
43
fd
41
44
# ncdu
45
+
=======
46
+
eza
47
+
bat
48
+
fd
49
+
ncdu
50
+
du-dust
51
+
# dia-cli
52
+
>>>>>>> nvim-rewrite
42
53
duf
43
54
trash-cli
44
55
nix-index
···
138
149
autosuggestion.enable = false;
139
150
140
151
initExtra = ''
141
-
bindkey -v
142
152
autopair-init
143
153
'';
144
154
sessionVariables = {
···
226
236
227
237
# modern cli tools
228
238
ls = "eza --icons";
229
-
l = "eza -l --icons";
239
+
l = "esa -l --icons";
230
240
la = "eza -la --icons";
231
241
tree = "ls --tree --icons";
232
242
cat = "bat";
···
238
248
make-secret = "< /dev/urandom \\tr -dc _A-Za-z0-9 | head -c \${1:-32};echo;";
239
249
240
250
# task warrior
241
-
# TODO: make blocked a context?
242
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
243
256
tt = "taskwarrior-tui -r list";
244
257
ti = "task +idea";
245
258
tb = "task +backlog list";
246
259
ttb = "taskwarrior-tui -r backlog";
247
260
tr = "task newest limit:page";
248
-
tw = "task +wait";
261
+
twait = "task +wait";
249
262
ta = "task add";
250
263
tai = "task add +idea";
251
264
tn = "task-note";
home/profiles/desktop/Xresources
home/profiles/desktop/Xresources
+2
-2
home/profiles/desktop/bspwmrc
+2
-2
home/profiles/desktop/bspwmrc
···
6
6
# esac
7
7
8
8
export MONITOR=$(xrandr -q | grep primary | cut -d' ' -f1)
9
-
export MONITORS=( $(xrandr -q | grep ' connected' | cut -d' ' -f1) )
9
+
export MONITORS=($(xrandr -q | grep ' connected' | cut -d' ' -f1))
10
10
MONITOR=${MONITOR:-${MONITORS[0]}}
11
11
12
12
# Only have workspaces for primary monitor
···
26
26
bspc config focused_border_color "#bd93f9"
27
27
bspc config presel_feedback_color "#bd93f9"
28
28
29
-
bspc config split_ratio 0.71
29
+
bspc config split_ratio 0.71
30
30
31
31
# Extra padding for polybar
32
32
bspc config -m primary top_padding 34
+1
-4
home/profiles/desktop/default.nix
+1
-4
home/profiles/desktop/default.nix
···
99
99
".local/bin/mpv-ify".source = ./bin/mpv-ify;
100
100
".local/bin/bspswallow".source = ./bin/bspswallow;
101
101
".config/bspwm/terminals".text = "Kitty";
102
-
".config/eww/eww.yuck".source = ./eww/eww.yuck;
103
-
".config/eww/eww.scss".source = ./eww/eww.scss;
104
-
".config/eww/widgets.yuck".source = ./eww/widgets.yuck;
105
102
# ".local/bin/hotplug-monitor.sh".source = ./bin/hotplug-monitor.sh;
106
103
};
107
104
···
123
120
124
121
qt = {
125
122
enable = true;
126
-
platformTheme = "gtk";
123
+
platformTheme.name = "gtk";
127
124
style = { name = "qt5ct-style"; };
128
125
};
129
126
home/profiles/desktop/polybar/run.sh
home/profiles/desktop/polybar/run.sh
+1
-1
home/profiles/email/default.nix
+1
-1
home/profiles/email/default.nix
···
175
175
bind editor ^T complete
176
176
177
177
# Press A to archive
178
-
macro index,pager A "<clear-flag>N<save-message>=/Archive" "mark message as Archived"
178
+
macro index,pager A "<clear-flag><save-message>=/Archive" "mark message as Archived"
179
179
# Press C to add contact to Khard address book
180
180
macro index,pager C \
181
181
"<pipe-message>khard add-email<return>" \
+1
-1
home/profiles/firefox/default.nix
+1
-1
home/profiles/firefox/default.nix
···
21
21
extensions = with pkgs.nur.repos.rycee.firefox-addons; [
22
22
# Find extensions: https://github.com/nix-community/nur-combined/blob/master/repos/rycee/pkgs/firefox-addons/generated-firefox-addons.nix
23
23
ublock-origin
24
-
wallabagger
24
+
# wallabagger
25
25
# tree-style-tab
26
26
tridactyl
27
27
promnesia
+4
home/profiles/nvim/config/after/syntax/vimwiki.vim
+4
home/profiles/nvim/config/after/syntax/vimwiki.vim
+11
home/profiles/nvim/config/fnl/conf/formatting.fnl
+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
+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
+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
+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
+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
+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
+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
+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
+8
home/profiles/nvim/config/fnl/lib/macros.fnl
+37
home/profiles/nvim/config/fnl/lib/nvim.fnl
+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
+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
+133
-4
home/profiles/nvim/default.nix
···
1
1
{ pkgs, ... }:
2
+
# TODO Need to find a solution to have my own packages?
3
+
# Or at least update to recent versions of the packages I do use in nixpkgs
2
4
{
3
5
home.sessionVariables.EDITOR = "nvim";
4
6
home.shellAliases = {
7
+
vim = "nvim";
5
8
k = "cd ~/kitaab/vimwiki; vim -c :VimwikiIndex; cd $OLDPWD";
9
+
# kitaab zettel
10
+
kz = "cd ~/kitaab/vimwiki; vim -c :VimwikiIndex -c :ZettelNew; cd $OLDPWD";
11
+
# kitaab get by tagged
12
+
kt =
13
+
"cd /home/anish/kitaab/vimwiki; eza *_index.wiki | fzf --preview 'bat --style=numbers --color=always --terminal-width -1 ./{}';cd $OLDPWD";
6
14
};
7
15
16
+
home.file.".config/nvim".source = ./config;
17
+
8
18
programs.neovim = {
9
19
enable = true;
10
-
package = pkgs.unstable.neovim-unwrapped;
11
20
extraPackages = with pkgs; [
12
-
# used for Cody
13
-
nodejs
21
+
# used to compile tree-sitter grammar
22
+
# python-with-my-packages
23
+
# nodejs
24
+
# clojure-lsp
25
+
# clojure
26
+
# clj-kondo
27
+
terraform-lsp
28
+
nil
29
+
gopls
30
+
gcc
31
+
shellcheck
32
+
shfmt
33
+
proselint
34
+
nixfmt
35
+
# statix
36
+
# nodePackages.typescript
37
+
# nodePackages.typescript-language-server
38
+
# luajitPackages.lua-lsp
39
+
fennel-ls
40
+
unstable.starpls-bin
14
41
];
15
42
16
-
vimAlias = true;
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;
17
146
};
18
147
}
19
148
home/profiles/task/bin/set-backlog.sh
home/profiles/task/bin/set-backlog.sh
home/profiles/task/bin/set-focus.sh
home/profiles/task/bin/set-focus.sh
+5
home/profiles/task/taskrc
+5
home/profiles/task/taskrc
···
82
82
report.every.labels=ID,Active,Deps,P,Project,Tag,Recur,S,Due,Until,Description
83
83
report.every.columns=id,start.age,depends,priority,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description
84
84
85
+
report.poms.filter=(status:pending -idea -backlog -BLOCKED)
86
+
report.poms.labels=UUID,ID,Project,Tag,Description
87
+
report.poms.columns=uuid,id,project,tags,description
88
+
report.poms.sort=start+,urgency+
89
+
85
90
# Urgency
86
91
urgency.user.project.wait.coefficient=-10.0
87
92
urgency.user.project.craft.coefficient=1.9
+1
-1
hosts/box/configuration.nix
+1
-1
hosts/box/configuration.nix
···
91
91
sound.enable = false;
92
92
93
93
programs.gnupg.agent.enable = true;
94
-
programs.gnupg.agent.pinentryFlavor = "curses";
94
+
programs.gnupg.agent.pinentryPackage = pkgs.pinentry-curses;
95
95
programs.gnupg.agent.enableSSHSupport = true;
96
96
97
97
# This value determines the NixOS release with which your system is to be
+7
-5
hosts/box/default.nix
+7
-5
hosts/box/default.nix
···
7
7
../profiles/taskd
8
8
../profiles/shaarli
9
9
../profiles/dns
10
-
../profiles/monitoring
10
+
# ../profiles/monitoring
11
11
../profiles/nfs
12
12
../profiles/gonic
13
-
../profiles/headphones
13
+
# ../profiles/headphones # TODO broken on 23.11, see: https://github.com/rembo10/headphones/issues/3320
14
14
../profiles/radicale
15
-
../profiles/seafile
15
+
# ../profiles/seafile # waiting for https://github.com/NixOS/nixpkgs/pull/249523 to be merged
16
16
../profiles/syncthing
17
17
../profiles/dhyan
18
18
../profiles/calibre
···
22
22
../profiles/grasp
23
23
# ../profiles/archivebox
24
24
# ../profiles/woodpecker-agent
25
-
../profiles/jellyfin
25
+
# ../profiles/jellyfin
26
26
../profiles/ulogger-server
27
-
../profiles/photoprism
27
+
../profiles/photoprism # Replace with immich
28
+
../profiles/gpodder
29
+
#../profiles/postgres_upgrade_script
28
30
];
29
31
30
32
# Backups
+1
-1
hosts/curve/configuration.nix
+1
-1
hosts/curve/configuration.nix
+29
-12
hosts/curve/default.nix
+29
-12
hosts/curve/default.nix
···
1
-
{ self, pkgs, ... }:
2
-
{
1
+
{ self, pkgs, ... }: {
3
2
imports = [
4
3
./configuration.nix
5
4
../users/anish
···
17
16
# ../profiles/mount-mossnet
18
17
];
19
18
19
+
# temporarily allow ssh access for work, to be able to do deploy new services
20
+
services.openssh = {
21
+
enable = true;
22
+
settings.PasswordAuthentication = false;
23
+
settings.PermitRootLogin = "no";
24
+
};
25
+
20
26
# import profiling tools
21
27
programs.systemtap.enable = true;
22
28
29
+
virtualisation.docker.enable = true;
30
+
virtualisation.docker.storageDriver = "btrfs";
31
+
environment.systemPackages = with pkgs; [ docker-compose ];
32
+
23
33
# Speed up boot by removing dependency on network
24
34
systemd = {
25
-
targets.network-online.wantedBy = pkgs.lib.mkForce [ ]; # Normally ["multi-user.target"]
26
-
services.NetworkManager-wait-online.wantedBy = pkgs.lib.mkForce [ ]; # Normally ["network-online.target"]
35
+
targets.network-online.wantedBy =
36
+
pkgs.lib.mkForce [ ]; # Normally ["multi-user.target"]
37
+
services.NetworkManager-wait-online.wantedBy =
38
+
pkgs.lib.mkForce [ ]; # Normally ["network-online.target"]
27
39
};
28
40
29
41
programs.gnupg.agent.enable = true;
30
-
programs.gnupg.agent.pinentryFlavor = "gnome3";
42
+
programs.gnupg.agent.pinentryPackage = pkgs.pinentry-gnome3;
31
43
32
44
fileSystems."/mnt/ftp" = {
33
45
device = "192.168.1.240:/home/ftp";
···
58
70
59
71
# lazy enable of ports necessary for KDE connect which is installed via cli home profile (for some reason?)
60
72
networking.firewall = {
61
-
allowedTCPPortRanges = [{ from = 1714; to = 1764; }];
62
-
allowedUDPPortRanges = [{ from = 1714; to = 1764; }];
73
+
allowedTCPPorts = [ 22 ]; # allow ssh
74
+
allowedTCPPortRanges = [{
75
+
from = 1714;
76
+
to = 1764;
77
+
}];
78
+
allowedUDPPortRanges = [{
79
+
from = 1714;
80
+
to = 1764;
81
+
}];
63
82
};
64
83
65
84
age.secrets.curve-wg.file = "${self}/secrets/curve-wg.age";
···
75
94
mossnet.backup = {
76
95
enable = true;
77
96
name = "curve";
78
-
paths = [
79
-
"/home/anish/usr"
80
-
"/home/anish/.ssh"
81
-
];
97
+
paths = [ "/home/anish/usr" "/home/anish/.ssh" ];
82
98
};
83
99
84
100
# enable adb
···
87
103
#virtualisation.docker.enable = true;
88
104
boot.blacklistedKernelModules = [ "qcserial" ];
89
105
# Used for packer Capsul
90
-
users.users.anish.extraGroups = [ "adbusers" "wheel" "plugdev" "libvertd" ];
106
+
users.users.anish.extraGroups =
107
+
[ "adbusers" "wheel" "plugdev" "libvertd" "docker" ];
91
108
virtualisation.libvirtd.enable = true;
92
109
hardware.keyboard.zsa.enable = true;
93
110
services.udev.extraRules = ''
+12
-16
hosts/curve/hardware-configuration.nix
+12
-16
hosts/curve/hardware-configuration.nix
···
5
5
6
6
{
7
7
imports =
8
-
[
9
-
(modulesPath + "/installer/scan/not-detected.nix")
8
+
[ (modulesPath + "/installer/scan/not-detected.nix")
10
9
];
11
10
12
-
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" "rtsx_pci_sdmmc" ];
11
+
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
13
12
boot.initrd.kernelModules = [ "dm-snapshot" ];
14
13
boot.kernelModules = [ "kvm-intel" ];
15
14
boot.extraModulePackages = [ ];
16
15
17
-
fileSystems."/boot" =
18
-
{
19
-
device = "/dev/disk/by-uuid/2C41-3DAA";
20
-
fsType = "vfat";
21
-
};
22
-
23
16
fileSystems."/" =
24
-
{
25
-
device = "/dev/disk/by-uuid/a4ae2855-10b9-49f3-adb0-acd82b74eeb9";
17
+
{ device = "/dev/disk/by-uuid/e1268753-4f18-4e6f-8edb-d4724ad8eb4a";
26
18
fsType = "btrfs";
27
19
options = [ "subvol=root" ];
28
20
};
29
21
30
22
fileSystems."/home" =
31
-
{
32
-
device = "/dev/disk/by-uuid/a4ae2855-10b9-49f3-adb0-acd82b74eeb9";
23
+
{ device = "/dev/disk/by-uuid/e1268753-4f18-4e6f-8edb-d4724ad8eb4a";
33
24
fsType = "btrfs";
34
25
options = [ "subvol=home" ];
35
26
};
36
27
28
+
fileSystems."/boot" =
29
+
{ device = "/dev/disk/by-uuid/8244-A184";
30
+
fsType = "vfat";
31
+
};
32
+
37
33
swapDevices =
38
-
[{ device = "/dev/disk/by-uuid/23658926-6ffa-42dc-8915-a6479c385e0b"; }];
34
+
[ { device = "/dev/disk/by-uuid/e220fea6-cf3b-4687-bfe1-9cf6d3ba57f7"; }
35
+
];
39
36
40
37
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
41
38
# (the default) this is the recommended approach. When using systemd-networkd it's
···
46
43
# networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true;
47
44
48
45
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
49
-
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
50
-
# hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
46
+
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
51
47
}
+337
hosts/development/mirlo/docker-compose.nix
+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
+6
-3
hosts/helix/default.nix
···
11
11
# ../profiles/mount-mossnet
12
12
../profiles/freshrss
13
13
../profiles/microbin
14
+
../profiles/site
15
+
16
+
# ../profiles/postgres_upgrade_script
14
17
];
15
18
16
19
# Capsul specific
···
27
30
privateKeyFile = "/run/agenix/helix-wg";
28
31
};
29
32
30
-
services.postgresql.package = pkgs.postgresql_11;
33
+
services.postgresql.package = pkgs.postgresql_15;
31
34
services.postgresqlBackup = {
32
35
# TODO needs working wireguard to box
33
36
enable = false;
34
-
databases = [ "gitea" "freshrss" "woodpecker" ];
37
+
databases = [ "gitea" "freshrss" ]; # "woodpecker"
35
38
location = "/mnt/two/postgres";
36
39
};
37
40
···
41
44
paths = [
42
45
"/var/lib/gitea"
43
46
"/var/lib/freshrss"
44
-
"/var/lib/woodpecker"
47
+
# "/var/lib/woodpecker"
45
48
"/var/lib/microbin"
46
49
];
47
50
-5
hosts/lituus/hardware-configuration.nix
-5
hosts/lituus/hardware-configuration.nix
···
20
20
fsType = "btrfs";
21
21
};
22
22
23
-
fileSystems."/storage" =
24
-
{ device = "/dev/disk/by-uuid/c2181608-cbb0-40ab-b62b-158cdc9b9300";
25
-
fsType = "btrfs";
26
-
};
27
-
28
23
swapDevices = [ ];
29
24
30
25
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+1
-1
hosts/profiles/core/default.nix
+1
-1
hosts/profiles/core/default.nix
+2
-3
hosts/profiles/desktop/default.nix
+2
-3
hosts/profiles/desktop/default.nix
···
77
77
feh
78
78
sxiv
79
79
xkblayout-state
80
-
vcv-rack
81
80
zathura
82
81
calibre
83
82
mpv
···
87
86
rofi
88
87
rofimoji
89
88
rofi-calc
90
-
# eww
91
89
obs-studio
92
90
lightdm
93
91
dunst
···
121
119
night = 3700;
122
120
};
123
121
};
122
+
displayManager.defaultSession = "none+bspwm";
124
123
xserver = {
125
124
enable = false;
126
125
xkb.layout = "us,dvorak";
127
126
desktopManager.wallpaper.mode = "fill";
128
127
desktopManager.gnome.enable = true;
129
128
displayManager = {
130
-
# gdm.enable = true;
129
+
# gdm.enable = true;
131
130
# defaultSession = "none+bspwm";
132
131
sessionCommands = ''
133
132
${pkgs.xorg.xrdb}/bin/xrdb -merge <<EOF
+1
hosts/profiles/dns/default.nix
+1
hosts/profiles/dns/default.nix
+1
-1
hosts/profiles/finance/default.nix
+1
-1
hosts/profiles/finance/default.nix
+8
-7
hosts/profiles/freshrss/default.nix
+8
-7
hosts/profiles/freshrss/default.nix
···
17
17
18
18
services.postgresql = {
19
19
enable = true; # Ensure postgresql is enabled
20
-
authentication = ''
21
-
local freshrss all ident map=freshrss-users
22
-
'';
23
-
identMap = # Map the freshrss user to postgresql
24
-
''
25
-
freshrss-users freshrss freshrss
26
-
'';
20
+
# authentication = ''
21
+
# local freshrss all ident map=freshrss-users
22
+
# '';
23
+
# identMap = # Map the freshrss user to postgresql
24
+
# ''
25
+
# freshrss-users freshrss freshrss
26
+
# freshrss-users postgres freshrss
27
+
# '';
27
28
ensureDatabases = [ "freshrss" ];
28
29
ensureUsers = [{
29
30
name = "freshrss";
+25
-10
hosts/profiles/gitea/default.nix
+25
-10
hosts/profiles/gitea/default.nix
···
4
4
age.secrets.gitea-dbpass.file = "${self}/secrets/gitea-dbpass.age";
5
5
age.secrets.gitea-dbpass.owner = "gitea";
6
6
7
-
services.gitea = {
7
+
services.forgejo = {
8
8
enable = true;
9
-
package = pkgs.forgejo;
10
-
appName = "Sealight Git Forge";
9
+
user = "gitea";
10
+
group = "gitea";
11
+
stateDir = "/var/lib/gitea";
11
12
database = {
12
13
type = "postgres";
14
+
user = "gitea";
15
+
name = "gitea";
13
16
passwordFile = "/run/agenix/gitea-dbpass";
14
17
};
15
18
settings = {
19
+
DEFAULT.APP_NAME = "Sealight Git Forge";
16
20
server = {
17
21
DOMAIN = "git.sealight.xyz";
18
22
ROOT_URL = "https://git.sealight.xyz";
···
24
28
repository = {
25
29
DEFAULT_BRANCH = "main";
26
30
};
31
+
service.DISABLE_REGISTRATION = true;
27
32
"markup.restructuredtext" = {
28
33
ENABLED = true;
29
34
FILE_EXTENSIONS = ".rst";
···
43
48
};
44
49
};
45
50
51
+
users.users.gitea = {
52
+
home = "/var/lib/gitea";
53
+
useDefaultShell = true;
54
+
group = "gitea";
55
+
isSystemUser = true;
56
+
};
57
+
58
+
users.groups.gitea = {};
59
+
46
60
environment.systemPackages = [ pkgs.pandoc ];
47
61
services.postgresql = {
48
62
enable = true; # Ensure postgresql is enabled
49
-
authentication = ''
50
-
local gitea all ident map=gitea-users
51
-
'';
52
-
identMap = # Map the gitea user to postgresql
53
-
''
54
-
gitea-users gitea gitea
55
-
'';
63
+
# authentication = ''
64
+
# local gitea all ident map=gitea-users
65
+
# '';
66
+
# identMap = # Map the gitea user to postgresql
67
+
# ''
68
+
# gitea-users gitea gitea
69
+
# gitea-users postgres gitea
70
+
# '';
56
71
ensureDatabases = [ "gitea" ];
57
72
ensureUsers = [{
58
73
name = "gitea";
+10
-1
hosts/profiles/gonic/default.nix
+10
-1
hosts/profiles/gonic/default.nix
···
5
5
music-path /mnt/two/music/
6
6
podcast-path /data/podcasts
7
7
cache-path /data/cache
8
+
playlists-path /data/playlists
8
9
'';
9
-
mossnet.gonic.user = "headphones";
10
+
mossnet.gonic.user = "gonic";
10
11
mossnet.gonic.group = "audio";
11
12
networking.firewall.allowedTCPPorts = [ 4747 ];
13
+
14
+
users.users.gonic = {
15
+
# uid = config.ids.uids.headphones;
16
+
# isSystemUser = true;
17
+
group = "audio";
18
+
# home = "/var/lib/headphones";
19
+
createHome = true;
20
+
};
12
21
}
-4
hosts/profiles/gonic/module-gonic.nix
-4
hosts/profiles/gonic/module-gonic.nix
···
68
68
Group = cfg.group;
69
69
DevicePolicy = "closed";
70
70
NoNewPrivileges = " yes";
71
-
PrivateTmp = "yes";
72
-
PrivateUsers = "yes";
73
71
ProtectControlGroups = "yes";
74
72
ProtectKernelModules = "yes";
75
73
ProtectKernelTunables = "yes";
76
74
RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6";
77
-
RestrictNamespaces = "yes";
78
-
RestrictRealtime = "yes";
79
75
SystemCallFilter = "~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap";
80
76
ReadWritePaths = dataFolder;
81
77
StateDirectory = baseNameOf dataFolder;
+16
hosts/profiles/gpodder/default.nix
+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
+1
hosts/profiles/headphones/default.nix
+1
-1
hosts/profiles/matrix/mautrix-services.nix
+1
-1
hosts/profiles/matrix/mautrix-services.nix
+2
-2
hosts/profiles/microbin/default.nix
+2
-2
hosts/profiles/microbin/default.nix
···
1
1
{ config, lib, pkgs, ... }:
2
2
{
3
3
services.microbin.enable = true;
4
-
services.microbin.hostname = "bin.sealight.xyz";
5
-
services.microbin.port = 4949;
4
+
services.microbin.settings.PUBLIC_PATH = "bin.sealight.xyz";
5
+
services.microbin.settings.MICROBIN_PORT = 4949;
6
6
networking.firewall.allowedTCPPorts = [ 4949 ];
7
7
services.nginx.virtualHosts."bin.sealight.xyz" = {
8
8
enableACME = true;
+1
hosts/profiles/mossnet-hosts/default.nix
+1
hosts/profiles/mossnet-hosts/default.nix
+2
-2
hosts/profiles/music/default.nix
+2
-2
hosts/profiles/music/default.nix
···
16
16
orca-c
17
17
supercollider
18
18
dirt
19
-
sunvox
19
+
# sunvox
20
20
vcv-rack
21
21
lmms
22
22
bespokesynth
···
38
38
alsa.enable = true;
39
39
alsa.support32Bit = false;
40
40
pulse.enable = true;
41
-
jack.enable = true;
41
+
jack.enable = true;
42
42
# Deprecated as of 23.05
43
43
# config = {
44
44
# pipewire."context.properties"."default.clock.rate" = "48000";
+3
-4
hosts/profiles/postgres_upgrade_script/default.nix
+3
-4
hosts/profiles/postgres_upgrade_script/default.nix
···
6
6
# TODO it's perhaps advisable to stop all services that depend on postgresql
7
7
systemctl stop postgresql
8
8
9
-
# TODO replace `<new version>` with the psqlSchema here
10
9
# The schema can be found by running:
11
-
# nix-instantiate '<nixpkgs>' --eval -A postgresql_14.psqlSchema
12
-
export NEWDATA="/var/lib/postgresql/<new version>"
10
+
# nix eval --raw nixpkgs#postgresql_15.psqlSchema
11
+
export NEWDATA="/var/lib/postgresql/15"
13
12
14
13
# TODO specify the postgresql package you'd like to upgrade to
15
-
export NEWBIN="${pkgs.postgresql_14}/bin"
14
+
export NEWBIN="${pkgs.postgresql_15}/bin"
16
15
17
16
export OLDDATA="${config.services.postgresql.dataDir}"
18
17
export OLDBIN="${config.services.postgresql.package}/bin"
+1
-1
hosts/profiles/rss-bridge/default.nix
+1
-1
hosts/profiles/rss-bridge/default.nix
···
3
3
services.rss-bridge = {
4
4
enable = true;
5
5
virtualHost = "bridge.sealight.xyz";
6
-
whitelist = [ "Facebook" "Bandcamp" "Twitter" "Telegram" "Instagram" "Reddit" ];
6
+
config.system.enabled_bridges = [ "Facebook" "Bandcamp" "Twitter" "Telegram" "Instagram" "Reddit" ];
7
7
};
8
8
9
9
services.nginx.virtualHosts."bridge.sealight.xyz".forceSSL = true;
hosts/profiles/sync/music/get-music.sh
hosts/profiles/sync/music/get-music.sh
+2
-2
hosts/profiles/sync/website/default.nix
+2
-2
hosts/profiles/sync/website/default.nix
···
6
6
path = [
7
7
pkgs.git
8
8
pkgs.coreutils
9
-
pkgs.nixUnstable
9
+
pkgs.nixVersions.latest
10
10
pkgs.openssh
11
11
pkgs.deploy
12
12
];
···
18
18
git add flake.lock
19
19
git diff-index --quiet HEAD || git commit -m 'updating website' # if nothing, don't exit 1
20
20
git push
21
-
deploy .#cube
21
+
deploy .#helix
22
22
exit 0
23
23
'';
24
24
serviceConfig = {
+1
-1
hosts/profiles/ulogger-server/default.nix
+1
-1
hosts/profiles/ulogger-server/default.nix
+14
-67
hosts/profiles/wallabag/default.nix
+14
-67
hosts/profiles/wallabag/default.nix
···
1
1
{ self, pkgs, config, lib, ... }:
2
2
3
3
{
4
-
# age.secrets.wallabag-password.file = "${self}/secrets/wallabag-password.age";
5
-
# age.secrets.wallabag-secret.file = "${self}/secrets/wallabag-secret.age";
6
-
# age.secrets.wallabag-password.owner = "wallabag";
7
-
# age.secrets.wallabag-secret.owner = "wallabag";
4
+
age.secrets.wallabag-password.file = "${self}/secrets/wallabag-password.age";
5
+
age.secrets.wallabag-secret.file = "${self}/secrets/wallabag-secret.age";
6
+
age.secrets.wallabag-password.owner = "wallabag";
7
+
age.secrets.wallabag-secret.owner = "wallabag";
8
8
services.postgresql = {
9
9
enable = true;
10
10
package = pkgs.postgresql_15;
···
18
18
}
19
19
];
20
20
authentication = ''
21
-
local wallabag all md5
21
+
local wallabag all peer
22
22
'';
23
23
};
24
24
25
25
services.wallabag = {
26
26
enable = true;
27
-
hostName = "read.mossnet.lan";
28
-
package = pkgs.wallabag;
29
-
conf = ''
30
-
# This file is a "template" of what your parameters.yml file should look like
31
-
parameters:
32
-
database_driver: pdo_pgsql
33
-
database_host: localhost
34
-
database_port: ~
35
-
database_name: wallabag
36
-
database_user: wallabag
37
-
database_password: wallabag
38
-
# For SQLite, database_path should be "%kernel.project_dir%/data/db/wallabag.sqlite"
39
-
database_path: ~
40
-
database_table_prefix: wallabag_
41
-
database_socket: null
42
-
# with PostgreSQL and SQLite, you must set "utf8"
43
-
database_charset: utf8
44
-
45
-
domain_name: http://read.mossnet.lan/
46
-
server_name: "mossnet wallabag instance"
47
-
48
-
mailer_dsn: null://
49
-
locale: en
50
-
51
-
# A secret key that's used to generate certain security-related tokens
52
-
secret: SAFGOECRIlfal89oe6u0(*^dsaaih961
53
-
54
-
# two factor stuff
55
-
twofactor_auth: false
56
-
twofactor_sender: no-reply@wallabag.org
57
-
58
-
# fosuser stuff
59
-
fosuser_registration: false
60
-
fosuser_confirmation: true
61
-
62
-
# how long the access token should live in seconds for the API
63
-
fos_oauth_server_access_token_lifetime: 3600
64
-
# how long the refresh token should life in seconds for the API
65
-
fos_oauth_server_refresh_token_lifetime: 1209600
66
-
67
-
from_email: ops@sealight.xyz
68
-
69
-
rss_limit: 50
70
-
71
-
# RabbitMQ processing
72
-
rabbitmq_host: localhost
73
-
rabbitmq_port: 5672
74
-
rabbitmq_user: guest
75
-
rabbitmq_password: guest
76
-
rabbitmq_prefetch_count: 10
77
-
78
-
# Redis processing
79
-
redis_scheme: tcp
80
-
redis_host: localhost
81
-
redis_port: 6379
82
-
redis_path: null
83
-
redis_password: null
84
-
85
-
# sentry logging
86
-
sentry_dsn: ~
87
-
'';
27
+
domain = "read.mossnet.lan";
28
+
virtualHost.enable = true;
29
+
package = pkgs.my-wallabag;
30
+
# Systemd now defaults to /var/lib?
31
+
# dataDir = "/var/lib/wallabag";
32
+
parameters = {
33
+
"env(SECRET_FILE)" = config.age.secrets.wallabag-secret.path;
34
+
secret = "%env(file:resolve:SECRET_FILE)%";
35
+
};
88
36
};
89
-
# networking.firewall.allowedTCPPorts = [ 8080 ];
90
37
}
+10
-5
hosts/profiles/wireguard-server/default.nix
+10
-5
hosts/profiles/wireguard-server/default.nix
···
36
36
publicKey = "gcdq86hhEUlqF2chqYB/F8pALyAMNFvwLycxBoHuoDs=";
37
37
allowedIPs = [ "10.0.69.5/32" ];
38
38
}
39
-
# {
40
-
# # hyperplane
41
-
# publicKey = "";
42
-
# allowedIPs = [ "10.0.69.6/32" ];
43
-
# }
39
+
{
40
+
# hyperplane
41
+
publicKey = "v+EUuM60yZLvBmdCG9GxfFAtSjS1VvbUWcyNb8emjDg=";
42
+
allowedIPs = [ "10.0.69.6/32" ];
43
+
}
44
+
{
45
+
# work
46
+
publicKey = "/gv66s8DfppCCjaEN/jlc8z95IhEWPgDumykqKEl0QU=";
47
+
allowedIPs = [ "10.0.69.7/32" ];
48
+
}
44
49
];
45
50
};
46
51
}
+6
-3
hosts/users/anish/default.nix
+6
-3
hosts/users/anish/default.nix
···
4
4
programs.zsh.enable = true;
5
5
users.users.anish = {
6
6
description = "Personal user for Anish";
7
-
hashedPassword = "$y$j9T$y3DPt/dWaPE.gRazQqw1w0$1RMH5sl/Nu8kW3ZMywYCPRniHD/jF5qRh0VKrdJ.bV2";
7
+
hashedPassword =
8
+
"$y$j9T$y3DPt/dWaPE.gRazQqw1w0$1RMH5sl/Nu8kW3ZMywYCPRniHD/jF5qRh0VKrdJ.bV2";
8
9
shell = pkgs.zsh;
9
10
isNormalUser = true;
10
11
extraGroups = [ "wheel" "audio" "networkmanager" "video" ];
11
12
openssh.authorizedKeys.keys = [
12
13
# Curve
13
14
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDM0Zvei46x/yZl/IeBCq6+IYQQ0avulzVyBysF9cPigZMCybWRV7IEU+E3k9t6JrbdbdGfJkcZIWmsWDdKS8W8mBnZpVoT0ffLynu8JQ/TKdGm4Qv6bgUeKNrGsNv0ZPs2CDaGSLj0oJfRF7Ko10tcLP0vW+yujrh+y6TH/vVzJioaV4TGvtCUpn+wEQah9ROwPQLUUofsSWdnRsDJ/gp37zXWs4l5wyjSKtP3O9RZUP7kBekbSqEgSXiTk0oUQSVqIWl9NDiP6onk/gSOjXsR/JPqsSN/XI/c/yj6gyY0f51Ru2D7iBxuMJIJcWV+rU6coIj+ULcQWLzt/7TI8jq5AOOzI/ll4zbL24Eo84Rz+TP9tvMMhDZ0VaMN22AJ8qQEjc5P09tWKsX7Jg39XelyV1jHXncE4yvIE9F4RSCHzWCeKeXakizQNuzSaxTxIExRFYHjNW5bR6+3MTGwVrEIXU+qML+0yFTR86MT+tdY5AreAJQLwbog79O1NupeXJE= anish@curve"
14
-
# Line
15
-
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDtU2GMYjXj6RGO1+mwM4TDGOo0qrKLTL4Di8+QgDX0p5vUEsnE1PS9wnuqCmSu75U8g0XIAMtvtdYyGk1N+Bx01erAZpT8DLYtIXFCyaiN28PVu5T1D0T+TQ7xgIH1qenXZR2DOQdf6kpvKEfm7+7bWhCo0N/KFMpmReubyzHDQcq/1qQasxTL+YALQFOjwKqsOTBXbHwZ103AEAcQX4ftBFEOfVli4/1aKIK4dNSZYB7J9Htq707YnsEqo9RLAMh0aOTTYgTx9AoSUDeqGuh/AGkcB7NcS7EEtI6d5YUGylwZh/gF6hqE0jl8kn2m5jMKXL3CRohZvjifue8x/GIjpu5WRabUuhBEbrfTQQaC7taHnt5rvYCGzKZx09TexUzhuz2CL480DRoxSG+P+lCNm1dIg/EZrnGEzXCSr36PlOqS5t5gm8tPkzCmZf2wU15A3ZIYUPmnYLqsn4WmIV7rKmdqt2ctWELUXow3PPiZXBucP9P3xpsYEfF1SB2SGNc= u0_a139@localhost"
16
15
# Box
17
16
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKN8/SH55DBiwVoSnTU8k2Pen+wmovL9QaMyehxGEsJJv/8fzwsswGalD4C/4O51LOvdu4UKkZW5hG02uVSK+58p3UV3pOPyoqsu/aDeIsWsqmTeTzUrBIWOlNzcDKnohLz2oGC5YO+wyTJ9Iteq6aGJDjErsW7sG3h5lXCs551EmJNNGhtBQaaoytMNnWqSdlVjDNCijurH7WUpp40U/RjEp532l4rX6eIIj3jBKEFbhZkFSSjqbj4xM4SyFt+Jmigb1RMjsQjmpfY1vDtM84RcYfpTUte/T5w2dkD5H6kccmWnwKSJpm9wXfx4E7lR9APdUGnau2U1+XxiD3ytGl anish@box"
17
+
# Nix-on-droid line
18
+
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJOiXBPVvZAp1fY0a0Tupxj0Ml6MoA51lvqt/jAQq249 nix-on-droid@localhost"
19
+
# Work
20
+
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC/vvh0i6+uAN0GWlK6ZfyTlc/AW54xe2CroUDsDSoGnFKeIUiSsWexobODlVakNhqwCKfsvUh6g+RdA8ZVcamATcYqxysP4X5fRksmAzRm5281O7ZBDHMB2BdcfHSTgiz7JvMRIQYWDlU8Ck6IL4wlN0b2GMUj9t/GeG37us8280rxpRNoIY7M27AJEZ7XNQhctBIVujxctVBgIMYmZiTwziU7ywJv4rNT5OAWvjRXSo1rkxdvx3VESv4y/mp8m7dEupZpIjIFsLs52+UG5LtadulUqtTWg05sCw8LEcmRhflgZSAvjw60RrKFCuWxc8+/Pmaw+zExeBMenqi0NzuTc3S3k2wCKVIZDh/0tlXzIwZ6WRqxDevUtEKfvbEFMXd8akhTfYs0dyszcFRevBxOBPbcKku+FK/HkdPLmEANvxYty3cv+Eipkz3c8JPJPvXNTXrjepXMm0LUKodO3c15hGogCOxUO38kykkyYnn+MxxHparoMfEr2+oHNpQoS5wA1G43ppqjVoRDgnhleu6ixwRkLZzphY3cnOd5jL9Ie5xIGbFWH1qSlQRdHBkHjuf85z7+QK8nFYAhmG1K3Vt3GNtF8LN1tYQkfwBJ/vsroMNzGPoq4PjVbqb80Eq+96cP89XKfU2/xw1g+p2lJDm/zC1WCjXVzf8NRwC7gqPavQ== anishlakhwara@anishs-mbp.lan"
18
21
];
19
22
};
20
23
}
install-encrypted.sh
install-encrypted.sh
+2
-2
install-yubikey.sh
+2
-2
install-yubikey.sh
···
19
19
20
20
# Yubikey Setup
21
21
SLOT=2
22
-
ykpersonalize -"$SLOT" -ochal-resp -ochal-hmac
22
+
# ykpersonalize -"$SLOT" -ochal-resp -ochal-hmac
23
23
SALT_LENGTH=16
24
24
salt="$(dd if=/dev/random bs=1 count=$SALT_LENGTH 2>/dev/null | rbtohex)"
25
25
k_user=PASSWORDCHANGEMEPLAEASES
···
147
147
sound.enable = true;
148
148
hardware.pulseaudio.enable = true;
149
149
150
-
services.xserver.libinput.enable = true;
150
+
services.libinput.enable = true;
151
151
152
152
# Hmmm maybe somewhere else?
153
153
users.users.anish = {
+2
-1
modules/nixos/default.nix
+2
-1
modules/nixos/default.nix
+120
modules/nixos/gpodder2go.nix
+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
+198
-212
modules/nixos/wallabag.nix
···
1
-
{ config, options, lib, pkgs, ... }:
2
-
3
-
with lib;
1
+
{ config, lib, pkgs, ... }:
4
2
let
5
-
cfg = config.services.wallabag;
3
+
# Based on https://github.com/wallabag/wallabag/blob/2.6.6/app/config/parameters.yml.dist
4
+
settings = {
5
+
database_driver = "${cfg.database_type}";
6
+
database_host = null;
7
+
database_port = 5432;
8
+
database_name = "wallabag";
9
+
database_user = "wallabag";
10
+
database_password = null;
11
+
database_path = null;
12
+
database_table_prefix = "wallabag_";
13
+
database_socket = "/run/postgresql";
14
+
database_charset = "utf8";
6
15
7
-
poolName = "wallabag";
16
+
domain_name = "http://${cfg.domain}";
17
+
server_name = "Wallabag";
8
18
9
-
configFile = pkgs.writeTextFile {
10
-
name = "wallabag-config";
11
-
text = cfg.conf;
12
-
destination = "/app/config/parameters.yml";
13
-
};
19
+
# Needs an explicit command since Symfony version used by Wallabag does not yet support the `native` transport
20
+
# and the `sendmail` transport does not respect `sendmail_path` configured in `php.ini`.
21
+
mailer_dsn = "sendmail://default?command=/run/wrappers/bin/sendmail%%20-t%%20-i";
14
22
15
-
appDir = pkgs.buildEnv {
16
-
name = "wallabag-app-dir";
17
-
ignoreCollisions = true;
18
-
checkCollisionContents = false;
19
-
paths = [ configFile "${cfg.package}" ];
20
-
pathsToLink = [ "/app" "/src" "/translations" ];
21
-
};
23
+
locale = "en";
22
24
23
-
# See there for available commands:
24
-
# https://doc.wallabag.org/en/admin/console_commands.html
25
-
# A user can be made admin with the fos:user:promote --super <user> command
26
-
console = pkgs.writeShellScriptBin "wallabag-console" ''
27
-
export WALLABAG_DATA="${cfg.dataDir}"
28
-
cd "${cfg.dataDir}"
29
-
${pkgs.php}/bin/php ${pkgs.wallabag}/bin/console --env=prod $@
30
-
'';
25
+
# A secret key that's used to generate certain security-related tokens.
26
+
# "env(SECRET_FILE)" = "/run/secrets/wallabag";
27
+
# secret = "%env(file:resolve:SECRET_FILE)%";
31
28
32
-
in
33
-
{
29
+
# two factor stuff
30
+
twofactor_auth = false;
31
+
twofactor_sender = "";
34
32
35
-
options = {
33
+
# fosuser stuff
34
+
fosuser_registration = false;
35
+
fosuser_confirmation = false;
36
36
37
-
services.wallabag = {
38
-
enable = mkEnableOption "wallabag";
37
+
# how long the access token should live in seconds for the API
38
+
fos_oauth_server_access_token_lifetime = 3600;
39
+
# how long the refresh token should life in seconds for the API
40
+
fos_oauth_server_refresh_token_lifetime = 1209600;
39
41
40
-
user = mkOption {
41
-
type = types.str;
42
-
default = "nginx";
43
-
description = ''
44
-
User account under which both the update daemon and the web-application run.
45
-
'';
46
-
};
42
+
from_email = "wallabag@read.mossnet.lan";
47
43
48
-
dataDir = mkOption {
49
-
type = types.path;
50
-
default = "/var/lib/wallabag";
51
-
description = ''
52
-
Data directory.
53
-
'';
54
-
};
44
+
# RabbitMQ processing
45
+
redis_scheme = "unix";
46
+
redis_host = ""; # Ignored for unix scheme
47
+
redis_port = 0; # Ignored for unix scheme
48
+
redis_path = config.services.redis.servers.wallabag.unixSocket;
49
+
redis_password = null;
55
50
56
-
package = mkOption {
57
-
type = types.package;
58
-
default = pkgs.wallabag;
59
-
description = ''
60
-
Wallabag package to use.
61
-
'';
62
-
};
51
+
# Redis processing
52
+
rabbitmq_host = "";
53
+
rabbitmq_port = 0;
54
+
rabbitmq_user = "";
55
+
rabbitmq_password = "";
56
+
rabbitmq_prefetch_count = 0;
63
57
64
-
hostName = mkOption {
65
-
type = types.str;
66
-
description = ''
67
-
Name of the nginx virtualhost to use and setup.
68
-
'';
69
-
};
58
+
# sentry logging
59
+
sentry_dsn = null;
60
+
} // cfg.parameters;
70
61
71
-
poolConfig = mkOption {
72
-
type = types.lines;
73
-
default = ''
74
-
pm = dynamic
75
-
pm.max_children = 75
76
-
pm.start_servers = 1
77
-
pm.min_spare_servers = 1
78
-
pm.max_spare_servers = 20
79
-
pm.max_requests = 500
80
-
catch_workers_output = 1
81
-
'';
82
-
description = ''
83
-
Options for wallabag's PHP pool. See the documentation on <literal>php-fpm.conf</literal> for details on configuration directives.
84
-
'';
85
-
};
62
+
php = cfg.php.package.withExtensions ({ enabled, all }: enabled ++ (with all; [
63
+
imagick
64
+
tidy
65
+
]));
86
66
87
-
conf = mkOption {
88
-
type = types.str;
89
-
description = ''
90
-
Contents of the wallabag configuration file (parameters.yml)
91
-
'';
92
-
};
93
-
};
67
+
commonServiceConfig = {
68
+
CacheDirectory = "wallabag";
69
+
# Stores sessions.
70
+
CacheDirectoryMode = "700";
71
+
ConfigurationDirectory = "wallabag";
72
+
LogsDirectory = "wallabag";
73
+
StateDirectory = "wallabag";
74
+
# Stores site-credentials-secret-key.txt.
75
+
StateDirectoryMode = "700";
94
76
};
95
77
78
+
cfg = config.services.wallabag;
79
+
in {
80
+
options.services.wallabag = with lib; {
81
+
enable = mkEnableOption (mdDoc "Wallabag read-it-later service");
96
82
97
-
config = mkIf cfg.enable {
83
+
package = mkOption {
84
+
type = types.package;
85
+
default = pkgs.wallabag;
86
+
};
98
87
99
-
services.phpfpm.pools."${poolName}" = {
100
-
user = "${cfg.user}";
101
-
group = "nginx";
102
-
phpPackage = pkgs.php;
103
-
phpEnv = {
104
-
WALLABAG_DATA = cfg.dataDir;
105
-
PATH = lib.makeBinPath [pkgs.php];
106
-
};
107
-
settings = {
108
-
"listen.owner" = "nginx";
109
-
"listen.group" = "nginx";
110
-
"listen.mode" = "0600";
111
-
"user" = "${cfg.user}";
112
-
"group" = "nginx";
113
-
"pm" = "dynamic";
114
-
"pm.max_children" = "75";
115
-
"pm.min_spare_servers" = "5";
116
-
"pm.max_spare_servers" = "20";
117
-
"pm.max_requests" = "10";
118
-
"catch_workers_output" = "1";
119
-
"php_admin_value[error_log]" = "stderr";
120
-
"php_admin_flag[log_errors]" = true;
121
-
};
88
+
php.package = mkOption {
89
+
type = types.package;
90
+
default = pkgs.php;
122
91
};
123
-
services.phpfpm.phpOptions = ''
124
-
max_execution_time = 120
125
-
'';
126
92
127
-
services.nginx.enable = mkDefault true;
128
-
environment.systemPackages = [ console ];
93
+
parameters = mkOption {
94
+
type = types.attrsOf types.str;
95
+
default = {};
96
+
description = mdDoc "Parameters to override from the default. See <https://doc.wallabag.org/en/admin/parameters.html> for values.";
97
+
};
129
98
130
-
# services.nginx.virtualHosts."${cfg.hostName}" = {
131
-
# forceSSL = false;
132
-
# enableACME = false;
133
-
# extraConfig = ''
134
-
# error_log /var/log/nginx/wallabag_error.log;
135
-
# access_log /var/log/nginx/wallabag_access.log;
136
-
# '';
99
+
database_type = mkOption {
100
+
type = types.enum [
101
+
"pdo_sqlite3"
102
+
"pdo_pgsql"
103
+
];
104
+
default = if config.services.postgresql.enable
105
+
then "pdo_pgsql"
106
+
else "pdo_sqlite3";
107
+
defaultText = ''
108
+
if config.services.postgresql.enable
109
+
then "pdo_pgsql"
110
+
else "pdo_sqlite3"
111
+
'';
112
+
description = mdDoc ''
113
+
The database engine name. Can be pdo_sqlite3 or pdo_pgsql.
114
+
'';
115
+
};
137
116
138
-
# root = "${cfg.package}/web";
139
-
# locations."/" = {
140
-
# priority = 10;
141
-
# tryFiles = "$uri /app.php$is_args$args";
142
-
# };
143
-
# locations."/assets".root = "${cfg.dataDir}/web";
144
-
# locations."~ ^/app\\.php(/|$)" = {
145
-
# priority = 100;
146
-
# fastcgiParams = {
147
-
# SCRIPT_FILENAME = "$realpath_root$fastcgi_script_name";
148
-
# DOCUMENT_ROOT = "$realpath_root";
149
-
# };
150
-
# extraConfig = ''
151
-
# fastcgi_pass unix:${config.services.phpfpm.pools."${poolName}".socket};
152
-
# include ${config.services.nginx.package}/conf/fastcgi_params;
153
-
# include ${config.services.nginx.package}/conf/fastcgi.conf;
154
-
# internal;
155
-
# '';
156
-
# };
157
-
# locations."~ \\.php$" = {
158
-
# priority = 1000;
159
-
# return = "404";
160
-
# };
161
-
# };
117
+
domain = mkOption {
118
+
type = types.str;
119
+
description = "Bare domain name for Wallabag";
120
+
};
162
121
122
+
virtualHost.enable = mkEnableOption (mdDoc "Define nginx virtualhost for Wallabag");
123
+
};
163
124
164
-
services.nginx.virtualHosts."${cfg.hostName}" = {
165
-
enableACME = false;
166
-
forceSSL = false;
167
-
root = "${cfg.package}/web";
125
+
config = lib.mkIf cfg.enable {
126
+
environment.etc."wallabag/parameters.yml" = {
127
+
source = pkgs.writeTextFile {
128
+
name = "wallabag-config";
129
+
text = builtins.toJSON {
130
+
parameters = settings;
131
+
};
132
+
};
133
+
};
134
+
135
+
services.nginx = lib.mkIf cfg.virtualHost.enable {
136
+
enable = true;
137
+
138
+
virtualHosts = {
139
+
"${cfg.domain}" = {
140
+
root = "${pkgs.wallabag}/web";
141
+
142
+
extraConfig = ''
143
+
add_header X-Frame-Options SAMEORIGIN;
144
+
add_header X-Content-Type-Options nosniff;
145
+
add_header X-XSS-Protection "1; mode=block";
146
+
'';
168
147
169
-
extraConfig = ''
170
-
add_header X-Frame-Options SAMEORIGIN;
171
-
add_header X-Content-Type-Options nosniff;
172
-
add_header X-XSS-Protection "1; mode=block";
173
-
'';
148
+
locations."/" = {
149
+
extraConfig = ''
150
+
try_files $uri /app.php$is_args$args;
151
+
'';
152
+
};
174
153
175
-
locations."/" = {
176
-
tryFiles = "$uri /app.php$is_args$args";
177
-
};
154
+
locations."/assets".root = "${pkgs.wallabag}/app/web";
178
155
179
-
locations."/assets".root = "${cfg.dataDir}/web";
156
+
locations."~ ^/app\\.php(/|$)" = {
157
+
extraConfig = ''
158
+
fastcgi_pass unix:${config.services.phpfpm.pools.wallabag.socket};
159
+
include ${config.services.nginx.package}/conf/fastcgi.conf;
160
+
fastcgi_param PATH_INFO $fastcgi_path_info;
161
+
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
162
+
fastcgi_param SCRIPT_FILENAME ${pkgs.wallabag}/web/$fastcgi_script_name;
163
+
fastcgi_param DOCUMENT_ROOT ${pkgs.wallabag}/web;
164
+
fastcgi_read_timeout 120;
165
+
internal;
166
+
'';
167
+
};
180
168
181
-
locations."~ ^/app\\.php(/|$)" = {
182
-
fastcgiParams = {
183
-
SCRIPT_FILENAME = "$realpath_root$fastcgi_script_name";
184
-
DOCUMENT_ROOT = "$realpath_root";
169
+
locations."~ /(?!app)\\.php$" = {
170
+
extraConfig = ''
171
+
return 404;
172
+
'';
173
+
};
185
174
};
186
-
extraConfig = ''
187
-
fastcgi_pass unix:${config.services.phpfpm.pools."${poolName}".socket};
188
-
include ${config.services.nginx.package}/conf/fastcgi_params;
189
-
include ${config.services.nginx.package}/conf/fastcgi.conf;
190
-
internal;
191
-
'';
192
-
# extraConfig = ''
193
-
# fastcgi_pass unix:${config.services.phpfpm.pools."${poolName}".socket};
194
-
# fastcgi_split_path_info ^(.+\.php)(/.*)$;
195
-
# include ${pkgs.nginx}/conf/fastcgi_params;
196
-
# fastcgi_param SCRIPT_FILENAME ${cfg.package}/web/$fastcgi_script_name;
197
-
# fastcgi_param DOCUMENT_ROOT ${cfg.package}/web;
198
-
# fastcgi_read_timeout 120;
199
-
# internal;
200
-
# '';
201
175
};
176
+
};
202
177
203
-
locations."~ /(?!app)\\.php$" = {
204
-
extraConfig = ''
205
-
return 404;
206
-
'';
178
+
services.phpfpm.pools.wallabag = {
179
+
user = config.users.users.wallabag.name;
180
+
phpPackage = php;
181
+
settings = {
182
+
"catch_workers_output" = true;
183
+
184
+
"listen.owner" = config.services.nginx.user;
185
+
"listen.group" = "root";
186
+
"pm" = "dynamic";
187
+
"pm.max_children" = 5;
188
+
"pm.start_servers" = 2;
189
+
"pm.min_spare_servers" = 1;
190
+
"pm.max_spare_servers" = 3;
191
+
"php_admin_value[error_log]" = "/var/log/wallabag/error.log";
192
+
"php_admin_value[access_log]" = "/var/log/wallabag/access.log";
193
+
"php_admin_flag[log_errors]" = true;
194
+
};
195
+
phpOptions = ''
196
+
; Set up $_ENV superglobal.
197
+
; http://php.net/request-order
198
+
variables_order = "EGPCS"
199
+
# Wallabag will crash on start-up.
200
+
# https://github.com/wallabag/wallabag/issues/6042
201
+
# error_reporting = E_ALL & ~E_USER_DEPRECATED & ~E_DEPRECATED
202
+
'';
203
+
settings = {
204
+
# Accept settings from the systemd service.
205
+
clear_env = false;
207
206
};
208
207
};
209
208
209
+
users.users.wallabag = {
210
+
isSystemUser = true;
211
+
group = "wallabag";
212
+
};
213
+
users.groups.wallabag = {};
214
+
services.redis.servers.wallabag = {
215
+
enable = true;
216
+
user = "wallabag";
217
+
};
218
+
services.rabbitmq.enable = false;
219
+
220
+
systemd.services.phpfpm-wallabag.serviceConfig = commonServiceConfig;
221
+
210
222
systemd.services.wallabag-install = {
211
223
description = "Wallabag install service";
212
224
wantedBy = [ "multi-user.target" ];
213
225
before = [ "phpfpm-wallabag.service" ];
214
-
after = [ "mysql.service" "postgresql.service" ];
226
+
after = [ "postgresql.service" ];
215
227
path = with pkgs; [ coreutils php phpPackages.composer ];
216
228
217
229
serviceConfig = {
218
-
User = cfg.user;
230
+
User = "wallabag";
219
231
Type = "oneshot";
220
-
RemainAfterExit = "yes";
221
-
PermissionsStartOnly = true;
222
-
};
223
-
224
-
preStart = ''
225
-
mkdir -p "${cfg.dataDir}"
226
-
chown ${cfg.user}:nginx "${cfg.dataDir}"
227
-
'';
232
+
} // commonServiceConfig;
228
233
229
234
script = ''
230
-
echo "Setting up wallabag files in ${cfg.dataDir} ..."
231
-
cd "${cfg.dataDir}"
232
-
233
-
rm -rf var/cache/*
234
-
rm -f app src translations
235
-
ln -sf ${appDir}/app app
236
-
ln -sf ${appDir}/src src
237
-
ln -sf ${appDir}/translations translations
238
-
ln -sf ${cfg.package}/composer.{json,lock} .
239
-
240
-
export WALLABAG_DATA="${cfg.dataDir}"
241
-
if [ ! -f installed ]; then
242
-
echo "Install file not found, installing ..."
243
-
php ${cfg.package}/bin/console --env=prod doctrine:database:create --if-not-exists --no-interaction
244
-
php ${cfg.package}/bin/console --env=prod doctrine:migrations:migrate --no-interaction
245
-
# Until https://github.com/wallabag/wallabag/issues/3662 is fixed
246
-
# yes no | php ${cfg.package}/bin/console --env=prod wallabag:install
247
-
touch installed
248
-
else
249
-
php ${cfg.package}/bin/console --env=prod doctrine:migrations:migrate --no-interaction
250
-
fi
251
-
php ${cfg.package}/bin/console --env=prod cache:clear
252
-
'';
235
+
if [ ! -f "$STATE_DIRECTORY/installed" ]; then
236
+
php ${pkgs.wallabag}/bin/console --env=prod wallabag:install
237
+
touch "$STATE_DIRECTORY/installed"
238
+
else
239
+
php ${pkgs.wallabag}/bin/console --env=prod doctrine:migrations:migrate --no-interaction
240
+
fi
241
+
php ${pkgs.wallabag}/bin/console --env=prod cache:clear
242
+
'';
253
243
};
254
-
};
255
-
256
-
meta = with stdenv.lib; {
257
-
maintainers = with maintainers; [ nadrieril ];
258
244
};
259
245
}
+15
-3
mount-crypted.sh
+15
-3
mount-crypted.sh
···
1
1
#!/usr/bin/env bash
2
+
3
+
# nix-shell https://github.com/sgillespie/nixos-yubikey-luks/archive/master.tar.gz
4
+
5
+
rbtohex() {
6
+
( od -An -vtx1 | tr -d ' \n' )
7
+
}
8
+
9
+
hextorb() {
10
+
( tr '[:lower:]' '[:upper:]' | sed -e 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI'| xargs printf )
11
+
}
12
+
2
13
key_length=512
3
-
iterations="$(head -n 2 /boot/crypted-storage/default)"
4
-
salt="$(head -n 1 /boot/crypted-storage/default)"
14
+
iterations=1000000
15
+
salt="$(head -n 1 /mnt/crypt-storage/default)"
5
16
chal="$(echo -n $salt | openssl dgst -binary -sha512 | rbtohex)"
6
17
resp="$(ykchalresp -2 -x $chal 2>/dev/null)"
7
-
user_key="$(read -s)"
18
+
user_key=
19
+
read -r user_key
8
20
luks_key="$(echo -n $user_key | pbkdf2-sha512 $(($key_length / 8)) $iterations $resp | rbtohex)"
9
21
echo -n $luks_key | hextorb | sudo cryptsetup luksOpen /dev/sda2 crypted --key-file=-
+9
overlays/default.nix
+9
overlays/default.nix
···
14
14
buildInputs = prevAttrs.propagatedBuildInputs ++ [ final.python3.pkgs.aiosqlite ]; # We're using sqlite and upstream doesn't package this dependency
15
15
});
16
16
17
+
wallabag = prev.wallabag.overrideAttrs (attrs: {
18
+
patches = builtins.filter (patch: builtins.baseNameOf patch != "wallabag-data.patch") attrs.patches ++ [
19
+
# Out of the box, Wallabag wants to write to various subdirectories of the project directory.
20
+
# Let’s replace references to such paths with designated systemd locations
21
+
# so that the project source can remain immutable.
22
+
../pkgs/wallabag-data.patch
23
+
];
24
+
});
25
+
17
26
# Need to do server and agent too, maybe
18
27
# woodpecker-cli-next =
19
28
# let
+6
-1
pkgs/default.nix
+6
-1
pkgs/default.nix
···
5
5
plymouth-themes = pkgs.callPackage ./plymouth.nix { };
6
6
tic-80 = pkgs.callPackage ./tic-80.nix { };
7
7
fennel-ls = pkgs.callPackage ./fennel-ls.nix { };
8
-
kobopatch = pkgs.callPackage ./kobopatch.nix { };
8
+
# kobopatch = pkgs.callPackage ./kobopatch.nix { };
9
9
my-mautrix-discord = pkgs.callPackage ./mautrix-discord.nix { }; # Handled by matrix-appservices input
10
10
ulogger-server = pkgs.callPackage ./ulogger.nix { };
11
+
# Wallabag is now an overlay
12
+
# TODO: we still use the patch from this folder though
13
+
my-wallabag = pkgs.callPackage ./wallabag.nix { };
14
+
mautrix-slack = pkgs.callPackage ./mautrix-slack.nix { };
15
+
gpodder2go = pkgs.callPackage ./gpodder2go.nix { };
11
16
}
+14
pkgs/gpodder2go.nix
+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
+3
-3
pkgs/kobopatch.nix
···
1
1
{ lib, buildGoModule, fetchFromGitHub }:
2
2
3
-
buildGoModule rec {
3
+
buildGoModule {
4
4
name = "kobopatch";
5
5
version = "0.15.0";
6
6
7
-
vendorSha256 = "1i6srhyig4x8mywyc2l8wzzm1afvb7wxmjsr84c447sb1xss6p7x";
7
+
vendorHash = "sha256-1i6srhyig4x8mywyc2l8wzzm1afvb7wxmjsr84c447sb1xss6p7x";
8
8
9
9
src = fetchFromGitHub {
10
10
owner = "geek1011";
11
11
repo = "kobopatch";
12
12
rev = "653070c67c83ec61884854efc4f8a3132d82a2e5";
13
-
sha256 = "09hr3zh0w0f78cx40d2yydqv0mmjdh4iwdgia7sikraphvha85nn";
13
+
hash = "sha256-09hr3zh0w0f78cx40d2yydqv0mmjdh4iwdgia7sikraphvha85nn";
14
14
};
15
15
16
16
meta = with lib; {
+1
-1
pkgs/koboutils.nix
+1
-1
pkgs/koboutils.nix
+29
pkgs/mautrix-slack.nix
+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
+2
-2
pkgs/tic-80.nix
+55
pkgs/wallabag-data.patch
+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
+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
+9
-1
shell.nix
···
5
5
default = pkgs.mkShell {
6
6
# Enable experimental features without having to specify the argument
7
7
NIX_CONFIG = "experimental-features = nix-command flakes";
8
-
nativeBuildInputs = with pkgs; [ nix home-manager git agenix deploy-rs dnscontrol ];
8
+
nativeBuildInputs = with pkgs; [
9
+
nix
10
+
home-manager
11
+
git
12
+
agenix
13
+
deploy-rs
14
+
dnscontrol
15
+
git-bug
16
+
];
9
17
};
10
18
}