-30
.aider.chat.history.md
-30
.aider.chat.history.md
···
1
-
2
-
# aider chat started at 2025-02-07 16:38:26
3
-
4
-
> Newer aider version v0.74.1 is available.
5
-
> python3.11 -m pip install --upgrade --upgrade-strategy only-if-needed aider-chat
6
-
> Run pip install? (Y)es/(N)o [Yes]: y
7
-
> /nix/store/8hkpwrgr7h06di861vhx612xfkrjzpak-python3-3.11.11/bin/python3.11: No module named pip
8
-
> Add .aider*, .env to .gitignore (recommended)? (Y)es/(N)o [Yes]: n
9
-
> /nix/store/cyihi1p1d92g2zg1frmppbm97h893adk-aider-chat-0.62.0/bin/aider
10
-
> Warning: gpt-4o-2024-08-06 expects these environment variables
11
-
> - OPENAI_API_KEY: Not set
12
-
> If you just set these environment variables using `setx` you may need to restart your terminal or command prompt for the changes to take effect.
13
-
> Warning: gpt-4o-mini expects these environment variables
14
-
> - OPENAI_API_KEY: Not set
15
-
> If you just set these environment variables using `setx` you may need to restart your terminal or command prompt for the changes to take effect.
16
-
> You can skip this check with --no-show-model-warnings
17
-
> https://aider.chat/docs/llms/warnings.html
18
-
> Open documentation url for more info? (Y)es/(N)o [Yes]: n
19
-
> Aider v0.62.0
20
-
> Main model: gpt-4o-2024-08-06 with diff edit format
21
-
> Weak model: gpt-4o-mini
22
-
> Git repo: .git with 293 files
23
-
> Repo-map: using 1024 tokens, auto refresh
24
-
> Use /help <question> for help, run "aider --help" to see cmd line args
25
-
>
26
-
>
27
-
> ^C again to exit
28
-
>
29
-
>
30
-
> ^C KeyboardInterrupt
···
-6
.aider.input.history
-6
.aider.input.history
+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"
-221
apps/aarch64-darwin/apply
-221
apps/aarch64-darwin/apply
···
1
-
#!/usr/bin/env bash
2
-
3
-
RED='\033[0;31m'
4
-
GREEN='\033[0;32m'
5
-
YELLOW='\033[1;33m'
6
-
NC='\033[0m' # No Color
7
-
8
-
# Determine the operating system
9
-
export OS=$(uname)
10
-
11
-
# Primary network interface
12
-
if [[ "$OS" != "Darwin" ]]; then
13
-
export PRIMARY_IFACE=$(ip -o -4 route show to default | awk '{print $5}')
14
-
echo -e "${GREEN}Found primary network interface $PRIMARY_IFACE${NC}"
15
-
fi
16
-
17
-
# Custom print function
18
-
_print() {
19
-
if [[ "$OS" == "Darwin" ]]; then
20
-
echo -e "$1"
21
-
else
22
-
echo "$1"
23
-
fi
24
-
}
25
-
26
-
# Custom prompt function
27
-
_prompt() {
28
-
local message="$1"
29
-
local variable="$2"
30
-
31
-
_print "$message"
32
-
read -r $variable
33
-
}
34
-
35
-
insert_secrets_output() {
36
-
local pattern="outputs = { self, darwin, nix-homebrew, homebrew-bundle, homebrew-core, homebrew-cask, home-manager, nixpkgs, disko, agenix } @inputs:"
37
-
local insert_text="secrets "
38
-
39
-
awk -v pat="$pattern" -v insert="$insert_text" '
40
-
$0 ~ pat {
41
-
sub(/} @inputs:/, ", " insert "} @inputs:"); # Replace the closing brace with the insert text followed by the brace
42
-
gsub(/ ,/, ","); # Correct any spaces before commas
43
-
print
44
-
next
45
-
}
46
-
{ print }
47
-
' flake.nix > flake.nix.tmp
48
-
49
-
mv flake.nix.tmp flake.nix
50
-
}
51
-
52
-
insert_secrets_input() {
53
-
# Define file path
54
-
FILE_PATH="flake.nix"
55
-
56
-
# Backup the original file
57
-
cp "$FILE_PATH" "${FILE_PATH}.bak"
58
-
59
-
# Temporary file for the text to insert
60
-
TEMP_FILE="temp_insert.txt"
61
-
62
-
# Write the formatted text to the temporary file
63
-
cat > "$TEMP_FILE" << 'EOF'
64
-
secrets = {
65
-
url = "git+ssh://git@github.com/%GITHUB_USER%/%GITHUB_SECRETS_REPO%.git";
66
-
flake = false;
67
-
};
68
-
EOF
69
-
70
-
# Check if the 'secrets' block already exists
71
-
if grep -q 'url = "git+ssh://git@github.com/%GITHUB_USER%/%GITHUB_SECRETS_REPO%.git"' "$FILE_PATH"; then
72
-
echo "The 'secrets' block already exists in the file."
73
-
rm "$TEMP_FILE"
74
-
rm "${FILE_PATH}.bak"
75
-
exit 0
76
-
fi
77
-
78
-
# Find the start and end line numbers of the 'disko' block
79
-
START_LINE=$(grep -n 'disko = {' "$FILE_PATH" | head -n 1 | cut -d: -f1)
80
-
END_LINE=$(tail -n +$START_LINE "$FILE_PATH" | grep -n '};' | head -n 1 | cut -d: -f1)
81
-
END_LINE=$((START_LINE + END_LINE - 1))
82
-
83
-
# Create a new file with the insertion
84
-
{
85
-
sed -n "1,${END_LINE}p" "$FILE_PATH"
86
-
cat "$TEMP_FILE"
87
-
sed -n "$((END_LINE + 1)),\$p" "$FILE_PATH"
88
-
} > "${FILE_PATH}.new"
89
-
90
-
# Replace the original file with the new file
91
-
mv "${FILE_PATH}.new" "$FILE_PATH"
92
-
93
-
# Clean up the temporary files
94
-
rm "$TEMP_FILE"
95
-
rm "${FILE_PATH}.bak"
96
-
}
97
-
98
-
# Fetch username from the system
99
-
export USERNAME=$(whoami)
100
-
101
-
# If the username is 'nixos' or 'root', ask the user for their username
102
-
if [[ "$USERNAME" == "nixos" ]] || [[ "$USERNAME" == "root" ]]; then
103
-
_prompt "${YELLOW}You're running as $USERNAME. Please enter your desired username: ${NC}" USERNAME
104
-
fi
105
-
106
-
# Check if git is available
107
-
if command -v git >/dev/null 2>&1; then
108
-
# Fetch email and name from git config
109
-
export GIT_EMAIL=$(git config --get user.email)
110
-
export GIT_NAME=$(git config --get user.name)
111
-
else
112
-
_print "${RED}Git is not available on this system.${NC}"
113
-
fi
114
-
115
-
# If git email is not found or git is not available, ask the user
116
-
if [[ -z "$GIT_EMAIL" ]]; then
117
-
_prompt "${YELLOW}Please enter your email: ${NC}" GIT_EMAIL
118
-
fi
119
-
120
-
# If git name is not found or git is not available, ask the user
121
-
if [[ -z "$GIT_NAME" ]]; then
122
-
_prompt "${YELLOW}Please enter your name: ${NC}" GIT_NAME
123
-
fi
124
-
125
-
_prompt "${YELLOW}Please enter your Github username: ${NC}" GITHUB_USER
126
-
_prompt "${YELLOW}Please enter your Github secrets repository name: ${NC}" GITHUB_SECRETS_REPO
127
-
128
-
export GITHUB_USER
129
-
export GITHUB_SECRETS_REPO
130
-
131
-
select_boot_disk() {
132
-
local disks
133
-
local _boot_disk
134
-
135
-
_print "${YELLOW}Available disks:${NC}"
136
-
disks=$(lsblk -nd --output NAME,SIZE | grep -v loop)
137
-
echo "$disks"
138
-
139
-
# Warning message for data deletion
140
-
_print "${RED}WARNING: All data on the chosen disk will be erased during the installation!${NC}"
141
-
_prompt "${YELLOW}Please choose your boot disk (e.g., nvme0n1, sda): ${NC}" _boot_disk
142
-
143
-
# Confirmation for disk selection to prevent accidental data loss
144
-
_print "${YELLOW}You have selected $_boot_disk as the boot disk. This will delete everything on this disk. Are you sure? (Y/N): ${NC}"
145
-
read -r confirmation
146
-
if [[ "$confirmation" =~ ^[Yy]$ ]]; then
147
-
export BOOT_DISK=$_boot_disk
148
-
else
149
-
_print "${RED}Disk selection cancelled by the user. Please run the script again to select the correct disk.${NC}"
150
-
exit 1
151
-
fi
152
-
}
153
-
154
-
# Set hostname and find primary disk if this is NixOS
155
-
if [[ "$OS" != "Darwin" ]]; then
156
-
_prompt "${YELLOW}Please enter a hostname for the system: ${NC}" HOST_NAME
157
-
export HOST_NAME
158
-
select_boot_disk
159
-
fi
160
-
161
-
# Confirmation step
162
-
confirm_details() {
163
-
_print "${GREEN}Username: $USERNAME"
164
-
_print "Email: $GIT_EMAIL"
165
-
_print "Name: $GIT_NAME${NC}"
166
-
167
-
if([[ "$OS" != "Darwin" ]]); then
168
-
_print "${GREEN}Primary interface: $PRIMARY_IFACE"
169
-
_print "Boot disk: $BOOT_DISK"
170
-
_print "Hostname: $HOST_NAME${NC}"
171
-
fi
172
-
173
-
_print "${GREEN}Secrets repository: $GITHUB_USER/$GITHUB_SECRETS_REPO${NC}"
174
-
175
-
_prompt "${YELLOW}Is this correct? (Y/N): ${NC}" choice
176
-
177
-
case "$choice" in
178
-
[Nn] ) _print "${RED}Exiting script.${NC}" && exit 1;;
179
-
[Yy] ) _print "${GREEN}Continuing...${NC}";;
180
-
* ) _print "${RED}Invalid option. Exiting script.${NC}" && exit 1;;
181
-
esac
182
-
}
183
-
184
-
# Call the confirmation function
185
-
confirm_details
186
-
187
-
# Function to replace tokens in each file
188
-
replace_tokens() {
189
-
local file="$1"
190
-
if [[ $(basename $1) != "apply" ]]; then
191
-
if [[ "$OS" == "Darwin" ]]; then
192
-
# macOS
193
-
LC_ALL=C LANG=C sed -i '' -e "s/%USER%/$USERNAME/g" "$file"
194
-
LC_ALL=C LANG=C sed -i '' -e "s/%EMAIL%/$GIT_EMAIL/g" "$file"
195
-
LC_ALL=C LANG=C sed -i '' -e "s/%NAME%/$GIT_NAME/g" "$file"
196
-
LC_ALL=C LANG=C sed -i '' -e "s/%GITHUB_USER%/$GITHUB_USER/g" "$file"
197
-
LC_ALL=C LANG=C sed -i '' -e "s/%GITHUB_SECRETS_REPO%/$GITHUB_SECRETS_REPO/g" "$file"
198
-
else
199
-
# Linux or other
200
-
sed -i -e "s/%USER%/$USERNAME/g" "$file"
201
-
sed -i -e "s/%EMAIL%/$GIT_EMAIL/g" "$file"
202
-
sed -i -e "s/%NAME%/$GIT_NAME/g" "$file"
203
-
sed -i -e "s/%INTERFACE%/$PRIMARY_IFACE/g" "$file"
204
-
sed -i -e "s/%DISK%/$BOOT_DISK/g" "$file"
205
-
sed -i -e "s/%HOST%/$HOST_NAME/g" "$file"
206
-
sed -i -e "s/%GITHUB_USER%/$GITHUB_USER/g" "$file"
207
-
sed -i -e "s/%GITHUB_SECRETS_REPO%/$GITHUB_SECRETS_REPO/g" "$file"
208
-
fi
209
-
fi
210
-
}
211
-
212
-
# Insert secrets repo into flake
213
-
insert_secrets_input
214
-
insert_secrets_output
215
-
216
-
# Traverse directories and call replace_tokens on each Nix file
217
-
export -f replace_tokens
218
-
find . -type f -exec bash -c 'replace_tokens "$0"' {} \;
219
-
220
-
echo "$USERNAME" > /tmp/username.txt
221
-
_print "${GREEN}User $USERNAME information applied.${NC}"
···
-19
apps/aarch64-darwin/build
-19
apps/aarch64-darwin/build
···
1
-
#!/bin/sh -e
2
-
3
-
GREEN='\033[1;32m'
4
-
YELLOW='\033[1;33m'
5
-
RED='\033[1;31m'
6
-
NC='\033[0m'
7
-
8
-
SYSTEM_TYPE="aarch64-darwin"
9
-
FLAKE_SYSTEM="darwinConfigurations.${SYSTEM_TYPE}.system"
10
-
11
-
export NIXPKGS_ALLOW_UNFREE=1
12
-
13
-
echo "${YELLOW}Starting build...${NC}"
14
-
nix --extra-experimental-features 'nix-command flakes' build .#$FLAKE_SYSTEM $@
15
-
16
-
echo "${YELLOW}Cleaning up...${NC}"
17
-
unlink ./result
18
-
19
-
echo "${GREEN}Switch to new generation complete!${NC}"
···
-22
apps/aarch64-darwin/build-switch
-22
apps/aarch64-darwin/build-switch
···
1
-
#!/bin/sh -e
2
-
3
-
GREEN='\033[1;32m'
4
-
YELLOW='\033[1;33m'
5
-
RED='\033[1;31m'
6
-
NC='\033[0m'
7
-
8
-
SYSTEM_TYPE="aarch64-darwin"
9
-
FLAKE_SYSTEM="darwinConfigurations.${SYSTEM_TYPE}.system"
10
-
11
-
export NIXPKGS_ALLOW_UNFREE=1
12
-
13
-
echo "${YELLOW}Starting build...${NC}"
14
-
nix --extra-experimental-features 'nix-command flakes' build .#$FLAKE_SYSTEM $@
15
-
16
-
echo "${YELLOW}Switching to new generation...${NC}"
17
-
./result/sw/bin/darwin-rebuild switch --flake .#${SYSTEM_TYPE} $@
18
-
19
-
echo "${YELLOW}Cleaning up...${NC}"
20
-
unlink ./result
21
-
22
-
echo "${GREEN}Switch to new generation complete!${NC}"
···
-33
apps/aarch64-darwin/check-keys
-33
apps/aarch64-darwin/check-keys
···
1
-
#!/usr/bin/env bash
2
-
set -e
3
-
4
-
RED='\033[0;31m'
5
-
GREEN='\033[0;32m'
6
-
NC='\033[0m'
7
-
8
-
username=${USER}
9
-
export SSH_DIR=/Users/${username}/.ssh
10
-
11
-
lint_keys() {
12
-
if [[ -f "${SSH_DIR}/id_ed25519" && -f "${SSH_DIR}/id_ed25519.pub" && -f "${SSH_DIR}/id_ed25519_agenix" && -f "${SSH_DIR}/id_ed25519_agenix.pub" ]]; then
13
-
echo -e "${GREEN}All SSH keys are present.${NC}"
14
-
else
15
-
echo -e "${RED}Some SSH keys are missing.${NC}"
16
-
if [[ ! -f "${SSH_DIR}/id_ed25519" ]]; then
17
-
echo -e "${RED}Missing: id_ed25519${NC}"
18
-
fi
19
-
if [[ ! -f "${SSH_DIR}/id_ed25519.pub" ]]; then
20
-
echo -e "${RED}Missing: id_ed25519.pub${NC}"
21
-
fi
22
-
if [[ ! -f "${SSH_DIR}/id_ed25519_agenix" ]]; then
23
-
echo -e "${RED}Missing: id_ed25519_agenix${NC}"
24
-
fi
25
-
if [[ ! -f "${SSH_DIR}/id_ed25519_agenix.pub" ]]; then
26
-
echo -e "${RED}Missing: id_ed25519_agenix.pub${NC}"
27
-
fi
28
-
echo -e "${GREEN}Run the createKeys command to generate the missing keys.${NC}"
29
-
exit 1
30
-
fi
31
-
}
32
-
33
-
lint_keys
···
-68
apps/aarch64-darwin/copy-keys
-68
apps/aarch64-darwin/copy-keys
···
1
-
#!/usr/bin/env bash
2
-
set -e
3
-
4
-
RED='\033[0;31m'
5
-
GREEN='\033[0;32m'
6
-
NC='\033[0m'
7
-
8
-
username=${USER}
9
-
export SSH_DIR=/Users/${username}/.ssh
10
-
11
-
handle_no_usb() {
12
-
echo -e ${RED}No USB drive found or mounted.${NC}"
13
-
echo -e ${GREEN}If you have not yet set up your keys, run the script to generate new SSH keys.${NC}"
14
-
exit 1
15
-
}
16
-
17
-
mount_usb() {
18
-
MOUNT_PATH=""
19
-
for dev in $(diskutil list | grep -o 'disk[0-9]'); do
20
-
MOUNT_PATH="$(diskutil info /dev/${dev} | grep \"Mount Point\" | awk -F: '{print $2}' | xargs)"
21
-
if [ -n "${MOUNT_PATH}" ]; then
22
-
echo -e "${GREEN}USB drive found at ${MOUNT_PATH}.${NC}"
23
-
break
24
-
fi
25
-
done
26
-
27
-
if [ -z "${MOUNT_PATH}" ]; then
28
-
echo -e "${RED}No USB drive found.${NC}"
29
-
fi
30
-
}
31
-
32
-
copy_keys() {
33
-
if [ -n "${MOUNT_PATH}" ]; then
34
-
cp "${MOUNT_PATH}/id_ed25519_agenix.pub" ${SSH_DIR}
35
-
cp "${MOUNT_PATH}/id_ed25519_agenix" ${SSH_DIR}
36
-
chmod 600 ${SSH_DIR}/id_ed25519_{agenix,agenix.pub}
37
-
else
38
-
echo -e "${RED}No USB drive found. Aborting.${NC}"
39
-
exit 1
40
-
fi
41
-
}
42
-
43
-
setup_ssh_directory() {
44
-
mkdir -p ${SSH_DIR}
45
-
}
46
-
47
-
set_keys() {
48
-
cp ${MOUNT_PATH}/id_ed25519_github.pub ${SSH_DIR}/id_ed25519.pub
49
-
cp ${MOUNT_PATH}/id_ed25519_github ${SSH_DIR}/id_ed25519
50
-
chmod 600 ${SSH_DIR}/id_ed25519
51
-
chmod 644 ${SSH_DIR}/id_ed25519.pub
52
-
}
53
-
54
-
change_ownership() {
55
-
chown ${username}:staff ${SSH_DIR}/id_ed25519{,.pub}
56
-
chown ${username}:staff ${SSH_DIR}/id_ed25519_{agenix,agenix.pub}
57
-
}
58
-
59
-
setup_ssh_directory
60
-
mount_usb
61
-
62
-
if [ -z "${MOUNT_PATH}" ]; then
63
-
handle_no_usb
64
-
else
65
-
copy_keys
66
-
set_keys
67
-
change_ownership
68
-
fi
···
-46
apps/aarch64-darwin/create-keys
-46
apps/aarch64-darwin/create-keys
···
1
-
#!/usr/bin/env bash
2
-
set -e
3
-
4
-
RED='\033[0;31m'
5
-
GREEN='\033[0;32m'
6
-
NC='\033[0m'
7
-
8
-
username=${USER}
9
-
export SSH_DIR=/Users/${username}/.ssh
10
-
11
-
setup_ssh_directory() {
12
-
mkdir -p ${SSH_DIR}
13
-
}
14
-
15
-
prompt_for_key_generation() {
16
-
local key_name=$1
17
-
if [[ -f "${SSH_DIR}/${key_name}" ]]; then
18
-
echo -e "${RED}Existing SSH key found for ${key_name}.${NC}"
19
-
cat "${SSH_DIR}/${key_name}.pub"
20
-
read -p "Do you want to replace it? (y/n) " -n 1 -r
21
-
echo
22
-
if [[ $REPLY =~ ^[Yy]$ ]]; then
23
-
return 0 # Indicate key should be replaced
24
-
else
25
-
return 1 # Indicate key should be kept
26
-
fi
27
-
fi
28
-
return 0 # Indicate no key exists, so it should be created
29
-
}
30
-
31
-
generate_key() {
32
-
local key_name=$1
33
-
if prompt_for_key_generation "$key_name"; then
34
-
ssh-keygen -t ed25519 -f "${SSH_DIR}/${key_name}" -N ""
35
-
chown ${username}:staff "${SSH_DIR}/${key_name}"{,.pub}
36
-
else
37
-
echo -e "${GREEN}Kept existing ${key_name}.${NC}"
38
-
fi
39
-
}
40
-
41
-
setup_ssh_directory
42
-
generate_key "id_ed25519"
43
-
generate_key "id_ed25519_agenix"
44
-
45
-
echo -e "${GREEN}SSH key setup complete.${NC}"
46
-
echo -e "${GREEN}Remember to add the necessary keys to Github or other services as required.${NC}"
···
-24
apps/aarch64-darwin/rollback
-24
apps/aarch64-darwin/rollback
···
1
-
#!/bin/sh -e
2
-
3
-
GREEN='\033[1;32m'
4
-
YELLOW='\033[1;33m'
5
-
RED='\033[1;31m'
6
-
NC='\033[0m'
7
-
8
-
FLAKE="Dustins-MBP"
9
-
10
-
echo "${YELLOW}Available generations:${NC}"
11
-
/run/current-system/sw/bin/darwin-rebuild --list-generations
12
-
13
-
echo "${YELLOW}Enter the generation number for rollback:${NC}"
14
-
read GEN_NUM
15
-
16
-
if [ -z "$GEN_NUM" ]; then
17
-
echo "${RED}No generation number entered. Aborting rollback.${NC}"
18
-
exit 1
19
-
fi
20
-
21
-
echo "${YELLOW}Rolling back to generation $GEN_NUM...${NC}"
22
-
/run/current-system/sw/bin/darwin-rebuild switch --flake .#$FLAKE --switch-generation $GEN_NUM
23
-
24
-
echo "${GREEN}Rollback to generation $GEN_NUM complete!${NC}"
···
-1
apps/aarch64-linux
-1
apps/aarch64-linux
···
1
-
x86_64-linux
···
-142
apps/x86_64-linux/apply
-142
apps/x86_64-linux/apply
···
1
-
#!/usr/bin/env bash
2
-
3
-
RED='\033[0;31m'
4
-
GREEN='\033[0;32m'
5
-
YELLOW='\033[1;33m'
6
-
NC='\033[0m' # No Color
7
-
8
-
# Determine the operating system
9
-
export OS=$(uname)
10
-
11
-
# Primary network interface
12
-
if [[ "$OS" != "Darwin" ]]; then
13
-
export PRIMARY_IFACE=$(ip -o -4 route show to default | awk '{print $5}')
14
-
echo -e "${GREEN}Found primary network interface $PRIMARY_IFACE${NC}"
15
-
fi
16
-
17
-
# Custom print function
18
-
_print() {
19
-
if [[ "$OS" == "Darwin" ]]; then
20
-
echo -e "$1"
21
-
else
22
-
echo "$1"
23
-
fi
24
-
}
25
-
26
-
# Custom prompt function
27
-
_prompt() {
28
-
local message="$1"
29
-
local variable="$2"
30
-
31
-
_print "$message"
32
-
read -r $variable
33
-
}
34
-
35
-
# Fetch username from the system
36
-
export USERNAME=$(whoami)
37
-
38
-
# If the username is 'nixos' or 'root', ask the user for their username
39
-
if [[ "$USERNAME" == "nixos" ]] || [[ "$USERNAME" == "root" ]]; then
40
-
_prompt "${YELLOW}You're running as $USERNAME. Please enter your desired username: ${NC}" USERNAME
41
-
fi
42
-
43
-
# Check if git is available
44
-
if command -v git >/dev/null 2>&1; then
45
-
# Fetch email and name from git config
46
-
export GIT_EMAIL=$(git config --get user.email)
47
-
export GIT_NAME=$(git config --get user.name)
48
-
else
49
-
_print "${RED}Git is not available on this system.${NC}"
50
-
fi
51
-
52
-
# If git email is not found or git is not available, ask the user
53
-
if [[ -z "$GIT_EMAIL" ]]; then
54
-
_prompt "${YELLOW}Please enter your email: ${NC}" GIT_EMAIL
55
-
fi
56
-
57
-
# If git name is not found or git is not available, ask the user
58
-
if [[ -z "$GIT_NAME" ]]; then
59
-
_prompt "${YELLOW}Please enter your name: ${NC}" GIT_NAME
60
-
fi
61
-
62
-
select_boot_disk() {
63
-
local disks
64
-
local _boot_disk
65
-
66
-
_print "${YELLOW}Available disks:${NC}"
67
-
disks=$(lsblk -nd --output NAME,SIZE | grep -v loop)
68
-
echo "$disks"
69
-
70
-
# Warning message for data deletion
71
-
_print "${RED}WARNING: All data on the chosen disk will be erased during the installation!${NC}"
72
-
_prompt "${YELLOW}Please choose your boot disk (e.g., nvme0n1, sda): ${NC}" _boot_disk
73
-
74
-
# Confirmation for disk selection to prevent accidental data loss
75
-
_print "${YELLOW}You have selected $_boot_disk as the boot disk. This will delete everything on this disk. Are you sure? (Y/N): ${NC}"
76
-
read -r confirmation
77
-
if [[ "$confirmation" =~ ^[Yy]$ ]]; then
78
-
export BOOT_DISK=$_boot_disk
79
-
else
80
-
_print "${RED}Disk selection cancelled by the user. Please run the script again to select the correct disk.${NC}"
81
-
exit 1
82
-
fi
83
-
}
84
-
85
-
# Set hostname and find primary disk if this is NixOS
86
-
if [[ "$OS" != "Darwin" ]]; then
87
-
_prompt "${YELLOW}Please enter a hostname for the system: ${NC}" HOST_NAME
88
-
export HOST_NAME
89
-
select_boot_disk
90
-
fi
91
-
92
-
# Confirmation step
93
-
confirm_details() {
94
-
_print "${GREEN}Username: $USERNAME"
95
-
_print "Email: $GIT_EMAIL"
96
-
_print "Name: $GIT_NAME${NC}"
97
-
98
-
if([[ "$OS" != "Darwin" ]]); then
99
-
_print "${GREEN}Primary interface: $PRIMARY_IFACE"
100
-
_print "Boot disk: $BOOT_DISK"
101
-
_print "Hostname: $HOST_NAME${NC}"
102
-
fi
103
-
104
-
_prompt "${YELLOW}Is this correct? (Y/N): ${NC}" choice
105
-
106
-
case "$choice" in
107
-
[Nn] ) _print "${RED}Exiting script.${NC}" && exit 1;;
108
-
[Yy] ) _print "${GREEN}Continuing...${NC}";;
109
-
* ) _print "${RED}Invalid option. Exiting script.${NC}" && exit 1;;
110
-
esac
111
-
}
112
-
113
-
# Call the confirmation function
114
-
confirm_details
115
-
116
-
# Function to replace tokens in each file
117
-
replace_tokens() {
118
-
local file="$1"
119
-
if [[ $(basename $1) != "apply" ]]; then
120
-
if [[ "$OS" == "Darwin" ]]; then
121
-
# macOS
122
-
LC_ALL=C LANG=C sed -i '' -e "s/%USER%/$USERNAME/g" "$file"
123
-
LC_ALL=C LANG=C sed -i '' -e "s/%EMAIL%/$GIT_EMAIL/g" "$file"
124
-
LC_ALL=C LANG=C sed -i '' -e "s/%NAME%/$GIT_NAME/g" "$file"
125
-
else
126
-
# Linux or other
127
-
sed -i -e "s/%USER%/$USERNAME/g" "$file"
128
-
sed -i -e "s/%EMAIL%/$GIT_EMAIL/g" "$file"
129
-
sed -i -e "s/%NAME%/$GIT_NAME/g" "$file"
130
-
sed -i -e "s/%INTERFACE%/$PRIMARY_IFACE/g" "$file"
131
-
sed -i -e "s/%DISK%/$BOOT_DISK/g" "$file"
132
-
sed -i -e "s/%HOST%/$HOST_NAME/g" "$file"
133
-
fi
134
-
fi
135
-
}
136
-
137
-
# Traverse directories and call replace_tokens on each Nix file
138
-
export -f replace_tokens
139
-
find . -type f -exec bash -c 'replace_tokens "$0"' {} \;
140
-
141
-
echo "$USERNAME" > /tmp/username.txt
142
-
_print "${GREEN}User $USERNAME information applied.${NC}"
···
-28
apps/x86_64-linux/build-switch
-28
apps/x86_64-linux/build-switch
···
1
-
#!/bin/sh -e
2
-
3
-
RED='\033[1;31m'
4
-
GREEN='\033[1;32m'
5
-
YELLOW='\033[1;33m'
6
-
NC='\033[0m'
7
-
8
-
SYSTEM=$(uname -m)
9
-
10
-
case "$SYSTEM" in
11
-
x86_64)
12
-
FLAKE_TARGET="x86_64-linux"
13
-
;;
14
-
aarch64)
15
-
FLAKE_TARGET="aarch64-linux"
16
-
;;
17
-
*)
18
-
echo -e "${RED}Unsupported architecture: $SYSTEM${NC}"
19
-
exit 1
20
-
;;
21
-
esac
22
-
23
-
echo -e "${YELLOW}Starting...${NC}"
24
-
25
-
# We pass SSH from user to root so root can download secrets from our private Github
26
-
sudo SSH_AUTH_SOCK=$SSH_AUTH_SOCK /run/current-system/sw/bin/nixos-rebuild switch --flake .#$FLAKE_TARGET $@
27
-
28
-
echo -e "${GREEN}Switch to new generation complete!${NC}"
···
-33
apps/x86_64-linux/check-keys
-33
apps/x86_64-linux/check-keys
···
1
-
#!/usr/bin/env bash
2
-
set -e
3
-
4
-
RED='\033[0;31m'
5
-
GREEN='\033[0;32m'
6
-
NC='\033[0m'
7
-
8
-
# We're assuming this is being run as root in the NixOS installer
9
-
export SSH_DIR=/root/.ssh
10
-
11
-
check_keys() {
12
-
if [[ -f "${SSH_DIR}/id_ed25519" && -f "${SSH_DIR}/id_ed25519.pub" && -f "${SSH_DIR}/id_ed25519_agenix" && -f "${SSH_DIR}/id_ed25519_agenix.pub" ]]; then
13
-
echo -e "${GREEN}All SSH keys are present.${NC}"
14
-
else
15
-
echo -e "${RED}Some SSH keys are missing.${NC}"
16
-
if [[ ! -f "${SSH_DIR}/id_ed25519" ]]; then
17
-
echo -e "${RED}Missing: id_ed25519${NC}"
18
-
fi
19
-
if [[ ! -f "${SSH_DIR}/id_ed25519.pub" ]]; then
20
-
echo -e "${RED}Missing: id_ed25519.pub${NC}"
21
-
fi
22
-
if [[ ! -f "${SSH_DIR}/id_ed25519_agenix" ]]; then
23
-
echo -e "${RED}Missing: id_ed25519_agenix${NC}"
24
-
fi
25
-
if [[ ! -f "${SSH_DIR}/id_ed25519_agenix.pub" ]]; then
26
-
echo -e "${RED}Missing: id_ed25519_agenix.pub${NC}"
27
-
fi
28
-
echo -e "${GREEN}Run the createKeys script to generate the missing keys.${NC}"
29
-
exit 1
30
-
fi
31
-
}
32
-
33
-
check_keys
···
-71
apps/x86_64-linux/copy-keys
-71
apps/x86_64-linux/copy-keys
···
1
-
#!/usr/bin/env bash
2
-
set -e
3
-
4
-
unmount_usb() {
5
-
if mountpoint -q /mnt/usb; then
6
-
sudo umount /mnt/usb
7
-
echo -e "\e[0;32mUSB drive unmounted.\e[0m"
8
-
fi
9
-
}
10
-
11
-
mount_usb() {
12
-
if mountpoint -q /mnt/usb; then
13
-
echo -e "\e[0;32mUSB drive already mounted.\e[0m"
14
-
else
15
-
device_found=false
16
-
for dev in sda sdb sdc sdd sde sdf sdg sdh sdi sdj sdk sdl; do
17
-
if sudo blkid /dev/$dev | grep -iq 'TYPE="vfat"'; then
18
-
device_found=true
19
-
mkdir -p /mnt/usb
20
-
sudo mount /dev/$dev /mnt/usb && { echo -e "\e[0;32mUSB drive mounted successfully on /dev/$dev.\e[0m"; break; } || echo -e "\e[0;31mFailed to mount /dev/$dev.\e[0m"
21
-
fi
22
-
done
23
-
if [ "$device_found" = false ]; then
24
-
echo -e "\e[0;31mNo USB devices found.\e[0m"
25
-
fi
26
-
fi
27
-
}
28
-
29
-
setup_ssh_directory() {
30
-
export SSH_DIR=/root/.ssh
31
-
mkdir -p $SSH_DIR
32
-
}
33
-
34
-
check_file_exists() {
35
-
if [[ ! -f $1 ]]; then
36
-
echo -e "\e[0;31mError: File $1 does not exist.\e[0m"
37
-
exit 1
38
-
fi
39
-
}
40
-
41
-
copy_keys() {
42
-
check_file_exists "/mnt/usb/id_ed25519_agenix.pub"
43
-
check_file_exists "/mnt/usb/id_ed25519_agenix"
44
-
cp /mnt/usb/id_ed25519_agenix.pub $SSH_DIR
45
-
cp /mnt/usb/id_ed25519_agenix $SSH_DIR
46
-
chmod 600 $SSH_DIR/id_ed25519_{agenix,agenix.pub}
47
-
echo -e "\e[0;32mKeys copied successfully.\e[0m"
48
-
}
49
-
50
-
set_keys() {
51
-
check_file_exists "/mnt/usb/id_ed25519_github.pub"
52
-
check_file_exists "/mnt/usb/id_ed25519_github"
53
-
cp /mnt/usb/id_ed25519_github.pub $SSH_DIR/id_ed25519.pub
54
-
cp /mnt/usb/id_ed25519_github $SSH_DIR/id_ed25519
55
-
chmod 600 $SSH_DIR/id_ed25519
56
-
chmod 644 $SSH_DIR/id_ed25519.pub
57
-
}
58
-
59
-
change_ownership() {
60
-
chown nixos:wheel $SSH_DIR/id_ed25519{,.pub}
61
-
chown nixos:wheel $SSH_DIR/id_ed25519_{agenix,agenix.pub}
62
-
}
63
-
64
-
trap unmount_usb EXIT
65
-
66
-
setup_ssh_directory
67
-
mount_usb
68
-
copy_keys
69
-
set_keys
70
-
change_ownership
71
-
unmount_usb
···
-27
apps/x86_64-linux/create-keys
-27
apps/x86_64-linux/create-keys
···
1
-
#!/usr/bin/env bash
2
-
set -e
3
-
4
-
RED='\033[0;31m'
5
-
GREEN='\033[0;32m'
6
-
NC='\033[0m'
7
-
8
-
# We're assuming this is being run as root in the NixOS installer
9
-
export SSH_DIR=/root/.ssh
10
-
11
-
setup_ssh_directory() {
12
-
mkdir -p ${SSH_DIR}
13
-
}
14
-
15
-
generate_keys() {
16
-
ssh-keygen -t ed25519 -f "${SSH_DIR}/id_ed25519" -N ""
17
-
ssh-keygen -t ed25519 -f "${SSH_DIR}/id_ed25519_agenix" -N ""
18
-
chmod 600 ${SSH_DIR}/id_ed25519{,_agenix}{,.pub}
19
-
}
20
-
21
-
setup_ssh_directory
22
-
generate_keys
23
-
24
-
echo -e "${GREEN}New SSH keys have been generated.${NC}"
25
-
echo -e "${GREEN}1) Add the id_ed25519 key to Github.${NC}"
26
-
cat "${SSH_DIR}/id_ed25519.pub"
27
-
echo -e "${GREEN}2) Create a private nix-secrets repo in Github, even if it's empty.${NC}"
···
-80
apps/x86_64-linux/install
-80
apps/x86_64-linux/install
···
1
-
#!/usr/bin/env bash
2
-
set -exu
3
-
4
-
check_installer() {
5
-
if [ -e /etc/NIXOS ]; then
6
-
echo -e "\e[1;32mRunning in the NixOS installer environment.\e[0m"
7
-
else
8
-
echo -e "\e[1;31mNot running in the NixOS installer environment.\e[0m"
9
-
exit 1
10
-
fi
11
-
}
12
-
13
-
cleanup() {
14
-
rm -rf nixos-config-main.zip nixos-config-main nixos-config
15
-
}
16
-
17
-
download_config() {
18
-
curl -LJ0 https://github.com/dustinlyons/nixos-config/archive/main.zip -o nixos-config-main.zip
19
-
unzip nixos-config-main.zip
20
-
mv nixos-config-main/templates/starter nixos-config
21
-
cd nixos-config
22
-
}
23
-
24
-
run_apply() {
25
-
./apps/x86_64-linux/apply
26
-
if [ ! -f /tmp/username.txt ]; then
27
-
echo -e "\e[1;31mError: /tmp/username.txt does not exist.\e[0m"
28
-
exit 1
29
-
fi
30
-
export USERNAME=$(cat /tmp/username.txt)
31
-
}
32
-
33
-
run_disko() {
34
-
sudo nix run --extra-experimental-features nix-command --extra-experimental-features flakes \
35
-
github:nix-community/disko -- --mode zap_create_mount ./modules/nixos/disk-config.nix
36
-
}
37
-
38
-
setup_files() {
39
-
sudo mkdir -p /mnt/etc/nixos
40
-
sudo cp -r * /mnt/etc/nixos
41
-
cd /mnt/etc/nixos
42
-
}
43
-
44
-
install_nixos() {
45
-
ARCH=$(uname -m)
46
-
47
-
case "$ARCH" in
48
-
x86_64)
49
-
FLAKE_TARGET="x86_64-linux"
50
-
;;
51
-
aarch64)
52
-
FLAKE_TARGET="aarch64-linux"
53
-
;;
54
-
*)
55
-
echo -e "${RED}Unsupported architecture: $ARCH${CLEAR}"
56
-
exit 1
57
-
;;
58
-
esac
59
-
60
-
sudo nixos-install --flake .#$FLAKE_TARGET $@
61
-
sudo chmod -R 775 /mnt/etc/nixos
62
-
}
63
-
64
-
prompt_reboot() {
65
-
read -p "Do you want to reboot now? (y/yes) " choice
66
-
case "$choice" in
67
-
y|Y|yes|YES ) echo -e "\e[1;32mRebooting...\e[0m" && sudo reboot;;
68
-
* ) echo -e "\e[1;33mReboot skipped.\e[0m";;
69
-
esac
70
-
}
71
-
72
-
cleanup
73
-
check_installer
74
-
download_config
75
-
run_apply
76
-
run_disko
77
-
setup_files
78
-
install_nixos
79
-
cleanup
80
-
prompt_reboot
···
-104
apps/x86_64-linux/install-with-secrets
-104
apps/x86_64-linux/install-with-secrets
···
1
-
#!/usr/bin/env bash
2
-
set -exu
3
-
4
-
check_installer() {
5
-
if [ -e /etc/NIXOS ]; then
6
-
echo -e "\e[1;32mRunning in the NixOS installer environment.\e[0m"
7
-
else
8
-
echo -e "\e[1;31mNot running in the NixOS installer environment.\e[0m"
9
-
exit 1
10
-
fi
11
-
}
12
-
13
-
cleanup() {
14
-
rm -rf nixos-config-main.zip nixos-config-main nixos-config
15
-
}
16
-
17
-
download_config() {
18
-
curl -LJ0 https://github.com/dustinlyons/nixos-config/archive/main.zip -o nixos-config-main.zip
19
-
unzip nixos-config-main.zip
20
-
mv nixos-config-main/templates/starterWithSecrets nixos-config
21
-
cd nixos-config
22
-
}
23
-
24
-
run_apply() {
25
-
./apps/x86_64-linux/apply
26
-
if [ ! -f /tmp/username.txt ]; then
27
-
echo -e "\e[1;31mError: /tmp/username.txt does not exist.\e[0m"
28
-
exit 1
29
-
fi
30
-
export USERNAME=$(cat /tmp/username.txt)
31
-
}
32
-
33
-
run_disko() {
34
-
sudo nix run --extra-experimental-features nix-command --extra-experimental-features flakes \
35
-
github:nix-community/disko -- --mode zap_create_mount ./modules/nixos/disk-config.nix
36
-
}
37
-
38
-
setup_files() {
39
-
sudo mkdir -p /mnt/etc/nixos
40
-
sudo cp -r * /mnt/etc/nixos
41
-
cd /mnt/etc/nixos
42
-
43
-
mkdir -p /root/.ssh
44
-
touch /root/.ssh/known_hosts
45
-
ssh-keyscan -t ed25519 github.com >> /root/.ssh/known_hosts
46
-
}
47
-
48
-
setup_ssh_keys() {
49
-
mkdir -p /mnt/home/${USERNAME}/.ssh
50
-
chown nixos /mnt/home/${USERNAME}/.ssh
51
-
52
-
chown nixos /root/.ssh/id_ed25519_agenix{,.pub}
53
-
cp --preserve=all /root/.ssh/id_ed25519_agenix /mnt/home/${USERNAME}/.ssh/id_ed25519
54
-
cp --preserve=all /root/.ssh/id_ed25519_agenix.pub /mnt/home/${USERNAME}/.ssh/id_ed25519.pub
55
-
cp --preserve=all /root/.ssh/id_ed25519 /mnt/home/${USERNAME}/.ssh/id_github
56
-
cp --preserve=all /root/.ssh/id_ed25519.pub /mnt/home/${USERNAME}/.ssh/id_github.pub
57
-
58
-
chmod 600 /mnt/home/${USERNAME}/.ssh/id_ed25519{,.pub}
59
-
chmod 600 /mnt/home/${USERNAME}/.ssh/id_github{,.pub}
60
-
}
61
-
62
-
link_home_dir() {
63
-
ln -s /mnt/home/${USERNAME} /home/${USERNAME} # Used to grab initial secrets
64
-
}
65
-
66
-
install_nixos() {
67
-
ARCH=$(uname -m)
68
-
69
-
case "$ARCH" in
70
-
x86_64)
71
-
FLAKE_TARGET="x86_64-linux"
72
-
;;
73
-
aarch64)
74
-
FLAKE_TARGET="aarch64-linux"
75
-
;;
76
-
*)
77
-
echo -e "${RED}Unsupported architecture: $ARCH${CLEAR}"
78
-
exit 1
79
-
;;
80
-
esac
81
-
82
-
sudo nixos-install --flake .#$FLAKE_TARGET $@
83
-
sudo chmod -R 775 /mnt/etc/nixos
84
-
}
85
-
86
-
prompt_reboot() {
87
-
read -p "Do you want to reboot now? (y/yes) " choice
88
-
case "$choice" in
89
-
y|Y|yes|YES ) echo -e "\e[1;32mRebooting...\e[0m" && sudo reboot;;
90
-
* ) echo -e "\e[1;33mReboot skipped.\e[0m";;
91
-
esac
92
-
}
93
-
94
-
cleanup
95
-
check_installer
96
-
download_config
97
-
run_apply
98
-
run_disko
99
-
setup_files
100
-
setup_ssh_keys
101
-
link_home_dir
102
-
install_nixos
103
-
cleanup
104
-
prompt_reboot
···
+7
-5
dns/dnsconfig.js
+7
-5
dns/dnsconfig.js
···
6
7
D("lakhwara.com", REG_NONE,
8
DnsProvider(DNS_HEDNS),
9
-
DefaultTTL(86400),
10
//SOA('@', 'ns1.he.net.', 'hostmaster.he.net.', 2022041702, 86400, 7200, 3600000, 86400, TTL(172800)),
11
-
A('anish', '103.16.130.98'),
12
-
A('coaching', '103.16.130.98'),
13
TXT('anish', 'datkey=dat://1a240a14fab2bae9c85ebad29bddc04505aaba24e5fb809c2ccb4cdf71e3a7d5'),
14
CNAME('fm1._domainkey', 'fm1.lakhwara.com.dkim.fmhosted.com.'),
15
CNAME('fm2._domainkey', 'fm2.lakhwara.com.dkim.fmhosted.com.'),
16
CNAME('fm3._domainkey', 'fm3.lakhwara.com.dkim.fmhosted.com.'),
17
-
A('@', '103.16.130.98'),
18
MX('@', 10, 'in1-smtp.messagingengine.com.'),
19
MX('@', 20, 'in2-smtp.messagingengine.com.'),
20
//NAMESERVER('ns1.he.net.'),
···
39
A('git', '69.61.2.203', TTL(300)),
40
A('bin', '69.61.2.203', TTL(300)),
41
A('ci', '69.61.2.203', TTL(300)),
42
-
// vultr -> nulled: lituus
43
A('@', '45.77.48.108', TTL(300)),
44
A('jitsi', '45.77.48.108', TTL(300)),
45
A('chat', '45.77.48.108', TTL(300)),
···
6
7
D("lakhwara.com", REG_NONE,
8
DnsProvider(DNS_HEDNS),
9
+
DefaultTTL(300),
10
//SOA('@', 'ns1.he.net.', 'hostmaster.he.net.', 2022041702, 86400, 7200, 3600000, 86400, TTL(172800)),
11
+
A('anish', '69.61.2.203'),
12
+
A('@', '69.61.2.203'),
13
+
//A('coaching', '103.16.130.98'),
14
TXT('anish', 'datkey=dat://1a240a14fab2bae9c85ebad29bddc04505aaba24e5fb809c2ccb4cdf71e3a7d5'),
15
CNAME('fm1._domainkey', 'fm1.lakhwara.com.dkim.fmhosted.com.'),
16
CNAME('fm2._domainkey', 'fm2.lakhwara.com.dkim.fmhosted.com.'),
17
CNAME('fm3._domainkey', 'fm3.lakhwara.com.dkim.fmhosted.com.'),
18
MX('@', 10, 'in1-smtp.messagingengine.com.'),
19
MX('@', 20, 'in2-smtp.messagingengine.com.'),
20
//NAMESERVER('ns1.he.net.'),
···
39
A('git', '69.61.2.203', TTL(300)),
40
A('bin', '69.61.2.203', TTL(300)),
41
A('ci', '69.61.2.203', TTL(300)),
42
+
A('write', '69.61.2.203', TTL(300)),
43
+
A('photos', '69.61.2.203', TTL(300)),
44
+
// vultr: lituus
45
A('@', '45.77.48.108', TTL(300)),
46
A('jitsi', '45.77.48.108', TTL(300)),
47
A('chat', '45.77.48.108', TTL(300)),
dns/test_nullhex.sh
dns/test_nullhex.sh
+63
-754
flake.lock
+63
-754
flake.lock
···
6
"home-manager": "home-manager",
7
"nixpkgs": [
8
"nixpkgs"
9
-
]
10
},
11
"locked": {
12
-
"lastModified": 1690228878,
13
-
"narHash": "sha256-9Xe7JV0krp4RJC9W9W9WutZVlw6BlHTFMiUP/k48LQY=",
14
"owner": "ryantm",
15
"repo": "agenix",
16
-
"rev": "d8c973fd228949736dedf61b7f8cc1ece3236792",
17
"type": "github"
18
},
19
"original": {
···
34
},
35
"locked": {
36
"lastModified": 1682226636,
37
-
"narHash": "sha256-f/XuEoZYh+aubCfjeduvwZjd5X7IgRYnmuuhGsdfP/U=",
38
"ref": "main",
39
"rev": "095d14ff2469c8f3de7cbf45d229c0f46a733aae",
40
"revCount": 77,
···
47
"url": "ssh://gitea@git.sealight.xyz/aynish/basant"
48
}
49
},
50
-
"brew-src": {
51
-
"flake": false,
52
-
"locked": {
53
-
"lastModified": 1705326576,
54
-
"narHash": "sha256-9PvMgHgdbpb5vBO8fHCRufodR731ynzGMF9+68vKWck=",
55
-
"owner": "Homebrew",
56
-
"repo": "brew",
57
-
"rev": "1c612baa096c69f2fcb221c74e6f5b9979efdcee",
58
-
"type": "github"
59
-
},
60
-
"original": {
61
-
"owner": "Homebrew",
62
-
"ref": "4.2.4",
63
-
"repo": "brew",
64
-
"type": "github"
65
-
}
66
-
},
67
-
"crane": {
68
-
"flake": false,
69
-
"locked": {
70
-
"lastModified": 1686108916,
71
-
"narHash": "sha256-looLH5MdY4erLiJw0XwQohGdr0fJL9y6TJY3898RA2U=",
72
-
"owner": "ipetkov",
73
-
"repo": "crane",
74
-
"rev": "8ab1a49432695bd80ff4b7f6c6515da0e926d922",
75
-
"type": "github"
76
-
},
77
-
"original": {
78
-
"owner": "ipetkov",
79
-
"ref": "v0.12.2",
80
-
"repo": "crane",
81
-
"type": "github"
82
-
}
83
-
},
84
"darwin": {
85
"inputs": {
86
"nixpkgs": [
···
89
]
90
},
91
"locked": {
92
-
"lastModified": 1673295039,
93
-
"narHash": "sha256-AsdYgE8/GPwcelGgrntlijMg4t3hLFJFCRF3tL5WVjA=",
94
"owner": "lnl7",
95
"repo": "nix-darwin",
96
-
"rev": "87b9d090ad39b25b2400029c64825fc2a8868943",
97
"type": "github"
98
},
99
"original": {
···
103
"type": "github"
104
}
105
},
106
-
"darwin_2": {
107
-
"inputs": {
108
-
"nixpkgs": [
109
-
"nixpkgs"
110
-
]
111
-
},
112
-
"locked": {
113
-
"lastModified": 1747752302,
114
-
"narHash": "sha256-XqNAcEFfe5tJZGlx+Su0G67ZwRwZmHNWwiMK0fji0Hw=",
115
-
"owner": "nix-darwin",
116
-
"repo": "nix-darwin",
117
-
"rev": "74ecd01d2c122f8a4a48066ab1d48f3e01671671",
118
-
"type": "github"
119
-
},
120
-
"original": {
121
-
"owner": "nix-darwin",
122
-
"ref": "nix-darwin-25.05",
123
-
"repo": "nix-darwin",
124
-
"type": "github"
125
-
}
126
-
},
127
"deploy-rs": {
128
"inputs": {
129
"flake-compat": "flake-compat",
···
133
"utils": "utils"
134
},
135
"locked": {
136
-
"lastModified": 1704875591,
137
-
"narHash": "sha256-eWRLbqRcrILgztU/m/k7CYLzETKNbv0OsT2GjkaNm8A=",
138
"owner": "serokell",
139
"repo": "deploy-rs",
140
-
"rev": "1776009f1f3fb2b5d236b84d9815f2edee463a9b",
141
"type": "github"
142
},
143
"original": {
···
164
"dirt-samples-src": {
165
"flake": false,
166
"locked": {
167
-
"lastModified": 1588278411,
168
-
"narHash": "sha256-h8vQxRym6QzNLOTZU7A43VCHuG0H77l+BFwXnC0L1CE=",
169
"owner": "tidalcycles",
170
"repo": "dirt-samples",
171
-
"rev": "66d432418c9a7d82cf049d9246adfa62f46df2a6",
172
"type": "github"
173
},
174
"original": {
175
"owner": "tidalcycles",
176
-
"ref": "master",
177
"repo": "dirt-samples",
178
"type": "github"
179
}
···
185
]
186
},
187
"locked": {
188
-
"lastModified": 1690739034,
189
-
"narHash": "sha256-roW02IaiQ3gnEEDMCDWL5YyN+C4nBf/te6vfL7rG0jk=",
190
"owner": "nix-community",
191
"repo": "disko",
192
-
"rev": "4015740375676402a2ee6adebc3c30ea625b9a94",
193
"type": "github"
194
},
195
"original": {
···
198
"type": "github"
199
}
200
},
201
-
"dream2nix": {
202
-
"inputs": {
203
-
"devshell": [
204
-
"sg-nvim",
205
-
"nci"
206
-
],
207
-
"flake-compat": [
208
-
"sg-nvim",
209
-
"nci"
210
-
],
211
-
"flake-parts": [
212
-
"sg-nvim",
213
-
"nci",
214
-
"parts"
215
-
],
216
-
"nix-unit": [
217
-
"sg-nvim",
218
-
"nci"
219
-
],
220
-
"nixpkgs": [
221
-
"sg-nvim",
222
-
"nci",
223
-
"nixpkgs"
224
-
],
225
-
"pre-commit-hooks": [
226
-
"sg-nvim",
227
-
"nci"
228
-
]
229
-
},
230
-
"locked": {
231
-
"lastModified": 1696373678,
232
-
"narHash": "sha256-D5yaEkxi7VnoRsBDeHYB86FikFYDL/vq77ajo3Pa3Og=",
233
-
"owner": "nix-community",
234
-
"repo": "dream2nix",
235
-
"rev": "5e2577caaf87661e29405db7e117bda57b0e749d",
236
-
"type": "github"
237
-
},
238
-
"original": {
239
-
"owner": "nix-community",
240
-
"repo": "dream2nix",
241
-
"type": "github"
242
-
}
243
-
},
244
"flake-compat": {
245
"flake": false,
246
"locked": {
···
273
"type": "github"
274
}
275
},
276
-
"flake-compat_3": {
277
-
"flake": false,
278
-
"locked": {
279
-
"lastModified": 1673956053,
280
-
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
281
-
"owner": "edolstra",
282
-
"repo": "flake-compat",
283
-
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
284
-
"type": "github"
285
-
},
286
-
"original": {
287
-
"owner": "edolstra",
288
-
"repo": "flake-compat",
289
-
"type": "github"
290
-
}
291
-
},
292
-
"flake-parts": {
293
-
"inputs": {
294
-
"nixpkgs-lib": "nixpkgs-lib"
295
-
},
296
-
"locked": {
297
-
"lastModified": 1696343447,
298
-
"narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=",
299
-
"owner": "hercules-ci",
300
-
"repo": "flake-parts",
301
-
"rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4",
302
-
"type": "github"
303
-
},
304
-
"original": {
305
-
"owner": "hercules-ci",
306
-
"repo": "flake-parts",
307
-
"type": "github"
308
-
}
309
-
},
310
"flake-utils": {
311
"locked": {
312
"lastModified": 1638122382,
···
337
"type": "github"
338
}
339
},
340
-
"flake-utils_3": {
341
-
"inputs": {
342
-
"systems": "systems_2"
343
-
},
344
-
"locked": {
345
-
"lastModified": 1687709756,
346
-
"narHash": "sha256-Y5wKlQSkgEK2weWdOu4J3riRd+kV/VCgHsqLNTTWQ/0=",
347
-
"owner": "numtide",
348
-
"repo": "flake-utils",
349
-
"rev": "dbabf0ca0c0c4bce6ea5eaf65af5cb694d2082c7",
350
-
"type": "github"
351
-
},
352
-
"original": {
353
-
"owner": "numtide",
354
-
"repo": "flake-utils",
355
-
"type": "github"
356
-
}
357
-
},
358
-
"flake-utils_4": {
359
-
"inputs": {
360
-
"systems": "systems_3"
361
-
},
362
-
"locked": {
363
-
"lastModified": 1681202837,
364
-
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
365
-
"owner": "numtide",
366
-
"repo": "flake-utils",
367
-
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
368
-
"type": "github"
369
-
},
370
-
"original": {
371
-
"owner": "numtide",
372
-
"repo": "flake-utils",
373
-
"type": "github"
374
-
}
375
-
},
376
-
"flake-utils_5": {
377
-
"inputs": {
378
-
"systems": "systems_4"
379
-
},
380
-
"locked": {
381
-
"lastModified": 1685518550,
382
-
"narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=",
383
-
"owner": "numtide",
384
-
"repo": "flake-utils",
385
-
"rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef",
386
-
"type": "github"
387
-
},
388
-
"original": {
389
-
"owner": "numtide",
390
-
"repo": "flake-utils",
391
-
"type": "github"
392
-
}
393
-
},
394
-
"flake-utils_6": {
395
-
"inputs": {
396
-
"systems": "systems_5"
397
-
},
398
-
"locked": {
399
-
"lastModified": 1681202837,
400
-
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
401
-
"owner": "numtide",
402
-
"repo": "flake-utils",
403
-
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
404
-
"type": "github"
405
-
},
406
-
"original": {
407
-
"owner": "numtide",
408
-
"repo": "flake-utils",
409
-
"type": "github"
410
-
}
411
-
},
412
-
"gitignore": {
413
-
"inputs": {
414
-
"nixpkgs": [
415
-
"sg-nvim",
416
-
"pre-commit-nix",
417
-
"nixpkgs"
418
-
]
419
-
},
420
-
"locked": {
421
-
"lastModified": 1660459072,
422
-
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=",
423
-
"owner": "hercules-ci",
424
-
"repo": "gitignore.nix",
425
-
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73",
426
-
"type": "github"
427
-
},
428
-
"original": {
429
-
"owner": "hercules-ci",
430
-
"repo": "gitignore.nix",
431
-
"type": "github"
432
-
}
433
-
},
434
"grasp": {
435
"inputs": {
436
"flake-utils": "flake-utils_2",
···
455
},
456
"hardware": {
457
"locked": {
458
-
"lastModified": 1691179816,
459
-
"narHash": "sha256-WSMwqzU70ZMRHv1CUAfHEEKJuB0c9c9r0F+lJehXfSI=",
460
"owner": "nixos",
461
"repo": "nixos-hardware",
462
-
"rev": "87e3122b67587492a617764f88c71991893fcf8a",
463
"type": "github"
464
},
465
"original": {
···
476
]
477
},
478
"locked": {
479
-
"lastModified": 1682203081,
480
-
"narHash": "sha256-kRL4ejWDhi0zph/FpebFYhzqlOBrk0Pl3dzGEKSAlEw=",
481
"owner": "nix-community",
482
"repo": "home-manager",
483
-
"rev": "32d3e39c491e2f91152c84f8ad8b003420eab0a1",
484
"type": "github"
485
},
486
"original": {
···
496
]
497
},
498
"locked": {
499
-
"lastModified": 1747556831,
500
-
"narHash": "sha256-Qb84nbYFFk0DzFeqVoHltS2RodAYY5/HZQKE8WnBDsc=",
501
"owner": "nix-community",
502
"repo": "home-manager",
503
-
"rev": "d0bbd221482c2713cccb80220f3c9d16a6e20a33",
504
"type": "github"
505
},
506
"original": {
···
510
"type": "github"
511
}
512
},
513
-
"homebrew-bundle": {
514
-
"flake": false,
515
-
"locked": {
516
-
"lastModified": 1709834002,
517
-
"narHash": "sha256-KNRwMnyo6ZLphIh2bn02KNOtRf2X3NHqUbS7y4Vmn+M=",
518
-
"owner": "homebrew",
519
-
"repo": "homebrew-bundle",
520
-
"rev": "bb1c80baa7fac67bbffe81a2862c75a5dc7ea4a7",
521
-
"type": "github"
522
-
},
523
-
"original": {
524
-
"owner": "homebrew",
525
-
"repo": "homebrew-bundle",
526
-
"type": "github"
527
-
}
528
-
},
529
-
"homebrew-cask": {
530
-
"flake": false,
531
-
"locked": {
532
-
"lastModified": 1709955474,
533
-
"narHash": "sha256-pE5x579FqCieeeEmrUtNKoBsMG41WSOfGWtXCTI9FP4=",
534
-
"owner": "homebrew",
535
-
"repo": "homebrew-cask",
536
-
"rev": "43b9db57368e350c116398c7da6cb5401cd37ebe",
537
-
"type": "github"
538
-
},
539
-
"original": {
540
-
"owner": "homebrew",
541
-
"repo": "homebrew-cask",
542
-
"type": "github"
543
-
}
544
-
},
545
-
"homebrew-core": {
546
-
"flake": false,
547
-
"locked": {
548
-
"lastModified": 1709956143,
549
-
"narHash": "sha256-5eyfpnVhxVv3+n53vp4j9DNx7O+mqtQqUn90JKS1PMM=",
550
-
"owner": "homebrew",
551
-
"repo": "homebrew-core",
552
-
"rev": "a38d7e99bc103e9564208f2d155701d70001c8cc",
553
-
"type": "github"
554
-
},
555
-
"original": {
556
-
"owner": "homebrew",
557
-
"repo": "homebrew-core",
558
-
"type": "github"
559
-
}
560
-
},
561
-
"mk-naked-shell": {
562
-
"flake": false,
563
-
"locked": {
564
-
"lastModified": 1681286841,
565
-
"narHash": "sha256-3XlJrwlR0nBiREnuogoa5i1b4+w/XPe0z8bbrJASw0g=",
566
-
"owner": "yusdacra",
567
-
"repo": "mk-naked-shell",
568
-
"rev": "7612f828dd6f22b7fb332cc69440e839d7ffe6bd",
569
-
"type": "github"
570
-
},
571
-
"original": {
572
-
"owner": "yusdacra",
573
-
"repo": "mk-naked-shell",
574
-
"type": "github"
575
-
}
576
-
},
577
-
"nci": {
578
-
"inputs": {
579
-
"crane": "crane",
580
-
"dream2nix": "dream2nix",
581
-
"mk-naked-shell": "mk-naked-shell",
582
-
"nixpkgs": "nixpkgs_5",
583
-
"parts": "parts",
584
-
"rust-overlay": "rust-overlay_2",
585
-
"treefmt": "treefmt"
586
-
},
587
-
"locked": {
588
-
"lastModified": 1696572678,
589
-
"narHash": "sha256-rcznf00l41VtjzvEGMWOxaj5J/5twES6n30VwbJMgl0=",
590
-
"owner": "yusdacra",
591
-
"repo": "nix-cargo-integration",
592
-
"rev": "cacb6c94004a35676c193f04afa8821758986bf0",
593
-
"type": "github"
594
-
},
595
-
"original": {
596
-
"owner": "yusdacra",
597
-
"repo": "nix-cargo-integration",
598
-
"type": "github"
599
-
}
600
-
},
601
-
"nix-darwin": {
602
-
"inputs": {
603
-
"nixpkgs": "nixpkgs"
604
-
},
605
-
"locked": {
606
-
"lastModified": 1688307440,
607
-
"narHash": "sha256-7PTjbN+/+b799YN7Tk2SS5Vh8A0L3gBo8hmB7Y0VXug=",
608
-
"owner": "LnL7",
609
-
"repo": "nix-darwin",
610
-
"rev": "b06bab83bdf285ea0ae3c8e145a081eb95959047",
611
-
"type": "github"
612
-
},
613
-
"original": {
614
-
"owner": "LnL7",
615
-
"repo": "nix-darwin",
616
-
"type": "github"
617
-
}
618
-
},
619
-
"nix-homebrew": {
620
-
"inputs": {
621
-
"brew-src": "brew-src",
622
-
"flake-utils": "flake-utils_3",
623
-
"nix-darwin": "nix-darwin",
624
-
"nixpkgs": "nixpkgs_2"
625
-
},
626
-
"locked": {
627
-
"lastModified": 1705952034,
628
-
"narHash": "sha256-H0nk8Gk8kPw4yi2WwOTsSHgPrzSwyNgWEYHk10IJwfc=",
629
-
"owner": "zhaofengli-wip",
630
-
"repo": "nix-homebrew",
631
-
"rev": "40f5ee46b58e7c5f1927e2c5a583dc3d7e571ed9",
632
-
"type": "github"
633
-
},
634
-
"original": {
635
-
"owner": "zhaofengli-wip",
636
-
"repo": "nix-homebrew",
637
-
"type": "github"
638
-
}
639
-
},
640
"nix-matrix-appservices": {
641
"inputs": {
642
"devshell": "devshell",
643
"flake-compat": "flake-compat_2",
644
"nixlib": "nixlib",
645
-
"nixpkgs": "nixpkgs_3"
646
},
647
"locked": {
648
"lastModified": 1683490239,
···
675
},
676
"nixos-hardware": {
677
"locked": {
678
-
"lastModified": 1691179816,
679
-
"narHash": "sha256-WSMwqzU70ZMRHv1CUAfHEEKJuB0c9c9r0F+lJehXfSI=",
680
"owner": "NixOS",
681
"repo": "nixos-hardware",
682
-
"rev": "87e3122b67587492a617764f88c71991893fcf8a",
683
"type": "github"
684
},
685
"original": {
···
691
},
692
"nixpkgs": {
693
"locked": {
694
-
"lastModified": 1687274257,
695
-
"narHash": "sha256-TutzPriQcZ8FghDhEolnHcYU2oHIG5XWF+/SUBNnAOE=",
696
-
"path": "/nix/store/22qgs3skscd9bmrxv9xv4q5d4wwm5ppx-source",
697
-
"rev": "2c9ecd1f0400076a4d6b2193ad468ff0a7e7fdc5",
698
-
"type": "path"
699
-
},
700
-
"original": {
701
-
"id": "nixpkgs",
702
-
"type": "indirect"
703
-
}
704
-
},
705
-
"nixpkgs-lib": {
706
-
"locked": {
707
-
"dir": "lib",
708
-
"lastModified": 1696019113,
709
-
"narHash": "sha256-X3+DKYWJm93DRSdC5M6K5hLqzSya9BjibtBsuARoPco=",
710
-
"owner": "NixOS",
711
-
"repo": "nixpkgs",
712
-
"rev": "f5892ddac112a1e9b3612c39af1b72987ee5783a",
713
-
"type": "github"
714
-
},
715
-
"original": {
716
-
"dir": "lib",
717
-
"owner": "NixOS",
718
-
"ref": "nixos-unstable",
719
-
"repo": "nixpkgs",
720
-
"type": "github"
721
-
}
722
-
},
723
-
"nixpkgs-stable": {
724
-
"locked": {
725
-
"lastModified": 1685801374,
726
-
"narHash": "sha256-otaSUoFEMM+LjBI1XL/xGB5ao6IwnZOXc47qhIgJe8U=",
727
-
"owner": "NixOS",
728
-
"repo": "nixpkgs",
729
-
"rev": "c37ca420157f4abc31e26f436c1145f8951ff373",
730
-
"type": "github"
731
-
},
732
-
"original": {
733
-
"owner": "NixOS",
734
-
"ref": "nixos-23.05",
735
-
"repo": "nixpkgs",
736
-
"type": "github"
737
-
}
738
-
},
739
-
"nixpkgs_2": {
740
-
"locked": {
741
-
"lastModified": 1688049487,
742
-
"narHash": "sha256-100g4iaKC9MalDjUW9iN6Jl/OocTDtXdeAj7pEGIRh4=",
743
-
"owner": "NixOS",
744
-
"repo": "nixpkgs",
745
-
"rev": "4bc72cae107788bf3f24f30db2e2f685c9298dc9",
746
-
"type": "github"
747
-
},
748
-
"original": {
749
-
"owner": "NixOS",
750
-
"ref": "nixos-unstable",
751
-
"repo": "nixpkgs",
752
-
"type": "github"
753
-
}
754
-
},
755
-
"nixpkgs_3": {
756
-
"locked": {
757
"lastModified": 1662099760,
758
"narHash": "sha256-MdZLCTJPeHi/9fg6R9fiunyDwP3XHJqDd51zWWz9px0=",
759
"owner": "NixOS",
···
768
"type": "github"
769
}
770
},
771
-
"nixpkgs_4": {
772
"locked": {
773
-
"lastModified": 1747610100,
774
-
"narHash": "sha256-rpR5ZPMkWzcnCcYYo3lScqfuzEw5Uyfh+R0EKZfroAc=",
775
"owner": "nixos",
776
"repo": "nixpkgs",
777
-
"rev": "ca49c4304acf0973078db0a9d200fd2bae75676d",
778
"type": "github"
779
},
780
"original": {
···
784
"type": "github"
785
}
786
},
787
-
"nixpkgs_5": {
788
-
"locked": {
789
-
"lastModified": 1696193975,
790
-
"narHash": "sha256-mnQjUcYgp9Guu3RNVAB2Srr1TqKcPpRXmJf4LJk6KRY=",
791
-
"owner": "NixOS",
792
-
"repo": "nixpkgs",
793
-
"rev": "fdd898f8f79e8d2f99ed2ab6b3751811ef683242",
794
-
"type": "github"
795
-
},
796
-
"original": {
797
-
"owner": "NixOS",
798
-
"ref": "nixos-unstable",
799
-
"repo": "nixpkgs",
800
-
"type": "github"
801
-
}
802
-
},
803
-
"nixpkgs_6": {
804
-
"locked": {
805
-
"lastModified": 1696419054,
806
-
"narHash": "sha256-EdR+dIKCfqL3voZUDYwcvgRDOektQB9KbhBVcE0/3Mo=",
807
-
"owner": "nixos",
808
-
"repo": "nixpkgs",
809
-
"rev": "7131f3c223a2d799568e4b278380cd9dac2b8579",
810
-
"type": "github"
811
-
},
812
-
"original": {
813
-
"owner": "nixos",
814
-
"ref": "nixpkgs-unstable",
815
-
"repo": "nixpkgs",
816
-
"type": "github"
817
-
}
818
-
},
819
-
"nixpkgs_7": {
820
-
"locked": {
821
-
"lastModified": 1689261696,
822
-
"narHash": "sha256-LzfUtFs9MQRvIoQ3MfgSuipBVMXslMPH/vZ+nM40LkA=",
823
-
"owner": "NixOS",
824
-
"repo": "nixpkgs",
825
-
"rev": "df1eee2aa65052a18121ed4971081576b25d6b5c",
826
-
"type": "github"
827
-
},
828
-
"original": {
829
-
"owner": "NixOS",
830
-
"ref": "nixpkgs-unstable",
831
-
"repo": "nixpkgs",
832
-
"type": "github"
833
-
}
834
-
},
835
-
"nixpkgs_8": {
836
-
"locked": {
837
-
"lastModified": 1681358109,
838
-
"narHash": "sha256-eKyxW4OohHQx9Urxi7TQlFBTDWII+F+x2hklDOQPB50=",
839
-
"owner": "NixOS",
840
-
"repo": "nixpkgs",
841
-
"rev": "96ba1c52e54e74c3197f4d43026b3f3d92e83ff9",
842
-
"type": "github"
843
-
},
844
-
"original": {
845
-
"owner": "NixOS",
846
-
"ref": "nixpkgs-unstable",
847
-
"repo": "nixpkgs",
848
-
"type": "github"
849
-
}
850
-
},
851
"nur": {
852
"locked": {
853
-
"lastModified": 1691214006,
854
-
"narHash": "sha256-kdfBd+Y0DTOOdgSA6h6iIn403xVj4bzLnXqb7+yM6lQ=",
855
"owner": "nix-community",
856
"repo": "NUR",
857
-
"rev": "963ad2d1bb0a8f59b2c23ab521d4dff2148aad16",
858
"type": "github"
859
},
860
"original": {
···
863
"type": "github"
864
}
865
},
866
-
"parts": {
867
-
"inputs": {
868
-
"nixpkgs-lib": [
869
-
"sg-nvim",
870
-
"nci",
871
-
"nixpkgs"
872
-
]
873
-
},
874
-
"locked": {
875
-
"lastModified": 1696343447,
876
-
"narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=",
877
-
"owner": "hercules-ci",
878
-
"repo": "flake-parts",
879
-
"rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4",
880
-
"type": "github"
881
-
},
882
-
"original": {
883
-
"owner": "hercules-ci",
884
-
"repo": "flake-parts",
885
-
"type": "github"
886
-
}
887
-
},
888
"poonam": {
889
"inputs": {
890
"nixpkgs": [
···
892
]
893
},
894
"locked": {
895
-
"lastModified": 1724637654,
896
-
"narHash": "sha256-YXmWxUEG3NDsLn46Ctrgn7YcT/h0fsCAxKcSgIhCSLo=",
897
"ref": "main",
898
-
"rev": "521e360df123a530fc4c99187e3580bd5d086a9d",
899
-
"revCount": 1467,
900
"type": "git",
901
"url": "ssh://gitea@git.sealight.xyz/aynish/kitaab"
902
},
···
906
"url": "ssh://gitea@git.sealight.xyz/aynish/kitaab"
907
}
908
},
909
-
"pre-commit-nix": {
910
-
"inputs": {
911
-
"flake-compat": "flake-compat_3",
912
-
"flake-utils": "flake-utils_5",
913
-
"gitignore": "gitignore",
914
-
"nixpkgs": "nixpkgs_7",
915
-
"nixpkgs-stable": "nixpkgs-stable"
916
-
},
917
-
"locked": {
918
-
"lastModified": 1696516544,
919
-
"narHash": "sha256-8rKE8Je6twTNFRTGF63P9mE3lZIq917RAicdc4XJO80=",
920
-
"owner": "cachix",
921
-
"repo": "pre-commit-hooks.nix",
922
-
"rev": "66c352d33e0907239e4a69416334f64af2c685cc",
923
-
"type": "github"
924
-
},
925
-
"original": {
926
-
"owner": "cachix",
927
-
"repo": "pre-commit-hooks.nix",
928
-
"type": "github"
929
-
}
930
-
},
931
"root": {
932
"inputs": {
933
"agenix": "agenix",
934
"basant": "basant",
935
-
"darwin": "darwin_2",
936
"deploy-rs": "deploy-rs",
937
"disko": "disko",
938
"grasp": "grasp",
939
"hardware": "hardware",
940
"home-manager": "home-manager_2",
941
-
"homebrew-bundle": "homebrew-bundle",
942
-
"homebrew-cask": "homebrew-cask",
943
-
"homebrew-core": "homebrew-core",
944
-
"nix-homebrew": "nix-homebrew",
945
"nix-matrix-appservices": "nix-matrix-appservices",
946
"nixos-hardware": "nixos-hardware",
947
-
"nixpkgs": "nixpkgs_4",
948
"nur": "nur",
949
"poonam": "poonam",
950
"rust-overlay": "rust-overlay",
951
-
"sg-nvim": "sg-nvim",
952
-
"sourcegraph-src-cli-cask": "sourcegraph-src-cli-cask",
953
"tidalcycles": "tidalcycles",
954
"unstable": "unstable",
955
"vimwikicli": "vimwikicli"
···
957
},
958
"rust-overlay": {
959
"inputs": {
960
-
"flake-utils": "flake-utils_4",
961
"nixpkgs": [
962
"nixpkgs"
963
]
964
},
965
"locked": {
966
-
"lastModified": 1691201768,
967
-
"narHash": "sha256-h+QJMpawZoK1+8efF6UjQoY1EHZfHteXVa5OYnlqRWA=",
968
"owner": "oxalica",
969
"repo": "rust-overlay",
970
-
"rev": "18ee2a71de24273e4ad4503b5604532f0b53f382",
971
"type": "github"
972
},
973
"original": {
···
976
"type": "github"
977
}
978
},
979
-
"rust-overlay_2": {
980
-
"flake": false,
981
-
"locked": {
982
-
"lastModified": 1696558324,
983
-
"narHash": "sha256-TnnP4LGwDB8ZGE7h2n4nA9Faee8xPkMdNcyrzJ57cbw=",
984
-
"owner": "oxalica",
985
-
"repo": "rust-overlay",
986
-
"rev": "fdb37574a04df04aaa8cf7708f94a9309caebe2b",
987
-
"type": "github"
988
-
},
989
-
"original": {
990
-
"owner": "oxalica",
991
-
"repo": "rust-overlay",
992
-
"type": "github"
993
-
}
994
-
},
995
-
"rust-overlay_3": {
996
-
"inputs": {
997
-
"flake-utils": "flake-utils_6",
998
-
"nixpkgs": "nixpkgs_8"
999
-
},
1000
-
"locked": {
1001
-
"lastModified": 1696558324,
1002
-
"narHash": "sha256-TnnP4LGwDB8ZGE7h2n4nA9Faee8xPkMdNcyrzJ57cbw=",
1003
-
"owner": "oxalica",
1004
-
"repo": "rust-overlay",
1005
-
"rev": "fdb37574a04df04aaa8cf7708f94a9309caebe2b",
1006
-
"type": "github"
1007
-
},
1008
-
"original": {
1009
-
"owner": "oxalica",
1010
-
"repo": "rust-overlay",
1011
-
"type": "github"
1012
-
}
1013
-
},
1014
-
"sg-nvim": {
1015
-
"inputs": {
1016
-
"flake-parts": "flake-parts",
1017
-
"nci": "nci",
1018
-
"nixpkgs": "nixpkgs_6",
1019
-
"pre-commit-nix": "pre-commit-nix",
1020
-
"rust-overlay": "rust-overlay_3"
1021
-
},
1022
-
"locked": {
1023
-
"lastModified": 1716664639,
1024
-
"narHash": "sha256-5wzTW9kJGYq41kXG9JoVAaA5601K26cDrweT2PtpEw8=",
1025
-
"owner": "sourcegraph",
1026
-
"repo": "sg.nvim",
1027
-
"rev": "8bdd4d19da2268072708d5fe18fda9c23e16509d",
1028
-
"type": "github"
1029
-
},
1030
-
"original": {
1031
-
"owner": "sourcegraph",
1032
-
"repo": "sg.nvim",
1033
-
"type": "github"
1034
-
}
1035
-
},
1036
-
"sourcegraph-src-cli-cask": {
1037
-
"flake": false,
1038
-
"locked": {
1039
-
"lastModified": 1722629753,
1040
-
"narHash": "sha256-3OwvDSoVzklr3ca1qCXR27Kc8hGjshRRdtVQ8OUXQCc=",
1041
-
"owner": "sourcegraph",
1042
-
"repo": "homebrew-src-cli",
1043
-
"rev": "130bd8ab70961e5c1f890811bfb1f7552a2ee5a9",
1044
-
"type": "github"
1045
-
},
1046
-
"original": {
1047
-
"owner": "sourcegraph",
1048
-
"repo": "homebrew-src-cli",
1049
-
"type": "github"
1050
-
}
1051
-
},
1052
"superdirt-src": {
1053
"flake": false,
1054
"locked": {
1055
-
"lastModified": 1611740180,
1056
-
"narHash": "sha256-GtnqZeMFqFkVhgx2Exu0wY687cHa7mNnVCgjQd6fiIA=",
1057
"owner": "musikinformatik",
1058
"repo": "superdirt",
1059
-
"rev": "7abb62e89649daa1232b9cbd6427241868abd30e",
1060
"type": "github"
1061
},
1062
"original": {
1063
"owner": "musikinformatik",
1064
-
"ref": "master",
1065
"repo": "superdirt",
1066
"type": "github"
1067
}
···
1096
"type": "github"
1097
}
1098
},
1099
-
"systems_3": {
1100
-
"locked": {
1101
-
"lastModified": 1681028828,
1102
-
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
1103
-
"owner": "nix-systems",
1104
-
"repo": "default",
1105
-
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
1106
-
"type": "github"
1107
-
},
1108
-
"original": {
1109
-
"owner": "nix-systems",
1110
-
"repo": "default",
1111
-
"type": "github"
1112
-
}
1113
-
},
1114
-
"systems_4": {
1115
-
"locked": {
1116
-
"lastModified": 1681028828,
1117
-
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
1118
-
"owner": "nix-systems",
1119
-
"repo": "default",
1120
-
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
1121
-
"type": "github"
1122
-
},
1123
-
"original": {
1124
-
"owner": "nix-systems",
1125
-
"repo": "default",
1126
-
"type": "github"
1127
-
}
1128
-
},
1129
-
"systems_5": {
1130
-
"locked": {
1131
-
"lastModified": 1681028828,
1132
-
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
1133
-
"owner": "nix-systems",
1134
-
"repo": "default",
1135
-
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
1136
-
"type": "github"
1137
-
},
1138
-
"original": {
1139
-
"owner": "nix-systems",
1140
-
"repo": "default",
1141
-
"type": "github"
1142
-
}
1143
-
},
1144
"tidal-src": {
1145
"flake": false,
1146
"locked": {
1147
-
"lastModified": 1654350756,
1148
-
"narHash": "sha256-tONM5SYYBca0orTLH1EUOilSC1FCluWrFt8AetUx+YQ=",
1149
"owner": "tidalcycles",
1150
"repo": "tidal",
1151
-
"rev": "fda9c1ecb3722698935245e5409ef8ccdfca16c8",
1152
"type": "github"
1153
},
1154
"original": {
1155
"owner": "tidalcycles",
1156
-
"ref": "main",
1157
"repo": "tidal",
1158
"type": "github"
1159
}
···
1166
],
1167
"superdirt-src": "superdirt-src",
1168
"tidal-src": "tidal-src",
1169
-
"utils": "utils_2",
1170
"vim-tidal-src": "vim-tidal-src",
1171
"vowel-src": "vowel-src"
1172
},
1173
"locked": {
1174
-
"lastModified": 1664760044,
1175
-
"narHash": "sha256-e5LGk/tDnphory1mYhADgPnVtShofY2w/3xY09jEE2A=",
1176
"owner": "mitchmindtree",
1177
"repo": "tidalcycles.nix",
1178
-
"rev": "3f3a820cd43709077d15a24fa6062de7d623a6bf",
1179
"type": "github"
1180
},
1181
"original": {
···
1184
"type": "github"
1185
}
1186
},
1187
-
"treefmt": {
1188
-
"inputs": {
1189
-
"nixpkgs": [
1190
-
"sg-nvim",
1191
-
"nci",
1192
-
"nixpkgs"
1193
-
]
1194
-
},
1195
-
"locked": {
1196
-
"lastModified": 1695822946,
1197
-
"narHash": "sha256-IQU3fYo0H+oGlqX5YrgZU3VRhbt2Oqe6KmslQKUO4II=",
1198
-
"owner": "numtide",
1199
-
"repo": "treefmt-nix",
1200
-
"rev": "720bd006d855b08e60664e4683ccddb7a9ff614a",
1201
-
"type": "github"
1202
-
},
1203
-
"original": {
1204
-
"owner": "numtide",
1205
-
"repo": "treefmt-nix",
1206
-
"type": "github"
1207
-
}
1208
-
},
1209
"unstable": {
1210
"locked": {
1211
-
"lastModified": 1747542820,
1212
-
"narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=",
1213
"owner": "nixos",
1214
"repo": "nixpkgs",
1215
-
"rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043",
1216
"type": "github"
1217
},
1218
"original": {
···
1224
},
1225
"utils": {
1226
"inputs": {
1227
-
"systems": "systems"
1228
},
1229
"locked": {
1230
"lastModified": 1701680307,
···
1240
"type": "github"
1241
}
1242
},
1243
-
"utils_2": {
1244
-
"locked": {
1245
-
"lastModified": 1653893745,
1246
-
"narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=",
1247
-
"owner": "numtide",
1248
-
"repo": "flake-utils",
1249
-
"rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1",
1250
-
"type": "github"
1251
-
},
1252
-
"original": {
1253
-
"owner": "numtide",
1254
-
"repo": "flake-utils",
1255
-
"type": "github"
1256
-
}
1257
-
},
1258
"vim-tidal-src": {
1259
"flake": false,
1260
"locked": {
1261
-
"lastModified": 1664252474,
1262
-
"narHash": "sha256-hleiK2Q7xYndpB+tIbyyXIM2sk4NunUh9DPgMqmf/Wc=",
1263
"owner": "tidalcycles",
1264
"repo": "vim-tidal",
1265
-
"rev": "b07f5c12986fb837e055d7fcf0acf3b7e248148f",
1266
"type": "github"
1267
},
1268
"original": {
1269
"owner": "tidalcycles",
1270
-
"ref": "master",
1271
"repo": "vim-tidal",
1272
"type": "github"
1273
}
···
1305
},
1306
"original": {
1307
"owner": "supercollider-quarks",
1308
-
"ref": "master",
1309
"repo": "vowel",
1310
"type": "github"
1311
}
···
6
"home-manager": "home-manager",
7
"nixpkgs": [
8
"nixpkgs"
9
+
],
10
+
"systems": "systems"
11
},
12
"locked": {
13
+
"lastModified": 1723293904,
14
+
"narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=",
15
"owner": "ryantm",
16
"repo": "agenix",
17
+
"rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41",
18
"type": "github"
19
},
20
"original": {
···
35
},
36
"locked": {
37
"lastModified": 1682226636,
38
+
"narHash": "sha256-fmETHfUtQ5zOVr/4MT5wE7eNALCSQCnEUYZYmV3UEwg=",
39
"ref": "main",
40
"rev": "095d14ff2469c8f3de7cbf45d229c0f46a733aae",
41
"revCount": 77,
···
48
"url": "ssh://gitea@git.sealight.xyz/aynish/basant"
49
}
50
},
51
"darwin": {
52
"inputs": {
53
"nixpkgs": [
···
56
]
57
},
58
"locked": {
59
+
"lastModified": 1700795494,
60
+
"narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=",
61
"owner": "lnl7",
62
"repo": "nix-darwin",
63
+
"rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d",
64
"type": "github"
65
},
66
"original": {
···
70
"type": "github"
71
}
72
},
73
"deploy-rs": {
74
"inputs": {
75
"flake-compat": "flake-compat",
···
79
"utils": "utils"
80
},
81
"locked": {
82
+
"lastModified": 1718194053,
83
+
"narHash": "sha256-FaGrf7qwZ99ehPJCAwgvNY5sLCqQ3GDiE/6uLhxxwSY=",
84
"owner": "serokell",
85
"repo": "deploy-rs",
86
+
"rev": "3867348fa92bc892eba5d9ddb2d7a97b9e127a8a",
87
"type": "github"
88
},
89
"original": {
···
110
"dirt-samples-src": {
111
"flake": false,
112
"locked": {
113
+
"lastModified": 1698439458,
114
+
"narHash": "sha256-Mp8qBpsOvW9Zguv95Kv7EU6S3ICaF2aO02Wz6xGURtE=",
115
"owner": "tidalcycles",
116
"repo": "dirt-samples",
117
+
"rev": "9a6dff8f9ec3cd55b287290cf04e01afa6b8f532",
118
"type": "github"
119
},
120
"original": {
121
"owner": "tidalcycles",
122
"repo": "dirt-samples",
123
"type": "github"
124
}
···
130
]
131
},
132
"locked": {
133
+
"lastModified": 1724031427,
134
+
"narHash": "sha256-o1HdAf+7IGv9M13R3c+zc/sJ0QgeEnhsvHBcodI4UpM=",
135
"owner": "nix-community",
136
"repo": "disko",
137
+
"rev": "4e719b38fa7c85f4f65d0308ca7084c91e7bdd6d",
138
"type": "github"
139
},
140
"original": {
···
143
"type": "github"
144
}
145
},
146
"flake-compat": {
147
"flake": false,
148
"locked": {
···
175
"type": "github"
176
}
177
},
178
"flake-utils": {
179
"locked": {
180
"lastModified": 1638122382,
···
205
"type": "github"
206
}
207
},
208
"grasp": {
209
"inputs": {
210
"flake-utils": "flake-utils_2",
···
229
},
230
"hardware": {
231
"locked": {
232
+
"lastModified": 1723310128,
233
+
"narHash": "sha256-IiH8jG6PpR4h9TxSGMYh+2/gQiJW9MwehFvheSb5rPc=",
234
"owner": "nixos",
235
"repo": "nixos-hardware",
236
+
"rev": "c54cf53e022b0b3c1d3b8207aa0f9b194c24f0cf",
237
"type": "github"
238
},
239
"original": {
···
250
]
251
},
252
"locked": {
253
+
"lastModified": 1703113217,
254
+
"narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=",
255
"owner": "nix-community",
256
"repo": "home-manager",
257
+
"rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1",
258
"type": "github"
259
},
260
"original": {
···
270
]
271
},
272
"locked": {
273
+
"lastModified": 1751810233,
274
+
"narHash": "sha256-kllkNbIqQi3VplgTMeGzuh1t8Gk8TauvkTRt93Km+tQ=",
275
"owner": "nix-community",
276
"repo": "home-manager",
277
+
"rev": "9b0873b46c9f9e4b7aa01eb634952c206af53068",
278
"type": "github"
279
},
280
"original": {
···
284
"type": "github"
285
}
286
},
287
"nix-matrix-appservices": {
288
"inputs": {
289
"devshell": "devshell",
290
"flake-compat": "flake-compat_2",
291
"nixlib": "nixlib",
292
+
"nixpkgs": "nixpkgs"
293
},
294
"locked": {
295
"lastModified": 1683490239,
···
322
},
323
"nixos-hardware": {
324
"locked": {
325
+
"lastModified": 1723310128,
326
+
"narHash": "sha256-IiH8jG6PpR4h9TxSGMYh+2/gQiJW9MwehFvheSb5rPc=",
327
"owner": "NixOS",
328
"repo": "nixos-hardware",
329
+
"rev": "c54cf53e022b0b3c1d3b8207aa0f9b194c24f0cf",
330
"type": "github"
331
},
332
"original": {
···
338
},
339
"nixpkgs": {
340
"locked": {
341
"lastModified": 1662099760,
342
"narHash": "sha256-MdZLCTJPeHi/9fg6R9fiunyDwP3XHJqDd51zWWz9px0=",
343
"owner": "NixOS",
···
352
"type": "github"
353
}
354
},
355
+
"nixpkgs_2": {
356
"locked": {
357
+
"lastModified": 1755274400,
358
+
"narHash": "sha256-rTInmnp/xYrfcMZyFMH3kc8oko5zYfxsowaLv1LVobY=",
359
"owner": "nixos",
360
"repo": "nixpkgs",
361
+
"rev": "ad7196ae55c295f53a7d1ec39e4a06d922f3b899",
362
"type": "github"
363
},
364
"original": {
···
368
"type": "github"
369
}
370
},
371
"nur": {
372
"locked": {
373
+
"lastModified": 1724040334,
374
+
"narHash": "sha256-Ia4gRRmhFn4oJ4SJKJPDNPomsRRFWU+bqCK7yuiLW4E=",
375
"owner": "nix-community",
376
"repo": "NUR",
377
+
"rev": "24471a48600e18669d13d24c9640b9859357d2cf",
378
"type": "github"
379
},
380
"original": {
···
383
"type": "github"
384
}
385
},
386
"poonam": {
387
"inputs": {
388
"nixpkgs": [
···
390
]
391
},
392
"locked": {
393
+
"lastModified": 1756350023,
394
+
"narHash": "sha256-4S6EUvEFvOnwjSo/LqAVVuX2/JjAJ8gQFmQQ0DS4oXU=",
395
"ref": "main",
396
+
"rev": "a807111f9b20c501183516baf8082c4359aaaaa1",
397
+
"revCount": 1594,
398
"type": "git",
399
"url": "ssh://gitea@git.sealight.xyz/aynish/kitaab"
400
},
···
404
"url": "ssh://gitea@git.sealight.xyz/aynish/kitaab"
405
}
406
},
407
"root": {
408
"inputs": {
409
"agenix": "agenix",
410
"basant": "basant",
411
"deploy-rs": "deploy-rs",
412
"disko": "disko",
413
"grasp": "grasp",
414
"hardware": "hardware",
415
"home-manager": "home-manager_2",
416
"nix-matrix-appservices": "nix-matrix-appservices",
417
"nixos-hardware": "nixos-hardware",
418
+
"nixpkgs": "nixpkgs_2",
419
"nur": "nur",
420
"poonam": "poonam",
421
"rust-overlay": "rust-overlay",
422
"tidalcycles": "tidalcycles",
423
"unstable": "unstable",
424
"vimwikicli": "vimwikicli"
···
426
},
427
"rust-overlay": {
428
"inputs": {
429
"nixpkgs": [
430
"nixpkgs"
431
]
432
},
433
"locked": {
434
+
"lastModified": 1724034091,
435
+
"narHash": "sha256-b1g7w0sw+MDAhUAeCoX1vlTghsqcDZkxr+k9OZmxPa8=",
436
"owner": "oxalica",
437
"repo": "rust-overlay",
438
+
"rev": "c7d36e0947826e0751a5214ffe82533fbc909bc0",
439
"type": "github"
440
},
441
"original": {
···
444
"type": "github"
445
}
446
},
447
"superdirt-src": {
448
"flake": false,
449
"locked": {
450
+
"lastModified": 1697377840,
451
+
"narHash": "sha256-9qU9CHYAXbN1IE3xXDqGipuroifVaSVXj3c/cDfwM80=",
452
"owner": "musikinformatik",
453
"repo": "superdirt",
454
+
"rev": "c7f32998572984705d340e7c1b9ed9ad998a39b6",
455
"type": "github"
456
},
457
"original": {
458
"owner": "musikinformatik",
459
"repo": "superdirt",
460
"type": "github"
461
}
···
490
"type": "github"
491
}
492
},
493
"tidal-src": {
494
"flake": false,
495
"locked": {
496
+
"lastModified": 1712519522,
497
+
"narHash": "sha256-LbvxQmVxHElidCgvt+w0g1k+QQbNLebK46vtRCgsLeQ=",
498
"owner": "tidalcycles",
499
"repo": "tidal",
500
+
"rev": "88f09edf6bef2228d5f530dea872b08a9d803066",
501
"type": "github"
502
},
503
"original": {
504
"owner": "tidalcycles",
505
+
"ref": "v1.9.5",
506
"repo": "tidal",
507
"type": "github"
508
}
···
515
],
516
"superdirt-src": "superdirt-src",
517
"tidal-src": "tidal-src",
518
"vim-tidal-src": "vim-tidal-src",
519
"vowel-src": "vowel-src"
520
},
521
"locked": {
522
+
"lastModified": 1723223284,
523
+
"narHash": "sha256-NAT+g5nsaJZkpR0sCZjerd1xx233ZUdRH3ZWwZhzq/c=",
524
"owner": "mitchmindtree",
525
"repo": "tidalcycles.nix",
526
+
"rev": "82f3e8e8d02eb9f0c9dfe9ab3773b825c6bc1982",
527
"type": "github"
528
},
529
"original": {
···
532
"type": "github"
533
}
534
},
535
"unstable": {
536
"locked": {
537
+
"lastModified": 1752687322,
538
+
"narHash": "sha256-RKwfXA4OZROjBTQAl9WOZQFm7L8Bo93FQwSJpAiSRvo=",
539
"owner": "nixos",
540
"repo": "nixpkgs",
541
+
"rev": "6e987485eb2c77e5dcc5af4e3c70843711ef9251",
542
"type": "github"
543
},
544
"original": {
···
550
},
551
"utils": {
552
"inputs": {
553
+
"systems": "systems_2"
554
},
555
"locked": {
556
"lastModified": 1701680307,
···
566
"type": "github"
567
}
568
},
569
"vim-tidal-src": {
570
"flake": false,
571
"locked": {
572
+
"lastModified": 1685703852,
573
+
"narHash": "sha256-8gyk17YLeKpLpz3LRtxiwbpsIbZka9bb63nK5/9IUoA=",
574
"owner": "tidalcycles",
575
"repo": "vim-tidal",
576
+
"rev": "e440fe5bdfe07f805e21e6872099685d38e8b761",
577
"type": "github"
578
},
579
"original": {
580
"owner": "tidalcycles",
581
"repo": "vim-tidal",
582
"type": "github"
583
}
···
615
},
616
"original": {
617
"owner": "supercollider-quarks",
618
"repo": "vowel",
619
"type": "github"
620
}
+76
-176
flake.nix
+76
-176
flake.nix
···
1
{
2
-
description = "Your new nix config";
3
4
inputs = {
5
# Nixpkgs
6
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
7
unstable.url = "github:nixos/nixpkgs/nixos-unstable";
8
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
9
10
# Home manager
11
home-manager.url = "github:nix-community/home-manager/release-25.05";
···
24
poonam.url = "git+ssh://gitea@git.sealight.xyz/aynish/kitaab?ref=main";
25
poonam.inputs.nixpkgs.follows = "nixpkgs";
26
basant.url = "git+ssh://gitea@git.sealight.xyz/aynish/basant?ref=main";
27
-
vimwikicli.url = "git+ssh://gitea@git.sealight.xyz/aynish/vimwiki-cli?ref=main";
28
basant.inputs.nixpkgs.follows = "nixpkgs";
29
basant.inputs.poonam.follows = "poonam";
30
vimwikicli.inputs.nixpkgs.follows = "nixpkgs";
···
34
# Matrix
35
nix-matrix-appservices.url = "gitlab:coffeetables/nix-matrix-appservices";
36
37
-
# OSX
38
-
darwin = {
39
-
url = "github:nix-darwin/nix-darwin/nix-darwin-25.05";
40
-
inputs.nixpkgs.follows = "nixpkgs";
41
-
};
42
-
nix-homebrew = {
43
-
url = "github:zhaofengli-wip/nix-homebrew";
44
-
};
45
-
homebrew-bundle = {
46
-
url = "github:homebrew/homebrew-bundle";
47
-
flake = false;
48
-
};
49
-
homebrew-core = {
50
-
url = "github:homebrew/homebrew-core";
51
-
flake = false;
52
-
};
53
-
homebrew-cask = {
54
-
url = "github:homebrew/homebrew-cask";
55
-
flake = false;
56
-
};
57
-
58
-
# Sourcegraph
59
-
sourcegraph-src-cli-cask = {
60
-
url = "github:sourcegraph/homebrew-src-cli";
61
-
flake = false;
62
-
};
63
-
sg-nvim.url = "github:sourcegraph/sg.nvim";
64
-
65
# Others
66
nur.url = "github:nix-community/NUR";
67
rust-overlay = {
···
79
# muneem.inputs.nixpkgs.follows = "nixpkgs";
80
};
81
82
-
outputs =
83
-
{ self
84
-
, nixpkgs
85
-
, unstable
86
-
, nixos-hardware
87
-
, home-manager
88
-
, deploy-rs
89
-
, agenix
90
-
, disko
91
-
, basant
92
-
, grasp
93
-
, nix-matrix-appservices
94
-
, nur
95
-
, tidalcycles
96
-
, rust-overlay
97
-
, vimwikicli
98
-
, darwin
99
-
, nix-homebrew
100
-
, homebrew-bundle
101
-
, homebrew-core
102
-
, homebrew-cask
103
-
, sourcegraph-src-cli-cask
104
-
, sg-nvim
105
-
, ...
106
-
}@inputs:
107
let
108
forAllSystems = nixpkgs.lib.genAttrs [
109
"aarch64-linux"
···
116
# We already have these in scope
117
unstable = unstable.legacyPackages.${prev.system};
118
deploy = deploy-rs.packages.${prev.system}.deploy-rs;
119
-
sg-nvim = sg-nvim.packages.${prev.system}.default;
120
};
121
vimwikiOverlay = final: prev: {
122
vimwiki-cli = vimwikicli.packages.${prev.system}.vimwiki-cli;
123
};
124
125
-
nixpkgsFor = forAllSystems (system: import nixpkgs {
126
-
inherit system;
127
-
# This doesn't work...
128
-
# on darwin, I need to export ALLOW_NIXPKGS_UNFREE=1
129
-
# and pass --impure (have to manually copy the `nrd` command, it gets passed to the cd)
130
-
config = {
131
-
allowUnfree = true;
132
-
allowUnfreePredicate = _: true;
133
-
};
134
-
# config.allowUnfree = true;
135
-
#config.allowUnfreePredicate = pkg: builtins.elem (nixpkgs.lib.getName pkg) [
136
-
# "ripcord"
137
-
# "VCV-Rack"
138
-
# "SunVox"
139
-
# "renoise"
140
-
# "graphite-cli"
141
-
# "claude-code"
142
-
#];
143
-
# config.permittedInsecurePackages = [
144
-
# "python3.10-django-3.1.14" # Needed for archivebox deployments on curve
145
-
# # Check when archive box updates it's dependeny
146
-
# ];
147
-
overlays = [
148
-
rust-overlay.overlays.default
149
-
tidalcycles.overlays.default
150
-
agenix.overlays.default
151
-
nur.overlay
152
-
nix-matrix-appservices.overlay
153
-
unstableOverlay
154
-
# TODO Not available publically
155
-
# vimwikiOverlay
156
-
self.overlays.additions
157
-
self.overlays.modifications
158
-
];
159
-
});
160
161
# for when space matters
162
-
litePkgsFor = forAllSystems (system: import nixpkgs {
163
-
inherit system;
164
-
# config.permittedInsecurePackages = [
165
-
# "forgejo-1.19.4-0" # Needed for archivebox deployments on curve
166
-
# # Check when archive box updates it's dependeny
167
-
# ];
168
-
overlays = [
169
-
agenix.overlays.default
170
-
tidalcycles.overlays.default # needed for nvim which comes pre-installed lol
171
-
];
172
-
});
173
-
174
-
darwinSystems = [ "aarch64-darwin" "x86_64-darwin" ];
175
-
in
176
-
{
177
packages = forAllSystems (system:
178
let pkgs = nixpkgsFor.${system};
179
-
in import ./pkgs { pkgs = pkgs; }
180
-
);
181
-
182
# Devshell for bootstrapping
183
# Acessible through 'nix develop' or 'nix-shell' (legacy)
184
devShells = forAllSystems (system:
185
let pkgs = nixpkgsFor.${system};
186
-
in import ./shell.nix { pkgs = pkgs; }
187
-
);
188
189
# Your custom packages and modifications, exported as overlays
190
overlays = import ./overlays;
···
195
# These are usually stuff you would upstream into home-manager
196
homeManagerModules = import ./modules/home-manager;
197
198
-
darwinConfigurations = {
199
-
"Anishs-MacBook-Pro" = darwin.lib.darwinSystem rec {
200
-
system = "aarch64-darwin";
201
-
pkgs = nixpkgsFor.${system};
202
-
specialArgs = { inherit inputs self; };
203
-
modules = [
204
-
./hosts/darwin
205
-
home-manager.darwinModules.home-manager
206
-
agenix.darwinModules.default
207
-
# nix-homebrew.darwinModules.nix-homebrew
208
-
{
209
-
users.users.anishlakhwara.home = "/Users/anishlakhwara";
210
-
home-manager = {
211
-
users.anishlakhwara = import ./home/darwin;
212
-
useGlobalPkgs = true;
213
-
useUserPackages = true;
214
-
};
215
-
# nix-homebrew = {
216
-
# user = "anishlakhwara";
217
-
# enable = true;
218
-
# # taps = {
219
-
# # "homebrew/homebrew-core" = homebrew-core;
220
-
# # "homebrew/homebrew-cask" = homebrew-cask;
221
-
# # "homebrew/homebrew-bundle" = homebrew-bundle;
222
-
# # "sourcegraph/homebrew-src-cli" = sourcegraph-src-cli-cask;
223
-
# # };
224
-
# mutableTaps = true;
225
-
# autoMigrate = true;
226
-
# };
227
-
}
228
-
];
229
-
};
230
-
};
231
-
232
# NixOS configuration entrypoint
233
nixosConfigurations = {
234
curve = nixpkgs.lib.nixosSystem rec {
···
240
agenix.nixosModules.age
241
self.nixosModules.backup
242
self.nixosModules.wireguard
243
nixos-hardware.nixosModules.lenovo-thinkpad-x270
244
home-manager.nixosModules.home-manager
245
{
···
261
agenix.nixosModules.age
262
self.nixosModules.backup
263
self.nixosModules.wireguard
264
# self.nixosModules.microbin
265
disko.nixosModules.disko
266
];
267
};
268
···
285
];
286
};
287
288
-
cube = nixpkgs.lib.nixosSystem rec {
289
-
specialArgs = { inherit inputs self; };
290
-
system = "x86_64-linux";
291
-
pkgs = litePkgsFor.${system};
292
-
modules = [
293
-
./hosts/cube
294
-
agenix.nixosModules.age
295
-
self.nixosModules.backup
296
-
self.nixosModules.wireguard
297
-
basant.nixosModule
298
-
];
299
-
};
300
-
301
box = nixpkgs.lib.nixosSystem rec {
302
specialArgs = { inherit inputs self; };
303
system = "x86_64-linux";
···
308
self.nixosModules.backup
309
self.nixosModules.wireguard
310
self.nixosModules.gonic
311
self.nixosModules.wallabag
312
self.nixosModules.ulogger-server
313
grasp.nixosModule
···
316
nix.registry.nixpkgs.flake = nixpkgs;
317
home-manager.useGlobalPkgs = true;
318
home-manager.useUserPackages = true;
319
-
home-manager.users.anish = import ./home/core;
320
}
321
];
322
};
···
326
# Available through 'home-manager --flake .#your-username@your-hostname'
327
homeConfigurations = {
328
"anish@work" = home-manager.lib.homeManagerConfiguration {
329
-
pkgs = nixpkgsFor."x86_64-linux"; # Home-manager requires 'pkgs' instance
330
extraSpecialArgs = { inherit inputs; };
331
-
modules = [
332
-
./home/core.nix
333
-
./home/profiles/firefox
334
-
];
335
};
336
};
337
···
340
hostname = "mossnet.lan";
341
autoRollback = false;
342
magicRollback = false;
343
profiles.system = {
344
user = "root";
345
-
path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.box;
346
};
347
};
348
lituus = {
349
hostname = "sealight.xyz";
350
-
# autoRollback = false;
351
profiles.system = {
352
user = "root";
353
-
path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.lituus;
354
};
355
};
356
helix = {
···
359
magicRollback = false;
360
profiles.system = {
361
user = "root";
362
-
path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.helix;
363
-
};
364
-
};
365
-
cube = {
366
-
hostname = "lakhwara.com";
367
-
profiles.system = {
368
-
user = "root";
369
-
path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.cube;
370
};
371
};
372
};
373
374
-
checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib;
375
};
376
}
···
1
{
2
+
description = "Sealight NixOS Config";
3
4
inputs = {
5
# Nixpkgs
6
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
7
unstable.url = "github:nixos/nixpkgs/nixos-unstable";
8
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
9
+
10
+
# ngipkgs.url = "github:Chickensoupwithrice/ngipkgs?ref=aynish/atomic-server-module";
11
+
# ngipkgs-local.url = "path:/home/anish/usr/ngipkgs";
12
13
# Home manager
14
home-manager.url = "github:nix-community/home-manager/release-25.05";
···
27
poonam.url = "git+ssh://gitea@git.sealight.xyz/aynish/kitaab?ref=main";
28
poonam.inputs.nixpkgs.follows = "nixpkgs";
29
basant.url = "git+ssh://gitea@git.sealight.xyz/aynish/basant?ref=main";
30
+
vimwikicli.url =
31
+
"git+ssh://gitea@git.sealight.xyz/aynish/vimwiki-cli?ref=main";
32
basant.inputs.nixpkgs.follows = "nixpkgs";
33
basant.inputs.poonam.follows = "poonam";
34
vimwikicli.inputs.nixpkgs.follows = "nixpkgs";
···
38
# Matrix
39
nix-matrix-appservices.url = "gitlab:coffeetables/nix-matrix-appservices";
40
41
# Others
42
nur.url = "github:nix-community/NUR";
43
rust-overlay = {
···
55
# muneem.inputs.nixpkgs.follows = "nixpkgs";
56
};
57
58
+
outputs = { self, nixpkgs, unstable, nixos-hardware, home-manager, deploy-rs
59
+
, agenix, disko, basant, grasp, nix-matrix-appservices, nur, tidalcycles
60
+
, rust-overlay, vimwikicli, ... }@inputs:
61
let
62
forAllSystems = nixpkgs.lib.genAttrs [
63
"aarch64-linux"
···
70
# We already have these in scope
71
unstable = unstable.legacyPackages.${prev.system};
72
deploy = deploy-rs.packages.${prev.system}.deploy-rs;
73
};
74
vimwikiOverlay = final: prev: {
75
vimwiki-cli = vimwikicli.packages.${prev.system}.vimwiki-cli;
76
};
77
78
+
nixpkgsFor = forAllSystems (system:
79
+
import nixpkgs {
80
+
inherit system;
81
+
config = {
82
+
permittedInsecurePackages = [
83
+
"olm-3.2.16"
84
+
];
85
+
allowUnfreePredicate = pkg:
86
+
builtins.elem (nixpkgs.lib.getName pkg) [
87
+
"ripcord"
88
+
"vcv-rack"
89
+
"SunVox"
90
+
"renoise"
91
+
];
92
+
};
93
+
overlays = [
94
+
rust-overlay.overlays.default
95
+
tidalcycles.overlays.default
96
+
agenix.overlays.default
97
+
nur.overlay
98
+
# nix-matrix-appservices.overlay # nixpkgs has these packages and newer ones at that
99
+
unstableOverlay
100
+
vimwikiOverlay
101
+
self.overlays.additions
102
+
self.overlays.modifications
103
+
];
104
+
});
105
106
# for when space matters
107
+
litePkgsFor = forAllSystems (system:
108
+
import nixpkgs {
109
+
inherit system;
110
+
# config.permittedInsecurePackages = [
111
+
# "forgejo-1.19.4-0" # Needed for archivebox deployments on curve
112
+
# # Check when archive box updates it's dependeny
113
+
# ];
114
+
overlays = [
115
+
agenix.overlays.default
116
+
self.overlays.additions
117
+
self.overlays.modifications
118
+
tidalcycles.overlays.default # needed for nvim which comes pre-installed lol
119
+
];
120
+
});
121
+
in {
122
+
# Your custom packages
123
+
# Acessible through 'nix build', 'nix shell', etc
124
packages = forAllSystems (system:
125
let pkgs = nixpkgsFor.${system};
126
+
in import ./pkgs { pkgs = pkgs; });
127
# Devshell for bootstrapping
128
# Acessible through 'nix develop' or 'nix-shell' (legacy)
129
devShells = forAllSystems (system:
130
let pkgs = nixpkgsFor.${system};
131
+
in import ./shell.nix { pkgs = pkgs; });
132
133
# Your custom packages and modifications, exported as overlays
134
overlays = import ./overlays;
···
139
# These are usually stuff you would upstream into home-manager
140
homeManagerModules = import ./modules/home-manager;
141
142
# NixOS configuration entrypoint
143
nixosConfigurations = {
144
curve = nixpkgs.lib.nixosSystem rec {
···
150
agenix.nixosModules.age
151
self.nixosModules.backup
152
self.nixosModules.wireguard
153
+
self.nixosModules.wallabag
154
nixos-hardware.nixosModules.lenovo-thinkpad-x270
155
home-manager.nixosModules.home-manager
156
{
···
172
agenix.nixosModules.age
173
self.nixosModules.backup
174
self.nixosModules.wireguard
175
+
basant.nixosModule
176
# self.nixosModules.microbin
177
disko.nixosModules.disko
178
+
{
179
+
nixpkgs.flake.setNixPath = false;
180
+
nixpkgs.flake.setFlakeRegistry = false;
181
+
}
182
];
183
};
184
···
201
];
202
};
203
204
box = nixpkgs.lib.nixosSystem rec {
205
specialArgs = { inherit inputs self; };
206
system = "x86_64-linux";
···
211
self.nixosModules.backup
212
self.nixosModules.wireguard
213
self.nixosModules.gonic
214
+
self.nixosModules.gpodder2go
215
self.nixosModules.wallabag
216
self.nixosModules.ulogger-server
217
grasp.nixosModule
···
220
nix.registry.nixpkgs.flake = nixpkgs;
221
home-manager.useGlobalPkgs = true;
222
home-manager.useUserPackages = true;
223
+
home-manager.users.anish = import ./home/dev;
224
}
225
];
226
};
···
230
# Available through 'home-manager --flake .#your-username@your-hostname'
231
homeConfigurations = {
232
"anish@work" = home-manager.lib.homeManagerConfiguration {
233
+
pkgs =
234
+
nixpkgsFor."x86_64-linux"; # Home-manager requires 'pkgs' instance
235
extraSpecialArgs = { inherit inputs; };
236
+
modules = [ ./home/core.nix ./home/profiles/firefox ];
237
};
238
};
239
···
242
hostname = "mossnet.lan";
243
autoRollback = false;
244
magicRollback = false;
245
+
remoteBuild = true;
246
profiles.system = {
247
user = "root";
248
+
path = deploy-rs.lib.x86_64-linux.activate.nixos
249
+
self.nixosConfigurations.box;
250
};
251
};
252
lituus = {
253
hostname = "sealight.xyz";
254
+
autoRollback = false;
255
profiles.system = {
256
user = "root";
257
+
path = deploy-rs.lib.x86_64-linux.activate.nixos
258
+
self.nixosConfigurations.lituus;
259
};
260
};
261
helix = {
···
264
magicRollback = false;
265
profiles.system = {
266
user = "root";
267
+
path = deploy-rs.lib.x86_64-linux.activate.nixos
268
+
self.nixosConfigurations.helix;
269
};
270
};
271
};
272
273
+
# checks = builtins.mapAttrs
274
+
# (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib;
275
};
276
}
+1
-2
home/core/default.nix
+1
-2
home/core/default.nix
-156
home/darwin/aerospace/config.toml
-156
home/darwin/aerospace/config.toml
···
1
-
# You can use it to add commands that run after login to macOS user session.
2
-
# 'start-at-login' needs to be 'true' for 'after-login-command' to work
3
-
# Available commands: https://nikitabobko.github.io/AeroSpace/commands
4
-
after-login-command = []
5
-
6
-
# You can use it to add commands that run after AeroSpace startup.
7
-
# 'after-startup-command' is run after 'after-login-command'
8
-
# Available commands : https://nikitabobko.github.io/AeroSpace/commands
9
-
after-startup-command = []
10
-
11
-
# Start AeroSpace at login
12
-
start-at-login = true
13
-
14
-
# Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization
15
-
enable-normalization-flatten-containers = true
16
-
enable-normalization-opposite-orientation-for-nested-containers = true
17
-
18
-
# See: https://nikitabobko.github.io/AeroSpace/guide#layouts
19
-
# The 'accordion-padding' specifies the size of accordion padding
20
-
# You can set 0 to disable the padding feature
21
-
accordion-padding = 10
22
-
23
-
# Possible values: tiles|accordion
24
-
default-root-container-layout = 'tiles'
25
-
26
-
# Possible values: horizontal|vertical|auto
27
-
# 'auto' means: wide monitor (anything wider than high) gets horizontal orientation,
28
-
# tall monitor (anything higher than wide) gets vertical orientation
29
-
default-root-container-orientation = 'auto'
30
-
31
-
# Mouse follows focus when focused monitor changes
32
-
# Drop it from your config, if you don't like this behavior
33
-
# See https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks
34
-
# See https://nikitabobko.github.io/AeroSpace/commands#move-mouse
35
-
# Fallback value (if you omit the key): on-focused-monitor-changed = []
36
-
on-focused-monitor-changed = ['move-mouse monitor-lazy-center']
37
-
38
-
# You can effectively turn off macOS "Hide application" (cmd-h) feature by toggling this flag
39
-
# Useful if you don't use this macOS feature, but accidentally hit cmd-h or cmd-alt-h key
40
-
# Also see: https://nikitabobko.github.io/AeroSpace/goodies#disable-hide-app
41
-
automatically-unhide-macos-hidden-apps = true
42
-
43
-
# Possible values: (qwerty|dvorak)
44
-
# See https://nikitabobko.github.io/AeroSpace/guide#key-mapping
45
-
[key-mapping]
46
-
preset = 'dvorak'
47
-
48
-
# Gaps between windows (inner-*) and between monitor edges (outer-*).
49
-
# Possible values:
50
-
# - Constant: gaps.outer.top = 8
51
-
# - Per monitor: gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24]
52
-
# In this example, 24 is a default value when there is no match.
53
-
# Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'.
54
-
# See: https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors
55
-
[gaps]
56
-
inner.horizontal = 0
57
-
inner.vertical = 0
58
-
outer.left = 0
59
-
outer.bottom = 0
60
-
outer.top = 0
61
-
outer.right = 0
62
-
63
-
# 'main' binding mode declaration
64
-
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
65
-
# 'main' binding mode must be always presented
66
-
# Fallback value (if you omit the key): mode.main.binding = {}
67
-
[mode.main.binding]
68
-
69
-
# All possible keys:
70
-
# - Letters. a, b, c, ..., z
71
-
# - Numbers. 0, 1, 2, ..., 9
72
-
# - Keypad numbers. keypad0, keypad1, keypad2, ..., keypad9
73
-
# - F-keys. f1, f2, ..., f20
74
-
# - Special keys. minus, equal, period, comma, slash, backslash, quote, semicolon, backtick,
75
-
# leftSquareBracket, rightSquareBracket, space, enter, esc, backspace, tab
76
-
# - Keypad special. keypadClear, keypadDecimalMark, keypadDivide, keypadEnter, keypadEqual,
77
-
# keypadMinus, keypadMultiply, keypadPlus
78
-
# - Arrows. left, down, up, right
79
-
80
-
# All possible modifiers: cmd, alt, ctrl, shift
81
-
82
-
# All possible commands: https://nikitabobko.github.io/AeroSpace/commands
83
-
84
-
# See: https://nikitabobko.github.io/AeroSpace/commands#exec-and-forget
85
-
# You can uncomment the following lines to open up terminal with alt + enter shortcut (like in i3)
86
-
alt-enter = 'exec-and-forget open -n /System/Applications/Utilities/Kitty.app'
87
-
88
-
# See: https://nikitabobko.github.io/AeroSpace/commands#layout
89
-
alt-slash = 'layout tiles horizontal vertical'
90
-
alt-comma = 'layout accordion horizontal vertical'
91
-
92
-
# See: https://nikitabobko.github.io/AeroSpace/commands#focus
93
-
alt-h = 'focus left'
94
-
alt-j = 'focus down'
95
-
alt-k = 'focus up'
96
-
alt-l = 'focus right'
97
-
98
-
# See: https://nikitabobko.github.io/AeroSpace/commands#move
99
-
alt-shift-h = 'move left'
100
-
alt-shift-j = 'move down'
101
-
alt-shift-k = 'move up'
102
-
alt-shift-l = 'move right'
103
-
104
-
# See: https://nikitabobko.github.io/AeroSpace/commands#resize
105
-
alt-shift-minus = 'resize smart -50'
106
-
alt-shift-equal = 'resize smart +50'
107
-
108
-
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace
109
-
alt-1 = 'workspace 1'
110
-
alt-2 = 'workspace 2'
111
-
alt-3 = 'workspace 3'
112
-
alt-4 = 'workspace 4'
113
-
alt-5 = 'workspace 5'
114
-
alt-6 = 'workspace 6'
115
-
alt-7 = 'workspace 7'
116
-
alt-8 = 'workspace 8'
117
-
alt-9 = 'workspace 9'
118
-
119
-
# See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace
120
-
alt-shift-1 = 'move-node-to-workspace 1'
121
-
alt-shift-2 = 'move-node-to-workspace 2'
122
-
alt-shift-3 = 'move-node-to-workspace 3'
123
-
alt-shift-4 = 'move-node-to-workspace 4'
124
-
alt-shift-5 = 'move-node-to-workspace 5'
125
-
alt-shift-6 = 'move-node-to-workspace 6'
126
-
alt-shift-7 = 'move-node-to-workspace 7'
127
-
alt-shift-8 = 'move-node-to-workspace 8'
128
-
alt-shift-9 = 'move-node-to-workspace 9'
129
-
130
-
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace-back-and-forth
131
-
alt-tab = 'workspace-back-and-forth'
132
-
# See: https://nikitabobko.github.io/AeroSpace/commands#move-workspace-to-monitor
133
-
alt-shift-tab = 'move-workspace-to-monitor --wrap-around next'
134
-
135
-
# See: https://nikitabobko.github.io/AeroSpace/commands#mode
136
-
alt-shift-semicolon = 'mode service'
137
-
138
-
# 'service' binding mode declaration.
139
-
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
140
-
[mode.service.binding]
141
-
esc = ['reload-config', 'mode main']
142
-
r = ['flatten-workspace-tree', 'mode main'] # reset layout
143
-
f = ['layout floating tiling', 'mode main'] # Toggle between floating and tiling layout
144
-
backspace = ['close-all-windows-but-current', 'mode main']
145
-
146
-
# sticky is not yet supported https://github.com/nikitabobko/AeroSpace/issues/2
147
-
#s = ['layout sticky tiling', 'mode main']
148
-
149
-
alt-shift-h = ['join-with left', 'mode main']
150
-
alt-shift-j = ['join-with down', 'mode main']
151
-
alt-shift-k = ['join-with up', 'mode main']
152
-
alt-shift-l = ['join-with right', 'mode main']
153
-
154
-
down = 'volume down'
155
-
up = 'volume up'
156
-
shift-down = ['volume set 0', 'mode main']
···
-34
home/darwin/default.nix
-34
home/darwin/default.nix
···
1
-
{ self, pkgs, ... }:
2
-
{
3
-
imports = [
4
-
../profiles/nvim
5
-
../profiles/cli
6
-
../profiles/direnv
7
-
../profiles/git
8
-
../profiles/task
9
-
../profiles/kitty
10
-
# ../profiles/firefox
11
-
];
12
-
13
-
home.username = "anishlakhwara";
14
-
home.homeDirectory = "/Users/anishlakhwara";
15
-
home.stateVersion = "22.05";
16
-
17
-
programs.zsh.initContent = ''
18
-
PATH=/Users/anishlakhwara/.sourcegraph/bin:/Users/anishlakhwara/.sourcegraph/sg.zsh_autocomplete:/Users/anishlakhwara/google-cloud-sdk/bin:/Users/anishlakhwara/google-cloud-sdk/completion.zsh.inc:/Users/anishlakhwara/google-cloud-sdk/path.zsh.inc:/Users/anishlakhwara/.sg:/opt/homebrew/bin:$PATH
19
-
'';
20
-
21
-
# Managing sketchybar plugins from home-manager
22
-
home.file = {
23
-
".config/sketchybar" = {
24
-
source = ./sketchybar;
25
-
recursive = true;
26
-
};
27
-
".config/aerospace" = {
28
-
source = ./aerospace;
29
-
};
30
-
".tmux.conf" = {
31
-
source = ./tmux/tmuxrc;
32
-
};
33
-
};
34
-
}
···
-20
home/darwin/sketchybar/items/battery.sh
-20
home/darwin/sketchybar/items/battery.sh
···
1
-
#!/usr/bin/env bash
2
-
3
-
COLOR="$CYAN"
4
-
5
-
sketchybar --add item battery right \
6
-
--set battery \
7
-
update_freq=60 \
8
-
icon.color="$COLOR" \
9
-
icon.padding_left=10 \
10
-
label.padding_right=10 \
11
-
label.color="$COLOR" \
12
-
background.height=26 \
13
-
background.corner_radius="$CORNER_RADIUS" \
14
-
background.padding_right=5 \
15
-
background.border_width="$BORDER_WIDTH" \
16
-
background.border_color="$COLOR" \
17
-
background.color="$BAR_COLOR" \
18
-
background.drawing=on \
19
-
script="$PLUGIN_DIR/power.sh" \
20
-
--subscribe battery power_source_change
···
-18
home/darwin/sketchybar/items/calendar.sh
-18
home/darwin/sketchybar/items/calendar.sh
···
1
-
#!/usr/bin/env bash
2
-
3
-
COLOR="$BLUE"
4
-
5
-
sketchybar --add item calendar right \
6
-
--set calendar update_freq=15 \
7
-
icon.color="$COLOR" \
8
-
icon.padding_left=10 \
9
-
label.color="$COLOR" \
10
-
label.padding_right=10 \
11
-
background.height=26 \
12
-
background.corner_radius="$CORNER_RADIUS" \
13
-
background.padding_right=5 \
14
-
background.border_width="$BORDER_WIDTH" \
15
-
background.border_color="$COLOR" \
16
-
background.color="$BAR_COLOR" \
17
-
background.drawing=on \
18
-
script="$PLUGIN_DIR/calendar.sh"
···
-21
home/darwin/sketchybar/items/clock.sh
-21
home/darwin/sketchybar/items/clock.sh
···
1
-
#!/usr/bin/env bash
2
-
3
-
COLOR="$MAGENTA"
4
-
5
-
sketchybar --add item clock right \
6
-
--set clock update_freq=60 \
7
-
icon.padding_left=10 \
8
-
icon.color="$COLOR" \
9
-
icon="๏ " \
10
-
label.color="$COLOR" \
11
-
label.padding_right=5 \
12
-
label.width=43 \
13
-
align=center \
14
-
background.height=26 \
15
-
background.corner_radius="$CORNER_RADIUS" \
16
-
background.padding_right=2 \
17
-
background.border_width="$BORDER_WIDTH" \
18
-
background.border_color="$COLOR" \
19
-
background.color="$BAR_COLOR" \
20
-
background.drawing=on \
21
-
script="$PLUGIN_DIR/clock.sh"
···
-19
home/darwin/sketchybar/items/cpu.sh
-19
home/darwin/sketchybar/items/cpu.sh
···
1
-
#!/usr/bin/env bash
2
-
3
-
COLOR="$YELLOW"
4
-
5
-
sketchybar --add item cpu right \
6
-
--set cpu \
7
-
update_freq=3 \
8
-
icon.color="$COLOR" \
9
-
icon.padding_left=10 \
10
-
label.color="$COLOR" \
11
-
label.padding_right=10 \
12
-
background.height=26 \
13
-
background.corner_radius="$CORNER_RADIUS" \
14
-
background.padding_right=5 \
15
-
background.border_width="$BORDER_WIDTH" \
16
-
background.border_color="$COLOR" \
17
-
background.color="$BAR_COLOR" \
18
-
background.drawing=on \
19
-
script="$PLUGIN_DIR/cpu.sh"
···
-20
home/darwin/sketchybar/items/front_app.sh
-20
home/darwin/sketchybar/items/front_app.sh
···
1
-
#!/usr/bin/env bash
2
-
3
-
COLOR="$WHITE"
4
-
5
-
sketchybar \
6
-
--add item front_app left \
7
-
--set front_app script="$PLUGIN_DIR/front_app.sh" \
8
-
icon.drawing=off \
9
-
background.height=26 \
10
-
background.padding_left=0 \
11
-
background.padding_right=10 \
12
-
background.border_width="$BORDER_WIDTH" \
13
-
background.border_color="$COLOR" \
14
-
background.corner_radius="$CORNER_RADIUS" \
15
-
background.color="$BAR_COLOR" \
16
-
label.color="$COLOR" \
17
-
label.padding_left=10 \
18
-
label.padding_right=10 \
19
-
associated_display=active \
20
-
--subscribe front_app front_app_switched
···
-44
home/darwin/sketchybar/items/spaces.sh
-44
home/darwin/sketchybar/items/spaces.sh
···
1
-
#!/usr/bin/env bash
2
-
3
-
SPACE_ICONS=("1" "2" "3" "4" "5" "6" "7" "8" "9" "10")
4
-
5
-
sketchybar --add item spacer.1 left \
6
-
--set spacer.1 background.drawing=off \
7
-
label.drawing=off \
8
-
icon.drawing=off \
9
-
width=10
10
-
11
-
for i in {0..9}; do
12
-
sid=$((i + 1))
13
-
sketchybar --add space space.$sid left \
14
-
--set space.$sid associated_space=$sid \
15
-
label.drawing=off \
16
-
icon.padding_left=10 \
17
-
icon.padding_right=10 \
18
-
background.padding_left=-5 \
19
-
background.padding_right=-5 \
20
-
script="$PLUGIN_DIR/space.sh"
21
-
done
22
-
23
-
sketchybar --add item spacer.2 left \
24
-
--set spacer.2 background.drawing=off \
25
-
label.drawing=off \
26
-
icon.drawing=off \
27
-
width=5
28
-
29
-
sketchybar --add bracket spaces '/space.*/' \
30
-
--set spaces background.border_width="$BORDER_WIDTH" \
31
-
background.border_color="$RED" \
32
-
background.corner_radius="$CORNER_RADIUS" \
33
-
background.color="$BAR_COLOR" \
34
-
background.height=26 \
35
-
background.drawing=on
36
-
37
-
sketchybar --add item separator left \
38
-
--set separator icon=๏ \
39
-
icon.font="$FONT:Regular:16.0" \
40
-
background.padding_left=26 \
41
-
background.padding_right=15 \
42
-
label.drawing=off \
43
-
associated_display=active \
44
-
icon.color="$YELLOW"
···
-23
home/darwin/sketchybar/items/spotify.sh
-23
home/darwin/sketchybar/items/spotify.sh
···
1
-
#!/usr/bin/env bash
2
-
3
-
COLOR="$ORANGE"
4
-
5
-
sketchybar --add item spotify q \
6
-
--set spotify \
7
-
scroll_texts=on \
8
-
icon=๓ฐ \
9
-
icon.color="$COLOR" \
10
-
icon.padding_left=10 \
11
-
background.color="$BAR_COLOR" \
12
-
background.height=26 \
13
-
background.corner_radius="$CORNER_RADIUS" \
14
-
background.border_width="$BORDER_WIDTH" \
15
-
background.border_color="$COLOR" \
16
-
background.padding_right=-5 \
17
-
background.drawing=on \
18
-
label.padding_right=10 \
19
-
label.max_chars=20 \
20
-
associated_display=active \
21
-
updates=on \
22
-
script="$PLUGIN_DIR/spotify.sh" \
23
-
--subscribe spotify media_change
···
-20
home/darwin/sketchybar/items/volume.sh
-20
home/darwin/sketchybar/items/volume.sh
···
1
-
#!/usr/bin/env bash
2
-
3
-
COLOR="$GREEN"
4
-
5
-
sketchybar \
6
-
--add item sound right \
7
-
--set sound \
8
-
icon.color="$COLOR" \
9
-
icon.padding_left=10 \
10
-
label.color="$COLOR" \
11
-
label.padding_right=10 \
12
-
background.height=26 \
13
-
background.corner_radius="$CORNER_RADIUS" \
14
-
background.padding_right=5 \
15
-
background.border_width="$BORDER_WIDTH" \
16
-
background.border_color="$COLOR" \
17
-
background.color="$BAR_COLOR" \
18
-
background.drawing=on \
19
-
script="$PLUGIN_DIR/sound.sh" \
20
-
--subscribe sound volume_change
···
-4
home/darwin/sketchybar/items/vpn.sh
-4
home/darwin/sketchybar/items/vpn.sh
-3
home/darwin/sketchybar/plugins/calendar.sh
-3
home/darwin/sketchybar/plugins/calendar.sh
-4
home/darwin/sketchybar/plugins/clock.sh
-4
home/darwin/sketchybar/plugins/clock.sh
-3
home/darwin/sketchybar/plugins/cpu.sh
-3
home/darwin/sketchybar/plugins/cpu.sh
-7
home/darwin/sketchybar/plugins/front_app.sh
-7
home/darwin/sketchybar/plugins/front_app.sh
-30
home/darwin/sketchybar/plugins/power.sh
-30
home/darwin/sketchybar/plugins/power.sh
···
1
-
#!/usr/bin/env bash
2
-
3
-
PERCENTAGE=$(pmset -g batt | grep -Eo "\d+%" | cut -d% -f1)
4
-
CHARGING=$(pmset -g batt | grep 'AC Power')
5
-
6
-
if [ "$PERCENTAGE" = "" ]; then
7
-
exit 0
8
-
fi
9
-
10
-
case ${PERCENTAGE} in
11
-
9[0-9] | 100)
12
-
ICON="๏ "
13
-
;;
14
-
[6-8][0-9])
15
-
ICON="๏ "
16
-
;;
17
-
[3-5][0-9])
18
-
ICON="๏ "
19
-
;;
20
-
[1-2][0-9])
21
-
ICON="๏ "
22
-
;;
23
-
*) ICON="๏ " ;;
24
-
esac
25
-
26
-
if [ "$CHARGING" != "" ]; then
27
-
ICON="๏ง"
28
-
fi
29
-
30
-
sketchybar --set "$NAME" icon="$ICON" label="${PERCENTAGE}% "
···
-20
home/darwin/sketchybar/plugins/sound.sh
-20
home/darwin/sketchybar/plugins/sound.sh
···
1
-
#!/usr/bin/env bash
2
-
3
-
VOLUME=$(osascript -e "output volume of (get volume settings)")
4
-
MUTED=$(osascript -e "output muted of (get volume settings)")
5
-
6
-
if [ "$MUTED" != "false" ]; then
7
-
ICON="๓ฐ "
8
-
VOLUME=0
9
-
else
10
-
case ${VOLUME} in
11
-
100) ICON="๏จ " ;;
12
-
[5-9]*) ICON="๏จ " ;;
13
-
[0-9]*) ICON="๏ง " ;;
14
-
*) ICON="๏ง " ;;
15
-
esac
16
-
fi
17
-
18
-
sketchybar -m \
19
-
--set "$NAME" icon=$ICON \
20
-
--set "$NAME" label="$VOLUME%"
···
-19
home/darwin/sketchybar/plugins/space.sh
-19
home/darwin/sketchybar/plugins/space.sh
···
1
-
#!/usr/bin/env bash
2
-
3
-
source "$HOME/.config/sketchybar/variables.sh" # Loads all defined colors
4
-
5
-
SPACE_ICONS=("๏ฉ " "๏ " "๓ฐบป " "๏ " "๎ " "6" "7" "8" "9" "10")
6
-
7
-
SPACE_CLICK_SCRIPT="yabai -m space --focus $SID 2>/dev/null"
8
-
9
-
if [ "$SELECTED" = "true" ]; then
10
-
sketchybar --animate tanh 5 --set "$NAME" \
11
-
icon.color="$RED" \
12
-
icon="${SPACE_ICONS[$SID - 1]}" \
13
-
click_script="$SPACE_CLICK_SCRIPT"
14
-
else
15
-
sketchybar --animate tanh 5 --set "$NAME" \
16
-
icon.color="$COMMENT" \
17
-
icon="${SPACE_ICONS[$SID - 1]}" \
18
-
click_script="$SPACE_CLICK_SCRIPT"
19
-
fi
···
-11
home/darwin/sketchybar/plugins/spotify.sh
-11
home/darwin/sketchybar/plugins/spotify.sh
···
1
-
#!/usr/bin/env bash
2
-
3
-
STATE="$(echo "$INFO" | jq -r '.state')"
4
-
APP="$(echo "$INFO" | jq -r '.app')"
5
-
6
-
if [ "$STATE" = "playing" ] && [ "$APP" == "Spotify" ]; then
7
-
MEDIA="$(echo "$INFO" | jq -r '.title + " - " + .artist')"
8
-
sketchybar --set "$NAME" label="$MEDIA" drawing=on
9
-
else
10
-
sketchybar --set "$NAME" drawing=off
11
-
fi
···
-16
home/darwin/sketchybar/plugins/vpn.sh
-16
home/darwin/sketchybar/plugins/vpn.sh
···
1
-
#!/bin/bash
2
-
3
-
### You need to edit sudoers file to run wg-quick without password
4
-
5
-
# %admin ALL = (ALL) NOPASSWD: /nix/store/s2qw0sxax8pckbzmyw6wrarahmx65bq9-wireguard-tools-1.0.20210914/bin/wg-quick
6
-
7
-
WG_PIDFILE="/var/run/wireguard/wg0.name"
8
-
9
-
if [ -f $WG_PIDFILE ]; then
10
-
sketchybar -m --set vpn icon=๏ \
11
-
label="$VPN" \
12
-
drawing=on \
13
-
click_script="~/.config/sketchybar/plugins/wg_off.sh"
14
-
else
15
-
sketchybar -m --set vpn drawing=off click_script="~/.config/sketchybar/plugins/wg_on.sh"
16
-
fi
···
-5
home/darwin/sketchybar/plugins/wg_off.sh
-5
home/darwin/sketchybar/plugins/wg_off.sh
-5
home/darwin/sketchybar/plugins/wg_on.sh
-5
home/darwin/sketchybar/plugins/wg_on.sh
-50
home/darwin/sketchybar/variables.sh
-50
home/darwin/sketchybar/variables.sh
···
1
-
#!/usr/bin/env sh
2
-
3
-
# Color Palette
4
-
# Tokyonight Night
5
-
BLACK=0xff24283b
6
-
WHITE=0xffa9b1d6
7
-
MAGENTA=0xffbb9af7
8
-
BLUE=0xff7aa2f7
9
-
CYAN=0xff7dcfff
10
-
GREEN=0xff9ece6a
11
-
YELLOW=0xffe0af68
12
-
ORANGE=0xffff9e64
13
-
RED=0xfff7768e
14
-
BAR_COLOR=0xff1a1b26
15
-
COMMENT=0xff565f89
16
-
17
-
# Tokyonight Day
18
-
# BLACK=0xffe9e9ed
19
-
# WHITE=0xff3760bf
20
-
# MAGENTA=0xff9854f1
21
-
# BLUE=0xff2e7de9
22
-
# CYAN=0xff007197
23
-
# GREEN=0xff587539
24
-
# YELLOW=0xff8c6c3e
25
-
# ORANGE=0xffb15c00
26
-
# RED=0xfff52a65
27
-
# BAR_COLOR=0xffe1e2e7
28
-
29
-
TRANSPARENT=0x00000000
30
-
31
-
# General bar colors
32
-
ICON_COLOR=$WHITE # Color of all icons
33
-
LABEL_COLOR=$WHITE # Color of all labels
34
-
35
-
ITEM_DIR="$HOME/.config/sketchybar/items"
36
-
PLUGIN_DIR="$HOME/.config/sketchybar/plugins"
37
-
38
-
FONT="Iosevka Nerd Font"
39
-
40
-
PADDINGS=3
41
-
42
-
POPUP_BORDER_WIDTH=2
43
-
POPUP_CORNER_RADIUS=11
44
-
POPUP_BACKGROUND_COLOR=$BLACK
45
-
POPUP_BORDER_COLOR=$COMMENT
46
-
47
-
CORNER_RADIUS=15
48
-
BORDER_WIDTH=2
49
-
50
-
SHADOW=on
···
-63
home/darwin/tmux/tmuxrc
-63
home/darwin/tmux/tmuxrc
···
1
-
set -g base-index 1
2
-
setw -g pane-base-index 1
3
-
4
-
# https://old.reddit.com/r/tmux/comments/mesrci/tmux_2_doesnt_seem_to_use_256_colors/
5
-
set -g default-terminal "xterm-256color"
6
-
set -ga terminal-overrides ",*256col*:Tc"
7
-
set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q'
8
-
set-environment -g COLORTERM "truecolor"
9
-
10
-
# Mouse works as expected
11
-
set-option -g mouse on
12
-
# easy-to-remember split pane commands
13
-
bind | split-window -h -c "#{pane_current_path}"
14
-
bind - split-window -v -c "#{pane_current_path}"
15
-
16
-
# move between tabs using vim commands
17
-
bind-key -n C-h previous-window
18
-
bind-key -n C-l next-window
19
-
20
-
# hide and restore panes
21
-
bind-key ! break-pane -d -n _hidden_pane
22
-
bind-key @ join-pane -s $.0
23
-
24
-
# don't rename windows automatically
25
-
set-option -g allow-rename off
26
-
27
-
# DESIGN TWEAKS
28
-
29
-
# don't do anything when a 'bell' rings
30
-
set -g visual-activity off
31
-
set -g visual-bell off
32
-
set -g visual-silence off
33
-
setw -g monitor-activity off
34
-
set -g bell-action none
35
-
36
-
# copy mode
37
-
setw -g mode-style 'fg=black bg=blue bold'
38
-
39
-
# panes
40
-
set -g pane-border-style 'fg=blue'
41
-
set -g pane-active-border-style 'fg=black'
42
-
43
-
# statusbar
44
-
set -g status-position bottom
45
-
set -g status-justify left
46
-
set -g status-style 'fg=blue'
47
-
48
-
set -g status-left ''
49
-
set -g status-left-length 10
50
-
51
-
set -g status-right-style 'fg=black bg=blue'
52
-
set -g status-right ''
53
-
54
-
setw -g window-status-current-style 'fg=black bg=blue'
55
-
setw -g window-status-current-format ' #I #W #F '
56
-
57
-
setw -g window-status-style 'fg=blue bg=black'
58
-
setw -g window-status-format ' #I #[fg=white]#W #[fg=yellow]#F '
59
-
60
-
setw -g window-status-bell-style 'fg=black bg=blue bold'
61
-
62
-
# messages
63
-
set -g message-style 'fg=black bg=blue bold'
···
+5
home/dev/default.nix
+5
home/dev/default.nix
+20
-1
home/gui/default.nix
+20
-1
home/gui/default.nix
···
2
{
3
imports = [
4
../core
5
+
../profiles/nvim
6
../profiles/firefox
7
../profiles/desktop
8
../profiles/email
9
../profiles/cal
10
../profiles/sync/kitaab
11
../profiles/ssh
12
+
../profiles/task
13
];
14
+
15
+
# GPG configuration for user session
16
+
services.gpg-agent = {
17
+
enable = true;
18
+
pinentry.package = pkgs.pinentry-rofi; # Use rofi for consistency with desktop theme
19
+
enableSshSupport = true;
20
+
defaultCacheTtl = 28800; # 8 hours
21
+
maxCacheTtl = 86400; # 24 hours
22
+
extraConfig = ''
23
+
pinentry-program ${pkgs.writeShellScript "pinentry-rofi-themed" ''
24
+
exec ${pkgs.pinentry-rofi}/bin/pinentry-rofi -theme ~/.config/rofi/theme/passmenu.rasi "$@"
25
+
''}
26
+
'';
27
+
};
28
+
29
+
programs.gpg = {
30
+
enable = true;
31
+
};
32
}
+49
-34
home/profiles/cli/default.nix
+49
-34
home/profiles/cli/default.nix
···
1
{ lib, pkgs, config, ... }:
2
{
3
home.packages = with pkgs; [
4
-
#unstable.claude-code
5
binutils
6
-
# coreutils
7
dnsutils
8
dasht
9
dosfstools
10
-
# git
11
git-machete
12
-
asciinema
13
bottom
14
gptfdisk
15
starship
16
-
# TODO Not available on Darwin
17
-
# iputils
18
-
# usbutils
19
-
# cached-nix-shell
20
-
# utillinux
21
-
# strace
22
-
# mtr
23
-
# gdb
24
-
# fontconfig
25
-
# whois
26
-
27
-
# jq
28
manix
29
moreutils
30
nix-index
31
nmap
32
ripgrep
33
skim
34
tealdeer
35
iftop
36
wget
37
curl
38
-
eza
39
bat
40
fd
41
-
# ncdu
42
duf
43
trash-cli
44
nix-index
45
silver-searcher
46
tcpdump
47
file
48
lsof
49
atool
50
zip
51
unzip
52
rsync
···
55
glow
56
pass
57
less
58
xxd
59
-
taskwarrior
60
gnupg
61
syncthing
62
dijo
63
-
# ssb-patchwork
64
pandoc
65
taskwarrior-tui
66
zk
67
-
diffnav
68
-
jujutsu
69
-
git-spice
70
-
71
-
# llms (needs 24.11)
72
-
aider-chat
73
74
(pkgs.writeScriptBin "jq-repl" ''
75
#!/usr/bin/env bash
···
99
manix "" | grep '^# ' | sed 's/^# \(.*\) (.*/\1/;s/ (.*//;s/^# //' | fzf --preview="manix '{}'" | xargs manix
100
'')
101
(pkgs.writeScriptBin "monitor" ''
102
-
# hotplug
103
connect() {
104
# Turn it on if it was off
105
xrandr --output HDMI-2 --auto
106
xrandr --output HDMI-2 --same-as eDP-1
107
}
108
109
disconnect() {
···
212
enableZshIntegration = true;
213
};
214
215
-
# Only available on Linux
216
-
# services.kdeconnect.enable = true;
217
218
home.shellAliases = {
219
# quick cd
···
228
229
# modern cli tools
230
ls = "eza --icons";
231
-
l = "eza -l --icons";
232
la = "eza -la --icons";
233
tree = "ls --tree --icons";
234
cat = "bat";
···
240
make-secret = "< /dev/urandom \\tr -dc _A-Za-z0-9 | head -c \${1:-32};echo;";
241
242
# task warrior
243
-
# TODO: make blocked a context?
244
t = "task -BLOCKED -idea -backlog";
245
tt = "taskwarrior-tui -r list";
246
ti = "task +idea";
247
tb = "task +backlog list";
248
ttb = "taskwarrior-tui -r backlog";
249
tr = "task newest limit:page";
250
-
tw = "task +wait";
251
ta = "task add";
252
tai = "task add +idea";
253
tn = "task-note";
···
263
264
# git
265
g = "git";
266
-
gl = "git log --pretty=oneline --abbrev-commit";
267
268
# grep
269
grep = "rg";
···
284
srch = "ns nixpkgs";
285
orch = "ns override";
286
nrb = "cd /tmp; sudo nixos-rebuild switch --flake '/home/anish/usr/helm#curve'; cd $OLDPWD";
287
-
nrd = "cd /tmp; NIXPKGS_ALLOW_UNFREE=1 sudo darwin-rebuild switch --flake /Users/anishlakhwara/usr/helm#Anishs-MacBook-Pro --impure; cd $OLDPWD";
288
nrt = "cd /tmp; sudo nixos-rebuild test --flake '/home/anish/usr/helm#curve'; cd $OLDPWD";
289
ned = "cd /home/anish/usr/helm; vim; cd $OLDPWD";
290
ncd = "cd /home/anish/usr/helm";
···
1
{ lib, pkgs, config, ... }:
2
{
3
home.packages = with pkgs; [
4
binutils
5
+
coreutils
6
dnsutils
7
dasht
8
dosfstools
9
+
#git
10
git-machete
11
bottom
12
gptfdisk
13
starship
14
+
iputils
15
+
jq
16
manix
17
moreutils
18
nix-index
19
+
cached-nix-shell
20
nmap
21
ripgrep
22
skim
23
tealdeer
24
+
usbutils
25
+
utillinux
26
+
whois
27
iftop
28
wget
29
curl
30
+
eza
31
bat
32
fd
33
+
ncdu
34
+
du-dust
35
+
# dia-cli
36
duf
37
trash-cli
38
nix-index
39
silver-searcher
40
tcpdump
41
+
mtr
42
file
43
lsof
44
atool
45
+
strace
46
zip
47
unzip
48
rsync
···
51
glow
52
pass
53
less
54
+
gdb
55
xxd
56
+
taskwarrior2
57
gnupg
58
syncthing
59
dijo
60
+
#ssb-patchwork
61
+
fontconfig
62
pandoc
63
taskwarrior-tui
64
+
# vimwiki-cli
65
zk
66
67
(pkgs.writeScriptBin "jq-repl" ''
68
#!/usr/bin/env bash
···
92
manix "" | grep '^# ' | sed 's/^# \(.*\) (.*/\1/;s/ (.*//;s/^# //' | fzf --preview="manix '{}'" | xargs manix
93
'')
94
(pkgs.writeScriptBin "monitor" ''
95
connect() {
96
# Turn it on if it was off
97
xrandr --output HDMI-2 --auto
98
xrandr --output HDMI-2 --same-as eDP-1
99
+
xrandr --output eDP-1 --off
100
+
pkill -9 polybar
101
+
feh --bg-scale ~/Downloads/stephen-walker-onIXxjH56AA-unsplash.jpg
102
+
polybar mybar > $XDG_DATA_HOME/polybar.log 2>&1 &
103
+
}
104
+
105
+
disconnect() {
106
+
xrandr --output HDMI-2 --off
107
+
xrandr --output eDP-1 --auto
108
+
}
109
+
110
+
xrandr | grep "HDMI-2 connected" &>>/dev/null && connect || disconnect
111
+
'')
112
+
(pkgs.writeScriptBin "big-monitor" ''
113
+
connect() {
114
+
# Turn it on if it was off
115
+
xrandr --output HDMI-2 --auto --primary
116
+
# Disable normal display
117
+
xrandr --output eDP-1 --off
118
+
# Use a nice background
119
+
feh --bg-scale ~/Downloads/stephen-walker-onIXxjH56AA-unsplash.jpg
120
+
# Reload Polybar
121
+
~/.config/bspwm/rc.d/polybar
122
}
123
124
disconnect() {
···
227
enableZshIntegration = true;
228
};
229
230
+
services.kdeconnect.enable = true;
231
232
home.shellAliases = {
233
# quick cd
···
242
243
# modern cli tools
244
ls = "eza --icons";
245
+
l = "esa -l --icons";
246
la = "eza -la --icons";
247
tree = "ls --tree --icons";
248
cat = "bat";
···
254
make-secret = "< /dev/urandom \\tr -dc _A-Za-z0-9 | head -c \${1:-32};echo;";
255
256
# task warrior
257
t = "task -BLOCKED -idea -backlog";
258
+
tw = "t rc.context:work";
259
+
# TODO find a reasonable way to manage this from a non-nix managed file in ~/.task/context or something
260
+
# we can do something like task rc.context:$(cat ~/.task/context) to read context
261
+
# and write a little script make-context = cat $@ > ~/.task/context or something
262
tt = "taskwarrior-tui -r list";
263
ti = "task +idea";
264
tb = "task +backlog list";
265
ttb = "taskwarrior-tui -r backlog";
266
tr = "task newest limit:page";
267
+
twait = "task +wait";
268
ta = "task add";
269
tai = "task add +idea";
270
tn = "task-note";
···
280
281
# git
282
g = "git";
283
284
# grep
285
grep = "rg";
···
300
srch = "ns nixpkgs";
301
orch = "ns override";
302
nrb = "cd /tmp; sudo nixos-rebuild switch --flake '/home/anish/usr/helm#curve'; cd $OLDPWD";
303
nrt = "cd /tmp; sudo nixos-rebuild test --flake '/home/anish/usr/helm#curve'; cd $OLDPWD";
304
ned = "cd /home/anish/usr/helm; vim; cd $OLDPWD";
305
ncd = "cd /home/anish/usr/helm";
home/profiles/desktop/Xresources
home/profiles/desktop/Xresources
+23
home/profiles/desktop/ayu-dark-kitty.conf
+23
home/profiles/desktop/ayu-dark-kitty.conf
···
···
1
+
2
+
background #0A0E14
3
+
foreground #B3B1AD
4
+
cursor #E6B450
5
+
selection_background #273747
6
+
color0 #000000
7
+
color8 #4D5566
8
+
color1 #FF3333
9
+
color9 #D96C75
10
+
color2 #C2D94C
11
+
color10 #91B362
12
+
color3 #FF8F40
13
+
color11 #F29668
14
+
color4 #59C2FF
15
+
color12 #6994BF
16
+
color5 #D4BFFF
17
+
color13 #A37ACC
18
+
color6 #95E6CB
19
+
color14 #4CBF99
20
+
color7 #ffffff
21
+
color15 #F0F0F0
22
+
selection_foreground #B3B1AD
23
+
+25
home/profiles/desktop/ayu-kitty.conf
+25
home/profiles/desktop/ayu-kitty.conf
···
···
1
+
#: This is a port of ayu Mirage color scheme
2
+
#: based on :
3
+
#: https://github.com/ayu-theme/ayu-colors
4
+
5
+
background #1F2430
6
+
foreground #CBCCC6
7
+
cursor #FFCC66
8
+
selection_background #33415E
9
+
color0 #000000
10
+
color8 #4D5566
11
+
color1 #FF3333
12
+
color9 #F27983
13
+
color2 #BAE67E
14
+
color10 #A6CC70
15
+
color3 #FFA759
16
+
color11 #F29E74
17
+
color4 #73D0FF
18
+
color12 #77A8D9
19
+
color5 #D4BFFF
20
+
color13 #A37ACC
21
+
color6 #95E6CB
22
+
color14 #4CBF99
23
+
color7 #ffffff
24
+
color15 #F0F0F0
25
+
selection_foreground #CBCCC6
+2
-2
home/profiles/desktop/bspwmrc
+2
-2
home/profiles/desktop/bspwmrc
+8
-7
home/profiles/desktop/default.nix
+8
-7
home/profiles/desktop/default.nix
···
22
paper-icon-theme
23
papirus-icon-theme
24
libsForQt5.qtstyleplugin-kvantum
25
-
qt5ct
26
gtk-engine-murrine
27
gtk_engines
28
maim
29
libreoffice
30
inotify-tools
31
offpunk
32
termpdfpy
33
-
libsForQt5.kontact
34
thunderbird
35
];
36
37
# GTK4 color scheme?
···
65
recursive = true;
66
};
67
".config/dunst/dunstrc".source = ./dunstrc;
68
".config/zathura/zathurarc".source = ./zathurarc;
69
".background-image".source = ./background.jpg;
70
#gtk4 theme
71
".config/gtk-4.0/settings.ini".text = ''
72
[Settings]
73
-
gtk-application-prefer-dark-theme=1
74
'';
75
# gtk3 theme
76
".config/gtk-3.0/settings.ini".text = ''
···
99
".local/bin/mpv-ify".source = ./bin/mpv-ify;
100
".local/bin/bspswallow".source = ./bin/bspswallow;
101
".config/bspwm/terminals".text = "Kitty";
102
-
".config/eww/eww.yuck".source = ./eww/eww.yuck;
103
-
".config/eww/eww.scss".source = ./eww/eww.scss;
104
-
".config/eww/widgets.yuck".source = ./eww/widgets.yuck;
105
# ".local/bin/hotplug-monitor.sh".source = ./bin/hotplug-monitor.sh;
106
};
107
···
123
124
qt = {
125
enable = true;
126
-
platformTheme = "gtk";
127
style = { name = "qt5ct-style"; };
128
};
129
···
22
paper-icon-theme
23
papirus-icon-theme
24
libsForQt5.qtstyleplugin-kvantum
25
+
libsForQt5.qt5ct
26
gtk-engine-murrine
27
gtk_engines
28
maim
29
+
kitty
30
libreoffice
31
inotify-tools
32
offpunk
33
termpdfpy
34
+
# libsForQt5.kontact
35
thunderbird
36
+
libsecret # For secret-tool to manage keyring
37
];
38
39
# GTK4 color scheme?
···
67
recursive = true;
68
};
69
".config/dunst/dunstrc".source = ./dunstrc;
70
+
".config/kitty/kitty.conf".source = ./kitty.conf;
71
+
".config/kitty/ayu.conf".source = ./ayu-kitty.conf;
72
".config/zathura/zathurarc".source = ./zathurarc;
73
".background-image".source = ./background.jpg;
74
#gtk4 theme
75
".config/gtk-4.0/settings.ini".text = ''
76
[Settings]
77
+
gtk-application-prefer-dark-theme=true
78
'';
79
# gtk3 theme
80
".config/gtk-3.0/settings.ini".text = ''
···
103
".local/bin/mpv-ify".source = ./bin/mpv-ify;
104
".local/bin/bspswallow".source = ./bin/bspswallow;
105
".config/bspwm/terminals".text = "Kitty";
106
# ".local/bin/hotplug-monitor.sh".source = ./bin/hotplug-monitor.sh;
107
};
108
···
124
125
qt = {
126
enable = true;
127
+
platformTheme.name = "gtk";
128
style = { name = "qt5ct-style"; };
129
};
130
+17
home/profiles/desktop/kitty.conf
+17
home/profiles/desktop/kitty.conf
···
···
1
+
include ayu.conf
2
+
font_family Hermit
3
+
font_size 13
4
+
bold_font auto
5
+
italic_font auto
6
+
bold_italic_font auto
7
+
open_url_with default
8
+
mouse_map left click ungrabbed mouse_click_url_or_select
9
+
confirm_os_window_close 0
10
+
enable_audio_bell no
11
+
12
+
# Ctrl+V for paste
13
+
map ctrl+v paste_from_clipboard
14
+
15
+
-- Allows zen-mode.nvim to increase font size
16
+
-- allow_remote_control socket-only
17
+
-- listen_on unix:/tmp/kitty
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
+2
-2
home/profiles/firefox/default.nix
+2
-2
home/profiles/firefox/default.nix
···
18
isDefault = true;
19
name = "anish";
20
userChrome = (builtins.readFile ./userChrome.css);
21
-
extensions = with pkgs.nur.repos.rycee.firefox-addons; [
22
# Find extensions: https://github.com/nix-community/nur-combined/blob/master/repos/rycee/pkgs/firefox-addons/generated-firefox-addons.nix
23
ublock-origin
24
-
wallabagger
25
# tree-style-tab
26
tridactyl
27
promnesia
···
18
isDefault = true;
19
name = "anish";
20
userChrome = (builtins.readFile ./userChrome.css);
21
+
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
22
# Find extensions: https://github.com/nix-community/nur-combined/blob/master/repos/rycee/pkgs/firefox-addons/generated-firefox-addons.nix
23
ublock-origin
24
+
# wallabagger
25
# tree-style-tab
26
tridactyl
27
promnesia
+135
-38
home/profiles/firefox/userChrome.css
+135
-38
home/profiles/firefox/userChrome.css
···
8
/*** NAV BAR ***/
9
/* Hide urlbar */
10
#nav-bar {
11
-
position: relative !important;
12
-
z-index: 2 !important;
13
-
height: 2px !important;
14
-
min-height: 2px !important;
15
-
margin-bottom: -2px !important;
16
-
opacity: 0 !important;
17
-
border: none !important;
18
}
19
20
/* But unfocus it when we invoke it with ctrl+L */
···
37
height: 28px !important;
38
}
39
40
-
/* hides the sidebar header */
41
#sidebar-header {
42
display: none !important;
43
}
44
45
.tab[selected="true"] {
46
visibility: collapse;
···
53
.tabbrowser-tab[visuallyselected="true"] {
54
visibility: collapse;
55
}
56
-
57
-
/* Credits to https://github.com/MrOtherGuy for hthe following snippet*/
58
-
59
/* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/autohide_sidebar.css made available under Mozilla Public License v. 2.0
60
See the above repository for updates as well as full license text. */
61
62
-
/* Show sidebar only when the cursor is over it */
63
-
/* The border controlling sidebar width will be removed so you'll need to modify these values to change width */
64
65
-
#sidebar-box{
66
-
--uc-sidebar-width: 44px; /* Only thing I (gale) changed */
67
--uc-sidebar-hover-width: 210px;
68
--uc-autohide-sidebar-delay: 600ms; /* Wait 0.6s before hiding sidebar */
69
position: relative;
70
min-width: var(--uc-sidebar-width) !important;
71
width: var(--uc-sidebar-width) !important;
72
max-width: var(--uc-sidebar-width) !important;
73
-
z-index:1;
74
}
75
76
-
#sidebar-box[positionend]{ direction: rtl }
77
-
#sidebar-box[positionend] > *{ direction: ltr }
78
79
-
#sidebar-box[positionend]:-moz-locale-dir(rtl){ direction: ltr }
80
-
#sidebar-box[positionend]:-moz-locale-dir(rtl) > *{ direction: rtl }
81
82
-
#main-window[sizemode="fullscreen"] #sidebar-box{ --uc-sidebar-width: 1px; }
83
84
-
#sidebar-splitter{ display: none }
85
-
86
-
#sidebar-header{ overflow: hidden; /*color: var(--chrome-color, inherit) !important*/}
87
-
88
#sidebar{
89
-
transition: min-width 115ms linear var(--uc-autohide-sidebar-delay) !important;
90
min-width: var(--uc-sidebar-width) !important;
91
will-change: min-width;
92
}
93
94
-
#sidebar-box:hover > #sidebar{ min-width: var(--uc-sidebar-hover-width) !important; transition-delay: 0ms !important }
95
-
96
.sidebar-panel{
97
-
/*background-color: transparent !important;
98
-
color: var(--newtab-text-primary-color) !important;*/
99
}
100
101
.sidebar-panel #search-box{
102
-moz-appearance: none !important;
103
-
/*background-color: rgba(249,249,250,0.1) !important;
104
color: inherit !important;
105
-
*/
106
}
107
108
/* Add sidebar divider and give it background */
109
110
#sidebar,
111
#sidebar-header{
112
-
/*background-color: inherit !important;*/
113
border-inline: 1px solid rgb(80,80,80);
114
border-inline-width: 0px 1px;
115
}
116
117
-
#sidebar-box:not([positionend]) > :-moz-locale-dir(rtl),
118
-
#sidebar-box[positionend] > *{
119
border-inline-width: 1px 0px;
120
}
121
-
122
/* Move statuspanel to the other side when sidebar is hovered so it doesn't get covered by sidebar */
123
124
-
#sidebar-box:not([positionend]):hover ~ #appcontent #statuspanel{ inset-inline: auto 0px !important; }
125
-
#sidebar-box:not([positionend]):hover ~ #appcontent #statuspanel-label{ margin-inline: 0px !important; border-left-style: solid !important; }
···
8
/*** NAV BAR ***/
9
/* Hide urlbar */
10
#nav-bar {
11
+
/* customize this value. */
12
+
--navbar-margin: -55px;
13
+
14
+
margin-top: var(--navbar-margin);
15
+
margin-bottom: 0;
16
+
z-index: -100;
17
+
transition: all 0.3s ease !important;
18
+
opacity: 0;
19
+
}
20
+
21
+
#navigator-toolbox:focus-within > #nav-bar,
22
+
#navigator-toolbox:hover > #nav-bar
23
+
{
24
+
margin-top: 0;
25
+
margin-bottom: var(--navbar-margin);
26
+
z-index: 100;
27
+
opacity: 1;
28
+
}
29
+
30
+
#main-window[chromehidden*="toolbar"] {
31
+
visibility: collapse;
32
+
height: -55px !important;
33
+
min-height: -55px !important;
34
}
35
36
/* But unfocus it when we invoke it with ctrl+L */
···
53
height: 28px !important;
54
}
55
56
+
/* hides the sidebar header
57
#sidebar-header {
58
display: none !important;
59
}
60
+
*/
61
62
.tab[selected="true"] {
63
visibility: collapse;
···
70
.tabbrowser-tab[visuallyselected="true"] {
71
visibility: collapse;
72
}
73
/* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/autohide_sidebar.css made available under Mozilla Public License v. 2.0
74
See the above repository for updates as well as full license text. */
75
76
+
/* Show sidebar only when the cursor is over it.
77
+
The border controlling sidebar width will be removed so you'll need to modify
78
+
these values to change width.
79
+
By default the internal layout of sidebar changes when hovered, but this can
80
+
be changed by setting pref "userchrome.autohide-sidebar.static-layout.enabled" to true
81
+
*/
82
83
+
/* Note: If you want only *some* sidebar to be auto-hidden, then you can use [sidebarcommand] attribute selector.
84
+
For example, to only affect Sidebery's sidebar replace all instances of #sidebar-box with
85
+
#sidebar-box[sidebarcommand="_3c078156-979c-498b-8990-85f7987dd929_-sidebar-action"].
86
+
To find the sidebarcommand value for any other sidebar, open that sidebar and use Browser Toolbox to inspect it.
87
+
See: https://firefox-source-docs.mozilla.org/devtools-user/browser_toolbox/index.html
88
+
*/
89
+
/* The whole thing
90
+
:where(#main-window) #browser{
91
+
--uc-sidebar-width: 240px;
92
--uc-sidebar-hover-width: 210px;
93
+
}
94
+
#main-window[sizemode="fullscreen"] #browser{
95
+
--uc-sidebar-width: 1px;
96
+
}
97
+
#sidebar-box{
98
--uc-autohide-sidebar-delay: 600ms; /* Wait 0.6s before hiding sidebar */
99
+
--uc-autohide-transition-duration: 115ms;
100
+
--uc-autohide-transition-type: linear;
101
+
--browser-area-z-index-sidebar: 3;
102
position: relative;
103
min-width: var(--uc-sidebar-width) !important;
104
width: var(--uc-sidebar-width) !important;
105
max-width: var(--uc-sidebar-width) !important;
106
+
z-index: var(--browser-area-z-index-sidebar,3);
107
+
background-color: inherit;
108
+
/* This directionality flipper is played so that sidebar "grows" into the right direction */
109
+
direction: ltr;
110
+
&:is([positionend],[sidebar-positionend]):not(:-moz-locale-dir(rtl)){
111
+
direction: rtl;
112
+
}
113
+
}
114
+
.sidebar-browser-stack{
115
+
background: inherit;
116
}
117
+
#main-window[sizemode="fullscreen"] #browser{ --uc-sidebar-width: 1px; }
118
119
+
#sidebar-splitter{ display: none }
120
121
+
#sidebar-header{
122
+
overflow: hidden;
123
+
color: var(--chrome-color, inherit) !important;
124
+
padding-inline: 0 !important;
125
+
}
126
127
+
#sidebar-header::before,
128
+
#sidebar-header::after{
129
+
content: "";
130
+
display: flex;
131
+
padding-left: 8px;
132
+
}
133
134
+
#sidebar-header,
135
#sidebar{
136
+
transition: min-width var(--uc-autohide-transition-duration) var(--uc-autohide-transition-type) var(--uc-autohide-sidebar-delay) !important;
137
min-width: var(--uc-sidebar-width) !important;
138
will-change: min-width;
139
+
direction: ltr;
140
+
&:-moz-locale-dir(rtl){
141
+
direction: rtl;
142
+
}
143
+
}
144
+
#sidebar-box:hover > #sidebar-header,
145
+
#sidebar-box:hover > #sidebar,
146
+
#sidebar-box:hover > .sidebar-browser-stack > #sidebar{
147
+
min-width: var(--uc-sidebar-hover-width) !important;
148
+
transition-delay: 0ms !important;
149
}
150
151
.sidebar-panel{
152
+
background-color: transparent !important;
153
+
color: var(--newtab-text-primary-color) !important;
154
}
155
156
.sidebar-panel #search-box{
157
-moz-appearance: none !important;
158
+
background-color: rgba(249,249,250,0.1) !important;
159
color: inherit !important;
160
}
161
162
/* Add sidebar divider and give it background */
163
164
#sidebar,
165
#sidebar-header{
166
+
background-color: inherit !important;
167
border-inline: 1px solid rgb(80,80,80);
168
border-inline-width: 0px 1px;
169
}
170
171
+
#sidebar-box:not([positionend],[sidebar-positionend]) > :-moz-locale-dir(rtl),
172
+
#sidebar-box:is([positionend],[sidebar-positionend]) > *{
173
border-inline-width: 1px 0px;
174
}
175
+
@media -moz-pref("sidebar.revamp") {
176
+
#sidebar, #sidebar-header{ border-style: none }
177
+
#sidebar-box{ padding: 0 !important; }
178
+
}
179
/* Move statuspanel to the other side when sidebar is hovered so it doesn't get covered by sidebar */
180
181
+
#sidebar-box:not([positionend],[sidebar-positionend]):hover ~ #appcontent #statuspanel{
182
+
inset-inline: auto 0px !important;
183
+
}
184
+
#sidebar-box:not([positionend],[sidebar-positionend]):hover ~ #appcontent #statuspanel-label{
185
+
margin-inline: 0px !important;
186
+
border-left-style: solid !important;
187
+
}
188
+
@media -moz-pref("userchrome.autohide-sidebar.static-layout.enabled"){
189
+
#sidebar-box{
190
+
min-width: var(--uc-sidebar-width) !important;
191
+
contain: size;
192
+
box-shadow: var(--content-area-shadow);
193
+
}
194
+
#sidebar{
195
+
min-width: var(--uc-sidebar-hover-width) !important;
196
+
}
197
+
.sidebar-browser-stack{
198
+
overflow: hidden;
199
+
width: 100%;
200
+
transition: width var(--uc-autohide-transition-duration) var(--uc-autohide-transition-type) var(--uc-autohide-sidebar-delay);
201
+
direction: ltr;
202
+
&:hover{
203
+
transition-delay: 0ms;
204
+
width: var(--uc-sidebar-hover-width);
205
+
}
206
+
&:-moz-locale-dir(rtl){
207
+
transition-property: transform,width !important;
208
+
}
209
+
}
210
+
#sidebar-box[sidebar-positionend]:hover :is(#sidebar-header,#sidebar):-moz-locale-dir(ltr){
211
+
transform: translateX(0);
212
+
transition-delay: 0ms !important;
213
+
}
214
+
#sidebar-box:not([sidebar-positionend]):hover .sidebar-browser-stack:-moz-locale-dir(rtl){
215
+
transform: translateX(calc(-1 * var(--uc-sidebar-hover-width) + var(--uc-sidebar-width)));
216
+
}
217
+
#sidebar-box[sidebar-positionend]:hover > .sidebar-browser-stack:-moz-locale-dir(rtl){
218
+
transform: translateX(calc(var(--uc-sidebar-hover-width) - var(--uc-sidebar-width)));
219
+
transition-delay: 0ms !important;
220
+
}
221
+
}
222
+
*/
-7
home/profiles/git/config
-7
home/profiles/git/config
···
15
default = current
16
[pull]
17
rebase = true
18
-
[merge]
19
-
mergetool = nvim -d
20
-
conflictstyle = diff3
21
[alias]
22
unadd = reset HEAD
23
# data analysis
···
26
email-domains = !git log --format="%aE" | awk -F'@' '{print $2}' | sort -u
27
# pretty log
28
ls = !git log --graph --abbrev-commit --decorate --color=always --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) - %C(dim red)%an%C(reset)%C(bold yellow)%d%C(reset)' --all
29
-
undo = !git reset HEAD~1 --mixed
30
-
blm = blame -w -C -C -C
31
[filter "lfs"]
32
required = true
33
smudge = git-lfs smudge -- %f
34
process = git-lfs filter-process
35
clean = git-lfs clean -- %f
36
-
[url "git@github.com:"]
37
-
insteadOf = https://github.com/
38
[url "https://github.com/"]
39
insteadOf = gh:
40
[url "git@github.com:"]
···
15
default = current
16
[pull]
17
rebase = true
18
[alias]
19
unadd = reset HEAD
20
# data analysis
···
23
email-domains = !git log --format="%aE" | awk -F'@' '{print $2}' | sort -u
24
# pretty log
25
ls = !git log --graph --abbrev-commit --decorate --color=always --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) - %C(dim red)%an%C(reset)%C(bold yellow)%d%C(reset)' --all
26
[filter "lfs"]
27
required = true
28
smudge = git-lfs smudge -- %f
29
process = git-lfs filter-process
30
clean = git-lfs clean -- %f
31
[url "https://github.com/"]
32
insteadOf = gh:
33
[url "git@github.com:"]
+1
-7
home/profiles/git/default.nix
+1
-7
home/profiles/git/default.nix
···
12
userName = "Anish Lakhwara";
13
userEmail = "anish+git@lakhwara.com";
14
delta.enable = true;
15
-
signing = {
16
-
signByDefault = true;
17
-
key = "7FC5DF072EF7B716";
18
-
};
19
20
ignores = [
21
"*~"
···
59
pull.rebase = false;
60
push.autoSetupRemote = true;
61
init.defaultBranch = "main";
62
-
"url \"git@github.com:\"" = { insteadOf = "https://github.com/"; };
63
};
64
65
aliases = {
···
98
99
# delete merged branches
100
bdm = "!git branch --merged | grep -v '*' | xargs -n 1 git branch -d";
101
-
undo = "!git reset HEAD~1 --mixed";
102
-
blm = "blame -w -C -C -C";
103
};
104
};
105
}
···
12
userName = "Anish Lakhwara";
13
userEmail = "anish+git@lakhwara.com";
14
delta.enable = true;
15
+
# TODO enable signing
16
17
ignores = [
18
"*~"
···
56
pull.rebase = false;
57
push.autoSetupRemote = true;
58
init.defaultBranch = "main";
59
};
60
61
aliases = {
···
94
95
# delete merged branches
96
bdm = "!git branch --merged | grep -v '*' | xargs -n 1 git branch -d";
97
};
98
};
99
}
-23
home/profiles/kitty/ayu-dark-kitty.conf
-23
home/profiles/kitty/ayu-dark-kitty.conf
···
1
-
2
-
background #0A0E14
3
-
foreground #B3B1AD
4
-
cursor #E6B450
5
-
selection_background #273747
6
-
color0 #000000
7
-
color8 #4D5566
8
-
color1 #FF3333
9
-
color9 #D96C75
10
-
color2 #C2D94C
11
-
color10 #91B362
12
-
color3 #FF8F40
13
-
color11 #F29668
14
-
color4 #59C2FF
15
-
color12 #6994BF
16
-
color5 #D4BFFF
17
-
color13 #A37ACC
18
-
color6 #95E6CB
19
-
color14 #4CBF99
20
-
color7 #ffffff
21
-
color15 #F0F0F0
22
-
selection_foreground #B3B1AD
23
-
···
-25
home/profiles/kitty/ayu-kitty.conf
-25
home/profiles/kitty/ayu-kitty.conf
···
1
-
#: This is a port of ayu Mirage color scheme
2
-
#: based on :
3
-
#: https://github.com/ayu-theme/ayu-colors
4
-
5
-
background #1F2430
6
-
foreground #CBCCC6
7
-
cursor #FFCC66
8
-
selection_background #33415E
9
-
color0 #000000
10
-
color8 #4D5566
11
-
color1 #FF3333
12
-
color9 #F27983
13
-
color2 #BAE67E
14
-
color10 #A6CC70
15
-
color3 #FFA759
16
-
color11 #F29E74
17
-
color4 #73D0FF
18
-
color12 #77A8D9
19
-
color5 #D4BFFF
20
-
color13 #A37ACC
21
-
color6 #95E6CB
22
-
color14 #4CBF99
23
-
color7 #ffffff
24
-
color15 #F0F0F0
25
-
selection_foreground #CBCCC6
···
-11
home/profiles/kitty/default.nix
-11
home/profiles/kitty/default.nix
-14
home/profiles/kitty/kitty.conf
-14
home/profiles/kitty/kitty.conf
···
1
-
include ayu.conf
2
-
font_family Hermit
3
-
font_size 13
4
-
bold_font auto
5
-
italic_font auto
6
-
bold_italic_font auto
7
-
open_url_with default
8
-
mouse_map left click ungrabbed mouse_click_url_or_select
9
-
confirm_os_window_close 0
10
-
enable_audio_bell no
11
-
hide_window_decorations titlebar-only
12
-
-- Allows zen-mode.nvim to increase font size
13
-
-- allow_remote_control socket-only
14
-
-- listen_on unix:/tmp/kitty
···
+1086
-3
home/profiles/nvim/default.nix
+1086
-3
home/profiles/nvim/default.nix
···
1
{ pkgs, ... }:
2
{
3
home.sessionVariables.EDITOR = "nvim";
4
home.shellAliases = {
5
k = "cd ~/kitaab/vimwiki; vim -c :VimwikiIndex; cd $OLDPWD";
6
};
7
8
programs.neovim = {
9
enable = true;
10
-
package = pkgs.unstable.neovim-unwrapped;
11
-
extraPackages = with pkgs; [
12
-
# used for Cody
13
nodejs
14
];
15
16
vimAlias = true;
17
};
18
}
···
1
{ pkgs, ... }:
2
+
let
3
+
customPlugins = {
4
+
vim-zettel = pkgs.vimUtils.buildVimPlugin {
5
+
name = "vim-zettel";
6
+
src = pkgs.fetchFromGitHub {
7
+
owner = "michal-h21";
8
+
repo = "vim-zettel";
9
+
rev = "929d90eec62e6f693c2702d2b6f76a93f2f1689d";
10
+
sha256 = "1fzKmknfVlEYwqeXgbKITbb2/PJ023iJyMz6vak3qh4=";
11
+
};
12
+
};
13
+
14
+
my-lspsaga = pkgs.vimUtils.buildVimPlugin {
15
+
name = "lspsaga.nvim";
16
+
src = pkgs.fetchFromGitHub {
17
+
owner = "glepnir";
18
+
repo = "lspsaga.nvim";
19
+
rev = "b7b4777369b441341b2dcd45c738ea4167c11c9e";
20
+
sha256 = "sciX/fMxzY1YOxXxjj1+ymrdMi451avcFFu+14R+/pk=";
21
+
};
22
+
};
23
+
nvim-luapad = pkgs.vimUtils.buildVimPlugin {
24
+
name = "nvim-luapad";
25
+
src = pkgs.fetchFromGitHub {
26
+
owner = "rafcamlet";
27
+
repo = "nvim-luapad";
28
+
rev = "9815e2659ce8e2ef4b55e401531cf09b6423e0ea";
29
+
sha256 = "gMaS5YFi3+gmUIfkCMEt9vhm8XSgv54Cquv5+WCWeTo=";
30
+
};
31
+
};
32
+
leap = pkgs.vimUtils.buildVimPlugin {
33
+
name = "leap";
34
+
src = pkgs.fetchFromGitHub {
35
+
owner = "ggandor";
36
+
repo = "leap.nvim";
37
+
rev = "1bb1fec369b1e9ae96e6ff1b829ea9272c51f844";
38
+
sha256 = "dH0v1D5q5OlMLA/omTDMb/taKyIgQ5VfVMYXJ609k/k=";
39
+
};
40
+
};
41
+
nvim-navic = pkgs.vimUtils.buildVimPlugin {
42
+
name = "nvim-navic";
43
+
src = pkgs.fetchFromGitHub {
44
+
owner = "SmiteshP";
45
+
repo = "nvim-navic";
46
+
rev = "096b23e73c84a653fd317c0c10261875fa573a6d";
47
+
sha256 = "vX7ZVJxgatIicmijehtaRvyHxk1i4gFfXrbPM/+VoFc=";
48
+
};
49
+
};
50
+
my-which-key-nvim = pkgs.vimUtils.buildVimPlugin {
51
+
pname = "which-key.nvim";
52
+
version = "2022-05-04";
53
+
src = pkgs.fetchFromGitHub {
54
+
owner = "folke";
55
+
repo = "which-key.nvim";
56
+
rev = "bd4411a2ed4dd8bb69c125e339d837028a6eea71";
57
+
sha256 = "0vf685xgdb967wmvffk1pfrvbhg1jkvzp1kb7r0vs90mg8gpv1aj";
58
+
};
59
+
meta.homepage = "https://github.com/folke/which-key.nvim/";
60
+
};
61
+
yuck-vim = pkgs.vimUtils.buildVimPlugin {
62
+
pname = "yuck.vim";
63
+
version = "2021-08-09";
64
+
src = pkgs.fetchFromGitHub {
65
+
owner = "elkowar";
66
+
repo = "yuck.vim";
67
+
rev = "6dc3da77c53820c32648cf67cbdbdfb6994f4e08";
68
+
sha256 = "lp7qJWkvelVfoLCyI0aAiajTC+0W1BzDhmtta7tnICE=";
69
+
};
70
+
};
71
+
nvim-parinfer = pkgs.vimUtils.buildVimPlugin {
72
+
pname = "nvim-parinfer";
73
+
version = "v1.2.0";
74
+
src = pkgs.fetchFromGitHub {
75
+
owner = "gpanders";
76
+
repo = "nvim-parinfer";
77
+
rev = "82bce5798993f4fe5ced20e74003b492490b4fe8";
78
+
sha256 = "Dlzfp3CZTzq8zQeHByWf3ER6/Em+KNGYNI4Z17ui8Lc=";
79
+
};
80
+
};
81
+
my-marks = pkgs.vimUtils.buildVimPlugin {
82
+
pname = "marks";
83
+
version = "2022-08-31";
84
+
src = pkgs.fetchFromGitHub {
85
+
owner = "chentoast";
86
+
repo = "marks.nvim";
87
+
rev = "b27cbb78e9082229590b396d3ae4fe07f1aeafe0";
88
+
sha256 = "XdbgIWuAHNdTfyKDrKmQVq5oSbBoi56DpwtgOqhScAk=";
89
+
};
90
+
};
91
+
my-fterm = pkgs.vimUtils.buildVimPlugin {
92
+
pname = "fterm";
93
+
version = "2022-07-22";
94
+
src = pkgs.fetchFromGitHub {
95
+
owner = "numToStr";
96
+
repo = "FTerm.nvim";
97
+
rev = "efd10656724a269e21ba68d65e2b058a4e606424";
98
+
sha256 = "rR6KDwj58aYfyaSsoUy75536SdBhk394yspCUl/hzfE=";
99
+
};
100
+
};
101
+
my-nvim-peekup = pkgs.vimUtils.buildVimPlugin {
102
+
pname = "nvim-peekup";
103
+
version = "0.1.0";
104
+
src = pkgs.fetchFromGitHub {
105
+
owner = "gennaro-tedesco";
106
+
repo = "nvim-peekup";
107
+
rev = "73a67c1ee3b5a7ea7b42d85399bf093f428c8ee3";
108
+
sha256 = "czKjJgCpvRSdtR7rNGlJrluDgPIdx94KUyx33op5gdY=";
109
+
};
110
+
};
111
+
};
112
+
113
+
my-python-packages = python-packages: with python-packages; [
114
+
tasklib
115
+
pynvim
116
+
six
117
+
# other python packages you want
118
+
];
119
+
python-with-my-packages = pkgs.python3.withPackages my-python-packages;
120
+
in
121
{
122
home.sessionVariables.EDITOR = "nvim";
123
home.shellAliases = {
124
k = "cd ~/kitaab/vimwiki; vim -c :VimwikiIndex; cd $OLDPWD";
125
+
# kitaab zettel
126
+
kz = "cd ~/kitaab/vimwiki; vim -c :VimwikiIndex -c :ZettelNew; cd $OLDPWD";
127
+
# kitaab recents
128
+
kr = "cd /home/anish/kitaab/vimwiki; eza --sort=modified --reverse | fzf --preview 'bat --style=numbers --color=always --terminal-width -1 ./{}';cd $OLDPWD";
129
+
# kitaab get by tagged
130
+
kt = "cd /home/anish/kitaab/vimwiki; eza *_index.wiki | fzf --preview 'bat --style=numbers --color=always --terminal-width -1 ./{}';cd $OLDPWD";
131
+
# List files that have no links in them
132
+
ku = "cd /home/anish/kitaab/;vim ./vimwiki/$(python3 poonam/main.py report --titles=false | tail -n +4 | fzf --preview 'bat --style=numbers --color=always --terminal-width -1 ./vimwiki/{}');cd $OLDPWD";
133
};
134
+
# Add %update to the highlight clause for vimwiki files
135
+
home.file.".config/nvim/after/syntax/vimwiki.vim".text = ''
136
+
" match with %update
137
+
syntax match VimwikiPlaceholder /^\s*%update\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite
138
+
" match with %link
139
+
syntax match VimwikiPlaceholder /^\s*%link\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite
140
+
'';
141
142
+
#environment.systemPackages = with customPlugins; [ tidal ];
143
programs.neovim = {
144
enable = true;
145
+
146
+
extraConfig = ''
147
+
" so our custom files still get included
148
+
set runtimepath+=/home/anish/.config/nvim/
149
+
set tabstop=2
150
+
set showmatch
151
+
set shiftwidth=2
152
+
set noexpandtab
153
+
set autoindent
154
+
set undofile
155
+
set signcolumn=auto:4
156
+
set title
157
+
158
+
" set foldmethod=indent " fold based on indent
159
+
set number
160
+
set nocompatible
161
+
set relativenumber
162
+
set showtabline=2
163
+
set noexpandtab
164
+
set autowriteall
165
+
set list lcs=tab:\|\
166
+
filetype plugin on
167
+
168
+
" include - in word to move across easier in lisp / clojure
169
+
set iskeyword+=-
170
+
171
+
set termguicolors
172
+
colorscheme ayu-mirage
173
+
174
+
" set spell
175
+
set spelllang=en_gb
176
+
set ignorecase
177
+
set smartcase
178
+
set incsearch
179
+
" if hidden is not set, TextEdit might fail.
180
+
set hidden
181
+
" Some servers have issues with backup files, see #649
182
+
set nobackup
183
+
set nowritebackup
184
+
" Better display for messages
185
+
set cmdheight=0
186
+
" You will have bad experience for diagnostic messages when it's default 4000.
187
+
set updatetime=300
188
+
" don't give |ins-completion-menu| messages.
189
+
set shortmess+=c
190
+
" always show signcolumns
191
+
set signcolumn=yes
192
+
" highlight row
193
+
set cursorline
194
+
set autoread
195
+
196
+
let mapleader = "\<Space>"
197
+
let maplocalleader = ","
198
+
199
+
" window
200
+
nmap <leader>wh :topleft vnew<CR>
201
+
nmap <leader>wl :botright vnew<CR>
202
+
nmap <leader>wk :topleft new<CR>
203
+
nmap <leader>wj :botright new<CR>
204
+
205
+
" tabs
206
+
nmap <leader>rt :retab!<CR>
207
+
vmap <leader>rt :retab!<CR>
208
+
209
+
" Alt+hjkl navigation now handled by Navigator.nvim plugin
210
+
:nnoremap <F5> "=strftime("%Y-%m-%d %H:%M")<CR>
211
+
:inoremap <F5> <C-R>=strftime("%Y-%m-%d %H:%M")<CR>
212
+
:inoremap <F4> <C-R>=strftime("%H:%M")<CR>
213
+
214
+
" tidal nvim terminal
215
+
let g:tidal_target = "terminal"
216
+
217
+
" latex
218
+
" let g:tex_flavor='latex'
219
+
" let g:vimtex_view_method='zathura'
220
+
" let g:vimtex_quickfix_mode=0
221
+
" set conceallevel=1
222
+
" let g:tex_conceal='abdmg'
223
+
224
+
" telescope
225
+
" Find files using Telescope command-line sugar.
226
+
nnoremap <leader>ff <cmd>Telescope find_files<cr>
227
+
nnoremap <leader>fg <cmd>Telescope live_grep<cr>
228
+
nnoremap <leader>fb <cmd>Telescope buffers<cr>
229
+
nnoremap <leader>fh <cmd>Telescope help_tags<cr>
230
+
nnoremap <leader>ft <cmd>Telescope tags<cr>
231
+
232
+
" exit normal mode in terminal
233
+
:tnoremap <C-n> <C-\><C-n>
234
+
235
+
" Sexp in Conjure (since it's fennel)
236
+
let g:sexp_filetypes = "clojure,scheme,lisp,janet,fennel,yuck"
237
+
let g:conjure#filetype#fennel = "conjure.client.fennel.stdio"
238
+
" we only use fennel with love; no we don't...
239
+
let g:conjure#client#fennel#stdio#command = "fennel"
240
+
" let g:conjure#extract#tree_sitter#enabled = true
241
+
map <localleader>lt :ConjureLogToggle<CR>
242
+
243
+
let g:rainbow_active = 0
244
+
autocmd BufReadPost,BufNewFile c,clj,cljs RainbowParenthesesToggleAll
245
+
246
+
" general commands
247
+
map <leader>e :Neotree toggle<CR>
248
+
map <leader>s :w<CR>
249
+
map <leader>q :q<CR>
250
+
map <leader>r :RainbowParenthesesToggleAll<CR>
251
+
nnoremap <Esc> :noh<CR>
252
+
map Q <Nop>
253
+
nnoremap Y y$
254
+
nnoremap <leader>n :vnew<CR>
255
+
" center moving
256
+
nnoremap n nzzzv
257
+
nnoremap N Nzzzv
258
+
nnoremap J mzJ'z
259
+
" undo points
260
+
inoremap , ,<c-g>u
261
+
inoremap . .<c-g>u
262
+
inoremap ? ?<c-g>u
263
+
inoremap ! !<c-g>u
264
+
inoremap ) )<c-g>u
265
+
inoremap [ [<c-g>u
266
+
inoremap ] ]<c-g>u
267
+
inoremap { {<c-g>u
268
+
inoremap ( (<c-g>u
269
+
inoremap } }<c-g>u
270
+
" moving text
271
+
vnoremap J :m '>+1<CR>gv=gv
272
+
vnoremap K :m '>-2<CR>gv=gv
273
+
inoremap <c-j> <esc>:m .+1<CR>==
274
+
inoremap <c-k> <esc>:m .-2<CR>==
275
+
nnoremap <leader>j <esc>:m .+1<CR>==
276
+
nnoremap <leader>k <esc>:m .-2<CR>==
277
+
" Pasting
278
+
:map <leader>sy :!xclip -i<CR><CR>
279
+
:vmap <leader>sy "*y
280
+
:map <leader>sp :r!xclip -o<CR>
281
+
282
+
" buffer navigation (using built-in commands)
283
+
nnoremap <silent> gT :bprevious<CR>
284
+
nnoremap <silent> gt :bnext<CR>
285
+
nnoremap <silent> gj :buffers<CR>
286
+
nnoremap <silent> gq :bdelete<CR>
287
+
288
+
" git
289
+
nnoremap <leader>ga :G fetch --all
290
+
nmap <leader>gs :G<CR>
291
+
nmap <leader>gl :diffget //3<CR>
292
+
nmap <leader>gh :diffget //2<CR>
293
+
nmap <leader>gb :GBranches<CR>
294
+
nnoremap <leader>gp :Git! push<CR>
295
+
nnoremap <leader>gd :Gdiff<CR>
296
+
nnoremap <leader>gc :G commit -v -q %:p<CR>
297
+
298
+
" kitaab
299
+
"map <leader>cz :VimwikiIndex<CR>:ZettelNew
300
+
"map <leader>zs :ZettelSearch<CR>
301
+
map <leader>zn :ZettelNew<CR>
302
+
"map <leader>zo :ZettelOpen<CR>
303
+
"map <leader>zf :Telescope oldfiles only_cwd=true<CR>
304
+
"map <leader>wt :VimwikiMakeTomorrowDiaryNote
305
+
"map <leader>wd :VimwikiMakeYesterdayDiaryNote
306
+
"map <leader>zm :ZenMode<CR>:setlocal nospell<CR>
307
+
let g:vimwiki_list = [{ 'path': '~/kitaab/vimwiki', 'auto_tags': 1, 'auto_diary_index': 1, 'auto_generate_links': 1 }]
308
+
let g:sync_taskwarrior = 0
309
+
let g:zettel_format = "%y%m%d-%H%M"
310
+
let g:vimwiki_list = [{'path': '~/kitaab/vimwiki', 'nested_syntaxes': {'python': 'python', 'c++': 'cpp', 'nix': 'nix', 'bash': 'sh'}}]
311
+
312
+
let g:mapleader="\<Space>"
313
+
314
+
" fzf
315
+
" not sure we even use this
316
+
let g:fzf_layout = { 'window': { 'width': 0.8, 'height': 0.8 } }
317
+
318
+
" lsp commands
319
+
nnoremap <leader>vgd :lua vim.lsp.buf.definition()<CR>
320
+
nnoremap <leader>vi :lua require('telescope.builtin').lsp_implementation()<CR>
321
+
nnoremap <leader>vsh :lua vim.lsp.buf.signature_help()<CR>
322
+
nnoremap <leader>vrr :lua require('telescope.builtin').lsp_references()<CR>
323
+
" nnoremap <leader>vrn :lua vim.lsp.buf.rename()<CR>
324
+
" nnoremap <leader>vh :lua vim.lsp.buf.hover()<CR>
325
+
" nnoremap <leader>vca :lua vim.lsp.buf.code_action()<CR>
326
+
" nnoremap <leader>vsd :lua vim.lsp.util.show_line_diagnostics()<CR>
327
+
" nnoremap <leader>vn :lua vim.lsp.diagnostic.goto_next()<CR>
328
+
" nnoremap <leader>va :lua require('telescope.builtin').lsp_code_actions(require('telescope.themes').get_cursor())<cr>
329
+
" lspsaga stuff doesn't work
330
+
nnoremap <leader>vd :Lspsaga peek_definition<CR>
331
+
nnoremap <leader>vrn :Lspsaga rename<CR><CR>
332
+
nnoremap <leader>vh :Lspsaga hover_doc<CR>
333
+
nnoremap <leader>vca :Lspsaga code_action<CR>
334
+
nnoremap <leader>vsd :Lspsaga show_line_diagnostics<CR>
335
+
nnoremap <leader>vs :Dasht<Space>
336
+
nnoremap <leader>vn :Lspsaga diagnostic_jump_prev<CR>
337
+
nnoremap <leader>co :Outline<CR>
338
+
" Trouble keybindings
339
+
nnoremap <leader>xx :Trouble diagnostics<CR>
340
+
nnoremap <leader>xw :Trouble workspace_diagnostics<CR>
341
+
nnoremap <leader>xd :Trouble document_diagnostics<CR>
342
+
nnoremap <leader>xl :Trouble loclist<CR>
343
+
nnoremap <leader>xq :Trouble quickfix<CR>
344
+
nnoremap <leader>xr :Trouble lsp_references<CR>
345
+
346
+
" Yank to system clipboard (y operations only, not d)
347
+
nnoremap y "+y
348
+
vnoremap y "+y
349
+
nnoremap Y "+Y
350
+
351
+
" Note-taking keybindings
352
+
nnoremap <leader>zz :ZkNew { title = vim.fn.input('Title: ') }<CR>
353
+
354
+
" dashboard
355
+
let g:dashboard_custom_header = [
356
+
\' ',
357
+
\' โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โฃคโฃฆโ โ โ โ โ โ โ โ โ โฃคโกโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ ',
358
+
\'โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โฃฟโกโ โ โ โ โ โ โ โ โฃฟโ โ โ โ โ โ โ โ โข โฃฟโฃถโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ ',
359
+
\'โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โขนโฃงโ โ โ โ โ โ โ โ โขปโ โ โ โ โ โ โ โ โฃธโฃฟโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ ',
360
+
\'โ โ โ โ โ โ โ โขดโฃทโ โ โ โ โ โ โ โ โ โ โขปโกโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โฃฟโกโ โ โ โ โ โ โ โ โ โ โขโฃดโฃฟโกโ โ โ โ โ โ ',
361
+
\'โ โ โ โ โ โ โ โ โขฟโฃงโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โฃ โฃฟโ โ โ โ โ โ โ โ โ ',
362
+
\'โ โ โ โ โ โ โ โ โ โ ปโกโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โขโ ถโ โ โ โ โ โ โ โ โ โ โ ',
363
+
\'โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ ',
364
+
\'โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ ',
365
+
\'โ โ โ โ โ โ โ โขโฃโกคโ คโ คโ โฃโ โกโ ฒโกฆโฃคโฃโฃโกโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โขโฃ โฃคโฃคโฃคโฃคโฃคโฃโฃโ โ โ โ โ โ โ โ โ ',
366
+
\'โ โ โ โ โ โฃ โขถโ โ ฉโขโฃ โกคโ คโ ฏโ ฌโ ฅโฃผโฃ
โกโ ธโ โ โกทโฃฆโกโ โ โ โ โ โ โ โ โ โ โ โ โขโฃคโขถโขปโขปโขนโฃโฃจโฃงโฃคโฃดโฃนโฃโ โขถโฃโ โ โ โ โ โ ',
367
+
\'โ โ โ โฃฐโ โ โขโกคโ โ โ โ โ โฃโกโ โกโ โ โ โ ฒโขผโฃฐโขกโฃโขถโฃโ โ โ โ โ โ โ โขโฃ โ ถโกโฃโฃบโ พโ โ โ โ โ โ โ โ โ โ โ ณโขฟโฃทโฃโ โ โ โ ',
368
+
\'โ โขโกผโกโขธโฃฐโ โ โ โ โ โ โ โ โกโ โ โ โ โ โ โ โ โ ปโฃฟโกโกผโฃทโฃโ โ โ โฃ โฃพโ โ โฃทโ โ โ โ โ โ โ โ โ โขโฃโ โ โ โข โ โ โ ปโฃงโ โ โ ',
369
+
\'โ โกผโ โขโกผโ โ โ โ โฃโ คโ โ โ โ โ โ โ ฒโ คโฃโกโ โ โ โ โ ปโขทโฃฟโฃฟโฃทโฃคโฃพโ นโขโกทโ โ โ โ โ โ โฃโกคโ โ โ โ โ โ โ โ ฒโฃโฃโ โ โ โฃทโ โ ',
370
+
\'โขฐโ ทโฃโกโ โ โ โขโ โ โ โ โ โ โ โ โ โ โ โ โ โ ฒโฃคโกโขโกคโ โขปโฃฟโฃฟโขฃโขโกดโ โ โ โ โ โฃ โ โ โ โ โ โ โ โ โ โ โ โ โ โขปโกโ โ โ โฃโ ',
371
+
\'โฃพโฃโฃนโขโกโ โขโกโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โขฟโฃทโฃพโฃโกโขนโกผโ โ โ โ โข โกดโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โขนโ โ โ โขนโ ',
372
+
\'โขนโขโฃฟโ โกโ โขธโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โขโกดโขโขฑโขนโกพโ โ โ โ โฃ โฃพโฃฟโฃฆโฃโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โขธโ โ โ โขธโก ',
373
+
\'โขธโฃ
โฃฏโ โฃโ โขธโกโ โ โ โ โ โ โ โ โ โ โ โ โ โขโกดโขปโฃนโขธโกผโ โ โ โ โขโกผโขปโฃปโฃฟโกฝโกนโ ณโขคโฃโ โ โ โ โ โ โ โ โ โ โ โขโกพโ โ โ โขธโ ',
374
+
\'โ โฃฟโฃฟโกโ โ โ โฃฟโฃคโฃโ โ โ โ โ โ โ โ โฃโฃคโขพโขปโขฟโฃฟโ โ โ โ โ โ โฃ โฃโ โฃฟโกโ โ ปโขฅโฃโกโฃฝโ ปโขฆโฃโฃโ โ โ โ โ โฃโกดโฃพโ โ โ โ โกผโ ',
375
+
\'โ โ โฃโฃงโ โ โ โ โขปโฃโ โ ฒโฃถโฃถโฃถโฃถโกโขโฃฟโฃโกงโ โ โ โ โ โ โขโฃคโ โ โ โ ปโฃทโฃงโ โกโ โ โ โขงโฃโขฐโขโ โขปโ โกโขฒโ โฃโกดโ โ โ โ โฃดโ โ ',
376
+
\'โ โ โ โขพโฃทโกโ โ โ โ โ โ โ พโ ฟโ พโ ฟโ ฟโ โ โ โ โ โ โ โ โฃ โกดโ โ โ โ โ โ โ โ โ ทโฃโ ฃโ โ โ โ โ โ โ ถโ พโ คโ งโ ผโ โ โ โ โ โขโกดโ โ โ ',
377
+
\'โ โ โ โ โ โ ฟโฃฆโฃโ โ โ โ โ โกโ โ โ โ โ โ โ โขโฃ โกดโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ ถโฃโฃโ โ โ โ โ โ โ โ โ โ โ โขโกดโ โ โ โ โ ',
378
+
\'โ โ โ โ โ โ โ โ โ โ โ คโ คโฃโฃโฃโฃโฃ โ คโ คโ ถโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ ฆโ คโขคโฃโฃโฃ โกคโ คโ โ โ โ โ โ โ โ ',
379
+
\'โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โขโ โ โ โ โ โ โ โ โ โ โ โ โ ',
380
+
\'โ โ โ โ โ โ โ โ โ โ โ โ โ โขโกโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ ธโฃโ โ โ โ โ โ โ โ โ โ โ โ ',
381
+
\'โ โ โ โ โ โ โ โ โ โ โ โฃ โกถโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โขทโกโ โ โ โ โ โ โ โ โ โ ',
382
+
\'โ โ โ โ โ โ โ โ โ โฃ โกพโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โกโ โ โ โ โ โ โ โ โ โ โ ปโฃฆโกโ โ โ โ โ โ โ โ ',
383
+
\'โ โ โ โ โ โ โขโฃดโกพโ โ โ โ โ โ โ โ โ โ โข โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โขนโกโ โ โ โ โ โ โ โ โ โ โ โขฟโฃฆโฃโ โ โ โ โ โ ',
384
+
\'โ โ โ โ โ โ โ ปโ โ โ โ โ โ โ โ โ โ โ โฃดโ โ โ โ โ โ โ โ โ โ ฐโกโ โ โ โ โ โ โ โ โ นโฃฆโกโ โ โ โ โ โ โ โ โ โ โ ฝโ โ โ โ โ โ โ ',
385
+
\'โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โขโฃผโ โ โ โ โ โ โ โ โ โ โ โฃฟโ โ โ โ โ โ โ โ โ โ โฃทโกโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ ',
386
+
\'โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โฃฟโกโ โ โ โ โ โ โ โ โ โ โ ฟโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ ',
387
+
\'โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ นโ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ โ ',
388
+
\]
389
+
let g:dashboard_default_executive = 'telescope'
390
+
nmap <Leader>ss :<C-u>SessionSave<CR>
391
+
nmap <Leader>sl :<C-u>SessionLoad<CR>
392
+
" nnoremap <silent> <Leader>fh :DashboardFindHistory<CR>
393
+
" nnoremap <silent> <Leader>fm :DashboardJumpMark<CR>
394
+
" nnoremap <silent> <Leader>cn :DashboardNewFile<CR>
395
+
autocmd FileType dashboard set showtabline=0 | autocmd WinLeave <buffer> set showtabline=2
396
+
let g:dashboard_custom_footer = ["Run wild"]
397
+
let g:dashboard_custom_section={
398
+
\ 'create_zettel': {
399
+
\ 'description': ['๏ค Create Zettel SPC c z'],
400
+
\ 'command': ':VimwikiIndex' },
401
+
\ 'load_session': {
402
+
\ 'description': ['๏
Load Session SPC s l'],
403
+
\ 'command': 'SessionLoad' }
404
+
\ }
405
+
406
+
let g:scnvim_snippet_format = "luasnip"
407
+
408
+
409
+
" lua config
410
+
lua <<EOF
411
+
local signs = { Error = "โฎพ ", Warn = "โ ", Hint = "๐ก", Info = "๏ " }
412
+
for type, icon in pairs(signs) do
413
+
local hl = "DiagnosticSign" .. type
414
+
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl })
415
+
end
416
+
vim.g.diagnostics_active = true
417
+
function _G.toggle_diagnostics()
418
+
if vim.g.diagnostics_active then
419
+
vim.g.diagnostics_active = false
420
+
vim.lsp.diagnostic.clear(0)
421
+
vim.lsp.handlers["textDocument/publishDiagnostics"] = function() end
422
+
else
423
+
vim.g.diagnostics_active = true
424
+
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
425
+
vim.lsp.diagnostic.on_publish_diagnostics, {
426
+
virtual_text = true,
427
+
signs = true,
428
+
underline = true,
429
+
update_in_insert = false,
430
+
}
431
+
)
432
+
end
433
+
end
434
+
435
+
vim.diagnostic.config({
436
+
signs = true,
437
+
update_in_insert = false,
438
+
underline = false,
439
+
severity_sort = true,
440
+
float = {
441
+
focusable = false,
442
+
style = 'minimal',
443
+
border = 'rounded',
444
+
source = 'always',
445
+
},
446
+
})
447
+
448
+
vim.lsp.handlers['textDocument/hover'] = vim.lsp.with(
449
+
vim.lsp.handlers.hover,
450
+
{
451
+
border = 'rounded',
452
+
}
453
+
)
454
+
455
+
vim.lsp.handlers['textDocument/signatureHelp'] = vim.lsp.with(
456
+
vim.lsp.handlers.signature_help,
457
+
{
458
+
border = 'rounded',
459
+
}
460
+
)
461
+
462
+
local orig_util_open_floating_preview = vim.lsp.util.open_floating_preview
463
+
function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...)
464
+
opts = opts or {}
465
+
opts.border = opts.border or 'rounded'
466
+
return orig_util_open_floating_preview(contents, syntax, opts, ...)
467
+
end
468
+
469
+
470
+
vim.api.nvim_set_keymap('n', '<leader>vt', ':call v:lua.toggle_diagnostics()<CR>', {noremap = true, silent = true})
471
+
472
+
-- autopairs
473
+
require('nvim-autopairs').setup{}
474
+
475
+
-- marks
476
+
require('marks').setup{}
477
+
478
+
-- Setup nvim-cmp.
479
+
local has_words_before = function()
480
+
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
481
+
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
482
+
end
483
+
484
+
local luasnip = require("luasnip")
485
+
local lspkind = require("lspkind")
486
+
local cmp = require('cmp')
487
+
local cmp_autopairs = require('nvim-autopairs.completion.cmp')
488
+
local t = function(str)
489
+
return vim.api.nvim_replace_termcodes(str, true, true, true)
490
+
end
491
+
local check_back_space = function()
492
+
local col = vim.fn.col(".") - 1
493
+
return col == 0 or vim.fn.getline("."):sub(col, col):match("%s") ~= nil
494
+
end
495
+
cmp.setup {
496
+
formatting = {
497
+
format = lspkind.cmp_format({
498
+
mode = 'symbol_text',
499
+
maxwidth = 50,
500
+
})
501
+
},
502
+
mapping = {
503
+
['<C-p>'] = cmp.mapping.select_prev_item(),
504
+
['<C-n>'] = cmp.mapping.select_next_item(),
505
+
['<C-d>'] = cmp.mapping.scroll_docs(-4),
506
+
['<C-f>'] = cmp.mapping.scroll_docs(4),
507
+
['<C-Space>'] = cmp.mapping.complete(),
508
+
['<C-e>'] = cmp.mapping.close(),
509
+
['<CR>'] = cmp.mapping.confirm({
510
+
behavior = cmp.ConfirmBehavior.Insert,
511
+
select = true
512
+
}),
513
+
["<Tab>"] = cmp.mapping(function(fallback)
514
+
if cmp.visible() then
515
+
cmp.select_next_item()
516
+
elseif luasnip.expand_or_jumpable() then
517
+
luasnip.expand_or_jump()
518
+
elseif has_words_before() then
519
+
cmp.complete()
520
+
else
521
+
fallback()
522
+
end
523
+
end, {"i", "s"}),
524
+
["<S-Tab>"] = cmp.mapping(function(fallback)
525
+
if cmp.visible() then
526
+
cmp.select_prev_item()
527
+
elseif luasnip.jumpable(-1) then
528
+
luasnip.jump(-1)
529
+
else
530
+
fallback()
531
+
end
532
+
end, { "i", "s" }),
533
+
},
534
+
snippet = {
535
+
expand = function(args)
536
+
require'luasnip'.lsp_expand(args.body)
537
+
end
538
+
},
539
+
sources = {
540
+
{name = 'buffer'}, {name = 'nvim_lsp'},
541
+
{name = "look"}, {name = "path"},
542
+
{name = "calc"}, {name = "spell"},
543
+
{name = 'cmp-conjure'}, {name = "luasnip"},
544
+
{name = 'tags'}
545
+
},
546
+
completion = {completeopt = 'menu,menuone,noinsert'}
547
+
}
548
+
cmp.event:on( 'confirm_done', cmp_autopairs.on_confirm_done({ map_char = { tex = ' ' } }))
549
+
require("luasnip.loaders.from_vscode").lazy_load()
550
+
551
+
-- lsp-format removed, using conform.nvim instead
552
+
require("nvim-navic").setup {
553
+
icons = {
554
+
Constant = "ฯ ",
555
+
Function = "ฦ "
556
+
}
557
+
}
558
+
559
+
-- Setup neo-tree
560
+
require("neo-tree").setup {}
561
+
562
+
-- Setup outline
563
+
require("outline").setup {}
564
+
565
+
-- Setup trouble
566
+
require("trouble").setup {}
567
+
568
+
-- Setup noice for floating command palette and notifications
569
+
require("noice").setup({
570
+
cmdline = {
571
+
enabled = true,
572
+
view = "cmdline_popup",
573
+
},
574
+
messages = {
575
+
enabled = true,
576
+
},
577
+
popupmenu = {
578
+
enabled = true,
579
+
},
580
+
notify = {
581
+
enabled = true,
582
+
view = "notify",
583
+
},
584
+
lsp = {
585
+
progress = {
586
+
enabled = true,
587
+
format = "lsp_progress",
588
+
format_done = "lsp_progress_done",
589
+
throttle = 1000 / 30, -- frequency to update lsp progress message
590
+
view = "mini",
591
+
},
592
+
override = {
593
+
["vim.lsp.util.convert_input_to_markdown_lines"] = true,
594
+
["vim.lsp.util.stylize_markdown"] = true,
595
+
["cmp.entry.get_documentation"] = true,
596
+
},
597
+
},
598
+
presets = {
599
+
command_palette = true,
600
+
long_message_to_split = true,
601
+
inc_rename = false,
602
+
lsp_doc_border = false,
603
+
},
604
+
views = {
605
+
cmdline_popup = {
606
+
border = {
607
+
style = "rounded",
608
+
padding = { 0, 1 },
609
+
},
610
+
filter_options = {},
611
+
win_options = {
612
+
winhighlight = "NormalFloat:NormalFloat,FloatBorder:FloatBorder",
613
+
},
614
+
},
615
+
},
616
+
})
617
+
618
+
-- Setup barbar (tabline with icons)
619
+
require'barbar'.setup {
620
+
icons = {
621
+
filetype = {
622
+
enabled = true,
623
+
},
624
+
},
625
+
}
626
+
local navic = require("nvim-navic")
627
+
628
+
-- Setup conform.nvim for formatting
629
+
require("conform").setup({
630
+
formatters_by_ft = {
631
+
javascript = { "prettier", "lsp" },
632
+
typescript = { "prettier", "lsp" },
633
+
javascriptreact = { "prettier", "lsp" },
634
+
typescriptreact = { "prettier", "lsp" },
635
+
json = { "prettier", "lsp" },
636
+
html = { "prettier", "lsp" },
637
+
css = { "prettier", "lsp" },
638
+
yaml = { "prettier", "lsp" },
639
+
rust = { "lsp" },
640
+
go = { "lsp" },
641
+
lua = { "lsp" },
642
+
nix = { "nixfmt-rfc-style" },
643
+
clojure = { "lsp" },
644
+
fennel = { "lsp" },
645
+
terraform = { "lsp" },
646
+
bash = { "shfmt" },
647
+
sh = { "shfmt" },
648
+
},
649
+
format_on_save = {
650
+
timeout_ms = 500,
651
+
lsp_fallback = true,
652
+
},
653
+
})
654
+
655
+
-- lspsaga, code_action lightbulb is annoying
656
+
local saga = require('lspsaga')
657
+
saga.init_lsp_saga({
658
+
border_style = "rounded",
659
+
code_action_icon = "",
660
+
code_action_num_shortcut = true,
661
+
code_action_lightbulb = {
662
+
enable = false,
663
+
enable_in_insert = false,
664
+
cache_code_action = true,
665
+
sign = true,
666
+
update_time = 150,
667
+
sign_priority = 20,
668
+
virtual_text = false,
669
+
},
670
+
code_action_keys = {
671
+
quit = 'q',
672
+
exec = '<CR>',
673
+
},
674
+
-- show outline
675
+
show_outline = {
676
+
win_position = 'right',
677
+
--set special filetype win that outline window split.like NvimTree neotree
678
+
-- defx, db_ui
679
+
auto_enter = true,
680
+
auto_preview = true,
681
+
virt_text = 'โ',
682
+
jump_key = 'o',
683
+
-- auto refresh when change buffer
684
+
auto_refresh = true,
685
+
},
686
+
})
687
+
688
+
capabilities = require('cmp_nvim_lsp').default_capabilities()
689
+
690
+
-- fennel-ls is bleeding edge
691
+
local lspconfig = require('lspconfig')
692
+
require("lspconfig.configs")["fennel-ls"] = {
693
+
default_config = {
694
+
cmd = {"fennel-ls"},
695
+
filetypes = {"fennel"},
696
+
root_dir = function(dir) return lspconfig.util.find_git_ancestor(dir) end,
697
+
settings = {}
698
+
}
699
+
}
700
+
701
+
local servers = { 'clojure_lsp', 'terraform_lsp', 'zls', 'pyright', 'rust_analyzer', 'ts_ls', 'lua_ls', 'nil_ls', 'gopls', 'bashls'}
702
+
for _, lsp in ipairs(servers) do
703
+
lspconfig[lsp].setup {
704
+
on_attach = function(client, bufnr)
705
+
navic.attach(client, bufnr)
706
+
end,
707
+
capabilities = capabilities,
708
+
}
709
+
end
710
+
711
+
-- fennel-ls doesn't support navic
712
+
lspconfig['fennel-ls'].setup {
713
+
on_attach = function(client, bufnr)
714
+
-- fennel-ls setup without navic
715
+
end,
716
+
capabilities = capabilities,
717
+
}
718
+
719
+
-- deprecated pylsp
720
+
-- require('lspconfig').pylsp.setup {
721
+
-- on_attach = function(client, bufnr)
722
+
-- format.on_attach(client)
723
+
-- navic.attach(client, bufnr)
724
+
-- end,
725
+
-- capabilities = capabilities,
726
+
-- settings = {
727
+
-- pylsp = {
728
+
-- configurationSources = { "flake8", "mypy", "black" },
729
+
-- plugins = {
730
+
-- black = {enabled = true},
731
+
-- jedi_signature_help = {enabled = true},
732
+
-- jedi_completion = { include_params = true },
733
+
-- pylsp_mypy={ enabled = true },
734
+
-- pycodestyle={
735
+
-- enabled=true,
736
+
-- ignore={'E501', 'E231'},
737
+
-- maxLineLength=120,
738
+
-- },
739
+
-- },
740
+
-- },
741
+
-- },
742
+
-- }
743
+
744
+
require('gitsigns').setup { sign_priority=80 }
745
+
746
+
-- treesitter
747
+
require('nvim-treesitter.configs').setup {
748
+
-- parser_install_dir = "~/.local/share/nvim/site/parser/",
749
+
-- ensure_installed={'nix', 'clojure', 'python', 'fennel', 'lua', 'html', 'css', 'regex', 'supercollider', 'beancount', 'janet'},
750
+
highlight = { enabled = true, additional_vim_regex_highting = true, },
751
+
textobjects = { enabled = true },
752
+
}
753
+
-- 'glsl' needs c++ compiler lol
754
+
755
+
-- lualine
756
+
local navic = require("nvim-navic")
757
+
require('lualine').setup {
758
+
options = { theme = 'ayu' },
759
+
sections = {
760
+
lualine_c = {
761
+
'filename', { navic.get_location, condition=navic.is_available },
762
+
},
763
+
lualine_y = {
764
+
function()
765
+
local msg = 'No Active Lsp'
766
+
local buf_ft = vim.api.nvim_buf_get_option(0, 'filetype')
767
+
local clients = vim.lsp.get_clients()
768
+
if next(clients) == nil then
769
+
return msg
770
+
end
771
+
for _, client in ipairs(clients) do
772
+
local filetypes = client.config.filetypes
773
+
if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then
774
+
return client.name
775
+
end
776
+
end
777
+
return msg
778
+
end
779
+
},
780
+
lualine_x = {'filetype'}
781
+
}
782
+
}
783
+
784
+
-- nvim-lint
785
+
-- require('lint').linters_by_ft = {
786
+
-- markdown = {'vale'},
787
+
-- }
788
+
789
+
-- f_term
790
+
local map = vim.api.nvim_set_keymap
791
+
local opts = { noremap = true, silent = true }
792
+
map('n', '<TAB>', '<CMD>lua require("FTerm").toggle()<CR>', opts)
793
+
map('t', '<TAB>', '<C-\\><C-n><CMD>lua require("FTerm").toggle()<CR>', opts)
794
+
795
+
-- Custom functions
796
+
function update_date()
797
+
local time = os.date("%Y-%m-%d %H:%M")
798
+
local message = "%update " .. time
799
+
local lines = vim.api.nvim_buf_get_lines(0, 0,4,false)
800
+
for i=1,4,1 do
801
+
if (lines[i]:len() == 0) then
802
+
vim.api.nvim_buf_set_lines(0, i-1, i, false, {message, ""})
803
+
return
804
+
end
805
+
end
806
+
if (lines[4]:len() ~= 0) then
807
+
vim.api.nvim_buf_set_lines(0, 3, 4, false, {message})
808
+
end
809
+
return
810
+
end
811
+
812
+
vim.api.nvim_create_autocmd(
813
+
"BufWritePre",
814
+
{ pattern = { "*.wiki" }, callback = update_date}
815
+
)
816
+
817
+
-- set spelling for text files
818
+
vim.api.nvim_create_autocmd(
819
+
{ "BufRead", "BufNewFile" },
820
+
{ pattern = { "*.wiki", "*.txt", "*.md", "*.tex" },
821
+
command = "setlocal spell" }
822
+
)
823
+
vim.api.nvim_create_autocmd(
824
+
"FileType",
825
+
{ pattern = { "mail" },
826
+
command = "setlocal spell" }
827
+
)
828
+
829
+
-- auto session
830
+
vim.o.sessionoptions="blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions"
831
+
require('auto-session').setup {
832
+
log_level = 'error',
833
+
auto_session_suppress_dirs = {'~/', '/tmp', '/'},
834
+
auto_session_enable_last_session = false,
835
+
auto_session_root_dir = vim.fn.stdpath('data').."/sessions/",
836
+
auto_session_enabled = true,
837
+
auto_save_enabled = nil,
838
+
auto_restore_enabled = nil,
839
+
auto_session_create_enabled = nil,
840
+
}
841
+
842
+
require("which-key").setup{}
843
+
require('leap').set_default_keymaps()
844
+
845
+
-- supercollider
846
+
local scnvim = require 'scnvim'
847
+
local map = scnvim.map
848
+
local map_expr = scnvim.map_expr
849
+
scnvim.setup {
850
+
keymaps = {
851
+
['<localleader>e'] = map('editor.send_line', {'i', 'n'}),
852
+
['<localleader>s'] = map_expr('CmdPeriod.run', {'i', 'n'}),
853
+
['<localleader>t'] = {
854
+
map('editor.send_block', {'i', 'n'}),
855
+
map('editor.send_selection', 'x'),
856
+
},
857
+
['<CR>'] = map('postwin.toggle'),
858
+
['<M-CR>'] = map('postwin.toggle', 'i'),
859
+
['<M-L>'] = map('postwin.clear', {'n', 'i'}),
860
+
['<C-k>'] = map('signature.show', {'n', 'i'}),
861
+
['<F12>'] = map('sclang.hard_stop', {'n', 'x', 'i'}),
862
+
['<leader>st'] = map('sclang.start'),
863
+
['<leader>sk'] = map('sclang.recompile'),
864
+
['<F1>'] = map_expr('s.boot'),
865
+
['<F2>'] = map_expr('s.meter'),
866
+
}
867
+
}
868
+
-- You gotta run :SCNvimGenerateAssets for this first
869
+
-- require("luasnip").add_snippets("supercollider", require("scnvim/utils").get_snippets())
870
+
871
+
-- zk
872
+
require("zk").setup()
873
+
-- vim.api.nvim_set_keymap("n", "<leader>zn", "<Cmd>ZkNew { title = vim.fn.input('Title: ') }<CR>", opts)
874
+
875
+
-- Open notes.
876
+
vim.api.nvim_set_keymap("n", "<leader>zo", "<Cmd>ZkNotes { sort = { 'modified' } }<CR>", opts)
877
+
-- Open notes associated with the selected tags.
878
+
vim.api.nvim_set_keymap("n", "<leader>zt", "<Cmd>ZkTags<CR>", opts)
879
+
880
+
local map = vim.api.nvim_set_keymap
881
+
-- Search for the notes matching a given query.
882
+
vim.api.nvim_set_keymap("n", "<leader>zf", "<Cmd>ZkNotes { sort = { 'modified' }, match = { vim.fn.input('Search: ') } }<CR>", opts)
883
+
-- Search for the notes matching the current visual selection.
884
+
vim.api.nvim_set_keymap("v", "<leader>zf", ":'<,'>ZkMatch<CR>", opts)
885
+
map("n", "<CR>", "<Cmd>lua vim.lsp.buf.definition()<CR>", opts)
886
+
887
+
-- Create a new note after asking for its title.
888
+
-- This overrides the global `<leader>zn` mapping to create the note in the same directory as the current buffer.
889
+
-- map("n", "<leader>zn", "<Cmd>ZkNew { dir = vim.fn.expand('%:p:h'), title = vim.fn.input('Title: ') }<CR>", opts)
890
+
-- Create a new note in the same directory as the current buffer, using the current selection for title.
891
+
-- map("v", "<leader>znt", ":'<,'>ZkNewFromTitleSelection { dir = vim.fn.expand('%:p:h') }<CR>", opts)
892
+
-- Create a new note in the same directory as the current buffer, using the current selection for note content and asking for its title.
893
+
map("v", "<leader>znc", ":'<,'>ZkNewFromContentSelection { dir = vim.fn.expand('%:p:h'), title = vim.fn.input('Title: ') }<CR>", opts)
894
+
895
+
-- Open notes linking to the current buffer.
896
+
map("n", "<leader>zb", "<Cmd>ZkBacklinks<CR>", opts)
897
+
-- Alternative for backlinks using pure LSP and showing the source context.
898
+
--map('n', '<leader>zb', '<Cmd>lua vim.lsp.buf.references()<CR>', opts)
899
+
-- Open notes linked by the current buffer.
900
+
map("n", "<leader>zl", "<Cmd>ZkLinks<CR>", opts)
901
+
902
+
-- Preview a linked note.
903
+
map("n", "K", "<Cmd>lua vim.lsp.buf.hover()<CR>", opts)
904
+
-- Open the code actions for a visual selection.
905
+
map("v", "<leader>za", ":'<,'>lua vim.lsp.buf.range_code_action()<CR>", opts)
906
+
907
+
-- zen mode
908
+
require('zen-mode').setup{
909
+
window = {
910
+
backdrop = 1.0, -- shade the backdrop of the Zen window. Set to 1 to keep the same as Normal
911
+
-- height and width can be:
912
+
-- * an absolute number of cells when > 1
913
+
-- * a percentage of the width / height of the editor when <= 1
914
+
-- * a function that returns the width or the height
915
+
width = 120, -- width of the Zen window
916
+
height = 1, -- height of the Zen window
917
+
-- by default, no options are changed for the Zen window
918
+
-- uncomment any of the options below, or add other vim.wo options you want to apply
919
+
options = {
920
+
signcolumn = "no", -- disable signcolumn
921
+
number = false, -- disable number column
922
+
relativenumber = false, -- disable relative numbers
923
+
cursorline = false, -- disable cursorline
924
+
cursorcolumn = false, -- disable cursor column
925
+
foldcolumn = "0", -- disable fold column
926
+
list = false, -- disable whitespace characters
927
+
},
928
+
},
929
+
plugins = {
930
+
-- disable some global vim options (vim.o...)
931
+
-- comment the lines to not apply the options
932
+
options = {
933
+
enabled = true,
934
+
ruler = false, -- disables the ruler text in the cmd line area
935
+
showcmd = false, -- disables the command in the last line of the screen
936
+
},
937
+
twilight = { enabled = true }, -- enable to start Twilight when zen mode opens
938
+
gitsigns = { enabled = false }, -- disables git signs
939
+
tmux = { enabled = false }, -- disables the tmux statusline
940
+
-- this will change the font size on kitty when in zen mode
941
+
-- to make this work, you need to set the following kitty options:
942
+
-- - allow_remote_control socket-only
943
+
-- - listen_on unix:/tmp/kitty
944
+
kitty = {
945
+
enabled = true,
946
+
font = "+2", -- font size increment
947
+
},
948
+
},
949
+
}
950
+
require('twilight').setup{}
951
+
952
+
-- hologram
953
+
require('hologram').setup{
954
+
auto_display = false -- WIP automatic markdown image display, may be prone to breaking
955
+
}
956
+
957
+
-- Setup Navigator.nvim
958
+
require('Navigator').setup {
959
+
disable_on_zoom = true,
960
+
mux = 'auto', -- auto-detect tmux
961
+
}
962
+
963
+
-- Set up Navigator.nvim keybindings
964
+
vim.keymap.set({'n', 't'}, '<M-h>', '<CMD>NavigatorLeft<CR>')
965
+
vim.keymap.set({'n', 't'}, '<M-j>', '<CMD>NavigatorDown<CR>')
966
+
vim.keymap.set({'n', 't'}, '<M-k>', '<CMD>NavigatorUp<CR>')
967
+
vim.keymap.set({'n', 't'}, '<M-l>', '<CMD>NavigatorRight<CR>')
968
+
969
+
-- Disable Ctrl+V in nvim so Kitty can handle paste
970
+
vim.keymap.set({'n', 'v', 'i'}, '<C-v>', '<Nop>', {noremap = true, silent = true})
971
+
972
+
-- Pane resizing with Alt+Shift+hjkl (to match tmux)
973
+
vim.keymap.set('n', '<M-S-h>', '<Cmd>vertical resize -2<CR>', {silent = true})
974
+
vim.keymap.set('n', '<M-S-j>', '<Cmd>resize -2<CR>', {silent = true})
975
+
vim.keymap.set('n', '<M-S-k>', '<Cmd>resize +2<CR>', {silent = true})
976
+
vim.keymap.set('n', '<M-S-l>', '<Cmd>vertical resize +2<CR>', {silent = true})
977
+
978
+
EOF
979
+
980
+
'';
981
+
extraPackages = with pkgs // customPlugins; [
982
+
# used to compile tree-sitter grammar
983
+
python-with-my-packages
984
nodejs
985
+
clojure-lsp
986
+
clojure
987
+
nil
988
+
terraform-lsp
989
+
rust-analyzer
990
+
clj-kondo
991
+
zls
992
+
gopls
993
+
gcc
994
+
pyright
995
+
shellcheck
996
+
proselint
997
+
statix
998
+
nodePackages.typescript
999
+
nodePackages.typescript-language-server
1000
+
nodePackages.bash-language-server
1001
+
luajitPackages.lua-lsp
1002
+
fennel-ls
1003
+
nixfmt-rfc-style
1004
+
shfmt
1005
+
zk
1006
];
1007
1008
+
plugins = with pkgs.vimPlugins // customPlugins; [
1009
+
# ui
1010
+
lualine-nvim
1011
+
fzf-vim
1012
+
neo-tree-nvim
1013
+
outline-nvim
1014
+
noice-nvim
1015
+
nui-nvim
1016
+
trouble-nvim
1017
+
neovim-ayu
1018
+
rainbow_parentheses-vim
1019
+
vim-surround
1020
+
vim-devicons
1021
+
nvim-web-devicons
1022
+
undotree
1023
+
telescope-nvim
1024
+
plenary-nvim
1025
+
nvim-navic
1026
+
(nvim-treesitter.withPlugins (p: [ p.nix p.clojure p.python p.fennel p.lua p.html p.css p.regex p.supercollider p.beancount p.markdown p.glsl p.yaml p.toml p.dockerfile p.json ]))
1027
+
nvim-treesitter-context
1028
+
my-fterm
1029
+
barbar-nvim
1030
+
auto-session
1031
+
my-marks
1032
+
which-key-nvim
1033
+
nvim-peekup
1034
+
zen-mode-nvim
1035
+
twilight-nvim
1036
+
my-lspsaga
1037
+
vim-dasht
1038
+
1039
+
# language
1040
+
vim-nix
1041
+
vim-elixir
1042
+
emmet-vim
1043
+
csv-vim
1044
+
direnv-vim
1045
+
zig-vim
1046
+
conjure
1047
+
1048
+
# kitaab stuff
1049
+
vimwiki
1050
+
taskwiki
1051
+
vim-zettel
1052
+
hologram-nvim
1053
+
zk-nvim
1054
+
1055
+
# lsp stuff
1056
+
# nvim-lint
1057
+
nvim-lspconfig
1058
+
nvim-cmp
1059
+
cmp-nvim-lsp
1060
+
cmp-treesitter
1061
+
nvim-lsp-ts-utils
1062
+
cmp-conjure
1063
+
cmp-buffer
1064
+
cmp-path
1065
+
cmp-spell
1066
+
nvim-autopairs
1067
+
cmp_luasnip
1068
+
luasnip
1069
+
conform-nvim
1070
+
friendly-snippets
1071
+
lspkind-nvim
1072
+
1073
+
# git stuff
1074
+
vim-fugitive
1075
+
gitsigns-nvim
1076
+
fzf-checkout-vim
1077
+
1078
+
# Clojure stuff
1079
+
# conjure
1080
+
vim-sexp
1081
+
vim-sexp-mappings-for-regular-people
1082
+
fennel-vim
1083
+
1084
+
vim-tidal
1085
+
# experimental
1086
+
nvim-luapad
1087
+
scnvim
1088
+
leap
1089
+
Navigator-nvim
1090
+
vim-beancount
1091
+
# vimtex
1092
+
# custom
1093
+
yuck-vim
1094
+
nvim-parinfer
1095
+
# vim-processing
1096
+
];
1097
+
withPython3 = true;
1098
+
extraPython3Packages = pkgs: with pkgs; [ tasklib six packaging ];
1099
vimAlias = true;
1100
};
1101
}
-8
home/profiles/nvim/lazynvim/.config/nvim/.gitignore
-8
home/profiles/nvim/lazynvim/.config/nvim/.gitignore
-15
home/profiles/nvim/lazynvim/.config/nvim/.neoconf.json
-15
home/profiles/nvim/lazynvim/.config/nvim/.neoconf.json
-201
home/profiles/nvim/lazynvim/.config/nvim/LICENSE
-201
home/profiles/nvim/lazynvim/.config/nvim/LICENSE
···
1
-
Apache License
2
-
Version 2.0, January 2004
3
-
http://www.apache.org/licenses/
4
-
5
-
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
-
7
-
1. Definitions.
8
-
9
-
"License" shall mean the terms and conditions for use, reproduction,
10
-
and distribution as defined by Sections 1 through 9 of this document.
11
-
12
-
"Licensor" shall mean the copyright owner or entity authorized by
13
-
the copyright owner that is granting the License.
14
-
15
-
"Legal Entity" shall mean the union of the acting entity and all
16
-
other entities that control, are controlled by, or are under common
17
-
control with that entity. For the purposes of this definition,
18
-
"control" means (i) the power, direct or indirect, to cause the
19
-
direction or management of such entity, whether by contract or
20
-
otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
-
outstanding shares, or (iii) beneficial ownership of such entity.
22
-
23
-
"You" (or "Your") shall mean an individual or Legal Entity
24
-
exercising permissions granted by this License.
25
-
26
-
"Source" form shall mean the preferred form for making modifications,
27
-
including but not limited to software source code, documentation
28
-
source, and configuration files.
29
-
30
-
"Object" form shall mean any form resulting from mechanical
31
-
transformation or translation of a Source form, including but
32
-
not limited to compiled object code, generated documentation,
33
-
and conversions to other media types.
34
-
35
-
"Work" shall mean the work of authorship, whether in Source or
36
-
Object form, made available under the License, as indicated by a
37
-
copyright notice that is included in or attached to the work
38
-
(an example is provided in the Appendix below).
39
-
40
-
"Derivative Works" shall mean any work, whether in Source or Object
41
-
form, that is based on (or derived from) the Work and for which the
42
-
editorial revisions, annotations, elaborations, or other modifications
43
-
represent, as a whole, an original work of authorship. For the purposes
44
-
of this License, Derivative Works shall not include works that remain
45
-
separable from, or merely link (or bind by name) to the interfaces of,
46
-
the Work and Derivative Works thereof.
47
-
48
-
"Contribution" shall mean any work of authorship, including
49
-
the original version of the Work and any modifications or additions
50
-
to that Work or Derivative Works thereof, that is intentionally
51
-
submitted to Licensor for inclusion in the Work by the copyright owner
52
-
or by an individual or Legal Entity authorized to submit on behalf of
53
-
the copyright owner. For the purposes of this definition, "submitted"
54
-
means any form of electronic, verbal, or written communication sent
55
-
to the Licensor or its representatives, including but not limited to
56
-
communication on electronic mailing lists, source code control systems,
57
-
and issue tracking systems that are managed by, or on behalf of, the
58
-
Licensor for the purpose of discussing and improving the Work, but
59
-
excluding communication that is conspicuously marked or otherwise
60
-
designated in writing by the copyright owner as "Not a Contribution."
61
-
62
-
"Contributor" shall mean Licensor and any individual or Legal Entity
63
-
on behalf of whom a Contribution has been received by Licensor and
64
-
subsequently incorporated within the Work.
65
-
66
-
2. Grant of Copyright License. Subject to the terms and conditions of
67
-
this License, each Contributor hereby grants to You a perpetual,
68
-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
-
copyright license to reproduce, prepare Derivative Works of,
70
-
publicly display, publicly perform, sublicense, and distribute the
71
-
Work and such Derivative Works in Source or Object form.
72
-
73
-
3. Grant of Patent License. Subject to the terms and conditions of
74
-
this License, each Contributor hereby grants to You a perpetual,
75
-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
-
(except as stated in this section) patent license to make, have made,
77
-
use, offer to sell, sell, import, and otherwise transfer the Work,
78
-
where such license applies only to those patent claims licensable
79
-
by such Contributor that are necessarily infringed by their
80
-
Contribution(s) alone or by combination of their Contribution(s)
81
-
with the Work to which such Contribution(s) was submitted. If You
82
-
institute patent litigation against any entity (including a
83
-
cross-claim or counterclaim in a lawsuit) alleging that the Work
84
-
or a Contribution incorporated within the Work constitutes direct
85
-
or contributory patent infringement, then any patent licenses
86
-
granted to You under this License for that Work shall terminate
87
-
as of the date such litigation is filed.
88
-
89
-
4. Redistribution. You may reproduce and distribute copies of the
90
-
Work or Derivative Works thereof in any medium, with or without
91
-
modifications, and in Source or Object form, provided that You
92
-
meet the following conditions:
93
-
94
-
(a) You must give any other recipients of the Work or
95
-
Derivative Works a copy of this License; and
96
-
97
-
(b) You must cause any modified files to carry prominent notices
98
-
stating that You changed the files; and
99
-
100
-
(c) You must retain, in the Source form of any Derivative Works
101
-
that You distribute, all copyright, patent, trademark, and
102
-
attribution notices from the Source form of the Work,
103
-
excluding those notices that do not pertain to any part of
104
-
the Derivative Works; and
105
-
106
-
(d) If the Work includes a "NOTICE" text file as part of its
107
-
distribution, then any Derivative Works that You distribute must
108
-
include a readable copy of the attribution notices contained
109
-
within such NOTICE file, excluding those notices that do not
110
-
pertain to any part of the Derivative Works, in at least one
111
-
of the following places: within a NOTICE text file distributed
112
-
as part of the Derivative Works; within the Source form or
113
-
documentation, if provided along with the Derivative Works; or,
114
-
within a display generated by the Derivative Works, if and
115
-
wherever such third-party notices normally appear. The contents
116
-
of the NOTICE file are for informational purposes only and
117
-
do not modify the License. You may add Your own attribution
118
-
notices within Derivative Works that You distribute, alongside
119
-
or as an addendum to the NOTICE text from the Work, provided
120
-
that such additional attribution notices cannot be construed
121
-
as modifying the License.
122
-
123
-
You may add Your own copyright statement to Your modifications and
124
-
may provide additional or different license terms and conditions
125
-
for use, reproduction, or distribution of Your modifications, or
126
-
for any such Derivative Works as a whole, provided Your use,
127
-
reproduction, and distribution of the Work otherwise complies with
128
-
the conditions stated in this License.
129
-
130
-
5. Submission of Contributions. Unless You explicitly state otherwise,
131
-
any Contribution intentionally submitted for inclusion in the Work
132
-
by You to the Licensor shall be under the terms and conditions of
133
-
this License, without any additional terms or conditions.
134
-
Notwithstanding the above, nothing herein shall supersede or modify
135
-
the terms of any separate license agreement you may have executed
136
-
with Licensor regarding such Contributions.
137
-
138
-
6. Trademarks. This License does not grant permission to use the trade
139
-
names, trademarks, service marks, or product names of the Licensor,
140
-
except as required for reasonable and customary use in describing the
141
-
origin of the Work and reproducing the content of the NOTICE file.
142
-
143
-
7. Disclaimer of Warranty. Unless required by applicable law or
144
-
agreed to in writing, Licensor provides the Work (and each
145
-
Contributor provides its Contributions) on an "AS IS" BASIS,
146
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
-
implied, including, without limitation, any warranties or conditions
148
-
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
-
PARTICULAR PURPOSE. You are solely responsible for determining the
150
-
appropriateness of using or redistributing the Work and assume any
151
-
risks associated with Your exercise of permissions under this License.
152
-
153
-
8. Limitation of Liability. In no event and under no legal theory,
154
-
whether in tort (including negligence), contract, or otherwise,
155
-
unless required by applicable law (such as deliberate and grossly
156
-
negligent acts) or agreed to in writing, shall any Contributor be
157
-
liable to You for damages, including any direct, indirect, special,
158
-
incidental, or consequential damages of any character arising as a
159
-
result of this License or out of the use or inability to use the
160
-
Work (including but not limited to damages for loss of goodwill,
161
-
work stoppage, computer failure or malfunction, or any and all
162
-
other commercial damages or losses), even if such Contributor
163
-
has been advised of the possibility of such damages.
164
-
165
-
9. Accepting Warranty or Additional Liability. While redistributing
166
-
the Work or Derivative Works thereof, You may choose to offer,
167
-
and charge a fee for, acceptance of support, warranty, indemnity,
168
-
or other liability obligations and/or rights consistent with this
169
-
License. However, in accepting such obligations, You may act only
170
-
on Your own behalf and on Your sole responsibility, not on behalf
171
-
of any other Contributor, and only if You agree to indemnify,
172
-
defend, and hold each Contributor harmless for any liability
173
-
incurred by, or claims asserted against, such Contributor by reason
174
-
of your accepting any such warranty or additional liability.
175
-
176
-
END OF TERMS AND CONDITIONS
177
-
178
-
APPENDIX: How to apply the Apache License to your work.
179
-
180
-
To apply the Apache License to your work, attach the following
181
-
boilerplate notice, with the fields enclosed by brackets "[]"
182
-
replaced with your own identifying information. (Don't include
183
-
the brackets!) The text should be enclosed in the appropriate
184
-
comment syntax for the file format. We also recommend that a
185
-
file or class name and description of purpose be included on the
186
-
same "printed page" as the copyright notice for easier
187
-
identification within third-party archives.
188
-
189
-
Copyright [yyyy] [name of copyright owner]
190
-
191
-
Licensed under the Apache License, Version 2.0 (the "License");
192
-
you may not use this file except in compliance with the License.
193
-
You may obtain a copy of the License at
194
-
195
-
http://www.apache.org/licenses/LICENSE-2.0
196
-
197
-
Unless required by applicable law or agreed to in writing, software
198
-
distributed under the License is distributed on an "AS IS" BASIS,
199
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
-
See the License for the specific language governing permissions and
201
-
limitations under the License.
···
-4
home/profiles/nvim/lazynvim/.config/nvim/README.md
-4
home/profiles/nvim/lazynvim/.config/nvim/README.md
-2
home/profiles/nvim/lazynvim/.config/nvim/init.lua
-2
home/profiles/nvim/lazynvim/.config/nvim/init.lua
-60
home/profiles/nvim/lazynvim/.config/nvim/lazy-lock.json
-60
home/profiles/nvim/lazynvim/.config/nvim/lazy-lock.json
···
1
-
{
2
-
"LazyVim": { "branch": "main", "commit": "12818a6cb499456f4903c5d8e68af43753ebc869" },
3
-
"SchemaStore.nvim": { "branch": "main", "commit": "54a2cf0105166d5a48172e81f12a2bf10cfc8b2c" },
4
-
"aerial.nvim": { "branch": "master", "commit": "e585934fef8d253dbc5655cff3deb3444e064e6c" },
5
-
"bufferline.nvim": { "branch": "main", "commit": "0b2fd861eee7595015b6561dade52fb060be10c4" },
6
-
"catppuccin": { "branch": "main", "commit": "4fd72a9ab64b393c2c22b168508fd244877fec96" },
7
-
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
8
-
"cmp-emoji": { "branch": "main", "commit": "e8398e2adf512a03bb4e1728ca017ffeac670a9f" },
9
-
"cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" },
10
-
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
11
-
"conform.nvim": { "branch": "master", "commit": "62eba813b7501b39612146cbf29cd07f1d4ac29c" },
12
-
"dashboard-nvim": { "branch": "master", "commit": "fabf5feec96185817c732d47d363f34034212685" },
13
-
"dressing.nvim": { "branch": "master", "commit": "c5775a888adbc50652cb370073fcfec963eca93e" },
14
-
"flash.nvim": { "branch": "main", "commit": "34c7be146a91fec3555c33fe89c7d643f6ef5cf1" },
15
-
"friendly-snippets": { "branch": "main", "commit": "00ebcaa159e817150bd83bfe2d51fa3b3377d5c4" },
16
-
"gitsigns.nvim": { "branch": "main", "commit": "562dc47189ad3c8696dbf460d38603a74d544849" },
17
-
"grug-far.nvim": { "branch": "main", "commit": "ebab68b2150079732ae8074eefb261a124824139" },
18
-
"indent-blankline.nvim": { "branch": "master", "commit": "db926997af951da38e5004ec7b9fbdc480b48f5d" },
19
-
"lazy.nvim": { "branch": "main", "commit": "077102c5bfc578693f12377846d427f49bc50076" },
20
-
"lazydev.nvim": { "branch": "main", "commit": "491452cf1ca6f029e90ad0d0368848fac717c6d2" },
21
-
"lualine.nvim": { "branch": "master", "commit": "b431d228b7bbcdaea818bdc3e25b8cdbe861f056" },
22
-
"luvit-meta": { "branch": "main", "commit": "ce76f6f6cdc9201523a5875a4471dcfe0186eb60" },
23
-
"mason-lspconfig.nvim": { "branch": "main", "commit": "482350b050bd413931c2cdd4857443c3da7d57cb" },
24
-
"mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" },
25
-
"mini.ai": { "branch": "main", "commit": "a9b992b13d22a8db8df6beac25afa59a10b5584d" },
26
-
"mini.icons": { "branch": "main", "commit": "12e7b5d47bfc1b4c5ba4278fb49ec9100138df14" },
27
-
"mini.pairs": { "branch": "main", "commit": "927d19cbdd0e752ab1c7eed87072e71d2cd6ff51" },
28
-
"mini.surround": { "branch": "main", "commit": "d8913ed23be0a1a4585ae34414821cc343a46174" },
29
-
"neo-tree.nvim": { "branch": "main", "commit": "206241e451c12f78969ff5ae53af45616ffc9b72" },
30
-
"neovim-ayu": { "branch": "master", "commit": "6993189dd0ee38299879a1a0064718a8392e8713" },
31
-
"noice.nvim": { "branch": "main", "commit": "448bb9c524a7601035449210838e374a30153172" },
32
-
"nui.nvim": { "branch": "main", "commit": "61574ce6e60c815b0a0c4b5655b8486ba58089a1" },
33
-
"nvim-cmp": { "branch": "main", "commit": "ae644feb7b67bf1ce4260c231d1d4300b19c6f30" },
34
-
"nvim-lint": { "branch": "master", "commit": "debabca63c0905b59ce596a55a8e33eafdf66342" },
35
-
"nvim-lspconfig": { "branch": "master", "commit": "911167921d49cd5c1c9b2436031d0da3945e787f" },
36
-
"nvim-notify": { "branch": "master", "commit": "d333b6f167900f6d9d42a59005d82919830626bf" },
37
-
"nvim-snippets": { "branch": "main", "commit": "56b4052f71220144689caaa2e5b66222ba5661eb" },
38
-
"nvim-treesitter": { "branch": "master", "commit": "04401b5dd17c3419dae5141677bd256f52d54733" },
39
-
"nvim-treesitter-textobjects": { "branch": "master", "commit": "41e3abf6bfd9a9a681eb1f788bdeba91c9004b2b" },
40
-
"nvim-ts-autotag": { "branch": "main", "commit": "0cb76eea80e9c73b88880f0ca78fbd04c5bdcac7" },
41
-
"outline.nvim": { "branch": "main", "commit": "02a18194b3d2adfb537dd1a9f21d1fc29dd31382" },
42
-
"persistence.nvim": { "branch": "main", "commit": "f6aad7dde7fcf54148ccfc5f622c6d5badd0cc3d" },
43
-
"plenary.nvim": { "branch": "master", "commit": "ec289423a1693aeae6cd0d503bac2856af74edaa" },
44
-
"sg.nvim": { "branch": "master", "commit": "8bdd4d19da2268072708d5fe18fda9c23e16509d" },
45
-
"tailwindcss-colorizer-cmp.nvim": { "branch": "main", "commit": "3d3cd95e4a4135c250faf83dd5ed61b8e5502b86" },
46
-
"telescope-fzf-native.nvim": { "branch": "main", "commit": "cf48d4dfce44e0b9a2e19a008d6ec6ea6f01a83b" },
47
-
"telescope-terraform-doc.nvim": { "branch": "main", "commit": "7ac642765615e6ff164ecfc82eb278aa68d06840" },
48
-
"telescope-terraform.nvim": { "branch": "main", "commit": "072c97023797ca1a874668aaa6ae0b74425335df" },
49
-
"telescope.nvim": { "branch": "master", "commit": "5972437de807c3bc101565175da66a1aa4f8707a" },
50
-
"todo-comments.nvim": { "branch": "main", "commit": "8f45f353dc3649cb9b44cecda96827ea88128584" },
51
-
"tokyonight.nvim": { "branch": "main", "commit": "b0e7c7382a7e8f6456f2a95655983993ffda745e" },
52
-
"trouble.nvim": { "branch": "main", "commit": "6efc446226679fda0547c0fd6a7892fd5f5b15d8" },
53
-
"ts-comments.nvim": { "branch": "main", "commit": "98d7d4dec0af1312d38e288f800bbf6ff562b6ab" },
54
-
"vim-dadbod": { "branch": "master", "commit": "7888cb7164d69783d3dce4e0283decd26b82538b" },
55
-
"vim-dadbod-completion": { "branch": "master", "commit": "880f7e9f2959e567c718d52550f9fae1aa07aa81" },
56
-
"vim-dadbod-ui": { "branch": "master", "commit": "0f51d8de368c8c6220973e8acd156d17da746f4c" },
57
-
"vim-fugitive": { "branch": "master", "commit": "0444df68cd1cdabc7453d6bd84099458327e5513" },
58
-
"vim-helm": { "branch": "master", "commit": "ae1ebc160d2b9b90108477ab10df7a4fc501e358" },
59
-
"which-key.nvim": { "branch": "main", "commit": "6c1584eb76b55629702716995cca4ae2798a9cca" }
60
-
}
···
-19
home/profiles/nvim/lazynvim/.config/nvim/lazyvim.json
-19
home/profiles/nvim/lazynvim/.config/nvim/lazyvim.json
···
1
-
{
2
-
"extras": [
3
-
"lazyvim.plugins.extras.editor.aerial",
4
-
"lazyvim.plugins.extras.editor.outline",
5
-
"lazyvim.plugins.extras.lang.go",
6
-
"lazyvim.plugins.extras.lang.helm",
7
-
"lazyvim.plugins.extras.lang.json",
8
-
"lazyvim.plugins.extras.lang.nix",
9
-
"lazyvim.plugins.extras.lang.sql",
10
-
"lazyvim.plugins.extras.lang.svelte",
11
-
"lazyvim.plugins.extras.lang.tailwind",
12
-
"lazyvim.plugins.extras.lang.terraform",
13
-
"lazyvim.plugins.extras.lang.typescript"
14
-
],
15
-
"news": {
16
-
"NEWS.md": "6520"
17
-
},
18
-
"version": 6
19
-
}
···
-3
home/profiles/nvim/lazynvim/.config/nvim/lua/config/autocmds.lua
-3
home/profiles/nvim/lazynvim/.config/nvim/lua/config/autocmds.lua
-21
home/profiles/nvim/lazynvim/.config/nvim/lua/config/keymaps.lua
-21
home/profiles/nvim/lazynvim/.config/nvim/lua/config/keymaps.lua
···
1
-
-- Keymaps are automatically loaded on the VeryLazy event
2
-
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
3
-
-- Add any additional keymaps here
4
-
local map = vim.keymap.set
5
-
6
-
-- Navigation
7
-
map("n", "gt", "<cmd>bnext<cr>", { desc = "Next Buffer" })
8
-
map("n", "gT", "<cmd>bprevious<cr>", { desc = "Prev Buffer" })
9
-
map("n", "gq", "<cmd>bdelete<cr>", { desc = "Prev Buffer" })
10
-
map("n", "<leader>q", "<cmd>q<cr>", { desc = "Quit" })
11
-
12
-
-- Git
13
-
map("n", "<leader>gs", "<cmd>:G<cr>", { desc = "Git Status" })
14
-
map("n", "<leader>gb", "<cmd>Telescope git_branches<cr>", { desc = "Git Status" })
15
-
map("n", "<leader>gp", "<cmd>:G! push<cr>", { desc = "Git Status" })
16
-
17
-
-- Telescope
18
-
map("n", "<leader>fs", "<cmd>Telescope live_grep<cr>", { desc = "Telescop Live Grep" })
19
-
20
-
-- Cody
21
-
map("n", "<leader>co", "<cmd>CodyChat<cr>", { desc = "Cody Chat" })
···
-57
home/profiles/nvim/lazynvim/.config/nvim/lua/config/lazy.lua
-57
home/profiles/nvim/lazynvim/.config/nvim/lua/config/lazy.lua
···
1
-
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
2
-
if not (vim.uv or vim.loop).fs_stat(lazypath) then
3
-
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
4
-
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
5
-
if vim.v.shell_error ~= 0 then
6
-
vim.api.nvim_echo({
7
-
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
8
-
{ out, "WarningMsg" },
9
-
{ "\nPress any key to exit..." },
10
-
}, true, {})
11
-
vim.fn.getchar()
12
-
os.exit(1)
13
-
end
14
-
end
15
-
vim.opt.rtp:prepend(lazypath)
16
-
17
-
require("lazy").setup({
18
-
spec = {
19
-
-- add LazyVim and import its plugins
20
-
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
21
-
-- import/override with your plugins
22
-
{ import = "plugins" },
23
-
},
24
-
defaults = {
25
-
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
26
-
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
27
-
lazy = false,
28
-
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
29
-
-- have outdated releases, which may break your Neovim install.
30
-
version = false, -- always use the latest git commit
31
-
-- version = "*", -- try installing the latest stable version for plugins that support semver
32
-
},
33
-
install = { colorscheme = { "tokyonight", "habamax" } },
34
-
checker = {
35
-
enabled = true, -- check for plugin updates periodically
36
-
notify = false, -- notify on update
37
-
}, -- automatically check for plugin updates
38
-
performance = {
39
-
rtp = {
40
-
-- disable some rtp plugins
41
-
disabled_plugins = {
42
-
"gzip",
43
-
-- "matchit",
44
-
-- "matchparen",
45
-
-- "netrwPlugin",
46
-
"tarPlugin",
47
-
"tohtml",
48
-
"tutor",
49
-
"zipPlugin",
50
-
},
51
-
},
52
-
},
53
-
})
54
-
55
-
require("sg").setup({})
56
-
-- require("ayu").setup({ mirage = true })
57
-
-- require("ayu").colorscheme()
···
-3
home/profiles/nvim/lazynvim/.config/nvim/lua/config/options.lua
-3
home/profiles/nvim/lazynvim/.config/nvim/lua/config/options.lua
-13
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/cody.lua
-13
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/cody.lua
-50
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/colorscheme.lua
-50
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/colorscheme.lua
···
1
-
return {
2
-
{
3
-
"catppuccin/nvim",
4
-
lazy = true,
5
-
name = "catppuccin",
6
-
opts = {
7
-
integrations = {
8
-
aerial = true,
9
-
alpha = true,
10
-
cmp = true,
11
-
dashboard = true,
12
-
flash = true,
13
-
gitsigns = true,
14
-
headlines = true,
15
-
illuminate = true,
16
-
indent_blankline = { enabled = true },
17
-
leap = true,
18
-
lsp_trouble = true,
19
-
mason = true,
20
-
markdown = true,
21
-
mini = true,
22
-
native_lsp = {
23
-
enabled = true,
24
-
underlines = {
25
-
errors = { "undercurl" },
26
-
hints = { "undercurl" },
27
-
warnings = { "undercurl" },
28
-
information = { "undercurl" },
29
-
},
30
-
},
31
-
navic = { enabled = true, custom_bg = "lualine" },
32
-
neotest = true,
33
-
neotree = true,
34
-
noice = true,
35
-
semantic_tokens = true,
36
-
telescope = true,
37
-
treesitter = true,
38
-
treesitter_context = true,
39
-
which_key = true,
40
-
},
41
-
},
42
-
},
43
-
{ "Shatur/neovim-ayu", lazy = false },
44
-
{
45
-
"LazyVim/LazyVim",
46
-
opts = {
47
-
colorscheme = "catppuccin-macchiato",
48
-
},
49
-
},
50
-
}
···
-193
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/example.lua
-193
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/example.lua
···
1
-
-- since this is just an example spec, don't actually load anything here and return an empty spec
2
-
-- stylua: ignore
3
-
if true then return {} end
4
-
5
-
-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim
6
-
--
7
-
-- In your plugin files, you can:
8
-
-- * add extra plugins
9
-
-- * disable/enabled LazyVim plugins
10
-
-- * override the configuration of LazyVim plugins
11
-
return {
12
-
-- add gruvbox
13
-
{ "ellisonleao/gruvbox.nvim" },
14
-
15
-
-- Configure LazyVim to load gruvbox
16
-
{
17
-
"LazyVim/LazyVim",
18
-
opts = {
19
-
colorscheme = "gruvbox",
20
-
},
21
-
},
22
-
23
-
-- change trouble config
24
-
{
25
-
"folke/trouble.nvim",
26
-
-- opts will be merged with the parent spec
27
-
opts = { use_diagnostic_signs = true },
28
-
},
29
-
30
-
-- disable trouble
31
-
{ "folke/trouble.nvim", enabled = false },
32
-
33
-
-- override nvim-cmp and add cmp-emoji
34
-
{
35
-
"hrsh7th/nvim-cmp",
36
-
dependencies = { "hrsh7th/cmp-emoji" },
37
-
---@param opts cmp.ConfigSchema
38
-
opts = function(_, opts)
39
-
table.insert(opts.sources, { name = "emoji" })
40
-
end,
41
-
},
42
-
43
-
-- change some telescope options and a keymap to browse plugin files
44
-
{
45
-
"nvim-telescope/telescope.nvim",
46
-
keys = {
47
-
-- add a keymap to browse plugin files
48
-
-- stylua: ignore
49
-
{
50
-
"<leader>fp",
51
-
function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end,
52
-
desc = "Find Plugin File",
53
-
},
54
-
},
55
-
-- change some options
56
-
opts = {
57
-
defaults = {
58
-
layout_strategy = "horizontal",
59
-
layout_config = { prompt_position = "top" },
60
-
sorting_strategy = "ascending",
61
-
winblend = 0,
62
-
},
63
-
},
64
-
},
65
-
66
-
-- add pyright to lspconfig
67
-
{
68
-
"neovim/nvim-lspconfig",
69
-
---@class PluginLspOpts
70
-
opts = {
71
-
---@type lspconfig.options
72
-
servers = {
73
-
-- pyright will be automatically installed with mason and loaded with lspconfig
74
-
pyright = {},
75
-
},
76
-
},
77
-
},
78
-
79
-
-- add tsserver and setup with typescript.nvim instead of lspconfig
80
-
{
81
-
"neovim/nvim-lspconfig",
82
-
dependencies = {
83
-
"jose-elias-alvarez/typescript.nvim",
84
-
init = function()
85
-
require("lazyvim.util").lsp.on_attach(function(_, buffer)
86
-
-- stylua: ignore
87
-
vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
88
-
vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer })
89
-
end)
90
-
end,
91
-
},
92
-
---@class PluginLspOpts
93
-
opts = {
94
-
---@type lspconfig.options
95
-
servers = {
96
-
-- tsserver will be automatically installed with mason and loaded with lspconfig
97
-
tsserver = {},
98
-
},
99
-
-- you can do any additional lsp server setup here
100
-
-- return true if you don't want this server to be setup with lspconfig
101
-
---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
102
-
setup = {
103
-
-- example to setup with typescript.nvim
104
-
tsserver = function(_, opts)
105
-
require("typescript").setup({ server = opts })
106
-
return true
107
-
end,
108
-
-- Specify * to use this function as a fallback for any server
109
-
-- ["*"] = function(server, opts) end,
110
-
},
111
-
},
112
-
},
113
-
114
-
-- for typescript, LazyVim also includes extra specs to properly setup lspconfig,
115
-
-- treesitter, mason and typescript.nvim. So instead of the above, you can use:
116
-
{ import = "lazyvim.plugins.extras.lang.typescript" },
117
-
118
-
-- add more treesitter parsers
119
-
{
120
-
"nvim-treesitter/nvim-treesitter",
121
-
opts = {
122
-
ensure_installed = {
123
-
"bash",
124
-
"html",
125
-
"javascript",
126
-
"json",
127
-
"lua",
128
-
"markdown",
129
-
"markdown_inline",
130
-
"python",
131
-
"query",
132
-
"regex",
133
-
"tsx",
134
-
"typescript",
135
-
"vim",
136
-
"yaml",
137
-
},
138
-
},
139
-
},
140
-
141
-
-- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above
142
-
-- would overwrite `ensure_installed` with the new value.
143
-
-- If you'd rather extend the default config, use the code below instead:
144
-
{
145
-
"nvim-treesitter/nvim-treesitter",
146
-
opts = function(_, opts)
147
-
-- add tsx and treesitter
148
-
vim.list_extend(opts.ensure_installed, {
149
-
"tsx",
150
-
"typescript",
151
-
})
152
-
end,
153
-
},
154
-
155
-
-- the opts function can also be used to change the default opts:
156
-
{
157
-
"nvim-lualine/lualine.nvim",
158
-
event = "VeryLazy",
159
-
opts = function(_, opts)
160
-
table.insert(opts.sections.lualine_x, "๐")
161
-
end,
162
-
},
163
-
164
-
-- or you can return new options to override all the defaults
165
-
{
166
-
"nvim-lualine/lualine.nvim",
167
-
event = "VeryLazy",
168
-
opts = function()
169
-
return {
170
-
--[[add your custom lualine config here]]
171
-
}
172
-
end,
173
-
},
174
-
175
-
-- use mini.starter instead of alpha
176
-
{ import = "lazyvim.plugins.extras.ui.mini-starter" },
177
-
178
-
-- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc
179
-
{ import = "lazyvim.plugins.extras.lang.json" },
180
-
181
-
-- add any tools you want to have installed below
182
-
{
183
-
"williamboman/mason.nvim",
184
-
opts = {
185
-
ensure_installed = {
186
-
"stylua",
187
-
"shellcheck",
188
-
"shfmt",
189
-
"flake8",
190
-
},
191
-
},
192
-
},
193
-
}
···
-6
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/git.lua
-6
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/git.lua
-15
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/surround.lua
-15
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/surround.lua
-3
home/profiles/nvim/lazynvim/.config/nvim/stylua.toml
-3
home/profiles/nvim/lazynvim/.config/nvim/stylua.toml
+9
home/profiles/nvim/package.json
+9
home/profiles/nvim/package.json
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
report.every.labels=ID,Active,Deps,P,Project,Tag,Recur,S,Due,Until,Description
83
report.every.columns=id,start.age,depends,priority,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description
84
85
# Urgency
86
urgency.user.project.wait.coefficient=-10.0
87
urgency.user.project.craft.coefficient=1.9
···
82
report.every.labels=ID,Active,Deps,P,Project,Tag,Recur,S,Due,Until,Description
83
report.every.columns=id,start.age,depends,priority,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description
84
85
+
report.poms.filter=(status:pending -idea -backlog -BLOCKED)
86
+
report.poms.labels=UUID,ID,Project,Tag,Description
87
+
report.poms.columns=uuid,id,project,tags,description
88
+
report.poms.sort=start+,urgency+
89
+
90
# Urgency
91
urgency.user.project.wait.coefficient=-10.0
92
urgency.user.project.craft.coefficient=1.9
+3
home/profiles/tmux/default.nix
+3
home/profiles/tmux/default.nix
+85
home/profiles/tmux/tmux.conf
+85
home/profiles/tmux/tmux.conf
···
···
1
+
set -g base-index 1
2
+
setw -g pane-base-index 1
3
+
4
+
# https://old.reddit.com/r/tmux/comments/mesrci/tmux_2_doesnt_seem_to_use_256_colors/
5
+
set -g default-terminal "xterm-256color"
6
+
set -ga terminal-overrides ",*256col*:Tc"
7
+
set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q'
8
+
set-environment -g COLORTERM "truecolor"
9
+
10
+
# Mouse works as expected
11
+
set-option -g mouse on
12
+
# easy-to-remember split pane commands
13
+
bind | split-window -h -c "#{pane_current_path}"
14
+
bind - split-window -v -c "#{pane_current_path}"
15
+
16
+
# don't rename windows automatically
17
+
set-option -g allow-rename off
18
+
19
+
# DESIGN TWEAKS
20
+
21
+
# don't do anything when a 'bell' rings
22
+
set -g visual-activity off
23
+
set -g visual-bell off
24
+
set -g visual-silence off
25
+
setw -g monitor-activity off
26
+
set -g bell-action none
27
+
28
+
# clock mode
29
+
setw -g clock-mode-colour yellow
30
+
31
+
# copy mode
32
+
setw -g mode-style 'fg=black bg=green bold'
33
+
34
+
# panes
35
+
set -g pane-border-style 'fg=green'
36
+
set -g pane-active-border-style 'fg=yellow'
37
+
38
+
# statusbar
39
+
set -g status-position bottom
40
+
set -g status-justify left
41
+
set -g status-style 'fg=green'
42
+
43
+
set -g status-left ''
44
+
set -g status-left-length 10
45
+
46
+
set -g status-right-style 'fg=black bg=yellow'
47
+
set -g status-right '%Y-%m-%d %H:%M '
48
+
set -g status-right-length 50
49
+
50
+
setw -g window-status-current-style 'fg=black bg=green'
51
+
setw -g window-status-current-format ' #I #W #F '
52
+
53
+
setw -g window-status-style 'fg=green bg=black'
54
+
setw -g window-status-format ' #I #[fg=white]#W #[fg=yellow]#F '
55
+
56
+
setw -g window-status-bell-style 'fg=yellow bg=green bold'
57
+
58
+
# messages
59
+
set -g message-style 'fg=yellow bg=green bold'
60
+
61
+
# Unbind Ctrl+V so it passes through to Kitty for paste
62
+
unbind C-v
63
+
64
+
# Vim-aware pane navigation with Alt+hjkl
65
+
is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
66
+
bind-key -n M-h if-shell "$is_vim" "send-keys M-h" "select-pane -L"
67
+
bind-key -n M-j if-shell "$is_vim" "send-keys M-j" "select-pane -D"
68
+
bind-key -n M-k if-shell "$is_vim" "send-keys M-k" "select-pane -U"
69
+
bind-key -n M-l if-shell "$is_vim" "send-keys M-l" "select-pane -R"
70
+
71
+
# Window navigation with Alt+n/p
72
+
bind-key -n M-n next-window
73
+
bind-key -n M-p previous-window
74
+
75
+
# Pane resizing with Alt+Shift+hjkl
76
+
bind-key -n M-S-h resize-pane -L 2
77
+
bind-key -n M-S-j resize-pane -D 2
78
+
bind-key -n M-S-k resize-pane -U 2
79
+
bind-key -n M-S-l resize-pane -R 2
80
+
81
+
# Copy mode setup
82
+
bind v copy-mode
83
+
setw -g mode-keys vi
84
+
bind-key -T copy-mode-vi 'v' send -X begin-selection
85
+
bind-key -T copy-mode-vi 'y' send -X copy-pipe-and-cancel 'xclip -in -selection clipboard'
+5
-2
hosts/box/configuration.nix
+5
-2
hosts/box/configuration.nix
···
66
address = "192.168.1.240";
67
prefixLength = 24;
68
}];
69
ipv4.routes = [{ address = "192.168.1.0"; prefixLength = 24; via = "192.168.1.1"; }];
70
useDHCP = false;
71
};
···
88
# Enable the OpenSSH daemon.
89
services.openssh.enable = true;
90
networking.firewall.allowedTCPPorts = [ 22 ];
91
-
sound.enable = false;
92
93
programs.gnupg.agent.enable = true;
94
-
programs.gnupg.agent.pinentryFlavor = "curses";
95
programs.gnupg.agent.enableSSHSupport = true;
96
97
# This value determines the NixOS release with which your system is to be
···
66
address = "192.168.1.240";
67
prefixLength = 24;
68
}];
69
+
ipv6.addresses = [{
70
+
address = "fd7d:587a:4300:1::240";
71
+
prefixLength = 64;
72
+
}];
73
ipv4.routes = [{ address = "192.168.1.0"; prefixLength = 24; via = "192.168.1.1"; }];
74
useDHCP = false;
75
};
···
92
# Enable the OpenSSH daemon.
93
services.openssh.enable = true;
94
networking.firewall.allowedTCPPorts = [ 22 ];
95
96
programs.gnupg.agent.enable = true;
97
+
programs.gnupg.agent.pinentryPackage = pkgs.pinentry-curses;
98
programs.gnupg.agent.enableSSHSupport = true;
99
100
# This value determines the NixOS release with which your system is to be
+19
-26
hosts/box/default.nix
+19
-26
hosts/box/default.nix
···
1
-
{ self, pkgs, ... }:
2
-
{
3
imports = [
4
./configuration.nix
5
../profiles/core
···
7
../profiles/taskd
8
../profiles/shaarli
9
../profiles/dns
10
-
../profiles/monitoring
11
../profiles/nfs
12
../profiles/gonic
13
-
../profiles/headphones
14
../profiles/radicale
15
-
../profiles/seafile
16
../profiles/syncthing
17
../profiles/dhyan
18
../profiles/calibre
19
../profiles/wallabag
20
../profiles/finance
21
../profiles/sync/website
22
../profiles/grasp
23
# ../profiles/archivebox
24
# ../profiles/woodpecker-agent
25
-
../profiles/jellyfin
26
../profiles/ulogger-server
27
-
../profiles/photoprism
28
];
29
30
# Backups
31
age.secrets.borg-password.file = "${self}/secrets/borg-password.age";
32
services.postgresqlBackup = {
33
enable = true;
34
-
databases = [ "wallabag" "photoprism" "ulogger" ];
35
location = "/var/backup/postgresql";
36
};
37
mossnet.backup = {
···
46
"/data/books" # calibre-web
47
# "/home/anish/usr/nonfiction" # syncthing
48
"/home/anish/usr/finance" # beancount
49
-
"/mnt/two/postgres" # sealight postgres backups TODO remove once moved to capsul
50
];
51
# seafile
52
};
53
54
-
services.transmission = {
55
-
enable = true;
56
-
settings = {
57
-
rpc.bind-address = "0.0.0.0";
58
-
download-dir = "/mnt/two/new-music";
59
-
};
60
-
};
61
-
services.nginx.virtualHosts."transmission.mossnet.lan" = {
62
-
enableACME = false;
63
-
forceSSL = false;
64
-
65
-
locations."/" = {
66
-
extraConfig = ''
67
-
proxy_pass http://localhost:9091/;
68
-
proxy_set_header X-Forwarded-Host $host;
69
-
'';
70
-
};
71
};
72
73
age.secrets.box-wg.file = "${self}/secrets/box-wg.age";
···
1
+
{ self, pkgs, ... }: {
2
imports = [
3
./configuration.nix
4
../profiles/core
···
6
../profiles/taskd
7
../profiles/shaarli
8
../profiles/dns
9
+
# ../profiles/monitoring
10
../profiles/nfs
11
../profiles/gonic
12
+
../profiles/headphones
13
../profiles/radicale
14
+
# ../profiles/seafile # waiting for https://github.com/NixOS/nixpkgs/pull/249523 to be merged
15
../profiles/syncthing
16
../profiles/dhyan
17
../profiles/calibre
18
../profiles/wallabag
19
../profiles/finance
20
../profiles/sync/website
21
+
../profiles/sync/music
22
../profiles/grasp
23
# ../profiles/archivebox
24
# ../profiles/woodpecker-agent
25
+
# ../profiles/jellyfin
26
../profiles/ulogger-server
27
+
../profiles/immich
28
+
../profiles/jacket
29
+
../profiles/gpodder
30
+
../profiles/transmission
31
+
#../profiles/postgres_upgrade_script
32
];
33
34
# Backups
35
age.secrets.borg-password.file = "${self}/secrets/borg-password.age";
36
services.postgresqlBackup = {
37
enable = true;
38
+
databases = [ "wallabag" "immich" "ulogger" ];
39
location = "/var/backup/postgresql";
40
};
41
mossnet.backup = {
···
50
"/data/books" # calibre-web
51
# "/home/anish/usr/nonfiction" # syncthing
52
"/home/anish/usr/finance" # beancount
53
+
"/mnt/two/postgres" # sealight postgres backups TODO remove once moved to capsul
54
+
"/mnt/two/photos"
55
+
"/mnt/two/music"
56
];
57
# seafile
58
};
59
60
+
environment.systemPackages = with pkgs; [ lm_sensors ];
61
+
hardware.fancontrol = {
62
+
enable = false;
63
+
config = '''';
64
};
65
66
age.secrets.box-wg.file = "${self}/secrets/box-wg.age";
+1
-3
hosts/curve/configuration.nix
+1
-3
hosts/curve/configuration.nix
+29
-13
hosts/curve/default.nix
+29
-13
hosts/curve/default.nix
···
1
-
{ self, pkgs, ... }:
2
-
{
3
imports = [
4
./configuration.nix
5
../users/anish
···
17
# ../profiles/mount-mossnet
18
];
19
20
# import profiling tools
21
programs.systemtap.enable = true;
22
23
# Speed up boot by removing dependency on network
24
systemd = {
25
-
targets.network-online.wantedBy = pkgs.lib.mkForce [ ]; # Normally ["multi-user.target"]
26
-
services.NetworkManager-wait-online.wantedBy = pkgs.lib.mkForce [ ]; # Normally ["network-online.target"]
27
};
28
29
-
programs.gnupg.agent.enable = true;
30
-
programs.gnupg.agent.pinentryFlavor = "gnome3";
31
32
fileSystems."/mnt/ftp" = {
33
device = "192.168.1.240:/home/ftp";
···
58
59
# lazy enable of ports necessary for KDE connect which is installed via cli home profile (for some reason?)
60
networking.firewall = {
61
-
allowedTCPPortRanges = [{ from = 1714; to = 1764; }];
62
-
allowedUDPPortRanges = [{ from = 1714; to = 1764; }];
63
};
64
65
age.secrets.curve-wg.file = "${self}/secrets/curve-wg.age";
···
75
mossnet.backup = {
76
enable = true;
77
name = "curve";
78
-
paths = [
79
-
"/home/anish/usr"
80
-
"/home/anish/.ssh"
81
-
];
82
};
83
84
# enable adb
···
87
#virtualisation.docker.enable = true;
88
boot.blacklistedKernelModules = [ "qcserial" ];
89
# Used for packer Capsul
90
-
users.users.anish.extraGroups = [ "adbusers" "wheel" "plugdev" "libvertd" ];
91
virtualisation.libvirtd.enable = true;
92
hardware.keyboard.zsa.enable = true;
93
services.udev.extraRules = ''
···
1
+
{ self, pkgs, ... }: {
2
imports = [
3
./configuration.nix
4
../users/anish
···
16
# ../profiles/mount-mossnet
17
];
18
19
+
# temporarily allow ssh access for work, to be able to do deploy new services
20
+
services.openssh = {
21
+
enable = true;
22
+
settings.PasswordAuthentication = false;
23
+
settings.PermitRootLogin = "no";
24
+
};
25
+
26
# import profiling tools
27
programs.systemtap.enable = true;
28
29
+
virtualisation.docker.enable = true;
30
+
virtualisation.docker.storageDriver = "btrfs";
31
+
environment.systemPackages = with pkgs; [ docker-compose ];
32
+
33
# Speed up boot by removing dependency on network
34
systemd = {
35
+
targets.network-online.wantedBy =
36
+
pkgs.lib.mkForce [ ]; # Normally ["multi-user.target"]
37
+
services.NetworkManager-wait-online.wantedBy =
38
+
pkgs.lib.mkForce [ ]; # Normally ["network-online.target"]
39
};
40
41
+
42
43
fileSystems."/mnt/ftp" = {
44
device = "192.168.1.240:/home/ftp";
···
69
70
# lazy enable of ports necessary for KDE connect which is installed via cli home profile (for some reason?)
71
networking.firewall = {
72
+
allowedTCPPorts = [ 22 4173 ]; # allow ssh
73
+
allowedTCPPortRanges = [{
74
+
from = 1714;
75
+
to = 1764;
76
+
}];
77
+
allowedUDPPortRanges = [{
78
+
from = 1714;
79
+
to = 1764;
80
+
}];
81
};
82
83
age.secrets.curve-wg.file = "${self}/secrets/curve-wg.age";
···
93
mossnet.backup = {
94
enable = true;
95
name = "curve";
96
+
paths = [ "/home/anish/usr" "/home/anish/.ssh" "/home/anish/.password-store/" ];
97
};
98
99
# enable adb
···
102
#virtualisation.docker.enable = true;
103
boot.blacklistedKernelModules = [ "qcserial" ];
104
# Used for packer Capsul
105
+
users.users.anish.extraGroups =
106
+
[ "adbusers" "wheel" "plugdev" "libvertd" "docker" ];
107
virtualisation.libvirtd.enable = true;
108
hardware.keyboard.zsa.enable = true;
109
services.udev.extraRules = ''
+12
-16
hosts/curve/hardware-configuration.nix
+12
-16
hosts/curve/hardware-configuration.nix
···
5
6
{
7
imports =
8
-
[
9
-
(modulesPath + "/installer/scan/not-detected.nix")
10
];
11
12
-
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" "rtsx_pci_sdmmc" ];
13
boot.initrd.kernelModules = [ "dm-snapshot" ];
14
boot.kernelModules = [ "kvm-intel" ];
15
boot.extraModulePackages = [ ];
16
17
-
fileSystems."/boot" =
18
-
{
19
-
device = "/dev/disk/by-uuid/2C41-3DAA";
20
-
fsType = "vfat";
21
-
};
22
-
23
fileSystems."/" =
24
-
{
25
-
device = "/dev/disk/by-uuid/a4ae2855-10b9-49f3-adb0-acd82b74eeb9";
26
fsType = "btrfs";
27
options = [ "subvol=root" ];
28
};
29
30
fileSystems."/home" =
31
-
{
32
-
device = "/dev/disk/by-uuid/a4ae2855-10b9-49f3-adb0-acd82b74eeb9";
33
fsType = "btrfs";
34
options = [ "subvol=home" ];
35
};
36
37
swapDevices =
38
-
[{ device = "/dev/disk/by-uuid/23658926-6ffa-42dc-8915-a6479c385e0b"; }];
39
40
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
41
# (the default) this is the recommended approach. When using systemd-networkd it's
···
46
# networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true;
47
48
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
49
-
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
50
-
# hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
51
}
···
5
6
{
7
imports =
8
+
[ (modulesPath + "/installer/scan/not-detected.nix")
9
];
10
11
+
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
12
boot.initrd.kernelModules = [ "dm-snapshot" ];
13
boot.kernelModules = [ "kvm-intel" ];
14
boot.extraModulePackages = [ ];
15
16
fileSystems."/" =
17
+
{ device = "/dev/disk/by-uuid/e1268753-4f18-4e6f-8edb-d4724ad8eb4a";
18
fsType = "btrfs";
19
options = [ "subvol=root" ];
20
};
21
22
fileSystems."/home" =
23
+
{ device = "/dev/disk/by-uuid/e1268753-4f18-4e6f-8edb-d4724ad8eb4a";
24
fsType = "btrfs";
25
options = [ "subvol=home" ];
26
};
27
28
+
fileSystems."/boot" =
29
+
{ device = "/dev/disk/by-uuid/8244-A184";
30
+
fsType = "vfat";
31
+
};
32
+
33
swapDevices =
34
+
[ { device = "/dev/disk/by-uuid/e220fea6-cf3b-4687-bfe1-9cf6d3ba57f7"; }
35
+
];
36
37
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
38
# (the default) this is the recommended approach. When using systemd-networkd it's
···
43
# networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true;
44
45
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
46
+
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
47
}
-44
hosts/darwin/casks/default.nix
-44
hosts/darwin/casks/default.nix
···
1
-
{ ... }:
2
-
3
-
{
4
-
homebrew.enable = true;
5
-
homebrew.brews = [
6
-
"kind"
7
-
"kubectl"
8
-
"bazelisk"
9
-
"sourcegraph/src-cli/src-cli"
10
-
"gh"
11
-
# "postgresql@15"
12
-
# "redis"
13
-
];
14
-
homebrew.casks = [
15
-
# Development Tools
16
-
"homebrew/cask/docker"
17
-
# "syncthing"
18
-
# "insomnia"
19
-
# "tableplus"
20
-
# "ngrok"
21
-
"postico"
22
-
"wireshark"
23
-
"1password"
24
-
"orbstack"
25
-
# "aerospace"
26
-
27
-
# Communication Tools
28
-
# Already installed manually
29
-
# "loom"
30
-
# "slack"
31
-
# "zoom"
32
-
# "firefox"
33
-
# "1password-cli"
34
-
35
-
# Utility Tools
36
-
# "syncthing"
37
-
38
-
# Productivity Tools
39
-
"raycast"
40
-
41
-
# AI
42
-
# "diffusionbee"
43
-
];
44
-
}
···
-155
hosts/darwin/default.nix
-155
hosts/darwin/default.nix
···
1
-
{ self, pkgs, config, ... }:
2
-
3
-
{
4
-
imports = [
5
-
./sketchybar
6
-
# ./yabai # Now using aerospace
7
-
# ./casks
8
-
# ../../modules/darwin/home-manager.nix
9
-
# ../../modules/shared
10
-
# ../../modules/shared/cachix
11
-
];
12
-
13
-
environment.systemPackages = [
14
-
pkgs.go
15
-
pkgs.python3
16
-
pkgs.cargo
17
-
pkgs.k9s
18
-
pkgs.kubernetes-helm
19
-
pkgs.shellcheck
20
-
];
21
-
22
-
age.identityPaths = [ "/Users/anishlakhwara/.ssh/id_ed25519" ];
23
-
age.secrets.work-wg.file = "${self}/secrets/work-wg.age";
24
-
age.secrets.work-wg.owner = "anishlakhwara";
25
-
networking.wg-quick.interfaces = {
26
-
wg0 = {
27
-
address = [ "10.0.69.7/24" ];
28
-
listenPort = 60990; # to match firewall allowedUDPPorts (without this wg uses random port numbers)
29
-
privateKeyFile = config.age.secrets.work-wg.path;
30
-
dns = [ "10.0.69.4" ];
31
-
postDown = ''
32
-
sudo /usr/sbin/networksetup -setdnsservers Wi-Fi "Empty"
33
-
'';
34
-
peers = [
35
-
# For a client configuration, one peer entry for the server will suffice.
36
-
{
37
-
publicKey = "c1J4p63rD3IlszugMZiki7UBV3YmDdqa3DU4UejXzAI=";
38
-
allowedIPs = [ "10.0.69.0/24" ];
39
-
# Set this to the server IP and port.
40
-
endpoint = "sealight.xyz:60990"; # ToDo: route to endpoint not automatically configured https://wiki.archlinux.org/index.php/WireGuard#Loop_routing https://discourse.nixos.org/t/solved-minimal-firewall-setup-for-wireguard-client/7577
41
-
persistentKeepalive = 25;
42
-
}
43
-
];
44
-
};
45
-
};
46
-
47
-
system.primaryUser = "anishlakhwara";
48
-
# Auto upgrade nix package and the daemon service.
49
-
nixpkgs.hostPlatform = "aarch64-darwin";
50
-
programs.zsh.enable = true;
51
-
52
-
# Setup user, packages, programs
53
-
nix = {
54
-
# package = pkgs.nixUnstable;
55
-
settings.trusted-users = [ "@admin" "anishlakhwara" ];
56
-
57
-
gc = {
58
-
automatic = true;
59
-
interval = { Weekday = 0; Hour = 2; Minute = 0; };
60
-
options = "--delete-older-than 30d";
61
-
};
62
-
63
-
# Turn this on to make command line easier
64
-
extraOptions = ''
65
-
experimental-features = nix-command flakes
66
-
'';
67
-
};
68
-
69
-
# Turn off NIX_PATH warnings now that we're using flakes
70
-
system.checks.verifyNixPath = false;
71
-
72
-
# Load configuration that is shared across systems
73
-
# environment.systemPackages = with pkgs; [
74
-
#
75
-
# ] ++ (import ../../modules/shared/packages.nix { inherit pkgs; });
76
-
77
-
# Enable fonts dir
78
-
# fonts.fontDir.enable = true;
79
-
fonts.packages = with pkgs; [
80
-
fira-code
81
-
fira-code-symbols
82
-
hermit
83
-
#hack
84
-
siji
85
-
font-awesome
86
-
proggyfonts
87
-
nerd-fonts.fira-code
88
-
nerd-fonts.droid-sans-mono
89
-
nerd-fonts.iosevka
90
-
];
91
-
92
-
system = {
93
-
stateVersion = 4;
94
-
95
-
keyboard = {
96
-
enableKeyMapping = true;
97
-
};
98
-
99
-
defaults = {
100
-
LaunchServices = {
101
-
LSQuarantine = false;
102
-
};
103
-
104
-
NSGlobalDomain = {
105
-
AppleShowAllExtensions = true;
106
-
ApplePressAndHoldEnabled = false;
107
-
108
-
# 120, 90, 60, 30, 12, 6, 2
109
-
KeyRepeat = 2;
110
-
111
-
# 120, 94, 68, 35, 25, 15
112
-
InitialKeyRepeat = 15;
113
-
114
-
"com.apple.mouse.tapBehavior" = 1;
115
-
"com.apple.sound.beep.volume" = 0.0;
116
-
"com.apple.sound.beep.feedback" = 0;
117
-
};
118
-
119
-
loginwindow = {
120
-
# disable guest account
121
-
GuestEnabled = false;
122
-
# show name instead of username
123
-
SHOWFULLNAME = false;
124
-
};
125
-
126
-
dock = {
127
-
autohide = true;
128
-
autohide-delay = 0.0;
129
-
autohide-time-modifier = 1.0;
130
-
static-only = false;
131
-
showhidden = false;
132
-
show-recents = false;
133
-
launchanim = true;
134
-
mouse-over-hilite-stack = true;
135
-
orientation = "bottom";
136
-
tilesize = 48;
137
-
mru-spaces = false;
138
-
};
139
-
140
-
finder = {
141
-
_FXShowPosixPathInTitle = false;
142
-
};
143
-
144
-
trackpad = {
145
-
Clicking = false;
146
-
TrackpadThreeFingerDrag = true;
147
-
};
148
-
};
149
-
150
-
# keyboard = {
151
-
# enableKeyMapping = true;
152
-
# remapCapsLockToControl = true;
153
-
# };
154
-
};
155
-
}
···
-10
hosts/darwin/sketchybar/default.nix
-10
hosts/darwin/sketchybar/default.nix
-59
hosts/darwin/sketchybar/sketchybarrc
-59
hosts/darwin/sketchybar/sketchybarrc
···
1
-
#!/usr/bin/env bash
2
-
3
-
source "$HOME/.config/sketchybar/variables.sh" # Loads all defined colors
4
-
5
-
# General bar and defaults
6
-
# parts I didn't want
7
-
# y_offset=5 \
8
-
# margin=5 \
9
-
10
-
sketchybar --bar height=35 \
11
-
color="$BAR_COLOR" \
12
-
shadow="$SHADOW" \
13
-
position=top \
14
-
sticky=on \
15
-
padding_right=0 \
16
-
padding_left=3 \
17
-
corner_radius="$CORNER_RADIUS" \
18
-
blur_radius=20 \
19
-
notch_width=200 \
20
-
--default updates=when_shown \
21
-
icon.font="$FONT:Bold:13.5" \
22
-
icon.color="$ICON_COLOR" \
23
-
icon.padding_left="$PADDINGS" \
24
-
icon.padding_right="$PADDINGS" \
25
-
label.font="$FONT:Bold:13.0" \
26
-
label.color="$LABEL_COLOR" \
27
-
label.padding_left="$PADDINGS" \
28
-
label.padding_right="$PADDINGS" \
29
-
background.padding_right="$PADDINGS" \
30
-
background.padding_left="$PADDINGS" \
31
-
popup.background.border_width=1 \
32
-
popup.background.corner_radius=11 \
33
-
popup.background.border_color="$POPUP_BORDER_COLOR" \
34
-
popup.background.color="$POPUP_BACKGROUND_COLOR" \
35
-
popup.background.shadow.drawing="$SHADOW"
36
-
37
-
# Left
38
-
# source "$ITEM_DIR/apple.sh"
39
-
source "$ITEM_DIR/spaces.sh"
40
-
41
-
# Center (of notch)
42
-
# source "$ITEM_DIR/spotify.sh"
43
-
source "$ITEM_DIR/front_app.sh"
44
-
45
-
# Right
46
-
source "$ITEM_DIR/clock.sh"
47
-
source "$ITEM_DIR/calendar.sh"
48
-
source "$ITEM_DIR/battery.sh"
49
-
source "$ITEM_DIR/volume.sh"
50
-
source "$ITEM_DIR/cpu.sh"
51
-
source "$ITEM_DIR/vpn.sh"
52
-
53
-
#################### Finalizing Setup ####################
54
-
55
-
# sketchybar --hotload true
56
-
57
-
sketchybar --update
58
-
59
-
echo "sketchybar configuration loaded.."
···
-102
hosts/darwin/yabai/default.nix
-102
hosts/darwin/yabai/default.nix
···
1
-
{pkgs, ... }:
2
-
3
-
{
4
-
services.yabai = {
5
-
enable = true;
6
-
config = {
7
-
mouse_follows_focus = "off";
8
-
focus_follows_mouse = "off";
9
-
window_placement = "second_child";
10
-
window_topmost = "off";
11
-
window_opacity = "off";
12
-
window_opacity_duration = 0.0;
13
-
window_shadow = "on";
14
-
window_border = "off";
15
-
window_border_placement = "inset";
16
-
window_border_width = 4;
17
-
window_border_radius = -1.0;
18
-
active_window_border_topmost = "off";
19
-
active_window_border_color = "0xff775759";
20
-
normal_window_border_color = "0xff505050";
21
-
insert_window_border_color = "0xffd75f5f";
22
-
active_window_opacity = 1.0;
23
-
normal_window_opacity = 0.9;
24
-
split_ratio = 0.73;
25
-
auto_balance = "on";
26
-
mouse_modifier = "fn";
27
-
mouse_action1 = "move";
28
-
mouse_action2 = "resize";
29
-
layout = "bsp";
30
-
top_padding = 5;
31
-
bottom_padding = 5;
32
-
left_padding = 5;
33
-
right_padding = 5;
34
-
window_gap = 5;
35
-
};
36
-
extraConfig = ''
37
-
# Do not manage windows with certain titles eg. Copying files or moving to bin
38
-
yabai -m rule --add title="(Copy|Bin|About This Mac|Info)" manage=off
39
-
# Do not manage some apps which are not resizable
40
-
yabai -m rule --add app="^(Calculator|System Preferences|[sS]tats|[Jj]et[Bb]rains [Tt]ool[Bb]ox|kftray)$" manage=off
41
-
'';
42
-
};
43
-
44
-
system.activationScripts.yabai = {
45
-
enable = true;
46
-
text = ''
47
-
yabai --install-service && yabai --start-service
48
-
'';
49
-
};
50
-
51
-
services.skhd = {
52
-
enable = true;
53
-
skhdConfig = ''
54
-
# Open iTerm2
55
-
cmd - enter : kitty --single-instance -d ~
56
-
57
-
##################
58
-
# Window Motions #
59
-
##################
60
-
# Rotate
61
-
lalt - r : yabai -m space --rotate 90
62
-
# Mirror verticaly
63
-
lalt - x : yabai -m space --mirror y-axis
64
-
# Mirror horizontaly
65
-
lalt - y : yabai -m space --mirror x-axis
66
-
# yes, i know i swapped x and y, but I mainly use y-axis and y is further...
67
-
# Fullscreen
68
-
cmd - f : yabai -m window --toggle zoom-fullscreen
69
-
# Swap
70
-
lalt - q : yabai -m window --swap west
71
-
lalt - s : yabai -m window --swap south
72
-
lalt - z : yabai -m window --swap north
73
-
lalt - d : yabai -m window --swap east
74
-
# Warp
75
-
shift + lalt - q : yabai -m window --warp west
76
-
shift + lalt - s : yabai -m window --warp south
77
-
shift + lalt - z : yabai -m window --warp north
78
-
shift + lalt - d : yabai -m window --warp east
79
-
80
-
#########
81
-
# Focus #
82
-
#########
83
-
# Clockwise
84
-
# alt - tab : yabai -m window --focus "$(yabai -m query --windows --space | jq -re "[sort_by(.id, .frame) | .[] | select(.role == \"AXWindow\" and .subrole == \"AXStandardWindow\") | .id] | nth(index($(yabai -m query --windows --window | jq -re ".id")) - 1)")"
85
-
# Counter-clockwise
86
-
# shift - tab : yabai -m window --focus "$(yabai -m query --windows --space | jq -re "[sort_by(.id, .frame) | reverse | .[] | select(.role == \"AXWindow\" and .subrole == \"AXStandardWindow\") | .id] | nth(index($(yabai -m query --windows --window | jq -re ".id")) - 1)")"
87
-
88
-
##########
89
-
# Spaces #
90
-
##########
91
-
ctrl - left : yabai -m space --focus prev
92
-
ctrl - right : yabai -m space --focus next
93
-
ctrl + shift - right : yabai -m window --space next; yabai -m space --focus next
94
-
ctrl + shift - left : yabai -m window --space prev; yabai -m space --focus prev
95
-
cmd - 1 : yabai -m window --space 1; yabai -m space --focus 1
96
-
cmd - 2 : yabai -m window --space 2; yabai -m space --focus 2
97
-
cmd - 3 : yabai -m window --space 3; yabai -m space --focus 3
98
-
cmd - 4 : yabai -m window --space 4; yabai -m space --focus 4
99
-
cmd - 5 : yabai -m window --space 5; yabai -m space --focus 5
100
-
'';
101
-
};
102
-
}
···
+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
+
}
-1
hosts/helix/configuration.nix
-1
hosts/helix/configuration.nix
+22
-3
hosts/helix/default.nix
+22
-3
hosts/helix/default.nix
···
11
# ../profiles/mount-mossnet
12
../profiles/freshrss
13
../profiles/microbin
14
];
15
16
# Capsul specific
···
27
privateKeyFile = "/run/agenix/helix-wg";
28
};
29
30
-
services.postgresql.package = pkgs.postgresql_11;
31
services.postgresqlBackup = {
32
# TODO needs working wireguard to box
33
enable = false;
34
-
databases = [ "gitea" "freshrss" "woodpecker" ];
35
location = "/mnt/two/postgres";
36
};
37
···
41
paths = [
42
"/var/lib/gitea"
43
"/var/lib/freshrss"
44
-
"/var/lib/woodpecker"
45
"/var/lib/microbin"
46
];
47
···
11
# ../profiles/mount-mossnet
12
../profiles/freshrss
13
../profiles/microbin
14
+
../profiles/site
15
+
16
+
# ../profiles/postgres_upgrade_script
17
];
18
19
# Capsul specific
···
30
privateKeyFile = "/run/agenix/helix-wg";
31
};
32
33
+
# Reverse proxy for immich
34
+
# services.nginx.virtualHosts."photos.sealight.xyz" = {
35
+
# enableACME = true;
36
+
# forceSSL = true;
37
+
38
+
# locations."/" = {
39
+
# extraConfig = ''
40
+
# proxy_pass http://10.0.69.4:8567;
41
+
# proxy_set_header Host $host;
42
+
# proxy_set_header X-Real-IP $remote_addr;
43
+
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
44
+
# proxy_set_header X-Forwarded-Proto $scheme;
45
+
# '';
46
+
# };
47
+
# };
48
+
49
+
services.postgresql.package = pkgs.postgresql_15;
50
services.postgresqlBackup = {
51
# TODO needs working wireguard to box
52
enable = false;
53
+
databases = [ "gitea" "freshrss" ]; # "woodpecker"
54
location = "/mnt/two/postgres";
55
};
56
···
60
paths = [
61
"/var/lib/gitea"
62
"/var/lib/freshrss"
63
+
# "/var/lib/woodpecker"
64
"/var/lib/microbin"
65
];
66
-2
hosts/lituus/configuration.nix
-2
hosts/lituus/configuration.nix
···
19
# networking.proxy.default = "http://user:password@proxy:port/";
20
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
21
22
-
sound.enable = false;
23
-
24
# Define a user account. Don't forget to set a password with โpasswdโ.
25
# This value determines the NixOS release with which your system is to be
26
# compatible, in order to avoid breaking some software such as database
···
19
# networking.proxy.default = "http://user:password@proxy:port/";
20
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
21
22
# Define a user account. Don't forget to set a password with โpasswdโ.
23
# This value determines the NixOS release with which your system is to be
24
# compatible, in order to avoid breaking some software such as database
-5
hosts/lituus/hardware-configuration.nix
-5
hosts/lituus/hardware-configuration.nix
+3
-1
hosts/profiles/core/default.nix
+3
-1
hosts/profiles/core/default.nix
+25
-24
hosts/profiles/desktop/default.nix
+25
-24
hosts/profiles/desktop/default.nix
···
1
{ self, config, pkgs, lib, ... }:
2
let
3
tex = (pkgs.texlive.combine {
4
-
inherit (pkgs.texlive) scheme-basic
5
-
dvisvgm dvipng# for preview and export as html
6
wrapfig amsmath ulem hyperref capt-of;
7
#(setq org-latex-compiler "lualatex")
8
#(setq org-preview-latex-default-process 'dvisvgm)
···
13
rev = "502f212d83bc67e8f0499574546b99ec6c8e16f9";
14
sha256 = "1wx9nzq7cqyvpaq4j60bs8g7gh4jk8qg4016yi4c331l4iw1ymsa";
15
};
16
-
in
17
-
{
18
# TODO modularize
19
-
imports = [
20
-
./battery-low-timer.nix
21
-
./cal-alarms.nix
22
-
];
23
24
# Secrets used by home-manager modules
25
age.secrets.fastmail.file = "${self}/secrets/fastmail.age";
···
29
age.secrets.mossnet.owner = "anish";
30
31
# Taskwarrior private key
32
-
age.secrets.taskwarrior-private.file = "${self}/secrets/taskwarrior-private.age";
33
age.secrets.taskwarrior-private.owner = "anish";
34
35
# We don't plug USBs into servers
···
41
42
dbus = {
43
enable = true;
44
-
packages = [ pkgs.dconf ];
45
};
46
};
47
programs.dconf.enable = true;
···
56
XDG_BIN_HOME = "\${HOME}/.local/bin";
57
XDG_DATA_HOME = "\${HOME}/.local/share";
58
59
-
PATH = [
60
-
"\${XDG_BIN_HOME}"
61
-
];
62
};
63
64
environment.systemPackages = with pkgs; [
65
-
unstable.sublime-music
66
-
unstable.nheko
67
unstable.signal-desktop
68
unstable.tuba
69
unstable.newsflash
70
unstable.liferea
71
unstable.gh
72
unstable.flyctl
73
74
kooha
75
light
···
77
feh
78
sxiv
79
xkblayout-state
80
-
vcv-rack
81
zathura
82
calibre
83
mpv
···
87
rofi
88
rofimoji
89
rofi-calc
90
-
# eww
91
obs-studio
92
lightdm
93
dunst
···
99
papirus-icon-theme
100
calendar-cli
101
wyrd
102
-
tic-80
103
ytfzf
104
yt-dlp
105
];
···
121
night = 3700;
122
};
123
};
124
xserver = {
125
enable = true;
126
-
xkb.layout = "us,dvorak";
127
desktopManager.wallpaper.mode = "fill";
128
displayManager = {
129
-
defaultSession = "none+bspwm";
130
sessionCommands = ''
131
${pkgs.xorg.xrdb}/bin/xrdb -merge <<EOF
132
#define blk #1F2430
···
147
#define bwht #CBCCC6
148
#define bg blk
149
#define fg wht
150
-
151
*.foreground: fg
152
*.background: bg
153
*.cursorColor: mag
154
-
155
*.color0: blk
156
*.color8: bblk
157
*.color1: red
···
168
*.color14: bcyn
169
*.color7: wht
170
*.color15: bwht
171
-
172
! greys
173
*.color234: #1E2029
174
*.color235: #282a36
···
221
siji
222
font-awesome
223
proggyfonts
224
-
(nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "Iosevka" ]; })
225
];
226
}
···
1
{ self, config, pkgs, lib, ... }:
2
let
3
tex = (pkgs.texlive.combine {
4
+
inherit (pkgs.texlive)
5
+
scheme-basic dvisvgm dvipng # for preview and export as html
6
wrapfig amsmath ulem hyperref capt-of;
7
#(setq org-latex-compiler "lualatex")
8
#(setq org-preview-latex-default-process 'dvisvgm)
···
13
rev = "502f212d83bc67e8f0499574546b99ec6c8e16f9";
14
sha256 = "1wx9nzq7cqyvpaq4j60bs8g7gh4jk8qg4016yi4c331l4iw1ymsa";
15
};
16
+
in {
17
# TODO modularize
18
+
imports = [ ./battery-low-timer.nix ./cal-alarms.nix ];
19
20
# Secrets used by home-manager modules
21
age.secrets.fastmail.file = "${self}/secrets/fastmail.age";
···
25
age.secrets.mossnet.owner = "anish";
26
27
# Taskwarrior private key
28
+
age.secrets.taskwarrior-private.file =
29
+
"${self}/secrets/taskwarrior-private.age";
30
age.secrets.taskwarrior-private.owner = "anish";
31
32
# We don't plug USBs into servers
···
38
39
dbus = {
40
enable = true;
41
+
packages = [ pkgs.dconf pkgs.gcr ];
42
};
43
};
44
programs.dconf.enable = true;
···
53
XDG_BIN_HOME = "\${HOME}/.local/bin";
54
XDG_DATA_HOME = "\${HOME}/.local/share";
55
56
+
PATH = [ "\${XDG_BIN_HOME}" ];
57
};
58
59
environment.systemPackages = with pkgs; [
60
+
#unstable.sublime-music
61
+
# olm-3.2.16 is now insecure
62
+
# some reason I can't set insecure packages that will be respected
63
+
nheko
64
unstable.signal-desktop
65
unstable.tuba
66
unstable.newsflash
67
unstable.liferea
68
unstable.gh
69
unstable.flyctl
70
+
unstable.sublime-music
71
72
kooha
73
light
···
75
feh
76
sxiv
77
xkblayout-state
78
zathura
79
calibre
80
mpv
···
84
rofi
85
rofimoji
86
rofi-calc
87
obs-studio
88
lightdm
89
dunst
···
95
papirus-icon-theme
96
calendar-cli
97
wyrd
98
+
# tic-80
99
ytfzf
100
yt-dlp
101
];
···
117
night = 3700;
118
};
119
};
120
+
displayManager.defaultSession = "none+bspwm";
121
xserver = {
122
enable = true;
123
+
# TODO should be xkb.layout
124
+
xkb.layout = "us";
125
+
# xkb.variant = "dvorak";
126
desktopManager.wallpaper.mode = "fill";
127
displayManager = {
128
+
# startx.enable = true;
129
sessionCommands = ''
130
${pkgs.xorg.xrdb}/bin/xrdb -merge <<EOF
131
#define blk #1F2430
···
146
#define bwht #CBCCC6
147
#define bg blk
148
#define fg wht
149
+
150
*.foreground: fg
151
*.background: bg
152
*.cursorColor: mag
153
+
154
*.color0: blk
155
*.color8: bblk
156
*.color1: red
···
167
*.color14: bcyn
168
*.color7: wht
169
*.color15: bwht
170
+
171
! greys
172
*.color234: #1E2029
173
*.color235: #282a36
···
220
siji
221
font-awesome
222
proggyfonts
223
+
nerd-fonts.fira-code
224
+
nerd-fonts.droid-sans-mono
225
+
nerd-fonts.iosevka
226
];
227
}
+17
-13
hosts/profiles/dns/default.nix
+17
-13
hosts/profiles/dns/default.nix
···
3
adblockLocalZones = pkgs.stdenv.mkDerivation {
4
name = "unbound-zones-adblock";
5
6
-
src = (pkgs.fetchFromGitHub
7
-
{
8
-
owner = "StevenBlack";
9
-
repo = "hosts";
10
-
rev = "3.12.21";
11
-
sha256 = "Yzr6PY/zqQE+AHH0J6ioHTsgkikM+dz4aelbGpQJa1s=";
12
-
} + "/hosts");
13
14
phases = [ "installPhase" ];
15
···
19
};
20
21
mossnet = "192.168.1.240"; # The local lan-ip for box
22
-
wg-mossnet = "10.0.69.4"; # The wireguard ip for box
23
mossnet-hosts = [
24
"mossnet.lan"
25
"headphones.mossnet.lan"
···
39
"tracks.mossnet.lan"
40
"grasp.mossnet.lan"
41
"photos.mossnet.lan"
42
];
43
44
-
in
45
-
{
46
services.unbound = {
47
enable = true;
48
settings = {
···
53
# private-address = "192.168.1.0/24";
54
cache-min-ttl = 0;
55
serve-expired = "yes";
56
-
interface = [ "0.0.0.0" ];
57
-
access-control = [ "127.0.0.0/8 allow" "192.168.1.0/24 allow" "10.0.69.0/24 allow" ];
58
access-control-view = "10.0.69.0/24 wireguard";
59
# so-reuseport = "yes";
60
tls-upstream = "yes";
···
64
};
65
forward-zone = [{
66
name = ".";
67
-
forward-addr = [ "45.90.28.0#6939b9.dns.nextdns.io" "1.1.1.1@853#cloudflare-dns.com" ];
68
# non-tls
69
# forward-addr = ["45.90.30.49" "45.90.28.49" "1.1.1.1" "8.8.8.8"]
70
}];
···
3
adblockLocalZones = pkgs.stdenv.mkDerivation {
4
name = "unbound-zones-adblock";
5
6
+
src = (pkgs.fetchFromGitHub {
7
+
owner = "StevenBlack";
8
+
repo = "hosts";
9
+
rev = "3.12.21";
10
+
sha256 = "Yzr6PY/zqQE+AHH0J6ioHTsgkikM+dz4aelbGpQJa1s=";
11
+
} + "/hosts");
12
13
phases = [ "installPhase" ];
14
···
18
};
19
20
mossnet = "192.168.1.240"; # The local lan-ip for box
21
+
wg-mossnet = "10.0.69.4"; # The wireguard ip for box
22
mossnet-hosts = [
23
"mossnet.lan"
24
"headphones.mossnet.lan"
···
38
"tracks.mossnet.lan"
39
"grasp.mossnet.lan"
40
"photos.mossnet.lan"
41
+
"pod.mossnet.lan"
42
+
"mast.mossnet.lan"
43
];
44
45
+
in {
46
services.unbound = {
47
enable = true;
48
settings = {
···
53
# private-address = "192.168.1.0/24";
54
cache-min-ttl = 0;
55
serve-expired = "yes";
56
+
interface = [ "0.0.0.0" "::" ];
57
+
access-control =
58
+
[ "127.0.0.0/8 allow" "192.168.1.0/24 allow" "10.0.69.0/24 allow" "::1 allow" "fd7d:587a:4300:1::/64 allow" ];
59
access-control-view = "10.0.69.0/24 wireguard";
60
# so-reuseport = "yes";
61
tls-upstream = "yes";
···
65
};
66
forward-zone = [{
67
name = ".";
68
+
forward-addr = [
69
+
"45.90.28.0#6939b9.dns.nextdns.io"
70
+
"1.1.1.1@853#cloudflare-dns.com"
71
+
];
72
# non-tls
73
# forward-addr = ["45.90.30.49" "45.90.28.49" "1.1.1.1" "8.8.8.8"]
74
}];
+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
18
services.postgresql = {
19
enable = true; # Ensure postgresql is enabled
20
-
authentication = ''
21
-
local freshrss all ident map=freshrss-users
22
-
'';
23
-
identMap = # Map the freshrss user to postgresql
24
-
''
25
-
freshrss-users freshrss freshrss
26
-
'';
27
ensureDatabases = [ "freshrss" ];
28
ensureUsers = [{
29
name = "freshrss";
···
17
18
services.postgresql = {
19
enable = true; # Ensure postgresql is enabled
20
+
# authentication = ''
21
+
# local freshrss all ident map=freshrss-users
22
+
# '';
23
+
# identMap = # Map the freshrss user to postgresql
24
+
# ''
25
+
# freshrss-users freshrss freshrss
26
+
# freshrss-users postgres freshrss
27
+
# '';
28
ensureDatabases = [ "freshrss" ];
29
ensureUsers = [{
30
name = "freshrss";
+25
-10
hosts/profiles/gitea/default.nix
+25
-10
hosts/profiles/gitea/default.nix
···
4
age.secrets.gitea-dbpass.file = "${self}/secrets/gitea-dbpass.age";
5
age.secrets.gitea-dbpass.owner = "gitea";
6
7
-
services.gitea = {
8
enable = true;
9
-
package = pkgs.forgejo;
10
-
appName = "Sealight Git Forge";
11
database = {
12
type = "postgres";
13
passwordFile = "/run/agenix/gitea-dbpass";
14
};
15
settings = {
16
server = {
17
DOMAIN = "git.sealight.xyz";
18
ROOT_URL = "https://git.sealight.xyz";
···
24
repository = {
25
DEFAULT_BRANCH = "main";
26
};
27
"markup.restructuredtext" = {
28
ENABLED = true;
29
FILE_EXTENSIONS = ".rst";
···
43
};
44
};
45
46
environment.systemPackages = [ pkgs.pandoc ];
47
services.postgresql = {
48
enable = true; # Ensure postgresql is enabled
49
-
authentication = ''
50
-
local gitea all ident map=gitea-users
51
-
'';
52
-
identMap = # Map the gitea user to postgresql
53
-
''
54
-
gitea-users gitea gitea
55
-
'';
56
ensureDatabases = [ "gitea" ];
57
ensureUsers = [{
58
name = "gitea";
···
4
age.secrets.gitea-dbpass.file = "${self}/secrets/gitea-dbpass.age";
5
age.secrets.gitea-dbpass.owner = "gitea";
6
7
+
services.forgejo = {
8
enable = true;
9
+
user = "gitea";
10
+
group = "gitea";
11
+
stateDir = "/var/lib/gitea";
12
database = {
13
type = "postgres";
14
+
user = "gitea";
15
+
name = "gitea";
16
passwordFile = "/run/agenix/gitea-dbpass";
17
};
18
settings = {
19
+
DEFAULT.APP_NAME = "Sealight Git Forge";
20
server = {
21
DOMAIN = "git.sealight.xyz";
22
ROOT_URL = "https://git.sealight.xyz";
···
28
repository = {
29
DEFAULT_BRANCH = "main";
30
};
31
+
service.DISABLE_REGISTRATION = true;
32
"markup.restructuredtext" = {
33
ENABLED = true;
34
FILE_EXTENSIONS = ".rst";
···
48
};
49
};
50
51
+
users.users.gitea = {
52
+
home = "/var/lib/gitea";
53
+
useDefaultShell = true;
54
+
group = "gitea";
55
+
isSystemUser = true;
56
+
};
57
+
58
+
users.groups.gitea = {};
59
+
60
environment.systemPackages = [ pkgs.pandoc ];
61
services.postgresql = {
62
enable = true; # Ensure postgresql is enabled
63
+
# authentication = ''
64
+
# local gitea all ident map=gitea-users
65
+
# '';
66
+
# identMap = # Map the gitea user to postgresql
67
+
# ''
68
+
# gitea-users gitea gitea
69
+
# gitea-users postgres gitea
70
+
# '';
71
ensureDatabases = [ "gitea" ];
72
ensureUsers = [{
73
name = "gitea";
+13
-1
hosts/profiles/gonic/default.nix
+13
-1
hosts/profiles/gonic/default.nix
···
1
{ config, lib, pkgs, ... }:
2
{
3
mossnet.gonic.enable = true;
4
mossnet.gonic.settings = ''
5
music-path /mnt/two/music/
6
podcast-path /data/podcasts
7
cache-path /data/cache
8
'';
9
-
mossnet.gonic.user = "headphones";
10
mossnet.gonic.group = "audio";
11
networking.firewall.allowedTCPPorts = [ 4747 ];
12
}
···
1
{ config, lib, pkgs, ... }:
2
{
3
+
environment.systemPackages = [ pkgs.ffmpeg ];
4
mossnet.gonic.enable = true;
5
mossnet.gonic.settings = ''
6
music-path /mnt/two/music/
7
podcast-path /data/podcasts
8
cache-path /data/cache
9
+
playlists-path /data/playlists
10
+
transcode-cache-size 1000
11
+
transcode-eject-interval 1440
12
'';
13
+
mossnet.gonic.user = "gonic";
14
mossnet.gonic.group = "audio";
15
networking.firewall.allowedTCPPorts = [ 4747 ];
16
+
17
+
users.users.gonic = {
18
+
# uid = config.ids.uids.headphones;
19
+
# isSystemUser = true;
20
+
group = "audio";
21
+
# home = "/var/lib/headphones";
22
+
createHome = true;
23
+
};
24
}
-4
hosts/profiles/gonic/module-gonic.nix
-4
hosts/profiles/gonic/module-gonic.nix
···
68
Group = cfg.group;
69
DevicePolicy = "closed";
70
NoNewPrivileges = " yes";
71
-
PrivateTmp = "yes";
72
-
PrivateUsers = "yes";
73
ProtectControlGroups = "yes";
74
ProtectKernelModules = "yes";
75
ProtectKernelTunables = "yes";
76
RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6";
77
-
RestrictNamespaces = "yes";
78
-
RestrictRealtime = "yes";
79
SystemCallFilter = "~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap";
80
ReadWritePaths = dataFolder;
81
StateDirectory = baseNameOf dataFolder;
···
68
Group = cfg.group;
69
DevicePolicy = "closed";
70
NoNewPrivileges = " yes";
71
ProtectControlGroups = "yes";
72
ProtectKernelModules = "yes";
73
ProtectKernelTunables = "yes";
74
RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6";
75
SystemCallFilter = "~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap";
76
ReadWritePaths = dataFolder;
77
StateDirectory = baseNameOf dataFolder;
+16
hosts/profiles/gpodder/default.nix
+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
+
}
+30
hosts/profiles/immich/default.nix
+30
hosts/profiles/immich/default.nix
···
···
1
+
{ pkgs, config, ... }:
2
+
{
3
+
services.immich = {
4
+
enable = true;
5
+
database = {
6
+
enable = true;
7
+
};
8
+
host = "0.0.0.0";
9
+
port = 8567;
10
+
mediaLocation = "/mnt/two/photos";
11
+
openFirewall = true;
12
+
settings.server.externalDomain = "https://photos.sealight.xyz";
13
+
};
14
+
services.nginx.virtualHosts."photos.mossnet.lan" = {
15
+
enableACME = false;
16
+
forceSSL = false;
17
+
18
+
locations."/" = {
19
+
proxyPass = "http://127.0.0.1:${toString config.services.immich.port}";
20
+
proxyWebsockets = true;
21
+
recommendedProxySettings = true;
22
+
extraConfig = ''
23
+
client_max_body_size 50000M;
24
+
proxy_read_timeout 600s;
25
+
proxy_send_timeout 600s;
26
+
send_timeout 600s;
27
+
'';
28
+
};
29
+
};
30
+
}
+35
hosts/profiles/jacket/default.nix
+35
hosts/profiles/jacket/default.nix
···
···
1
+
{ config, lib, pkgs, ... }:
2
+
{
3
+
services.jackett = {
4
+
enable = true;
5
+
port = 8011;
6
+
user = "jackett";
7
+
group = "transmission";
8
+
package = pkgs.unstable.jackett;
9
+
};
10
+
services.nginx.virtualHosts."jackett.mossnet.lan" = {
11
+
enableACME = false;
12
+
forceSSL = false;
13
+
14
+
locations."/" = {
15
+
extraConfig = ''
16
+
proxy_pass http://127.0.0.1:8011/;
17
+
'';
18
+
};
19
+
};
20
+
services.lidarr = {
21
+
enable = true;
22
+
user = "headphones";
23
+
group = "audio";
24
+
};
25
+
services.nginx.virtualHosts."lidarr.mossnet.lan" = {
26
+
enableACME = false;
27
+
forceSSL = false;
28
+
29
+
locations."/" = {
30
+
extraConfig = ''
31
+
proxy_pass http://127.0.0.1:8686/;
32
+
'';
33
+
};
34
+
};
35
+
}
+2
-2
hosts/profiles/matrix/default.nix
+2
-2
hosts/profiles/matrix/default.nix
···
47
# The registration file is automatically generated after starting the appservice for the first time.
48
# cp /var/lib/matrix-appservice-discord/discord-registration.yaml /var/lib/matrix-synapse/
49
# chown matrix-synapse:matrix-synapse /var/lib/matrix-synapse/discord-registration.yaml
50
-
"/var/lib/matrix-synapse/telegram-registration.yaml"
51
"/var/lib/matrix-synapse/signal-registration.yaml"
52
-
"/var/lib/matrix-as-whatsapp/whatsapp-registration.yaml"
53
"/var/lib/matrix-as-discord/discord-registration.yaml"
54
# "/var/lib/matrix-synapse/slack-registration.yaml"
55
# "/var/lib/matrix-synapse/discord-registration.yaml"
···
47
# The registration file is automatically generated after starting the appservice for the first time.
48
# cp /var/lib/matrix-appservice-discord/discord-registration.yaml /var/lib/matrix-synapse/
49
# chown matrix-synapse:matrix-synapse /var/lib/matrix-synapse/discord-registration.yaml
50
+
# "/var/lib/matrix-synapse/telegram-registration.yaml"
51
"/var/lib/matrix-synapse/signal-registration.yaml"
52
+
#"/var/lib/matrix-as-whatsapp/whatsapp-registration.yaml"
53
"/var/lib/matrix-as-discord/discord-registration.yaml"
54
# "/var/lib/matrix-synapse/slack-registration.yaml"
55
# "/var/lib/matrix-synapse/discord-registration.yaml"
+33
-33
hosts/profiles/matrix/mautrix-services.nix
+33
-33
hosts/profiles/matrix/mautrix-services.nix
···
2
3
{
4
# Mautrix-signal settings
5
-
services.signald.enable = true;
6
-
systemd.services.matrix-as-signal = {
7
-
requires = [ "signald.service" ];
8
-
after = [ "signald.service" ];
9
-
unitConfig = {
10
-
JoinsNamespaceOf = "signald.service";
11
-
};
12
-
path = [
13
-
pkgs.ffmpeg # voice messages need `ffmpeg`
14
-
];
15
-
};
16
17
services.matrix-appservices = {
18
addRegistrationFiles = false;
19
homeserverURL = "https://sealight.xyz/";
20
homeserverDomain = "sealight.xyz";
21
services = {
22
-
whatsapp = {
23
-
port = 29183;
24
-
format = "mautrix-go";
25
-
package = pkgs.mautrix-whatsapp;
26
-
};
27
28
discord = {
29
port = 29188;
30
format = "mautrix-go";
31
-
package = pkgs.my-mautrix-discord;
32
};
33
34
-
signal = {
35
-
port = 29184;
36
-
format = "mautrix-python";
37
-
package = pkgs.mautrix-signal;
38
-
serviceConfig = {
39
-
StateDirectory = [ "matrix-as-signal" "signald" ];
40
-
SupplementaryGroups = [ "signald" ];
41
-
TimeoutStopSec = 1; # work around the service ignoring SIGTERM, see https://gitlab.com/coffeetables/nix-matrix-appservices/-/issues/12
42
-
User = lib.mkForce config.services.signald.user;
43
-
Group = lib.mkForce config.services.signald.group;
44
-
};
45
-
settings.signal = {
46
-
socket_path = config.services.signald.socketPath;
47
-
outgoing_attachment_dir = "/var/lib/signald/tmp";
48
-
};
49
-
};
50
};
51
};
52
}
···
2
3
{
4
# Mautrix-signal settings
5
+
# services.signald.enable = true;
6
+
# systemd.services.matrix-as-signal = {
7
+
# requires = [ "signald.service" ];
8
+
# after = [ "signald.service" ];
9
+
# unitConfig = {
10
+
# JoinsNamespaceOf = "signald.service";
11
+
# };
12
+
# path = [
13
+
# pkgs.ffmpeg # voice messages need `ffmpeg`
14
+
# ];
15
+
# };
16
17
services.matrix-appservices = {
18
addRegistrationFiles = false;
19
homeserverURL = "https://sealight.xyz/";
20
homeserverDomain = "sealight.xyz";
21
services = {
22
+
# whatsapp = {
23
+
# port = 29183;
24
+
# format = "mautrix-go";
25
+
# package = pkgs.mautrix-whatsapp;
26
+
# };
27
28
discord = {
29
port = 29188;
30
format = "mautrix-go";
31
+
package = pkgs.mautrix-discord;
32
};
33
34
+
# signal = {
35
+
# port = 29184;
36
+
# format = "mautrix-python";
37
+
# package = pkgs.mautrix-signal;
38
+
# serviceConfig = {
39
+
# # StateDirectory = [ "matrix-as-signal" "signald" ];
40
+
# # SupplementaryGroups = [ "signald" ];
41
+
# TimeoutStopSec = 1; # work around the service ignoring SIGTERM, see https://gitlab.com/coffeetables/nix-matrix-appservices/-/issues/12
42
+
# # User = lib.mkForce config.services.signald.user;
43
+
# # Group = lib.mkForce config.services.signald.group;
44
+
# };
45
+
# # settings.signal = {
46
+
# # socket_path = config.services.signald.socketPath;
47
+
# # outgoing_attachment_dir = "/var/lib/signald/tmp";
48
+
# # };
49
+
# };
50
};
51
};
52
}
+2
-2
hosts/profiles/microbin/default.nix
+2
-2
hosts/profiles/microbin/default.nix
···
1
{ config, lib, pkgs, ... }:
2
{
3
services.microbin.enable = true;
4
+
services.microbin.settings.PUBLIC_PATH = "bin.sealight.xyz";
5
+
services.microbin.settings.MICROBIN_PORT = 4949;
6
networking.firewall.allowedTCPPorts = [ 4949 ];
7
services.nginx.virtualHosts."bin.sealight.xyz" = {
8
enableACME = true;
+1
hosts/profiles/mossnet-hosts/default.nix
+1
hosts/profiles/mossnet-hosts/default.nix
+6
-5
hosts/profiles/music/default.nix
+6
-5
hosts/profiles/music/default.nix
···
12
# Plugins
13
helm
14
# surge
15
-
distrho
16
orca-c
17
supercollider
18
dirt
19
-
sunvox
20
vcv-rack
21
lmms
22
bespokesynth
23
lsp-plugins
24
helio-workstation
25
-
projectm # milkdrop visualizer
26
27
# DAWs
28
# ardour
···
30
# renoise
31
];
32
33
-
hardware.pulseaudio.enable = lib.mkForce false;
34
security.rtkit.enable = false;
35
36
services.pipewire = {
···
38
alsa.enable = true;
39
alsa.support32Bit = false;
40
pulse.enable = true;
41
-
jack.enable = true;
42
# Deprecated as of 23.05
43
# config = {
44
# pipewire."context.properties"."default.clock.rate" = "48000";
···
12
# Plugins
13
helm
14
# surge
15
+
# distrho
16
orca-c
17
supercollider
18
dirt
19
+
# sunvox
20
vcv-rack
21
lmms
22
bespokesynth
23
lsp-plugins
24
helio-workstation
25
+
# projectm # milkdrop visualizer
26
+
# i think it's projectm-sdl-cpp now
27
28
# DAWs
29
# ardour
···
31
# renoise
32
];
33
34
+
services.pulseaudio.enable = false;
35
security.rtkit.enable = false;
36
37
services.pipewire = {
···
39
alsa.enable = true;
40
alsa.support32Bit = false;
41
pulse.enable = true;
42
+
jack.enable = true;
43
# Deprecated as of 23.05
44
# config = {
45
# 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
# TODO it's perhaps advisable to stop all services that depend on postgresql
7
systemctl stop postgresql
8
9
-
# TODO replace `<new version>` with the psqlSchema here
10
# The schema can be found by running:
11
-
# nix-instantiate '<nixpkgs>' --eval -A postgresql_14.psqlSchema
12
-
export NEWDATA="/var/lib/postgresql/<new version>"
13
14
# TODO specify the postgresql package you'd like to upgrade to
15
-
export NEWBIN="${pkgs.postgresql_14}/bin"
16
17
export OLDDATA="${config.services.postgresql.dataDir}"
18
export OLDBIN="${config.services.postgresql.package}/bin"
···
6
# TODO it's perhaps advisable to stop all services that depend on postgresql
7
systemctl stop postgresql
8
9
# The schema can be found by running:
10
+
# nix eval --raw nixpkgs#postgresql_15.psqlSchema
11
+
export NEWDATA="/var/lib/postgresql/15"
12
13
# TODO specify the postgresql package you'd like to upgrade to
14
+
export NEWBIN="${pkgs.postgresql_15}/bin"
15
16
export OLDDATA="${config.services.postgresql.dataDir}"
17
export OLDBIN="${config.services.postgresql.package}/bin"
+1
hosts/profiles/radicale/default.nix
+1
hosts/profiles/radicale/default.nix
+1
-1
hosts/profiles/rss-bridge/default.nix
+1
-1
hosts/profiles/rss-bridge/default.nix
+5
-2
hosts/profiles/sync/music/default.nix
+5
-2
hosts/profiles/sync/music/default.nix
···
5
serviceConfig.Type = "oneshot";
6
path = [
7
pkgs.coreutils
8
pkgs.rsync
9
];
10
script = builtins.readFile ./get-music.sh;
11
serviceConfig = {
12
User = "anish";
13
};
14
};
15
-
systemd.timers.get-music-timer = {
16
wantedBy = [ "timers.target" ];
17
partOf = [ "get-music-sync.service" ];
18
-
timerConfig.OnCalendar = [ "daily" ];
19
};
20
}
···
5
serviceConfig.Type = "oneshot";
6
path = [
7
pkgs.coreutils
8
+
pkgs.openssh
9
+
pkgs.gawk
10
pkgs.rsync
11
+
pkgs.beets
12
];
13
script = builtins.readFile ./get-music.sh;
14
serviceConfig = {
15
User = "anish";
16
};
17
};
18
+
systemd.timers.get-music-sync = {
19
wantedBy = [ "timers.target" ];
20
partOf = [ "get-music-sync.service" ];
21
+
timerConfig.OnCalendar = [ "hourly" ];
22
};
23
}
+58
-6
hosts/profiles/sync/music/get-music.sh
+58
-6
hosts/profiles/sync/music/get-music.sh
···
1
#!/usr/bin/env bash
2
-
rsync -r --ignore-existing --log-file=/data/incoming/download-log hypercube@talos.feralhosting.com:private/transmission/data/* /data/incoming
3
4
-
# you need to set defaults for beets
5
-
# if already imported -> Skip
6
-
# Auto accept changes
7
-
# also install it lmao
8
-
#beet import /data/incoming
9
···
1
#!/usr/bin/env bash
2
3
+
set -euo pipefail
4
+
5
+
REMOTE_HOST="aynish@talos.feralhosting.com"
6
+
REMOTE_PATH="private/transmission/data/"
7
+
LOCAL_PATH="/mnt/two/incoming"
8
+
TRACKING_FILE="/mnt/two/incoming/.downloaded_albums"
9
+
LOG_FILE="/mnt/two/incoming/download-log"
10
+
11
+
# Create tracking file if it doesn't exist
12
+
touch "$TRACKING_FILE"
13
14
+
# Get list of albums on remote server
15
+
echo "$(date): Checking for new albums on seedbox..." >>"$LOG_FILE"
16
+
REMOTE_ALBUMS=$(rsync --dry-run --list-only "$REMOTE_HOST:$REMOTE_PATH" | grep '^d' | awk '{$1=$2=$3=$4=""; sub(/^ +/, ""); print}' | grep -v '^\.') || true
17
+
18
+
if [ -z "$REMOTE_ALBUMS" ]; then
19
+
echo "$(date): No albums found on remote server" >>"$LOG_FILE"
20
+
exit 0
21
+
fi
22
+
23
+
# Check each album against tracking file
24
+
NEW_ALBUMS=""
25
+
while IFS= read -r album; do
26
+
if [ -n "$album" ] && ! grep -qF "$album" "$TRACKING_FILE"; then
27
+
NEW_ALBUMS="$NEW_ALBUMS$album\n"
28
+
echo "$(date): Found new album: $album" >>"$LOG_FILE"
29
+
fi
30
+
done <<<"$REMOTE_ALBUMS"
31
+
32
+
if [ -z "$NEW_ALBUMS" ]; then
33
+
echo "$(date): No new albums to download" >>"$LOG_FILE"
34
+
exit 0
35
+
fi
36
+
37
+
# Download new albums only
38
+
echo "$(date): Starting download of new albums..." >>"$LOG_FILE"
39
+
while IFS= read -r album; do
40
+
if [ -n "$album" ]; then
41
+
echo "$(date): Downloading $album" >>"$LOG_FILE"
42
+
if rsync -r --log-file="$LOG_FILE" "$REMOTE_HOST:$REMOTE_PATH$album/" "$LOCAL_PATH/$album/"; then
43
+
echo "$album" >>"$TRACKING_FILE"
44
+
echo "$(date): Successfully downloaded $album" >>"$LOG_FILE"
45
+
46
+
# Import to beets
47
+
echo "$(date): Importing $album to beets..." >>"$LOG_FILE"
48
+
# Set umask to allow group read/write access
49
+
umask 002
50
+
if beet -p fetchart import -m -l /home/anish/music.log -q -g "$LOCAL_PATH/$album"; then
51
+
echo "$(date): Successfully imported $album to beets" >>"$LOG_FILE"
52
+
else
53
+
echo "$(date): Failed to import $album to beets" >>"$LOG_FILE"
54
+
fi
55
+
else
56
+
echo "$(date): Failed to download $album" >>"$LOG_FILE"
57
+
fi
58
+
fi
59
+
done <<<"$(echo -e "$NEW_ALBUMS")"
60
+
61
+
echo "$(date): Music sync completed" >>"$LOG_FILE"
+2
-2
hosts/profiles/sync/website/default.nix
+2
-2
hosts/profiles/sync/website/default.nix
+3
hosts/profiles/transmission/beet-import.sh
+3
hosts/profiles/transmission/beet-import.sh
+33
hosts/profiles/transmission/default.nix
+33
hosts/profiles/transmission/default.nix
···
···
1
+
{ pkgs, ... }:
2
+
{
3
+
environment.systemPackages = [ pkgs.beets ];
4
+
services.transmission = {
5
+
enable = true;
6
+
settings = {
7
+
rpc-enabled = true;
8
+
rpc-bind-address = "0.0.0.0";
9
+
rpc-whitelist-enabled = false;
10
+
script-torrent-done-enabled = true;
11
+
# Normally, I would write this into the homedir with home-manager
12
+
# And explictly set the dir to be the output of the home-manager location
13
+
script-torrent-done-filename = pkgs.writeShellScript "beet-import.sh" ''
14
+
#!/usr/bin/env bash
15
+
16
+
beet -p fetchart import -l /home/anish/music.log -q -g "$TR_TORRENT_DIR"
17
+
'';
18
+
rpc-url = "/transmission/rpc/";
19
+
download-dir = "/mnt/two/new-music";
20
+
};
21
+
};
22
+
services.nginx.virtualHosts."transmission.mossnet.lan" = {
23
+
enableACME = false;
24
+
forceSSL = false;
25
+
26
+
locations."/" = {
27
+
extraConfig = ''
28
+
proxy_pass http://localhost:9091/;
29
+
proxy_set_header X-Forwarded-Host $host;
30
+
'';
31
+
};
32
+
};
33
+
}
+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
{ self, pkgs, config, lib, ... }:
2
3
{
4
-
# age.secrets.wallabag-password.file = "${self}/secrets/wallabag-password.age";
5
-
# age.secrets.wallabag-secret.file = "${self}/secrets/wallabag-secret.age";
6
-
# age.secrets.wallabag-password.owner = "wallabag";
7
-
# age.secrets.wallabag-secret.owner = "wallabag";
8
services.postgresql = {
9
enable = true;
10
package = pkgs.postgresql_15;
···
18
}
19
];
20
authentication = ''
21
-
local wallabag all md5
22
'';
23
};
24
25
services.wallabag = {
26
enable = true;
27
-
hostName = "read.mossnet.lan";
28
-
package = pkgs.wallabag;
29
-
conf = ''
30
-
# This file is a "template" of what your parameters.yml file should look like
31
-
parameters:
32
-
database_driver: pdo_pgsql
33
-
database_host: localhost
34
-
database_port: ~
35
-
database_name: wallabag
36
-
database_user: wallabag
37
-
database_password: wallabag
38
-
# For SQLite, database_path should be "%kernel.project_dir%/data/db/wallabag.sqlite"
39
-
database_path: ~
40
-
database_table_prefix: wallabag_
41
-
database_socket: null
42
-
# with PostgreSQL and SQLite, you must set "utf8"
43
-
database_charset: utf8
44
-
45
-
domain_name: http://read.mossnet.lan/
46
-
server_name: "mossnet wallabag instance"
47
-
48
-
mailer_dsn: null://
49
-
locale: en
50
-
51
-
# A secret key that's used to generate certain security-related tokens
52
-
secret: SAFGOECRIlfal89oe6u0(*^dsaaih961
53
-
54
-
# two factor stuff
55
-
twofactor_auth: false
56
-
twofactor_sender: no-reply@wallabag.org
57
-
58
-
# fosuser stuff
59
-
fosuser_registration: false
60
-
fosuser_confirmation: true
61
-
62
-
# how long the access token should live in seconds for the API
63
-
fos_oauth_server_access_token_lifetime: 3600
64
-
# how long the refresh token should life in seconds for the API
65
-
fos_oauth_server_refresh_token_lifetime: 1209600
66
-
67
-
from_email: ops@sealight.xyz
68
-
69
-
rss_limit: 50
70
-
71
-
# RabbitMQ processing
72
-
rabbitmq_host: localhost
73
-
rabbitmq_port: 5672
74
-
rabbitmq_user: guest
75
-
rabbitmq_password: guest
76
-
rabbitmq_prefetch_count: 10
77
-
78
-
# Redis processing
79
-
redis_scheme: tcp
80
-
redis_host: localhost
81
-
redis_port: 6379
82
-
redis_path: null
83
-
redis_password: null
84
-
85
-
# sentry logging
86
-
sentry_dsn: ~
87
-
'';
88
};
89
-
# networking.firewall.allowedTCPPorts = [ 8080 ];
90
}
···
1
{ self, pkgs, config, lib, ... }:
2
3
{
4
+
age.secrets.wallabag-password.file = "${self}/secrets/wallabag-password.age";
5
+
age.secrets.wallabag-secret.file = "${self}/secrets/wallabag-secret.age";
6
+
age.secrets.wallabag-password.owner = "wallabag";
7
+
age.secrets.wallabag-secret.owner = "wallabag";
8
services.postgresql = {
9
enable = true;
10
package = pkgs.postgresql_15;
···
18
}
19
];
20
authentication = ''
21
+
local wallabag all peer
22
'';
23
};
24
25
services.wallabag = {
26
enable = true;
27
+
domain = "read.mossnet.lan";
28
+
virtualHost.enable = true;
29
+
package = pkgs.my-wallabag;
30
+
# Systemd now defaults to /var/lib?
31
+
# dataDir = "/var/lib/wallabag";
32
+
parameters = {
33
+
"env(SECRET_FILE)" = config.age.secrets.wallabag-secret.path;
34
+
secret = "%env(file:resolve:SECRET_FILE)%";
35
+
};
36
};
37
}
+10
-5
hosts/profiles/wireguard-server/default.nix
+10
-5
hosts/profiles/wireguard-server/default.nix
···
36
publicKey = "gcdq86hhEUlqF2chqYB/F8pALyAMNFvwLycxBoHuoDs=";
37
allowedIPs = [ "10.0.69.5/32" ];
38
}
39
+
{
40
+
# hyperplane
41
+
publicKey = "v+EUuM60yZLvBmdCG9GxfFAtSjS1VvbUWcyNb8emjDg=";
42
+
allowedIPs = [ "10.0.69.6/32" ];
43
+
}
44
+
{
45
+
# work
46
+
publicKey = "/gv66s8DfppCCjaEN/jlc8z95IhEWPgDumykqKEl0QU=";
47
+
allowedIPs = [ "10.0.69.7/32" ];
48
+
}
49
];
50
};
51
}
+6
-3
hosts/users/anish/default.nix
+6
-3
hosts/users/anish/default.nix
···
4
programs.zsh.enable = true;
5
users.users.anish = {
6
description = "Personal user for Anish";
7
-
hashedPassword = "$y$j9T$y3DPt/dWaPE.gRazQqw1w0$1RMH5sl/Nu8kW3ZMywYCPRniHD/jF5qRh0VKrdJ.bV2";
8
shell = pkgs.zsh;
9
isNormalUser = true;
10
extraGroups = [ "wheel" "audio" "networkmanager" "video" ];
11
openssh.authorizedKeys.keys = [
12
# Curve
13
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDM0Zvei46x/yZl/IeBCq6+IYQQ0avulzVyBysF9cPigZMCybWRV7IEU+E3k9t6JrbdbdGfJkcZIWmsWDdKS8W8mBnZpVoT0ffLynu8JQ/TKdGm4Qv6bgUeKNrGsNv0ZPs2CDaGSLj0oJfRF7Ko10tcLP0vW+yujrh+y6TH/vVzJioaV4TGvtCUpn+wEQah9ROwPQLUUofsSWdnRsDJ/gp37zXWs4l5wyjSKtP3O9RZUP7kBekbSqEgSXiTk0oUQSVqIWl9NDiP6onk/gSOjXsR/JPqsSN/XI/c/yj6gyY0f51Ru2D7iBxuMJIJcWV+rU6coIj+ULcQWLzt/7TI8jq5AOOzI/ll4zbL24Eo84Rz+TP9tvMMhDZ0VaMN22AJ8qQEjc5P09tWKsX7Jg39XelyV1jHXncE4yvIE9F4RSCHzWCeKeXakizQNuzSaxTxIExRFYHjNW5bR6+3MTGwVrEIXU+qML+0yFTR86MT+tdY5AreAJQLwbog79O1NupeXJE= anish@curve"
14
-
# Line
15
-
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDtU2GMYjXj6RGO1+mwM4TDGOo0qrKLTL4Di8+QgDX0p5vUEsnE1PS9wnuqCmSu75U8g0XIAMtvtdYyGk1N+Bx01erAZpT8DLYtIXFCyaiN28PVu5T1D0T+TQ7xgIH1qenXZR2DOQdf6kpvKEfm7+7bWhCo0N/KFMpmReubyzHDQcq/1qQasxTL+YALQFOjwKqsOTBXbHwZ103AEAcQX4ftBFEOfVli4/1aKIK4dNSZYB7J9Htq707YnsEqo9RLAMh0aOTTYgTx9AoSUDeqGuh/AGkcB7NcS7EEtI6d5YUGylwZh/gF6hqE0jl8kn2m5jMKXL3CRohZvjifue8x/GIjpu5WRabUuhBEbrfTQQaC7taHnt5rvYCGzKZx09TexUzhuz2CL480DRoxSG+P+lCNm1dIg/EZrnGEzXCSr36PlOqS5t5gm8tPkzCmZf2wU15A3ZIYUPmnYLqsn4WmIV7rKmdqt2ctWELUXow3PPiZXBucP9P3xpsYEfF1SB2SGNc= u0_a139@localhost"
16
# Box
17
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKN8/SH55DBiwVoSnTU8k2Pen+wmovL9QaMyehxGEsJJv/8fzwsswGalD4C/4O51LOvdu4UKkZW5hG02uVSK+58p3UV3pOPyoqsu/aDeIsWsqmTeTzUrBIWOlNzcDKnohLz2oGC5YO+wyTJ9Iteq6aGJDjErsW7sG3h5lXCs551EmJNNGhtBQaaoytMNnWqSdlVjDNCijurH7WUpp40U/RjEp532l4rX6eIIj3jBKEFbhZkFSSjqbj4xM4SyFt+Jmigb1RMjsQjmpfY1vDtM84RcYfpTUte/T5w2dkD5H6kccmWnwKSJpm9wXfx4E7lR9APdUGnau2U1+XxiD3ytGl anish@box"
18
];
19
};
20
}
···
4
programs.zsh.enable = true;
5
users.users.anish = {
6
description = "Personal user for Anish";
7
+
hashedPassword =
8
+
"$y$j9T$y3DPt/dWaPE.gRazQqw1w0$1RMH5sl/Nu8kW3ZMywYCPRniHD/jF5qRh0VKrdJ.bV2";
9
shell = pkgs.zsh;
10
isNormalUser = true;
11
extraGroups = [ "wheel" "audio" "networkmanager" "video" ];
12
openssh.authorizedKeys.keys = [
13
# Curve
14
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDM0Zvei46x/yZl/IeBCq6+IYQQ0avulzVyBysF9cPigZMCybWRV7IEU+E3k9t6JrbdbdGfJkcZIWmsWDdKS8W8mBnZpVoT0ffLynu8JQ/TKdGm4Qv6bgUeKNrGsNv0ZPs2CDaGSLj0oJfRF7Ko10tcLP0vW+yujrh+y6TH/vVzJioaV4TGvtCUpn+wEQah9ROwPQLUUofsSWdnRsDJ/gp37zXWs4l5wyjSKtP3O9RZUP7kBekbSqEgSXiTk0oUQSVqIWl9NDiP6onk/gSOjXsR/JPqsSN/XI/c/yj6gyY0f51Ru2D7iBxuMJIJcWV+rU6coIj+ULcQWLzt/7TI8jq5AOOzI/ll4zbL24Eo84Rz+TP9tvMMhDZ0VaMN22AJ8qQEjc5P09tWKsX7Jg39XelyV1jHXncE4yvIE9F4RSCHzWCeKeXakizQNuzSaxTxIExRFYHjNW5bR6+3MTGwVrEIXU+qML+0yFTR86MT+tdY5AreAJQLwbog79O1NupeXJE= anish@curve"
15
# Box
16
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKN8/SH55DBiwVoSnTU8k2Pen+wmovL9QaMyehxGEsJJv/8fzwsswGalD4C/4O51LOvdu4UKkZW5hG02uVSK+58p3UV3pOPyoqsu/aDeIsWsqmTeTzUrBIWOlNzcDKnohLz2oGC5YO+wyTJ9Iteq6aGJDjErsW7sG3h5lXCs551EmJNNGhtBQaaoytMNnWqSdlVjDNCijurH7WUpp40U/RjEp532l4rX6eIIj3jBKEFbhZkFSSjqbj4xM4SyFt+Jmigb1RMjsQjmpfY1vDtM84RcYfpTUte/T5w2dkD5H6kccmWnwKSJpm9wXfx4E7lR9APdUGnau2U1+XxiD3ytGl anish@box"
17
+
# Nix-on-droid line
18
+
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJOiXBPVvZAp1fY0a0Tupxj0Ml6MoA51lvqt/jAQq249 nix-on-droid@localhost"
19
+
# Work
20
+
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC/vvh0i6+uAN0GWlK6ZfyTlc/AW54xe2CroUDsDSoGnFKeIUiSsWexobODlVakNhqwCKfsvUh6g+RdA8ZVcamATcYqxysP4X5fRksmAzRm5281O7ZBDHMB2BdcfHSTgiz7JvMRIQYWDlU8Ck6IL4wlN0b2GMUj9t/GeG37us8280rxpRNoIY7M27AJEZ7XNQhctBIVujxctVBgIMYmZiTwziU7ywJv4rNT5OAWvjRXSo1rkxdvx3VESv4y/mp8m7dEupZpIjIFsLs52+UG5LtadulUqtTWg05sCw8LEcmRhflgZSAvjw60RrKFCuWxc8+/Pmaw+zExeBMenqi0NzuTc3S3k2wCKVIZDh/0tlXzIwZ6WRqxDevUtEKfvbEFMXd8akhTfYs0dyszcFRevBxOBPbcKku+FK/HkdPLmEANvxYty3cv+Eipkz3c8JPJPvXNTXrjepXMm0LUKodO3c15hGogCOxUO38kykkyYnn+MxxHparoMfEr2+oHNpQoS5wA1G43ppqjVoRDgnhleu6ixwRkLZzphY3cnOd5jL9Ie5xIGbFWH1qSlQRdHBkHjuf85z7+QK8nFYAhmG1K3Vt3GNtF8LN1tYQkfwBJ/vsroMNzGPoq4PjVbqb80Eq+96cP89XKfU2/xw1g+p2lJDm/zC1WCjXVzf8NRwC7gqPavQ== anishlakhwara@anishs-mbp.lan"
21
];
22
};
23
}
install-encrypted.sh
install-encrypted.sh
+2
-2
install-yubikey.sh
+2
-2
install-yubikey.sh
···
19
20
# Yubikey Setup
21
SLOT=2
22
-
ykpersonalize -"$SLOT" -ochal-resp -ochal-hmac
23
SALT_LENGTH=16
24
salt="$(dd if=/dev/random bs=1 count=$SALT_LENGTH 2>/dev/null | rbtohex)"
25
k_user=PASSWORDCHANGEMEPLAEASES
···
147
sound.enable = true;
148
hardware.pulseaudio.enable = true;
149
150
-
services.xserver.libinput.enable = true;
151
152
# Hmmm maybe somewhere else?
153
users.users.anish = {
···
19
20
# Yubikey Setup
21
SLOT=2
22
+
# ykpersonalize -"$SLOT" -ochal-resp -ochal-hmac
23
SALT_LENGTH=16
24
salt="$(dd if=/dev/random bs=1 count=$SALT_LENGTH 2>/dev/null | rbtohex)"
25
k_user=PASSWORDCHANGEMEPLAEASES
···
147
sound.enable = true;
148
hardware.pulseaudio.enable = true;
149
150
+
services.libinput.enable = true;
151
152
# Hmmm maybe somewhere else?
153
users.users.anish = {
-12
modules/darwin/README.md
-12
modules/darwin/README.md
···
1
-
2
-
## Layout
3
-
```
4
-
.
5
-
โโโ dock # MacOS dock configuration
6
-
โโโ casks.nix # List of homebrew casks
7
-
โโโ default.nix # Defines module, system-level config
8
-
โโโ files.nix # Non-Nix, static configuration files (now immutable!)
9
-
โโโ home-manager.nix # Defines user programs
10
-
โโโ packages.nix # List of packages to install for MacOS
11
-
โโโ secrets.nix # Age-encrypted secrets with agenix
12
-
```
···
-67
modules/darwin/dock/default.nix
-67
modules/darwin/dock/default.nix
···
1
-
{ config, pkgs, lib, ... }:
2
-
with lib;
3
-
let
4
-
cfg = config.local.dock;
5
-
inherit (pkgs) stdenv dockutil;
6
-
in
7
-
{
8
-
options = {
9
-
local.dock.enable = mkOption {
10
-
description = "Enable dock";
11
-
default = stdenv.isDarwin;
12
-
example = false;
13
-
};
14
-
15
-
local.dock.entries = mkOption
16
-
{
17
-
description = "Entries on the Dock";
18
-
type = with types; listOf (submodule {
19
-
options = {
20
-
path = lib.mkOption { type = str; };
21
-
section = lib.mkOption {
22
-
type = str;
23
-
default = "apps";
24
-
};
25
-
options = lib.mkOption {
26
-
type = str;
27
-
default = "";
28
-
};
29
-
};
30
-
});
31
-
readOnly = true;
32
-
};
33
-
};
34
-
35
-
config =
36
-
mkIf cfg.enable
37
-
(
38
-
let
39
-
normalize = path: if hasSuffix ".app" path then path + "/" else path;
40
-
entryURI = path: "file://" + (builtins.replaceStrings
41
-
[" " "!" "\"" "#" "$" "%" "&" "'" "(" ")"]
42
-
["%20" "%21" "%22" "%23" "%24" "%25" "%26" "%27" "%28" "%29"]
43
-
(normalize path)
44
-
);
45
-
wantURIs = concatMapStrings
46
-
(entry: "${entryURI entry.path}\n")
47
-
cfg.entries;
48
-
createEntries = concatMapStrings
49
-
(entry: "${dockutil}/bin/dockutil --no-restart --add '${entry.path}' --section ${entry.section} ${entry.options}\n")
50
-
cfg.entries;
51
-
in
52
-
{
53
-
system.activationScripts.postUserActivation.text = ''
54
-
echo >&2 "Setting up the Dock..."
55
-
haveURIs="$(${dockutil}/bin/dockutil --list | ${pkgs.coreutils}/bin/cut -f2)"
56
-
if ! diff -wu <(echo -n "$haveURIs") <(echo -n '${wantURIs}') >&2 ; then
57
-
echo >&2 "Resetting Dock."
58
-
${dockutil}/bin/dockutil --no-restart --remove all
59
-
${createEntries}
60
-
killall Dock
61
-
else
62
-
echo >&2 "Dock setup complete."
63
-
fi
64
-
'';
65
-
}
66
-
);
67
-
}
···
-54
modules/darwin/files.nix
-54
modules/darwin/files.nix
···
1
-
{ user, config, pkgs, ... }:
2
-
3
-
let
4
-
xdg_configHome = "${config.users.users.${user}.home}/.config";
5
-
xdg_dataHome = "${config.users.users.${user}.home}/.local/share";
6
-
xdg_stateHome = "${config.users.users.${user}.home}/.local/state"; in
7
-
{
8
-
9
-
# Raycast script so that "Run Emacs" is available and uses Emacs daemon
10
-
"${xdg_dataHome}/bin/emacsclient" = {
11
-
executable = true;
12
-
text = ''
13
-
#!/bin/zsh
14
-
#
15
-
# Required parameters:
16
-
# @raycast.schemaVersion 1
17
-
# @raycast.title Run Emacs
18
-
# @raycast.mode silent
19
-
#
20
-
# Optional parameters:
21
-
# @raycast.packageName Emacs
22
-
# @raycast.icon ${xdg_dataHome}/img/icons/Emacs.icns
23
-
# @raycast.iconDark ${xdg_dataHome}/img/icons/Emacs.icns
24
-
25
-
if [[ $1 = "-t" ]]; then
26
-
# Terminal mode
27
-
${pkgs.emacs}/bin/emacsclient -t $@
28
-
else
29
-
# GUI mode
30
-
${pkgs.emacs}/bin/emacsclient -c -n $@
31
-
fi
32
-
'';
33
-
};
34
-
35
-
# Script to import Drafts into Emacs org-roam
36
-
"${xdg_dataHome}/bin/import-drafts" = {
37
-
executable = true;
38
-
text = ''
39
-
#!/bin/sh
40
-
41
-
for f in ${xdg_stateHome}/drafts/*
42
-
do
43
-
if [[ ! "$f" =~ "done" ]]; then
44
-
echo "Importing $f"
45
-
filename="$(head -c 10 $f)"
46
-
output="${xdg_dataHome}/org-roam/daily/$filename.org"
47
-
echo '\n' >> "$output"
48
-
tail -n +3 $f >> "$output"
49
-
mv $f done
50
-
fi
51
-
done
52
-
'';
53
-
};
54
-
}
···
-85
modules/darwin/home-manager.nix
-85
modules/darwin/home-manager.nix
···
1
-
{ config, pkgs, lib, home-manager, ... }:
2
-
3
-
let
4
-
user = "anishlakhwara";
5
-
# Define the content of your file as a derivation
6
-
myEmacsLauncher = pkgs.writeScript "emacs-launcher.command" ''
7
-
#!/bin/sh
8
-
emacsclient -c -n &
9
-
'';
10
-
sharedFiles = import ../shared/files.nix { inherit config pkgs; };
11
-
additionalFiles = import ./files.nix { inherit user config pkgs; };
12
-
in
13
-
{
14
-
imports = [
15
-
./dock
16
-
];
17
-
18
-
# It me
19
-
users.users.${user} = {
20
-
name = "${user}";
21
-
home = "/Users/${user}";
22
-
isHidden = false;
23
-
shell = pkgs.zsh;
24
-
};
25
-
26
-
# Enable home-manager
27
-
home-manager = {
28
-
useGlobalPkgs = true;
29
-
users.${user} = { pkgs, config, lib, ... }:{
30
-
home = {
31
-
enableNixpkgsReleaseCheck = false;
32
-
packages = pkgs.callPackage ./packages.nix {};
33
-
file = lib.mkMerge [
34
-
sharedFiles
35
-
additionalFiles
36
-
{ "emacs-launcher.command".source = myEmacsLauncher; }
37
-
];
38
-
39
-
stateVersion = "23.11";
40
-
};
41
-
42
-
programs = {} // import ../shared/home-manager.nix { inherit config pkgs lib; };
43
-
44
-
# Marked broken Oct 20, 2022 check later to remove this
45
-
# https://github.com/nix-community/home-manager/issues/3344
46
-
manual.manpages.enable = false;
47
-
};
48
-
};
49
-
50
-
# Fully declarative dock using the latest from Nix Store
51
-
local = {
52
-
dock.enable = true;
53
-
dock.entries = [
54
-
{ path = "/Applications/Slack.app/"; }
55
-
{ path = "/System/Applications/Messages.app/"; }
56
-
{ path = "/System/Applications/Facetime.app/"; }
57
-
{ path = "/Applications/Telegram.app/"; }
58
-
{ path = "${pkgs.alacritty}/Applications/Alacritty.app/"; }
59
-
{ path = "/System/Applications/Music.app/"; }
60
-
{ path = "/System/Applications/News.app/"; }
61
-
{ path = "/System/Applications/Photos.app/"; }
62
-
{ path = "/System/Applications/Photo Booth.app/"; }
63
-
{ path = "/System/Applications/TV.app/"; }
64
-
{ path = "${pkgs.jetbrains.phpstorm}/Applications/PhpStorm.app/"; }
65
-
{ path = "/Applications/TablePlus.app/"; }
66
-
{ path = "/Applications/Asana.app/"; }
67
-
{ path = "/Applications/Drafts.app/"; }
68
-
{ path = "/System/Applications/Home.app/"; }
69
-
{
70
-
path = toString myEmacsLauncher;
71
-
section = "others";
72
-
}
73
-
{
74
-
path = "${config.users.users.${user}.home}/.local/share/";
75
-
section = "others";
76
-
options = "--sort name --view grid --display folder";
77
-
}
78
-
{
79
-
path = "${config.users.users.${user}.home}/.local/share/downloads";
80
-
section = "others";
81
-
options = "--sort name --view grid --display stack";
82
-
}
83
-
];
84
-
};
85
-
}
···
-7
modules/darwin/packages.nix
-7
modules/darwin/packages.nix
-47
modules/darwin/secrets.nix
-47
modules/darwin/secrets.nix
···
1
-
{ config, pkgs, agenix, secrets, ... }:
2
-
3
-
let user = "dustin"; in
4
-
{
5
-
age = {
6
-
identityPaths = [
7
-
"/Users/${user}/.ssh/id_ed25519"
8
-
];
9
-
10
-
secrets = {
11
-
"syncthing-cert" = {
12
-
symlink = true;
13
-
path = "/Users/${user}/Library/Application Support/Syncthing/cert.pem";
14
-
file = "${secrets}/darwin-syncthing-cert.age";
15
-
mode = "644";
16
-
owner = "${user}";
17
-
group = "staff";
18
-
};
19
-
20
-
"syncthing-key" = {
21
-
symlink = true;
22
-
path = "/Users/${user}/Library/Application Support/Syncthing/key.pem";
23
-
file = "${secrets}/darwin-syncthing-key.age";
24
-
mode = "600";
25
-
owner = "${user}";
26
-
group = "staff";
27
-
};
28
-
29
-
"github-ssh-key" = {
30
-
symlink = true;
31
-
path = "/Users/${user}/.ssh/id_github";
32
-
file = "${secrets}/github-ssh-key.age";
33
-
mode = "600";
34
-
owner = "${user}";
35
-
group = "staff";
36
-
};
37
-
38
-
"github-signing-key" = {
39
-
symlink = false;
40
-
path = "/Users/${user}/.ssh/pgp_github.key";
41
-
file = "${secrets}/github-signing-key.age";
42
-
mode = "600";
43
-
owner = "${user}";
44
-
};
45
-
};
46
-
};
47
-
}
···
+2
-1
modules/nixos/default.nix
+2
-1
modules/nixos/default.nix
+1
-1
modules/nixos/gonic.nix
+1
-1
modules/nixos/gonic.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;
4
let
5
-
cfg = config.services.wallabag;
6
7
-
poolName = "wallabag";
8
9
-
configFile = pkgs.writeTextFile {
10
-
name = "wallabag-config";
11
-
text = cfg.conf;
12
-
destination = "/app/config/parameters.yml";
13
-
};
14
15
-
appDir = pkgs.buildEnv {
16
-
name = "wallabag-app-dir";
17
-
ignoreCollisions = true;
18
-
checkCollisionContents = false;
19
-
paths = [ configFile "${cfg.package}" ];
20
-
pathsToLink = [ "/app" "/src" "/translations" ];
21
-
};
22
23
-
# See there for available commands:
24
-
# https://doc.wallabag.org/en/admin/console_commands.html
25
-
# A user can be made admin with the fos:user:promote --super <user> command
26
-
console = pkgs.writeShellScriptBin "wallabag-console" ''
27
-
export WALLABAG_DATA="${cfg.dataDir}"
28
-
cd "${cfg.dataDir}"
29
-
${pkgs.php}/bin/php ${pkgs.wallabag}/bin/console --env=prod $@
30
-
'';
31
32
-
in
33
-
{
34
35
-
options = {
36
37
-
services.wallabag = {
38
-
enable = mkEnableOption "wallabag";
39
40
-
user = mkOption {
41
-
type = types.str;
42
-
default = "nginx";
43
-
description = ''
44
-
User account under which both the update daemon and the web-application run.
45
-
'';
46
-
};
47
48
-
dataDir = mkOption {
49
-
type = types.path;
50
-
default = "/var/lib/wallabag";
51
-
description = ''
52
-
Data directory.
53
-
'';
54
-
};
55
56
-
package = mkOption {
57
-
type = types.package;
58
-
default = pkgs.wallabag;
59
-
description = ''
60
-
Wallabag package to use.
61
-
'';
62
-
};
63
64
-
hostName = mkOption {
65
-
type = types.str;
66
-
description = ''
67
-
Name of the nginx virtualhost to use and setup.
68
-
'';
69
-
};
70
71
-
poolConfig = mkOption {
72
-
type = types.lines;
73
-
default = ''
74
-
pm = dynamic
75
-
pm.max_children = 75
76
-
pm.start_servers = 1
77
-
pm.min_spare_servers = 1
78
-
pm.max_spare_servers = 20
79
-
pm.max_requests = 500
80
-
catch_workers_output = 1
81
-
'';
82
-
description = ''
83
-
Options for wallabag's PHP pool. See the documentation on <literal>php-fpm.conf</literal> for details on configuration directives.
84
-
'';
85
-
};
86
87
-
conf = mkOption {
88
-
type = types.str;
89
-
description = ''
90
-
Contents of the wallabag configuration file (parameters.yml)
91
-
'';
92
-
};
93
-
};
94
};
95
96
97
-
config = mkIf cfg.enable {
98
99
-
services.phpfpm.pools."${poolName}" = {
100
-
user = "${cfg.user}";
101
-
group = "nginx";
102
-
phpPackage = pkgs.php;
103
-
phpEnv = {
104
-
WALLABAG_DATA = cfg.dataDir;
105
-
PATH = lib.makeBinPath [pkgs.php];
106
-
};
107
-
settings = {
108
-
"listen.owner" = "nginx";
109
-
"listen.group" = "nginx";
110
-
"listen.mode" = "0600";
111
-
"user" = "${cfg.user}";
112
-
"group" = "nginx";
113
-
"pm" = "dynamic";
114
-
"pm.max_children" = "75";
115
-
"pm.min_spare_servers" = "5";
116
-
"pm.max_spare_servers" = "20";
117
-
"pm.max_requests" = "10";
118
-
"catch_workers_output" = "1";
119
-
"php_admin_value[error_log]" = "stderr";
120
-
"php_admin_flag[log_errors]" = true;
121
-
};
122
};
123
-
services.phpfpm.phpOptions = ''
124
-
max_execution_time = 120
125
-
'';
126
127
-
services.nginx.enable = mkDefault true;
128
-
environment.systemPackages = [ console ];
129
130
-
# services.nginx.virtualHosts."${cfg.hostName}" = {
131
-
# forceSSL = false;
132
-
# enableACME = false;
133
-
# extraConfig = ''
134
-
# error_log /var/log/nginx/wallabag_error.log;
135
-
# access_log /var/log/nginx/wallabag_access.log;
136
-
# '';
137
138
-
# root = "${cfg.package}/web";
139
-
# locations."/" = {
140
-
# priority = 10;
141
-
# tryFiles = "$uri /app.php$is_args$args";
142
-
# };
143
-
# locations."/assets".root = "${cfg.dataDir}/web";
144
-
# locations."~ ^/app\\.php(/|$)" = {
145
-
# priority = 100;
146
-
# fastcgiParams = {
147
-
# SCRIPT_FILENAME = "$realpath_root$fastcgi_script_name";
148
-
# DOCUMENT_ROOT = "$realpath_root";
149
-
# };
150
-
# extraConfig = ''
151
-
# fastcgi_pass unix:${config.services.phpfpm.pools."${poolName}".socket};
152
-
# include ${config.services.nginx.package}/conf/fastcgi_params;
153
-
# include ${config.services.nginx.package}/conf/fastcgi.conf;
154
-
# internal;
155
-
# '';
156
-
# };
157
-
# locations."~ \\.php$" = {
158
-
# priority = 1000;
159
-
# return = "404";
160
-
# };
161
-
# };
162
163
164
-
services.nginx.virtualHosts."${cfg.hostName}" = {
165
-
enableACME = false;
166
-
forceSSL = false;
167
-
root = "${cfg.package}/web";
168
169
-
extraConfig = ''
170
-
add_header X-Frame-Options SAMEORIGIN;
171
-
add_header X-Content-Type-Options nosniff;
172
-
add_header X-XSS-Protection "1; mode=block";
173
-
'';
174
175
-
locations."/" = {
176
-
tryFiles = "$uri /app.php$is_args$args";
177
-
};
178
179
-
locations."/assets".root = "${cfg.dataDir}/web";
180
181
-
locations."~ ^/app\\.php(/|$)" = {
182
-
fastcgiParams = {
183
-
SCRIPT_FILENAME = "$realpath_root$fastcgi_script_name";
184
-
DOCUMENT_ROOT = "$realpath_root";
185
};
186
-
extraConfig = ''
187
-
fastcgi_pass unix:${config.services.phpfpm.pools."${poolName}".socket};
188
-
include ${config.services.nginx.package}/conf/fastcgi_params;
189
-
include ${config.services.nginx.package}/conf/fastcgi.conf;
190
-
internal;
191
-
'';
192
-
# extraConfig = ''
193
-
# fastcgi_pass unix:${config.services.phpfpm.pools."${poolName}".socket};
194
-
# fastcgi_split_path_info ^(.+\.php)(/.*)$;
195
-
# include ${pkgs.nginx}/conf/fastcgi_params;
196
-
# fastcgi_param SCRIPT_FILENAME ${cfg.package}/web/$fastcgi_script_name;
197
-
# fastcgi_param DOCUMENT_ROOT ${cfg.package}/web;
198
-
# fastcgi_read_timeout 120;
199
-
# internal;
200
-
# '';
201
};
202
203
-
locations."~ /(?!app)\\.php$" = {
204
-
extraConfig = ''
205
-
return 404;
206
-
'';
207
};
208
};
209
210
systemd.services.wallabag-install = {
211
description = "Wallabag install service";
212
wantedBy = [ "multi-user.target" ];
213
before = [ "phpfpm-wallabag.service" ];
214
-
after = [ "mysql.service" "postgresql.service" ];
215
path = with pkgs; [ coreutils php phpPackages.composer ];
216
217
serviceConfig = {
218
-
User = cfg.user;
219
Type = "oneshot";
220
-
RemainAfterExit = "yes";
221
-
PermissionsStartOnly = true;
222
-
};
223
-
224
-
preStart = ''
225
-
mkdir -p "${cfg.dataDir}"
226
-
chown ${cfg.user}:nginx "${cfg.dataDir}"
227
-
'';
228
229
script = ''
230
-
echo "Setting up wallabag files in ${cfg.dataDir} ..."
231
-
cd "${cfg.dataDir}"
232
-
233
-
rm -rf var/cache/*
234
-
rm -f app src translations
235
-
ln -sf ${appDir}/app app
236
-
ln -sf ${appDir}/src src
237
-
ln -sf ${appDir}/translations translations
238
-
ln -sf ${cfg.package}/composer.{json,lock} .
239
-
240
-
export WALLABAG_DATA="${cfg.dataDir}"
241
-
if [ ! -f installed ]; then
242
-
echo "Install file not found, installing ..."
243
-
php ${cfg.package}/bin/console --env=prod doctrine:database:create --if-not-exists --no-interaction
244
-
php ${cfg.package}/bin/console --env=prod doctrine:migrations:migrate --no-interaction
245
-
# Until https://github.com/wallabag/wallabag/issues/3662 is fixed
246
-
# yes no | php ${cfg.package}/bin/console --env=prod wallabag:install
247
-
touch installed
248
-
else
249
-
php ${cfg.package}/bin/console --env=prod doctrine:migrations:migrate --no-interaction
250
-
fi
251
-
php ${cfg.package}/bin/console --env=prod cache:clear
252
-
'';
253
};
254
-
};
255
-
256
-
meta = with stdenv.lib; {
257
-
maintainers = with maintainers; [ nadrieril ];
258
};
259
}
···
1
+
{ config, lib, pkgs, ... }:
2
let
3
+
# Based on https://github.com/wallabag/wallabag/blob/2.6.6/app/config/parameters.yml.dist
4
+
settings = {
5
+
database_driver = "${cfg.database_type}";
6
+
database_host = null;
7
+
database_port = 5432;
8
+
database_name = "wallabag";
9
+
database_user = "wallabag";
10
+
database_password = null;
11
+
database_path = null;
12
+
database_table_prefix = "wallabag_";
13
+
database_socket = "/run/postgresql";
14
+
database_charset = "utf8";
15
16
+
domain_name = "http://${cfg.domain}";
17
+
server_name = "Wallabag";
18
19
+
# Needs an explicit command since Symfony version used by Wallabag does not yet support the `native` transport
20
+
# and the `sendmail` transport does not respect `sendmail_path` configured in `php.ini`.
21
+
mailer_dsn = "sendmail://default?command=/run/wrappers/bin/sendmail%%20-t%%20-i";
22
23
+
locale = "en";
24
25
+
# A secret key that's used to generate certain security-related tokens.
26
+
# "env(SECRET_FILE)" = "/run/secrets/wallabag";
27
+
# secret = "%env(file:resolve:SECRET_FILE)%";
28
29
+
# two factor stuff
30
+
twofactor_auth = false;
31
+
twofactor_sender = "";
32
33
+
# fosuser stuff
34
+
fosuser_registration = false;
35
+
fosuser_confirmation = false;
36
37
+
# how long the access token should live in seconds for the API
38
+
fos_oauth_server_access_token_lifetime = 3600;
39
+
# how long the refresh token should life in seconds for the API
40
+
fos_oauth_server_refresh_token_lifetime = 1209600;
41
42
+
from_email = "wallabag@read.mossnet.lan";
43
44
+
# RabbitMQ processing
45
+
redis_scheme = "unix";
46
+
redis_host = ""; # Ignored for unix scheme
47
+
redis_port = 0; # Ignored for unix scheme
48
+
redis_path = config.services.redis.servers.wallabag.unixSocket;
49
+
redis_password = null;
50
51
+
# Redis processing
52
+
rabbitmq_host = "";
53
+
rabbitmq_port = 0;
54
+
rabbitmq_user = "";
55
+
rabbitmq_password = "";
56
+
rabbitmq_prefetch_count = 0;
57
58
+
# sentry logging
59
+
sentry_dsn = null;
60
+
} // cfg.parameters;
61
62
+
php = cfg.php.package.withExtensions ({ enabled, all }: enabled ++ (with all; [
63
+
imagick
64
+
tidy
65
+
]));
66
67
+
commonServiceConfig = {
68
+
CacheDirectory = "wallabag";
69
+
# Stores sessions.
70
+
CacheDirectoryMode = "700";
71
+
ConfigurationDirectory = "wallabag";
72
+
LogsDirectory = "wallabag";
73
+
StateDirectory = "wallabag";
74
+
# Stores site-credentials-secret-key.txt.
75
+
StateDirectoryMode = "700";
76
};
77
78
+
cfg = config.services.wallabag;
79
+
in {
80
+
options.services.wallabag = with lib; {
81
+
enable = mkEnableOption (mdDoc "Wallabag read-it-later service");
82
83
+
package = mkOption {
84
+
type = types.package;
85
+
default = pkgs.wallabag;
86
+
};
87
88
+
php.package = mkOption {
89
+
type = types.package;
90
+
default = pkgs.php;
91
};
92
93
+
parameters = mkOption {
94
+
type = types.attrsOf types.str;
95
+
default = {};
96
+
description = mdDoc "Parameters to override from the default. See <https://doc.wallabag.org/en/admin/parameters.html> for values.";
97
+
};
98
99
+
database_type = mkOption {
100
+
type = types.enum [
101
+
"pdo_sqlite3"
102
+
"pdo_pgsql"
103
+
];
104
+
default = if config.services.postgresql.enable
105
+
then "pdo_pgsql"
106
+
else "pdo_sqlite3";
107
+
defaultText = ''
108
+
if config.services.postgresql.enable
109
+
then "pdo_pgsql"
110
+
else "pdo_sqlite3"
111
+
'';
112
+
description = mdDoc ''
113
+
The database engine name. Can be pdo_sqlite3 or pdo_pgsql.
114
+
'';
115
+
};
116
117
+
domain = mkOption {
118
+
type = types.str;
119
+
description = "Bare domain name for Wallabag";
120
+
};
121
122
+
virtualHost.enable = mkEnableOption (mdDoc "Define nginx virtualhost for Wallabag");
123
+
};
124
125
+
config = lib.mkIf cfg.enable {
126
+
environment.etc."wallabag/parameters.yml" = {
127
+
source = pkgs.writeTextFile {
128
+
name = "wallabag-config";
129
+
text = builtins.toJSON {
130
+
parameters = settings;
131
+
};
132
+
};
133
+
};
134
+
135
+
services.nginx = lib.mkIf cfg.virtualHost.enable {
136
+
enable = true;
137
+
138
+
virtualHosts = {
139
+
"${cfg.domain}" = {
140
+
root = "${pkgs.wallabag}/web";
141
+
142
+
extraConfig = ''
143
+
add_header X-Frame-Options SAMEORIGIN;
144
+
add_header X-Content-Type-Options nosniff;
145
+
add_header X-XSS-Protection "1; mode=block";
146
+
'';
147
148
+
locations."/" = {
149
+
extraConfig = ''
150
+
try_files $uri /app.php$is_args$args;
151
+
'';
152
+
};
153
154
+
locations."/assets".root = "${pkgs.wallabag}/app/web";
155
156
+
locations."~ ^/app\\.php(/|$)" = {
157
+
extraConfig = ''
158
+
fastcgi_pass unix:${config.services.phpfpm.pools.wallabag.socket};
159
+
include ${config.services.nginx.package}/conf/fastcgi.conf;
160
+
fastcgi_param PATH_INFO $fastcgi_path_info;
161
+
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
162
+
fastcgi_param SCRIPT_FILENAME ${pkgs.wallabag}/web/$fastcgi_script_name;
163
+
fastcgi_param DOCUMENT_ROOT ${pkgs.wallabag}/web;
164
+
fastcgi_read_timeout 120;
165
+
internal;
166
+
'';
167
+
};
168
169
+
locations."~ /(?!app)\\.php$" = {
170
+
extraConfig = ''
171
+
return 404;
172
+
'';
173
+
};
174
};
175
};
176
+
};
177
178
+
services.phpfpm.pools.wallabag = {
179
+
user = config.users.users.wallabag.name;
180
+
phpPackage = php;
181
+
settings = {
182
+
"catch_workers_output" = true;
183
+
184
+
"listen.owner" = config.services.nginx.user;
185
+
"listen.group" = "root";
186
+
"pm" = "dynamic";
187
+
"pm.max_children" = 5;
188
+
"pm.start_servers" = 2;
189
+
"pm.min_spare_servers" = 1;
190
+
"pm.max_spare_servers" = 3;
191
+
"php_admin_value[error_log]" = "/var/log/wallabag/error.log";
192
+
"php_admin_value[access_log]" = "/var/log/wallabag/access.log";
193
+
"php_admin_flag[log_errors]" = true;
194
+
};
195
+
phpOptions = ''
196
+
; Set up $_ENV superglobal.
197
+
; http://php.net/request-order
198
+
variables_order = "EGPCS"
199
+
# Wallabag will crash on start-up.
200
+
# https://github.com/wallabag/wallabag/issues/6042
201
+
# error_reporting = E_ALL & ~E_USER_DEPRECATED & ~E_DEPRECATED
202
+
'';
203
+
settings = {
204
+
# Accept settings from the systemd service.
205
+
clear_env = false;
206
};
207
};
208
209
+
users.users.wallabag = {
210
+
isSystemUser = true;
211
+
group = "wallabag";
212
+
};
213
+
users.groups.wallabag = {};
214
+
services.redis.servers.wallabag = {
215
+
enable = true;
216
+
user = "wallabag";
217
+
};
218
+
services.rabbitmq.enable = false;
219
+
220
+
systemd.services.phpfpm-wallabag.serviceConfig = commonServiceConfig;
221
+
222
systemd.services.wallabag-install = {
223
description = "Wallabag install service";
224
wantedBy = [ "multi-user.target" ];
225
before = [ "phpfpm-wallabag.service" ];
226
+
after = [ "postgresql.service" ];
227
path = with pkgs; [ coreutils php phpPackages.composer ];
228
229
serviceConfig = {
230
+
User = "wallabag";
231
Type = "oneshot";
232
+
} // commonServiceConfig;
233
234
script = ''
235
+
if [ ! -f "$STATE_DIRECTORY/installed" ]; then
236
+
php ${pkgs.wallabag}/bin/console --env=prod wallabag:install
237
+
touch "$STATE_DIRECTORY/installed"
238
+
else
239
+
php ${pkgs.wallabag}/bin/console --env=prod doctrine:migrations:migrate --no-interaction
240
+
fi
241
+
php ${pkgs.wallabag}/bin/console --env=prod cache:clear
242
+
'';
243
};
244
};
245
}
+15
-3
mount-crypted.sh
+15
-3
mount-crypted.sh
···
1
#!/usr/bin/env bash
2
key_length=512
3
-
iterations="$(head -n 2 /boot/crypted-storage/default)"
4
-
salt="$(head -n 1 /boot/crypted-storage/default)"
5
chal="$(echo -n $salt | openssl dgst -binary -sha512 | rbtohex)"
6
resp="$(ykchalresp -2 -x $chal 2>/dev/null)"
7
-
user_key="$(read -s)"
8
luks_key="$(echo -n $user_key | pbkdf2-sha512 $(($key_length / 8)) $iterations $resp | rbtohex)"
9
echo -n $luks_key | hextorb | sudo cryptsetup luksOpen /dev/sda2 crypted --key-file=-
···
1
#!/usr/bin/env bash
2
+
3
+
# nix-shell https://github.com/sgillespie/nixos-yubikey-luks/archive/master.tar.gz
4
+
5
+
rbtohex() {
6
+
( od -An -vtx1 | tr -d ' \n' )
7
+
}
8
+
9
+
hextorb() {
10
+
( tr '[:lower:]' '[:upper:]' | sed -e 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI'| xargs printf )
11
+
}
12
+
13
key_length=512
14
+
iterations=1000000
15
+
salt="$(head -n 1 /mnt/crypt-storage/default)"
16
chal="$(echo -n $salt | openssl dgst -binary -sha512 | rbtohex)"
17
resp="$(ykchalresp -2 -x $chal 2>/dev/null)"
18
+
user_key=
19
+
read -r user_key
20
luks_key="$(echo -n $user_key | pbkdf2-sha512 $(($key_length / 8)) $iterations $resp | rbtohex)"
21
echo -n $luks_key | hextorb | sudo cryptsetup luksOpen /dev/sda2 crypted --key-file=-
+27
-1
overlays/default.nix
+27
-1
overlays/default.nix
···
11
propagatedBuildInputs = prevAttrs.propagatedBuildInputs ++ [ final.python3.pkgs.jsonschema ]; # allow kobo sync stuff
12
});
13
mautrix-signal = prev.mautrix-signal.overrideAttrs (prevAttrs: rec {
14
-
buildInputs = prevAttrs.propagatedBuildInputs ++ [ final.python3.pkgs.aiosqlite ]; # We're using sqlite and upstream doesn't package this dependency
15
});
16
17
# Need to do server and agent too, maybe
···
11
propagatedBuildInputs = prevAttrs.propagatedBuildInputs ++ [ final.python3.pkgs.jsonschema ]; # allow kobo sync stuff
12
});
13
mautrix-signal = prev.mautrix-signal.overrideAttrs (prevAttrs: rec {
14
+
buildInputs = prevAttrs.buildInputs ++ [ final.python3.pkgs.aiosqlite ]; # We're using sqlite and upstream doesn't package this dependency
15
+
withGoolm = true;
16
+
});
17
+
# headphones is not very stable...
18
+
# this is fixed in newer commits, but no release has gone out
19
+
# patching whitespace with sed is insane
20
+
headphones = prev.headphones.overrideAttrs (prevAttrs: rec {
21
+
patchPhase = ''
22
+
sed -i '1395s/^\([[:space:]]*\).*/\1"cat": "3000",/' headphones/searcher.py
23
+
'';
24
+
});
25
+
26
+
wallabag = prev.wallabag.overrideAttrs (attrs: {
27
+
patches = builtins.filter (patch: builtins.baseNameOf patch != "wallabag-data.patch") attrs.patches ++ [
28
+
# Out of the box, Wallabag wants to write to various subdirectories of the project directory.
29
+
# Letโs replace references to such paths with designated systemd locations
30
+
# so that the project source can remain immutable.
31
+
../pkgs/wallabag-data.patch
32
+
];
33
+
});
34
+
35
+
olm = prev.olm.overrideAttrs (attrs: {
36
+
knownVulnerabilities = [];
37
+
});
38
+
39
+
mautrix-discord = prev.mautrix-discord.overrideAttrs (attrs: rec {
40
+
license = "";
41
});
42
43
# Need to do server and agent too, maybe
+7
-2
pkgs/default.nix
+7
-2
pkgs/default.nix
···
5
plymouth-themes = pkgs.callPackage ./plymouth.nix { };
6
tic-80 = pkgs.callPackage ./tic-80.nix { };
7
fennel-ls = pkgs.callPackage ./fennel-ls.nix { };
8
-
kobopatch = pkgs.callPackage ./kobopatch.nix { };
9
-
my-mautrix-discord = pkgs.callPackage ./mautrix-discord.nix { }; # Handled by matrix-appservices input
10
ulogger-server = pkgs.callPackage ./ulogger.nix { };
11
}
···
5
plymouth-themes = pkgs.callPackage ./plymouth.nix { };
6
tic-80 = pkgs.callPackage ./tic-80.nix { };
7
fennel-ls = pkgs.callPackage ./fennel-ls.nix { };
8
+
# kobopatch = pkgs.callPackage ./kobopatch.nix { };
9
+
# my-mautrix-discord = pkgs.callPackage ./mautrix-discord.nix { }; # Handled by matrix-appservices input
10
ulogger-server = pkgs.callPackage ./ulogger.nix { };
11
+
# Wallabag is now an overlay
12
+
# TODO: we still use the patch from this folder though
13
+
my-wallabag = pkgs.callPackage ./wallabag.nix { };
14
+
# mautrix-slack = pkgs.callPackage ./mautrix-slack.nix { };
15
+
gpodder2go = pkgs.callPackage ./gpodder2go.nix { };
16
}
+14
pkgs/gpodder2go.nix
+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
{ lib, buildGoModule, fetchFromGitHub }:
2
3
-
buildGoModule rec {
4
name = "kobopatch";
5
version = "0.15.0";
6
7
-
vendorSha256 = "1i6srhyig4x8mywyc2l8wzzm1afvb7wxmjsr84c447sb1xss6p7x";
8
9
src = fetchFromGitHub {
10
owner = "geek1011";
11
repo = "kobopatch";
12
rev = "653070c67c83ec61884854efc4f8a3132d82a2e5";
13
-
sha256 = "09hr3zh0w0f78cx40d2yydqv0mmjdh4iwdgia7sikraphvha85nn";
14
};
15
16
meta = with lib; {
···
1
{ lib, buildGoModule, fetchFromGitHub }:
2
3
+
buildGoModule {
4
name = "kobopatch";
5
version = "0.15.0";
6
7
+
vendorHash = "sha256-1i6srhyig4x8mywyc2l8wzzm1afvb7wxmjsr84c447sb1xss6p7x";
8
9
src = fetchFromGitHub {
10
owner = "geek1011";
11
repo = "kobopatch";
12
rev = "653070c67c83ec61884854efc4f8a3132d82a2e5";
13
+
hash = "sha256-09hr3zh0w0f78cx40d2yydqv0mmjdh4iwdgia7sikraphvha85nn";
14
};
15
16
meta = with lib; {
+1
-1
pkgs/koboutils.nix
+1
-1
pkgs/koboutils.nix
-29
pkgs/mautrix-discord.nix
-29
pkgs/mautrix-discord.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 = "discord";
10
-
rev = "f53975cc91e3c643a722adf0d3e0dfb98d0127a2";
11
-
hash = "sha256-xUALcN5oQfwC6gmOeygCkOAXJrJzNitBxHRFAKKgFvE=";
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-discord";
24
-
description = "Matrix to Discord hybrid puppeting/relaybot bridge";
25
-
license = licenses.agpl3Plus;
26
-
maintainers = with maintainers; [ robin ];
27
-
};
28
-
}
29
-
···
+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
+
+3
-3
pkgs/tic-80.nix
+3
-3
pkgs/tic-80.nix
···
10
};
11
buildInputs = with pkgs; [
12
gcc
13
-
pkgconfig
14
autoconf
15
automake
16
libtool
···
27
gtk3-x11
28
cmake
29
cmakeCurses
30
-
elementary-cmake-modules
31
extra-cmake-modules
32
libglvnd
33
mesa_glu
34
mesa_glu
35
freeglut
36
-
] ++ lib.optional stdenv.isLinux alsaLib;
37
38
configurePhase = ''
39
echo [DIRECTORY] $(pwd)
···
10
};
11
buildInputs = with pkgs; [
12
gcc
13
+
pkg-config
14
autoconf
15
automake
16
libtool
···
27
gtk3-x11
28
cmake
29
cmakeCurses
30
+
# elementary-cmake-modules
31
extra-cmake-modules
32
libglvnd
33
mesa_glu
34
mesa_glu
35
freeglut
36
+
] ++ lib.optional stdenv.isLinux alsa-lib;
37
38
configurePhase = ''
39
echo [DIRECTORY] $(pwd)
+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
+
}
-3
secrets/secrets.nix
-3
secrets/secrets.nix
···
6
lituus = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH2lAb33LH3JNuOfBXt971u0tHe+NURFecQdfjwEj+C+ root@lituus";
7
helix = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAKrL6IDHNnHmxi0q9nzu87NOyidPm3HpE7klU368lEf root@helix";
8
helix2 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK2G81z1E51ioJQGLHnTJEjgSdBqLM6mb72Z+0atE6Bf root@helix";
9
-
work = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHOnfDvR2D2nGnC+DZYDUXiokzz+eLfZwkp+O8WjWutp anishlakhwara@Anishs-MacBook-Pro.local";
10
curve = [ system user ];
11
allUserKeys = [ system user mossnet ];
12
systemOnly = [ system mossnet lituus helix ];
···
35
"box-wg.age".publicKeys = [ mossnet ];
36
"wallabag-password.age".publicKeys = [ mossnet ];
37
"wallabag-secret.age".publicKeys = [ mossnet ];
38
-
39
-
"work-wg.age".publicKeys = [ work user system ];
40
}
···
6
lituus = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH2lAb33LH3JNuOfBXt971u0tHe+NURFecQdfjwEj+C+ root@lituus";
7
helix = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAKrL6IDHNnHmxi0q9nzu87NOyidPm3HpE7klU368lEf root@helix";
8
helix2 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK2G81z1E51ioJQGLHnTJEjgSdBqLM6mb72Z+0atE6Bf root@helix";
9
curve = [ system user ];
10
allUserKeys = [ system user mossnet ];
11
systemOnly = [ system mossnet lituus helix ];
···
34
"box-wg.age".publicKeys = [ mossnet ];
35
"wallabag-password.age".publicKeys = [ mossnet ];
36
"wallabag-secret.age".publicKeys = [ mossnet ];
37
}
secrets/work-wg.age
secrets/work-wg.age
This is a binary file and will not be displayed.