Compare changes

Choose any two refs to compare.

Changed files
+4813 -4523
.aider.tags.cache.v3
.direnv
apps
dns
home
hosts
modules
overlays
pkgs
secrets
-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
··· 1 - 2 - # 2025-02-10 16:27:55.065630 3 - +y 4 - 5 - # 2025-02-10 16:28:04.851326 6 - +n
.aider.tags.cache.v3/cache.db

This is a binary file and will not be displayed.

+8
.direnv/bin/nix-direnv-reload
··· 1 + #!/usr/bin/env bash 2 + dir="$(realpath $(dirname ${BASH_SOURCE[0]})/../..)" 3 + _nix_direnv_force_reload=1 direnv exec "$dir" true 4 + direnv reload 5 + # direnv reload updates the mtime of .envrc. Also update the timestamp of the 6 + # profile_rc file to keep track that we actually are up to date. 7 + touch $dir/.direnv/{nix,flake}-profile-*.rc 8 +
+1863
.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc
··· 1 + unset shellHook 2 + PATH=${PATH:-} 3 + nix_saved_PATH="$PATH" 4 + XDG_DATA_DIRS=${XDG_DATA_DIRS:-} 5 + nix_saved_XDG_DATA_DIRS="$XDG_DATA_DIRS" 6 + AR='ar' 7 + export AR 8 + AS='as' 9 + export AS 10 + BASH='/nix/store/7dpxg7ki7g8ynkdwcqf493p2x8divb4i-bash-5.2-p15/bin/bash' 11 + CC='gcc' 12 + export CC 13 + CONFIG_SHELL='/nix/store/7dpxg7ki7g8ynkdwcqf493p2x8divb4i-bash-5.2-p15/bin/bash' 14 + export CONFIG_SHELL 15 + CXX='g++' 16 + export CXX 17 + HOSTTYPE='x86_64' 18 + HOST_PATH='/nix/store/m38gwq0w8w7qyjn9s00balyp7cv3m5p9-coreutils-9.3/bin:/nix/store/01znf87kiw5xx1dj0f7djrnrbg84ij28-findutils-4.9.0/bin:/nix/store/vq4vmndw555m7ld2bi6pq8kr348qvb6a-diffutils-3.10/bin:/nix/store/rwa7qyds01qzxvq7zq3kgnkrzzpw4s66-gnused-4.9/bin:/nix/store/n062zcsmfl9gfp6vfkcg0asb8jjwmy5i-gnugrep-3.11/bin:/nix/store/4v7m4yx07b3anmbznfhihjc8xiizyna9-gawk-5.2.2/bin:/nix/store/mi3pm67ps7c7k11aqki9182ygzg8j503-gnutar-1.35/bin:/nix/store/5c0ancqnpi0cf1h49mv13w68a950s9z0-gzip-1.13/bin:/nix/store/q5cv7r1sh3s4niyq7vm6h1j74394naxs-bzip2-1.0.8-bin/bin:/nix/store/bh7sbl99ygfvw9w96936nrhw46jmcmqq-gnumake-4.4.1/bin:/nix/store/7dpxg7ki7g8ynkdwcqf493p2x8divb4i-bash-5.2-p15/bin:/nix/store/mbh9gx43gsc5av019vsdkazbyiic3f0f-patch-2.7.6/bin:/nix/store/3q6fnwcm677l1q60vkhcf9m1gxhv83jm-xz-5.4.4-bin/bin:/nix/store/a5s2dmba16pw8l52f496gw0b7nli7mbn-file-5.45/bin' 19 + export HOST_PATH 20 + IFS=' 21 + ' 22 + IN_NIX_SHELL='impure' 23 + export IN_NIX_SHELL 24 + LD='ld' 25 + export LD 26 + LINENO='76' 27 + MACHTYPE='x86_64-pc-linux-gnu' 28 + NIX_BINTOOLS='/nix/store/qcg3rpl1l103zb1xfsw40wm9j5hzrp7y-binutils-wrapper-2.40' 29 + export NIX_BINTOOLS 30 + NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1' 31 + export NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu 32 + NIX_BUILD_CORES='4' 33 + export NIX_BUILD_CORES 34 + NIX_CC='/nix/store/vylmp73qymnv4siaqn1kl2hghj07hrj8-gcc-wrapper-12.3.0' 35 + export NIX_CC 36 + NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1' 37 + export NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu 38 + NIX_CFLAGS_COMPILE=' -frandom-seed=q6hnwi6rdy -isystem /nix/store/hsv5438lvzq106llix5xi0f7cdvqk95q-nix-2.18.1-dev/include -isystem /nix/store/gdz3j02p6mfzmxs9zsssszwpppigb70g-boehm-gc-8.2.2-dev/include -isystem /nix/store/d7jspi1ws93ya34zriyrdxz5v5z6lijj-nlohmann_json-3.11.2/include -isystem /nix/store/hsv5438lvzq106llix5xi0f7cdvqk95q-nix-2.18.1-dev/include -isystem /nix/store/gdz3j02p6mfzmxs9zsssszwpppigb70g-boehm-gc-8.2.2-dev/include -isystem /nix/store/d7jspi1ws93ya34zriyrdxz5v5z6lijj-nlohmann_json-3.11.2/include' 39 + export NIX_CFLAGS_COMPILE 40 + NIX_CONFIG='experimental-features = nix-command flakes' 41 + export NIX_CONFIG 42 + NIX_ENFORCE_NO_NATIVE='1' 43 + export NIX_ENFORCE_NO_NATIVE 44 + NIX_HARDENING_ENABLE='fortify fortify3 stackprotector pic strictoverflow format relro bindnow' 45 + export NIX_HARDENING_ENABLE 46 + NIX_LDFLAGS='-rpath /home/anish/usr/helm/outputs/out/lib -L/nix/store/gfmmah5rc4vl8mhli495lh5savq842p0-boehm-gc-8.2.2/lib -L/nix/store/j7nl2pj606d8ld5818hw3z3fbz00sdc5-nix-2.18.1/lib -L/nix/store/gfmmah5rc4vl8mhli495lh5savq842p0-boehm-gc-8.2.2/lib -L/nix/store/j7nl2pj606d8ld5818hw3z3fbz00sdc5-nix-2.18.1/lib' 47 + export NIX_LDFLAGS 48 + NIX_NO_SELF_RPATH='1' 49 + NIX_STORE='/nix/store' 50 + export NIX_STORE 51 + NM='nm' 52 + export NM 53 + OBJCOPY='objcopy' 54 + export OBJCOPY 55 + OBJDUMP='objdump' 56 + export OBJDUMP 57 + OLDPWD='' 58 + export OLDPWD 59 + OPTERR='1' 60 + OSTYPE='linux-gnu' 61 + PATH='/nix/store/j7nl2pj606d8ld5818hw3z3fbz00sdc5-nix-2.18.1/bin:/nix/store/p3s38kgwd16d2dimspckp5f1rri43mnq-home-manager-unstable-2023-12-31/bin:/nix/store/pz4jng8kb4iv9x67r730las2mdkv8s8q-git-2.42.0/bin:/nix/store/p8p72q6anyf0whaf9i75jynzk2z4ml36-agenix-0.13.0/bin:/nix/store/lfx4in7iqbbx5b6b85cndw268ria5512-deploy-rs-unstable-2023-12-20/bin:/nix/store/8nwmr2kmkrl1mnggka7fjibcglk68rc0-dnscontrol-4.6.0/bin:/nix/store/h3ayxf5dk1gdf3s5716fh1ys815qxxag-patchelf-0.15.0/bin:/nix/store/vylmp73qymnv4siaqn1kl2hghj07hrj8-gcc-wrapper-12.3.0/bin:/nix/store/f94yr35af3xdiscbj6cp6kafvmn55gv9-gcc-12.3.0/bin:/nix/store/vksrk76p5cfbjxb0n95vdkxy7fl2cbcm-glibc-2.38-27-bin/bin:/nix/store/m38gwq0w8w7qyjn9s00balyp7cv3m5p9-coreutils-9.3/bin:/nix/store/qcg3rpl1l103zb1xfsw40wm9j5hzrp7y-binutils-wrapper-2.40/bin:/nix/store/idiaraknw071d20nlqp49s18gbvw4wa0-binutils-2.40/bin:/nix/store/m38gwq0w8w7qyjn9s00balyp7cv3m5p9-coreutils-9.3/bin:/nix/store/01znf87kiw5xx1dj0f7djrnrbg84ij28-findutils-4.9.0/bin:/nix/store/vq4vmndw555m7ld2bi6pq8kr348qvb6a-diffutils-3.10/bin:/nix/store/rwa7qyds01qzxvq7zq3kgnkrzzpw4s66-gnused-4.9/bin:/nix/store/n062zcsmfl9gfp6vfkcg0asb8jjwmy5i-gnugrep-3.11/bin:/nix/store/4v7m4yx07b3anmbznfhihjc8xiizyna9-gawk-5.2.2/bin:/nix/store/mi3pm67ps7c7k11aqki9182ygzg8j503-gnutar-1.35/bin:/nix/store/5c0ancqnpi0cf1h49mv13w68a950s9z0-gzip-1.13/bin:/nix/store/q5cv7r1sh3s4niyq7vm6h1j74394naxs-bzip2-1.0.8-bin/bin:/nix/store/bh7sbl99ygfvw9w96936nrhw46jmcmqq-gnumake-4.4.1/bin:/nix/store/7dpxg7ki7g8ynkdwcqf493p2x8divb4i-bash-5.2-p15/bin:/nix/store/mbh9gx43gsc5av019vsdkazbyiic3f0f-patch-2.7.6/bin:/nix/store/3q6fnwcm677l1q60vkhcf9m1gxhv83jm-xz-5.4.4-bin/bin:/nix/store/a5s2dmba16pw8l52f496gw0b7nli7mbn-file-5.45/bin' 62 + export PATH 63 + PS4='+ ' 64 + RANLIB='ranlib' 65 + export RANLIB 66 + READELF='readelf' 67 + export READELF 68 + SIZE='size' 69 + export SIZE 70 + SOURCE_DATE_EPOCH='315532800' 71 + export SOURCE_DATE_EPOCH 72 + STRINGS='strings' 73 + export STRINGS 74 + STRIP='strip' 75 + export STRIP 76 + XDG_DATA_DIRS='/nix/store/gfmmah5rc4vl8mhli495lh5savq842p0-boehm-gc-8.2.2/share:/nix/store/d7jspi1ws93ya34zriyrdxz5v5z6lijj-nlohmann_json-3.11.2/share:/nix/store/j7nl2pj606d8ld5818hw3z3fbz00sdc5-nix-2.18.1/share:/nix/store/p3s38kgwd16d2dimspckp5f1rri43mnq-home-manager-unstable-2023-12-31/share:/nix/store/pz4jng8kb4iv9x67r730las2mdkv8s8q-git-2.42.0/share:/nix/store/h3ayxf5dk1gdf3s5716fh1ys815qxxag-patchelf-0.15.0/share' 77 + export XDG_DATA_DIRS 78 + __structuredAttrs='' 79 + export __structuredAttrs 80 + buildInputs='' 81 + export buildInputs 82 + buildPhase='{ echo "------------------------------------------------------------"; 83 + echo " WARNING: the existence of this path is not guaranteed."; 84 + echo " It is an internal implementation detail for pkgs.mkShell."; 85 + echo "------------------------------------------------------------"; 86 + echo; 87 + # Record all build inputs as runtime dependencies 88 + export; 89 + } >> "$out" 90 + ' 91 + export buildPhase 92 + builder='/nix/store/7dpxg7ki7g8ynkdwcqf493p2x8divb4i-bash-5.2-p15/bin/bash' 93 + export builder 94 + cmakeFlags='' 95 + export cmakeFlags 96 + configureFlags='' 97 + export configureFlags 98 + defaultBuildInputs='' 99 + defaultNativeBuildInputs='/nix/store/h3ayxf5dk1gdf3s5716fh1ys815qxxag-patchelf-0.15.0 /nix/store/v5qyd49a256y44pz75qnsp9741mg336k-update-autotools-gnu-config-scripts-hook /nix/store/h9lc1dpi14z7is86ffhl3ld569138595-audit-tmpdir.sh /nix/store/m54bmrhj6fqz8nds5zcj97w9s9bckc9v-compress-man-pages.sh /nix/store/wgrbkkaldkrlrni33ccvm3b6vbxzb656-make-symlinks-relative.sh /nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh /nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh /nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh /nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh /nix/store/jivxp510zxakaaic7qkrb7v1dd2rdbw9-multiple-outputs.sh /nix/store/wzdsbnv2ba3nj91aql8jjdddfmkkdh7h-patch-shebangs.sh /nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh /nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh /nix/store/ngg1cv31c8c7bcm2n8ww4g06nq7s4zhm-set-source-date-epoch-to-latest.sh /nix/store/wmknncrif06fqxa16hpdldhixk95nds0-strip.sh /nix/store/vylmp73qymnv4siaqn1kl2hghj07hrj8-gcc-wrapper-12.3.0' 100 + depsBuildBuild='' 101 + export depsBuildBuild 102 + depsBuildBuildPropagated='' 103 + export depsBuildBuildPropagated 104 + depsBuildTarget='' 105 + export depsBuildTarget 106 + depsBuildTargetPropagated='' 107 + export depsBuildTargetPropagated 108 + depsHostHost='' 109 + export depsHostHost 110 + depsHostHostPropagated='' 111 + export depsHostHostPropagated 112 + depsTargetTarget='' 113 + export depsTargetTarget 114 + depsTargetTargetPropagated='' 115 + export depsTargetTargetPropagated 116 + doCheck='' 117 + export doCheck 118 + doInstallCheck='' 119 + export doInstallCheck 120 + dontAddDisableDepTrack='1' 121 + export dontAddDisableDepTrack 122 + declare -a envBuildBuildHooks=() 123 + declare -a envBuildHostHooks=() 124 + declare -a envBuildTargetHooks=() 125 + declare -a envHostHostHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) 126 + declare -a envHostTargetHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) 127 + declare -a envTargetTargetHooks=() 128 + declare -a fixupOutputHooks=('if [ -z "${dontPatchELF-}" ]; then patchELF "$prefix"; fi' 'if [[ -z "${noAuditTmpdir-}" && -e "$prefix" ]]; then auditTmpdir "$prefix"; fi' 'if [ -z "${dontGzipMan-}" ]; then compressManPages "$prefix"; fi' '_moveLib64' '_moveSbin' '_moveSystemdUserUnits' 'patchShebangsAuto' '_pruneLibtoolFiles' '_doStrip' ) 129 + guess='4' 130 + initialPath='/nix/store/m38gwq0w8w7qyjn9s00balyp7cv3m5p9-coreutils-9.3 /nix/store/01znf87kiw5xx1dj0f7djrnrbg84ij28-findutils-4.9.0 /nix/store/vq4vmndw555m7ld2bi6pq8kr348qvb6a-diffutils-3.10 /nix/store/rwa7qyds01qzxvq7zq3kgnkrzzpw4s66-gnused-4.9 /nix/store/n062zcsmfl9gfp6vfkcg0asb8jjwmy5i-gnugrep-3.11 /nix/store/4v7m4yx07b3anmbznfhihjc8xiizyna9-gawk-5.2.2 /nix/store/mi3pm67ps7c7k11aqki9182ygzg8j503-gnutar-1.35 /nix/store/5c0ancqnpi0cf1h49mv13w68a950s9z0-gzip-1.13 /nix/store/q5cv7r1sh3s4niyq7vm6h1j74394naxs-bzip2-1.0.8-bin /nix/store/bh7sbl99ygfvw9w96936nrhw46jmcmqq-gnumake-4.4.1 /nix/store/7dpxg7ki7g8ynkdwcqf493p2x8divb4i-bash-5.2-p15 /nix/store/mbh9gx43gsc5av019vsdkazbyiic3f0f-patch-2.7.6 /nix/store/3q6fnwcm677l1q60vkhcf9m1gxhv83jm-xz-5.4.4-bin /nix/store/a5s2dmba16pw8l52f496gw0b7nli7mbn-file-5.45' 131 + mesonFlags='' 132 + export mesonFlags 133 + name='nix-shell-env' 134 + export name 135 + nativeBuildInputs='/nix/store/hsv5438lvzq106llix5xi0f7cdvqk95q-nix-2.18.1-dev /nix/store/p3s38kgwd16d2dimspckp5f1rri43mnq-home-manager-unstable-2023-12-31 /nix/store/pz4jng8kb4iv9x67r730las2mdkv8s8q-git-2.42.0 /nix/store/p8p72q6anyf0whaf9i75jynzk2z4ml36-agenix-0.13.0 /nix/store/lfx4in7iqbbx5b6b85cndw268ria5512-deploy-rs-unstable-2023-12-20 /nix/store/8nwmr2kmkrl1mnggka7fjibcglk68rc0-dnscontrol-4.6.0' 136 + export nativeBuildInputs 137 + out='/home/anish/usr/helm/outputs/out' 138 + export out 139 + outputBin='out' 140 + outputDev='out' 141 + outputDevdoc='REMOVE' 142 + outputDevman='out' 143 + outputDoc='out' 144 + outputInclude='out' 145 + outputInfo='out' 146 + outputLib='out' 147 + outputMan='out' 148 + outputs='out' 149 + export outputs 150 + patches='' 151 + export patches 152 + phases='buildPhase' 153 + export phases 154 + pkg='/nix/store/vylmp73qymnv4siaqn1kl2hghj07hrj8-gcc-wrapper-12.3.0' 155 + declare -a pkgsBuildBuild=() 156 + declare -a pkgsBuildHost=('/nix/store/hsv5438lvzq106llix5xi0f7cdvqk95q-nix-2.18.1-dev' '/nix/store/gdz3j02p6mfzmxs9zsssszwpppigb70g-boehm-gc-8.2.2-dev' '/nix/store/gfmmah5rc4vl8mhli495lh5savq842p0-boehm-gc-8.2.2' '/nix/store/d7jspi1ws93ya34zriyrdxz5v5z6lijj-nlohmann_json-3.11.2' '/nix/store/j7nl2pj606d8ld5818hw3z3fbz00sdc5-nix-2.18.1' '/nix/store/p3s38kgwd16d2dimspckp5f1rri43mnq-home-manager-unstable-2023-12-31' '/nix/store/pz4jng8kb4iv9x67r730las2mdkv8s8q-git-2.42.0' '/nix/store/p8p72q6anyf0whaf9i75jynzk2z4ml36-agenix-0.13.0' '/nix/store/lfx4in7iqbbx5b6b85cndw268ria5512-deploy-rs-unstable-2023-12-20' '/nix/store/8nwmr2kmkrl1mnggka7fjibcglk68rc0-dnscontrol-4.6.0' '/nix/store/h3ayxf5dk1gdf3s5716fh1ys815qxxag-patchelf-0.15.0' '/nix/store/v5qyd49a256y44pz75qnsp9741mg336k-update-autotools-gnu-config-scripts-hook' '/nix/store/h9lc1dpi14z7is86ffhl3ld569138595-audit-tmpdir.sh' '/nix/store/m54bmrhj6fqz8nds5zcj97w9s9bckc9v-compress-man-pages.sh' '/nix/store/wgrbkkaldkrlrni33ccvm3b6vbxzb656-make-symlinks-relative.sh' '/nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh' '/nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh' '/nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh' '/nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh' '/nix/store/jivxp510zxakaaic7qkrb7v1dd2rdbw9-multiple-outputs.sh' '/nix/store/wzdsbnv2ba3nj91aql8jjdddfmkkdh7h-patch-shebangs.sh' '/nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh' '/nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh' '/nix/store/ngg1cv31c8c7bcm2n8ww4g06nq7s4zhm-set-source-date-epoch-to-latest.sh' '/nix/store/wmknncrif06fqxa16hpdldhixk95nds0-strip.sh' '/nix/store/vylmp73qymnv4siaqn1kl2hghj07hrj8-gcc-wrapper-12.3.0' '/nix/store/qcg3rpl1l103zb1xfsw40wm9j5hzrp7y-binutils-wrapper-2.40' ) 157 + declare -a pkgsBuildTarget=() 158 + declare -a pkgsHostHost=() 159 + declare -a pkgsHostTarget=() 160 + declare -a pkgsTargetTarget=() 161 + declare -a postFixupHooks=('_makeSymlinksRelativeInAllOutputs' '_multioutPropagateDev' ) 162 + declare -a postUnpackHooks=('_updateSourceDateEpochFromSourceRoot' ) 163 + declare -a preConfigureHooks=('_multioutConfig' ) 164 + preConfigurePhases=' updateAutotoolsGnuConfigScriptsPhase' 165 + declare -a preFixupHooks=('_moveToShare' '_multioutDocs' '_multioutDevs' ) 166 + preferLocalBuild='1' 167 + export preferLocalBuild 168 + prefix='/home/anish/usr/helm/outputs/out' 169 + declare -a propagatedBuildDepFiles=('propagated-build-build-deps' 'propagated-native-build-inputs' 'propagated-build-target-deps' ) 170 + propagatedBuildInputs='' 171 + export propagatedBuildInputs 172 + declare -a propagatedHostDepFiles=('propagated-host-host-deps' 'propagated-build-inputs' ) 173 + propagatedNativeBuildInputs='' 174 + export propagatedNativeBuildInputs 175 + declare -a propagatedTargetDepFiles=('propagated-target-target-deps' ) 176 + shell='/nix/store/7dpxg7ki7g8ynkdwcqf493p2x8divb4i-bash-5.2-p15/bin/bash' 177 + export shell 178 + shellHook='' 179 + export shellHook 180 + stdenv='/nix/store/kv5wkk7xgc8paw9azshzlmxraffqcg0i-stdenv-linux' 181 + export stdenv 182 + strictDeps='' 183 + export strictDeps 184 + system='x86_64-linux' 185 + export system 186 + declare -a unpackCmdHooks=('_defaultUnpack' ) 187 + _accumFlagsArray () 188 + { 189 + 190 + local name; 191 + if [ -n "$__structuredAttrs" ]; then 192 + for name in "$@"; 193 + do 194 + local -n nameref="$name"; 195 + flagsArray+=(${nameref+"${nameref[@]}"}); 196 + done; 197 + else 198 + for name in "$@"; 199 + do 200 + local -n nameref="$name"; 201 + case "$name" in 202 + *Array) 203 + flagsArray+=(${nameref+"${nameref[@]}"}) 204 + ;; 205 + *) 206 + flagsArray+=(${nameref-}) 207 + ;; 208 + esac; 209 + done; 210 + fi 211 + } 212 + _activatePkgs () 213 + { 214 + 215 + local hostOffset targetOffset; 216 + local pkg; 217 + for hostOffset in "${allPlatOffsets[@]}"; 218 + do 219 + local pkgsVar="${pkgAccumVarVars[hostOffset + 1]}"; 220 + for targetOffset in "${allPlatOffsets[@]}"; 221 + do 222 + (( hostOffset <= targetOffset )) || continue; 223 + local pkgsRef="${pkgsVar}[$targetOffset - $hostOffset]"; 224 + local pkgsSlice="${!pkgsRef}[@]"; 225 + for pkg in ${!pkgsSlice+"${!pkgsSlice}"}; 226 + do 227 + activatePackage "$pkg" "$hostOffset" "$targetOffset"; 228 + done; 229 + done; 230 + done 231 + } 232 + _addRpathPrefix () 233 + { 234 + 235 + if [ "${NIX_NO_SELF_RPATH:-0}" != 1 ]; then 236 + export NIX_LDFLAGS="-rpath $1/lib ${NIX_LDFLAGS-}"; 237 + fi 238 + } 239 + _addToEnv () 240 + { 241 + 242 + local depHostOffset depTargetOffset; 243 + local pkg; 244 + for depHostOffset in "${allPlatOffsets[@]}"; 245 + do 246 + local hookVar="${pkgHookVarVars[depHostOffset + 1]}"; 247 + local pkgsVar="${pkgAccumVarVars[depHostOffset + 1]}"; 248 + for depTargetOffset in "${allPlatOffsets[@]}"; 249 + do 250 + (( depHostOffset <= depTargetOffset )) || continue; 251 + local hookRef="${hookVar}[$depTargetOffset - $depHostOffset]"; 252 + if [[ -z "${strictDeps-}" ]]; then 253 + local visitedPkgs=""; 254 + for pkg in "${pkgsBuildBuild[@]}" "${pkgsBuildHost[@]}" "${pkgsBuildTarget[@]}" "${pkgsHostHost[@]}" "${pkgsHostTarget[@]}" "${pkgsTargetTarget[@]}"; 255 + do 256 + if [[ "$visitedPkgs" = *"$pkg"* ]]; then 257 + continue; 258 + fi; 259 + runHook "${!hookRef}" "$pkg"; 260 + visitedPkgs+=" $pkg"; 261 + done; 262 + else 263 + local pkgsRef="${pkgsVar}[$depTargetOffset - $depHostOffset]"; 264 + local pkgsSlice="${!pkgsRef}[@]"; 265 + for pkg in ${!pkgsSlice+"${!pkgsSlice}"}; 266 + do 267 + runHook "${!hookRef}" "$pkg"; 268 + done; 269 + fi; 270 + done; 271 + done 272 + } 273 + _allFlags () 274 + { 275 + 276 + export system pname name version; 277 + for varName in $(awk 'BEGIN { for (v in ENVIRON) if (v ~ /^[a-z][a-zA-Z0-9_]*$/) print v }'); 278 + do 279 + if (( "${NIX_DEBUG:-0}" >= 1 )); then 280 + printf "@%s@ -> %q\n" "${varName}" "${!varName}" 1>&2; 281 + fi; 282 + args+=("--subst-var" "$varName"); 283 + done 284 + } 285 + _assignFirst () 286 + { 287 + 288 + local varName="$1"; 289 + local _var; 290 + local REMOVE=REMOVE; 291 + shift; 292 + for _var in "$@"; 293 + do 294 + if [ -n "${!_var-}" ]; then 295 + eval "${varName}"="${_var}"; 296 + return; 297 + fi; 298 + done; 299 + echo; 300 + echo "error: _assignFirst: could not find a non-empty variable whose name to assign to ${varName}."; 301 + echo " The following variables were all unset or empty:"; 302 + echo " $*"; 303 + if [ -z "${out:-}" ]; then 304 + echo ' If you do not want an "out" output in your derivation, make sure to define'; 305 + echo ' the other specific required outputs. This can be achieved by picking one'; 306 + echo " of the above as an output."; 307 + echo ' You do not have to remove "out" if you want to have a different default'; 308 + echo ' output, because the first output is taken as a default.'; 309 + echo; 310 + fi; 311 + return 1 312 + } 313 + _callImplicitHook () 314 + { 315 + 316 + local def="$1"; 317 + local hookName="$2"; 318 + if declare -F "$hookName" > /dev/null; then 319 + "$hookName"; 320 + else 321 + if type -p "$hookName" > /dev/null; then 322 + source "$hookName"; 323 + else 324 + if [ -n "${!hookName:-}" ]; then 325 + eval "${!hookName}"; 326 + else 327 + return "$def"; 328 + fi; 329 + fi; 330 + fi 331 + } 332 + _defaultUnpack () 333 + { 334 + 335 + local fn="$1"; 336 + local destination; 337 + if [ -d "$fn" ]; then 338 + destination="$(stripHash "$fn")"; 339 + if [ -e "$destination" ]; then 340 + echo "Cannot copy $fn to $destination: destination already exists!"; 341 + echo "Did you specify two \"srcs\" with the same \"name\"?"; 342 + return 1; 343 + fi; 344 + cp -pr --reflink=auto -- "$fn" "$destination"; 345 + else 346 + case "$fn" in 347 + *.tar.xz | *.tar.lzma | *.txz) 348 + xz -d < "$fn" | tar xf - --warning=no-timestamp 349 + ;; 350 + *.tar | *.tar.* | *.tgz | *.tbz2 | *.tbz) 351 + tar xf "$fn" --warning=no-timestamp 352 + ;; 353 + *) 354 + return 1 355 + ;; 356 + esac; 357 + fi 358 + } 359 + _doStrip () 360 + { 361 + 362 + local -ra flags=(dontStripHost dontStripTarget); 363 + local -ra debugDirs=(stripDebugList stripDebugListTarget); 364 + local -ra allDirs=(stripAllList stripAllListTarget); 365 + local -ra stripCmds=(STRIP STRIP_FOR_TARGET); 366 + local -ra ranlibCmds=(RANLIB RANLIB_FOR_TARGET); 367 + stripDebugList=${stripDebugList[*]:-lib lib32 lib64 libexec bin sbin}; 368 + stripDebugListTarget=${stripDebugListTarget[*]:-}; 369 + stripAllList=${stripAllList[*]:-}; 370 + stripAllListTarget=${stripAllListTarget[*]:-}; 371 + local i; 372 + for i in ${!stripCmds[@]}; 373 + do 374 + local -n flag="${flags[$i]}"; 375 + local -n debugDirList="${debugDirs[$i]}"; 376 + local -n allDirList="${allDirs[$i]}"; 377 + local -n stripCmd="${stripCmds[$i]}"; 378 + local -n ranlibCmd="${ranlibCmds[$i]}"; 379 + if [[ -n "${dontStrip-}" || -n "${flag-}" ]] || ! type -f "${stripCmd-}" 2> /dev/null 1>&2; then 380 + continue; 381 + fi; 382 + stripDirs "$stripCmd" "$ranlibCmd" "$debugDirList" "${stripDebugFlags[*]:--S -p}"; 383 + stripDirs "$stripCmd" "$ranlibCmd" "$allDirList" "${stripAllFlags[*]:--s -p}"; 384 + done 385 + } 386 + _eval () 387 + { 388 + 389 + if declare -F "$1" > /dev/null 2>&1; then 390 + "$@"; 391 + else 392 + eval "$1"; 393 + fi 394 + } 395 + _makeSymlinksRelative () 396 + { 397 + 398 + local symlinkTarget; 399 + if [ "${dontRewriteSymlinks-}" ] || [ ! -e "$prefix" ]; then 400 + return; 401 + fi; 402 + while IFS= read -r -d '' f; do 403 + symlinkTarget=$(readlink "$f"); 404 + if [[ "$symlinkTarget"/ != "$prefix"/* ]]; then 405 + continue; 406 + fi; 407 + if [ ! -e "$symlinkTarget" ]; then 408 + echo "the symlink $f is broken, it points to $symlinkTarget (which is missing)"; 409 + fi; 410 + echo "rewriting symlink $f to be relative to $prefix"; 411 + ln -snrf "$symlinkTarget" "$f"; 412 + done < <(find $prefix -type l -print0) 413 + } 414 + _makeSymlinksRelativeInAllOutputs () 415 + { 416 + 417 + local output; 418 + for output in $(getAllOutputNames); 419 + do 420 + prefix="${!output}" _makeSymlinksRelative; 421 + done 422 + } 423 + _moveLib64 () 424 + { 425 + 426 + if [ "${dontMoveLib64-}" = 1 ]; then 427 + return; 428 + fi; 429 + if [ ! -e "$prefix/lib64" -o -L "$prefix/lib64" ]; then 430 + return; 431 + fi; 432 + echo "moving $prefix/lib64/* to $prefix/lib"; 433 + mkdir -p $prefix/lib; 434 + shopt -s dotglob; 435 + for i in $prefix/lib64/*; 436 + do 437 + mv --no-clobber "$i" $prefix/lib; 438 + done; 439 + shopt -u dotglob; 440 + rmdir $prefix/lib64; 441 + ln -s lib $prefix/lib64 442 + } 443 + _moveSbin () 444 + { 445 + 446 + if [ "${dontMoveSbin-}" = 1 ]; then 447 + return; 448 + fi; 449 + if [ ! -e "$prefix/sbin" -o -L "$prefix/sbin" ]; then 450 + return; 451 + fi; 452 + echo "moving $prefix/sbin/* to $prefix/bin"; 453 + mkdir -p $prefix/bin; 454 + shopt -s dotglob; 455 + for i in $prefix/sbin/*; 456 + do 457 + mv "$i" $prefix/bin; 458 + done; 459 + shopt -u dotglob; 460 + rmdir $prefix/sbin; 461 + ln -s bin $prefix/sbin 462 + } 463 + _moveSystemdUserUnits () 464 + { 465 + 466 + if [ "${dontMoveSystemdUserUnits:-0}" = 1 ]; then 467 + return; 468 + fi; 469 + if [ ! -e "${prefix:?}/lib/systemd/user" ]; then 470 + return; 471 + fi; 472 + local source="$prefix/lib/systemd/user"; 473 + local target="$prefix/share/systemd/user"; 474 + echo "moving $source/* to $target"; 475 + mkdir -p "$target"; 476 + ( shopt -s dotglob; 477 + for i in "$source"/*; 478 + do 479 + mv "$i" "$target"; 480 + done ); 481 + rmdir "$source"; 482 + ln -s "$target" "$source" 483 + } 484 + _moveToShare () 485 + { 486 + 487 + if [ -n "$__structuredAttrs" ]; then 488 + if [ -z "${forceShare-}" ]; then 489 + forceShare=(man doc info); 490 + fi; 491 + else 492 + forceShare=(${forceShare:-man doc info}); 493 + fi; 494 + if [[ -z "$out" ]]; then 495 + return; 496 + fi; 497 + for d in "${forceShare[@]}"; 498 + do 499 + if [ -d "$out/$d" ]; then 500 + if [ -d "$out/share/$d" ]; then 501 + echo "both $d/ and share/$d/ exist!"; 502 + else 503 + echo "moving $out/$d to $out/share/$d"; 504 + mkdir -p $out/share; 505 + mv $out/$d $out/share/; 506 + fi; 507 + fi; 508 + done 509 + } 510 + _multioutConfig () 511 + { 512 + 513 + if [ "$(getAllOutputNames)" = "out" ] || [ -z "${setOutputFlags-1}" ]; then 514 + return; 515 + fi; 516 + if [ -z "${shareDocName:-}" ]; then 517 + local confScript="${configureScript:-}"; 518 + if [ -z "$confScript" ] && [ -x ./configure ]; then 519 + confScript=./configure; 520 + fi; 521 + if [ -f "$confScript" ]; then 522 + local shareDocName="$(sed -n "s/^PACKAGE_TARNAME='\(.*\)'$/\1/p" < "$confScript")"; 523 + fi; 524 + if [ -z "$shareDocName" ] || echo "$shareDocName" | grep -q '[^a-zA-Z0-9_-]'; then 525 + shareDocName="$(echo "$name" | sed 's/-[^a-zA-Z].*//')"; 526 + fi; 527 + fi; 528 + prependToVar configureFlags --bindir="${!outputBin}"/bin --sbindir="${!outputBin}"/sbin --includedir="${!outputInclude}"/include --oldincludedir="${!outputInclude}"/include --mandir="${!outputMan}"/share/man --infodir="${!outputInfo}"/share/info --docdir="${!outputDoc}"/share/doc/"${shareDocName}" --libdir="${!outputLib}"/lib --libexecdir="${!outputLib}"/libexec --localedir="${!outputLib}"/share/locale; 529 + prependToVar installFlags pkgconfigdir="${!outputDev}"/lib/pkgconfig m4datadir="${!outputDev}"/share/aclocal aclocaldir="${!outputDev}"/share/aclocal 530 + } 531 + _multioutDevs () 532 + { 533 + 534 + if [ "$(getAllOutputNames)" = "out" ] || [ -z "${moveToDev-1}" ]; then 535 + return; 536 + fi; 537 + moveToOutput include "${!outputInclude}"; 538 + moveToOutput lib/pkgconfig "${!outputDev}"; 539 + moveToOutput share/pkgconfig "${!outputDev}"; 540 + moveToOutput lib/cmake "${!outputDev}"; 541 + moveToOutput share/aclocal "${!outputDev}"; 542 + for f in "${!outputDev}"/{lib,share}/pkgconfig/*.pc; 543 + do 544 + echo "Patching '$f' includedir to output ${!outputInclude}"; 545 + sed -i "/^includedir=/s,=\${prefix},=${!outputInclude}," "$f"; 546 + done 547 + } 548 + _multioutDocs () 549 + { 550 + 551 + local REMOVE=REMOVE; 552 + moveToOutput share/info "${!outputInfo}"; 553 + moveToOutput share/doc "${!outputDoc}"; 554 + moveToOutput share/gtk-doc "${!outputDevdoc}"; 555 + moveToOutput share/devhelp/books "${!outputDevdoc}"; 556 + moveToOutput share/man "${!outputMan}"; 557 + moveToOutput share/man/man3 "${!outputDevman}" 558 + } 559 + _multioutPropagateDev () 560 + { 561 + 562 + if [ "$(getAllOutputNames)" = "out" ]; then 563 + return; 564 + fi; 565 + local outputFirst; 566 + for outputFirst in $(getAllOutputNames); 567 + do 568 + break; 569 + done; 570 + local propagaterOutput="$outputDev"; 571 + if [ -z "$propagaterOutput" ]; then 572 + propagaterOutput="$outputFirst"; 573 + fi; 574 + if [ -z "${propagatedBuildOutputs+1}" ]; then 575 + local po_dirty="$outputBin $outputInclude $outputLib"; 576 + set +o pipefail; 577 + propagatedBuildOutputs=`echo "$po_dirty" | tr -s ' ' '\n' | grep -v -F "$propagaterOutput" | sort -u | tr '\n' ' ' `; 578 + set -o pipefail; 579 + fi; 580 + if [ -z "$propagatedBuildOutputs" ]; then 581 + return; 582 + fi; 583 + mkdir -p "${!propagaterOutput}"/nix-support; 584 + for output in $propagatedBuildOutputs; 585 + do 586 + echo -n " ${!output}" >> "${!propagaterOutput}"/nix-support/propagated-build-inputs; 587 + done 588 + } 589 + _overrideFirst () 590 + { 591 + 592 + if [ -z "${!1-}" ]; then 593 + _assignFirst "$@"; 594 + fi 595 + } 596 + _pruneLibtoolFiles () 597 + { 598 + 599 + if [ "${dontPruneLibtoolFiles-}" ] || [ ! -e "$prefix" ]; then 600 + return; 601 + fi; 602 + find "$prefix" -type f -name '*.la' -exec grep -q '^# Generated by .*libtool' {} \; -exec grep -q "^old_library=''" {} \; -exec sed -i {} -e "/^dependency_libs='[^']/ c dependency_libs='' #pruned" \; 603 + } 604 + _updateSourceDateEpochFromSourceRoot () 605 + { 606 + 607 + if [ -n "$sourceRoot" ]; then 608 + updateSourceDateEpoch "$sourceRoot"; 609 + fi 610 + } 611 + activatePackage () 612 + { 613 + 614 + local pkg="$1"; 615 + local -r hostOffset="$2"; 616 + local -r targetOffset="$3"; 617 + (( hostOffset <= targetOffset )) || exit 1; 618 + if [ -f "$pkg" ]; then 619 + source "$pkg"; 620 + fi; 621 + if [[ -z "${strictDeps-}" || "$hostOffset" -le -1 ]]; then 622 + addToSearchPath _PATH "$pkg/bin"; 623 + fi; 624 + if (( hostOffset <= -1 )); then 625 + addToSearchPath _XDG_DATA_DIRS "$pkg/share"; 626 + fi; 627 + if [[ "$hostOffset" -eq 0 && -d "$pkg/bin" ]]; then 628 + addToSearchPath _HOST_PATH "$pkg/bin"; 629 + fi; 630 + if [[ -f "$pkg/nix-support/setup-hook" ]]; then 631 + source "$pkg/nix-support/setup-hook"; 632 + fi 633 + } 634 + addEnvHooks () 635 + { 636 + 637 + local depHostOffset="$1"; 638 + shift; 639 + local pkgHookVarsSlice="${pkgHookVarVars[$depHostOffset + 1]}[@]"; 640 + local pkgHookVar; 641 + for pkgHookVar in "${!pkgHookVarsSlice}"; 642 + do 643 + eval "${pkgHookVar}s"'+=("$@")'; 644 + done 645 + } 646 + addToSearchPath () 647 + { 648 + 649 + addToSearchPathWithCustomDelimiter ":" "$@" 650 + } 651 + addToSearchPathWithCustomDelimiter () 652 + { 653 + 654 + local delimiter="$1"; 655 + local varName="$2"; 656 + local dir="$3"; 657 + if [[ -d "$dir" && "${!varName:+${delimiter}${!varName}${delimiter}}" != *"${delimiter}${dir}${delimiter}"* ]]; then 658 + export "${varName}=${!varName:+${!varName}${delimiter}}${dir}"; 659 + fi 660 + } 661 + appendToVar () 662 + { 663 + 664 + local -n nameref="$1"; 665 + local useArray type; 666 + if [ -n "$__structuredAttrs" ]; then 667 + useArray=true; 668 + else 669 + useArray=false; 670 + fi; 671 + if declare -p "$1" 2> /dev/null | grep -q '^'; then 672 + type="$(declare -p "$1")"; 673 + if [[ "$type" =~ "declare -A" ]]; then 674 + echo "appendToVar(): ERROR: trying to use appendToVar on an associative array, use variable+=([\"X\"]=\"Y\") instead." 1>&2; 675 + return 1; 676 + else 677 + if [[ "$type" =~ "declare -a" ]]; then 678 + useArray=true; 679 + else 680 + useArray=false; 681 + fi; 682 + fi; 683 + fi; 684 + shift; 685 + if $useArray; then 686 + nameref=(${nameref+"${nameref[@]}"} "$@"); 687 + else 688 + nameref="${nameref-} $*"; 689 + fi 690 + } 691 + auditTmpdir () 692 + { 693 + 694 + local dir="$1"; 695 + [ -e "$dir" ] || return 0; 696 + echo "checking for references to $TMPDIR/ in $dir..."; 697 + local i; 698 + find "$dir" -type f -print0 | while IFS= read -r -d '' i; do 699 + if [[ "$i" =~ .build-id ]]; then 700 + continue; 701 + fi; 702 + if isELF "$i"; then 703 + if { 704 + printf :; 705 + patchelf --print-rpath "$i" 706 + } | grep -q -F ":$TMPDIR/"; then 707 + echo "RPATH of binary $i contains a forbidden reference to $TMPDIR/"; 708 + exit 1; 709 + fi; 710 + fi; 711 + if isScript "$i"; then 712 + if [ -e "$(dirname "$i")/.$(basename "$i")-wrapped" ]; then 713 + if grep -q -F "$TMPDIR/" "$i"; then 714 + echo "wrapper script $i contains a forbidden reference to $TMPDIR/"; 715 + exit 1; 716 + fi; 717 + fi; 718 + fi; 719 + done 720 + } 721 + bintoolsWrapper_addLDVars () 722 + { 723 + 724 + local role_post; 725 + getHostRoleEnvHook; 726 + if [[ -d "$1/lib64" && ! -L "$1/lib64" ]]; then 727 + export NIX_LDFLAGS${role_post}+=" -L$1/lib64"; 728 + fi; 729 + if [[ -d "$1/lib" ]]; then 730 + local -a glob=($1/lib/lib*); 731 + if [ "${#glob[*]}" -gt 0 ]; then 732 + export NIX_LDFLAGS${role_post}+=" -L$1/lib"; 733 + fi; 734 + fi 735 + } 736 + buildPhase () 737 + { 738 + 739 + runHook preBuild; 740 + if [[ -z "${makeFlags-}" && -z "${makefile:-}" && ! ( -e Makefile || -e makefile || -e GNUmakefile ) ]]; then 741 + echo "no Makefile or custom buildPhase, doing nothing"; 742 + else 743 + foundMakefile=1; 744 + local flagsArray=(${enableParallelBuilding:+-j${NIX_BUILD_CORES}} SHELL=$SHELL); 745 + _accumFlagsArray makeFlags makeFlagsArray buildFlags buildFlagsArray; 746 + echoCmd 'build flags' "${flagsArray[@]}"; 747 + make ${makefile:+-f $makefile} "${flagsArray[@]}"; 748 + unset flagsArray; 749 + fi; 750 + runHook postBuild 751 + } 752 + ccWrapper_addCVars () 753 + { 754 + 755 + local role_post; 756 + getHostRoleEnvHook; 757 + if [ -d "$1/include" ]; then 758 + export NIX_CFLAGS_COMPILE${role_post}+=" -isystem $1/include"; 759 + fi; 760 + if [ -d "$1/Library/Frameworks" ]; then 761 + export NIX_CFLAGS_COMPILE${role_post}+=" -iframework $1/Library/Frameworks"; 762 + fi 763 + } 764 + checkPhase () 765 + { 766 + 767 + runHook preCheck; 768 + if [[ -z "${foundMakefile:-}" ]]; then 769 + echo "no Makefile or custom checkPhase, doing nothing"; 770 + runHook postCheck; 771 + return; 772 + fi; 773 + if [[ -z "${checkTarget:-}" ]]; then 774 + if make -n ${makefile:+-f $makefile} check > /dev/null 2>&1; then 775 + checkTarget=check; 776 + else 777 + if make -n ${makefile:+-f $makefile} test > /dev/null 2>&1; then 778 + checkTarget=test; 779 + fi; 780 + fi; 781 + fi; 782 + if [[ -z "${checkTarget:-}" ]]; then 783 + echo "no check/test target in ${makefile:-Makefile}, doing nothing"; 784 + else 785 + local flagsArray=(${enableParallelChecking:+-j${NIX_BUILD_CORES}} SHELL=$SHELL); 786 + _accumFlagsArray makeFlags makeFlagsArray; 787 + if [ -n "$__structuredAttrs" ]; then 788 + flagsArray+=("${checkFlags[@]:-VERBOSE=y}"); 789 + else 790 + flagsArray+=(${checkFlags:-VERBOSE=y}); 791 + fi; 792 + _accumFlagsArray checkFlagsArray; 793 + flagsArray+=(${checkTarget}); 794 + echoCmd 'check flags' "${flagsArray[@]}"; 795 + make ${makefile:+-f $makefile} "${flagsArray[@]}"; 796 + unset flagsArray; 797 + fi; 798 + runHook postCheck 799 + } 800 + compressManPages () 801 + { 802 + 803 + local dir="$1"; 804 + if [ -L "$dir"/share ] || [ -L "$dir"/share/man ] || [ ! -d "$dir/share/man" ]; then 805 + return; 806 + fi; 807 + echo "gzipping man pages under $dir/share/man/"; 808 + find "$dir"/share/man/ -type f -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 | while IFS= read -r -d '' f; do 809 + if gzip -c -n "$f" > "$f".gz; then 810 + rm "$f"; 811 + else 812 + rm "$f".gz; 813 + fi; 814 + done; 815 + find "$dir"/share/man/ -type l -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 | sort -z | while IFS= read -r -d '' f; do 816 + local target; 817 + target="$(readlink -f "$f")"; 818 + if [ -f "$target".gz ]; then 819 + ln -sf "$target".gz "$f".gz && rm "$f"; 820 + fi; 821 + done 822 + } 823 + configurePhase () 824 + { 825 + 826 + runHook preConfigure; 827 + : "${configureScript=}"; 828 + if [[ -z "$configureScript" && -x ./configure ]]; then 829 + configureScript=./configure; 830 + fi; 831 + if [ -z "${dontFixLibtool:-}" ]; then 832 + export lt_cv_deplibs_check_method="${lt_cv_deplibs_check_method-pass_all}"; 833 + local i; 834 + find . -iname "ltmain.sh" -print0 | while IFS='' read -r -d '' i; do 835 + echo "fixing libtool script $i"; 836 + fixLibtool "$i"; 837 + done; 838 + CONFIGURE_MTIME_REFERENCE=$(mktemp configure.mtime.reference.XXXXXX); 839 + find . -executable -type f -name configure -exec grep -l 'GNU Libtool is free software; you can redistribute it and/or modify' {} \; -exec touch -r {} "$CONFIGURE_MTIME_REFERENCE" \; -exec sed -i s_/usr/bin/file_file_g {} \; -exec touch -r "$CONFIGURE_MTIME_REFERENCE" {} \;; 840 + rm -f "$CONFIGURE_MTIME_REFERENCE"; 841 + fi; 842 + if [[ -z "${dontAddPrefix:-}" && -n "$prefix" ]]; then 843 + prependToVar configureFlags "${prefixKey:---prefix=}$prefix"; 844 + fi; 845 + if [[ -f "$configureScript" ]]; then 846 + if [ -z "${dontAddDisableDepTrack:-}" ]; then 847 + if grep -q dependency-tracking "$configureScript"; then 848 + prependToVar configureFlags --disable-dependency-tracking; 849 + fi; 850 + fi; 851 + if [ -z "${dontDisableStatic:-}" ]; then 852 + if grep -q enable-static "$configureScript"; then 853 + prependToVar configureFlags --disable-static; 854 + fi; 855 + fi; 856 + fi; 857 + if [ -n "$configureScript" ]; then 858 + local -a flagsArray; 859 + _accumFlagsArray configureFlags configureFlagsArray; 860 + echoCmd 'configure flags' "${flagsArray[@]}"; 861 + $configureScript "${flagsArray[@]}"; 862 + unset flagsArray; 863 + else 864 + echo "no configure script, doing nothing"; 865 + fi; 866 + runHook postConfigure 867 + } 868 + consumeEntire () 869 + { 870 + 871 + if IFS='' read -r -d '' "$1"; then 872 + echo "consumeEntire(): ERROR: Input null bytes, won't process" 1>&2; 873 + return 1; 874 + fi 875 + } 876 + distPhase () 877 + { 878 + 879 + runHook preDist; 880 + local flagsArray=(); 881 + _accumFlagsArray distFlags distFlagsArray; 882 + flagsArray+=(${distTarget:-dist}); 883 + echo 'dist flags: %q' "${flagsArray[@]}"; 884 + make ${makefile:+-f $makefile} "${flagsArray[@]}"; 885 + if [ "${dontCopyDist:-0}" != 1 ]; then 886 + mkdir -p "$out/tarballs"; 887 + cp -pvd ${tarballs[*]:-*.tar.gz} "$out/tarballs"; 888 + fi; 889 + runHook postDist 890 + } 891 + dumpVars () 892 + { 893 + 894 + if [ "${noDumpEnvVars:-0}" != 1 ]; then 895 + export 2> /dev/null >| "$NIX_BUILD_TOP/env-vars" || true; 896 + fi 897 + } 898 + echoCmd () 899 + { 900 + 901 + printf "%s:" "$1"; 902 + shift; 903 + printf ' %q' "$@"; 904 + echo 905 + } 906 + exitHandler () 907 + { 908 + 909 + exitCode="$?"; 910 + set +e; 911 + if [ -n "${showBuildStats:-}" ]; then 912 + read -r -d '' -a buildTimes < <(times); 913 + echo "build times:"; 914 + echo "user time for the shell ${buildTimes[0]}"; 915 + echo "system time for the shell ${buildTimes[1]}"; 916 + echo "user time for all child processes ${buildTimes[2]}"; 917 + echo "system time for all child processes ${buildTimes[3]}"; 918 + fi; 919 + if (( "$exitCode" != 0 )); then 920 + runHook failureHook; 921 + if [ -n "${succeedOnFailure:-}" ]; then 922 + echo "build failed with exit code $exitCode (ignored)"; 923 + mkdir -p "$out/nix-support"; 924 + printf "%s" "$exitCode" > "$out/nix-support/failed"; 925 + exit 0; 926 + fi; 927 + else 928 + runHook exitHook; 929 + fi; 930 + return "$exitCode" 931 + } 932 + findInputs () 933 + { 934 + 935 + local -r pkg="$1"; 936 + local -r hostOffset="$2"; 937 + local -r targetOffset="$3"; 938 + (( hostOffset <= targetOffset )) || exit 1; 939 + local varVar="${pkgAccumVarVars[hostOffset + 1]}"; 940 + local varRef="$varVar[$((targetOffset - hostOffset))]"; 941 + local var="${!varRef}"; 942 + unset -v varVar varRef; 943 + local varSlice="$var[*]"; 944 + case "${!varSlice-}" in 945 + *" $pkg "*) 946 + return 0 947 + ;; 948 + esac; 949 + unset -v varSlice; 950 + eval "$var"'+=("$pkg")'; 951 + if ! [ -e "$pkg" ]; then 952 + echo "build input $pkg does not exist" 1>&2; 953 + exit 1; 954 + fi; 955 + function mapOffset () 956 + { 957 + local -r inputOffset="$1"; 958 + local -n outputOffset="$2"; 959 + if (( inputOffset <= 0 )); then 960 + outputOffset=$((inputOffset + hostOffset)); 961 + else 962 + outputOffset=$((inputOffset - 1 + targetOffset)); 963 + fi 964 + }; 965 + local relHostOffset; 966 + for relHostOffset in "${allPlatOffsets[@]}"; 967 + do 968 + local files="${propagatedDepFilesVars[relHostOffset + 1]}"; 969 + local hostOffsetNext; 970 + mapOffset "$relHostOffset" hostOffsetNext; 971 + (( -1 <= hostOffsetNext && hostOffsetNext <= 1 )) || continue; 972 + local relTargetOffset; 973 + for relTargetOffset in "${allPlatOffsets[@]}"; 974 + do 975 + (( "$relHostOffset" <= "$relTargetOffset" )) || continue; 976 + local fileRef="${files}[$relTargetOffset - $relHostOffset]"; 977 + local file="${!fileRef}"; 978 + unset -v fileRef; 979 + local targetOffsetNext; 980 + mapOffset "$relTargetOffset" targetOffsetNext; 981 + (( -1 <= hostOffsetNext && hostOffsetNext <= 1 )) || continue; 982 + [[ -f "$pkg/nix-support/$file" ]] || continue; 983 + local pkgNext; 984 + read -r -d '' pkgNext < "$pkg/nix-support/$file" || true; 985 + for pkgNext in $pkgNext; 986 + do 987 + findInputs "$pkgNext" "$hostOffsetNext" "$targetOffsetNext"; 988 + done; 989 + done; 990 + done 991 + } 992 + fixLibtool () 993 + { 994 + 995 + local search_path; 996 + for flag in $NIX_LDFLAGS; 997 + do 998 + case $flag in 999 + -L*) 1000 + search_path+=" ${flag#-L}" 1001 + ;; 1002 + esac; 1003 + done; 1004 + sed -i "$1" -e "s^eval \(sys_lib_search_path=\).*^\1'${search_path:-}'^" -e 's^eval sys_lib_.+search_path=.*^^' 1005 + } 1006 + fixupPhase () 1007 + { 1008 + 1009 + local output; 1010 + for output in $(getAllOutputNames); 1011 + do 1012 + if [ -e "${!output}" ]; then 1013 + chmod -R u+w "${!output}"; 1014 + fi; 1015 + done; 1016 + runHook preFixup; 1017 + local output; 1018 + for output in $(getAllOutputNames); 1019 + do 1020 + prefix="${!output}" runHook fixupOutput; 1021 + done; 1022 + recordPropagatedDependencies; 1023 + if [ -n "${setupHook:-}" ]; then 1024 + mkdir -p "${!outputDev}/nix-support"; 1025 + substituteAll "$setupHook" "${!outputDev}/nix-support/setup-hook"; 1026 + fi; 1027 + if [ -n "${setupHooks:-}" ]; then 1028 + mkdir -p "${!outputDev}/nix-support"; 1029 + local hook; 1030 + for hook in ${setupHooks[@]}; 1031 + do 1032 + local content; 1033 + consumeEntire content < "$hook"; 1034 + substituteAllStream content "file '$hook'" >> "${!outputDev}/nix-support/setup-hook"; 1035 + unset -v content; 1036 + done; 1037 + unset -v hook; 1038 + fi; 1039 + if [ -n "${propagatedUserEnvPkgs:-}" ]; then 1040 + mkdir -p "${!outputBin}/nix-support"; 1041 + printWords $propagatedUserEnvPkgs > "${!outputBin}/nix-support/propagated-user-env-packages"; 1042 + fi; 1043 + runHook postFixup 1044 + } 1045 + genericBuild () 1046 + { 1047 + 1048 + export GZIP_NO_TIMESTAMPS=1; 1049 + if [ -f "${buildCommandPath:-}" ]; then 1050 + source "$buildCommandPath"; 1051 + return; 1052 + fi; 1053 + if [ -n "${buildCommand:-}" ]; then 1054 + eval "$buildCommand"; 1055 + return; 1056 + fi; 1057 + if [ -z "${phases[*]:-}" ]; then 1058 + phases="${prePhases[*]:-} unpackPhase patchPhase ${preConfigurePhases[*]:-} configurePhase ${preBuildPhases[*]:-} buildPhase checkPhase ${preInstallPhases[*]:-} installPhase ${preFixupPhases[*]:-} fixupPhase installCheckPhase ${preDistPhases[*]:-} distPhase ${postPhases[*]:-}"; 1059 + fi; 1060 + for curPhase in ${phases[*]}; 1061 + do 1062 + runPhase "$curPhase"; 1063 + done 1064 + } 1065 + getAllOutputNames () 1066 + { 1067 + 1068 + if [ -n "$__structuredAttrs" ]; then 1069 + echo "${!outputs[*]}"; 1070 + else 1071 + echo "$outputs"; 1072 + fi 1073 + } 1074 + getHostRole () 1075 + { 1076 + 1077 + getRole "$hostOffset" 1078 + } 1079 + getHostRoleEnvHook () 1080 + { 1081 + 1082 + getRole "$depHostOffset" 1083 + } 1084 + getRole () 1085 + { 1086 + 1087 + case $1 in 1088 + -1) 1089 + role_post='_FOR_BUILD' 1090 + ;; 1091 + 0) 1092 + role_post='' 1093 + ;; 1094 + 1) 1095 + role_post='_FOR_TARGET' 1096 + ;; 1097 + *) 1098 + echo "binutils-wrapper-2.40: used as improper sort of dependency" 1>&2; 1099 + return 1 1100 + ;; 1101 + esac 1102 + } 1103 + getTargetRole () 1104 + { 1105 + 1106 + getRole "$targetOffset" 1107 + } 1108 + getTargetRoleEnvHook () 1109 + { 1110 + 1111 + getRole "$depTargetOffset" 1112 + } 1113 + getTargetRoleWrapper () 1114 + { 1115 + 1116 + case $targetOffset in 1117 + -1) 1118 + export NIX_BINTOOLS_WRAPPER_TARGET_BUILD_x86_64_unknown_linux_gnu=1 1119 + ;; 1120 + 0) 1121 + export NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu=1 1122 + ;; 1123 + 1) 1124 + export NIX_BINTOOLS_WRAPPER_TARGET_TARGET_x86_64_unknown_linux_gnu=1 1125 + ;; 1126 + *) 1127 + echo "binutils-wrapper-2.40: used as improper sort of dependency" 1>&2; 1128 + return 1 1129 + ;; 1130 + esac 1131 + } 1132 + installCheckPhase () 1133 + { 1134 + 1135 + runHook preInstallCheck; 1136 + if [[ -z "${foundMakefile:-}" ]]; then 1137 + echo "no Makefile or custom installCheckPhase, doing nothing"; 1138 + else 1139 + if [[ -z "${installCheckTarget:-}" ]] && ! make -n ${makefile:+-f $makefile} "${installCheckTarget:-installcheck}" > /dev/null 2>&1; then 1140 + echo "no installcheck target in ${makefile:-Makefile}, doing nothing"; 1141 + else 1142 + local flagsArray=(${enableParallelChecking:+-j${NIX_BUILD_CORES}} SHELL=$SHELL); 1143 + _accumFlagsArray makeFlags makeFlagsArray installCheckFlags installCheckFlagsArray; 1144 + flagsArray+=(${installCheckTarget:-installcheck}); 1145 + echoCmd 'installcheck flags' "${flagsArray[@]}"; 1146 + make ${makefile:+-f $makefile} "${flagsArray[@]}"; 1147 + unset flagsArray; 1148 + fi; 1149 + fi; 1150 + runHook postInstallCheck 1151 + } 1152 + installPhase () 1153 + { 1154 + 1155 + runHook preInstall; 1156 + if [[ -z "${makeFlags-}" && -z "${makefile:-}" && ! ( -e Makefile || -e makefile || -e GNUmakefile ) ]]; then 1157 + echo "no Makefile or custom installPhase, doing nothing"; 1158 + runHook postInstall; 1159 + return; 1160 + else 1161 + foundMakefile=1; 1162 + fi; 1163 + if [ -n "$prefix" ]; then 1164 + mkdir -p "$prefix"; 1165 + fi; 1166 + local flagsArray=(${enableParallelInstalling:+-j${NIX_BUILD_CORES}} SHELL=$SHELL); 1167 + _accumFlagsArray makeFlags makeFlagsArray installFlags installFlagsArray; 1168 + if [ -n "$__structuredAttrs" ]; then 1169 + flagsArray+=("${installTargets[@]:-install}"); 1170 + else 1171 + flagsArray+=(${installTargets:-install}); 1172 + fi; 1173 + echoCmd 'install flags' "${flagsArray[@]}"; 1174 + make ${makefile:+-f $makefile} "${flagsArray[@]}"; 1175 + unset flagsArray; 1176 + runHook postInstall 1177 + } 1178 + isELF () 1179 + { 1180 + 1181 + local fn="$1"; 1182 + local fd; 1183 + local magic; 1184 + exec {fd}< "$fn"; 1185 + read -r -n 4 -u "$fd" magic; 1186 + exec {fd}>&-; 1187 + if [ "$magic" = 'ELF' ]; then 1188 + return 0; 1189 + else 1190 + return 1; 1191 + fi 1192 + } 1193 + isMachO () 1194 + { 1195 + 1196 + local fn="$1"; 1197 + local fd; 1198 + local magic; 1199 + exec {fd}< "$fn"; 1200 + read -r -n 4 -u "$fd" magic; 1201 + exec {fd}>&-; 1202 + if [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xcf") || "$magic" = $(echo -ne "\xcf\xfa\xed\xfe") ]]; then 1203 + return 0; 1204 + else 1205 + if [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xce") || "$magic" = $(echo -ne "\xce\xfa\xed\xfe") ]]; then 1206 + return 0; 1207 + else 1208 + if [[ "$magic" = $(echo -ne "\xca\xfe\xba\xbe") || "$magic" = $(echo -ne "\xbe\xba\xfe\xca") ]]; then 1209 + return 0; 1210 + else 1211 + return 1; 1212 + fi; 1213 + fi; 1214 + fi 1215 + } 1216 + isScript () 1217 + { 1218 + 1219 + local fn="$1"; 1220 + local fd; 1221 + local magic; 1222 + exec {fd}< "$fn"; 1223 + read -r -n 2 -u "$fd" magic; 1224 + exec {fd}>&-; 1225 + if [[ "$magic" =~ \#! ]]; then 1226 + return 0; 1227 + else 1228 + return 1; 1229 + fi 1230 + } 1231 + mapOffset () 1232 + { 1233 + 1234 + local -r inputOffset="$1"; 1235 + local -n outputOffset="$2"; 1236 + if (( inputOffset <= 0 )); then 1237 + outputOffset=$((inputOffset + hostOffset)); 1238 + else 1239 + outputOffset=$((inputOffset - 1 + targetOffset)); 1240 + fi 1241 + } 1242 + moveToOutput () 1243 + { 1244 + 1245 + local patt="$1"; 1246 + local dstOut="$2"; 1247 + local output; 1248 + for output in $(getAllOutputNames); 1249 + do 1250 + if [ "${!output}" = "$dstOut" ]; then 1251 + continue; 1252 + fi; 1253 + local srcPath; 1254 + for srcPath in "${!output}"/$patt; 1255 + do 1256 + if [ ! -e "$srcPath" ] && [ ! -L "$srcPath" ]; then 1257 + continue; 1258 + fi; 1259 + if [ "$dstOut" = REMOVE ]; then 1260 + echo "Removing $srcPath"; 1261 + rm -r "$srcPath"; 1262 + else 1263 + local dstPath="$dstOut${srcPath#${!output}}"; 1264 + echo "Moving $srcPath to $dstPath"; 1265 + if [ -d "$dstPath" ] && [ -d "$srcPath" ]; then 1266 + rmdir "$srcPath" --ignore-fail-on-non-empty; 1267 + if [ -d "$srcPath" ]; then 1268 + mv -t "$dstPath" "$srcPath"/*; 1269 + rmdir "$srcPath"; 1270 + fi; 1271 + else 1272 + mkdir -p "$(readlink -m "$dstPath/..")"; 1273 + mv "$srcPath" "$dstPath"; 1274 + fi; 1275 + fi; 1276 + local srcParent="$(readlink -m "$srcPath/..")"; 1277 + if [ -n "$(find "$srcParent" -maxdepth 0 -type d -empty 2> /dev/null)" ]; then 1278 + echo "Removing empty $srcParent/ and (possibly) its parents"; 1279 + rmdir -p --ignore-fail-on-non-empty "$srcParent" 2> /dev/null || true; 1280 + fi; 1281 + done; 1282 + done 1283 + } 1284 + patchELF () 1285 + { 1286 + 1287 + local dir="$1"; 1288 + [ -e "$dir" ] || return 0; 1289 + echo "shrinking RPATHs of ELF executables and libraries in $dir"; 1290 + local i; 1291 + while IFS= read -r -d '' i; do 1292 + if [[ "$i" =~ .build-id ]]; then 1293 + continue; 1294 + fi; 1295 + if ! isELF "$i"; then 1296 + continue; 1297 + fi; 1298 + echo "shrinking $i"; 1299 + patchelf --shrink-rpath "$i" || true; 1300 + done < <(find "$dir" -type f -print0) 1301 + } 1302 + patchPhase () 1303 + { 1304 + 1305 + runHook prePatch; 1306 + local -a patchesArray; 1307 + if [ -n "$__structuredAttrs" ]; then 1308 + patchesArray=(${patches:+"${patches[@]}"}); 1309 + else 1310 + patchesArray=(${patches:-}); 1311 + fi; 1312 + for i in "${patchesArray[@]}"; 1313 + do 1314 + echo "applying patch $i"; 1315 + local uncompress=cat; 1316 + case "$i" in 1317 + *.gz) 1318 + uncompress="gzip -d" 1319 + ;; 1320 + *.bz2) 1321 + uncompress="bzip2 -d" 1322 + ;; 1323 + *.xz) 1324 + uncompress="xz -d" 1325 + ;; 1326 + *.lzma) 1327 + uncompress="lzma -d" 1328 + ;; 1329 + esac; 1330 + local -a flagsArray; 1331 + if [ -n "$__structuredAttrs" ]; then 1332 + flagsArray=("${patchFlags[@]:--p1}"); 1333 + else 1334 + flagsArray=(${patchFlags:--p1}); 1335 + fi; 1336 + $uncompress < "$i" 2>&1 | patch "${flagsArray[@]}"; 1337 + done; 1338 + runHook postPatch 1339 + } 1340 + patchShebangs () 1341 + { 1342 + 1343 + local pathName; 1344 + local update; 1345 + while [[ $# -gt 0 ]]; do 1346 + case "$1" in 1347 + --host) 1348 + pathName=HOST_PATH; 1349 + shift 1350 + ;; 1351 + --build) 1352 + pathName=PATH; 1353 + shift 1354 + ;; 1355 + --update) 1356 + update=true; 1357 + shift 1358 + ;; 1359 + --) 1360 + shift; 1361 + break 1362 + ;; 1363 + -* | --*) 1364 + echo "Unknown option $1 supplied to patchShebangs" 1>&2; 1365 + return 1 1366 + ;; 1367 + *) 1368 + break 1369 + ;; 1370 + esac; 1371 + done; 1372 + echo "patching script interpreter paths in $@"; 1373 + local f; 1374 + local oldPath; 1375 + local newPath; 1376 + local arg0; 1377 + local args; 1378 + local oldInterpreterLine; 1379 + local newInterpreterLine; 1380 + if [[ $# -eq 0 ]]; then 1381 + echo "No arguments supplied to patchShebangs" 1>&2; 1382 + return 0; 1383 + fi; 1384 + local f; 1385 + while IFS= read -r -d '' f; do 1386 + isScript "$f" || continue; 1387 + read -r oldInterpreterLine < "$f"; 1388 + read -r oldPath arg0 args <<< "${oldInterpreterLine:2}"; 1389 + if [[ -z "${pathName:-}" ]]; then 1390 + if [[ -n $strictDeps && $f == "$NIX_STORE"* ]]; then 1391 + pathName=HOST_PATH; 1392 + else 1393 + pathName=PATH; 1394 + fi; 1395 + fi; 1396 + if [[ "$oldPath" == *"/bin/env" ]]; then 1397 + if [[ $arg0 == "-S" ]]; then 1398 + arg0=${args%% *}; 1399 + args=${args#* }; 1400 + newPath="$(PATH="${!pathName}" command -v "env" || true)"; 1401 + args="-S $(PATH="${!pathName}" command -v "$arg0" || true) $args"; 1402 + else 1403 + if [[ $arg0 == "-"* || $arg0 == *"="* ]]; then 1404 + echo "$f: unsupported interpreter directive \"$oldInterpreterLine\" (set dontPatchShebangs=1 and handle shebang patching yourself)" 1>&2; 1405 + exit 1; 1406 + else 1407 + newPath="$(PATH="${!pathName}" command -v "$arg0" || true)"; 1408 + fi; 1409 + fi; 1410 + else 1411 + if [[ -z $oldPath ]]; then 1412 + oldPath="/bin/sh"; 1413 + fi; 1414 + newPath="$(PATH="${!pathName}" command -v "$(basename "$oldPath")" || true)"; 1415 + args="$arg0 $args"; 1416 + fi; 1417 + newInterpreterLine="$newPath $args"; 1418 + newInterpreterLine=${newInterpreterLine%${newInterpreterLine##*[![:space:]]}}; 1419 + if [[ -n "$oldPath" && ( "$update" == true || "${oldPath:0:${#NIX_STORE}}" != "$NIX_STORE" ) ]]; then 1420 + if [[ -n "$newPath" && "$newPath" != "$oldPath" ]]; then 1421 + echo "$f: interpreter directive changed from \"$oldInterpreterLine\" to \"$newInterpreterLine\""; 1422 + escapedInterpreterLine=${newInterpreterLine//\\/\\\\}; 1423 + timestamp=$(stat --printf "%y" "$f"); 1424 + sed -i -e "1 s|.*|#\!$escapedInterpreterLine|" "$f"; 1425 + touch --date "$timestamp" "$f"; 1426 + fi; 1427 + fi; 1428 + done < <(find "$@" -type f -perm -0100 -print0) 1429 + } 1430 + patchShebangsAuto () 1431 + { 1432 + 1433 + if [[ -z "${dontPatchShebangs-}" && -e "$prefix" ]]; then 1434 + if [[ "$output" != out && "$output" = "$outputDev" ]]; then 1435 + patchShebangs --build "$prefix"; 1436 + else 1437 + patchShebangs --host "$prefix"; 1438 + fi; 1439 + fi 1440 + } 1441 + prependToVar () 1442 + { 1443 + 1444 + local -n nameref="$1"; 1445 + local useArray type; 1446 + if [ -n "$__structuredAttrs" ]; then 1447 + useArray=true; 1448 + else 1449 + useArray=false; 1450 + fi; 1451 + if declare -p "$1" 2> /dev/null | grep -q '^'; then 1452 + type="$(declare -p "$1")"; 1453 + if [[ "$type" =~ "declare -A" ]]; then 1454 + echo "prependToVar(): ERROR: trying to use prependToVar on an associative array." 1>&2; 1455 + return 1; 1456 + else 1457 + if [[ "$type" =~ "declare -a" ]]; then 1458 + useArray=true; 1459 + else 1460 + useArray=false; 1461 + fi; 1462 + fi; 1463 + fi; 1464 + shift; 1465 + if $useArray; then 1466 + nameref=("$@" ${nameref+"${nameref[@]}"}); 1467 + else 1468 + nameref="$* ${nameref-}"; 1469 + fi 1470 + } 1471 + printLines () 1472 + { 1473 + 1474 + (( "$#" > 0 )) || return 0; 1475 + printf '%s\n' "$@" 1476 + } 1477 + printWords () 1478 + { 1479 + 1480 + (( "$#" > 0 )) || return 0; 1481 + printf '%s ' "$@" 1482 + } 1483 + recordPropagatedDependencies () 1484 + { 1485 + 1486 + declare -ra flatVars=(depsBuildBuildPropagated propagatedNativeBuildInputs depsBuildTargetPropagated depsHostHostPropagated propagatedBuildInputs depsTargetTargetPropagated); 1487 + declare -ra flatFiles=("${propagatedBuildDepFiles[@]}" "${propagatedHostDepFiles[@]}" "${propagatedTargetDepFiles[@]}"); 1488 + local propagatedInputsIndex; 1489 + for propagatedInputsIndex in "${!flatVars[@]}"; 1490 + do 1491 + local propagatedInputsSlice="${flatVars[$propagatedInputsIndex]}[@]"; 1492 + local propagatedInputsFile="${flatFiles[$propagatedInputsIndex]}"; 1493 + [[ -n "${!propagatedInputsSlice}" ]] || continue; 1494 + mkdir -p "${!outputDev}/nix-support"; 1495 + printWords ${!propagatedInputsSlice} > "${!outputDev}/nix-support/$propagatedInputsFile"; 1496 + done 1497 + } 1498 + runHook () 1499 + { 1500 + 1501 + local hookName="$1"; 1502 + shift; 1503 + local hooksSlice="${hookName%Hook}Hooks[@]"; 1504 + local hook; 1505 + for hook in "_callImplicitHook 0 $hookName" ${!hooksSlice+"${!hooksSlice}"}; 1506 + do 1507 + _eval "$hook" "$@"; 1508 + done; 1509 + return 0 1510 + } 1511 + runOneHook () 1512 + { 1513 + 1514 + local hookName="$1"; 1515 + shift; 1516 + local hooksSlice="${hookName%Hook}Hooks[@]"; 1517 + local hook ret=1; 1518 + for hook in "_callImplicitHook 1 $hookName" ${!hooksSlice+"${!hooksSlice}"}; 1519 + do 1520 + if _eval "$hook" "$@"; then 1521 + ret=0; 1522 + break; 1523 + fi; 1524 + done; 1525 + return "$ret" 1526 + } 1527 + runPhase () 1528 + { 1529 + 1530 + local curPhase="$*"; 1531 + if [[ "$curPhase" = unpackPhase && -n "${dontUnpack:-}" ]]; then 1532 + return; 1533 + fi; 1534 + if [[ "$curPhase" = patchPhase && -n "${dontPatch:-}" ]]; then 1535 + return; 1536 + fi; 1537 + if [[ "$curPhase" = configurePhase && -n "${dontConfigure:-}" ]]; then 1538 + return; 1539 + fi; 1540 + if [[ "$curPhase" = buildPhase && -n "${dontBuild:-}" ]]; then 1541 + return; 1542 + fi; 1543 + if [[ "$curPhase" = checkPhase && -z "${doCheck:-}" ]]; then 1544 + return; 1545 + fi; 1546 + if [[ "$curPhase" = installPhase && -n "${dontInstall:-}" ]]; then 1547 + return; 1548 + fi; 1549 + if [[ "$curPhase" = fixupPhase && -n "${dontFixup:-}" ]]; then 1550 + return; 1551 + fi; 1552 + if [[ "$curPhase" = installCheckPhase && -z "${doInstallCheck:-}" ]]; then 1553 + return; 1554 + fi; 1555 + if [[ "$curPhase" = distPhase && -z "${doDist:-}" ]]; then 1556 + return; 1557 + fi; 1558 + if [[ -n $NIX_LOG_FD ]]; then 1559 + echo "@nix { \"action\": \"setPhase\", \"phase\": \"$curPhase\" }" >&"$NIX_LOG_FD"; 1560 + fi; 1561 + showPhaseHeader "$curPhase"; 1562 + dumpVars; 1563 + local startTime=$(date +"%s"); 1564 + eval "${!curPhase:-$curPhase}"; 1565 + local endTime=$(date +"%s"); 1566 + showPhaseFooter "$curPhase" "$startTime" "$endTime"; 1567 + if [ "$curPhase" = unpackPhase ]; then 1568 + [ -n "${sourceRoot:-}" ] && chmod +x "${sourceRoot}"; 1569 + cd "${sourceRoot:-.}"; 1570 + fi 1571 + } 1572 + showPhaseFooter () 1573 + { 1574 + 1575 + local phase="$1"; 1576 + local startTime="$2"; 1577 + local endTime="$3"; 1578 + local delta=$(( endTime - startTime )); 1579 + (( delta < 30 )) && return; 1580 + local H=$((delta/3600)); 1581 + local M=$((delta%3600/60)); 1582 + local S=$((delta%60)); 1583 + echo -n "$phase completed in "; 1584 + (( H > 0 )) && echo -n "$H hours "; 1585 + (( M > 0 )) && echo -n "$M minutes "; 1586 + echo "$S seconds" 1587 + } 1588 + showPhaseHeader () 1589 + { 1590 + 1591 + local phase="$1"; 1592 + echo "Running phase: $phase" 1593 + } 1594 + stripDirs () 1595 + { 1596 + 1597 + local cmd="$1"; 1598 + local ranlibCmd="$2"; 1599 + local paths="$3"; 1600 + local stripFlags="$4"; 1601 + local excludeFlags=(); 1602 + local pathsNew=; 1603 + [ -z "$cmd" ] && echo "stripDirs: Strip command is empty" 1>&2 && exit 1; 1604 + [ -z "$ranlibCmd" ] && echo "stripDirs: Ranlib command is empty" 1>&2 && exit 1; 1605 + local pattern; 1606 + if [ -n "${stripExclude:-}" ]; then 1607 + for pattern in "${stripExclude[@]}"; 1608 + do 1609 + excludeFlags+=(-a '!' '(' -name "$pattern" -o -wholename "$prefix/$pattern" ')'); 1610 + done; 1611 + fi; 1612 + local p; 1613 + for p in ${paths}; 1614 + do 1615 + if [ -e "$prefix/$p" ]; then 1616 + pathsNew="${pathsNew} $prefix/$p"; 1617 + fi; 1618 + done; 1619 + paths=${pathsNew}; 1620 + if [ -n "${paths}" ]; then 1621 + echo "stripping (with command $cmd and flags $stripFlags) in $paths"; 1622 + local striperr; 1623 + striperr="$(mktemp --tmpdir="$TMPDIR" 'striperr.XXXXXX')"; 1624 + find $paths -type f "${excludeFlags[@]}" -a '!' -path "$prefix/lib/debug/*" -print0 | xargs -r -0 -n1 -- realpath -z | sort -u -z | xargs -r -0 -n1 -P "$NIX_BUILD_CORES" -- $cmd $stripFlags 2> "$striperr" || exit_code=$?; 1625 + [[ "$exit_code" = 123 || -z "$exit_code" ]] || ( cat "$striperr" 1>&2 && exit 1 ); 1626 + rm "$striperr"; 1627 + find $paths -name '*.a' -type f -exec $ranlibCmd '{}' \; 2> /dev/null; 1628 + fi 1629 + } 1630 + stripHash () 1631 + { 1632 + 1633 + local strippedName casematchOpt=0; 1634 + strippedName="$(basename -- "$1")"; 1635 + shopt -q nocasematch && casematchOpt=1; 1636 + shopt -u nocasematch; 1637 + if [[ "$strippedName" =~ ^[a-z0-9]{32}- ]]; then 1638 + echo "${strippedName:33}"; 1639 + else 1640 + echo "$strippedName"; 1641 + fi; 1642 + if (( casematchOpt )); then 1643 + shopt -s nocasematch; 1644 + fi 1645 + } 1646 + substitute () 1647 + { 1648 + 1649 + local input="$1"; 1650 + local output="$2"; 1651 + shift 2; 1652 + if [ ! -f "$input" ]; then 1653 + echo "substitute(): ERROR: file '$input' does not exist" 1>&2; 1654 + return 1; 1655 + fi; 1656 + local content; 1657 + consumeEntire content < "$input"; 1658 + if [ -e "$output" ]; then 1659 + chmod +w "$output"; 1660 + fi; 1661 + substituteStream content "file '$input'" "$@" > "$output" 1662 + } 1663 + substituteAll () 1664 + { 1665 + 1666 + local input="$1"; 1667 + local output="$2"; 1668 + local -a args=(); 1669 + _allFlags; 1670 + substitute "$input" "$output" "${args[@]}" 1671 + } 1672 + substituteAllInPlace () 1673 + { 1674 + 1675 + local fileName="$1"; 1676 + shift; 1677 + substituteAll "$fileName" "$fileName" "$@" 1678 + } 1679 + substituteAllStream () 1680 + { 1681 + 1682 + local -a args=(); 1683 + _allFlags; 1684 + substituteStream "$1" "$2" "${args[@]}" 1685 + } 1686 + substituteInPlace () 1687 + { 1688 + 1689 + local -a fileNames=(); 1690 + for arg in "$@"; 1691 + do 1692 + if [[ "$arg" = "--"* ]]; then 1693 + break; 1694 + fi; 1695 + fileNames+=("$arg"); 1696 + shift; 1697 + done; 1698 + for file in "${fileNames[@]}"; 1699 + do 1700 + substitute "$file" "$file" "$@"; 1701 + done 1702 + } 1703 + substituteStream () 1704 + { 1705 + 1706 + local var=$1; 1707 + local description=$2; 1708 + shift 2; 1709 + while (( "$#" )); do 1710 + case "$1" in 1711 + --replace) 1712 + pattern="$2"; 1713 + replacement="$3"; 1714 + shift 3; 1715 + local savedvar; 1716 + savedvar="${!var}"; 1717 + eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}'; 1718 + if [ "$pattern" != "$replacement" ]; then 1719 + if [ "${!var}" == "$savedvar" ]; then 1720 + echo "substituteStream(): WARNING: pattern '$pattern' doesn't match anything in $description" 1>&2; 1721 + fi; 1722 + fi 1723 + ;; 1724 + --subst-var) 1725 + local varName="$2"; 1726 + shift 2; 1727 + if ! [[ "$varName" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then 1728 + echo "substituteStream(): ERROR: substitution variables must be valid Bash names, \"$varName\" isn't." 1>&2; 1729 + return 1; 1730 + fi; 1731 + if [ -z ${!varName+x} ]; then 1732 + echo "substituteStream(): ERROR: variable \$$varName is unset" 1>&2; 1733 + return 1; 1734 + fi; 1735 + pattern="@$varName@"; 1736 + replacement="${!varName}"; 1737 + eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}' 1738 + ;; 1739 + --subst-var-by) 1740 + pattern="@$2@"; 1741 + replacement="$3"; 1742 + eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}'; 1743 + shift 3 1744 + ;; 1745 + *) 1746 + echo "substituteStream(): ERROR: Invalid command line argument: $1" 1>&2; 1747 + return 1 1748 + ;; 1749 + esac; 1750 + done; 1751 + printf "%s" "${!var}" 1752 + } 1753 + unpackFile () 1754 + { 1755 + 1756 + curSrc="$1"; 1757 + echo "unpacking source archive $curSrc"; 1758 + if ! runOneHook unpackCmd "$curSrc"; then 1759 + echo "do not know how to unpack source archive $curSrc"; 1760 + exit 1; 1761 + fi 1762 + } 1763 + unpackPhase () 1764 + { 1765 + 1766 + runHook preUnpack; 1767 + if [ -z "${srcs:-}" ]; then 1768 + if [ -z "${src:-}" ]; then 1769 + echo 'variable $src or $srcs should point to the source'; 1770 + exit 1; 1771 + fi; 1772 + srcs="$src"; 1773 + fi; 1774 + local -a srcsArray; 1775 + if [ -n "$__structuredAttrs" ]; then 1776 + srcsArray=("${srcs[@]}"); 1777 + else 1778 + srcsArray=($srcs); 1779 + fi; 1780 + local dirsBefore=""; 1781 + for i in *; 1782 + do 1783 + if [ -d "$i" ]; then 1784 + dirsBefore="$dirsBefore $i "; 1785 + fi; 1786 + done; 1787 + for i in "${srcsArray[@]}"; 1788 + do 1789 + unpackFile "$i"; 1790 + done; 1791 + : "${sourceRoot=}"; 1792 + if [ -n "${setSourceRoot:-}" ]; then 1793 + runOneHook setSourceRoot; 1794 + else 1795 + if [ -z "$sourceRoot" ]; then 1796 + for i in *; 1797 + do 1798 + if [ -d "$i" ]; then 1799 + case $dirsBefore in 1800 + *\ $i\ *) 1801 + 1802 + ;; 1803 + *) 1804 + if [ -n "$sourceRoot" ]; then 1805 + echo "unpacker produced multiple directories"; 1806 + exit 1; 1807 + fi; 1808 + sourceRoot="$i" 1809 + ;; 1810 + esac; 1811 + fi; 1812 + done; 1813 + fi; 1814 + fi; 1815 + if [ -z "$sourceRoot" ]; then 1816 + echo "unpacker appears to have produced no directories"; 1817 + exit 1; 1818 + fi; 1819 + echo "source root is $sourceRoot"; 1820 + if [ "${dontMakeSourcesWritable:-0}" != 1 ]; then 1821 + chmod -R u+w -- "$sourceRoot"; 1822 + fi; 1823 + runHook postUnpack 1824 + } 1825 + updateAutotoolsGnuConfigScriptsPhase () 1826 + { 1827 + 1828 + if [ -n "${dontUpdateAutotoolsGnuConfigScripts-}" ]; then 1829 + return; 1830 + fi; 1831 + for script in config.sub config.guess; 1832 + do 1833 + for f in $(find . -type f -name "$script"); 1834 + do 1835 + echo "Updating Autotools / GNU config script to a newer upstream version: $f"; 1836 + cp -f "/nix/store/7lk76vdawbx478qq9lvi3mgf73rvcyhd-gnu-config-2023-09-19/$script" "$f"; 1837 + done; 1838 + done 1839 + } 1840 + updateSourceDateEpoch () 1841 + { 1842 + 1843 + local path="$1"; 1844 + local -a res=($(find "$path" -type f -not -newer "$NIX_BUILD_TOP/.." -printf '%T@ %p\0' | sort -n --zero-terminated | tail -n1 --zero-terminated | head -c -1)); 1845 + local time="${res[0]//\.[0-9]*/}"; 1846 + local newestFile="${res[1]}"; 1847 + if [ "${time:-0}" -gt "$SOURCE_DATE_EPOCH" ]; then 1848 + echo "setting SOURCE_DATE_EPOCH to timestamp $time of file $newestFile"; 1849 + export SOURCE_DATE_EPOCH="$time"; 1850 + local now="$(date +%s)"; 1851 + if [ "$time" -gt $((now - 60)) ]; then 1852 + echo "warning: file $newestFile may be generated; SOURCE_DATE_EPOCH may be non-deterministic"; 1853 + fi; 1854 + fi 1855 + } 1856 + PATH="$PATH${nix_saved_PATH:+:$nix_saved_PATH}" 1857 + XDG_DATA_DIRS="$XDG_DATA_DIRS${nix_saved_XDG_DATA_DIRS:+:$nix_saved_XDG_DATA_DIRS}" 1858 + export NIX_BUILD_TOP="$(mktemp -d -t nix-shell.XXXXXX)" 1859 + export TMP="$NIX_BUILD_TOP" 1860 + export TMPDIR="$NIX_BUILD_TOP" 1861 + export TEMP="$NIX_BUILD_TOP" 1862 + export TEMPDIR="$NIX_BUILD_TOP" 1863 + eval "$shellHook"
+2
.envrc
··· 1 + export HE_PASSWORD=SuperDuper 2 + use flake
+4
.gitignore
··· 1 + .direnv/ 2 + .direnv/* 3 + .direnv/** 4 + .envrc
-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
··· 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
··· 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
··· 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
··· 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
··· 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
··· 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 - x86_64-linux
-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
··· 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
··· 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
··· 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
··· 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
··· 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
··· 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
··· 6 6 7 7 D("lakhwara.com", REG_NONE, 8 8 DnsProvider(DNS_HEDNS), 9 - DefaultTTL(86400), 9 + DefaultTTL(300), 10 10 //SOA('@', 'ns1.he.net.', 'hostmaster.he.net.', 2022041702, 86400, 7200, 3600000, 86400, TTL(172800)), 11 - A('anish', '103.16.130.98'), 12 - A('coaching', '103.16.130.98'), 11 + A('anish', '69.61.2.203'), 12 + A('@', '69.61.2.203'), 13 + //A('coaching', '103.16.130.98'), 13 14 TXT('anish', 'datkey=dat://1a240a14fab2bae9c85ebad29bddc04505aaba24e5fb809c2ccb4cdf71e3a7d5'), 14 15 CNAME('fm1._domainkey', 'fm1.lakhwara.com.dkim.fmhosted.com.'), 15 16 CNAME('fm2._domainkey', 'fm2.lakhwara.com.dkim.fmhosted.com.'), 16 17 CNAME('fm3._domainkey', 'fm3.lakhwara.com.dkim.fmhosted.com.'), 17 - A('@', '103.16.130.98'), 18 18 MX('@', 10, 'in1-smtp.messagingengine.com.'), 19 19 MX('@', 20, 'in2-smtp.messagingengine.com.'), 20 20 //NAMESERVER('ns1.he.net.'), ··· 39 39 A('git', '69.61.2.203', TTL(300)), 40 40 A('bin', '69.61.2.203', TTL(300)), 41 41 A('ci', '69.61.2.203', TTL(300)), 42 - // vultr -> nulled: lituus 42 + A('write', '69.61.2.203', TTL(300)), 43 + A('photos', '69.61.2.203', TTL(300)), 44 + // vultr: lituus 43 45 A('@', '45.77.48.108', TTL(300)), 44 46 A('jitsi', '45.77.48.108', TTL(300)), 45 47 A('chat', '45.77.48.108', TTL(300)),
dns/test_nullhex.sh
+63 -754
flake.lock
··· 6 6 "home-manager": "home-manager", 7 7 "nixpkgs": [ 8 8 "nixpkgs" 9 - ] 9 + ], 10 + "systems": "systems" 10 11 }, 11 12 "locked": { 12 - "lastModified": 1690228878, 13 - "narHash": "sha256-9Xe7JV0krp4RJC9W9W9WutZVlw6BlHTFMiUP/k48LQY=", 13 + "lastModified": 1723293904, 14 + "narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=", 14 15 "owner": "ryantm", 15 16 "repo": "agenix", 16 - "rev": "d8c973fd228949736dedf61b7f8cc1ece3236792", 17 + "rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41", 17 18 "type": "github" 18 19 }, 19 20 "original": { ··· 34 35 }, 35 36 "locked": { 36 37 "lastModified": 1682226636, 37 - "narHash": "sha256-f/XuEoZYh+aubCfjeduvwZjd5X7IgRYnmuuhGsdfP/U=", 38 + "narHash": "sha256-fmETHfUtQ5zOVr/4MT5wE7eNALCSQCnEUYZYmV3UEwg=", 38 39 "ref": "main", 39 40 "rev": "095d14ff2469c8f3de7cbf45d229c0f46a733aae", 40 41 "revCount": 77, ··· 47 48 "url": "ssh://gitea@git.sealight.xyz/aynish/basant" 48 49 } 49 50 }, 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 51 "darwin": { 85 52 "inputs": { 86 53 "nixpkgs": [ ··· 89 56 ] 90 57 }, 91 58 "locked": { 92 - "lastModified": 1673295039, 93 - "narHash": "sha256-AsdYgE8/GPwcelGgrntlijMg4t3hLFJFCRF3tL5WVjA=", 59 + "lastModified": 1700795494, 60 + "narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=", 94 61 "owner": "lnl7", 95 62 "repo": "nix-darwin", 96 - "rev": "87b9d090ad39b25b2400029c64825fc2a8868943", 63 + "rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d", 97 64 "type": "github" 98 65 }, 99 66 "original": { ··· 103 70 "type": "github" 104 71 } 105 72 }, 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 73 "deploy-rs": { 128 74 "inputs": { 129 75 "flake-compat": "flake-compat", ··· 133 79 "utils": "utils" 134 80 }, 135 81 "locked": { 136 - "lastModified": 1704875591, 137 - "narHash": "sha256-eWRLbqRcrILgztU/m/k7CYLzETKNbv0OsT2GjkaNm8A=", 82 + "lastModified": 1718194053, 83 + "narHash": "sha256-FaGrf7qwZ99ehPJCAwgvNY5sLCqQ3GDiE/6uLhxxwSY=", 138 84 "owner": "serokell", 139 85 "repo": "deploy-rs", 140 - "rev": "1776009f1f3fb2b5d236b84d9815f2edee463a9b", 86 + "rev": "3867348fa92bc892eba5d9ddb2d7a97b9e127a8a", 141 87 "type": "github" 142 88 }, 143 89 "original": { ··· 164 110 "dirt-samples-src": { 165 111 "flake": false, 166 112 "locked": { 167 - "lastModified": 1588278411, 168 - "narHash": "sha256-h8vQxRym6QzNLOTZU7A43VCHuG0H77l+BFwXnC0L1CE=", 113 + "lastModified": 1698439458, 114 + "narHash": "sha256-Mp8qBpsOvW9Zguv95Kv7EU6S3ICaF2aO02Wz6xGURtE=", 169 115 "owner": "tidalcycles", 170 116 "repo": "dirt-samples", 171 - "rev": "66d432418c9a7d82cf049d9246adfa62f46df2a6", 117 + "rev": "9a6dff8f9ec3cd55b287290cf04e01afa6b8f532", 172 118 "type": "github" 173 119 }, 174 120 "original": { 175 121 "owner": "tidalcycles", 176 - "ref": "master", 177 122 "repo": "dirt-samples", 178 123 "type": "github" 179 124 } ··· 185 130 ] 186 131 }, 187 132 "locked": { 188 - "lastModified": 1690739034, 189 - "narHash": "sha256-roW02IaiQ3gnEEDMCDWL5YyN+C4nBf/te6vfL7rG0jk=", 133 + "lastModified": 1724031427, 134 + "narHash": "sha256-o1HdAf+7IGv9M13R3c+zc/sJ0QgeEnhsvHBcodI4UpM=", 190 135 "owner": "nix-community", 191 136 "repo": "disko", 192 - "rev": "4015740375676402a2ee6adebc3c30ea625b9a94", 137 + "rev": "4e719b38fa7c85f4f65d0308ca7084c91e7bdd6d", 193 138 "type": "github" 194 139 }, 195 140 "original": { ··· 198 143 "type": "github" 199 144 } 200 145 }, 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 146 "flake-compat": { 245 147 "flake": false, 246 148 "locked": { ··· 273 175 "type": "github" 274 176 } 275 177 }, 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 178 "flake-utils": { 311 179 "locked": { 312 180 "lastModified": 1638122382, ··· 337 205 "type": "github" 338 206 } 339 207 }, 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 208 "grasp": { 435 209 "inputs": { 436 210 "flake-utils": "flake-utils_2", ··· 455 229 }, 456 230 "hardware": { 457 231 "locked": { 458 - "lastModified": 1691179816, 459 - "narHash": "sha256-WSMwqzU70ZMRHv1CUAfHEEKJuB0c9c9r0F+lJehXfSI=", 232 + "lastModified": 1723310128, 233 + "narHash": "sha256-IiH8jG6PpR4h9TxSGMYh+2/gQiJW9MwehFvheSb5rPc=", 460 234 "owner": "nixos", 461 235 "repo": "nixos-hardware", 462 - "rev": "87e3122b67587492a617764f88c71991893fcf8a", 236 + "rev": "c54cf53e022b0b3c1d3b8207aa0f9b194c24f0cf", 463 237 "type": "github" 464 238 }, 465 239 "original": { ··· 476 250 ] 477 251 }, 478 252 "locked": { 479 - "lastModified": 1682203081, 480 - "narHash": "sha256-kRL4ejWDhi0zph/FpebFYhzqlOBrk0Pl3dzGEKSAlEw=", 253 + "lastModified": 1703113217, 254 + "narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=", 481 255 "owner": "nix-community", 482 256 "repo": "home-manager", 483 - "rev": "32d3e39c491e2f91152c84f8ad8b003420eab0a1", 257 + "rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1", 484 258 "type": "github" 485 259 }, 486 260 "original": { ··· 496 270 ] 497 271 }, 498 272 "locked": { 499 - "lastModified": 1747556831, 500 - "narHash": "sha256-Qb84nbYFFk0DzFeqVoHltS2RodAYY5/HZQKE8WnBDsc=", 273 + "lastModified": 1751810233, 274 + "narHash": "sha256-kllkNbIqQi3VplgTMeGzuh1t8Gk8TauvkTRt93Km+tQ=", 501 275 "owner": "nix-community", 502 276 "repo": "home-manager", 503 - "rev": "d0bbd221482c2713cccb80220f3c9d16a6e20a33", 277 + "rev": "9b0873b46c9f9e4b7aa01eb634952c206af53068", 504 278 "type": "github" 505 279 }, 506 280 "original": { ··· 510 284 "type": "github" 511 285 } 512 286 }, 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 287 "nix-matrix-appservices": { 641 288 "inputs": { 642 289 "devshell": "devshell", 643 290 "flake-compat": "flake-compat_2", 644 291 "nixlib": "nixlib", 645 - "nixpkgs": "nixpkgs_3" 292 + "nixpkgs": "nixpkgs" 646 293 }, 647 294 "locked": { 648 295 "lastModified": 1683490239, ··· 675 322 }, 676 323 "nixos-hardware": { 677 324 "locked": { 678 - "lastModified": 1691179816, 679 - "narHash": "sha256-WSMwqzU70ZMRHv1CUAfHEEKJuB0c9c9r0F+lJehXfSI=", 325 + "lastModified": 1723310128, 326 + "narHash": "sha256-IiH8jG6PpR4h9TxSGMYh+2/gQiJW9MwehFvheSb5rPc=", 680 327 "owner": "NixOS", 681 328 "repo": "nixos-hardware", 682 - "rev": "87e3122b67587492a617764f88c71991893fcf8a", 329 + "rev": "c54cf53e022b0b3c1d3b8207aa0f9b194c24f0cf", 683 330 "type": "github" 684 331 }, 685 332 "original": { ··· 691 338 }, 692 339 "nixpkgs": { 693 340 "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 341 "lastModified": 1662099760, 758 342 "narHash": "sha256-MdZLCTJPeHi/9fg6R9fiunyDwP3XHJqDd51zWWz9px0=", 759 343 "owner": "NixOS", ··· 768 352 "type": "github" 769 353 } 770 354 }, 771 - "nixpkgs_4": { 355 + "nixpkgs_2": { 772 356 "locked": { 773 - "lastModified": 1747610100, 774 - "narHash": "sha256-rpR5ZPMkWzcnCcYYo3lScqfuzEw5Uyfh+R0EKZfroAc=", 357 + "lastModified": 1755274400, 358 + "narHash": "sha256-rTInmnp/xYrfcMZyFMH3kc8oko5zYfxsowaLv1LVobY=", 775 359 "owner": "nixos", 776 360 "repo": "nixpkgs", 777 - "rev": "ca49c4304acf0973078db0a9d200fd2bae75676d", 361 + "rev": "ad7196ae55c295f53a7d1ec39e4a06d922f3b899", 778 362 "type": "github" 779 363 }, 780 364 "original": { ··· 784 368 "type": "github" 785 369 } 786 370 }, 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 371 "nur": { 852 372 "locked": { 853 - "lastModified": 1691214006, 854 - "narHash": "sha256-kdfBd+Y0DTOOdgSA6h6iIn403xVj4bzLnXqb7+yM6lQ=", 373 + "lastModified": 1724040334, 374 + "narHash": "sha256-Ia4gRRmhFn4oJ4SJKJPDNPomsRRFWU+bqCK7yuiLW4E=", 855 375 "owner": "nix-community", 856 376 "repo": "NUR", 857 - "rev": "963ad2d1bb0a8f59b2c23ab521d4dff2148aad16", 377 + "rev": "24471a48600e18669d13d24c9640b9859357d2cf", 858 378 "type": "github" 859 379 }, 860 380 "original": { ··· 863 383 "type": "github" 864 384 } 865 385 }, 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 386 "poonam": { 889 387 "inputs": { 890 388 "nixpkgs": [ ··· 892 390 ] 893 391 }, 894 392 "locked": { 895 - "lastModified": 1724637654, 896 - "narHash": "sha256-YXmWxUEG3NDsLn46Ctrgn7YcT/h0fsCAxKcSgIhCSLo=", 393 + "lastModified": 1756350023, 394 + "narHash": "sha256-4S6EUvEFvOnwjSo/LqAVVuX2/JjAJ8gQFmQQ0DS4oXU=", 897 395 "ref": "main", 898 - "rev": "521e360df123a530fc4c99187e3580bd5d086a9d", 899 - "revCount": 1467, 396 + "rev": "a807111f9b20c501183516baf8082c4359aaaaa1", 397 + "revCount": 1594, 900 398 "type": "git", 901 399 "url": "ssh://gitea@git.sealight.xyz/aynish/kitaab" 902 400 }, ··· 906 404 "url": "ssh://gitea@git.sealight.xyz/aynish/kitaab" 907 405 } 908 406 }, 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 407 "root": { 932 408 "inputs": { 933 409 "agenix": "agenix", 934 410 "basant": "basant", 935 - "darwin": "darwin_2", 936 411 "deploy-rs": "deploy-rs", 937 412 "disko": "disko", 938 413 "grasp": "grasp", 939 414 "hardware": "hardware", 940 415 "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 416 "nix-matrix-appservices": "nix-matrix-appservices", 946 417 "nixos-hardware": "nixos-hardware", 947 - "nixpkgs": "nixpkgs_4", 418 + "nixpkgs": "nixpkgs_2", 948 419 "nur": "nur", 949 420 "poonam": "poonam", 950 421 "rust-overlay": "rust-overlay", 951 - "sg-nvim": "sg-nvim", 952 - "sourcegraph-src-cli-cask": "sourcegraph-src-cli-cask", 953 422 "tidalcycles": "tidalcycles", 954 423 "unstable": "unstable", 955 424 "vimwikicli": "vimwikicli" ··· 957 426 }, 958 427 "rust-overlay": { 959 428 "inputs": { 960 - "flake-utils": "flake-utils_4", 961 429 "nixpkgs": [ 962 430 "nixpkgs" 963 431 ] 964 432 }, 965 433 "locked": { 966 - "lastModified": 1691201768, 967 - "narHash": "sha256-h+QJMpawZoK1+8efF6UjQoY1EHZfHteXVa5OYnlqRWA=", 434 + "lastModified": 1724034091, 435 + "narHash": "sha256-b1g7w0sw+MDAhUAeCoX1vlTghsqcDZkxr+k9OZmxPa8=", 968 436 "owner": "oxalica", 969 437 "repo": "rust-overlay", 970 - "rev": "18ee2a71de24273e4ad4503b5604532f0b53f382", 438 + "rev": "c7d36e0947826e0751a5214ffe82533fbc909bc0", 971 439 "type": "github" 972 440 }, 973 441 "original": { ··· 976 444 "type": "github" 977 445 } 978 446 }, 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 447 "superdirt-src": { 1053 448 "flake": false, 1054 449 "locked": { 1055 - "lastModified": 1611740180, 1056 - "narHash": "sha256-GtnqZeMFqFkVhgx2Exu0wY687cHa7mNnVCgjQd6fiIA=", 450 + "lastModified": 1697377840, 451 + "narHash": "sha256-9qU9CHYAXbN1IE3xXDqGipuroifVaSVXj3c/cDfwM80=", 1057 452 "owner": "musikinformatik", 1058 453 "repo": "superdirt", 1059 - "rev": "7abb62e89649daa1232b9cbd6427241868abd30e", 454 + "rev": "c7f32998572984705d340e7c1b9ed9ad998a39b6", 1060 455 "type": "github" 1061 456 }, 1062 457 "original": { 1063 458 "owner": "musikinformatik", 1064 - "ref": "master", 1065 459 "repo": "superdirt", 1066 460 "type": "github" 1067 461 } ··· 1096 490 "type": "github" 1097 491 } 1098 492 }, 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 493 "tidal-src": { 1145 494 "flake": false, 1146 495 "locked": { 1147 - "lastModified": 1654350756, 1148 - "narHash": "sha256-tONM5SYYBca0orTLH1EUOilSC1FCluWrFt8AetUx+YQ=", 496 + "lastModified": 1712519522, 497 + "narHash": "sha256-LbvxQmVxHElidCgvt+w0g1k+QQbNLebK46vtRCgsLeQ=", 1149 498 "owner": "tidalcycles", 1150 499 "repo": "tidal", 1151 - "rev": "fda9c1ecb3722698935245e5409ef8ccdfca16c8", 500 + "rev": "88f09edf6bef2228d5f530dea872b08a9d803066", 1152 501 "type": "github" 1153 502 }, 1154 503 "original": { 1155 504 "owner": "tidalcycles", 1156 - "ref": "main", 505 + "ref": "v1.9.5", 1157 506 "repo": "tidal", 1158 507 "type": "github" 1159 508 } ··· 1166 515 ], 1167 516 "superdirt-src": "superdirt-src", 1168 517 "tidal-src": "tidal-src", 1169 - "utils": "utils_2", 1170 518 "vim-tidal-src": "vim-tidal-src", 1171 519 "vowel-src": "vowel-src" 1172 520 }, 1173 521 "locked": { 1174 - "lastModified": 1664760044, 1175 - "narHash": "sha256-e5LGk/tDnphory1mYhADgPnVtShofY2w/3xY09jEE2A=", 522 + "lastModified": 1723223284, 523 + "narHash": "sha256-NAT+g5nsaJZkpR0sCZjerd1xx233ZUdRH3ZWwZhzq/c=", 1176 524 "owner": "mitchmindtree", 1177 525 "repo": "tidalcycles.nix", 1178 - "rev": "3f3a820cd43709077d15a24fa6062de7d623a6bf", 526 + "rev": "82f3e8e8d02eb9f0c9dfe9ab3773b825c6bc1982", 1179 527 "type": "github" 1180 528 }, 1181 529 "original": { ··· 1184 532 "type": "github" 1185 533 } 1186 534 }, 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 535 "unstable": { 1210 536 "locked": { 1211 - "lastModified": 1747542820, 1212 - "narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", 537 + "lastModified": 1752687322, 538 + "narHash": "sha256-RKwfXA4OZROjBTQAl9WOZQFm7L8Bo93FQwSJpAiSRvo=", 1213 539 "owner": "nixos", 1214 540 "repo": "nixpkgs", 1215 - "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", 541 + "rev": "6e987485eb2c77e5dcc5af4e3c70843711ef9251", 1216 542 "type": "github" 1217 543 }, 1218 544 "original": { ··· 1224 550 }, 1225 551 "utils": { 1226 552 "inputs": { 1227 - "systems": "systems" 553 + "systems": "systems_2" 1228 554 }, 1229 555 "locked": { 1230 556 "lastModified": 1701680307, ··· 1240 566 "type": "github" 1241 567 } 1242 568 }, 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 569 "vim-tidal-src": { 1259 570 "flake": false, 1260 571 "locked": { 1261 - "lastModified": 1664252474, 1262 - "narHash": "sha256-hleiK2Q7xYndpB+tIbyyXIM2sk4NunUh9DPgMqmf/Wc=", 572 + "lastModified": 1685703852, 573 + "narHash": "sha256-8gyk17YLeKpLpz3LRtxiwbpsIbZka9bb63nK5/9IUoA=", 1263 574 "owner": "tidalcycles", 1264 575 "repo": "vim-tidal", 1265 - "rev": "b07f5c12986fb837e055d7fcf0acf3b7e248148f", 576 + "rev": "e440fe5bdfe07f805e21e6872099685d38e8b761", 1266 577 "type": "github" 1267 578 }, 1268 579 "original": { 1269 580 "owner": "tidalcycles", 1270 - "ref": "master", 1271 581 "repo": "vim-tidal", 1272 582 "type": "github" 1273 583 } ··· 1305 615 }, 1306 616 "original": { 1307 617 "owner": "supercollider-quarks", 1308 - "ref": "master", 1309 618 "repo": "vowel", 1310 619 "type": "github" 1311 620 }
+76 -176
flake.nix
··· 1 1 { 2 - description = "Your new nix config"; 2 + description = "Sealight NixOS Config"; 3 3 4 4 inputs = { 5 5 # Nixpkgs 6 6 nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; 7 7 unstable.url = "github:nixos/nixpkgs/nixos-unstable"; 8 8 nixos-hardware.url = "github:NixOS/nixos-hardware/master"; 9 + 10 + # ngipkgs.url = "github:Chickensoupwithrice/ngipkgs?ref=aynish/atomic-server-module"; 11 + # ngipkgs-local.url = "path:/home/anish/usr/ngipkgs"; 9 12 10 13 # Home manager 11 14 home-manager.url = "github:nix-community/home-manager/release-25.05"; ··· 24 27 poonam.url = "git+ssh://gitea@git.sealight.xyz/aynish/kitaab?ref=main"; 25 28 poonam.inputs.nixpkgs.follows = "nixpkgs"; 26 29 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"; 30 + vimwikicli.url = 31 + "git+ssh://gitea@git.sealight.xyz/aynish/vimwiki-cli?ref=main"; 28 32 basant.inputs.nixpkgs.follows = "nixpkgs"; 29 33 basant.inputs.poonam.follows = "poonam"; 30 34 vimwikicli.inputs.nixpkgs.follows = "nixpkgs"; ··· 34 38 # Matrix 35 39 nix-matrix-appservices.url = "gitlab:coffeetables/nix-matrix-appservices"; 36 40 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 41 # Others 66 42 nur.url = "github:nix-community/NUR"; 67 43 rust-overlay = { ··· 79 55 # muneem.inputs.nixpkgs.follows = "nixpkgs"; 80 56 }; 81 57 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: 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: 107 61 let 108 62 forAllSystems = nixpkgs.lib.genAttrs [ 109 63 "aarch64-linux" ··· 116 70 # We already have these in scope 117 71 unstable = unstable.legacyPackages.${prev.system}; 118 72 deploy = deploy-rs.packages.${prev.system}.deploy-rs; 119 - sg-nvim = sg-nvim.packages.${prev.system}.default; 120 73 }; 121 74 vimwikiOverlay = final: prev: { 122 75 vimwiki-cli = vimwikicli.packages.${prev.system}.vimwiki-cli; 123 76 }; 124 77 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 - }); 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 + }); 160 105 161 106 # 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 - { 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 177 124 packages = forAllSystems (system: 178 125 let pkgs = nixpkgsFor.${system}; 179 - in import ./pkgs { pkgs = pkgs; } 180 - ); 181 - 126 + in import ./pkgs { pkgs = pkgs; }); 182 127 # Devshell for bootstrapping 183 128 # Acessible through 'nix develop' or 'nix-shell' (legacy) 184 129 devShells = forAllSystems (system: 185 130 let pkgs = nixpkgsFor.${system}; 186 - in import ./shell.nix { pkgs = pkgs; } 187 - ); 131 + in import ./shell.nix { pkgs = pkgs; }); 188 132 189 133 # Your custom packages and modifications, exported as overlays 190 134 overlays = import ./overlays; ··· 195 139 # These are usually stuff you would upstream into home-manager 196 140 homeManagerModules = import ./modules/home-manager; 197 141 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 142 # NixOS configuration entrypoint 233 143 nixosConfigurations = { 234 144 curve = nixpkgs.lib.nixosSystem rec { ··· 240 150 agenix.nixosModules.age 241 151 self.nixosModules.backup 242 152 self.nixosModules.wireguard 153 + self.nixosModules.wallabag 243 154 nixos-hardware.nixosModules.lenovo-thinkpad-x270 244 155 home-manager.nixosModules.home-manager 245 156 { ··· 261 172 agenix.nixosModules.age 262 173 self.nixosModules.backup 263 174 self.nixosModules.wireguard 175 + basant.nixosModule 264 176 # self.nixosModules.microbin 265 177 disko.nixosModules.disko 178 + { 179 + nixpkgs.flake.setNixPath = false; 180 + nixpkgs.flake.setFlakeRegistry = false; 181 + } 266 182 ]; 267 183 }; 268 184 ··· 285 201 ]; 286 202 }; 287 203 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 204 box = nixpkgs.lib.nixosSystem rec { 302 205 specialArgs = { inherit inputs self; }; 303 206 system = "x86_64-linux"; ··· 308 211 self.nixosModules.backup 309 212 self.nixosModules.wireguard 310 213 self.nixosModules.gonic 214 + self.nixosModules.gpodder2go 311 215 self.nixosModules.wallabag 312 216 self.nixosModules.ulogger-server 313 217 grasp.nixosModule ··· 316 220 nix.registry.nixpkgs.flake = nixpkgs; 317 221 home-manager.useGlobalPkgs = true; 318 222 home-manager.useUserPackages = true; 319 - home-manager.users.anish = import ./home/core; 223 + home-manager.users.anish = import ./home/dev; 320 224 } 321 225 ]; 322 226 }; ··· 326 230 # Available through 'home-manager --flake .#your-username@your-hostname' 327 231 homeConfigurations = { 328 232 "anish@work" = home-manager.lib.homeManagerConfiguration { 329 - pkgs = nixpkgsFor."x86_64-linux"; # Home-manager requires 'pkgs' instance 233 + pkgs = 234 + nixpkgsFor."x86_64-linux"; # Home-manager requires 'pkgs' instance 330 235 extraSpecialArgs = { inherit inputs; }; 331 - modules = [ 332 - ./home/core.nix 333 - ./home/profiles/firefox 334 - ]; 236 + modules = [ ./home/core.nix ./home/profiles/firefox ]; 335 237 }; 336 238 }; 337 239 ··· 340 242 hostname = "mossnet.lan"; 341 243 autoRollback = false; 342 244 magicRollback = false; 245 + remoteBuild = true; 343 246 profiles.system = { 344 247 user = "root"; 345 - path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.box; 248 + path = deploy-rs.lib.x86_64-linux.activate.nixos 249 + self.nixosConfigurations.box; 346 250 }; 347 251 }; 348 252 lituus = { 349 253 hostname = "sealight.xyz"; 350 - # autoRollback = false; 254 + autoRollback = false; 351 255 profiles.system = { 352 256 user = "root"; 353 - path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.lituus; 257 + path = deploy-rs.lib.x86_64-linux.activate.nixos 258 + self.nixosConfigurations.lituus; 354 259 }; 355 260 }; 356 261 helix = { ··· 359 264 magicRollback = false; 360 265 profiles.system = { 361 266 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; 267 + path = deploy-rs.lib.x86_64-linux.activate.nixos 268 + self.nixosConfigurations.helix; 370 269 }; 371 270 }; 372 271 }; 373 272 374 - checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib; 273 + # checks = builtins.mapAttrs 274 + # (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib; 375 275 }; 376 276 }
+1 -2
home/core/default.nix
··· 1 1 { self, pkgs, ... }: 2 2 { 3 3 imports = [ 4 - # ../profiles/nvim 5 4 ../profiles/cli 6 5 ../profiles/direnv 7 6 ../profiles/git 8 - ../profiles/task 7 + ../profiles/tmux 9 8 ]; 10 9 home.stateVersion = "22.05"; 11 10 }
-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
··· 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
··· 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
··· 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
··· 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
··· 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
··· 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
··· 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
··· 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
··· 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
··· 1 - sketchybar -m --add item vpn right \ 2 - --set vpn icon=๏’œ \ 3 - update_freq=5 \ 4 - script="~/.config/sketchybar/plugins/vpn.sh"
-3
home/darwin/sketchybar/plugins/calendar.sh
··· 1 - #!/usr/bin/env bash 2 - 3 - sketchybar --set "$NAME" icon="๓ฐธ— " label="$(date '+%a %d. %b')"
-4
home/darwin/sketchybar/plugins/clock.sh
··· 1 - #!/usr/bin/env bash 2 - 3 - LABEL=$(date '+%H:%M') 4 - sketchybar --set "$NAME" icon="๏€— " label="$LABEL"
-3
home/darwin/sketchybar/plugins/cpu.sh
··· 1 - #!/usr/bin/env bash 2 - 3 - sketchybar --set "$NAME" icon="๏‹›" label="$(ps -A -o %cpu | awk '{s+=$1} END {s /= 8} END {printf "%.1f%%\n", s}')"
-7
home/darwin/sketchybar/plugins/front_app.sh
··· 1 - #!/usr/bin/env bash 2 - 3 - case "$SENDER" in 4 - "front_app_switched") 5 - sketchybar --set "$NAME" label="$INFO" 6 - ;; 7 - esac
-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
··· 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
··· 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
··· 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
··· 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
··· 1 - ### You need to edit sudoers file to run wg-quick without password 2 - 3 - # %admin ALL = (ALL) NOPASSWD: /nix/store/s2qw0sxax8pckbzmyw6wrarahmx65bq9-wireguard-tools-1.0.20210914/bin/wg-quick 4 - 5 - sudo wg-quick down wg0
-5
home/darwin/sketchybar/plugins/wg_on.sh
··· 1 - ### You need to edit sudoers file to run wg-quick without password 2 - 3 - # %admin ALL = (ALL) NOPASSWD: /nix/store/s2qw0sxax8pckbzmyw6wrarahmx65bq9-wireguard-tools-1.0.20210914/bin/wg-quick 4 - 5 - sudo wg-quick up wg0
-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
··· 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
··· 1 + { self, pkgs, ... }: { 2 + imports = 3 + [ ../profiles/cli ../profiles/nvim ../profiles/direnv ../profiles/git ]; 4 + home.stateVersion = "22.05"; 5 + }
+20 -1
home/gui/default.nix
··· 2 2 { 3 3 imports = [ 4 4 ../core 5 + ../profiles/nvim 5 6 ../profiles/firefox 6 7 ../profiles/desktop 7 8 ../profiles/email 8 9 ../profiles/cal 9 10 ../profiles/sync/kitaab 10 11 ../profiles/ssh 11 - ../profiles/kitty 12 + ../profiles/task 12 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 + }; 13 32 }
+49 -34
home/profiles/cli/default.nix
··· 1 1 { lib, pkgs, config, ... }: 2 2 { 3 3 home.packages = with pkgs; [ 4 - #unstable.claude-code 5 4 binutils 6 - # coreutils 5 + coreutils 7 6 dnsutils 8 7 dasht 9 8 dosfstools 10 - # git 9 + #git 11 10 git-machete 12 - asciinema 13 11 bottom 14 12 gptfdisk 15 13 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 14 + iputils 15 + jq 28 16 manix 29 17 moreutils 30 18 nix-index 19 + cached-nix-shell 31 20 nmap 32 21 ripgrep 33 22 skim 34 23 tealdeer 24 + usbutils 25 + utillinux 26 + whois 35 27 iftop 36 28 wget 37 29 curl 38 - eza 30 + eza 39 31 bat 40 32 fd 41 - # ncdu 33 + ncdu 34 + du-dust 35 + # dia-cli 42 36 duf 43 37 trash-cli 44 38 nix-index 45 39 silver-searcher 46 40 tcpdump 41 + mtr 47 42 file 48 43 lsof 49 44 atool 45 + strace 50 46 zip 51 47 unzip 52 48 rsync ··· 55 51 glow 56 52 pass 57 53 less 54 + gdb 58 55 xxd 59 - taskwarrior 56 + taskwarrior2 60 57 gnupg 61 58 syncthing 62 59 dijo 63 - # ssb-patchwork 60 + #ssb-patchwork 61 + fontconfig 64 62 pandoc 65 63 taskwarrior-tui 64 + # vimwiki-cli 66 65 zk 67 - diffnav 68 - jujutsu 69 - git-spice 70 - 71 - # llms (needs 24.11) 72 - aider-chat 73 66 74 67 (pkgs.writeScriptBin "jq-repl" '' 75 68 #!/usr/bin/env bash ··· 99 92 manix "" | grep '^# ' | sed 's/^# \(.*\) (.*/\1/;s/ (.*//;s/^# //' | fzf --preview="manix '{}'" | xargs manix 100 93 '') 101 94 (pkgs.writeScriptBin "monitor" '' 102 - # hotplug 103 95 connect() { 104 96 # Turn it on if it was off 105 97 xrandr --output HDMI-2 --auto 106 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 107 122 } 108 123 109 124 disconnect() { ··· 212 227 enableZshIntegration = true; 213 228 }; 214 229 215 - # Only available on Linux 216 - # services.kdeconnect.enable = true; 230 + services.kdeconnect.enable = true; 217 231 218 232 home.shellAliases = { 219 233 # quick cd ··· 228 242 229 243 # modern cli tools 230 244 ls = "eza --icons"; 231 - l = "eza -l --icons"; 245 + l = "esa -l --icons"; 232 246 la = "eza -la --icons"; 233 247 tree = "ls --tree --icons"; 234 248 cat = "bat"; ··· 240 254 make-secret = "< /dev/urandom \\tr -dc _A-Za-z0-9 | head -c \${1:-32};echo;"; 241 255 242 256 # task warrior 243 - # TODO: make blocked a context? 244 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 245 262 tt = "taskwarrior-tui -r list"; 246 263 ti = "task +idea"; 247 264 tb = "task +backlog list"; 248 265 ttb = "taskwarrior-tui -r backlog"; 249 266 tr = "task newest limit:page"; 250 - tw = "task +wait"; 267 + twait = "task +wait"; 251 268 ta = "task add"; 252 269 tai = "task add +idea"; 253 270 tn = "task-note"; ··· 263 280 264 281 # git 265 282 g = "git"; 266 - gl = "git log --pretty=oneline --abbrev-commit"; 267 283 268 284 # grep 269 285 grep = "rg"; ··· 284 300 srch = "ns nixpkgs"; 285 301 orch = "ns override"; 286 302 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 303 nrt = "cd /tmp; sudo nixos-rebuild test --flake '/home/anish/usr/helm#curve'; cd $OLDPWD"; 289 304 ned = "cd /home/anish/usr/helm; vim; cd $OLDPWD"; 290 305 ncd = "cd /home/anish/usr/helm";
home/profiles/desktop/Xresources
+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
··· 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
··· 29 29 bspc config split_ratio 0.71 30 30 31 31 # Extra padding for polybar 32 - bspc config -m primary top_padding 34 33 - bspc config -m primary bottom_padding 0 32 + bspc config top_padding 34 33 + bspc config bottom_padding 0 34 34 35 35 # Rules 36 36 bspc rule -r '*'
+8 -7
home/profiles/desktop/default.nix
··· 22 22 paper-icon-theme 23 23 papirus-icon-theme 24 24 libsForQt5.qtstyleplugin-kvantum 25 - qt5ct 25 + libsForQt5.qt5ct 26 26 gtk-engine-murrine 27 27 gtk_engines 28 28 maim 29 + kitty 29 30 libreoffice 30 31 inotify-tools 31 32 offpunk 32 33 termpdfpy 33 - libsForQt5.kontact 34 + # libsForQt5.kontact 34 35 thunderbird 36 + libsecret # For secret-tool to manage keyring 35 37 ]; 36 38 37 39 # GTK4 color scheme? ··· 65 67 recursive = true; 66 68 }; 67 69 ".config/dunst/dunstrc".source = ./dunstrc; 70 + ".config/kitty/kitty.conf".source = ./kitty.conf; 71 + ".config/kitty/ayu.conf".source = ./ayu-kitty.conf; 68 72 ".config/zathura/zathurarc".source = ./zathurarc; 69 73 ".background-image".source = ./background.jpg; 70 74 #gtk4 theme 71 75 ".config/gtk-4.0/settings.ini".text = '' 72 76 [Settings] 73 - gtk-application-prefer-dark-theme=1 77 + gtk-application-prefer-dark-theme=true 74 78 ''; 75 79 # gtk3 theme 76 80 ".config/gtk-3.0/settings.ini".text = '' ··· 99 103 ".local/bin/mpv-ify".source = ./bin/mpv-ify; 100 104 ".local/bin/bspswallow".source = ./bin/bspswallow; 101 105 ".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 106 # ".local/bin/hotplug-monitor.sh".source = ./bin/hotplug-monitor.sh; 106 107 }; 107 108 ··· 123 124 124 125 qt = { 125 126 enable = true; 126 - platformTheme = "gtk"; 127 + platformTheme.name = "gtk"; 127 128 style = { name = "qt5ct-style"; }; 128 129 }; 129 130
+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
+1 -1
home/profiles/email/default.nix
··· 175 175 bind editor ^T complete 176 176 177 177 # Press A to archive 178 - macro index,pager A "<clear-flag>N<save-message>=/Archive" "mark message as Archived" 178 + macro index,pager A "<clear-flag><save-message>=/Archive" "mark message as Archived" 179 179 # Press C to add contact to Khard address book 180 180 macro index,pager C \ 181 181 "<pipe-message>khard add-email<return>" \
+2 -2
home/profiles/firefox/default.nix
··· 18 18 isDefault = true; 19 19 name = "anish"; 20 20 userChrome = (builtins.readFile ./userChrome.css); 21 - extensions = with pkgs.nur.repos.rycee.firefox-addons; [ 21 + extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [ 22 22 # Find extensions: https://github.com/nix-community/nur-combined/blob/master/repos/rycee/pkgs/firefox-addons/generated-firefox-addons.nix 23 23 ublock-origin 24 - wallabagger 24 + # wallabagger 25 25 # tree-style-tab 26 26 tridactyl 27 27 promnesia
+135 -38
home/profiles/firefox/userChrome.css
··· 8 8 /*** NAV BAR ***/ 9 9 /* Hide urlbar */ 10 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; 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; 18 34 } 19 35 20 36 /* But unfocus it when we invoke it with ctrl+L */ ··· 37 53 height: 28px !important; 38 54 } 39 55 40 - /* hides the sidebar header */ 56 + /* hides the sidebar header 41 57 #sidebar-header { 42 58 display: none !important; 43 59 } 60 + */ 44 61 45 62 .tab[selected="true"] { 46 63 visibility: collapse; ··· 53 70 .tabbrowser-tab[visuallyselected="true"] { 54 71 visibility: collapse; 55 72 } 56 - 57 - /* Credits to https://github.com/MrOtherGuy for hthe following snippet*/ 58 - 59 73 /* Source file https://github.com/MrOtherGuy/firefox-csshacks/tree/master/chrome/autohide_sidebar.css made available under Mozilla Public License v. 2.0 60 74 See the above repository for updates as well as full license text. */ 61 75 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 */ 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 + */ 64 82 65 - #sidebar-box{ 66 - --uc-sidebar-width: 44px; /* Only thing I (gale) changed */ 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; 67 92 --uc-sidebar-hover-width: 210px; 93 + } 94 + #main-window[sizemode="fullscreen"] #browser{ 95 + --uc-sidebar-width: 1px; 96 + } 97 + #sidebar-box{ 68 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; 69 102 position: relative; 70 103 min-width: var(--uc-sidebar-width) !important; 71 104 width: var(--uc-sidebar-width) !important; 72 105 max-width: var(--uc-sidebar-width) !important; 73 - z-index:1; 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; 74 116 } 117 + #main-window[sizemode="fullscreen"] #browser{ --uc-sidebar-width: 1px; } 75 118 76 - #sidebar-box[positionend]{ direction: rtl } 77 - #sidebar-box[positionend] > *{ direction: ltr } 119 + #sidebar-splitter{ display: none } 78 120 79 - #sidebar-box[positionend]:-moz-locale-dir(rtl){ direction: ltr } 80 - #sidebar-box[positionend]:-moz-locale-dir(rtl) > *{ direction: rtl } 121 + #sidebar-header{ 122 + overflow: hidden; 123 + color: var(--chrome-color, inherit) !important; 124 + padding-inline: 0 !important; 125 + } 81 126 82 - #main-window[sizemode="fullscreen"] #sidebar-box{ --uc-sidebar-width: 1px; } 127 + #sidebar-header::before, 128 + #sidebar-header::after{ 129 + content: ""; 130 + display: flex; 131 + padding-left: 8px; 132 + } 83 133 84 - #sidebar-splitter{ display: none } 85 - 86 - #sidebar-header{ overflow: hidden; /*color: var(--chrome-color, inherit) !important*/} 87 - 134 + #sidebar-header, 88 135 #sidebar{ 89 - transition: min-width 115ms linear var(--uc-autohide-sidebar-delay) !important; 136 + transition: min-width var(--uc-autohide-transition-duration) var(--uc-autohide-transition-type) var(--uc-autohide-sidebar-delay) !important; 90 137 min-width: var(--uc-sidebar-width) !important; 91 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; 92 149 } 93 150 94 - #sidebar-box:hover > #sidebar{ min-width: var(--uc-sidebar-hover-width) !important; transition-delay: 0ms !important } 95 - 96 151 .sidebar-panel{ 97 - /*background-color: transparent !important; 98 - color: var(--newtab-text-primary-color) !important;*/ 152 + background-color: transparent !important; 153 + color: var(--newtab-text-primary-color) !important; 99 154 } 100 155 101 156 .sidebar-panel #search-box{ 102 157 -moz-appearance: none !important; 103 - /*background-color: rgba(249,249,250,0.1) !important; 158 + background-color: rgba(249,249,250,0.1) !important; 104 159 color: inherit !important; 105 - */ 106 160 } 107 161 108 162 /* Add sidebar divider and give it background */ 109 163 110 164 #sidebar, 111 165 #sidebar-header{ 112 - /*background-color: inherit !important;*/ 166 + background-color: inherit !important; 113 167 border-inline: 1px solid rgb(80,80,80); 114 168 border-inline-width: 0px 1px; 115 169 } 116 170 117 - #sidebar-box:not([positionend]) > :-moz-locale-dir(rtl), 118 - #sidebar-box[positionend] > *{ 171 + #sidebar-box:not([positionend],[sidebar-positionend]) > :-moz-locale-dir(rtl), 172 + #sidebar-box:is([positionend],[sidebar-positionend]) > *{ 119 173 border-inline-width: 1px 0px; 120 174 } 121 - 175 + @media -moz-pref("sidebar.revamp") { 176 + #sidebar, #sidebar-header{ border-style: none } 177 + #sidebar-box{ padding: 0 !important; } 178 + } 122 179 /* Move statuspanel to the other side when sidebar is hovered so it doesn't get covered by sidebar */ 123 180 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; } 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
··· 15 15 default = current 16 16 [pull] 17 17 rebase = true 18 - [merge] 19 - mergetool = nvim -d 20 - conflictstyle = diff3 21 18 [alias] 22 19 unadd = reset HEAD 23 20 # data analysis ··· 26 23 email-domains = !git log --format="%aE" | awk -F'@' '{print $2}' | sort -u 27 24 # pretty log 28 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 29 - undo = !git reset HEAD~1 --mixed 30 - blm = blame -w -C -C -C 31 26 [filter "lfs"] 32 27 required = true 33 28 smudge = git-lfs smudge -- %f 34 29 process = git-lfs filter-process 35 30 clean = git-lfs clean -- %f 36 - [url "git@github.com:"] 37 - insteadOf = https://github.com/ 38 31 [url "https://github.com/"] 39 32 insteadOf = gh: 40 33 [url "git@github.com:"]
+1 -7
home/profiles/git/default.nix
··· 12 12 userName = "Anish Lakhwara"; 13 13 userEmail = "anish+git@lakhwara.com"; 14 14 delta.enable = true; 15 - signing = { 16 - signByDefault = true; 17 - key = "7FC5DF072EF7B716"; 18 - }; 15 + # TODO enable signing 19 16 20 17 ignores = [ 21 18 "*~" ··· 59 56 pull.rebase = false; 60 57 push.autoSetupRemote = true; 61 58 init.defaultBranch = "main"; 62 - "url \"git@github.com:\"" = { insteadOf = "https://github.com/"; }; 63 59 }; 64 60 65 61 aliases = { ··· 98 94 99 95 # delete merged branches 100 96 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 97 }; 104 98 }; 105 99 }
-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
··· 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
··· 1 - { pkgs, config, lib, ... }: 2 - 3 - { 4 - home.packages = with pkgs; [ 5 - kitty 6 - ]; 7 - home.file = { 8 - ".config/kitty/kitty.conf".source = ./kitty.conf; 9 - ".config/kitty/ayu.conf".source = ./ayu-kitty.conf; 10 - }; 11 - }
-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
··· 1 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 2 121 { 3 122 home.sessionVariables.EDITOR = "nvim"; 4 123 home.shellAliases = { 5 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"; 6 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 + ''; 7 141 142 + #environment.systemPackages = with customPlugins; [ tidal ]; 8 143 programs.neovim = { 9 144 enable = true; 10 - package = pkgs.unstable.neovim-unwrapped; 11 - extraPackages = with pkgs; [ 12 - # used for Cody 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 13 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 14 1006 ]; 15 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 ]; 16 1099 vimAlias = true; 17 1100 }; 18 1101 }
-8
home/profiles/nvim/lazynvim/.config/nvim/.gitignore
··· 1 - tt.* 2 - .tests 3 - doc/tags 4 - debug 5 - .repro 6 - foo.* 7 - *.log 8 - data
-15
home/profiles/nvim/lazynvim/.config/nvim/.neoconf.json
··· 1 - { 2 - "neodev": { 3 - "library": { 4 - "enabled": true, 5 - "plugins": true 6 - } 7 - }, 8 - "neoconf": { 9 - "plugins": { 10 - "lua_ls": { 11 - "enabled": true 12 - } 13 - } 14 - } 15 - }
-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
··· 1 - # ๐Ÿ’ค LazyVim 2 - 3 - A starter template for [LazyVim](https://github.com/LazyVim/LazyVim). 4 - Refer to the [documentation](https://lazyvim.github.io/installation) to get started.
-2
home/profiles/nvim/lazynvim/.config/nvim/init.lua
··· 1 - -- bootstrap lazy.nvim, LazyVim and your plugins 2 - require("config.lazy")
-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
··· 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
··· 1 - -- Autocmds are automatically loaded on the VeryLazy event 2 - -- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua 3 - -- Add any additional autocmds here
-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
··· 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
··· 1 - -- Options are automatically loaded before lazy.nvim startup 2 - -- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua 3 - -- Add any additional options here
-13
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/cody.lua
··· 1 - return { 2 - { 3 - "sourcegraph/sg.nvim", 4 - dependencies = { "nvim-lua/plenary.nvim" }, 5 - }, 6 - { 7 - "hrsh7th/nvim-cmp", 8 - ---@param opts cmp.ConfigSchema 9 - opts = function(_, opts) 10 - table.insert(opts.sources, { name = "cody" }) 11 - end, 12 - }, 13 - }
-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
··· 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
··· 1 - return { 2 - { 3 - "tpope/vim-fugitive", 4 - lazy = false, 5 - }, 6 - }
-15
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/surround.lua
··· 1 - return { 2 - "echasnovski/mini.surround", 3 - opts = { 4 - mappings = { 5 - add = "ys", 6 - delete = "ds", 7 - find = "gsf", 8 - find_left = "gsF", 9 - highlight = "gsh", 10 - replace = "cs", 11 - update_n_lines = "gsn", 12 - }, 13 - }, 14 - } 15 -
-3
home/profiles/nvim/lazynvim/.config/nvim/stylua.toml
··· 1 - indent_type = "Spaces" 2 - indent_width = 2 3 - column_width = 120
+9
home/profiles/nvim/package.json
··· 1 + { 2 + "console.log": { 3 + "prefix": "clog", 4 + "body": [ 5 + "console.log('$1')" 6 + ], 7 + "description": "Log output to console" 8 + } 9 + }
home/profiles/task/bin/set-backlog.sh
home/profiles/task/bin/set-focus.sh
+5
home/profiles/task/taskrc
··· 82 82 report.every.labels=ID,Active,Deps,P,Project,Tag,Recur,S,Due,Until,Description 83 83 report.every.columns=id,start.age,depends,priority,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description 84 84 85 + report.poms.filter=(status:pending -idea -backlog -BLOCKED) 86 + report.poms.labels=UUID,ID,Project,Tag,Description 87 + report.poms.columns=uuid,id,project,tags,description 88 + report.poms.sort=start+,urgency+ 89 + 85 90 # Urgency 86 91 urgency.user.project.wait.coefficient=-10.0 87 92 urgency.user.project.craft.coefficient=1.9
+3
home/profiles/tmux/default.nix
··· 1 + { 2 + home.file.".tmux.conf".source = ./tmux.conf; 3 + }
+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
··· 66 66 address = "192.168.1.240"; 67 67 prefixLength = 24; 68 68 }]; 69 + ipv6.addresses = [{ 70 + address = "fd7d:587a:4300:1::240"; 71 + prefixLength = 64; 72 + }]; 69 73 ipv4.routes = [{ address = "192.168.1.0"; prefixLength = 24; via = "192.168.1.1"; }]; 70 74 useDHCP = false; 71 75 }; ··· 88 92 # Enable the OpenSSH daemon. 89 93 services.openssh.enable = true; 90 94 networking.firewall.allowedTCPPorts = [ 22 ]; 91 - sound.enable = false; 92 95 93 96 programs.gnupg.agent.enable = true; 94 - programs.gnupg.agent.pinentryFlavor = "curses"; 97 + programs.gnupg.agent.pinentryPackage = pkgs.pinentry-curses; 95 98 programs.gnupg.agent.enableSSHSupport = true; 96 99 97 100 # This value determines the NixOS release with which your system is to be
+19 -26
hosts/box/default.nix
··· 1 - { self, pkgs, ... }: 2 - { 1 + { self, pkgs, ... }: { 3 2 imports = [ 4 3 ./configuration.nix 5 4 ../profiles/core ··· 7 6 ../profiles/taskd 8 7 ../profiles/shaarli 9 8 ../profiles/dns 10 - ../profiles/monitoring 9 + # ../profiles/monitoring 11 10 ../profiles/nfs 12 11 ../profiles/gonic 13 - ../profiles/headphones 12 + ../profiles/headphones 14 13 ../profiles/radicale 15 - ../profiles/seafile 14 + # ../profiles/seafile # waiting for https://github.com/NixOS/nixpkgs/pull/249523 to be merged 16 15 ../profiles/syncthing 17 16 ../profiles/dhyan 18 17 ../profiles/calibre 19 18 ../profiles/wallabag 20 19 ../profiles/finance 21 20 ../profiles/sync/website 21 + ../profiles/sync/music 22 22 ../profiles/grasp 23 23 # ../profiles/archivebox 24 24 # ../profiles/woodpecker-agent 25 - ../profiles/jellyfin 25 + # ../profiles/jellyfin 26 26 ../profiles/ulogger-server 27 - ../profiles/photoprism 27 + ../profiles/immich 28 + ../profiles/jacket 29 + ../profiles/gpodder 30 + ../profiles/transmission 31 + #../profiles/postgres_upgrade_script 28 32 ]; 29 33 30 34 # Backups 31 35 age.secrets.borg-password.file = "${self}/secrets/borg-password.age"; 32 36 services.postgresqlBackup = { 33 37 enable = true; 34 - databases = [ "wallabag" "photoprism" "ulogger" ]; 38 + databases = [ "wallabag" "immich" "ulogger" ]; 35 39 location = "/var/backup/postgresql"; 36 40 }; 37 41 mossnet.backup = { ··· 46 50 "/data/books" # calibre-web 47 51 # "/home/anish/usr/nonfiction" # syncthing 48 52 "/home/anish/usr/finance" # beancount 49 - "/mnt/two/postgres" # sealight postgres backups TODO remove once moved to capsul 53 + "/mnt/two/postgres" # sealight postgres backups TODO remove once moved to capsul 54 + "/mnt/two/photos" 55 + "/mnt/two/music" 50 56 ]; 51 57 # seafile 52 58 }; 53 59 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 - }; 60 + environment.systemPackages = with pkgs; [ lm_sensors ]; 61 + hardware.fancontrol = { 62 + enable = false; 63 + config = ''''; 71 64 }; 72 65 73 66 age.secrets.box-wg.file = "${self}/secrets/box-wg.age";
+1 -3
hosts/curve/configuration.nix
··· 34 34 # keyMap = "us"; 35 35 # }; 36 36 37 - sound.enable = true; 38 - 39 - services.xserver.libinput.enable = true; 37 + services.libinput.enable = true; 40 38 }
+29 -13
hosts/curve/default.nix
··· 1 - { self, pkgs, ... }: 2 - { 1 + { self, pkgs, ... }: { 3 2 imports = [ 4 3 ./configuration.nix 5 4 ../users/anish ··· 17 16 # ../profiles/mount-mossnet 18 17 ]; 19 18 19 + # temporarily allow ssh access for work, to be able to do deploy new services 20 + services.openssh = { 21 + enable = true; 22 + settings.PasswordAuthentication = false; 23 + settings.PermitRootLogin = "no"; 24 + }; 25 + 20 26 # import profiling tools 21 27 programs.systemtap.enable = true; 22 28 29 + virtualisation.docker.enable = true; 30 + virtualisation.docker.storageDriver = "btrfs"; 31 + environment.systemPackages = with pkgs; [ docker-compose ]; 32 + 23 33 # Speed up boot by removing dependency on network 24 34 systemd = { 25 - targets.network-online.wantedBy = pkgs.lib.mkForce [ ]; # Normally ["multi-user.target"] 26 - services.NetworkManager-wait-online.wantedBy = pkgs.lib.mkForce [ ]; # Normally ["network-online.target"] 35 + targets.network-online.wantedBy = 36 + pkgs.lib.mkForce [ ]; # Normally ["multi-user.target"] 37 + services.NetworkManager-wait-online.wantedBy = 38 + pkgs.lib.mkForce [ ]; # Normally ["network-online.target"] 27 39 }; 28 40 29 - programs.gnupg.agent.enable = true; 30 - programs.gnupg.agent.pinentryFlavor = "gnome3"; 41 + 31 42 32 43 fileSystems."/mnt/ftp" = { 33 44 device = "192.168.1.240:/home/ftp"; ··· 58 69 59 70 # lazy enable of ports necessary for KDE connect which is installed via cli home profile (for some reason?) 60 71 networking.firewall = { 61 - allowedTCPPortRanges = [{ from = 1714; to = 1764; }]; 62 - allowedUDPPortRanges = [{ from = 1714; to = 1764; }]; 72 + allowedTCPPorts = [ 22 4173 ]; # allow ssh 73 + allowedTCPPortRanges = [{ 74 + from = 1714; 75 + to = 1764; 76 + }]; 77 + allowedUDPPortRanges = [{ 78 + from = 1714; 79 + to = 1764; 80 + }]; 63 81 }; 64 82 65 83 age.secrets.curve-wg.file = "${self}/secrets/curve-wg.age"; ··· 75 93 mossnet.backup = { 76 94 enable = true; 77 95 name = "curve"; 78 - paths = [ 79 - "/home/anish/usr" 80 - "/home/anish/.ssh" 81 - ]; 96 + paths = [ "/home/anish/usr" "/home/anish/.ssh" "/home/anish/.password-store/" ]; 82 97 }; 83 98 84 99 # enable adb ··· 87 102 #virtualisation.docker.enable = true; 88 103 boot.blacklistedKernelModules = [ "qcserial" ]; 89 104 # Used for packer Capsul 90 - users.users.anish.extraGroups = [ "adbusers" "wheel" "plugdev" "libvertd" ]; 105 + users.users.anish.extraGroups = 106 + [ "adbusers" "wheel" "plugdev" "libvertd" "docker" ]; 91 107 virtualisation.libvirtd.enable = true; 92 108 hardware.keyboard.zsa.enable = true; 93 109 services.udev.extraRules = ''
+12 -16
hosts/curve/hardware-configuration.nix
··· 5 5 6 6 { 7 7 imports = 8 - [ 9 - (modulesPath + "/installer/scan/not-detected.nix") 8 + [ (modulesPath + "/installer/scan/not-detected.nix") 10 9 ]; 11 10 12 - boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" "rtsx_pci_sdmmc" ]; 11 + boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; 13 12 boot.initrd.kernelModules = [ "dm-snapshot" ]; 14 13 boot.kernelModules = [ "kvm-intel" ]; 15 14 boot.extraModulePackages = [ ]; 16 15 17 - fileSystems."/boot" = 18 - { 19 - device = "/dev/disk/by-uuid/2C41-3DAA"; 20 - fsType = "vfat"; 21 - }; 22 - 23 16 fileSystems."/" = 24 - { 25 - device = "/dev/disk/by-uuid/a4ae2855-10b9-49f3-adb0-acd82b74eeb9"; 17 + { device = "/dev/disk/by-uuid/e1268753-4f18-4e6f-8edb-d4724ad8eb4a"; 26 18 fsType = "btrfs"; 27 19 options = [ "subvol=root" ]; 28 20 }; 29 21 30 22 fileSystems."/home" = 31 - { 32 - device = "/dev/disk/by-uuid/a4ae2855-10b9-49f3-adb0-acd82b74eeb9"; 23 + { device = "/dev/disk/by-uuid/e1268753-4f18-4e6f-8edb-d4724ad8eb4a"; 33 24 fsType = "btrfs"; 34 25 options = [ "subvol=home" ]; 35 26 }; 36 27 28 + fileSystems."/boot" = 29 + { device = "/dev/disk/by-uuid/8244-A184"; 30 + fsType = "vfat"; 31 + }; 32 + 37 33 swapDevices = 38 - [{ device = "/dev/disk/by-uuid/23658926-6ffa-42dc-8915-a6479c385e0b"; }]; 34 + [ { device = "/dev/disk/by-uuid/e220fea6-cf3b-4687-bfe1-9cf6d3ba57f7"; } 35 + ]; 39 36 40 37 # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 41 38 # (the default) this is the recommended approach. When using systemd-networkd it's ··· 46 43 # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true; 47 44 48 45 nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 49 - powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; 50 - # hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 46 + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 51 47 }
-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
··· 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
··· 1 - { pkgs, ... }: 2 - 3 - { 4 - services.sketchybar = { 5 - enable = true; 6 - config = (builtins.readFile ./sketchybarrc); 7 - extraPackages = [ pkgs.jq ]; 8 - }; 9 - 10 - }
-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
··· 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
··· 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
··· 21 21 22 22 # Enable the OpenSSH daemon. 23 23 services.openssh.enable = true; 24 - sound.enable = false; 25 24 26 25 # Define a user account. Don't forget to set a password with โ€˜passwdโ€™. 27 26 # This value determines the NixOS release with which your system is to be
+22 -3
hosts/helix/default.nix
··· 11 11 # ../profiles/mount-mossnet 12 12 ../profiles/freshrss 13 13 ../profiles/microbin 14 + ../profiles/site 15 + 16 + # ../profiles/postgres_upgrade_script 14 17 ]; 15 18 16 19 # Capsul specific ··· 27 30 privateKeyFile = "/run/agenix/helix-wg"; 28 31 }; 29 32 30 - services.postgresql.package = pkgs.postgresql_11; 33 + # 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; 31 50 services.postgresqlBackup = { 32 51 # TODO needs working wireguard to box 33 52 enable = false; 34 - databases = [ "gitea" "freshrss" "woodpecker" ]; 53 + databases = [ "gitea" "freshrss" ]; # "woodpecker" 35 54 location = "/mnt/two/postgres"; 36 55 }; 37 56 ··· 41 60 paths = [ 42 61 "/var/lib/gitea" 43 62 "/var/lib/freshrss" 44 - "/var/lib/woodpecker" 63 + # "/var/lib/woodpecker" 45 64 "/var/lib/microbin" 46 65 ]; 47 66
-2
hosts/lituus/configuration.nix
··· 19 19 # networking.proxy.default = "http://user:password@proxy:port/"; 20 20 # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; 21 21 22 - sound.enable = false; 23 - 24 22 # Define a user account. Don't forget to set a password with โ€˜passwdโ€™. 25 23 # This value determines the NixOS release with which your system is to be 26 24 # compatible, in order to avoid breaking some software such as database
-5
hosts/lituus/hardware-configuration.nix
··· 20 20 fsType = "btrfs"; 21 21 }; 22 22 23 - fileSystems."/storage" = 24 - { device = "/dev/disk/by-uuid/c2181608-cbb0-40ab-b62b-158cdc9b9300"; 25 - fsType = "btrfs"; 26 - }; 27 - 28 23 swapDevices = [ ]; 29 24 30 25 hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+3 -1
hosts/profiles/core/default.nix
··· 32 32 }; 33 33 34 34 environment.systemPackages = with pkgs; [ 35 - pinentry_gnome 35 + pinentry-rofi 36 + pinentry-gnome3 37 + pinentry-gtk2 36 38 cached-nix-shell 37 39 ]; 38 40
+25 -24
hosts/profiles/desktop/default.nix
··· 1 1 { self, config, pkgs, lib, ... }: 2 2 let 3 3 tex = (pkgs.texlive.combine { 4 - inherit (pkgs.texlive) scheme-basic 5 - dvisvgm dvipng# for preview and export as html 4 + inherit (pkgs.texlive) 5 + scheme-basic dvisvgm dvipng # for preview and export as html 6 6 wrapfig amsmath ulem hyperref capt-of; 7 7 #(setq org-latex-compiler "lualatex") 8 8 #(setq org-preview-latex-default-process 'dvisvgm) ··· 13 13 rev = "502f212d83bc67e8f0499574546b99ec6c8e16f9"; 14 14 sha256 = "1wx9nzq7cqyvpaq4j60bs8g7gh4jk8qg4016yi4c331l4iw1ymsa"; 15 15 }; 16 - in 17 - { 16 + in { 18 17 # TODO modularize 19 - imports = [ 20 - ./battery-low-timer.nix 21 - ./cal-alarms.nix 22 - ]; 18 + imports = [ ./battery-low-timer.nix ./cal-alarms.nix ]; 23 19 24 20 # Secrets used by home-manager modules 25 21 age.secrets.fastmail.file = "${self}/secrets/fastmail.age"; ··· 29 25 age.secrets.mossnet.owner = "anish"; 30 26 31 27 # Taskwarrior private key 32 - age.secrets.taskwarrior-private.file = "${self}/secrets/taskwarrior-private.age"; 28 + age.secrets.taskwarrior-private.file = 29 + "${self}/secrets/taskwarrior-private.age"; 33 30 age.secrets.taskwarrior-private.owner = "anish"; 34 31 35 32 # We don't plug USBs into servers ··· 41 38 42 39 dbus = { 43 40 enable = true; 44 - packages = [ pkgs.dconf ]; 41 + packages = [ pkgs.dconf pkgs.gcr ]; 45 42 }; 46 43 }; 47 44 programs.dconf.enable = true; ··· 56 53 XDG_BIN_HOME = "\${HOME}/.local/bin"; 57 54 XDG_DATA_HOME = "\${HOME}/.local/share"; 58 55 59 - PATH = [ 60 - "\${XDG_BIN_HOME}" 61 - ]; 56 + PATH = [ "\${XDG_BIN_HOME}" ]; 62 57 }; 63 58 64 59 environment.systemPackages = with pkgs; [ 65 - unstable.sublime-music 66 - unstable.nheko 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 67 64 unstable.signal-desktop 68 65 unstable.tuba 69 66 unstable.newsflash 70 67 unstable.liferea 71 68 unstable.gh 72 69 unstable.flyctl 70 + unstable.sublime-music 73 71 74 72 kooha 75 73 light ··· 77 75 feh 78 76 sxiv 79 77 xkblayout-state 80 - vcv-rack 81 78 zathura 82 79 calibre 83 80 mpv ··· 87 84 rofi 88 85 rofimoji 89 86 rofi-calc 90 - # eww 91 87 obs-studio 92 88 lightdm 93 89 dunst ··· 99 95 papirus-icon-theme 100 96 calendar-cli 101 97 wyrd 102 - tic-80 98 + # tic-80 103 99 ytfzf 104 100 yt-dlp 105 101 ]; ··· 121 117 night = 3700; 122 118 }; 123 119 }; 120 + displayManager.defaultSession = "none+bspwm"; 124 121 xserver = { 125 122 enable = true; 126 - xkb.layout = "us,dvorak"; 123 + # TODO should be xkb.layout 124 + xkb.layout = "us"; 125 + # xkb.variant = "dvorak"; 127 126 desktopManager.wallpaper.mode = "fill"; 128 127 displayManager = { 129 - defaultSession = "none+bspwm"; 128 + # startx.enable = true; 130 129 sessionCommands = '' 131 130 ${pkgs.xorg.xrdb}/bin/xrdb -merge <<EOF 132 131 #define blk #1F2430 ··· 147 146 #define bwht #CBCCC6 148 147 #define bg blk 149 148 #define fg wht 150 - 149 + 151 150 *.foreground: fg 152 151 *.background: bg 153 152 *.cursorColor: mag 154 - 153 + 155 154 *.color0: blk 156 155 *.color8: bblk 157 156 *.color1: red ··· 168 167 *.color14: bcyn 169 168 *.color7: wht 170 169 *.color15: bwht 171 - 170 + 172 171 ! greys 173 172 *.color234: #1E2029 174 173 *.color235: #282a36 ··· 221 220 siji 222 221 font-awesome 223 222 proggyfonts 224 - (nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "Iosevka" ]; }) 223 + nerd-fonts.fira-code 224 + nerd-fonts.droid-sans-mono 225 + nerd-fonts.iosevka 225 226 ]; 226 227 }
+17 -13
hosts/profiles/dns/default.nix
··· 3 3 adblockLocalZones = pkgs.stdenv.mkDerivation { 4 4 name = "unbound-zones-adblock"; 5 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"); 6 + src = (pkgs.fetchFromGitHub { 7 + owner = "StevenBlack"; 8 + repo = "hosts"; 9 + rev = "3.12.21"; 10 + sha256 = "Yzr6PY/zqQE+AHH0J6ioHTsgkikM+dz4aelbGpQJa1s="; 11 + } + "/hosts"); 13 12 14 13 phases = [ "installPhase" ]; 15 14 ··· 19 18 }; 20 19 21 20 mossnet = "192.168.1.240"; # The local lan-ip for box 22 - wg-mossnet = "10.0.69.4"; # The wireguard ip for box 21 + wg-mossnet = "10.0.69.4"; # The wireguard ip for box 23 22 mossnet-hosts = [ 24 23 "mossnet.lan" 25 24 "headphones.mossnet.lan" ··· 39 38 "tracks.mossnet.lan" 40 39 "grasp.mossnet.lan" 41 40 "photos.mossnet.lan" 41 + "pod.mossnet.lan" 42 + "mast.mossnet.lan" 42 43 ]; 43 44 44 - in 45 - { 45 + in { 46 46 services.unbound = { 47 47 enable = true; 48 48 settings = { ··· 53 53 # private-address = "192.168.1.0/24"; 54 54 cache-min-ttl = 0; 55 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" ]; 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" ]; 58 59 access-control-view = "10.0.69.0/24 wireguard"; 59 60 # so-reuseport = "yes"; 60 61 tls-upstream = "yes"; ··· 64 65 }; 65 66 forward-zone = [{ 66 67 name = "."; 67 - forward-addr = [ "45.90.28.0#6939b9.dns.nextdns.io" "1.1.1.1@853#cloudflare-dns.com" ]; 68 + forward-addr = [ 69 + "45.90.28.0#6939b9.dns.nextdns.io" 70 + "1.1.1.1@853#cloudflare-dns.com" 71 + ]; 68 72 # non-tls 69 73 # forward-addr = ["45.90.30.49" "45.90.28.49" "1.1.1.1" "8.8.8.8"] 70 74 }];
+1 -1
hosts/profiles/finance/default.nix
··· 4 4 services.paperless = { 5 5 enable = false; 6 6 consumptionDirIsPublic = true; 7 - extraConfig.PAPERLESS_AUTO_LOGIN_USERNAME = "admin"; 7 + settings.PAPERLESS_AUTO_LOGIN_USERNAME = "admin"; 8 8 }; 9 9 10 10 environment.systemPackages = [
+8 -7
hosts/profiles/freshrss/default.nix
··· 17 17 18 18 services.postgresql = { 19 19 enable = true; # Ensure postgresql is enabled 20 - authentication = '' 21 - local freshrss all ident map=freshrss-users 22 - ''; 23 - identMap = # Map the freshrss user to postgresql 24 - '' 25 - freshrss-users freshrss freshrss 26 - ''; 20 + # authentication = '' 21 + # local freshrss all ident map=freshrss-users 22 + # ''; 23 + # identMap = # Map the freshrss user to postgresql 24 + # '' 25 + # freshrss-users freshrss freshrss 26 + # freshrss-users postgres freshrss 27 + # ''; 27 28 ensureDatabases = [ "freshrss" ]; 28 29 ensureUsers = [{ 29 30 name = "freshrss";
+25 -10
hosts/profiles/gitea/default.nix
··· 4 4 age.secrets.gitea-dbpass.file = "${self}/secrets/gitea-dbpass.age"; 5 5 age.secrets.gitea-dbpass.owner = "gitea"; 6 6 7 - services.gitea = { 7 + services.forgejo = { 8 8 enable = true; 9 - package = pkgs.forgejo; 10 - appName = "Sealight Git Forge"; 9 + user = "gitea"; 10 + group = "gitea"; 11 + stateDir = "/var/lib/gitea"; 11 12 database = { 12 13 type = "postgres"; 14 + user = "gitea"; 15 + name = "gitea"; 13 16 passwordFile = "/run/agenix/gitea-dbpass"; 14 17 }; 15 18 settings = { 19 + DEFAULT.APP_NAME = "Sealight Git Forge"; 16 20 server = { 17 21 DOMAIN = "git.sealight.xyz"; 18 22 ROOT_URL = "https://git.sealight.xyz"; ··· 24 28 repository = { 25 29 DEFAULT_BRANCH = "main"; 26 30 }; 31 + service.DISABLE_REGISTRATION = true; 27 32 "markup.restructuredtext" = { 28 33 ENABLED = true; 29 34 FILE_EXTENSIONS = ".rst"; ··· 43 48 }; 44 49 }; 45 50 51 + users.users.gitea = { 52 + home = "/var/lib/gitea"; 53 + useDefaultShell = true; 54 + group = "gitea"; 55 + isSystemUser = true; 56 + }; 57 + 58 + users.groups.gitea = {}; 59 + 46 60 environment.systemPackages = [ pkgs.pandoc ]; 47 61 services.postgresql = { 48 62 enable = true; # Ensure postgresql is enabled 49 - authentication = '' 50 - local gitea all ident map=gitea-users 51 - ''; 52 - identMap = # Map the gitea user to postgresql 53 - '' 54 - gitea-users gitea gitea 55 - ''; 63 + # authentication = '' 64 + # local gitea all ident map=gitea-users 65 + # ''; 66 + # identMap = # Map the gitea user to postgresql 67 + # '' 68 + # gitea-users gitea gitea 69 + # gitea-users postgres gitea 70 + # ''; 56 71 ensureDatabases = [ "gitea" ]; 57 72 ensureUsers = [{ 58 73 name = "gitea";
+13 -1
hosts/profiles/gonic/default.nix
··· 1 1 { config, lib, pkgs, ... }: 2 2 { 3 + environment.systemPackages = [ pkgs.ffmpeg ]; 3 4 mossnet.gonic.enable = true; 4 5 mossnet.gonic.settings = '' 5 6 music-path /mnt/two/music/ 6 7 podcast-path /data/podcasts 7 8 cache-path /data/cache 9 + playlists-path /data/playlists 10 + transcode-cache-size 1000 11 + transcode-eject-interval 1440 8 12 ''; 9 - mossnet.gonic.user = "headphones"; 13 + mossnet.gonic.user = "gonic"; 10 14 mossnet.gonic.group = "audio"; 11 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 + }; 12 24 }
-4
hosts/profiles/gonic/module-gonic.nix
··· 68 68 Group = cfg.group; 69 69 DevicePolicy = "closed"; 70 70 NoNewPrivileges = " yes"; 71 - PrivateTmp = "yes"; 72 - PrivateUsers = "yes"; 73 71 ProtectControlGroups = "yes"; 74 72 ProtectKernelModules = "yes"; 75 73 ProtectKernelTunables = "yes"; 76 74 RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6"; 77 - RestrictNamespaces = "yes"; 78 - RestrictRealtime = "yes"; 79 75 SystemCallFilter = "~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap"; 80 76 ReadWritePaths = dataFolder; 81 77 StateDirectory = baseNameOf dataFolder;
+16
hosts/profiles/gpodder/default.nix
··· 1 + { 2 + services.gpodder.enable = true; 3 + networking.firewall.allowedTCPPorts = [ 3005 ]; 4 + services.nginx.virtualHosts."pod.mossnet.lan" = { 5 + extraConfig = "client_max_body_size 20M;"; 6 + 7 + locations."/" = { 8 + extraConfig = '' 9 + proxy_pass http://localhost:3005/; 10 + proxy_set_header X-Forwarded-Proto $scheme; 11 + proxy_set_header X-Real-IP $remote_addr; 12 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 13 + ''; 14 + }; 15 + }; 16 + }
+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
··· 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
··· 47 47 # The registration file is automatically generated after starting the appservice for the first time. 48 48 # cp /var/lib/matrix-appservice-discord/discord-registration.yaml /var/lib/matrix-synapse/ 49 49 # chown matrix-synapse:matrix-synapse /var/lib/matrix-synapse/discord-registration.yaml 50 - "/var/lib/matrix-synapse/telegram-registration.yaml" 50 + # "/var/lib/matrix-synapse/telegram-registration.yaml" 51 51 "/var/lib/matrix-synapse/signal-registration.yaml" 52 - "/var/lib/matrix-as-whatsapp/whatsapp-registration.yaml" 52 + #"/var/lib/matrix-as-whatsapp/whatsapp-registration.yaml" 53 53 "/var/lib/matrix-as-discord/discord-registration.yaml" 54 54 # "/var/lib/matrix-synapse/slack-registration.yaml" 55 55 # "/var/lib/matrix-synapse/discord-registration.yaml"
+33 -33
hosts/profiles/matrix/mautrix-services.nix
··· 2 2 3 3 { 4 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 - }; 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 16 17 17 services.matrix-appservices = { 18 18 addRegistrationFiles = false; 19 19 homeserverURL = "https://sealight.xyz/"; 20 20 homeserverDomain = "sealight.xyz"; 21 21 services = { 22 - whatsapp = { 23 - port = 29183; 24 - format = "mautrix-go"; 25 - package = pkgs.mautrix-whatsapp; 26 - }; 22 + # whatsapp = { 23 + # port = 29183; 24 + # format = "mautrix-go"; 25 + # package = pkgs.mautrix-whatsapp; 26 + # }; 27 27 28 28 discord = { 29 29 port = 29188; 30 30 format = "mautrix-go"; 31 - package = pkgs.my-mautrix-discord; 31 + package = pkgs.mautrix-discord; 32 32 }; 33 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 - }; 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 50 }; 51 51 }; 52 52 }
+2 -2
hosts/profiles/microbin/default.nix
··· 1 1 { config, lib, pkgs, ... }: 2 2 { 3 3 services.microbin.enable = true; 4 - services.microbin.hostname = "bin.sealight.xyz"; 5 - services.microbin.port = 4949; 4 + services.microbin.settings.PUBLIC_PATH = "bin.sealight.xyz"; 5 + services.microbin.settings.MICROBIN_PORT = 4949; 6 6 networking.firewall.allowedTCPPorts = [ 4949 ]; 7 7 services.nginx.virtualHosts."bin.sealight.xyz" = { 8 8 enableACME = true;
+1
hosts/profiles/mossnet-hosts/default.nix
··· 18 18 192.168.1.240 tracks.mossnet.lan 19 19 192.168.1.240 grasp.mossnet.lan 20 20 192.168.1.240 photos.mossnet.lan 21 + 192.168.1.240 pod.mossnet.lan 21 22 ''; 22 23 # 10.0.69.4 mossnet.lan 23 24 # 10.0.69.4 links.mossnet.lan
+6 -5
hosts/profiles/music/default.nix
··· 12 12 # Plugins 13 13 helm 14 14 # surge 15 - distrho 15 + # distrho 16 16 orca-c 17 17 supercollider 18 18 dirt 19 - sunvox 19 + # sunvox 20 20 vcv-rack 21 21 lmms 22 22 bespokesynth 23 23 lsp-plugins 24 24 helio-workstation 25 - projectm # milkdrop visualizer 25 + # projectm # milkdrop visualizer 26 + # i think it's projectm-sdl-cpp now 26 27 27 28 # DAWs 28 29 # ardour ··· 30 31 # renoise 31 32 ]; 32 33 33 - hardware.pulseaudio.enable = lib.mkForce false; 34 + services.pulseaudio.enable = false; 34 35 security.rtkit.enable = false; 35 36 36 37 services.pipewire = { ··· 38 39 alsa.enable = true; 39 40 alsa.support32Bit = false; 40 41 pulse.enable = true; 41 - jack.enable = true; 42 + jack.enable = true; 42 43 # Deprecated as of 23.05 43 44 # config = { 44 45 # pipewire."context.properties"."default.clock.rate" = "48000";
+3 -4
hosts/profiles/postgres_upgrade_script/default.nix
··· 6 6 # TODO it's perhaps advisable to stop all services that depend on postgresql 7 7 systemctl stop postgresql 8 8 9 - # TODO replace `<new version>` with the psqlSchema here 10 9 # The schema can be found by running: 11 - # nix-instantiate '<nixpkgs>' --eval -A postgresql_14.psqlSchema 12 - export NEWDATA="/var/lib/postgresql/<new version>" 10 + # nix eval --raw nixpkgs#postgresql_15.psqlSchema 11 + export NEWDATA="/var/lib/postgresql/15" 13 12 14 13 # TODO specify the postgresql package you'd like to upgrade to 15 - export NEWBIN="${pkgs.postgresql_14}/bin" 14 + export NEWBIN="${pkgs.postgresql_15}/bin" 16 15 17 16 export OLDDATA="${config.services.postgresql.dataDir}" 18 17 export OLDBIN="${config.services.postgresql.package}/bin"
+1
hosts/profiles/radicale/default.nix
··· 5 5 package = pkgs.radicale; 6 6 settings = { 7 7 server.hosts = [ "0.0.0.0:5252" ]; 8 + auth.type = "none"; 8 9 }; 9 10 }; 10 11
+1 -1
hosts/profiles/rss-bridge/default.nix
··· 3 3 services.rss-bridge = { 4 4 enable = true; 5 5 virtualHost = "bridge.sealight.xyz"; 6 - whitelist = [ "Facebook" "Bandcamp" "Twitter" "Telegram" "Instagram" "Reddit" ]; 6 + config.system.enabled_bridges = [ "Facebook" "Bandcamp" "Twitter" "Telegram" "Instagram" "Reddit" ]; 7 7 }; 8 8 9 9 services.nginx.virtualHosts."bridge.sealight.xyz".forceSSL = true;
+5 -2
hosts/profiles/sync/music/default.nix
··· 5 5 serviceConfig.Type = "oneshot"; 6 6 path = [ 7 7 pkgs.coreutils 8 + pkgs.openssh 9 + pkgs.gawk 8 10 pkgs.rsync 11 + pkgs.beets 9 12 ]; 10 13 script = builtins.readFile ./get-music.sh; 11 14 serviceConfig = { 12 15 User = "anish"; 13 16 }; 14 17 }; 15 - systemd.timers.get-music-timer = { 18 + systemd.timers.get-music-sync = { 16 19 wantedBy = [ "timers.target" ]; 17 20 partOf = [ "get-music-sync.service" ]; 18 - timerConfig.OnCalendar = [ "daily" ]; 21 + timerConfig.OnCalendar = [ "hourly" ]; 19 22 }; 20 23 }
+58 -6
hosts/profiles/sync/music/get-music.sh
··· 1 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 2 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 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" 9 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
··· 6 6 path = [ 7 7 pkgs.git 8 8 pkgs.coreutils 9 - pkgs.nixUnstable 9 + pkgs.nixVersions.latest 10 10 pkgs.openssh 11 11 pkgs.deploy 12 12 ]; ··· 18 18 git add flake.lock 19 19 git diff-index --quiet HEAD || git commit -m 'updating website' # if nothing, don't exit 1 20 20 git push 21 - deploy .#cube 21 + deploy .#helix 22 22 exit 0 23 23 ''; 24 24 serviceConfig = {
+3
hosts/profiles/transmission/beet-import.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + beet import -ql "$TR_TORRENT_DIR"
+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
··· 6 6 ensureDatabases = [ "ulogger" ]; 7 7 ensureUsers = [{ 8 8 name = "ulogger"; 9 - nsureDBOwnership = true; 9 + ensureDBOwnership = true; 10 10 }]; 11 11 }; 12 12
+14 -67
hosts/profiles/wallabag/default.nix
··· 1 1 { self, pkgs, config, lib, ... }: 2 2 3 3 { 4 - # age.secrets.wallabag-password.file = "${self}/secrets/wallabag-password.age"; 5 - # age.secrets.wallabag-secret.file = "${self}/secrets/wallabag-secret.age"; 6 - # age.secrets.wallabag-password.owner = "wallabag"; 7 - # age.secrets.wallabag-secret.owner = "wallabag"; 4 + age.secrets.wallabag-password.file = "${self}/secrets/wallabag-password.age"; 5 + age.secrets.wallabag-secret.file = "${self}/secrets/wallabag-secret.age"; 6 + age.secrets.wallabag-password.owner = "wallabag"; 7 + age.secrets.wallabag-secret.owner = "wallabag"; 8 8 services.postgresql = { 9 9 enable = true; 10 10 package = pkgs.postgresql_15; ··· 18 18 } 19 19 ]; 20 20 authentication = '' 21 - local wallabag all md5 21 + local wallabag all peer 22 22 ''; 23 23 }; 24 24 25 25 services.wallabag = { 26 26 enable = true; 27 - hostName = "read.mossnet.lan"; 28 - package = pkgs.wallabag; 29 - conf = '' 30 - # This file is a "template" of what your parameters.yml file should look like 31 - parameters: 32 - database_driver: pdo_pgsql 33 - database_host: localhost 34 - database_port: ~ 35 - database_name: wallabag 36 - database_user: wallabag 37 - database_password: wallabag 38 - # For SQLite, database_path should be "%kernel.project_dir%/data/db/wallabag.sqlite" 39 - database_path: ~ 40 - database_table_prefix: wallabag_ 41 - database_socket: null 42 - # with PostgreSQL and SQLite, you must set "utf8" 43 - database_charset: utf8 44 - 45 - domain_name: http://read.mossnet.lan/ 46 - server_name: "mossnet wallabag instance" 47 - 48 - mailer_dsn: null:// 49 - locale: en 50 - 51 - # A secret key that's used to generate certain security-related tokens 52 - secret: SAFGOECRIlfal89oe6u0(*^dsaaih961 53 - 54 - # two factor stuff 55 - twofactor_auth: false 56 - twofactor_sender: no-reply@wallabag.org 57 - 58 - # fosuser stuff 59 - fosuser_registration: false 60 - fosuser_confirmation: true 61 - 62 - # how long the access token should live in seconds for the API 63 - fos_oauth_server_access_token_lifetime: 3600 64 - # how long the refresh token should life in seconds for the API 65 - fos_oauth_server_refresh_token_lifetime: 1209600 66 - 67 - from_email: ops@sealight.xyz 68 - 69 - rss_limit: 50 70 - 71 - # RabbitMQ processing 72 - rabbitmq_host: localhost 73 - rabbitmq_port: 5672 74 - rabbitmq_user: guest 75 - rabbitmq_password: guest 76 - rabbitmq_prefetch_count: 10 77 - 78 - # Redis processing 79 - redis_scheme: tcp 80 - redis_host: localhost 81 - redis_port: 6379 82 - redis_path: null 83 - redis_password: null 84 - 85 - # sentry logging 86 - sentry_dsn: ~ 87 - ''; 27 + domain = "read.mossnet.lan"; 28 + virtualHost.enable = true; 29 + package = pkgs.my-wallabag; 30 + # Systemd now defaults to /var/lib? 31 + # dataDir = "/var/lib/wallabag"; 32 + parameters = { 33 + "env(SECRET_FILE)" = config.age.secrets.wallabag-secret.path; 34 + secret = "%env(file:resolve:SECRET_FILE)%"; 35 + }; 88 36 }; 89 - # networking.firewall.allowedTCPPorts = [ 8080 ]; 90 37 }
+10 -5
hosts/profiles/wireguard-server/default.nix
··· 36 36 publicKey = "gcdq86hhEUlqF2chqYB/F8pALyAMNFvwLycxBoHuoDs="; 37 37 allowedIPs = [ "10.0.69.5/32" ]; 38 38 } 39 - # { 40 - # # hyperplane 41 - # publicKey = ""; 42 - # allowedIPs = [ "10.0.69.6/32" ]; 43 - # } 39 + { 40 + # hyperplane 41 + publicKey = "v+EUuM60yZLvBmdCG9GxfFAtSjS1VvbUWcyNb8emjDg="; 42 + allowedIPs = [ "10.0.69.6/32" ]; 43 + } 44 + { 45 + # work 46 + publicKey = "/gv66s8DfppCCjaEN/jlc8z95IhEWPgDumykqKEl0QU="; 47 + allowedIPs = [ "10.0.69.7/32" ]; 48 + } 44 49 ]; 45 50 }; 46 51 }
+6 -3
hosts/users/anish/default.nix
··· 4 4 programs.zsh.enable = true; 5 5 users.users.anish = { 6 6 description = "Personal user for Anish"; 7 - hashedPassword = "$y$j9T$y3DPt/dWaPE.gRazQqw1w0$1RMH5sl/Nu8kW3ZMywYCPRniHD/jF5qRh0VKrdJ.bV2"; 7 + hashedPassword = 8 + "$y$j9T$y3DPt/dWaPE.gRazQqw1w0$1RMH5sl/Nu8kW3ZMywYCPRniHD/jF5qRh0VKrdJ.bV2"; 8 9 shell = pkgs.zsh; 9 10 isNormalUser = true; 10 11 extraGroups = [ "wheel" "audio" "networkmanager" "video" ]; 11 12 openssh.authorizedKeys.keys = [ 12 13 # Curve 13 14 "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDM0Zvei46x/yZl/IeBCq6+IYQQ0avulzVyBysF9cPigZMCybWRV7IEU+E3k9t6JrbdbdGfJkcZIWmsWDdKS8W8mBnZpVoT0ffLynu8JQ/TKdGm4Qv6bgUeKNrGsNv0ZPs2CDaGSLj0oJfRF7Ko10tcLP0vW+yujrh+y6TH/vVzJioaV4TGvtCUpn+wEQah9ROwPQLUUofsSWdnRsDJ/gp37zXWs4l5wyjSKtP3O9RZUP7kBekbSqEgSXiTk0oUQSVqIWl9NDiP6onk/gSOjXsR/JPqsSN/XI/c/yj6gyY0f51Ru2D7iBxuMJIJcWV+rU6coIj+ULcQWLzt/7TI8jq5AOOzI/ll4zbL24Eo84Rz+TP9tvMMhDZ0VaMN22AJ8qQEjc5P09tWKsX7Jg39XelyV1jHXncE4yvIE9F4RSCHzWCeKeXakizQNuzSaxTxIExRFYHjNW5bR6+3MTGwVrEIXU+qML+0yFTR86MT+tdY5AreAJQLwbog79O1NupeXJE= anish@curve" 14 - # Line 15 - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDtU2GMYjXj6RGO1+mwM4TDGOo0qrKLTL4Di8+QgDX0p5vUEsnE1PS9wnuqCmSu75U8g0XIAMtvtdYyGk1N+Bx01erAZpT8DLYtIXFCyaiN28PVu5T1D0T+TQ7xgIH1qenXZR2DOQdf6kpvKEfm7+7bWhCo0N/KFMpmReubyzHDQcq/1qQasxTL+YALQFOjwKqsOTBXbHwZ103AEAcQX4ftBFEOfVli4/1aKIK4dNSZYB7J9Htq707YnsEqo9RLAMh0aOTTYgTx9AoSUDeqGuh/AGkcB7NcS7EEtI6d5YUGylwZh/gF6hqE0jl8kn2m5jMKXL3CRohZvjifue8x/GIjpu5WRabUuhBEbrfTQQaC7taHnt5rvYCGzKZx09TexUzhuz2CL480DRoxSG+P+lCNm1dIg/EZrnGEzXCSr36PlOqS5t5gm8tPkzCmZf2wU15A3ZIYUPmnYLqsn4WmIV7rKmdqt2ctWELUXow3PPiZXBucP9P3xpsYEfF1SB2SGNc= u0_a139@localhost" 16 15 # Box 17 16 "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKN8/SH55DBiwVoSnTU8k2Pen+wmovL9QaMyehxGEsJJv/8fzwsswGalD4C/4O51LOvdu4UKkZW5hG02uVSK+58p3UV3pOPyoqsu/aDeIsWsqmTeTzUrBIWOlNzcDKnohLz2oGC5YO+wyTJ9Iteq6aGJDjErsW7sG3h5lXCs551EmJNNGhtBQaaoytMNnWqSdlVjDNCijurH7WUpp40U/RjEp532l4rX6eIIj3jBKEFbhZkFSSjqbj4xM4SyFt+Jmigb1RMjsQjmpfY1vDtM84RcYfpTUte/T5w2dkD5H6kccmWnwKSJpm9wXfx4E7lR9APdUGnau2U1+XxiD3ytGl anish@box" 17 + # Nix-on-droid line 18 + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJOiXBPVvZAp1fY0a0Tupxj0Ml6MoA51lvqt/jAQq249 nix-on-droid@localhost" 19 + # Work 20 + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC/vvh0i6+uAN0GWlK6ZfyTlc/AW54xe2CroUDsDSoGnFKeIUiSsWexobODlVakNhqwCKfsvUh6g+RdA8ZVcamATcYqxysP4X5fRksmAzRm5281O7ZBDHMB2BdcfHSTgiz7JvMRIQYWDlU8Ck6IL4wlN0b2GMUj9t/GeG37us8280rxpRNoIY7M27AJEZ7XNQhctBIVujxctVBgIMYmZiTwziU7ywJv4rNT5OAWvjRXSo1rkxdvx3VESv4y/mp8m7dEupZpIjIFsLs52+UG5LtadulUqtTWg05sCw8LEcmRhflgZSAvjw60RrKFCuWxc8+/Pmaw+zExeBMenqi0NzuTc3S3k2wCKVIZDh/0tlXzIwZ6WRqxDevUtEKfvbEFMXd8akhTfYs0dyszcFRevBxOBPbcKku+FK/HkdPLmEANvxYty3cv+Eipkz3c8JPJPvXNTXrjepXMm0LUKodO3c15hGogCOxUO38kykkyYnn+MxxHparoMfEr2+oHNpQoS5wA1G43ppqjVoRDgnhleu6ixwRkLZzphY3cnOd5jL9Ie5xIGbFWH1qSlQRdHBkHjuf85z7+QK8nFYAhmG1K3Vt3GNtF8LN1tYQkfwBJ/vsroMNzGPoq4PjVbqb80Eq+96cP89XKfU2/xw1g+p2lJDm/zC1WCjXVzf8NRwC7gqPavQ== anishlakhwara@anishs-mbp.lan" 18 21 ]; 19 22 }; 20 23 }
install-encrypted.sh
+2 -2
install-yubikey.sh
··· 19 19 20 20 # Yubikey Setup 21 21 SLOT=2 22 - ykpersonalize -"$SLOT" -ochal-resp -ochal-hmac 22 + # ykpersonalize -"$SLOT" -ochal-resp -ochal-hmac 23 23 SALT_LENGTH=16 24 24 salt="$(dd if=/dev/random bs=1 count=$SALT_LENGTH 2>/dev/null | rbtohex)" 25 25 k_user=PASSWORDCHANGEMEPLAEASES ··· 147 147 sound.enable = true; 148 148 hardware.pulseaudio.enable = true; 149 149 150 - services.xserver.libinput.enable = true; 150 + services.libinput.enable = true; 151 151 152 152 # Hmmm maybe somewhere else? 153 153 users.users.anish = {
-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
··· 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
··· 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
··· 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
··· 1 - { pkgs }: 2 - 3 - with pkgs; 4 - let shared-packages = import ../shared/packages.nix { inherit pkgs; }; in 5 - shared-packages ++ [ 6 - dockutil 7 - ]
-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
··· 9 9 wireguard = import ./wireguard.nix; 10 10 backup = import ./backup.nix; 11 11 ulogger-server = import ./ulogger.nix; 12 - # microbin = import ./microbin.nix; includide in 23.11 12 + gpodder2go = import ./gpodder2go.nix; 13 + # microbin = import ./microbin.nix; # includide in 23.11 13 14 }
+1 -1
modules/nixos/gonic.nix
··· 57 57 #... 58 58 }; 59 59 serviceConfig = { 60 - ExecStart = "${pkgs.gonic}/bin/gonic -config-path /etc/gonic/config"; 60 + ExecStart = "${pkgs.gonic}/bin/gonic -config-path /etc/gonic/config -scan-watcher-enabled -scan-interval 600"; 61 61 WorkingDirectory = dataFolder; 62 62 TimeoutStopSec = "20"; 63 63 KillMode = "process";
+120
modules/nixos/gpodder2go.nix
··· 1 + { self, config, lib, pkgs, ... }: 2 + 3 + with lib; 4 + 5 + let 6 + cfg = config.services.gpodder; 7 + in 8 + { 9 + options = { 10 + 11 + services.gpodder = { 12 + enable = mkEnableOption "A gpodder instance"; 13 + 14 + user = mkOption { 15 + type = types.str; 16 + default = "gpodder"; 17 + description = "User account under which gpodder runs."; 18 + }; 19 + 20 + group = mkOption { 21 + type = types.str; 22 + default = "gpodder"; 23 + description = "Group account under which gpodder runs."; 24 + }; 25 + 26 + hostname = mkOption { 27 + type = types.str; 28 + description = "Hostname of your gpodder service"; 29 + }; 30 + 31 + dataFolder = mkOption { 32 + type = types.str; 33 + default = "/var/lib/gpodder"; 34 + description = "State director"; 35 + }; 36 + 37 + VERIFIER_SECRET_KEY = mkOption { 38 + type = types.str; 39 + default = "satnheiycglsrcgaecrlufg"; 40 + description = "Verifer Secret"; 41 + }; 42 + 43 + }; 44 + }; 45 + 46 + config = mkIf cfg.enable { 47 + systemd.services.gpodder = { 48 + description = "gpodder2go A gpodder instance"; 49 + after = [ "remote-fs.target" "network.target" ]; 50 + wantedBy = [ "multi-user.target" ]; 51 + serviceConfig = { 52 + ExecStart = "${pkgs.gpodder2go}/bin/gpodder2go serve"; 53 + Environment = [ 54 + "VERIFIER_SECRET_KEY=${cfg.VERIFIER_SECRET_KEY}" 55 + ]; 56 + WorkingDirectory = cfg.dataFolder; 57 + TimeoutStopSec = " 20 "; 58 + KillMode = " process "; 59 + RestartSec = " 10 "; 60 + User = cfg.user; 61 + Group = cfg.group; 62 + DevicePolicy = " closed "; 63 + NoNewPrivileges = " yes "; 64 + PrivateTmp = " yes "; 65 + PrivateUsers = " yes "; 66 + ProtectControlGroups = " yes "; 67 + ProtectKernelModules = " yes "; 68 + ProtectKernelTunables = " yes "; 69 + RestrictAddressFamilies = " 70 + AF_UNIX 71 + AF_INET 72 + AF_INET6 "; 73 + RestrictNamespaces = " yes "; 74 + RestrictRealtime = " yes "; 75 + SystemCallFilter = "~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap"; 76 + ReadWritePaths = cfg.dataFolder; 77 + StateDirectory = baseNameOf cfg.dataFolder; 78 + }; 79 + }; 80 + 81 + users.users = optionalAttrs (cfg.user == "gpodder") ({ 82 + gpodder = { 83 + description = "gpodder service user"; 84 + name = cfg.user; 85 + group = cfg.group; 86 + isSystemUser = true; 87 + }; 88 + }); 89 + 90 + users.groups = optionalAttrs (cfg.group == "gpodder") ({ 91 + gpodder = { }; 92 + }); 93 + 94 + # systemd.services.gpodder-install = { 95 + # description = "gpodder install service"; 96 + # wantedBy = [ "multi-user.target" ]; 97 + # before = [ "gpodder.service" ]; 98 + # path = with pkgs; [ gpodder2go ]; 99 + 100 + # serviceConfig = { 101 + # User = cfg.user; 102 + # Type = "oneshot"; 103 + # CacheDirectory = "gpodder"; 104 + # # Stores sessions. 105 + # CacheDirectoryMode = "700"; 106 + # ConfigurationDirectory = "gpodder"; 107 + # LogsDirectory = "gpodder"; 108 + # StateDirectory = "gpodder"; 109 + # }; 110 + 111 + # script = '' 112 + # if [ ! -f "${cfg.dataFolder}/installed" ]; then 113 + # ${pkgs.gpodder2go}/bin/gpodder2go init 114 + # touch "${cfg.dataFolder}/installed" 115 + # fi 116 + # ''; 117 + # }; 118 + }; 119 + } 120 +
+198 -212
modules/nixos/wallabag.nix
··· 1 - { config, options, lib, pkgs, ... }: 2 - 3 - with lib; 1 + { config, lib, pkgs, ... }: 4 2 let 5 - cfg = config.services.wallabag; 3 + # Based on https://github.com/wallabag/wallabag/blob/2.6.6/app/config/parameters.yml.dist 4 + settings = { 5 + database_driver = "${cfg.database_type}"; 6 + database_host = null; 7 + database_port = 5432; 8 + database_name = "wallabag"; 9 + database_user = "wallabag"; 10 + database_password = null; 11 + database_path = null; 12 + database_table_prefix = "wallabag_"; 13 + database_socket = "/run/postgresql"; 14 + database_charset = "utf8"; 6 15 7 - poolName = "wallabag"; 16 + domain_name = "http://${cfg.domain}"; 17 + server_name = "Wallabag"; 8 18 9 - configFile = pkgs.writeTextFile { 10 - name = "wallabag-config"; 11 - text = cfg.conf; 12 - destination = "/app/config/parameters.yml"; 13 - }; 19 + # Needs an explicit command since Symfony version used by Wallabag does not yet support the `native` transport 20 + # and the `sendmail` transport does not respect `sendmail_path` configured in `php.ini`. 21 + mailer_dsn = "sendmail://default?command=/run/wrappers/bin/sendmail%%20-t%%20-i"; 14 22 15 - appDir = pkgs.buildEnv { 16 - name = "wallabag-app-dir"; 17 - ignoreCollisions = true; 18 - checkCollisionContents = false; 19 - paths = [ configFile "${cfg.package}" ]; 20 - pathsToLink = [ "/app" "/src" "/translations" ]; 21 - }; 23 + locale = "en"; 22 24 23 - # See there for available commands: 24 - # https://doc.wallabag.org/en/admin/console_commands.html 25 - # A user can be made admin with the fos:user:promote --super <user> command 26 - console = pkgs.writeShellScriptBin "wallabag-console" '' 27 - export WALLABAG_DATA="${cfg.dataDir}" 28 - cd "${cfg.dataDir}" 29 - ${pkgs.php}/bin/php ${pkgs.wallabag}/bin/console --env=prod $@ 30 - ''; 25 + # A secret key that's used to generate certain security-related tokens. 26 + # "env(SECRET_FILE)" = "/run/secrets/wallabag"; 27 + # secret = "%env(file:resolve:SECRET_FILE)%"; 31 28 32 - in 33 - { 29 + # two factor stuff 30 + twofactor_auth = false; 31 + twofactor_sender = ""; 34 32 35 - options = { 33 + # fosuser stuff 34 + fosuser_registration = false; 35 + fosuser_confirmation = false; 36 36 37 - services.wallabag = { 38 - enable = mkEnableOption "wallabag"; 37 + # how long the access token should live in seconds for the API 38 + fos_oauth_server_access_token_lifetime = 3600; 39 + # how long the refresh token should life in seconds for the API 40 + fos_oauth_server_refresh_token_lifetime = 1209600; 39 41 40 - user = mkOption { 41 - type = types.str; 42 - default = "nginx"; 43 - description = '' 44 - User account under which both the update daemon and the web-application run. 45 - ''; 46 - }; 42 + from_email = "wallabag@read.mossnet.lan"; 47 43 48 - dataDir = mkOption { 49 - type = types.path; 50 - default = "/var/lib/wallabag"; 51 - description = '' 52 - Data directory. 53 - ''; 54 - }; 44 + # RabbitMQ processing 45 + redis_scheme = "unix"; 46 + redis_host = ""; # Ignored for unix scheme 47 + redis_port = 0; # Ignored for unix scheme 48 + redis_path = config.services.redis.servers.wallabag.unixSocket; 49 + redis_password = null; 55 50 56 - package = mkOption { 57 - type = types.package; 58 - default = pkgs.wallabag; 59 - description = '' 60 - Wallabag package to use. 61 - ''; 62 - }; 51 + # Redis processing 52 + rabbitmq_host = ""; 53 + rabbitmq_port = 0; 54 + rabbitmq_user = ""; 55 + rabbitmq_password = ""; 56 + rabbitmq_prefetch_count = 0; 63 57 64 - hostName = mkOption { 65 - type = types.str; 66 - description = '' 67 - Name of the nginx virtualhost to use and setup. 68 - ''; 69 - }; 58 + # sentry logging 59 + sentry_dsn = null; 60 + } // cfg.parameters; 70 61 71 - poolConfig = mkOption { 72 - type = types.lines; 73 - default = '' 74 - pm = dynamic 75 - pm.max_children = 75 76 - pm.start_servers = 1 77 - pm.min_spare_servers = 1 78 - pm.max_spare_servers = 20 79 - pm.max_requests = 500 80 - catch_workers_output = 1 81 - ''; 82 - description = '' 83 - Options for wallabag's PHP pool. See the documentation on <literal>php-fpm.conf</literal> for details on configuration directives. 84 - ''; 85 - }; 62 + php = cfg.php.package.withExtensions ({ enabled, all }: enabled ++ (with all; [ 63 + imagick 64 + tidy 65 + ])); 86 66 87 - conf = mkOption { 88 - type = types.str; 89 - description = '' 90 - Contents of the wallabag configuration file (parameters.yml) 91 - ''; 92 - }; 93 - }; 67 + commonServiceConfig = { 68 + CacheDirectory = "wallabag"; 69 + # Stores sessions. 70 + CacheDirectoryMode = "700"; 71 + ConfigurationDirectory = "wallabag"; 72 + LogsDirectory = "wallabag"; 73 + StateDirectory = "wallabag"; 74 + # Stores site-credentials-secret-key.txt. 75 + StateDirectoryMode = "700"; 94 76 }; 95 77 78 + cfg = config.services.wallabag; 79 + in { 80 + options.services.wallabag = with lib; { 81 + enable = mkEnableOption (mdDoc "Wallabag read-it-later service"); 96 82 97 - config = mkIf cfg.enable { 83 + package = mkOption { 84 + type = types.package; 85 + default = pkgs.wallabag; 86 + }; 98 87 99 - services.phpfpm.pools."${poolName}" = { 100 - user = "${cfg.user}"; 101 - group = "nginx"; 102 - phpPackage = pkgs.php; 103 - phpEnv = { 104 - WALLABAG_DATA = cfg.dataDir; 105 - PATH = lib.makeBinPath [pkgs.php]; 106 - }; 107 - settings = { 108 - "listen.owner" = "nginx"; 109 - "listen.group" = "nginx"; 110 - "listen.mode" = "0600"; 111 - "user" = "${cfg.user}"; 112 - "group" = "nginx"; 113 - "pm" = "dynamic"; 114 - "pm.max_children" = "75"; 115 - "pm.min_spare_servers" = "5"; 116 - "pm.max_spare_servers" = "20"; 117 - "pm.max_requests" = "10"; 118 - "catch_workers_output" = "1"; 119 - "php_admin_value[error_log]" = "stderr"; 120 - "php_admin_flag[log_errors]" = true; 121 - }; 88 + php.package = mkOption { 89 + type = types.package; 90 + default = pkgs.php; 122 91 }; 123 - services.phpfpm.phpOptions = '' 124 - max_execution_time = 120 125 - ''; 126 92 127 - services.nginx.enable = mkDefault true; 128 - environment.systemPackages = [ console ]; 93 + parameters = mkOption { 94 + type = types.attrsOf types.str; 95 + default = {}; 96 + description = mdDoc "Parameters to override from the default. See <https://doc.wallabag.org/en/admin/parameters.html> for values."; 97 + }; 129 98 130 - # services.nginx.virtualHosts."${cfg.hostName}" = { 131 - # forceSSL = false; 132 - # enableACME = false; 133 - # extraConfig = '' 134 - # error_log /var/log/nginx/wallabag_error.log; 135 - # access_log /var/log/nginx/wallabag_access.log; 136 - # ''; 99 + database_type = mkOption { 100 + type = types.enum [ 101 + "pdo_sqlite3" 102 + "pdo_pgsql" 103 + ]; 104 + default = if config.services.postgresql.enable 105 + then "pdo_pgsql" 106 + else "pdo_sqlite3"; 107 + defaultText = '' 108 + if config.services.postgresql.enable 109 + then "pdo_pgsql" 110 + else "pdo_sqlite3" 111 + ''; 112 + description = mdDoc '' 113 + The database engine name. Can be pdo_sqlite3 or pdo_pgsql. 114 + ''; 115 + }; 137 116 138 - # root = "${cfg.package}/web"; 139 - # locations."/" = { 140 - # priority = 10; 141 - # tryFiles = "$uri /app.php$is_args$args"; 142 - # }; 143 - # locations."/assets".root = "${cfg.dataDir}/web"; 144 - # locations."~ ^/app\\.php(/|$)" = { 145 - # priority = 100; 146 - # fastcgiParams = { 147 - # SCRIPT_FILENAME = "$realpath_root$fastcgi_script_name"; 148 - # DOCUMENT_ROOT = "$realpath_root"; 149 - # }; 150 - # extraConfig = '' 151 - # fastcgi_pass unix:${config.services.phpfpm.pools."${poolName}".socket}; 152 - # include ${config.services.nginx.package}/conf/fastcgi_params; 153 - # include ${config.services.nginx.package}/conf/fastcgi.conf; 154 - # internal; 155 - # ''; 156 - # }; 157 - # locations."~ \\.php$" = { 158 - # priority = 1000; 159 - # return = "404"; 160 - # }; 161 - # }; 117 + domain = mkOption { 118 + type = types.str; 119 + description = "Bare domain name for Wallabag"; 120 + }; 162 121 122 + virtualHost.enable = mkEnableOption (mdDoc "Define nginx virtualhost for Wallabag"); 123 + }; 163 124 164 - services.nginx.virtualHosts."${cfg.hostName}" = { 165 - enableACME = false; 166 - forceSSL = false; 167 - root = "${cfg.package}/web"; 125 + config = lib.mkIf cfg.enable { 126 + environment.etc."wallabag/parameters.yml" = { 127 + source = pkgs.writeTextFile { 128 + name = "wallabag-config"; 129 + text = builtins.toJSON { 130 + parameters = settings; 131 + }; 132 + }; 133 + }; 134 + 135 + services.nginx = lib.mkIf cfg.virtualHost.enable { 136 + enable = true; 137 + 138 + virtualHosts = { 139 + "${cfg.domain}" = { 140 + root = "${pkgs.wallabag}/web"; 141 + 142 + extraConfig = '' 143 + add_header X-Frame-Options SAMEORIGIN; 144 + add_header X-Content-Type-Options nosniff; 145 + add_header X-XSS-Protection "1; mode=block"; 146 + ''; 168 147 169 - extraConfig = '' 170 - add_header X-Frame-Options SAMEORIGIN; 171 - add_header X-Content-Type-Options nosniff; 172 - add_header X-XSS-Protection "1; mode=block"; 173 - ''; 148 + locations."/" = { 149 + extraConfig = '' 150 + try_files $uri /app.php$is_args$args; 151 + ''; 152 + }; 174 153 175 - locations."/" = { 176 - tryFiles = "$uri /app.php$is_args$args"; 177 - }; 154 + locations."/assets".root = "${pkgs.wallabag}/app/web"; 178 155 179 - locations."/assets".root = "${cfg.dataDir}/web"; 156 + locations."~ ^/app\\.php(/|$)" = { 157 + extraConfig = '' 158 + fastcgi_pass unix:${config.services.phpfpm.pools.wallabag.socket}; 159 + include ${config.services.nginx.package}/conf/fastcgi.conf; 160 + fastcgi_param PATH_INFO $fastcgi_path_info; 161 + fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; 162 + fastcgi_param SCRIPT_FILENAME ${pkgs.wallabag}/web/$fastcgi_script_name; 163 + fastcgi_param DOCUMENT_ROOT ${pkgs.wallabag}/web; 164 + fastcgi_read_timeout 120; 165 + internal; 166 + ''; 167 + }; 180 168 181 - locations."~ ^/app\\.php(/|$)" = { 182 - fastcgiParams = { 183 - SCRIPT_FILENAME = "$realpath_root$fastcgi_script_name"; 184 - DOCUMENT_ROOT = "$realpath_root"; 169 + locations."~ /(?!app)\\.php$" = { 170 + extraConfig = '' 171 + return 404; 172 + ''; 173 + }; 185 174 }; 186 - extraConfig = '' 187 - fastcgi_pass unix:${config.services.phpfpm.pools."${poolName}".socket}; 188 - include ${config.services.nginx.package}/conf/fastcgi_params; 189 - include ${config.services.nginx.package}/conf/fastcgi.conf; 190 - internal; 191 - ''; 192 - # extraConfig = '' 193 - # fastcgi_pass unix:${config.services.phpfpm.pools."${poolName}".socket}; 194 - # fastcgi_split_path_info ^(.+\.php)(/.*)$; 195 - # include ${pkgs.nginx}/conf/fastcgi_params; 196 - # fastcgi_param SCRIPT_FILENAME ${cfg.package}/web/$fastcgi_script_name; 197 - # fastcgi_param DOCUMENT_ROOT ${cfg.package}/web; 198 - # fastcgi_read_timeout 120; 199 - # internal; 200 - # ''; 201 175 }; 176 + }; 202 177 203 - locations."~ /(?!app)\\.php$" = { 204 - extraConfig = '' 205 - return 404; 206 - ''; 178 + services.phpfpm.pools.wallabag = { 179 + user = config.users.users.wallabag.name; 180 + phpPackage = php; 181 + settings = { 182 + "catch_workers_output" = true; 183 + 184 + "listen.owner" = config.services.nginx.user; 185 + "listen.group" = "root"; 186 + "pm" = "dynamic"; 187 + "pm.max_children" = 5; 188 + "pm.start_servers" = 2; 189 + "pm.min_spare_servers" = 1; 190 + "pm.max_spare_servers" = 3; 191 + "php_admin_value[error_log]" = "/var/log/wallabag/error.log"; 192 + "php_admin_value[access_log]" = "/var/log/wallabag/access.log"; 193 + "php_admin_flag[log_errors]" = true; 194 + }; 195 + phpOptions = '' 196 + ; Set up $_ENV superglobal. 197 + ; http://php.net/request-order 198 + variables_order = "EGPCS" 199 + # Wallabag will crash on start-up. 200 + # https://github.com/wallabag/wallabag/issues/6042 201 + # error_reporting = E_ALL & ~E_USER_DEPRECATED & ~E_DEPRECATED 202 + ''; 203 + settings = { 204 + # Accept settings from the systemd service. 205 + clear_env = false; 207 206 }; 208 207 }; 209 208 209 + users.users.wallabag = { 210 + isSystemUser = true; 211 + group = "wallabag"; 212 + }; 213 + users.groups.wallabag = {}; 214 + services.redis.servers.wallabag = { 215 + enable = true; 216 + user = "wallabag"; 217 + }; 218 + services.rabbitmq.enable = false; 219 + 220 + systemd.services.phpfpm-wallabag.serviceConfig = commonServiceConfig; 221 + 210 222 systemd.services.wallabag-install = { 211 223 description = "Wallabag install service"; 212 224 wantedBy = [ "multi-user.target" ]; 213 225 before = [ "phpfpm-wallabag.service" ]; 214 - after = [ "mysql.service" "postgresql.service" ]; 226 + after = [ "postgresql.service" ]; 215 227 path = with pkgs; [ coreutils php phpPackages.composer ]; 216 228 217 229 serviceConfig = { 218 - User = cfg.user; 230 + User = "wallabag"; 219 231 Type = "oneshot"; 220 - RemainAfterExit = "yes"; 221 - PermissionsStartOnly = true; 222 - }; 223 - 224 - preStart = '' 225 - mkdir -p "${cfg.dataDir}" 226 - chown ${cfg.user}:nginx "${cfg.dataDir}" 227 - ''; 232 + } // commonServiceConfig; 228 233 229 234 script = '' 230 - echo "Setting up wallabag files in ${cfg.dataDir} ..." 231 - cd "${cfg.dataDir}" 232 - 233 - rm -rf var/cache/* 234 - rm -f app src translations 235 - ln -sf ${appDir}/app app 236 - ln -sf ${appDir}/src src 237 - ln -sf ${appDir}/translations translations 238 - ln -sf ${cfg.package}/composer.{json,lock} . 239 - 240 - export WALLABAG_DATA="${cfg.dataDir}" 241 - if [ ! -f installed ]; then 242 - echo "Install file not found, installing ..." 243 - php ${cfg.package}/bin/console --env=prod doctrine:database:create --if-not-exists --no-interaction 244 - php ${cfg.package}/bin/console --env=prod doctrine:migrations:migrate --no-interaction 245 - # Until https://github.com/wallabag/wallabag/issues/3662 is fixed 246 - # yes no | php ${cfg.package}/bin/console --env=prod wallabag:install 247 - touch installed 248 - else 249 - php ${cfg.package}/bin/console --env=prod doctrine:migrations:migrate --no-interaction 250 - fi 251 - php ${cfg.package}/bin/console --env=prod cache:clear 252 - ''; 235 + if [ ! -f "$STATE_DIRECTORY/installed" ]; then 236 + php ${pkgs.wallabag}/bin/console --env=prod wallabag:install 237 + touch "$STATE_DIRECTORY/installed" 238 + else 239 + php ${pkgs.wallabag}/bin/console --env=prod doctrine:migrations:migrate --no-interaction 240 + fi 241 + php ${pkgs.wallabag}/bin/console --env=prod cache:clear 242 + ''; 253 243 }; 254 - }; 255 - 256 - meta = with stdenv.lib; { 257 - maintainers = with maintainers; [ nadrieril ]; 258 244 }; 259 245 }
+15 -3
mount-crypted.sh
··· 1 1 #!/usr/bin/env bash 2 + 3 + # nix-shell https://github.com/sgillespie/nixos-yubikey-luks/archive/master.tar.gz 4 + 5 + rbtohex() { 6 + ( od -An -vtx1 | tr -d ' \n' ) 7 + } 8 + 9 + hextorb() { 10 + ( tr '[:lower:]' '[:upper:]' | sed -e 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI'| xargs printf ) 11 + } 12 + 2 13 key_length=512 3 - iterations="$(head -n 2 /boot/crypted-storage/default)" 4 - salt="$(head -n 1 /boot/crypted-storage/default)" 14 + iterations=1000000 15 + salt="$(head -n 1 /mnt/crypt-storage/default)" 5 16 chal="$(echo -n $salt | openssl dgst -binary -sha512 | rbtohex)" 6 17 resp="$(ykchalresp -2 -x $chal 2>/dev/null)" 7 - user_key="$(read -s)" 18 + user_key= 19 + read -r user_key 8 20 luks_key="$(echo -n $user_key | pbkdf2-sha512 $(($key_length / 8)) $iterations $resp | rbtohex)" 9 21 echo -n $luks_key | hextorb | sudo cryptsetup luksOpen /dev/sda2 crypted --key-file=-
+27 -1
overlays/default.nix
··· 11 11 propagatedBuildInputs = prevAttrs.propagatedBuildInputs ++ [ final.python3.pkgs.jsonschema ]; # allow kobo sync stuff 12 12 }); 13 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 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 = ""; 15 41 }); 16 42 17 43 # Need to do server and agent too, maybe
+7 -2
pkgs/default.nix
··· 5 5 plymouth-themes = pkgs.callPackage ./plymouth.nix { }; 6 6 tic-80 = pkgs.callPackage ./tic-80.nix { }; 7 7 fennel-ls = pkgs.callPackage ./fennel-ls.nix { }; 8 - kobopatch = pkgs.callPackage ./kobopatch.nix { }; 9 - my-mautrix-discord = pkgs.callPackage ./mautrix-discord.nix { }; # Handled by matrix-appservices input 8 + # kobopatch = pkgs.callPackage ./kobopatch.nix { }; 9 + # my-mautrix-discord = pkgs.callPackage ./mautrix-discord.nix { }; # Handled by matrix-appservices input 10 10 ulogger-server = pkgs.callPackage ./ulogger.nix { }; 11 + # Wallabag is now an overlay 12 + # TODO: we still use the patch from this folder though 13 + my-wallabag = pkgs.callPackage ./wallabag.nix { }; 14 + # mautrix-slack = pkgs.callPackage ./mautrix-slack.nix { }; 15 + gpodder2go = pkgs.callPackage ./gpodder2go.nix { }; 11 16 }
+14
pkgs/gpodder2go.nix
··· 1 + { pkgs, ... }: 2 + 3 + pkgs.buildGoModule rec { 4 + name = "gpodder2go"; 5 + src = pkgs.fetchFromGitHub { 6 + owner = "oxtyped"; 7 + repo = "gpodder2go"; 8 + rev = "v0.1.2"; 9 + hash = "sha256-RAt0rd4DZwI7b7IEFd1o4s4ivADzgzBzBaeGVL8OmYo"; 10 + }; 11 + 12 + vendorHash = "sha256-mbSgY5WjIAesT27uRgaiRF3N06yuUntjTp6kjUMh6Bw"; 13 + doCheck = false; 14 + }
+3 -3
pkgs/kobopatch.nix
··· 1 1 { lib, buildGoModule, fetchFromGitHub }: 2 2 3 - buildGoModule rec { 3 + buildGoModule { 4 4 name = "kobopatch"; 5 5 version = "0.15.0"; 6 6 7 - vendorSha256 = "1i6srhyig4x8mywyc2l8wzzm1afvb7wxmjsr84c447sb1xss6p7x"; 7 + vendorHash = "sha256-1i6srhyig4x8mywyc2l8wzzm1afvb7wxmjsr84c447sb1xss6p7x"; 8 8 9 9 src = fetchFromGitHub { 10 10 owner = "geek1011"; 11 11 repo = "kobopatch"; 12 12 rev = "653070c67c83ec61884854efc4f8a3132d82a2e5"; 13 - sha256 = "09hr3zh0w0f78cx40d2yydqv0mmjdh4iwdgia7sikraphvha85nn"; 13 + hash = "sha256-09hr3zh0w0f78cx40d2yydqv0mmjdh4iwdgia7sikraphvha85nn"; 14 14 }; 15 15 16 16 meta = with lib; {
+1 -1
pkgs/koboutils.nix
··· 4 4 name = "koboutils"; 5 5 version = "git_2020-04-08"; 6 6 7 - vendorSha256 = "1hqvizvbc29yib6awmvlklxkq7j8c0d32gxsipdiwhkh79xbd6wq"; 7 + vendorha256 = "1hqvizvbc29yib6awmvlklxkq7j8c0d32gxsipdiwhkh79xbd6wq"; 8 8 deleteVendor = true; 9 9 10 10 src = fetchFromGitHub {
-29
pkgs/mautrix-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
··· 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
··· 10 10 }; 11 11 buildInputs = with pkgs; [ 12 12 gcc 13 - pkgconfig 13 + pkg-config 14 14 autoconf 15 15 automake 16 16 libtool ··· 27 27 gtk3-x11 28 28 cmake 29 29 cmakeCurses 30 - elementary-cmake-modules 30 + # elementary-cmake-modules 31 31 extra-cmake-modules 32 32 libglvnd 33 33 mesa_glu 34 34 mesa_glu 35 35 freeglut 36 - ] ++ lib.optional stdenv.isLinux alsaLib; 36 + ] ++ lib.optional stdenv.isLinux alsa-lib; 37 37 38 38 configurePhase = '' 39 39 echo [DIRECTORY] $(pwd)
+55
pkgs/wallabag-data.patch
··· 1 + diff --git a/app/AppKernel.php b/app/AppKernel.php 2 + index 61b734e06..0902c20fc 100644 3 + --- a/app/AppKernel.php 4 + +++ b/app/AppKernel.php 5 + @@ -64,12 +64,12 @@ class AppKernel extends Kernel 6 + 7 + public function getCacheDir() 8 + { 9 + - return dirname(__DIR__) . '/var/cache/' . $this->getEnvironment(); 10 + + return getenv('CACHE_DIRECTORY') . '/' . $this->getEnvironment(); 11 + } 12 + 13 + public function getLogDir() 14 + { 15 + - return dirname(__DIR__) . '/var/logs'; 16 + + return getenv('LOGS_DIRECTORY'); 17 + } 18 + 19 + public function registerContainerConfiguration(LoaderInterface $loader) 20 + diff --git a/app/config/config.yml b/app/config/config.yml 21 + index 7f0a4ca6c..77b5175c8 100644 22 + --- a/app/config/config.yml 23 + +++ b/app/config/config.yml 24 + @@ -1,5 +1,7 @@ 25 + imports: 26 + - - { resource: parameters.yml } 27 + + # Unfortunately, we cannot use %env(string:CONFIGURATION_DIRECTORY)%. Hardcoding the path for simplicity. 28 + + # https://symfony.com/doc/current/service_container/import.html#importing-configuration-with-imports 29 + + - { resource: '/etc/wallabag/parameters.yml' } 30 + - { resource: security.yml } 31 + - { resource: services.yml } 32 + - { resource: wallabag.yml } 33 + @@ -28,7 +30,7 @@ framework: 34 + session: 35 + # handler_id set to null will use default session handler from php.ini 36 + handler_id: session.handler.native_file 37 + - save_path: "%kernel.project_dir%/var/sessions/%kernel.environment%" 38 + + save_path: "%env(string:CACHE_DIRECTORY)%/sessions/%kernel.environment%" 39 + cookie_secure: auto 40 + fragments: ~ 41 + http_method_override: true 42 + diff --git a/app/config/wallabag.yml b/app/config/wallabag.yml 43 + index bd57d6377..8e1cd0970 100644 44 + --- a/app/config/wallabag.yml 45 + +++ b/app/config/wallabag.yml 46 + @@ -35,7 +35,7 @@ wallabag_core: 47 + fetching_error_message: | 48 + wallabag can't retrieve contents for this article. Please <a href="https://doc.wallabag.org/en/user/errors_during_fetching.html#how-can-i-help-to-fix-that">troubleshoot this issue</a>. 49 + api_limit_mass_actions: 10 50 + - encryption_key_path: "%kernel.project_dir%/data/site-credentials-secret-key.txt" 51 + + encryption_key_path: "%env(string:STATE_DIRECTORY)%/site-credentials-secret-key.txt" 52 + default_internal_settings: 53 + - 54 + name: share_public 55 +
+57
pkgs/wallabag.nix
··· 1 + { lib 2 + , stdenv 3 + , fetchurl 4 + }: 5 + 6 + # Point the environment variable $WALLABAG_DATA to a data directory 7 + # that contains the folder `app` which must be a clone of 8 + # wallabag's configuration files with your customized `parameters.yml`. 9 + # In practice you need to copy `${pkgs.wallabag}/app` and the 10 + # customizzed `parameters.yml` to $WALLABAG_DATA. 11 + # These need to be updated every package upgrade. 12 + # 13 + # After a package upgrade, empty the `var/cache` folder or unexpected 14 + # error will occur. 15 + 16 + let 17 + pname = "wallabag"; 18 + version = "2.6.9"; 19 + in 20 + stdenv.mkDerivation { 21 + inherit pname version; 22 + 23 + # Release tarball includes vendored files 24 + src = fetchurl { 25 + url = "https://github.com/wallabag/wallabag/releases/download/${version}/wallabag-${version}.tar.gz"; 26 + hash = "sha256-V4s5/y9fFAmZ+WnUxU03UyRivEihD1ZUKQOOq4TLEKw="; 27 + }; 28 + 29 + patches = [ 30 + ./wallabag-data.patch # exposes $WALLABAG_DATA 31 + ]; 32 + 33 + dontBuild = true; 34 + 35 + installPhase = '' 36 + runHook preInstall 37 + 38 + mkdir $out 39 + cp -R * $out/ 40 + 41 + runHook postInstall 42 + ''; 43 + 44 + meta = with lib; { 45 + description = "wallabag is a self hostable application for saving web pages"; 46 + longDescription = '' 47 + wallabag is a self-hostable PHP application allowing you to not 48 + miss any content anymore. Click, save and read it when you can. 49 + It extracts content so that you can read it when you have time. 50 + ''; 51 + license = licenses.mit; 52 + homepage = "http://wallabag.org"; 53 + changelog = "https://github.com/wallabag/wallabag/releases/tag/${version}"; 54 + maintainers = with maintainers; [ schneefux ]; 55 + platforms = platforms.all; 56 + }; 57 + }
-3
secrets/secrets.nix
··· 6 6 lituus = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH2lAb33LH3JNuOfBXt971u0tHe+NURFecQdfjwEj+C+ root@lituus"; 7 7 helix = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAKrL6IDHNnHmxi0q9nzu87NOyidPm3HpE7klU368lEf root@helix"; 8 8 helix2 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK2G81z1E51ioJQGLHnTJEjgSdBqLM6mb72Z+0atE6Bf root@helix"; 9 - work = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHOnfDvR2D2nGnC+DZYDUXiokzz+eLfZwkp+O8WjWutp anishlakhwara@Anishs-MacBook-Pro.local"; 10 9 curve = [ system user ]; 11 10 allUserKeys = [ system user mossnet ]; 12 11 systemOnly = [ system mossnet lituus helix ]; ··· 35 34 "box-wg.age".publicKeys = [ mossnet ]; 36 35 "wallabag-password.age".publicKeys = [ mossnet ]; 37 36 "wallabag-secret.age".publicKeys = [ mossnet ]; 38 - 39 - "work-wg.age".publicKeys = [ work user system ]; 40 37 }
secrets/work-wg.age

This is a binary file and will not be displayed.