Compare changes

Choose any two refs to compare.

Changed files
+4271 -3716
.aider.tags.cache.v3
.direnv
apps
dns
home
hosts
box
curve
darwin
development
helix
lituus
profiles
core
desktop
dns
finance
freshrss
gitea
gonic
gpodder
headphones
matrix
microbin
mossnet-hosts
music
postgres_upgrade_script
rss-bridge
sync
music
website
ulogger-server
wallabag
wireguard-server
users
anish
modules
overlays
pkgs
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
-1
.gitignore
··· 1 - .direnv/
+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
+4 -5
dns/dnsconfig.js
··· 6 6 7 7 D("lakhwara.com", REG_NONE, 8 8 DnsProvider(DNS_HEDNS), 9 - DefaultTTL(300), 9 + DefaultTTL(86400), 10 10 //SOA('@', 'ns1.he.net.', 'hostmaster.he.net.', 2022041702, 86400, 7200, 3600000, 86400, TTL(172800)), 11 - A('anish', '69.61.2.203'), 12 - A('@', '69.61.2.203'), 13 - //A('coaching', '103.16.130.98'), 11 + A('anish', '103.16.130.98'), 12 + A('coaching', '103.16.130.98'), 14 13 TXT('anish', 'datkey=dat://1a240a14fab2bae9c85ebad29bddc04505aaba24e5fb809c2ccb4cdf71e3a7d5'), 15 14 CNAME('fm1._domainkey', 'fm1.lakhwara.com.dkim.fmhosted.com.'), 16 15 CNAME('fm2._domainkey', 'fm2.lakhwara.com.dkim.fmhosted.com.'), 17 16 CNAME('fm3._domainkey', 'fm3.lakhwara.com.dkim.fmhosted.com.'), 17 + A('@', '103.16.130.98'), 18 18 MX('@', 10, 'in1-smtp.messagingengine.com.'), 19 19 MX('@', 20, 'in2-smtp.messagingengine.com.'), 20 20 //NAMESERVER('ns1.he.net.'), ··· 39 39 A('git', '69.61.2.203', TTL(300)), 40 40 A('bin', '69.61.2.203', TTL(300)), 41 41 A('ci', '69.61.2.203', TTL(300)), 42 - A('write', '69.61.2.203', TTL(300)), 43 42 // vultr -> nulled: lituus 44 43 A('@', '45.77.48.108', TTL(300)), 45 44 A('jitsi', '45.77.48.108', TTL(300)),
dns/test_nullhex.sh
+756 -65
flake.lock
··· 6 6 "home-manager": "home-manager", 7 7 "nixpkgs": [ 8 8 "nixpkgs" 9 - ], 10 - "systems": "systems" 9 + ] 11 10 }, 12 11 "locked": { 13 - "lastModified": 1723293904, 14 - "narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=", 12 + "lastModified": 1690228878, 13 + "narHash": "sha256-9Xe7JV0krp4RJC9W9W9WutZVlw6BlHTFMiUP/k48LQY=", 15 14 "owner": "ryantm", 16 15 "repo": "agenix", 17 - "rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41", 16 + "rev": "d8c973fd228949736dedf61b7f8cc1ece3236792", 18 17 "type": "github" 19 18 }, 20 19 "original": { ··· 35 34 }, 36 35 "locked": { 37 36 "lastModified": 1682226636, 38 - "narHash": "sha256-fmETHfUtQ5zOVr/4MT5wE7eNALCSQCnEUYZYmV3UEwg=", 37 + "narHash": "sha256-f/XuEoZYh+aubCfjeduvwZjd5X7IgRYnmuuhGsdfP/U=", 39 38 "ref": "main", 40 39 "rev": "095d14ff2469c8f3de7cbf45d229c0f46a733aae", 41 40 "revCount": 77, ··· 48 47 "url": "ssh://gitea@git.sealight.xyz/aynish/basant" 49 48 } 50 49 }, 50 + "brew-src": { 51 + "flake": false, 52 + "locked": { 53 + "lastModified": 1705326576, 54 + "narHash": "sha256-9PvMgHgdbpb5vBO8fHCRufodR731ynzGMF9+68vKWck=", 55 + "owner": "Homebrew", 56 + "repo": "brew", 57 + "rev": "1c612baa096c69f2fcb221c74e6f5b9979efdcee", 58 + "type": "github" 59 + }, 60 + "original": { 61 + "owner": "Homebrew", 62 + "ref": "4.2.4", 63 + "repo": "brew", 64 + "type": "github" 65 + } 66 + }, 67 + "crane": { 68 + "flake": false, 69 + "locked": { 70 + "lastModified": 1686108916, 71 + "narHash": "sha256-looLH5MdY4erLiJw0XwQohGdr0fJL9y6TJY3898RA2U=", 72 + "owner": "ipetkov", 73 + "repo": "crane", 74 + "rev": "8ab1a49432695bd80ff4b7f6c6515da0e926d922", 75 + "type": "github" 76 + }, 77 + "original": { 78 + "owner": "ipetkov", 79 + "ref": "v0.12.2", 80 + "repo": "crane", 81 + "type": "github" 82 + } 83 + }, 51 84 "darwin": { 52 85 "inputs": { 53 86 "nixpkgs": [ ··· 56 89 ] 57 90 }, 58 91 "locked": { 59 - "lastModified": 1700795494, 60 - "narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=", 92 + "lastModified": 1673295039, 93 + "narHash": "sha256-AsdYgE8/GPwcelGgrntlijMg4t3hLFJFCRF3tL5WVjA=", 61 94 "owner": "lnl7", 62 95 "repo": "nix-darwin", 63 - "rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d", 96 + "rev": "87b9d090ad39b25b2400029c64825fc2a8868943", 64 97 "type": "github" 65 98 }, 66 99 "original": { ··· 70 103 "type": "github" 71 104 } 72 105 }, 106 + "darwin_2": { 107 + "inputs": { 108 + "nixpkgs": [ 109 + "nixpkgs" 110 + ] 111 + }, 112 + "locked": { 113 + "lastModified": 1747752302, 114 + "narHash": "sha256-XqNAcEFfe5tJZGlx+Su0G67ZwRwZmHNWwiMK0fji0Hw=", 115 + "owner": "nix-darwin", 116 + "repo": "nix-darwin", 117 + "rev": "74ecd01d2c122f8a4a48066ab1d48f3e01671671", 118 + "type": "github" 119 + }, 120 + "original": { 121 + "owner": "nix-darwin", 122 + "ref": "nix-darwin-25.05", 123 + "repo": "nix-darwin", 124 + "type": "github" 125 + } 126 + }, 73 127 "deploy-rs": { 74 128 "inputs": { 75 129 "flake-compat": "flake-compat", ··· 79 133 "utils": "utils" 80 134 }, 81 135 "locked": { 82 - "lastModified": 1718194053, 83 - "narHash": "sha256-FaGrf7qwZ99ehPJCAwgvNY5sLCqQ3GDiE/6uLhxxwSY=", 136 + "lastModified": 1704875591, 137 + "narHash": "sha256-eWRLbqRcrILgztU/m/k7CYLzETKNbv0OsT2GjkaNm8A=", 84 138 "owner": "serokell", 85 139 "repo": "deploy-rs", 86 - "rev": "3867348fa92bc892eba5d9ddb2d7a97b9e127a8a", 140 + "rev": "1776009f1f3fb2b5d236b84d9815f2edee463a9b", 87 141 "type": "github" 88 142 }, 89 143 "original": { ··· 110 164 "dirt-samples-src": { 111 165 "flake": false, 112 166 "locked": { 113 - "lastModified": 1698439458, 114 - "narHash": "sha256-Mp8qBpsOvW9Zguv95Kv7EU6S3ICaF2aO02Wz6xGURtE=", 167 + "lastModified": 1588278411, 168 + "narHash": "sha256-h8vQxRym6QzNLOTZU7A43VCHuG0H77l+BFwXnC0L1CE=", 115 169 "owner": "tidalcycles", 116 170 "repo": "dirt-samples", 117 - "rev": "9a6dff8f9ec3cd55b287290cf04e01afa6b8f532", 171 + "rev": "66d432418c9a7d82cf049d9246adfa62f46df2a6", 118 172 "type": "github" 119 173 }, 120 174 "original": { 121 175 "owner": "tidalcycles", 176 + "ref": "master", 122 177 "repo": "dirt-samples", 123 178 "type": "github" 124 179 } ··· 130 185 ] 131 186 }, 132 187 "locked": { 133 - "lastModified": 1724031427, 134 - "narHash": "sha256-o1HdAf+7IGv9M13R3c+zc/sJ0QgeEnhsvHBcodI4UpM=", 188 + "lastModified": 1690739034, 189 + "narHash": "sha256-roW02IaiQ3gnEEDMCDWL5YyN+C4nBf/te6vfL7rG0jk=", 135 190 "owner": "nix-community", 136 191 "repo": "disko", 137 - "rev": "4e719b38fa7c85f4f65d0308ca7084c91e7bdd6d", 192 + "rev": "4015740375676402a2ee6adebc3c30ea625b9a94", 138 193 "type": "github" 139 194 }, 140 195 "original": { ··· 143 198 "type": "github" 144 199 } 145 200 }, 201 + "dream2nix": { 202 + "inputs": { 203 + "devshell": [ 204 + "sg-nvim", 205 + "nci" 206 + ], 207 + "flake-compat": [ 208 + "sg-nvim", 209 + "nci" 210 + ], 211 + "flake-parts": [ 212 + "sg-nvim", 213 + "nci", 214 + "parts" 215 + ], 216 + "nix-unit": [ 217 + "sg-nvim", 218 + "nci" 219 + ], 220 + "nixpkgs": [ 221 + "sg-nvim", 222 + "nci", 223 + "nixpkgs" 224 + ], 225 + "pre-commit-hooks": [ 226 + "sg-nvim", 227 + "nci" 228 + ] 229 + }, 230 + "locked": { 231 + "lastModified": 1696373678, 232 + "narHash": "sha256-D5yaEkxi7VnoRsBDeHYB86FikFYDL/vq77ajo3Pa3Og=", 233 + "owner": "nix-community", 234 + "repo": "dream2nix", 235 + "rev": "5e2577caaf87661e29405db7e117bda57b0e749d", 236 + "type": "github" 237 + }, 238 + "original": { 239 + "owner": "nix-community", 240 + "repo": "dream2nix", 241 + "type": "github" 242 + } 243 + }, 146 244 "flake-compat": { 147 245 "flake": false, 148 246 "locked": { ··· 175 273 "type": "github" 176 274 } 177 275 }, 276 + "flake-compat_3": { 277 + "flake": false, 278 + "locked": { 279 + "lastModified": 1673956053, 280 + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", 281 + "owner": "edolstra", 282 + "repo": "flake-compat", 283 + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", 284 + "type": "github" 285 + }, 286 + "original": { 287 + "owner": "edolstra", 288 + "repo": "flake-compat", 289 + "type": "github" 290 + } 291 + }, 292 + "flake-parts": { 293 + "inputs": { 294 + "nixpkgs-lib": "nixpkgs-lib" 295 + }, 296 + "locked": { 297 + "lastModified": 1696343447, 298 + "narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=", 299 + "owner": "hercules-ci", 300 + "repo": "flake-parts", 301 + "rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4", 302 + "type": "github" 303 + }, 304 + "original": { 305 + "owner": "hercules-ci", 306 + "repo": "flake-parts", 307 + "type": "github" 308 + } 309 + }, 178 310 "flake-utils": { 179 311 "locked": { 180 312 "lastModified": 1638122382, ··· 205 337 "type": "github" 206 338 } 207 339 }, 340 + "flake-utils_3": { 341 + "inputs": { 342 + "systems": "systems_2" 343 + }, 344 + "locked": { 345 + "lastModified": 1687709756, 346 + "narHash": "sha256-Y5wKlQSkgEK2weWdOu4J3riRd+kV/VCgHsqLNTTWQ/0=", 347 + "owner": "numtide", 348 + "repo": "flake-utils", 349 + "rev": "dbabf0ca0c0c4bce6ea5eaf65af5cb694d2082c7", 350 + "type": "github" 351 + }, 352 + "original": { 353 + "owner": "numtide", 354 + "repo": "flake-utils", 355 + "type": "github" 356 + } 357 + }, 358 + "flake-utils_4": { 359 + "inputs": { 360 + "systems": "systems_3" 361 + }, 362 + "locked": { 363 + "lastModified": 1681202837, 364 + "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", 365 + "owner": "numtide", 366 + "repo": "flake-utils", 367 + "rev": "cfacdce06f30d2b68473a46042957675eebb3401", 368 + "type": "github" 369 + }, 370 + "original": { 371 + "owner": "numtide", 372 + "repo": "flake-utils", 373 + "type": "github" 374 + } 375 + }, 376 + "flake-utils_5": { 377 + "inputs": { 378 + "systems": "systems_4" 379 + }, 380 + "locked": { 381 + "lastModified": 1685518550, 382 + "narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=", 383 + "owner": "numtide", 384 + "repo": "flake-utils", 385 + "rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef", 386 + "type": "github" 387 + }, 388 + "original": { 389 + "owner": "numtide", 390 + "repo": "flake-utils", 391 + "type": "github" 392 + } 393 + }, 394 + "flake-utils_6": { 395 + "inputs": { 396 + "systems": "systems_5" 397 + }, 398 + "locked": { 399 + "lastModified": 1681202837, 400 + "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", 401 + "owner": "numtide", 402 + "repo": "flake-utils", 403 + "rev": "cfacdce06f30d2b68473a46042957675eebb3401", 404 + "type": "github" 405 + }, 406 + "original": { 407 + "owner": "numtide", 408 + "repo": "flake-utils", 409 + "type": "github" 410 + } 411 + }, 412 + "gitignore": { 413 + "inputs": { 414 + "nixpkgs": [ 415 + "sg-nvim", 416 + "pre-commit-nix", 417 + "nixpkgs" 418 + ] 419 + }, 420 + "locked": { 421 + "lastModified": 1660459072, 422 + "narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=", 423 + "owner": "hercules-ci", 424 + "repo": "gitignore.nix", 425 + "rev": "a20de23b925fd8264fd7fad6454652e142fd7f73", 426 + "type": "github" 427 + }, 428 + "original": { 429 + "owner": "hercules-ci", 430 + "repo": "gitignore.nix", 431 + "type": "github" 432 + } 433 + }, 208 434 "grasp": { 209 435 "inputs": { 210 436 "flake-utils": "flake-utils_2", ··· 229 455 }, 230 456 "hardware": { 231 457 "locked": { 232 - "lastModified": 1723310128, 233 - "narHash": "sha256-IiH8jG6PpR4h9TxSGMYh+2/gQiJW9MwehFvheSb5rPc=", 458 + "lastModified": 1691179816, 459 + "narHash": "sha256-WSMwqzU70ZMRHv1CUAfHEEKJuB0c9c9r0F+lJehXfSI=", 234 460 "owner": "nixos", 235 461 "repo": "nixos-hardware", 236 - "rev": "c54cf53e022b0b3c1d3b8207aa0f9b194c24f0cf", 462 + "rev": "87e3122b67587492a617764f88c71991893fcf8a", 237 463 "type": "github" 238 464 }, 239 465 "original": { ··· 250 476 ] 251 477 }, 252 478 "locked": { 253 - "lastModified": 1703113217, 254 - "narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=", 479 + "lastModified": 1682203081, 480 + "narHash": "sha256-kRL4ejWDhi0zph/FpebFYhzqlOBrk0Pl3dzGEKSAlEw=", 255 481 "owner": "nix-community", 256 482 "repo": "home-manager", 257 - "rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1", 483 + "rev": "32d3e39c491e2f91152c84f8ad8b003420eab0a1", 258 484 "type": "github" 259 485 }, 260 486 "original": { ··· 270 496 ] 271 497 }, 272 498 "locked": { 273 - "lastModified": 1720042825, 274 - "narHash": "sha256-A0vrUB6x82/jvf17qPCpxaM+ulJnD8YZwH9Ci0BsAzE=", 499 + "lastModified": 1747556831, 500 + "narHash": "sha256-Qb84nbYFFk0DzFeqVoHltS2RodAYY5/HZQKE8WnBDsc=", 275 501 "owner": "nix-community", 276 502 "repo": "home-manager", 277 - "rev": "e1391fb22e18a36f57e6999c7a9f966dc80ac073", 503 + "rev": "d0bbd221482c2713cccb80220f3c9d16a6e20a33", 278 504 "type": "github" 279 505 }, 280 506 "original": { 281 507 "owner": "nix-community", 282 - "ref": "release-24.05", 508 + "ref": "release-25.05", 283 509 "repo": "home-manager", 284 510 "type": "github" 285 511 } 286 512 }, 513 + "homebrew-bundle": { 514 + "flake": false, 515 + "locked": { 516 + "lastModified": 1709834002, 517 + "narHash": "sha256-KNRwMnyo6ZLphIh2bn02KNOtRf2X3NHqUbS7y4Vmn+M=", 518 + "owner": "homebrew", 519 + "repo": "homebrew-bundle", 520 + "rev": "bb1c80baa7fac67bbffe81a2862c75a5dc7ea4a7", 521 + "type": "github" 522 + }, 523 + "original": { 524 + "owner": "homebrew", 525 + "repo": "homebrew-bundle", 526 + "type": "github" 527 + } 528 + }, 529 + "homebrew-cask": { 530 + "flake": false, 531 + "locked": { 532 + "lastModified": 1709955474, 533 + "narHash": "sha256-pE5x579FqCieeeEmrUtNKoBsMG41WSOfGWtXCTI9FP4=", 534 + "owner": "homebrew", 535 + "repo": "homebrew-cask", 536 + "rev": "43b9db57368e350c116398c7da6cb5401cd37ebe", 537 + "type": "github" 538 + }, 539 + "original": { 540 + "owner": "homebrew", 541 + "repo": "homebrew-cask", 542 + "type": "github" 543 + } 544 + }, 545 + "homebrew-core": { 546 + "flake": false, 547 + "locked": { 548 + "lastModified": 1709956143, 549 + "narHash": "sha256-5eyfpnVhxVv3+n53vp4j9DNx7O+mqtQqUn90JKS1PMM=", 550 + "owner": "homebrew", 551 + "repo": "homebrew-core", 552 + "rev": "a38d7e99bc103e9564208f2d155701d70001c8cc", 553 + "type": "github" 554 + }, 555 + "original": { 556 + "owner": "homebrew", 557 + "repo": "homebrew-core", 558 + "type": "github" 559 + } 560 + }, 561 + "mk-naked-shell": { 562 + "flake": false, 563 + "locked": { 564 + "lastModified": 1681286841, 565 + "narHash": "sha256-3XlJrwlR0nBiREnuogoa5i1b4+w/XPe0z8bbrJASw0g=", 566 + "owner": "yusdacra", 567 + "repo": "mk-naked-shell", 568 + "rev": "7612f828dd6f22b7fb332cc69440e839d7ffe6bd", 569 + "type": "github" 570 + }, 571 + "original": { 572 + "owner": "yusdacra", 573 + "repo": "mk-naked-shell", 574 + "type": "github" 575 + } 576 + }, 577 + "nci": { 578 + "inputs": { 579 + "crane": "crane", 580 + "dream2nix": "dream2nix", 581 + "mk-naked-shell": "mk-naked-shell", 582 + "nixpkgs": "nixpkgs_5", 583 + "parts": "parts", 584 + "rust-overlay": "rust-overlay_2", 585 + "treefmt": "treefmt" 586 + }, 587 + "locked": { 588 + "lastModified": 1696572678, 589 + "narHash": "sha256-rcznf00l41VtjzvEGMWOxaj5J/5twES6n30VwbJMgl0=", 590 + "owner": "yusdacra", 591 + "repo": "nix-cargo-integration", 592 + "rev": "cacb6c94004a35676c193f04afa8821758986bf0", 593 + "type": "github" 594 + }, 595 + "original": { 596 + "owner": "yusdacra", 597 + "repo": "nix-cargo-integration", 598 + "type": "github" 599 + } 600 + }, 601 + "nix-darwin": { 602 + "inputs": { 603 + "nixpkgs": "nixpkgs" 604 + }, 605 + "locked": { 606 + "lastModified": 1688307440, 607 + "narHash": "sha256-7PTjbN+/+b799YN7Tk2SS5Vh8A0L3gBo8hmB7Y0VXug=", 608 + "owner": "LnL7", 609 + "repo": "nix-darwin", 610 + "rev": "b06bab83bdf285ea0ae3c8e145a081eb95959047", 611 + "type": "github" 612 + }, 613 + "original": { 614 + "owner": "LnL7", 615 + "repo": "nix-darwin", 616 + "type": "github" 617 + } 618 + }, 619 + "nix-homebrew": { 620 + "inputs": { 621 + "brew-src": "brew-src", 622 + "flake-utils": "flake-utils_3", 623 + "nix-darwin": "nix-darwin", 624 + "nixpkgs": "nixpkgs_2" 625 + }, 626 + "locked": { 627 + "lastModified": 1705952034, 628 + "narHash": "sha256-H0nk8Gk8kPw4yi2WwOTsSHgPrzSwyNgWEYHk10IJwfc=", 629 + "owner": "zhaofengli-wip", 630 + "repo": "nix-homebrew", 631 + "rev": "40f5ee46b58e7c5f1927e2c5a583dc3d7e571ed9", 632 + "type": "github" 633 + }, 634 + "original": { 635 + "owner": "zhaofengli-wip", 636 + "repo": "nix-homebrew", 637 + "type": "github" 638 + } 639 + }, 287 640 "nix-matrix-appservices": { 288 641 "inputs": { 289 642 "devshell": "devshell", 290 643 "flake-compat": "flake-compat_2", 291 644 "nixlib": "nixlib", 292 - "nixpkgs": "nixpkgs" 645 + "nixpkgs": "nixpkgs_3" 293 646 }, 294 647 "locked": { 295 648 "lastModified": 1683490239, ··· 322 675 }, 323 676 "nixos-hardware": { 324 677 "locked": { 325 - "lastModified": 1723310128, 326 - "narHash": "sha256-IiH8jG6PpR4h9TxSGMYh+2/gQiJW9MwehFvheSb5rPc=", 678 + "lastModified": 1691179816, 679 + "narHash": "sha256-WSMwqzU70ZMRHv1CUAfHEEKJuB0c9c9r0F+lJehXfSI=", 327 680 "owner": "NixOS", 328 681 "repo": "nixos-hardware", 329 - "rev": "c54cf53e022b0b3c1d3b8207aa0f9b194c24f0cf", 682 + "rev": "87e3122b67587492a617764f88c71991893fcf8a", 330 683 "type": "github" 331 684 }, 332 685 "original": { ··· 338 691 }, 339 692 "nixpkgs": { 340 693 "locked": { 694 + "lastModified": 1687274257, 695 + "narHash": "sha256-TutzPriQcZ8FghDhEolnHcYU2oHIG5XWF+/SUBNnAOE=", 696 + "path": "/nix/store/22qgs3skscd9bmrxv9xv4q5d4wwm5ppx-source", 697 + "rev": "2c9ecd1f0400076a4d6b2193ad468ff0a7e7fdc5", 698 + "type": "path" 699 + }, 700 + "original": { 701 + "id": "nixpkgs", 702 + "type": "indirect" 703 + } 704 + }, 705 + "nixpkgs-lib": { 706 + "locked": { 707 + "dir": "lib", 708 + "lastModified": 1696019113, 709 + "narHash": "sha256-X3+DKYWJm93DRSdC5M6K5hLqzSya9BjibtBsuARoPco=", 710 + "owner": "NixOS", 711 + "repo": "nixpkgs", 712 + "rev": "f5892ddac112a1e9b3612c39af1b72987ee5783a", 713 + "type": "github" 714 + }, 715 + "original": { 716 + "dir": "lib", 717 + "owner": "NixOS", 718 + "ref": "nixos-unstable", 719 + "repo": "nixpkgs", 720 + "type": "github" 721 + } 722 + }, 723 + "nixpkgs-stable": { 724 + "locked": { 725 + "lastModified": 1685801374, 726 + "narHash": "sha256-otaSUoFEMM+LjBI1XL/xGB5ao6IwnZOXc47qhIgJe8U=", 727 + "owner": "NixOS", 728 + "repo": "nixpkgs", 729 + "rev": "c37ca420157f4abc31e26f436c1145f8951ff373", 730 + "type": "github" 731 + }, 732 + "original": { 733 + "owner": "NixOS", 734 + "ref": "nixos-23.05", 735 + "repo": "nixpkgs", 736 + "type": "github" 737 + } 738 + }, 739 + "nixpkgs_2": { 740 + "locked": { 741 + "lastModified": 1688049487, 742 + "narHash": "sha256-100g4iaKC9MalDjUW9iN6Jl/OocTDtXdeAj7pEGIRh4=", 743 + "owner": "NixOS", 744 + "repo": "nixpkgs", 745 + "rev": "4bc72cae107788bf3f24f30db2e2f685c9298dc9", 746 + "type": "github" 747 + }, 748 + "original": { 749 + "owner": "NixOS", 750 + "ref": "nixos-unstable", 751 + "repo": "nixpkgs", 752 + "type": "github" 753 + } 754 + }, 755 + "nixpkgs_3": { 756 + "locked": { 341 757 "lastModified": 1662099760, 342 758 "narHash": "sha256-MdZLCTJPeHi/9fg6R9fiunyDwP3XHJqDd51zWWz9px0=", 343 759 "owner": "NixOS", ··· 352 768 "type": "github" 353 769 } 354 770 }, 355 - "nixpkgs_2": { 771 + "nixpkgs_4": { 772 + "locked": { 773 + "lastModified": 1747610100, 774 + "narHash": "sha256-rpR5ZPMkWzcnCcYYo3lScqfuzEw5Uyfh+R0EKZfroAc=", 775 + "owner": "nixos", 776 + "repo": "nixpkgs", 777 + "rev": "ca49c4304acf0973078db0a9d200fd2bae75676d", 778 + "type": "github" 779 + }, 780 + "original": { 781 + "owner": "nixos", 782 + "ref": "nixos-25.05", 783 + "repo": "nixpkgs", 784 + "type": "github" 785 + } 786 + }, 787 + "nixpkgs_5": { 788 + "locked": { 789 + "lastModified": 1696193975, 790 + "narHash": "sha256-mnQjUcYgp9Guu3RNVAB2Srr1TqKcPpRXmJf4LJk6KRY=", 791 + "owner": "NixOS", 792 + "repo": "nixpkgs", 793 + "rev": "fdd898f8f79e8d2f99ed2ab6b3751811ef683242", 794 + "type": "github" 795 + }, 796 + "original": { 797 + "owner": "NixOS", 798 + "ref": "nixos-unstable", 799 + "repo": "nixpkgs", 800 + "type": "github" 801 + } 802 + }, 803 + "nixpkgs_6": { 356 804 "locked": { 357 - "lastModified": 1723938990, 358 - "narHash": "sha256-9tUadhnZQbWIiYVXH8ncfGXGvkNq3Hag4RCBEMUk7MI=", 805 + "lastModified": 1696419054, 806 + "narHash": "sha256-EdR+dIKCfqL3voZUDYwcvgRDOektQB9KbhBVcE0/3Mo=", 359 807 "owner": "nixos", 360 808 "repo": "nixpkgs", 361 - "rev": "c42fcfbdfeae23e68fc520f9182dde9f38ad1890", 809 + "rev": "7131f3c223a2d799568e4b278380cd9dac2b8579", 362 810 "type": "github" 363 811 }, 364 812 "original": { 365 813 "owner": "nixos", 366 - "ref": "nixos-24.05", 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", 367 847 "repo": "nixpkgs", 368 848 "type": "github" 369 849 } 370 850 }, 371 851 "nur": { 372 852 "locked": { 373 - "lastModified": 1724040334, 374 - "narHash": "sha256-Ia4gRRmhFn4oJ4SJKJPDNPomsRRFWU+bqCK7yuiLW4E=", 853 + "lastModified": 1691214006, 854 + "narHash": "sha256-kdfBd+Y0DTOOdgSA6h6iIn403xVj4bzLnXqb7+yM6lQ=", 375 855 "owner": "nix-community", 376 856 "repo": "NUR", 377 - "rev": "24471a48600e18669d13d24c9640b9859357d2cf", 857 + "rev": "963ad2d1bb0a8f59b2c23ab521d4dff2148aad16", 378 858 "type": "github" 379 859 }, 380 860 "original": { ··· 383 863 "type": "github" 384 864 } 385 865 }, 866 + "parts": { 867 + "inputs": { 868 + "nixpkgs-lib": [ 869 + "sg-nvim", 870 + "nci", 871 + "nixpkgs" 872 + ] 873 + }, 874 + "locked": { 875 + "lastModified": 1696343447, 876 + "narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=", 877 + "owner": "hercules-ci", 878 + "repo": "flake-parts", 879 + "rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4", 880 + "type": "github" 881 + }, 882 + "original": { 883 + "owner": "hercules-ci", 884 + "repo": "flake-parts", 885 + "type": "github" 886 + } 887 + }, 386 888 "poonam": { 387 889 "inputs": { 388 890 "nixpkgs": [ ··· 390 892 ] 391 893 }, 392 894 "locked": { 393 - "lastModified": 1724050814, 394 - "narHash": "sha256-THf50ZcBPY6r7/cyvE8bxYDvrctHrWbYaMx4udr4OUM=", 895 + "lastModified": 1724637654, 896 + "narHash": "sha256-YXmWxUEG3NDsLn46Ctrgn7YcT/h0fsCAxKcSgIhCSLo=", 395 897 "ref": "main", 396 - "rev": "7628c26fd92f684ab5c7572c63de4af8b4b3a7b4", 397 - "revCount": 1464, 898 + "rev": "521e360df123a530fc4c99187e3580bd5d086a9d", 899 + "revCount": 1467, 398 900 "type": "git", 399 901 "url": "ssh://gitea@git.sealight.xyz/aynish/kitaab" 400 902 }, ··· 404 906 "url": "ssh://gitea@git.sealight.xyz/aynish/kitaab" 405 907 } 406 908 }, 909 + "pre-commit-nix": { 910 + "inputs": { 911 + "flake-compat": "flake-compat_3", 912 + "flake-utils": "flake-utils_5", 913 + "gitignore": "gitignore", 914 + "nixpkgs": "nixpkgs_7", 915 + "nixpkgs-stable": "nixpkgs-stable" 916 + }, 917 + "locked": { 918 + "lastModified": 1696516544, 919 + "narHash": "sha256-8rKE8Je6twTNFRTGF63P9mE3lZIq917RAicdc4XJO80=", 920 + "owner": "cachix", 921 + "repo": "pre-commit-hooks.nix", 922 + "rev": "66c352d33e0907239e4a69416334f64af2c685cc", 923 + "type": "github" 924 + }, 925 + "original": { 926 + "owner": "cachix", 927 + "repo": "pre-commit-hooks.nix", 928 + "type": "github" 929 + } 930 + }, 407 931 "root": { 408 932 "inputs": { 409 933 "agenix": "agenix", 410 934 "basant": "basant", 935 + "darwin": "darwin_2", 411 936 "deploy-rs": "deploy-rs", 412 937 "disko": "disko", 413 938 "grasp": "grasp", 414 939 "hardware": "hardware", 415 940 "home-manager": "home-manager_2", 941 + "homebrew-bundle": "homebrew-bundle", 942 + "homebrew-cask": "homebrew-cask", 943 + "homebrew-core": "homebrew-core", 944 + "nix-homebrew": "nix-homebrew", 416 945 "nix-matrix-appservices": "nix-matrix-appservices", 417 946 "nixos-hardware": "nixos-hardware", 418 - "nixpkgs": "nixpkgs_2", 947 + "nixpkgs": "nixpkgs_4", 419 948 "nur": "nur", 420 949 "poonam": "poonam", 421 950 "rust-overlay": "rust-overlay", 951 + "sg-nvim": "sg-nvim", 952 + "sourcegraph-src-cli-cask": "sourcegraph-src-cli-cask", 422 953 "tidalcycles": "tidalcycles", 423 954 "unstable": "unstable", 424 955 "vimwikicli": "vimwikicli" ··· 426 957 }, 427 958 "rust-overlay": { 428 959 "inputs": { 960 + "flake-utils": "flake-utils_4", 429 961 "nixpkgs": [ 430 962 "nixpkgs" 431 963 ] 432 964 }, 433 965 "locked": { 434 - "lastModified": 1724034091, 435 - "narHash": "sha256-b1g7w0sw+MDAhUAeCoX1vlTghsqcDZkxr+k9OZmxPa8=", 966 + "lastModified": 1691201768, 967 + "narHash": "sha256-h+QJMpawZoK1+8efF6UjQoY1EHZfHteXVa5OYnlqRWA=", 436 968 "owner": "oxalica", 437 969 "repo": "rust-overlay", 438 - "rev": "c7d36e0947826e0751a5214ffe82533fbc909bc0", 970 + "rev": "18ee2a71de24273e4ad4503b5604532f0b53f382", 439 971 "type": "github" 440 972 }, 441 973 "original": { ··· 444 976 "type": "github" 445 977 } 446 978 }, 979 + "rust-overlay_2": { 980 + "flake": false, 981 + "locked": { 982 + "lastModified": 1696558324, 983 + "narHash": "sha256-TnnP4LGwDB8ZGE7h2n4nA9Faee8xPkMdNcyrzJ57cbw=", 984 + "owner": "oxalica", 985 + "repo": "rust-overlay", 986 + "rev": "fdb37574a04df04aaa8cf7708f94a9309caebe2b", 987 + "type": "github" 988 + }, 989 + "original": { 990 + "owner": "oxalica", 991 + "repo": "rust-overlay", 992 + "type": "github" 993 + } 994 + }, 995 + "rust-overlay_3": { 996 + "inputs": { 997 + "flake-utils": "flake-utils_6", 998 + "nixpkgs": "nixpkgs_8" 999 + }, 1000 + "locked": { 1001 + "lastModified": 1696558324, 1002 + "narHash": "sha256-TnnP4LGwDB8ZGE7h2n4nA9Faee8xPkMdNcyrzJ57cbw=", 1003 + "owner": "oxalica", 1004 + "repo": "rust-overlay", 1005 + "rev": "fdb37574a04df04aaa8cf7708f94a9309caebe2b", 1006 + "type": "github" 1007 + }, 1008 + "original": { 1009 + "owner": "oxalica", 1010 + "repo": "rust-overlay", 1011 + "type": "github" 1012 + } 1013 + }, 1014 + "sg-nvim": { 1015 + "inputs": { 1016 + "flake-parts": "flake-parts", 1017 + "nci": "nci", 1018 + "nixpkgs": "nixpkgs_6", 1019 + "pre-commit-nix": "pre-commit-nix", 1020 + "rust-overlay": "rust-overlay_3" 1021 + }, 1022 + "locked": { 1023 + "lastModified": 1716664639, 1024 + "narHash": "sha256-5wzTW9kJGYq41kXG9JoVAaA5601K26cDrweT2PtpEw8=", 1025 + "owner": "sourcegraph", 1026 + "repo": "sg.nvim", 1027 + "rev": "8bdd4d19da2268072708d5fe18fda9c23e16509d", 1028 + "type": "github" 1029 + }, 1030 + "original": { 1031 + "owner": "sourcegraph", 1032 + "repo": "sg.nvim", 1033 + "type": "github" 1034 + } 1035 + }, 1036 + "sourcegraph-src-cli-cask": { 1037 + "flake": false, 1038 + "locked": { 1039 + "lastModified": 1722629753, 1040 + "narHash": "sha256-3OwvDSoVzklr3ca1qCXR27Kc8hGjshRRdtVQ8OUXQCc=", 1041 + "owner": "sourcegraph", 1042 + "repo": "homebrew-src-cli", 1043 + "rev": "130bd8ab70961e5c1f890811bfb1f7552a2ee5a9", 1044 + "type": "github" 1045 + }, 1046 + "original": { 1047 + "owner": "sourcegraph", 1048 + "repo": "homebrew-src-cli", 1049 + "type": "github" 1050 + } 1051 + }, 447 1052 "superdirt-src": { 448 1053 "flake": false, 449 1054 "locked": { 450 - "lastModified": 1697377840, 451 - "narHash": "sha256-9qU9CHYAXbN1IE3xXDqGipuroifVaSVXj3c/cDfwM80=", 1055 + "lastModified": 1611740180, 1056 + "narHash": "sha256-GtnqZeMFqFkVhgx2Exu0wY687cHa7mNnVCgjQd6fiIA=", 452 1057 "owner": "musikinformatik", 453 1058 "repo": "superdirt", 454 - "rev": "c7f32998572984705d340e7c1b9ed9ad998a39b6", 1059 + "rev": "7abb62e89649daa1232b9cbd6427241868abd30e", 455 1060 "type": "github" 456 1061 }, 457 1062 "original": { 458 1063 "owner": "musikinformatik", 1064 + "ref": "master", 459 1065 "repo": "superdirt", 460 1066 "type": "github" 461 1067 } ··· 490 1096 "type": "github" 491 1097 } 492 1098 }, 1099 + "systems_3": { 1100 + "locked": { 1101 + "lastModified": 1681028828, 1102 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 1103 + "owner": "nix-systems", 1104 + "repo": "default", 1105 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 1106 + "type": "github" 1107 + }, 1108 + "original": { 1109 + "owner": "nix-systems", 1110 + "repo": "default", 1111 + "type": "github" 1112 + } 1113 + }, 1114 + "systems_4": { 1115 + "locked": { 1116 + "lastModified": 1681028828, 1117 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 1118 + "owner": "nix-systems", 1119 + "repo": "default", 1120 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 1121 + "type": "github" 1122 + }, 1123 + "original": { 1124 + "owner": "nix-systems", 1125 + "repo": "default", 1126 + "type": "github" 1127 + } 1128 + }, 1129 + "systems_5": { 1130 + "locked": { 1131 + "lastModified": 1681028828, 1132 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 1133 + "owner": "nix-systems", 1134 + "repo": "default", 1135 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 1136 + "type": "github" 1137 + }, 1138 + "original": { 1139 + "owner": "nix-systems", 1140 + "repo": "default", 1141 + "type": "github" 1142 + } 1143 + }, 493 1144 "tidal-src": { 494 1145 "flake": false, 495 1146 "locked": { 496 - "lastModified": 1712519522, 497 - "narHash": "sha256-LbvxQmVxHElidCgvt+w0g1k+QQbNLebK46vtRCgsLeQ=", 1147 + "lastModified": 1654350756, 1148 + "narHash": "sha256-tONM5SYYBca0orTLH1EUOilSC1FCluWrFt8AetUx+YQ=", 498 1149 "owner": "tidalcycles", 499 1150 "repo": "tidal", 500 - "rev": "88f09edf6bef2228d5f530dea872b08a9d803066", 1151 + "rev": "fda9c1ecb3722698935245e5409ef8ccdfca16c8", 501 1152 "type": "github" 502 1153 }, 503 1154 "original": { 504 1155 "owner": "tidalcycles", 505 - "ref": "v1.9.5", 1156 + "ref": "main", 506 1157 "repo": "tidal", 507 1158 "type": "github" 508 1159 } ··· 515 1166 ], 516 1167 "superdirt-src": "superdirt-src", 517 1168 "tidal-src": "tidal-src", 1169 + "utils": "utils_2", 518 1170 "vim-tidal-src": "vim-tidal-src", 519 1171 "vowel-src": "vowel-src" 520 1172 }, 521 1173 "locked": { 522 - "lastModified": 1723223284, 523 - "narHash": "sha256-NAT+g5nsaJZkpR0sCZjerd1xx233ZUdRH3ZWwZhzq/c=", 1174 + "lastModified": 1664760044, 1175 + "narHash": "sha256-e5LGk/tDnphory1mYhADgPnVtShofY2w/3xY09jEE2A=", 524 1176 "owner": "mitchmindtree", 525 1177 "repo": "tidalcycles.nix", 526 - "rev": "82f3e8e8d02eb9f0c9dfe9ab3773b825c6bc1982", 1178 + "rev": "3f3a820cd43709077d15a24fa6062de7d623a6bf", 527 1179 "type": "github" 528 1180 }, 529 1181 "original": { ··· 532 1184 "type": "github" 533 1185 } 534 1186 }, 1187 + "treefmt": { 1188 + "inputs": { 1189 + "nixpkgs": [ 1190 + "sg-nvim", 1191 + "nci", 1192 + "nixpkgs" 1193 + ] 1194 + }, 1195 + "locked": { 1196 + "lastModified": 1695822946, 1197 + "narHash": "sha256-IQU3fYo0H+oGlqX5YrgZU3VRhbt2Oqe6KmslQKUO4II=", 1198 + "owner": "numtide", 1199 + "repo": "treefmt-nix", 1200 + "rev": "720bd006d855b08e60664e4683ccddb7a9ff614a", 1201 + "type": "github" 1202 + }, 1203 + "original": { 1204 + "owner": "numtide", 1205 + "repo": "treefmt-nix", 1206 + "type": "github" 1207 + } 1208 + }, 535 1209 "unstable": { 536 1210 "locked": { 537 - "lastModified": 1723637854, 538 - "narHash": "sha256-med8+5DSWa2UnOqtdICndjDAEjxr5D7zaIiK4pn0Q7c=", 1211 + "lastModified": 1747542820, 1212 + "narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", 539 1213 "owner": "nixos", 540 1214 "repo": "nixpkgs", 541 - "rev": "c3aa7b8938b17aebd2deecf7be0636000d62a2b9", 1215 + "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", 542 1216 "type": "github" 543 1217 }, 544 1218 "original": { ··· 550 1224 }, 551 1225 "utils": { 552 1226 "inputs": { 553 - "systems": "systems_2" 1227 + "systems": "systems" 554 1228 }, 555 1229 "locked": { 556 1230 "lastModified": 1701680307, ··· 566 1240 "type": "github" 567 1241 } 568 1242 }, 1243 + "utils_2": { 1244 + "locked": { 1245 + "lastModified": 1653893745, 1246 + "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", 1247 + "owner": "numtide", 1248 + "repo": "flake-utils", 1249 + "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", 1250 + "type": "github" 1251 + }, 1252 + "original": { 1253 + "owner": "numtide", 1254 + "repo": "flake-utils", 1255 + "type": "github" 1256 + } 1257 + }, 569 1258 "vim-tidal-src": { 570 1259 "flake": false, 571 1260 "locked": { 572 - "lastModified": 1685703852, 573 - "narHash": "sha256-8gyk17YLeKpLpz3LRtxiwbpsIbZka9bb63nK5/9IUoA=", 1261 + "lastModified": 1664252474, 1262 + "narHash": "sha256-hleiK2Q7xYndpB+tIbyyXIM2sk4NunUh9DPgMqmf/Wc=", 574 1263 "owner": "tidalcycles", 575 1264 "repo": "vim-tidal", 576 - "rev": "e440fe5bdfe07f805e21e6872099685d38e8b761", 1265 + "rev": "b07f5c12986fb837e055d7fcf0acf3b7e248148f", 577 1266 "type": "github" 578 1267 }, 579 1268 "original": { 580 1269 "owner": "tidalcycles", 1270 + "ref": "master", 581 1271 "repo": "vim-tidal", 582 1272 "type": "github" 583 1273 } ··· 615 1305 }, 616 1306 "original": { 617 1307 "owner": "supercollider-quarks", 1308 + "ref": "master", 618 1309 "repo": "vowel", 619 1310 "type": "github" 620 1311 }
+114 -25
flake.nix
··· 1 1 { 2 - description = "Sealight NixOS Config"; 2 + description = "Your new nix config"; 3 3 4 4 inputs = { 5 5 # Nixpkgs 6 - nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; 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 9 10 - # ngipkgs.url = "github:Chickensoupwithrice/ngipkgs?ref=aynish/atomic-server-module"; 11 - # ngipkgs-local.url = "path:/home/anish/usr/ngipkgs"; 12 - 13 10 # Home manager 14 - home-manager.url = "github:nix-community/home-manager/release-24.05"; 11 + home-manager.url = "github:nix-community/home-manager/release-25.05"; 15 12 home-manager.inputs.nixpkgs.follows = "nixpkgs"; 16 13 hardware.url = "github:nixos/nixos-hardware"; 17 14 ··· 37 34 # Matrix 38 35 nix-matrix-appservices.url = "gitlab:coffeetables/nix-matrix-appservices"; 39 36 37 + # OSX 38 + darwin = { 39 + url = "github:nix-darwin/nix-darwin/nix-darwin-25.05"; 40 + inputs.nixpkgs.follows = "nixpkgs"; 41 + }; 42 + nix-homebrew = { 43 + url = "github:zhaofengli-wip/nix-homebrew"; 44 + }; 45 + homebrew-bundle = { 46 + url = "github:homebrew/homebrew-bundle"; 47 + flake = false; 48 + }; 49 + homebrew-core = { 50 + url = "github:homebrew/homebrew-core"; 51 + flake = false; 52 + }; 53 + homebrew-cask = { 54 + url = "github:homebrew/homebrew-cask"; 55 + flake = false; 56 + }; 57 + 58 + # Sourcegraph 59 + sourcegraph-src-cli-cask = { 60 + url = "github:sourcegraph/homebrew-src-cli"; 61 + flake = false; 62 + }; 63 + sg-nvim.url = "github:sourcegraph/sg.nvim"; 64 + 40 65 # Others 41 66 nur.url = "github:nix-community/NUR"; 42 67 rust-overlay = { ··· 70 95 , tidalcycles 71 96 , rust-overlay 72 97 , vimwikicli 98 + , darwin 99 + , nix-homebrew 100 + , homebrew-bundle 101 + , homebrew-core 102 + , homebrew-cask 103 + , sourcegraph-src-cli-cask 104 + , sg-nvim 73 105 , ... 74 106 }@inputs: 75 107 let ··· 84 116 # We already have these in scope 85 117 unstable = unstable.legacyPackages.${prev.system}; 86 118 deploy = deploy-rs.packages.${prev.system}.deploy-rs; 119 + sg-nvim = sg-nvim.packages.${prev.system}.default; 87 120 }; 88 121 vimwikiOverlay = final: prev: { 89 122 vimwiki-cli = vimwikicli.packages.${prev.system}.vimwiki-cli; ··· 91 124 92 125 nixpkgsFor = forAllSystems (system: import nixpkgs { 93 126 inherit system; 94 - config.allowUnfreePredicate = pkg: builtins.elem (nixpkgs.lib.getName pkg) [ 95 - "ripcord" 96 - "vcv-rack" 97 - "SunVox" 98 - "renoise" 99 - ]; 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 + #]; 100 143 # config.permittedInsecurePackages = [ 101 144 # "python3.10-django-3.1.14" # Needed for archivebox deployments on curve 102 145 # # Check when archive box updates it's dependeny ··· 108 151 nur.overlay 109 152 nix-matrix-appservices.overlay 110 153 unstableOverlay 111 - vimwikiOverlay 154 + # TODO Not available publically 155 + # vimwikiOverlay 112 156 self.overlays.additions 113 157 self.overlays.modifications 114 158 ]; ··· 123 167 # ]; 124 168 overlays = [ 125 169 agenix.overlays.default 126 - self.overlays.additions 127 - self.overlays.modifications 128 170 tidalcycles.overlays.default # needed for nvim which comes pre-installed lol 129 171 ]; 130 172 }); 173 + 174 + darwinSystems = [ "aarch64-darwin" "x86_64-darwin" ]; 131 175 in 132 176 { 133 - # Your custom packages 134 - # Acessible through 'nix build', 'nix shell', etc 135 177 packages = forAllSystems (system: 136 178 let pkgs = nixpkgsFor.${system}; 137 179 in import ./pkgs { pkgs = pkgs; } 138 180 ); 181 + 139 182 # Devshell for bootstrapping 140 183 # Acessible through 'nix develop' or 'nix-shell' (legacy) 141 184 devShells = forAllSystems (system: ··· 152 195 # These are usually stuff you would upstream into home-manager 153 196 homeManagerModules = import ./modules/home-manager; 154 197 198 + darwinConfigurations = { 199 + "Anishs-MacBook-Pro" = darwin.lib.darwinSystem rec { 200 + system = "aarch64-darwin"; 201 + pkgs = nixpkgsFor.${system}; 202 + specialArgs = { inherit inputs self; }; 203 + modules = [ 204 + ./hosts/darwin 205 + home-manager.darwinModules.home-manager 206 + agenix.darwinModules.default 207 + # nix-homebrew.darwinModules.nix-homebrew 208 + { 209 + users.users.anishlakhwara.home = "/Users/anishlakhwara"; 210 + home-manager = { 211 + users.anishlakhwara = import ./home/darwin; 212 + useGlobalPkgs = true; 213 + useUserPackages = true; 214 + }; 215 + # nix-homebrew = { 216 + # user = "anishlakhwara"; 217 + # enable = true; 218 + # # taps = { 219 + # # "homebrew/homebrew-core" = homebrew-core; 220 + # # "homebrew/homebrew-cask" = homebrew-cask; 221 + # # "homebrew/homebrew-bundle" = homebrew-bundle; 222 + # # "sourcegraph/homebrew-src-cli" = sourcegraph-src-cli-cask; 223 + # # }; 224 + # mutableTaps = true; 225 + # autoMigrate = true; 226 + # }; 227 + } 228 + ]; 229 + }; 230 + }; 231 + 155 232 # NixOS configuration entrypoint 156 233 nixosConfigurations = { 157 234 curve = nixpkgs.lib.nixosSystem rec { ··· 163 240 agenix.nixosModules.age 164 241 self.nixosModules.backup 165 242 self.nixosModules.wireguard 166 - self.nixosModules.wallabag 167 243 nixos-hardware.nixosModules.lenovo-thinkpad-x270 168 244 home-manager.nixosModules.home-manager 169 245 { ··· 185 261 agenix.nixosModules.age 186 262 self.nixosModules.backup 187 263 self.nixosModules.wireguard 188 - basant.nixosModule 189 264 # self.nixosModules.microbin 190 265 disko.nixosModules.disko 191 - { 192 - nixpkgs.flake.setNixPath = false; 193 - nixpkgs.flake.setFlakeRegistry = false; 194 - } 195 266 ]; 196 267 }; 197 268 ··· 214 285 ]; 215 286 }; 216 287 288 + cube = nixpkgs.lib.nixosSystem rec { 289 + specialArgs = { inherit inputs self; }; 290 + system = "x86_64-linux"; 291 + pkgs = litePkgsFor.${system}; 292 + modules = [ 293 + ./hosts/cube 294 + agenix.nixosModules.age 295 + self.nixosModules.backup 296 + self.nixosModules.wireguard 297 + basant.nixosModule 298 + ]; 299 + }; 300 + 217 301 box = nixpkgs.lib.nixosSystem rec { 218 302 specialArgs = { inherit inputs self; }; 219 303 system = "x86_64-linux"; ··· 224 308 self.nixosModules.backup 225 309 self.nixosModules.wireguard 226 310 self.nixosModules.gonic 227 - self.nixosModules.gpodder2go 228 311 self.nixosModules.wallabag 229 312 self.nixosModules.ulogger-server 230 313 grasp.nixosModule ··· 257 340 hostname = "mossnet.lan"; 258 341 autoRollback = false; 259 342 magicRollback = false; 260 - remoteBuild = true; 261 343 profiles.system = { 262 344 user = "root"; 263 345 path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.box; ··· 278 360 profiles.system = { 279 361 user = "root"; 280 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; 281 370 }; 282 371 }; 283 372 };
+2
home/core/default.nix
··· 1 1 { self, pkgs, ... }: 2 2 { 3 3 imports = [ 4 + # ../profiles/nvim 4 5 ../profiles/cli 5 6 ../profiles/direnv 6 7 ../profiles/git 8 + ../profiles/task 7 9 ]; 8 10 home.stateVersion = "22.05"; 9 11 }
+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'
+1 -2
home/gui/default.nix
··· 2 2 { 3 3 imports = [ 4 4 ../core 5 - ../profiles/nvim 6 5 ../profiles/firefox 7 6 ../profiles/desktop 8 7 ../profiles/email 9 8 ../profiles/cal 10 9 ../profiles/sync/kitaab 11 10 ../profiles/ssh 12 - ../profiles/task 11 + ../profiles/kitty 13 12 ]; 14 13 }
+35 -27
home/profiles/cli/default.nix
··· 1 1 { lib, pkgs, config, ... }: 2 2 { 3 3 home.packages = with pkgs; [ 4 + #unstable.claude-code 4 5 binutils 5 - coreutils 6 + # coreutils 6 7 dnsutils 7 8 dasht 8 9 dosfstools 9 - #git 10 + # git 10 11 git-machete 12 + asciinema 11 13 bottom 12 14 gptfdisk 13 15 starship 14 - iputils 15 - jq 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 16 28 manix 17 29 moreutils 18 30 nix-index 19 - cached-nix-shell 20 31 nmap 21 32 ripgrep 22 33 skim 23 34 tealdeer 24 - usbutils 25 - utillinux 26 - whois 27 35 iftop 28 36 wget 29 37 curl 30 - eza 38 + eza 31 39 bat 32 40 fd 33 - ncdu 34 - du-dust 35 - # dia-cli 41 + # ncdu 36 42 duf 37 43 trash-cli 38 44 nix-index 39 45 silver-searcher 40 46 tcpdump 41 - mtr 42 47 file 43 48 lsof 44 49 atool 45 - strace 46 50 zip 47 51 unzip 48 52 rsync ··· 51 55 glow 52 56 pass 53 57 less 54 - gdb 55 58 xxd 56 59 taskwarrior 57 60 gnupg 58 61 syncthing 59 62 dijo 60 - #ssb-patchwork 61 - fontconfig 63 + # ssb-patchwork 62 64 pandoc 63 65 taskwarrior-tui 64 - python3Packages.howdoi 65 - vimwiki-cli 66 + zk 67 + diffnav 68 + jujutsu 69 + git-spice 70 + 71 + # llms (needs 24.11) 72 + aider-chat 66 73 67 74 (pkgs.writeScriptBin "jq-repl" '' 68 75 #!/usr/bin/env bash ··· 132 139 enableCompletion = true; 133 140 autosuggestion.enable = false; 134 141 135 - initExtra = '' 142 + initContent = '' 143 + bindkey -v 136 144 autopair-init 137 145 ''; 138 146 sessionVariables = { ··· 204 212 enableZshIntegration = true; 205 213 }; 206 214 207 - services.kdeconnect.enable = true; 215 + # Only available on Linux 216 + # services.kdeconnect.enable = true; 208 217 209 218 home.shellAliases = { 210 219 # quick cd ··· 219 228 220 229 # modern cli tools 221 230 ls = "eza --icons"; 222 - l = "esa -l --icons"; 231 + l = "eza -l --icons"; 223 232 la = "eza -la --icons"; 224 233 tree = "ls --tree --icons"; 225 234 cat = "bat"; ··· 231 240 make-secret = "< /dev/urandom \\tr -dc _A-Za-z0-9 | head -c \${1:-32};echo;"; 232 241 233 242 # task warrior 243 + # TODO: make blocked a context? 234 244 t = "task -BLOCKED -idea -backlog"; 235 - tw = "t rc.context:work"; 236 - # TODO find a reasonable way to manage this from a non-nix managed file in ~/.task/context or something 237 - # we can do something like task rc.context:$(cat ~/.task/context) to read context 238 - # and write a little script make-context = cat $@ > ~/.task/context or something 239 245 tt = "taskwarrior-tui -r list"; 240 246 ti = "task +idea"; 241 247 tb = "task +backlog list"; 242 248 ttb = "taskwarrior-tui -r backlog"; 243 249 tr = "task newest limit:page"; 244 - twait = "task +wait"; 250 + tw = "task +wait"; 245 251 ta = "task add"; 246 252 tai = "task add +idea"; 247 253 tn = "task-note"; ··· 257 263 258 264 # git 259 265 g = "git"; 266 + gl = "git log --pretty=oneline --abbrev-commit"; 260 267 261 268 # grep 262 269 grep = "rg"; ··· 277 284 srch = "ns nixpkgs"; 278 285 orch = "ns override"; 279 286 nrb = "cd /tmp; sudo nixos-rebuild switch --flake '/home/anish/usr/helm#curve'; cd $OLDPWD"; 287 + nrd = "cd /tmp; NIXPKGS_ALLOW_UNFREE=1 sudo darwin-rebuild switch --flake /Users/anishlakhwara/usr/helm#Anishs-MacBook-Pro --impure; cd $OLDPWD"; 280 288 nrt = "cd /tmp; sudo nixos-rebuild test --flake '/home/anish/usr/helm#curve'; cd $OLDPWD"; 281 289 ned = "cd /home/anish/usr/helm; vim; cd $OLDPWD"; 282 290 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
+4 -4
home/profiles/desktop/default.nix
··· 26 26 gtk-engine-murrine 27 27 gtk_engines 28 28 maim 29 - kitty 30 29 libreoffice 31 30 inotify-tools 32 31 offpunk ··· 66 65 recursive = true; 67 66 }; 68 67 ".config/dunst/dunstrc".source = ./dunstrc; 69 - ".config/kitty/kitty.conf".source = ./kitty.conf; 70 - ".config/kitty/ayu.conf".source = ./ayu-kitty.conf; 71 68 ".config/zathura/zathurarc".source = ./zathurarc; 72 69 ".background-image".source = ./background.jpg; 73 70 #gtk4 theme ··· 102 99 ".local/bin/mpv-ify".source = ./bin/mpv-ify; 103 100 ".local/bin/bspswallow".source = ./bin/bspswallow; 104 101 ".config/bspwm/terminals".text = "Kitty"; 102 + ".config/eww/eww.yuck".source = ./eww/eww.yuck; 103 + ".config/eww/eww.scss".source = ./eww/eww.scss; 104 + ".config/eww/widgets.yuck".source = ./eww/widgets.yuck; 105 105 # ".local/bin/hotplug-monitor.sh".source = ./bin/hotplug-monitor.sh; 106 106 }; 107 107 ··· 123 123 124 124 qt = { 125 125 enable = true; 126 - platformTheme.name = "gtk"; 126 + platformTheme = "gtk"; 127 127 style = { name = "qt5ct-style"; }; 128 128 }; 129 129
-13
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 - -- Allows zen-mode.nvim to increase font size 12 - -- allow_remote_control socket-only 13 - -- 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><save-message>=/Archive" "mark message as Archived" 178 + macro index,pager A "<clear-flag>N<save-message>=/Archive" "mark message as Archived" 179 179 # Press C to add contact to Khard address book 180 180 macro index,pager C \ 181 181 "<pipe-message>khard add-email<return>" \
+1 -1
home/profiles/firefox/default.nix
··· 21 21 extensions = with pkgs.nur.repos.rycee.firefox-addons; [ 22 22 # Find extensions: https://github.com/nix-community/nur-combined/blob/master/repos/rycee/pkgs/firefox-addons/generated-firefox-addons.nix 23 23 ublock-origin 24 - # wallabagger 24 + wallabagger 25 25 # tree-style-tab 26 26 tridactyl 27 27 promnesia
+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 18 21 [alias] 19 22 unadd = reset HEAD 20 23 # data analysis ··· 23 26 email-domains = !git log --format="%aE" | awk -F'@' '{print $2}' | sort -u 24 27 # pretty log 25 28 ls = !git log --graph --abbrev-commit --decorate --color=always --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) - %C(dim red)%an%C(reset)%C(bold yellow)%d%C(reset)' --all 29 + undo = !git reset HEAD~1 --mixed 30 + blm = blame -w -C -C -C 26 31 [filter "lfs"] 27 32 required = true 28 33 smudge = git-lfs smudge -- %f 29 34 process = git-lfs filter-process 30 35 clean = git-lfs clean -- %f 36 + [url "git@github.com:"] 37 + insteadOf = https://github.com/ 31 38 [url "https://github.com/"] 32 39 insteadOf = gh: 33 40 [url "git@github.com:"]
+7 -1
home/profiles/git/default.nix
··· 12 12 userName = "Anish Lakhwara"; 13 13 userEmail = "anish+git@lakhwara.com"; 14 14 delta.enable = true; 15 - # TODO enable signing 15 + signing = { 16 + signByDefault = true; 17 + key = "7FC5DF072EF7B716"; 18 + }; 16 19 17 20 ignores = [ 18 21 "*~" ··· 56 59 pull.rebase = false; 57 60 push.autoSetupRemote = true; 58 61 init.defaultBranch = "main"; 62 + "url \"git@github.com:\"" = { insteadOf = "https://github.com/"; }; 59 63 }; 60 64 61 65 aliases = { ··· 94 98 95 99 # delete merged branches 96 100 bdm = "!git branch --merged | grep -v '*' | xargs -n 1 git branch -d"; 101 + undo = "!git reset HEAD~1 --mixed"; 102 + blm = "blame -w -C -C -C"; 97 103 }; 98 104 }; 99 105 }
+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
-4
home/profiles/nvim/config/after/syntax/vimwiki.vim
··· 1 - " match with %update 2 - syntax match VimwikiPlaceholder /^\s*%update\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite 3 - " match with %link 4 - syntax match VimwikiPlaceholder /^\s*%link\ze\%(\s.*\)\?$/ nextgroup=VimwikiPlaceholderParam skipwhite
-11
home/profiles/nvim/config/fnl/conf/formatting.fnl
··· 1 - (import-macros {: do-req } :lib/macros) 2 - 3 - (do-req :conform :setup 4 - {:formatters_by_ft {:lua ["stylua"] 5 - :nix ["nixfmt"] 6 - ; :go ["goimports" "gofmt"] ; Go handled in special case 7 - :terraform ["terraform_fmt"] 8 - :sh ["shfmt"] 9 - :bazel ["buildifier"]} 10 - :format_on_save {:lsp_format "fallback" 11 - :timeout_ms 500}})
-47
home/profiles/nvim/config/fnl/conf/init.fnl
··· 1 - (local nvim (require :lib/nvim)) 2 - 3 - (nvim.g :mapleader " ") 4 - 5 - ; (nvim.opt :runtimepath (.. vim.opt.runtimepath "/home/anish/.config/nvim/,")) 6 - (nvim.opt :tabstop 2) 7 - (nvim.opt :showmatch true) 8 - (nvim.opt :shiftwidth 2) 9 - (nvim.opt :autoindent true) 10 - (nvim.opt :undofile true) 11 - (nvim.opt :signcolumn "auto:4") 12 - (nvim.opt :title true) 13 - (nvim.opt :number true) 14 - ; (nvim.opt :nocompatible) 15 - (nvim.opt :relativenumber true) 16 - (nvim.opt :showtabline 2) 17 - (nvim.opt :expandtab true) 18 - (nvim.opt :autowriteall true) 19 - (nvim.opt :cmdheight 2) 20 - (nvim.opt :spelllang "en_gb") 21 - (nvim.opt :ignorecase true) 22 - (nvim.opt :smartcase true) 23 - (nvim.opt :incsearch true) 24 - (nvim.opt :updatetime 300) ; Diagnostics response time 25 - (nvim.opt :signcolumn "yes") 26 - (nvim.opt :cursorline true) 27 - 28 - (nvim.opt :lisp true) ; include - in word to move better in snake-case) 29 - (nvim.g :sexp_filetypes "clojure,scheme,lisp,janet,fennel,yuck") ; include the lisps I use 30 - 31 - (nvim.opt :termguicolors) 32 - (nvim.colorscheme "ayu-mirage") 33 - 34 - (require :conf.plugins) 35 - (require :conf.mappings) 36 - (require :conf.lsp) 37 - (require :conf.plugins.cmp) 38 - (require :conf.formatting) 39 - ; (require :conf.kitaab) 40 - 41 - ; Spelling 42 - (vim.api.nvim_create_autocmd ["BufRead" "BufNewFile"] 43 - {:pattern ["*.wiki" "*.txt" "*.md" "*.tex"] 44 - :command "setlocal spell"}) 45 - (vim.api.nvim_create_autocmd ["FileType"] 46 - {:pattern ["mail"] 47 - :command "setlocal spell"})
-99
home/profiles/nvim/config/fnl/conf/lsp.fnl
··· 1 - (import-macros {: do-req } :lib/macros) 2 - (local lspkind (require :lspkind)) 3 - (local lspconfig (require :lspconfig)) 4 - ; (local lspsaga (require :lspsaga)) 5 - (local cmp (require :cmp)) 6 - (local nvim (require :lib/nvim)) 7 - ; (local lspfuzzy (require :lspfuzzy)) ; Not available on Nix 8 - ; (local sg (require :sg)) 9 - ; (local lsputil (require :lspconfig/util)) 10 - 11 - ;(lspsaga.setup {:border_style "rounded" 12 - ; :code_action_icon "" 13 - ; :code_action_num_shortcut false 14 - ; :ui {:code_action ""} 15 - ; :show_outline {:enable false})) 16 - ; 17 - ;(nvim.opt :winbar nil) 18 - 19 - (local signs {:Error "๎ช‡ " 20 - :Warn "๏ฑ " 21 - :Hint "๏™ " 22 - :Info "๏‘‰ "}) 23 - (each [t icon (pairs signs)] 24 - (let [hl (.. "DiagnosticSign" t)] 25 - (vim.fn.sign_define hl {:text icon 26 - :texthl hl 27 - :numhl hl}))) 28 - 29 - (tset vim.lsp.handlers 30 - :textDocument/hover 31 - (vim.lsp.with vim.lsp.handlers.hover 32 - {:focusable false :border "rounded"})) 33 - (tset vim.lsp.handlers 34 - :textDocument/signatureHelp 35 - (vim.lsp.with vim.lsp.handlers.signature_help 36 - {:focusable false :border "rounded"})) 37 - 38 - (local capabilities (let [cmp_nvim_lsp (require :cmp_nvim_lsp)] 39 - (cmp_nvim_lsp.default_capabilities))) 40 - 41 - (local formatting-augroup (nvim.augroup :LspFormatting)) 42 - 43 - (fn goimports [wait-ms] 44 - (let [params (vim.lsp.util.make_range_params) 45 - result (do 46 - (tset params :context {:only [:source.organizeImports]}) 47 - (vim.lsp.buf_request_sync 0 :textDocument/codeAction params wait-ms))] 48 - (each [_ res (pairs (or result {}))] 49 - (each [_ r (pairs (or res.result {}))] 50 - (if r.edit 51 - (vim.lsp.util.apply_workspace_edit r.edit "utf-16") 52 - (vim.lsp.buf.execute_command r.command)))) 53 - (vim.lsp.buf.format))) 54 - 55 - (fn on-attach [client bufnr] 56 - (let [filetype (vim.api.nvim_buf_get_option 0 "filetype")] 57 - (if (client.supports_method "textDocument/formatting") 58 - (do (nvim.autocmd "BufWritePre" 59 - {:group formatting-augroup 60 - :buffer bufnr 61 - :callback (fn [_] (if (= filetype "go") 62 - (goimports 2000) 63 - (vim.lsp.buf.format {:bufnr bufnr})))}))))) 64 - 65 - (lspconfig.gopls.setup 66 - {:capabilities capabilities 67 - :codelens {:generate true :gc_details true} 68 - :semanticTokens true 69 - :flags {:debounce_text_changes 200} 70 - :analyses {:unusedparams true 71 - :unusedvariables true 72 - :unusedwrite true 73 - :nilness true 74 - :unusedwrite true 75 - :useany true} 76 - :completeUnimported true 77 - :staticcheck true 78 - :experimentalPostfixCompletions true 79 - :hints {:constantValues true 80 - :functionTypeParameters true 81 - :assignVariablesTypes true 82 - :compositeLiteralTypes true 83 - :compositeLiteralFields true 84 - :parameterNames true 85 - :rangeVariableTypes true} 86 - :on_attach on-attach}) 87 - 88 - (local lsps [:nil_ls :terraform_lsp :fennel_ls :tsserver :starbin]) 89 - (each [index lsp (ipairs lsps)] 90 - ((. (. lspconfig lsp) :setup) {})) 91 - 92 - ; null-ls 93 - (let [null-ls (require :null-ls)] 94 - (null-ls.setup {:sources [; TODO fix these 95 - ;null-ls.builtins.diagnostics.shellcheck 96 - null-ls.builtins.diagnostics.commitlint]})) 97 - ;null-ls.builtins.diagnostics.jsonlint]})) 98 - ;(null-ls.builtins.diagnostics.proselint.with {:filetypes ["vimwiki" "mail"]})]})) 99 -
-135
home/profiles/nvim/config/fnl/conf/mappings.fnl
··· 1 - (local nvim (require :lib/nvim)) 2 - (import-macros {: do-req } :lib/macros) 3 - 4 - (local wk (require :which-key)) 5 - 6 - ;; Convenient way to indent stuff in visual mode 7 - (nvim.keymap [:v] "<" "<gv" {:noremap true}) 8 - (nvim.keymap [:v] ">" ">gv" {:noremap true}) 9 - (nvim.keymap [:n] "<space>" "<NOP>" {:noremap true :silent true}) 10 - ;; Convenient way to move stuff in visual mode 11 - (nvim.keymap [:v] "J" ":m '>+1<CR>gv=gv" {:noremap true}) 12 - (nvim.keymap [:v] "K" ":m '>-2<CR>gv=gv" {:noremap true}) 13 - ;; Convientent screen shifting 14 - (nvim.keymap [:n] "n" "nzzzv" {:noremap true}) 15 - (nvim.keymap [:n] "N" "Nzzzv" {:noremap true}) 16 - (nvim.keymap [:n] "J" "mzJ'z" {:noremap true}) 17 - ; Fix Y 18 - (nvim.keymap [:n] "Y" "y$") 19 - ; Unmap Q 20 - (nvim.keymap [] "Q" "<Nop>") 21 - 22 - ; FTerm 23 - (vim.api.nvim_create_user_command "FTermToggle" (fn [_] 24 - ((-> (require :FTerm) 25 - (. :toggle)))) 26 - {:bang true}) 27 - (nvim.keymap [:t] "<TAB>" "<cmd>:FTermToggle<CR>") 28 - (nvim.keymap [:n] "<TAB>" "<cmd>:FTermToggle<CR>" {:noremap true}) 29 - 30 - ; Buffer Movement 31 - (nvim.keymap [:n] "gT" ":BufferPrevious<CR>" {:silent true :noremap true}) 32 - (nvim.keymap [:n] "gt" ":BufferNext<CR>" {:silent true :noremap true}) 33 - (nvim.keymap [:n] "gj" ":BufferPick<CR>" {:silent true :noremap true}) 34 - (nvim.keymap [:n] "gb" ":Telescope buffers<CR>" {:silent true :noremap true}) 35 - (nvim.keymap [:n] "gq" ":BufferClose<CR>" {:silent true :noremap true}) 36 - 37 - ; Flash 38 - (vim.api.nvim_create_user_command "Flash" (fn [_] (do-req :flash :jump)) {}) 39 - (vim.api.nvim_create_user_command "FlashTreesitter" (fn [] (do-req :flash :treesitter)) {}) 40 - (nvim.keymap [:n] "f" "<cmd>Flash<CR>") 41 - (nvim.keymap [:n] "s" "<cmd>FlashTreesitter<CR>") 42 - 43 - (local 44 - normal-map-leader 45 - {"t" [":Neotree toggle<CR>" 46 - "Toggle neo-tree"] 47 - "w" ["<cmd>:w<cr>" 48 - "Write file"] 49 - "q" ["<cmd>:q<cr>" 50 - "Quit"] 51 - "r" [":RainbowParenthesesToggleAll<CR>" 52 - "Toggle Rainbow Parens"] 53 - "u" [":UndotreeToggle<CR>" 54 - "Toggle Undo Tree"] 55 - ; Telescope 56 - "f" {:name "Files" 57 - :f ["<cmd>Telescope find_files<cr>" 58 - "Find Files (in Telescope)"] 59 - :g ["<cmd>Telescope live_grep<cr>" 60 - "Find Grep (in Telescope)"] 61 - :b ["<cmd>Telescope buffers<cr>" 62 - "Find Buffers"] 63 - :h ["<cmd>Telescope help_tags<cr>" 64 - "Find Help"] 65 - :t ["<cmd>Telescope tags<cr>" 66 - "Find Tags"] 67 - :r ["<cmd>Telescope oldfiles<CR>" 68 - "Recent files"]} 69 - ; Git 70 - "g" {:name "Git" 71 - "s" [":G<CR>" 72 - "Git Status"] 73 - "f" [":G fetch --all<cr>" 74 - "Git Fetch"] 75 - "b" [":GBranches<cr>" 76 - "Git Branch"] 77 - "p" [":Git! push<cr>" 78 - "Git Push"] 79 - "d" [":GDiff<cr>" 80 - "Git Diff"] 81 - "h" ["" 82 - "Commit Hunk under Cursor"]} 83 - ; For handling merges 84 - ; nmap <leader>gl :diffget //3<CR> 85 - ; nmap <leader>gh :diffget //2<CR> 86 - ; nnoremap <leader>gc :G commit -v -q %:p<CR> 87 - ; Buffers 88 - "b" {:name "Buffer" 89 - :b ["<cmd>:Telescope buffers<CR>" 90 - "Buffer List"] 91 - :q ["<cmd>:BufferClose<CR>" 92 - "Buffer Quit"] 93 - :n ["<cmd>:BufferNext<CR>" 94 - "Buffer Next"] 95 - :N ["<cmd>:tabp<CR>" 96 - "Buffer Previous"] 97 - :p ["<cmd>:tabp<CR>" 98 - "Buffer Previous"]} 99 - ; Search 100 - "s" {:name "Search" 101 - :b ["<cmd>Telescope current_buffer_fuzzy_find<CR>" 102 - "Search in current buffer"] 103 - :s ["<cmd>Telescope live_grep<CR>" 104 - "Search in project"] 105 - :t ["<cmd>TodoTelescope<CR>" 106 - "Search TODOs in project"] 107 - :c ["<cmd>let @/ = \"\"<CR>:echo 'Search highlight cleared'<CR>" 108 - "Clear search"]} 109 - ; Code 110 - "c" {:name "Code" 111 - :d [":lua vim.lsp.buf.definition()<CR>" 112 - "Go to Definition"] 113 - :i [":lua require('telescope.builtin').lsp_implementation()<CR>" 114 - "Implementation"] 115 - :s [":lua vim.lsp.buf.signature_help()<CR>" 116 - "Signature Help"] 117 - :r [":Lspsaga rename<CR>" 118 - "Rename Symbol"] 119 - :h [":Lspsaga hover_doc<CR>" 120 - "Hover doc"] 121 - :o ["<cmd>AerialToggle!<CR>" 122 - "Outline"] 123 - :t [":LspDiagnostics 0" 124 - "Find Errors in Buffer"]} 125 - ; Kitaab 126 - "z" {:name "Kitaab" 127 - :n [":ZettelNew<CR>" 128 - "Zettel New"]} 129 - "v" {:name "Tabs" 130 - :v [":vnew<CR>" 131 - "Vertical Split"] 132 - :h [":new<CR>" 133 - "Horizontal Split"]}}) 134 - 135 - (wk.register normal-map-leader {:prefix "<leader>"})
-30
home/profiles/nvim/config/fnl/conf/music.fnl
··· 1 - (local nvim (require :lib/nvim)) 2 - 3 - (nvim.g :tidal_target "terminal") 4 - (nvim.g :scnvim_snippet_format "luasnip") 5 - 6 - ; -- supercollider 7 - ; local scnvim = require 'scnvim' 8 - ; local map = scnvim.map 9 - ; local map_expr = scnvim.map_expr 10 - ; scnvim.setup { 11 - ; keymaps = { 12 - ; ['<localleader>e'] = map('editor.send_line', {'i', 'n'}), 13 - ; ['<localleader>s'] = map_expr('CmdPeriod.run', {'i', 'n'}), 14 - ; ['<localleader>t'] = { 15 - ; map('editor.send_block', {'i', 'n'}), 16 - ; map('editor.send_selection', 'x'), 17 - ; }, 18 - ; ['<CR>'] = map('postwin.toggle'), 19 - ; ['<M-CR>'] = map('postwin.toggle', 'i'), 20 - ; ['<M-L>'] = map('postwin.clear', {'n', 'i'}), 21 - ; ['<C-k>'] = map('signature.show', {'n', 'i'}), 22 - ; ['<F12>'] = map('sclang.hard_stop', {'n', 'x', 'i'}), 23 - ; ['<leader>st'] = map('sclang.start'), 24 - ; ['<leader>sk'] = map('sclang.recompile'), 25 - ; ['<F1>'] = map_expr('s.boot'), 26 - ; ['<F2>'] = map_expr('s.meter'), 27 - ; } 28 - ; } 29 - ; -- You gotta run :SCNvimGenerateAssets for this first 30 - ; -- require("luasnip").add_snippets("supercollider", require("scnvim/utils").get_snippets())
-35
home/profiles/nvim/config/fnl/conf/plugins/cmp.fnl
··· 1 - (local cmp (require :cmp)) 2 - 3 - (fn has-words-before [] 4 - (let [(line col) (unpack (vim.api.nvim_win_get_cursor 0)) 5 - cur-line (. (vim.api.nvim_buf_get_lines 0 6 - (- line 1) 7 - line 8 - true 9 - 1))] 10 - (and (not= col 0) 11 - (= (: (: cur-line :sub col col) :match "%s") 12 - nil)))) 13 - 14 - (let [lspkind (require :lspkind)] 15 - (cmp.setup {:formatting {:format (lspkind.cmp_format {:mode "symbol_text" 16 - :maxwidth 50}) 17 - :show_labelDetails true} 18 - :snippet {:expand (fn [args] (vim.snippet.expand args.body))} 19 - :sources [{:name "buffer"} {:name "nvim_lsp"} 20 - {:name "look"} {:name "path"} 21 - {:name "calc"} {:name "spell"} 22 - {:name "tags"}] 23 - :mapping {"<C-d>" (cmp.mapping.scroll_docs -4) 24 - "<C-u>" (cmp.mapping.scroll_docs 4) 25 - "<C-g>" (cmp.mapping.close) 26 - "<CR>" (cmp.mapping.confirm {:select true}) 27 - "<Tab>" (cmp.mapping (fn [fallback] 28 - (if (cmp.visible) (cmp.select_next_item) 29 - (has-words-before) (cmp.complete) 30 - (fallback))) 31 - [:i :s]) 32 - "<S-Tab>" (cmp.mapping (fn [fallback] 33 - (if (cmp.visible) (cmp.select_prev_item) 34 - (fallback))) 35 - [:i :s])}}))
-35
home/profiles/nvim/config/fnl/conf/plugins/kitaab.fnl
··· 1 - ; Kitaab is why I'm so tied to vim. 2 - ; If only I could find a nice notes editor... 3 - 4 - (local nvim (require :lib/nvim)) 5 - 6 - (import-macros {: do-req } :lib/macros) 7 - 8 - (nvim.g :vimwiki_list [{:path "~/kitaab/vimwiki" 9 - :auto_tags 1 10 - :auto_diary_index 1 11 - :auto_generate_links 0 12 - :nested_syntaxes {:python "python" 13 - :c++ "cpp" 14 - :nix "nix" 15 - :bash "sh"}}]) 16 - (nvim.g :zettel_format "%y%m%d-%H%M") 17 - 18 - ; Custom functions 19 - (fn update_date [] 20 - (var written false) 21 - (let [time (os.date "%Y-%m-%d %H:%M") 22 - message (.. "%update " time) 23 - lines (vim.api.nvim_buf_get_lines 0 0 4 false)] 24 - (each [index line (ipairs lines)] 25 - (if (and (= (length line) 0) (not written)) 26 - (do 27 - (vim.api.nvim_buf_set_lines 0 (- index 1) index false [message ""]) 28 - (set written true))) 29 - (if (and (= index 4) (not written)) 30 - (vim.api.nvim_buf_set_lines 0 3 index false [message]))))) 31 - 32 - (vim.api.nvim_create_autocmd "BufWritePre" {:pattern ["*.wiki"] 33 - :callback update_date}) 34 - 35 - (do-req :hologram :setup {:auto_display false})
-45
home/profiles/nvim/config/fnl/conf/plugins.fnl
··· 1 - (local nvim (require :lib/nvim)) 2 - (local navic (require :nvim-navic)) 3 - 4 - (import-macros {: do-req } :lib/macros) 5 - 6 - (let [lualine (require :lualine)] 7 - (lualine.setup {:options {:theme "ayu"} 8 - :sections {; :lualine_c [:filename (fn [] 9 - ; (let [lspsaga (require :lspsaga.symbol.winbar)] 10 - ; (lspsaga.get_bar)) 11 - :lualine_y [(fn [] 12 - (var msg "No Active LSP") 13 - (let [buf_ft (vim.api.nvim_buf_get_option 0 "filetype") 14 - clients (vim.lsp.get_active_clients)] 15 - (each [_ client (ipairs clients)] 16 - (let [filetypes (. client :config :filetypes)] 17 - (if (and filetypes (vim.fn.index filetypes buf_ft)) (set msg client.name)))) 18 - msg))] 19 - :lualine_x [:filetype]}})) 20 - 21 - (require :neo-tree) 22 - (do-req :gitsigns :setup) 23 - (do-req :marks :setup) 24 - ; (do-req :mini.pairs :setup) 25 - (do-req :mini.diff :setup) 26 - (do-req :mini.ai :setup) 27 - (do-req :mini.surround :setup {:mappings {:add "ys" 28 - :delete "ds" 29 - :replace "cs"}}) 30 - (do-req :todo-comments :setup) 31 - (do-req :ibl :setup {:scope {:exclude {:language ["fennel" "clojure" "janet"]}}}) 32 - 33 - (do-req :nvim-treesitter.configs :setup {:highlight {:enable true} 34 - :textobjects {:enable true} 35 - :indent {:enable true}}) 36 - (do-req :treesitter-context :setup {:max_lines 5}) 37 - 38 - (do-req :auto-session :setup {:log_level "info" 39 - :auto_session_suppress_dirs ["~/"]}) 40 - (nvim.opt :sessionoptions "blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal") 41 - 42 - (do-req :aerial :setup {}) ;{:on_attach (fn [bufnr] 43 - ; (do 44 - ; (vim.keymap.set "n" "{" "<cmd>AerialPrev<CR>" { :buffer bufnr}) 45 - ; (vim.keymap.set "n" "}" "<cmd>AerialNext<CR>" { :buffer bufnr}))
-6
home/profiles/nvim/config/fnl/lib/macros.fnl
··· 1 - (fn do-req [mod key ...] 2 - `(let [name# (require ,mod) 3 - fun# (. name# ,key)] 4 - (fun# ,...))) 5 - 6 - {: do-req}
-37
home/profiles/nvim/config/fnl/lib/nvim.fnl
··· 1 - (fn autocmd [events opts] 2 - "Create autocommand" 3 - (vim.api.nvim_create_autocmd events opts)) 4 - 5 - (fn clear-autocmds [opts] 6 - "Clear autocommands" 7 - (vim.api.nvim_clear_autocmds opts)) 8 - 9 - (fn augroup [name ?opts] 10 - "Create autocommand group" 11 - (vim.api.nvim_create_augroup name (or ?opts {}))) 12 - 13 - (fn keymap [mode lhs rhs ?opts] 14 - "Sets a global mapping for the given mode. 15 - Ex: `(keymap [:n :i] ...)`" 16 - (let [string-mode (table.concat mode)] 17 - (vim.api.nvim_set_keymap string-mode lhs rhs (or ?opts {})))) 18 - 19 - (fn opt [key value] 20 - "Set a vim option" 21 - (tset vim.opt key value)) 22 - 23 - (fn g [key value] 24 - "Set a vim global" 25 - (tset vim.g key value)) 26 - 27 - (fn colorscheme [name] 28 - "Set the current colorscheme" 29 - (vim.cmd (.. "colorscheme " name))) 30 - 31 - {: autocmd 32 - : clear-autocmds 33 - : augroup 34 - : keymap 35 - : opt 36 - : g 37 - : colorscheme}
-26
home/profiles/nvim/config/init.lua
··· 1 - if pcall(require, "hotpot") then 2 - -- Setup hotpot.nvim 3 - require("hotpot").setup({ 4 - provide_require_fennel = true, 5 - -- show fennel compiler results in when editing fennel files 6 - enable_hotpot_diagnostics = true, 7 - compiler = { 8 - -- options passed to fennel.compile for modules, defaults to {} 9 - modules = { 10 - -- not default but recommended, align lua lines with fnl source 11 - -- for more debuggable errors, but less readable lua. 12 - correlate = true 13 - }, 14 - macros = { 15 - -- allow macros to access vim global, needed for nyoom modules 16 - env = "_COMPILER", 17 - compilerEnv = _G, 18 - allowGlobals = true, 19 - }, 20 - } 21 - }) 22 - -- Import neovim configuration 23 - require("conf") 24 - else 25 - print("Unable to require hotpot") 26 - end
+4 -130
home/profiles/nvim/default.nix
··· 1 1 { pkgs, ... }: 2 - # TODO Need to find a solution to have my own packages? 3 - # Or at least update to recent versions of the packages I do use in nixpkgs 4 2 { 5 3 home.sessionVariables.EDITOR = "nvim"; 6 4 home.shellAliases = { 7 - vim = "nvim"; 8 5 k = "cd ~/kitaab/vimwiki; vim -c :VimwikiIndex; cd $OLDPWD"; 9 - # kitaab zettel 10 - kz = "cd ~/kitaab/vimwiki; vim -c :VimwikiIndex -c :ZettelNew; cd $OLDPWD"; 11 - # kitaab get by tagged 12 - kt = 13 - "cd /home/anish/kitaab/vimwiki; eza *_index.wiki | fzf --preview 'bat --style=numbers --color=always --terminal-width -1 ./{}';cd $OLDPWD"; 14 6 }; 15 7 16 - home.file.".config/nvim".source = ./config; 17 - 18 - #environment.systemPackages = with customPlugins; [ tidal ]; 19 8 programs.neovim = { 20 9 enable = true; 21 - 10 + package = pkgs.unstable.neovim-unwrapped; 22 11 extraPackages = with pkgs; [ 23 - # used to compile tree-sitter grammar 24 - # python-with-my-packages 25 - # nodejs 26 - # clojure-lsp 27 - # clojure 28 - # clj-kondo 29 - terraform-lsp 30 - nil 31 - gopls 32 - gcc 33 - shellcheck 34 - shfmt 35 - proselint 36 - nixfmt 37 - # statix 38 - # nodePackages.typescript 39 - # nodePackages.typescript-language-server 40 - # luajitPackages.lua-lsp 41 - fennel-ls 42 - unstable.starpls-bin 12 + # used for Cody 13 + nodejs 43 14 ]; 44 15 45 - plugins = with pkgs.unstable.vimPlugins; 46 - [ 47 - #hotpot 48 - hotpot-nvim 49 - nvim-navic 50 - # ui 51 - lualine-nvim 52 - neo-tree-nvim 53 - fzf-vim 54 - vim-devicons 55 - nvim-web-devicons 56 - telescope-nvim 57 - plenary-nvim 58 - FTerm-nvim 59 - barbar-nvim 60 - neovim-ayu 61 - rainbow_parentheses-vim 62 - auto-session 63 - which-key-nvim 64 - aerial-nvim 65 - todo-comments-nvim 66 - indent-blankline-nvim 67 - nvim-parinfer 68 - 69 - # Tree sitter 70 - (nvim-treesitter.withPlugins (p: [ 71 - p.nix 72 - p.clojure 73 - p.fennel 74 - p.lua 75 - p.html 76 - p.css 77 - p.regex 78 - p.supercollider 79 - p.beancount 80 - p.markdown_inline 81 - p.markdown 82 - p.glsl 83 - p.yaml 84 - p.toml 85 - p.dockerfile 86 - p.json 87 - p.go 88 - p.starlark 89 - ])) 90 - nvim-treesitter-context 91 - nvim-treesitter-textobjects 92 - 93 - # TODO 94 - undotree 95 - marks-nvim 96 - 97 - # language 98 - vim-nix 99 - emmet-vim 100 - csv-vim 101 - direnv-vim 102 - # conjure 103 - 104 - # kitaab stuff 105 - vimwiki 106 - vim-zettel 107 - hologram-nvim 108 - 109 - # lsp stuff 110 - nvim-lspconfig 111 - nvim-cmp 112 - cmp-nvim-lsp 113 - cmp-treesitter 114 - # cmp-conjure 115 - cmp-buffer 116 - cmp-path 117 - cmp-spell 118 - lspkind-nvim 119 - conform-nvim 120 - none-ls-nvim 121 - mini-nvim 122 - # nvim-lspfuzzy 123 - 124 - # git stuff 125 - vim-fugitive 126 - gitsigns-nvim 127 - fzf-checkout-vim 128 - 129 - # Clojure stuff 130 - # conjure 131 - vim-sexp 132 - vim-sexp-mappings-for-regular-people 133 - fennel-vim 134 - 135 - # nvim-luapad 136 - scnvim 137 - flash-nvim 138 - vim-beancount 139 - ] ++ [ pkgs.vimPlugins.vim-tidal ]; 140 - # withPython3 = true; 141 - # extraPython3Packages = pkgs: with pkgs; [ tasklib six ]; 142 - # vimAlias = true; 16 + vimAlias = true; 143 17 }; 144 18 } 145 19
+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 - 90 85 # Urgency 91 86 urgency.user.project.wait.coefficient=-10.0 92 87 urgency.user.project.craft.coefficient=1.9
+1 -1
hosts/box/configuration.nix
··· 91 91 sound.enable = false; 92 92 93 93 programs.gnupg.agent.enable = true; 94 - programs.gnupg.agent.pinentryPackage = pkgs.pinentry-curses; 94 + programs.gnupg.agent.pinentryFlavor = "curses"; 95 95 programs.gnupg.agent.enableSSHSupport = true; 96 96 97 97 # This value determines the NixOS release with which your system is to be
+5 -7
hosts/box/default.nix
··· 7 7 ../profiles/taskd 8 8 ../profiles/shaarli 9 9 ../profiles/dns 10 - # ../profiles/monitoring 10 + ../profiles/monitoring 11 11 ../profiles/nfs 12 12 ../profiles/gonic 13 - # ../profiles/headphones # TODO broken on 23.11, see: https://github.com/rembo10/headphones/issues/3320 13 + ../profiles/headphones 14 14 ../profiles/radicale 15 - # ../profiles/seafile # waiting for https://github.com/NixOS/nixpkgs/pull/249523 to be merged 15 + ../profiles/seafile 16 16 ../profiles/syncthing 17 17 ../profiles/dhyan 18 18 ../profiles/calibre ··· 22 22 ../profiles/grasp 23 23 # ../profiles/archivebox 24 24 # ../profiles/woodpecker-agent 25 - # ../profiles/jellyfin 25 + ../profiles/jellyfin 26 26 ../profiles/ulogger-server 27 - ../profiles/photoprism # Replace with immich 28 - ../profiles/gpodder 29 - #../profiles/postgres_upgrade_script 27 + ../profiles/photoprism 30 28 ]; 31 29 32 30 # Backups
+1 -1
hosts/curve/configuration.nix
··· 36 36 37 37 sound.enable = true; 38 38 39 - services.libinput.enable = true; 39 + services.xserver.libinput.enable = true; 40 40 }
+2 -8
hosts/curve/default.nix
··· 20 20 # import profiling tools 21 21 programs.systemtap.enable = true; 22 22 23 - virtualisation.docker.enable = true; 24 - virtualisation.docker.storageDriver = "btrfs"; 25 - environment.systemPackages = with pkgs; [ 26 - docker-compose 27 - ]; 28 - 29 23 # Speed up boot by removing dependency on network 30 24 systemd = { 31 25 targets.network-online.wantedBy = pkgs.lib.mkForce [ ]; # Normally ["multi-user.target"] ··· 33 27 }; 34 28 35 29 programs.gnupg.agent.enable = true; 36 - programs.gnupg.agent.pinentryPackage = pkgs.pinentry-gnome3; 30 + programs.gnupg.agent.pinentryFlavor = "gnome3"; 37 31 38 32 fileSystems."/mnt/ftp" = { 39 33 device = "192.168.1.240:/home/ftp"; ··· 93 87 #virtualisation.docker.enable = true; 94 88 boot.blacklistedKernelModules = [ "qcserial" ]; 95 89 # Used for packer Capsul 96 - users.users.anish.extraGroups = [ "adbusers" "wheel" "plugdev" "libvertd" "docker" ]; 90 + users.users.anish.extraGroups = [ "adbusers" "wheel" "plugdev" "libvertd" ]; 97 91 virtualisation.libvirtd.enable = true; 98 92 hardware.keyboard.zsa.enable = true; 99 93 services.udev.extraRules = ''
+16 -12
hosts/curve/hardware-configuration.nix
··· 5 5 6 6 { 7 7 imports = 8 - [ (modulesPath + "/installer/scan/not-detected.nix") 8 + [ 9 + (modulesPath + "/installer/scan/not-detected.nix") 9 10 ]; 10 11 11 - boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; 12 + boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" "rtsx_pci_sdmmc" ]; 12 13 boot.initrd.kernelModules = [ "dm-snapshot" ]; 13 14 boot.kernelModules = [ "kvm-intel" ]; 14 15 boot.extraModulePackages = [ ]; 15 16 17 + fileSystems."/boot" = 18 + { 19 + device = "/dev/disk/by-uuid/2C41-3DAA"; 20 + fsType = "vfat"; 21 + }; 22 + 16 23 fileSystems."/" = 17 - { device = "/dev/disk/by-uuid/e1268753-4f18-4e6f-8edb-d4724ad8eb4a"; 24 + { 25 + device = "/dev/disk/by-uuid/a4ae2855-10b9-49f3-adb0-acd82b74eeb9"; 18 26 fsType = "btrfs"; 19 27 options = [ "subvol=root" ]; 20 28 }; 21 29 22 30 fileSystems."/home" = 23 - { device = "/dev/disk/by-uuid/e1268753-4f18-4e6f-8edb-d4724ad8eb4a"; 31 + { 32 + device = "/dev/disk/by-uuid/a4ae2855-10b9-49f3-adb0-acd82b74eeb9"; 24 33 fsType = "btrfs"; 25 34 options = [ "subvol=home" ]; 26 35 }; 27 36 28 - fileSystems."/boot" = 29 - { device = "/dev/disk/by-uuid/8244-A184"; 30 - fsType = "vfat"; 31 - }; 32 - 33 37 swapDevices = 34 - [ { device = "/dev/disk/by-uuid/e220fea6-cf3b-4687-bfe1-9cf6d3ba57f7"; } 35 - ]; 38 + [{ device = "/dev/disk/by-uuid/23658926-6ffa-42dc-8915-a6479c385e0b"; }]; 36 39 37 40 # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 38 41 # (the default) this is the recommended approach. When using systemd-networkd it's ··· 43 46 # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true; 44 47 45 48 nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 46 - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 49 + powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; 50 + # hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 47 51 }
+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 - }
+3 -6
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 17 14 ]; 18 15 19 16 # Capsul specific ··· 30 27 privateKeyFile = "/run/agenix/helix-wg"; 31 28 }; 32 29 33 - services.postgresql.package = pkgs.postgresql_15; 30 + services.postgresql.package = pkgs.postgresql_11; 34 31 services.postgresqlBackup = { 35 32 # TODO needs working wireguard to box 36 33 enable = false; 37 - databases = [ "gitea" "freshrss" ]; # "woodpecker" 34 + databases = [ "gitea" "freshrss" "woodpecker" ]; 38 35 location = "/mnt/two/postgres"; 39 36 }; 40 37 ··· 44 41 paths = [ 45 42 "/var/lib/gitea" 46 43 "/var/lib/freshrss" 47 - # "/var/lib/woodpecker" 44 + "/var/lib/woodpecker" 48 45 "/var/lib/microbin" 49 46 ]; 50 47
+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 + 23 28 swapDevices = [ ]; 24 29 25 30 hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+1 -1
hosts/profiles/core/default.nix
··· 32 32 }; 33 33 34 34 environment.systemPackages = with pkgs; [ 35 - pinentry-gnome3 35 + pinentry_gnome 36 36 cached-nix-shell 37 37 ]; 38 38
+6 -7
hosts/profiles/desktop/default.nix
··· 62 62 }; 63 63 64 64 environment.systemPackages = with pkgs; [ 65 - #unstable.sublime-music 65 + unstable.sublime-music 66 66 unstable.nheko 67 67 unstable.signal-desktop 68 68 unstable.tuba ··· 77 77 feh 78 78 sxiv 79 79 xkblayout-state 80 + vcv-rack 80 81 zathura 81 82 calibre 82 83 mpv ··· 86 87 rofi 87 88 rofimoji 88 89 rofi-calc 90 + # eww 89 91 obs-studio 90 92 lightdm 91 93 dunst ··· 97 99 papirus-icon-theme 98 100 calendar-cli 99 101 wyrd 100 - # tic-80 102 + tic-80 101 103 ytfzf 102 104 yt-dlp 103 105 ]; ··· 119 121 night = 3700; 120 122 }; 121 123 }; 122 - displayManager.defaultSession = "none+bspwm"; 123 124 xserver = { 124 125 enable = true; 125 - # TODO should be xkb.layout 126 - xkb.layout = "us"; 127 - # xkb.variant = "dvorak"; 126 + xkb.layout = "us,dvorak"; 128 127 desktopManager.wallpaper.mode = "fill"; 129 128 displayManager = { 130 - # startx.enable = true; 129 + defaultSession = "none+bspwm"; 131 130 sessionCommands = '' 132 131 ${pkgs.xorg.xrdb}/bin/xrdb -merge <<EOF 133 132 #define blk #1F2430
-1
hosts/profiles/dns/default.nix
··· 39 39 "tracks.mossnet.lan" 40 40 "grasp.mossnet.lan" 41 41 "photos.mossnet.lan" 42 - "pod.mossnet.lan" 43 42 ]; 44 43 45 44 in
+1 -1
hosts/profiles/finance/default.nix
··· 4 4 services.paperless = { 5 5 enable = false; 6 6 consumptionDirIsPublic = true; 7 - settings.PAPERLESS_AUTO_LOGIN_USERNAME = "admin"; 7 + extraConfig.PAPERLESS_AUTO_LOGIN_USERNAME = "admin"; 8 8 }; 9 9 10 10 environment.systemPackages = [
+7 -8
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 - # freshrss-users postgres freshrss 27 - # ''; 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 + ''; 28 27 ensureDatabases = [ "freshrss" ]; 29 28 ensureUsers = [{ 30 29 name = "freshrss";
+10 -25
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.forgejo = { 7 + services.gitea = { 8 8 enable = true; 9 - user = "gitea"; 10 - group = "gitea"; 11 - stateDir = "/var/lib/gitea"; 9 + package = pkgs.forgejo; 10 + appName = "Sealight Git Forge"; 12 11 database = { 13 12 type = "postgres"; 14 - user = "gitea"; 15 - name = "gitea"; 16 13 passwordFile = "/run/agenix/gitea-dbpass"; 17 14 }; 18 15 settings = { 19 - DEFAULT.APP_NAME = "Sealight Git Forge"; 20 16 server = { 21 17 DOMAIN = "git.sealight.xyz"; 22 18 ROOT_URL = "https://git.sealight.xyz"; ··· 28 24 repository = { 29 25 DEFAULT_BRANCH = "main"; 30 26 }; 31 - service.DISABLE_REGISTRATION = true; 32 27 "markup.restructuredtext" = { 33 28 ENABLED = true; 34 29 FILE_EXTENSIONS = ".rst"; ··· 48 43 }; 49 44 }; 50 45 51 - users.users.gitea = { 52 - home = "/var/lib/gitea"; 53 - useDefaultShell = true; 54 - group = "gitea"; 55 - isSystemUser = true; 56 - }; 57 - 58 - users.groups.gitea = {}; 59 - 60 46 environment.systemPackages = [ pkgs.pandoc ]; 61 47 services.postgresql = { 62 48 enable = true; # Ensure postgresql is enabled 63 - # authentication = '' 64 - # local gitea all ident map=gitea-users 65 - # ''; 66 - # identMap = # Map the gitea user to postgresql 67 - # '' 68 - # gitea-users gitea gitea 69 - # gitea-users postgres gitea 70 - # ''; 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 + ''; 71 56 ensureDatabases = [ "gitea" ]; 72 57 ensureUsers = [{ 73 58 name = "gitea";
+1 -10
hosts/profiles/gonic/default.nix
··· 5 5 music-path /mnt/two/music/ 6 6 podcast-path /data/podcasts 7 7 cache-path /data/cache 8 - playlists-path /data/playlists 9 8 ''; 10 - mossnet.gonic.user = "gonic"; 9 + mossnet.gonic.user = "headphones"; 11 10 mossnet.gonic.group = "audio"; 12 11 networking.firewall.allowedTCPPorts = [ 4747 ]; 13 - 14 - users.users.gonic = { 15 - # uid = config.ids.uids.headphones; 16 - # isSystemUser = true; 17 - group = "audio"; 18 - # home = "/var/lib/headphones"; 19 - createHome = true; 20 - }; 21 12 }
+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"; 71 73 ProtectControlGroups = "yes"; 72 74 ProtectKernelModules = "yes"; 73 75 ProtectKernelTunables = "yes"; 74 76 RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6"; 77 + RestrictNamespaces = "yes"; 78 + RestrictRealtime = "yes"; 75 79 SystemCallFilter = "~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap"; 76 80 ReadWritePaths = dataFolder; 77 81 StateDirectory = baseNameOf dataFolder;
-16
hosts/profiles/gpodder/default.nix
··· 1 - { 2 - services.gpodder.enable = true; 3 - networking.firewall.allowedTCPPorts = [ 3005 ]; 4 - services.nginx.virtualHosts."pod.mossnet.lan" = { 5 - extraConfig = "client_max_body_size 20M;"; 6 - 7 - locations."/" = { 8 - extraConfig = '' 9 - proxy_pass http://localhost:3005/; 10 - proxy_set_header X-Forwarded-Proto $scheme; 11 - proxy_set_header X-Real-IP $remote_addr; 12 - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 13 - ''; 14 - }; 15 - }; 16 - }
-1
hosts/profiles/headphones/default.nix
··· 4 4 enable = true; 5 5 host = "0.0.0.0"; 6 6 port = 8181; 7 - package = "${pkgs.unstable.headphones}"; 8 7 user = "headphones"; 9 8 group = "audio"; 10 9 dataDir = "/data/music";
+1 -1
hosts/profiles/matrix/mautrix-services.nix
··· 34 34 signal = { 35 35 port = 29184; 36 36 format = "mautrix-python"; 37 - package = pkgs.unstable.mautrix-signal; 37 + package = pkgs.mautrix-signal; 38 38 serviceConfig = { 39 39 StateDirectory = [ "matrix-as-signal" "signald" ]; 40 40 SupplementaryGroups = [ "signald" ];
+2 -2
hosts/profiles/microbin/default.nix
··· 1 1 { config, lib, pkgs, ... }: 2 2 { 3 3 services.microbin.enable = true; 4 - services.microbin.settings.PUBLIC_PATH = "bin.sealight.xyz"; 5 - services.microbin.settings.MICROBIN_PORT = 4949; 4 + services.microbin.hostname = "bin.sealight.xyz"; 5 + services.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 22 21 ''; 23 22 # 10.0.69.4 mossnet.lan 24 23 # 10.0.69.4 links.mossnet.lan
+2 -2
hosts/profiles/music/default.nix
··· 16 16 orca-c 17 17 supercollider 18 18 dirt 19 - # sunvox 19 + sunvox 20 20 vcv-rack 21 21 lmms 22 22 bespokesynth ··· 38 38 alsa.enable = true; 39 39 alsa.support32Bit = false; 40 40 pulse.enable = true; 41 - jack.enable = true; 41 + jack.enable = true; 42 42 # Deprecated as of 23.05 43 43 # config = { 44 44 # pipewire."context.properties"."default.clock.rate" = "48000";
+4 -3
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 9 10 # The schema can be found by running: 10 - # nix eval --raw nixpkgs#postgresql_15.psqlSchema 11 - export NEWDATA="/var/lib/postgresql/15" 11 + # nix-instantiate '<nixpkgs>' --eval -A postgresql_14.psqlSchema 12 + export NEWDATA="/var/lib/postgresql/<new version>" 12 13 13 14 # TODO specify the postgresql package you'd like to upgrade to 14 - export NEWBIN="${pkgs.postgresql_15}/bin" 15 + export NEWBIN="${pkgs.postgresql_14}/bin" 15 16 16 17 export OLDDATA="${config.services.postgresql.dataDir}" 17 18 export OLDBIN="${config.services.postgresql.package}/bin"
+1 -1
hosts/profiles/rss-bridge/default.nix
··· 3 3 services.rss-bridge = { 4 4 enable = true; 5 5 virtualHost = "bridge.sealight.xyz"; 6 - config.system.enabled_bridges = [ "Facebook" "Bandcamp" "Twitter" "Telegram" "Instagram" "Reddit" ]; 6 + whitelist = [ "Facebook" "Bandcamp" "Twitter" "Telegram" "Instagram" "Reddit" ]; 7 7 }; 8 8 9 9 services.nginx.virtualHosts."bridge.sealight.xyz".forceSSL = true;
hosts/profiles/sync/music/get-music.sh
+2 -2
hosts/profiles/sync/website/default.nix
··· 6 6 path = [ 7 7 pkgs.git 8 8 pkgs.coreutils 9 - pkgs.nixVersions.latest 9 + pkgs.nixUnstable 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 .#helix 21 + deploy .#cube 22 22 exit 0 23 23 ''; 24 24 serviceConfig = {
+1 -1
hosts/profiles/ulogger-server/default.nix
··· 6 6 ensureDatabases = [ "ulogger" ]; 7 7 ensureUsers = [{ 8 8 name = "ulogger"; 9 - ensureDBOwnership = true; 9 + nsureDBOwnership = true; 10 10 }]; 11 11 }; 12 12
+67 -14
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 peer 21 + local wallabag all md5 22 22 ''; 23 23 }; 24 24 25 25 services.wallabag = { 26 26 enable = true; 27 - domain = "read.mossnet.lan"; 28 - virtualHost.enable = true; 29 - package = pkgs.my-wallabag; 30 - # Systemd now defaults to /var/lib? 31 - # dataDir = "/var/lib/wallabag"; 32 - parameters = { 33 - "env(SECRET_FILE)" = config.age.secrets.wallabag-secret.path; 34 - secret = "%env(file:resolve:SECRET_FILE)%"; 35 - }; 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 + ''; 36 88 }; 89 + # networking.firewall.allowedTCPPorts = [ 8080 ]; 37 90 }
+5 -10
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 = "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 - } 39 + # { 40 + # # hyperplane 41 + # publicKey = ""; 42 + # allowedIPs = [ "10.0.69.6/32" ]; 43 + # } 49 44 ]; 50 45 }; 51 46 }
+1 -4
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 = 8 - "$y$j9T$y3DPt/dWaPE.gRazQqw1w0$1RMH5sl/Nu8kW3ZMywYCPRniHD/jF5qRh0VKrdJ.bV2"; 7 + hashedPassword = "$y$j9T$y3DPt/dWaPE.gRazQqw1w0$1RMH5sl/Nu8kW3ZMywYCPRniHD/jF5qRh0VKrdJ.bV2"; 9 8 shell = pkgs.zsh; 10 9 isNormalUser = true; 11 10 extraGroups = [ "wheel" "audio" "networkmanager" "video" ]; ··· 16 15 "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDtU2GMYjXj6RGO1+mwM4TDGOo0qrKLTL4Di8+QgDX0p5vUEsnE1PS9wnuqCmSu75U8g0XIAMtvtdYyGk1N+Bx01erAZpT8DLYtIXFCyaiN28PVu5T1D0T+TQ7xgIH1qenXZR2DOQdf6kpvKEfm7+7bWhCo0N/KFMpmReubyzHDQcq/1qQasxTL+YALQFOjwKqsOTBXbHwZ103AEAcQX4ftBFEOfVli4/1aKIK4dNSZYB7J9Htq707YnsEqo9RLAMh0aOTTYgTx9AoSUDeqGuh/AGkcB7NcS7EEtI6d5YUGylwZh/gF6hqE0jl8kn2m5jMKXL3CRohZvjifue8x/GIjpu5WRabUuhBEbrfTQQaC7taHnt5rvYCGzKZx09TexUzhuz2CL480DRoxSG+P+lCNm1dIg/EZrnGEzXCSr36PlOqS5t5gm8tPkzCmZf2wU15A3ZIYUPmnYLqsn4WmIV7rKmdqt2ctWELUXow3PPiZXBucP9P3xpsYEfF1SB2SGNc= u0_a139@localhost" 17 16 # Box 18 17 "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKN8/SH55DBiwVoSnTU8k2Pen+wmovL9QaMyehxGEsJJv/8fzwsswGalD4C/4O51LOvdu4UKkZW5hG02uVSK+58p3UV3pOPyoqsu/aDeIsWsqmTeTzUrBIWOlNzcDKnohLz2oGC5YO+wyTJ9Iteq6aGJDjErsW7sG3h5lXCs551EmJNNGhtBQaaoytMNnWqSdlVjDNCijurH7WUpp40U/RjEp532l4rX6eIIj3jBKEFbhZkFSSjqbj4xM4SyFt+Jmigb1RMjsQjmpfY1vDtM84RcYfpTUte/T5w2dkD5H6kccmWnwKSJpm9wXfx4E7lR9APdUGnau2U1+XxiD3ytGl anish@box" 19 - # Work 20 - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC/vvh0i6+uAN0GWlK6ZfyTlc/AW54xe2CroUDsDSoGnFKeIUiSsWexobODlVakNhqwCKfsvUh6g+RdA8ZVcamATcYqxysP4X5fRksmAzRm5281O7ZBDHMB2BdcfHSTgiz7JvMRIQYWDlU8Ck6IL4wlN0b2GMUj9t/GeG37us8280rxpRNoIY7M27AJEZ7XNQhctBIVujxctVBgIMYmZiTwziU7ywJv4rNT5OAWvjRXSo1rkxdvx3VESv4y/mp8m7dEupZpIjIFsLs52+UG5LtadulUqtTWg05sCw8LEcmRhflgZSAvjw60RrKFCuWxc8+/Pmaw+zExeBMenqi0NzuTc3S3k2wCKVIZDh/0tlXzIwZ6WRqxDevUtEKfvbEFMXd8akhTfYs0dyszcFRevBxOBPbcKku+FK/HkdPLmEANvxYty3cv+Eipkz3c8JPJPvXNTXrjepXMm0LUKodO3c15hGogCOxUO38kykkyYnn+MxxHparoMfEr2+oHNpQoS5wA1G43ppqjVoRDgnhleu6ixwRkLZzphY3cnOd5jL9Ie5xIGbFWH1qSlQRdHBkHjuf85z7+QK8nFYAhmG1K3Vt3GNtF8LN1tYQkfwBJ/vsroMNzGPoq4PjVbqb80Eq+96cP89XKfU2/xw1g+p2lJDm/zC1WCjXVzf8NRwC7gqPavQ== anishlakhwara@anishs-mbp.lan" 21 18 ]; 22 19 }; 23 20 }
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.libinput.enable = true; 150 + services.xserver.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 + }
+1 -2
modules/nixos/default.nix
··· 9 9 wireguard = import ./wireguard.nix; 10 10 backup = import ./backup.nix; 11 11 ulogger-server = import ./ulogger.nix; 12 - gpodder2go = import ./gpodder2go.nix; 13 - # microbin = import ./microbin.nix; # includide in 23.11 12 + # microbin = import ./microbin.nix; includide in 23.11 14 13 }
-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 -
+212 -198
modules/nixos/wallabag.nix
··· 1 - { config, lib, pkgs, ... }: 1 + { config, options, lib, pkgs, ... }: 2 + 3 + with lib; 2 4 let 3 - # Based on https://github.com/wallabag/wallabag/blob/2.6.6/app/config/parameters.yml.dist 4 - settings = { 5 - database_driver = "${cfg.database_type}"; 6 - database_host = null; 7 - database_port = 5432; 8 - database_name = "wallabag"; 9 - database_user = "wallabag"; 10 - database_password = null; 11 - database_path = null; 12 - database_table_prefix = "wallabag_"; 13 - database_socket = "/run/postgresql"; 14 - database_charset = "utf8"; 5 + cfg = config.services.wallabag; 15 6 16 - domain_name = "http://${cfg.domain}"; 17 - server_name = "Wallabag"; 7 + poolName = "wallabag"; 18 8 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"; 9 + configFile = pkgs.writeTextFile { 10 + name = "wallabag-config"; 11 + text = cfg.conf; 12 + destination = "/app/config/parameters.yml"; 13 + }; 22 14 23 - locale = "en"; 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 + }; 24 22 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)%"; 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 + ''; 28 31 29 - # two factor stuff 30 - twofactor_auth = false; 31 - twofactor_sender = ""; 32 + in 33 + { 32 34 33 - # fosuser stuff 34 - fosuser_registration = false; 35 - fosuser_confirmation = false; 35 + options = { 36 36 37 - # how long the access token should live in seconds for the API 38 - fos_oauth_server_access_token_lifetime = 3600; 39 - # how long the refresh token should life in seconds for the API 40 - fos_oauth_server_refresh_token_lifetime = 1209600; 37 + services.wallabag = { 38 + enable = mkEnableOption "wallabag"; 41 39 42 - from_email = "wallabag@read.mossnet.lan"; 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 + }; 43 47 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; 48 + dataDir = mkOption { 49 + type = types.path; 50 + default = "/var/lib/wallabag"; 51 + description = '' 52 + Data directory. 53 + ''; 54 + }; 50 55 51 - # Redis processing 52 - rabbitmq_host = ""; 53 - rabbitmq_port = 0; 54 - rabbitmq_user = ""; 55 - rabbitmq_password = ""; 56 - rabbitmq_prefetch_count = 0; 56 + package = mkOption { 57 + type = types.package; 58 + default = pkgs.wallabag; 59 + description = '' 60 + Wallabag package to use. 61 + ''; 62 + }; 57 63 58 - # sentry logging 59 - sentry_dsn = null; 60 - } // cfg.parameters; 64 + hostName = mkOption { 65 + type = types.str; 66 + description = '' 67 + Name of the nginx virtualhost to use and setup. 68 + ''; 69 + }; 61 70 62 - php = cfg.php.package.withExtensions ({ enabled, all }: enabled ++ (with all; [ 63 - imagick 64 - tidy 65 - ])); 66 - 67 - commonServiceConfig = { 68 - CacheDirectory = "wallabag"; 69 - # Stores sessions. 70 - CacheDirectoryMode = "700"; 71 - ConfigurationDirectory = "wallabag"; 72 - LogsDirectory = "wallabag"; 73 - StateDirectory = "wallabag"; 74 - # Stores site-credentials-secret-key.txt. 75 - StateDirectoryMode = "700"; 76 - }; 77 - 78 - cfg = config.services.wallabag; 79 - in { 80 - options.services.wallabag = with lib; { 81 - enable = mkEnableOption (mdDoc "Wallabag read-it-later service"); 82 - 83 - package = mkOption { 84 - type = types.package; 85 - default = pkgs.wallabag; 86 - }; 87 - 88 - php.package = mkOption { 89 - type = types.package; 90 - default = pkgs.php; 91 - }; 92 - 93 - parameters = mkOption { 94 - type = types.attrsOf types.str; 95 - default = {}; 96 - description = mdDoc "Parameters to override from the default. See <https://doc.wallabag.org/en/admin/parameters.html> for values."; 97 - }; 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 + }; 98 86 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 - ''; 87 + conf = mkOption { 88 + type = types.str; 89 + description = '' 90 + Contents of the wallabag configuration file (parameters.yml) 91 + ''; 92 + }; 115 93 }; 94 + }; 116 95 117 - domain = mkOption { 118 - type = types.str; 119 - description = "Bare domain name for Wallabag"; 120 - }; 121 96 122 - virtualHost.enable = mkEnableOption (mdDoc "Define nginx virtualhost for Wallabag"); 123 - }; 97 + config = mkIf cfg.enable { 124 98 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 - }; 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; 132 121 }; 133 122 }; 123 + services.phpfpm.phpOptions = '' 124 + max_execution_time = 120 125 + ''; 134 126 135 - services.nginx = lib.mkIf cfg.virtualHost.enable { 136 - enable = true; 127 + services.nginx.enable = mkDefault true; 128 + environment.systemPackages = [ console ]; 137 129 138 - virtualHosts = { 139 - "${cfg.domain}" = { 140 - root = "${pkgs.wallabag}/web"; 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 + # ''; 141 137 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 - ''; 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 + # }; 147 162 148 - locations."/" = { 149 - extraConfig = '' 150 - try_files $uri /app.php$is_args$args; 151 - ''; 152 - }; 153 163 154 - locations."/assets".root = "${pkgs.wallabag}/app/web"; 164 + services.nginx.virtualHosts."${cfg.hostName}" = { 165 + enableACME = false; 166 + forceSSL = false; 167 + root = "${cfg.package}/web"; 155 168 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 - }; 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 + ''; 168 174 169 - locations."~ /(?!app)\\.php$" = { 170 - extraConfig = '' 171 - return 404; 172 - ''; 173 - }; 174 - }; 175 + locations."/" = { 176 + tryFiles = "$uri /app.php$is_args$args"; 175 177 }; 176 - }; 177 178 178 - services.phpfpm.pools.wallabag = { 179 - user = config.users.users.wallabag.name; 180 - phpPackage = php; 181 - settings = { 182 - "catch_workers_output" = true; 179 + locations."/assets".root = "${cfg.dataDir}/web"; 183 180 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; 181 + locations."~ ^/app\\.php(/|$)" = { 182 + fastcgiParams = { 183 + SCRIPT_FILENAME = "$realpath_root$fastcgi_script_name"; 184 + DOCUMENT_ROOT = "$realpath_root"; 185 + }; 186 + extraConfig = '' 187 + fastcgi_pass unix:${config.services.phpfpm.pools."${poolName}".socket}; 188 + include ${config.services.nginx.package}/conf/fastcgi_params; 189 + include ${config.services.nginx.package}/conf/fastcgi.conf; 190 + internal; 191 + ''; 192 + # extraConfig = '' 193 + # fastcgi_pass unix:${config.services.phpfpm.pools."${poolName}".socket}; 194 + # fastcgi_split_path_info ^(.+\.php)(/.*)$; 195 + # include ${pkgs.nginx}/conf/fastcgi_params; 196 + # fastcgi_param SCRIPT_FILENAME ${cfg.package}/web/$fastcgi_script_name; 197 + # fastcgi_param DOCUMENT_ROOT ${cfg.package}/web; 198 + # fastcgi_read_timeout 120; 199 + # internal; 200 + # ''; 194 201 }; 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; 202 + 203 + locations."~ /(?!app)\\.php$" = { 204 + extraConfig = '' 205 + return 404; 206 + ''; 206 207 }; 207 208 }; 208 209 209 - users.users.wallabag = { 210 - isSystemUser = true; 211 - group = "wallabag"; 212 - }; 213 - users.groups.wallabag = {}; 214 - services.redis.servers.wallabag = { 215 - enable = true; 216 - user = "wallabag"; 217 - }; 218 - services.rabbitmq.enable = false; 219 - 220 - systemd.services.phpfpm-wallabag.serviceConfig = commonServiceConfig; 221 - 222 210 systemd.services.wallabag-install = { 223 211 description = "Wallabag install service"; 224 212 wantedBy = [ "multi-user.target" ]; 225 213 before = [ "phpfpm-wallabag.service" ]; 226 - after = [ "postgresql.service" ]; 214 + after = [ "mysql.service" "postgresql.service" ]; 227 215 path = with pkgs; [ coreutils php phpPackages.composer ]; 228 216 229 217 serviceConfig = { 230 - User = "wallabag"; 218 + User = cfg.user; 231 219 Type = "oneshot"; 232 - } // commonServiceConfig; 220 + RemainAfterExit = "yes"; 221 + PermissionsStartOnly = true; 222 + }; 223 + 224 + preStart = '' 225 + mkdir -p "${cfg.dataDir}" 226 + chown ${cfg.user}:nginx "${cfg.dataDir}" 227 + ''; 233 228 234 229 script = '' 235 - if [ ! -f "$STATE_DIRECTORY/installed" ]; then 236 - php ${pkgs.wallabag}/bin/console --env=prod wallabag:install 237 - touch "$STATE_DIRECTORY/installed" 238 - else 239 - php ${pkgs.wallabag}/bin/console --env=prod doctrine:migrations:migrate --no-interaction 240 - fi 241 - php ${pkgs.wallabag}/bin/console --env=prod cache:clear 242 - ''; 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 + ''; 243 253 }; 254 + }; 255 + 256 + meta = with stdenv.lib; { 257 + maintainers = with maintainers; [ nadrieril ]; 244 258 }; 245 259 }
+3 -15
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 - 13 2 key_length=512 14 - iterations=1000000 15 - salt="$(head -n 1 /mnt/crypt-storage/default)" 3 + iterations="$(head -n 2 /boot/crypted-storage/default)" 4 + salt="$(head -n 1 /boot/crypted-storage/default)" 16 5 chal="$(echo -n $salt | openssl dgst -binary -sha512 | rbtohex)" 17 6 resp="$(ykchalresp -2 -x $chal 2>/dev/null)" 18 - user_key= 19 - read -r user_key 7 + user_key="$(read -s)" 20 8 luks_key="$(echo -n $user_key | pbkdf2-sha512 $(($key_length / 8)) $iterations $resp | rbtohex)" 21 9 echo -n $luks_key | hextorb | sudo cryptsetup luksOpen /dev/sda2 crypted --key-file=-
-9
overlays/default.nix
··· 14 14 buildInputs = prevAttrs.propagatedBuildInputs ++ [ final.python3.pkgs.aiosqlite ]; # We're using sqlite and upstream doesn't package this dependency 15 15 }); 16 16 17 - wallabag = prev.wallabag.overrideAttrs (attrs: { 18 - patches = builtins.filter (patch: builtins.baseNameOf patch != "wallabag-data.patch") attrs.patches ++ [ 19 - # Out of the box, Wallabag wants to write to various subdirectories of the project directory. 20 - # Letโ€™s replace references to such paths with designated systemd locations 21 - # so that the project source can remain immutable. 22 - ../pkgs/wallabag-data.patch 23 - ]; 24 - }); 25 - 26 17 # Need to do server and agent too, maybe 27 18 # woodpecker-cli-next = 28 19 # let
+1 -6
pkgs/default.nix
··· 5 5 plymouth-themes = pkgs.callPackage ./plymouth.nix { }; 6 6 tic-80 = pkgs.callPackage ./tic-80.nix { }; 7 7 fennel-ls = pkgs.callPackage ./fennel-ls.nix { }; 8 - # kobopatch = pkgs.callPackage ./kobopatch.nix { }; 8 + kobopatch = pkgs.callPackage ./kobopatch.nix { }; 9 9 my-mautrix-discord = pkgs.callPackage ./mautrix-discord.nix { }; # Handled by matrix-appservices input 10 10 ulogger-server = pkgs.callPackage ./ulogger.nix { }; 11 - # Wallabag is now an overlay 12 - # TODO: we still use the patch from this folder though 13 - my-wallabag = pkgs.callPackage ./wallabag.nix { }; 14 - mautrix-slack = pkgs.callPackage ./mautrix-slack.nix { }; 15 - gpodder2go = pkgs.callPackage ./gpodder2go.nix { }; 16 11 }
-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 { 3 + buildGoModule rec { 4 4 name = "kobopatch"; 5 5 version = "0.15.0"; 6 6 7 - vendorHash = "sha256-1i6srhyig4x8mywyc2l8wzzm1afvb7wxmjsr84c447sb1xss6p7x"; 7 + vendorSha256 = "1i6srhyig4x8mywyc2l8wzzm1afvb7wxmjsr84c447sb1xss6p7x"; 8 8 9 9 src = fetchFromGitHub { 10 10 owner = "geek1011"; 11 11 repo = "kobopatch"; 12 12 rev = "653070c67c83ec61884854efc4f8a3132d82a2e5"; 13 - hash = "sha256-09hr3zh0w0f78cx40d2yydqv0mmjdh4iwdgia7sikraphvha85nn"; 13 + 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 - vendorha256 = "1hqvizvbc29yib6awmvlklxkq7j8c0d32gxsipdiwhkh79xbd6wq"; 7 + vendorSha256 = "1hqvizvbc29yib6awmvlklxkq7j8c0d32gxsipdiwhkh79xbd6wq"; 8 8 deleteVendor = true; 9 9 10 10 src = fetchFromGitHub {
-29
pkgs/mautrix-slack.nix
··· 1 - { lib, buildGoModule, fetchFromGitHub, olm }: 2 - 3 - buildGoModule rec { 4 - pname = "mautrix-discord"; 5 - version = "unstable-2022-11-04"; 6 - 7 - src = fetchFromGitHub { 8 - owner = "mautrix"; 9 - repo = "slack"; 10 - rev = "4530ff397d08d93b673cd71da4c2a75d969ca0df"; 11 - hash = ""; 12 - }; 13 - 14 - buildInputs = [ olm ]; 15 - 16 - vendorHash = "sha256-yday2mSnPwuhXWkCG4XY7qoBl3DXHcSvzBoZbjgYz/c="; 17 - 18 - ldflags = [ "-s" "-w" ]; # https://github.com/NixOS/nixpkgs/issues/177698 19 - 20 - doCheck = false; # No tests available 21 - 22 - meta = with lib; { 23 - homepage = "https://go.mau.fi/mautrix-slack"; 24 - description = "Matrix to Slack hybrid puppeting/relaybot bridge"; 25 - license = licenses.agpl3Plus; 26 - maintainers = with maintainers; [ ]; 27 - }; 28 - } 29 -
+2 -2
pkgs/tic-80.nix
··· 10 10 }; 11 11 buildInputs = with pkgs; [ 12 12 gcc 13 - pkg-config 13 + pkgconfig 14 14 autoconf 15 15 automake 16 16 libtool ··· 27 27 gtk3-x11 28 28 cmake 29 29 cmakeCurses 30 - # elementary-cmake-modules 30 + elementary-cmake-modules 31 31 extra-cmake-modules 32 32 libglvnd 33 33 mesa_glu
-55
pkgs/wallabag-data.patch
··· 1 - diff --git a/app/AppKernel.php b/app/AppKernel.php 2 - index 61b734e06..0902c20fc 100644 3 - --- a/app/AppKernel.php 4 - +++ b/app/AppKernel.php 5 - @@ -64,12 +64,12 @@ class AppKernel extends Kernel 6 - 7 - public function getCacheDir() 8 - { 9 - - return dirname(__DIR__) . '/var/cache/' . $this->getEnvironment(); 10 - + return getenv('CACHE_DIRECTORY') . '/' . $this->getEnvironment(); 11 - } 12 - 13 - public function getLogDir() 14 - { 15 - - return dirname(__DIR__) . '/var/logs'; 16 - + return getenv('LOGS_DIRECTORY'); 17 - } 18 - 19 - public function registerContainerConfiguration(LoaderInterface $loader) 20 - diff --git a/app/config/config.yml b/app/config/config.yml 21 - index 7f0a4ca6c..77b5175c8 100644 22 - --- a/app/config/config.yml 23 - +++ b/app/config/config.yml 24 - @@ -1,5 +1,7 @@ 25 - imports: 26 - - - { resource: parameters.yml } 27 - + # Unfortunately, we cannot use %env(string:CONFIGURATION_DIRECTORY)%. Hardcoding the path for simplicity. 28 - + # https://symfony.com/doc/current/service_container/import.html#importing-configuration-with-imports 29 - + - { resource: '/etc/wallabag/parameters.yml' } 30 - - { resource: security.yml } 31 - - { resource: services.yml } 32 - - { resource: wallabag.yml } 33 - @@ -28,7 +30,7 @@ framework: 34 - session: 35 - # handler_id set to null will use default session handler from php.ini 36 - handler_id: session.handler.native_file 37 - - save_path: "%kernel.project_dir%/var/sessions/%kernel.environment%" 38 - + save_path: "%env(string:CACHE_DIRECTORY)%/sessions/%kernel.environment%" 39 - cookie_secure: auto 40 - fragments: ~ 41 - http_method_override: true 42 - diff --git a/app/config/wallabag.yml b/app/config/wallabag.yml 43 - index bd57d6377..8e1cd0970 100644 44 - --- a/app/config/wallabag.yml 45 - +++ b/app/config/wallabag.yml 46 - @@ -35,7 +35,7 @@ wallabag_core: 47 - fetching_error_message: | 48 - wallabag can't retrieve contents for this article. Please <a href="https://doc.wallabag.org/en/user/errors_during_fetching.html#how-can-i-help-to-fix-that">troubleshoot this issue</a>. 49 - api_limit_mass_actions: 10 50 - - encryption_key_path: "%kernel.project_dir%/data/site-credentials-secret-key.txt" 51 - + encryption_key_path: "%env(string:STATE_DIRECTORY)%/site-credentials-secret-key.txt" 52 - default_internal_settings: 53 - - 54 - name: share_public 55 -
-57
pkgs/wallabag.nix
··· 1 - { lib 2 - , stdenv 3 - , fetchurl 4 - }: 5 - 6 - # Point the environment variable $WALLABAG_DATA to a data directory 7 - # that contains the folder `app` which must be a clone of 8 - # wallabag's configuration files with your customized `parameters.yml`. 9 - # In practice you need to copy `${pkgs.wallabag}/app` and the 10 - # customizzed `parameters.yml` to $WALLABAG_DATA. 11 - # These need to be updated every package upgrade. 12 - # 13 - # After a package upgrade, empty the `var/cache` folder or unexpected 14 - # error will occur. 15 - 16 - let 17 - pname = "wallabag"; 18 - version = "2.6.9"; 19 - in 20 - stdenv.mkDerivation { 21 - inherit pname version; 22 - 23 - # Release tarball includes vendored files 24 - src = fetchurl { 25 - url = "https://github.com/wallabag/wallabag/releases/download/${version}/wallabag-${version}.tar.gz"; 26 - hash = "sha256-V4s5/y9fFAmZ+WnUxU03UyRivEihD1ZUKQOOq4TLEKw="; 27 - }; 28 - 29 - patches = [ 30 - ./wallabag-data.patch # exposes $WALLABAG_DATA 31 - ]; 32 - 33 - dontBuild = true; 34 - 35 - installPhase = '' 36 - runHook preInstall 37 - 38 - mkdir $out 39 - cp -R * $out/ 40 - 41 - runHook postInstall 42 - ''; 43 - 44 - meta = with lib; { 45 - description = "wallabag is a self hostable application for saving web pages"; 46 - longDescription = '' 47 - wallabag is a self-hostable PHP application allowing you to not 48 - miss any content anymore. Click, save and read it when you can. 49 - It extracts content so that you can read it when you have time. 50 - ''; 51 - license = licenses.mit; 52 - homepage = "http://wallabag.org"; 53 - changelog = "https://github.com/wallabag/wallabag/releases/tag/${version}"; 54 - maintainers = with maintainers; [ schneefux ]; 55 - platforms = platforms.all; 56 - }; 57 - }
+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"; 9 10 curve = [ system user ]; 10 11 allUserKeys = [ system user mossnet ]; 11 12 systemOnly = [ system mossnet lituus helix ]; ··· 34 35 "box-wg.age".publicKeys = [ mossnet ]; 35 36 "wallabag-password.age".publicKeys = [ mossnet ]; 36 37 "wallabag-secret.age".publicKeys = [ mossnet ]; 38 + 39 + "work-wg.age".publicKeys = [ work user system ]; 37 40 }
secrets/work-wg.age

This is a binary file and will not be displayed.