summaryrefslogtreecommitdiff
path: root/pkgs
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/custom-hello.nix26
-rwxr-xr-xpkgs/custom-neovim/.direnv/bin/nix-direnv-reload19
l---------pkgs/custom-neovim/.direnv/flake-inputs/01x5k4nlxcpyd85nnr0b9gm89rm8ff4x-source1
l---------pkgs/custom-neovim/.direnv/flake-inputs/12rkh25dglxx42bkk3b4drahn482xsn5-source1
l---------pkgs/custom-neovim/.direnv/flake-inputs/9cdyyswz19r66knbyscl7l42k69vhbib-source1
l---------pkgs/custom-neovim/.direnv/flake-inputs/yj1wxm9hh8610iyzqnz75kvs6xl8j3my-source1
l---------pkgs/custom-neovim/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa1
-rw-r--r--pkgs/custom-neovim/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc2089
-rw-r--r--pkgs/custom-neovim/.envrc1
-rw-r--r--pkgs/custom-neovim/flake.lock64
-rw-r--r--pkgs/custom-neovim/flake.nix29
-rw-r--r--pkgs/default.nix9
-rw-r--r--pkgs/old-neovim/config/init.lua24
-rw-r--r--pkgs/old-neovim/config/lua/autocommands.lua36
-rw-r--r--pkgs/old-neovim/config/lua/mappings.lua29
-rw-r--r--pkgs/old-neovim/config/lua/options.lua70
-rw-r--r--pkgs/old-neovim/config/lua/plugins/actions-preview.lua1
-rw-r--r--pkgs/old-neovim/config/lua/plugins/lspconfig.lua91
-rw-r--r--pkgs/old-neovim/config/lua/plugins/mini-clue.lua51
-rw-r--r--pkgs/old-neovim/config/lua/plugins/mini-comment.lua1
-rw-r--r--pkgs/old-neovim/config/lua/plugins/mini-completion.lua1
-rw-r--r--pkgs/old-neovim/config/lua/plugins/mini-deps.lua8
-rw-r--r--pkgs/old-neovim/config/lua/plugins/mini-icons.lua1
-rw-r--r--pkgs/old-neovim/config/lua/plugins/mini-notify.lua1
-rw-r--r--pkgs/old-neovim/config/lua/plugins/mini-pick.lua24
-rw-r--r--pkgs/old-neovim/config/lua/plugins/mini-sessions.lua31
-rw-r--r--pkgs/old-neovim/config/lua/plugins/mini-snippets.lua10
-rw-r--r--pkgs/old-neovim/config/lua/plugins/mini-starter.lua17
-rw-r--r--pkgs/old-neovim/config/lua/plugins/mini-statusline.lua1
-rw-r--r--pkgs/old-neovim/config/lua/plugins/presence.lua3
-rw-r--r--pkgs/old-neovim/config/lua/plugins/tabby.lua2
-rw-r--r--pkgs/old-neovim/default.nix48
-rw-r--r--pkgs/old-neovim/plan.md29
-rw-r--r--pkgs/setup-manager/default.nix17
-rw-r--r--pkgs/setup-manager/setup.nu55
35 files changed, 2793 insertions, 0 deletions
diff --git a/pkgs/custom-hello.nix b/pkgs/custom-hello.nix
new file mode 100644
index 0000000..9dbd4df
--- /dev/null
+++ b/pkgs/custom-hello.nix
@@ -0,0 +1,26 @@
+{
+ lib,
+ stdenv,
+ runtimeShell,
+}:
+stdenv.mkDerivation {
+ pname = "hello";
+ version = "1.0";
+
+ dontUnpack = true;
+
+ installPhase = ''
+ mkdir -p $out/bin
+ cat > $out/bin/hello << EOF
+ #!${runtimeShell}
+ echo "Hello, This is an example nix package!"
+ EOF
+ chmod +x $out/bin/hello
+ '';
+
+ meta = {
+ description = "Example package";
+ license = lib.licenses.free;
+ mainProgram = "hello";
+ };
+}
diff --git a/pkgs/custom-neovim/.direnv/bin/nix-direnv-reload b/pkgs/custom-neovim/.direnv/bin/nix-direnv-reload
new file mode 100755
index 0000000..8ee81ba
--- /dev/null
+++ b/pkgs/custom-neovim/.direnv/bin/nix-direnv-reload
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+set -e
+if [[ ! -d "/home/culsans/Sync/setup/pkgs/custom-neovim" ]]; then
+ echo "Cannot find source directory; Did you move it?"
+ echo "(Looking for "/home/culsans/Sync/setup/pkgs/custom-neovim")"
+ echo 'Cannot force reload with this script - use "direnv reload" manually and then try again'
+ exit 1
+fi
+
+# rebuild the cache forcefully
+_nix_direnv_force_reload=1 direnv exec "/home/culsans/Sync/setup/pkgs/custom-neovim" true
+
+# Update the mtime for .envrc.
+# This will cause direnv to reload again - but without re-building.
+touch "/home/culsans/Sync/setup/pkgs/custom-neovim/.envrc"
+
+# Also update the timestamp of whatever profile_rc we have.
+# This makes sure that we know we are up to date.
+touch -r "/home/culsans/Sync/setup/pkgs/custom-neovim/.envrc" "/home/culsans/Sync/setup/pkgs/custom-neovim/.direnv"/*.rc
diff --git a/pkgs/custom-neovim/.direnv/flake-inputs/01x5k4nlxcpyd85nnr0b9gm89rm8ff4x-source b/pkgs/custom-neovim/.direnv/flake-inputs/01x5k4nlxcpyd85nnr0b9gm89rm8ff4x-source
new file mode 120000
index 0000000..f7fce9f
--- /dev/null
+++ b/pkgs/custom-neovim/.direnv/flake-inputs/01x5k4nlxcpyd85nnr0b9gm89rm8ff4x-source
@@ -0,0 +1 @@
+/nix/store/01x5k4nlxcpyd85nnr0b9gm89rm8ff4x-source \ No newline at end of file
diff --git a/pkgs/custom-neovim/.direnv/flake-inputs/12rkh25dglxx42bkk3b4drahn482xsn5-source b/pkgs/custom-neovim/.direnv/flake-inputs/12rkh25dglxx42bkk3b4drahn482xsn5-source
new file mode 120000
index 0000000..792f2c3
--- /dev/null
+++ b/pkgs/custom-neovim/.direnv/flake-inputs/12rkh25dglxx42bkk3b4drahn482xsn5-source
@@ -0,0 +1 @@
+/nix/store/12rkh25dglxx42bkk3b4drahn482xsn5-source \ No newline at end of file
diff --git a/pkgs/custom-neovim/.direnv/flake-inputs/9cdyyswz19r66knbyscl7l42k69vhbib-source b/pkgs/custom-neovim/.direnv/flake-inputs/9cdyyswz19r66knbyscl7l42k69vhbib-source
new file mode 120000
index 0000000..4cbfd5d
--- /dev/null
+++ b/pkgs/custom-neovim/.direnv/flake-inputs/9cdyyswz19r66knbyscl7l42k69vhbib-source
@@ -0,0 +1 @@
+/nix/store/9cdyyswz19r66knbyscl7l42k69vhbib-source \ No newline at end of file
diff --git a/pkgs/custom-neovim/.direnv/flake-inputs/yj1wxm9hh8610iyzqnz75kvs6xl8j3my-source b/pkgs/custom-neovim/.direnv/flake-inputs/yj1wxm9hh8610iyzqnz75kvs6xl8j3my-source
new file mode 120000
index 0000000..f17959f
--- /dev/null
+++ b/pkgs/custom-neovim/.direnv/flake-inputs/yj1wxm9hh8610iyzqnz75kvs6xl8j3my-source
@@ -0,0 +1 @@
+/nix/store/yj1wxm9hh8610iyzqnz75kvs6xl8j3my-source \ No newline at end of file
diff --git a/pkgs/custom-neovim/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa b/pkgs/custom-neovim/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa
new file mode 120000
index 0000000..3a6293d
--- /dev/null
+++ b/pkgs/custom-neovim/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa
@@ -0,0 +1 @@
+/nix/store/b6qzhjr42h580y2g5vx68pcrbf1ch3p5-nix-shell-env \ No newline at end of file
diff --git a/pkgs/custom-neovim/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc b/pkgs/custom-neovim/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc
new file mode 100644
index 0000000..848f071
--- /dev/null
+++ b/pkgs/custom-neovim/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc
@@ -0,0 +1,2089 @@
+unset shellHook
+PATH=${PATH:-}
+nix_saved_PATH="$PATH"
+XDG_DATA_DIRS=${XDG_DATA_DIRS:-}
+nix_saved_XDG_DATA_DIRS="$XDG_DATA_DIRS"
+AR='ar'
+export AR
+AS='as'
+export AS
+BASH='/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash'
+CC='gcc'
+export CC
+CONFIG_SHELL='/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash'
+export CONFIG_SHELL
+CXX='g++'
+export CXX
+HOSTTYPE='x86_64'
+HOST_PATH='/nix/store/87fck6hm17chxjq7badb11mq036zbyv9-coreutils-9.7/bin:/nix/store/7y59hzi3svdj1xjddjn2k7km96pifcyl-findutils-4.10.0/bin:/nix/store/7h0sard22wnbz0jyz07w8y9y0fcs795r-diffutils-3.12/bin:/nix/store/clbb2cvigynr235ab5zgi18dyavznlk2-gnused-4.9/bin:/nix/store/gqmr3gixlddz3667ba1iyqck3c0dkpvd-gnugrep-3.11/bin:/nix/store/fcyn0dqszgfysiasdmkv1jh3syncajay-gawk-5.3.2/bin:/nix/store/wrxvqj822kz8746608lgns7h8mkpn79f-gnutar-1.35/bin:/nix/store/afhkqb5a94zlwjxigsnwsfwkf38h21dk-gzip-1.14/bin:/nix/store/1abbyfv3bpxalfjfgpmwg8jcy931bf76-bzip2-1.0.8-bin/bin:/nix/store/kv10h4pidkmx8cjs2sw2pi9rlcnighbc-gnumake-4.4.1/bin:/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin:/nix/store/x0kaspzb5jqvgp357bj27z6iq24ximfg-patch-2.7.6/bin:/nix/store/98zamhd8d0jq3skqwz28dlgph94mrqir-xz-5.8.1-bin/bin:/nix/store/imhzyxqr7swq08ip81az5kfa07r07kg0-file-5.46/bin'
+export HOST_PATH
+IFS='
+'
+IN_NIX_SHELL='impure'
+export IN_NIX_SHELL
+LD='ld'
+export LD
+LINENO='76'
+MACHTYPE='x86_64-pc-linux-gnu'
+NIX_BINTOOLS='/nix/store/hhfm5fkvb1alg1np5a69m2qlcjqhr062-binutils-wrapper-2.44'
+export NIX_BINTOOLS
+NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1'
+export NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu
+NIX_BUILD_CORES='12'
+export NIX_BUILD_CORES
+NIX_CC='/nix/store/0fsnicvfpf55nkza12cjnad0w84d6ba7-gcc-wrapper-14.2.1.20250322'
+export NIX_CC
+NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1'
+export NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu
+NIX_CFLAGS_COMPILE=' -frandom-seed=b6qzhjr42h'
+export NIX_CFLAGS_COMPILE
+NIX_ENFORCE_NO_NATIVE='1'
+export NIX_ENFORCE_NO_NATIVE
+NIX_HARDENING_ENABLE='bindnow format fortify fortify3 pic relro stackclashprotection stackprotector strictoverflow zerocallusedregs'
+export NIX_HARDENING_ENABLE
+NIX_LDFLAGS='-rpath /home/culsans/Sync/setup/pkgs/custom-neovim/outputs/out/lib '
+export NIX_LDFLAGS
+NIX_NO_SELF_RPATH='1'
+NIX_STORE='/nix/store'
+export NIX_STORE
+NM='nm'
+export NM
+OBJCOPY='objcopy'
+export OBJCOPY
+OBJDUMP='objdump'
+export OBJDUMP
+OLDPWD=''
+export OLDPWD
+OPTERR='1'
+OSTYPE='linux-gnu'
+PATH='/nix/store/29mhfr5g4dsv07d80b7n4bgs45syk3wl-hello-2.12.2/bin:/nix/store/2jc1jmzis19adawjwhl8qhdvh7vlbk0q-patchelf-0.15.0/bin:/nix/store/0fsnicvfpf55nkza12cjnad0w84d6ba7-gcc-wrapper-14.2.1.20250322/bin:/nix/store/9ds850ifd4jwcccpp3v14818kk74ldf2-gcc-14.2.1.20250322/bin:/nix/store/303islqk386z1w2g1ngvxnkl4glfpgrs-glibc-2.40-66-bin/bin:/nix/store/87fck6hm17chxjq7badb11mq036zbyv9-coreutils-9.7/bin:/nix/store/hhfm5fkvb1alg1np5a69m2qlcjqhr062-binutils-wrapper-2.44/bin:/nix/store/v63bxfiacw082c7ijshf60alvvrpfxsq-binutils-2.44/bin:/nix/store/87fck6hm17chxjq7badb11mq036zbyv9-coreutils-9.7/bin:/nix/store/7y59hzi3svdj1xjddjn2k7km96pifcyl-findutils-4.10.0/bin:/nix/store/7h0sard22wnbz0jyz07w8y9y0fcs795r-diffutils-3.12/bin:/nix/store/clbb2cvigynr235ab5zgi18dyavznlk2-gnused-4.9/bin:/nix/store/gqmr3gixlddz3667ba1iyqck3c0dkpvd-gnugrep-3.11/bin:/nix/store/fcyn0dqszgfysiasdmkv1jh3syncajay-gawk-5.3.2/bin:/nix/store/wrxvqj822kz8746608lgns7h8mkpn79f-gnutar-1.35/bin:/nix/store/afhkqb5a94zlwjxigsnwsfwkf38h21dk-gzip-1.14/bin:/nix/store/1abbyfv3bpxalfjfgpmwg8jcy931bf76-bzip2-1.0.8-bin/bin:/nix/store/kv10h4pidkmx8cjs2sw2pi9rlcnighbc-gnumake-4.4.1/bin:/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin:/nix/store/x0kaspzb5jqvgp357bj27z6iq24ximfg-patch-2.7.6/bin:/nix/store/98zamhd8d0jq3skqwz28dlgph94mrqir-xz-5.8.1-bin/bin:/nix/store/imhzyxqr7swq08ip81az5kfa07r07kg0-file-5.46/bin'
+export PATH
+PS4='+ '
+RANLIB='ranlib'
+export RANLIB
+READELF='readelf'
+export READELF
+SHELL='/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash'
+export SHELL
+SIZE='size'
+export SIZE
+SOURCE_DATE_EPOCH='315532800'
+export SOURCE_DATE_EPOCH
+STRINGS='strings'
+export STRINGS
+STRIP='strip'
+export STRIP
+XDG_DATA_DIRS='/nix/store/29mhfr5g4dsv07d80b7n4bgs45syk3wl-hello-2.12.2/share:/nix/store/2jc1jmzis19adawjwhl8qhdvh7vlbk0q-patchelf-0.15.0/share'
+export XDG_DATA_DIRS
+__structuredAttrs=''
+export __structuredAttrs
+_substituteStream_has_warned_replace_deprecation='false'
+buildInputs=''
+export buildInputs
+buildPhase='{ echo "------------------------------------------------------------";
+ echo " WARNING: the existence of this path is not guaranteed.";
+ echo " It is an internal implementation detail for pkgs.mkShell.";
+ echo "------------------------------------------------------------";
+ echo;
+ # Record all build inputs as runtime dependencies
+ export;
+} >> "$out"
+'
+export buildPhase
+builder='/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash'
+export builder
+cmakeFlags=''
+export cmakeFlags
+configureFlags=''
+export configureFlags
+defaultBuildInputs=''
+defaultNativeBuildInputs='/nix/store/2jc1jmzis19adawjwhl8qhdvh7vlbk0q-patchelf-0.15.0 /nix/store/lmc7x75jvrca79fc2r2j1frmklzvh04h-update-autotools-gnu-config-scripts-hook /nix/store/jjhw2phnaip4kg0qjas3x3fsaifi8y0w-no-broken-symlinks.sh /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/cmzya9irvxzlkh7lfy6i82gbp0saxqj3-multiple-outputs.sh /nix/store/hxv896faph0rqxjq2ycxpcrbnngc95sz-patch-shebangs.sh /nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh /nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh /nix/store/z7k98578dfzi6l3hsvbivzm7hfqlk0zc-set-source-date-epoch-to-latest.sh /nix/store/pilsssjjdxvdphlg2h19p0bfx5q0jzkn-strip.sh /nix/store/0fsnicvfpf55nkza12cjnad0w84d6ba7-gcc-wrapper-14.2.1.20250322'
+depsBuildBuild=''
+export depsBuildBuild
+depsBuildBuildPropagated=''
+export depsBuildBuildPropagated
+depsBuildTarget=''
+export depsBuildTarget
+depsBuildTargetPropagated=''
+export depsBuildTargetPropagated
+depsHostHost=''
+export depsHostHost
+depsHostHostPropagated=''
+export depsHostHostPropagated
+depsTargetTarget=''
+export depsTargetTarget
+depsTargetTargetPropagated=''
+export depsTargetTargetPropagated
+doCheck=''
+export doCheck
+doInstallCheck=''
+export doInstallCheck
+dontAddDisableDepTrack='1'
+export dontAddDisableDepTrack
+declare -a envBuildBuildHooks=()
+declare -a envBuildHostHooks=()
+declare -a envBuildTargetHooks=()
+declare -a envHostHostHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' )
+declare -a envHostTargetHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' )
+declare -a envTargetTargetHooks=()
+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' )
+guess='12'
+initialPath='/nix/store/87fck6hm17chxjq7badb11mq036zbyv9-coreutils-9.7 /nix/store/7y59hzi3svdj1xjddjn2k7km96pifcyl-findutils-4.10.0 /nix/store/7h0sard22wnbz0jyz07w8y9y0fcs795r-diffutils-3.12 /nix/store/clbb2cvigynr235ab5zgi18dyavznlk2-gnused-4.9 /nix/store/gqmr3gixlddz3667ba1iyqck3c0dkpvd-gnugrep-3.11 /nix/store/fcyn0dqszgfysiasdmkv1jh3syncajay-gawk-5.3.2 /nix/store/wrxvqj822kz8746608lgns7h8mkpn79f-gnutar-1.35 /nix/store/afhkqb5a94zlwjxigsnwsfwkf38h21dk-gzip-1.14 /nix/store/1abbyfv3bpxalfjfgpmwg8jcy931bf76-bzip2-1.0.8-bin /nix/store/kv10h4pidkmx8cjs2sw2pi9rlcnighbc-gnumake-4.4.1 /nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37 /nix/store/x0kaspzb5jqvgp357bj27z6iq24ximfg-patch-2.7.6 /nix/store/98zamhd8d0jq3skqwz28dlgph94mrqir-xz-5.8.1-bin /nix/store/imhzyxqr7swq08ip81az5kfa07r07kg0-file-5.46'
+mesonFlags=''
+export mesonFlags
+name='nix-shell-env'
+export name
+nativeBuildInputs='/nix/store/29mhfr5g4dsv07d80b7n4bgs45syk3wl-hello-2.12.2'
+export nativeBuildInputs
+out='/home/culsans/Sync/setup/pkgs/custom-neovim/outputs/out'
+export out
+outputBin='out'
+outputDev='out'
+outputDevdoc='REMOVE'
+outputDevman='out'
+outputDoc='out'
+outputInclude='out'
+outputInfo='out'
+outputLib='out'
+outputMan='out'
+outputs='out'
+export outputs
+patches=''
+export patches
+phases='buildPhase'
+export phases
+pkg='/nix/store/0fsnicvfpf55nkza12cjnad0w84d6ba7-gcc-wrapper-14.2.1.20250322'
+declare -a pkgsBuildBuild=()
+declare -a pkgsBuildHost=('/nix/store/29mhfr5g4dsv07d80b7n4bgs45syk3wl-hello-2.12.2' '/nix/store/2jc1jmzis19adawjwhl8qhdvh7vlbk0q-patchelf-0.15.0' '/nix/store/lmc7x75jvrca79fc2r2j1frmklzvh04h-update-autotools-gnu-config-scripts-hook' '/nix/store/jjhw2phnaip4kg0qjas3x3fsaifi8y0w-no-broken-symlinks.sh' '/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/cmzya9irvxzlkh7lfy6i82gbp0saxqj3-multiple-outputs.sh' '/nix/store/hxv896faph0rqxjq2ycxpcrbnngc95sz-patch-shebangs.sh' '/nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh' '/nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh' '/nix/store/z7k98578dfzi6l3hsvbivzm7hfqlk0zc-set-source-date-epoch-to-latest.sh' '/nix/store/pilsssjjdxvdphlg2h19p0bfx5q0jzkn-strip.sh' '/nix/store/0fsnicvfpf55nkza12cjnad0w84d6ba7-gcc-wrapper-14.2.1.20250322' '/nix/store/hhfm5fkvb1alg1np5a69m2qlcjqhr062-binutils-wrapper-2.44' )
+declare -a pkgsBuildTarget=()
+declare -a pkgsHostHost=()
+declare -a pkgsHostTarget=()
+declare -a pkgsTargetTarget=()
+declare -a postFixupHooks=('noBrokenSymlinksInAllOutputs' '_makeSymlinksRelativeInAllOutputs' '_multioutPropagateDev' )
+declare -a postUnpackHooks=('_updateSourceDateEpochFromSourceRoot' )
+declare -a preConfigureHooks=('_multioutConfig' )
+preConfigurePhases=' updateAutotoolsGnuConfigScriptsPhase'
+declare -a preFixupHooks=('_moveToShare' '_multioutDocs' '_multioutDevs' )
+preferLocalBuild='1'
+export preferLocalBuild
+prefix='/home/culsans/Sync/setup/pkgs/custom-neovim/outputs/out'
+declare -a propagatedBuildDepFiles=('propagated-build-build-deps' 'propagated-native-build-inputs' 'propagated-build-target-deps' )
+propagatedBuildInputs=''
+export propagatedBuildInputs
+declare -a propagatedHostDepFiles=('propagated-host-host-deps' 'propagated-build-inputs' )
+propagatedNativeBuildInputs=''
+export propagatedNativeBuildInputs
+declare -a propagatedTargetDepFiles=('propagated-target-target-deps' )
+shell='/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash'
+export shell
+shellHook=''
+export shellHook
+stdenv='/nix/store/nivcx63drxqzm6pic6vm2wbkxl368w83-stdenv-linux'
+export stdenv
+strictDeps=''
+export strictDeps
+system='x86_64-linux'
+export system
+declare -a unpackCmdHooks=('_defaultUnpack' )
+_activatePkgs ()
+{
+
+ local hostOffset targetOffset;
+ local pkg;
+ for hostOffset in "${allPlatOffsets[@]}";
+ do
+ local pkgsVar="${pkgAccumVarVars[hostOffset + 1]}";
+ for targetOffset in "${allPlatOffsets[@]}";
+ do
+ (( hostOffset <= targetOffset )) || continue;
+ local pkgsRef="${pkgsVar}[$targetOffset - $hostOffset]";
+ local pkgsSlice="${!pkgsRef}[@]";
+ for pkg in ${!pkgsSlice+"${!pkgsSlice}"};
+ do
+ activatePackage "$pkg" "$hostOffset" "$targetOffset";
+ done;
+ done;
+ done
+}
+_addRpathPrefix ()
+{
+
+ if [ "${NIX_NO_SELF_RPATH:-0}" != 1 ]; then
+ export NIX_LDFLAGS="-rpath $1/lib ${NIX_LDFLAGS-}";
+ fi
+}
+_addToEnv ()
+{
+
+ local depHostOffset depTargetOffset;
+ local pkg;
+ for depHostOffset in "${allPlatOffsets[@]}";
+ do
+ local hookVar="${pkgHookVarVars[depHostOffset + 1]}";
+ local pkgsVar="${pkgAccumVarVars[depHostOffset + 1]}";
+ for depTargetOffset in "${allPlatOffsets[@]}";
+ do
+ (( depHostOffset <= depTargetOffset )) || continue;
+ local hookRef="${hookVar}[$depTargetOffset - $depHostOffset]";
+ if [[ -z "${strictDeps-}" ]]; then
+ local visitedPkgs="";
+ for pkg in "${pkgsBuildBuild[@]}" "${pkgsBuildHost[@]}" "${pkgsBuildTarget[@]}" "${pkgsHostHost[@]}" "${pkgsHostTarget[@]}" "${pkgsTargetTarget[@]}";
+ do
+ if [[ "$visitedPkgs" = *"$pkg"* ]]; then
+ continue;
+ fi;
+ runHook "${!hookRef}" "$pkg";
+ visitedPkgs+=" $pkg";
+ done;
+ else
+ local pkgsRef="${pkgsVar}[$depTargetOffset - $depHostOffset]";
+ local pkgsSlice="${!pkgsRef}[@]";
+ for pkg in ${!pkgsSlice+"${!pkgsSlice}"};
+ do
+ runHook "${!hookRef}" "$pkg";
+ done;
+ fi;
+ done;
+ done
+}
+_allFlags ()
+{
+
+ export system pname name version;
+ while IFS='' read -r varName; do
+ nixTalkativeLog "@${varName}@ -> ${!varName}";
+ args+=("--subst-var" "$varName");
+ done < <(awk 'BEGIN { for (v in ENVIRON) if (v ~ /^[a-z][a-zA-Z0-9_]*$/) print v }')
+}
+_assignFirst ()
+{
+
+ local varName="$1";
+ local _var;
+ local REMOVE=REMOVE;
+ shift;
+ for _var in "$@";
+ do
+ if [ -n "${!_var-}" ]; then
+ eval "${varName}"="${_var}";
+ return;
+ fi;
+ done;
+ echo;
+ echo "error: _assignFirst: could not find a non-empty variable whose name to assign to ${varName}.";
+ echo " The following variables were all unset or empty:";
+ echo " $*";
+ if [ -z "${out:-}" ]; then
+ echo ' If you do not want an "out" output in your derivation, make sure to define';
+ echo ' the other specific required outputs. This can be achieved by picking one';
+ echo " of the above as an output.";
+ echo ' You do not have to remove "out" if you want to have a different default';
+ echo ' output, because the first output is taken as a default.';
+ echo;
+ fi;
+ return 1
+}
+_callImplicitHook ()
+{
+
+ local def="$1";
+ local hookName="$2";
+ if declare -F "$hookName" > /dev/null; then
+ nixTalkativeLog "calling implicit '$hookName' function hook";
+ "$hookName";
+ else
+ if type -p "$hookName" > /dev/null; then
+ nixTalkativeLog "sourcing implicit '$hookName' script hook";
+ source "$hookName";
+ else
+ if [ -n "${!hookName:-}" ]; then
+ nixTalkativeLog "evaling implicit '$hookName' string hook";
+ eval "${!hookName}";
+ else
+ return "$def";
+ fi;
+ fi;
+ fi
+}
+_defaultUnpack ()
+{
+
+ local fn="$1";
+ local destination;
+ if [ -d "$fn" ]; then
+ destination="$(stripHash "$fn")";
+ if [ -e "$destination" ]; then
+ echo "Cannot copy $fn to $destination: destination already exists!";
+ echo "Did you specify two \"srcs\" with the same \"name\"?";
+ return 1;
+ fi;
+ cp -r --preserve=mode,timestamps --reflink=auto -- "$fn" "$destination";
+ else
+ case "$fn" in
+ *.tar.xz | *.tar.lzma | *.txz)
+ ( XZ_OPT="--threads=$NIX_BUILD_CORES" xz -d < "$fn";
+ true ) | tar xf - --mode=+w --warning=no-timestamp
+ ;;
+ *.tar | *.tar.* | *.tgz | *.tbz2 | *.tbz)
+ tar xf "$fn" --mode=+w --warning=no-timestamp
+ ;;
+ *)
+ return 1
+ ;;
+ esac;
+ fi
+}
+_doStrip ()
+{
+
+ local -ra flags=(dontStripHost dontStripTarget);
+ local -ra debugDirs=(stripDebugList stripDebugListTarget);
+ local -ra allDirs=(stripAllList stripAllListTarget);
+ local -ra stripCmds=(STRIP STRIP_FOR_TARGET);
+ local -ra ranlibCmds=(RANLIB RANLIB_FOR_TARGET);
+ stripDebugList=${stripDebugList[*]:-lib lib32 lib64 libexec bin sbin Applications Library/Frameworks};
+ stripDebugListTarget=${stripDebugListTarget[*]:-};
+ stripAllList=${stripAllList[*]:-};
+ stripAllListTarget=${stripAllListTarget[*]:-};
+ local i;
+ for i in ${!stripCmds[@]};
+ do
+ local -n flag="${flags[$i]}";
+ local -n debugDirList="${debugDirs[$i]}";
+ local -n allDirList="${allDirs[$i]}";
+ local -n stripCmd="${stripCmds[$i]}";
+ local -n ranlibCmd="${ranlibCmds[$i]}";
+ if [[ -n "${dontStrip-}" || -n "${flag-}" ]] || ! type -f "${stripCmd-}" 2> /dev/null 1>&2; then
+ continue;
+ fi;
+ stripDirs "$stripCmd" "$ranlibCmd" "$debugDirList" "${stripDebugFlags[*]:--S -p}";
+ stripDirs "$stripCmd" "$ranlibCmd" "$allDirList" "${stripAllFlags[*]:--s -p}";
+ done
+}
+_eval ()
+{
+
+ if declare -F "$1" > /dev/null 2>&1; then
+ "$@";
+ else
+ eval "$1";
+ fi
+}
+_logHook ()
+{
+
+ if [[ -z ${NIX_LOG_FD-} ]]; then
+ return;
+ fi;
+ local hookKind="$1";
+ local hookExpr="$2";
+ shift 2;
+ if declare -F "$hookExpr" > /dev/null 2>&1; then
+ nixTalkativeLog "calling '$hookKind' function hook '$hookExpr'" "$@";
+ else
+ if type -p "$hookExpr" > /dev/null; then
+ nixTalkativeLog "sourcing '$hookKind' script hook '$hookExpr'";
+ else
+ if [[ "$hookExpr" != "_callImplicitHook"* ]]; then
+ local exprToOutput;
+ if [[ ${NIX_DEBUG:-0} -ge 5 ]]; then
+ exprToOutput="$hookExpr";
+ else
+ local hookExprLine;
+ while IFS= read -r hookExprLine; do
+ hookExprLine="${hookExprLine#"${hookExprLine%%[![:space:]]*}"}";
+ if [[ -n "$hookExprLine" ]]; then
+ exprToOutput+="$hookExprLine\\n ";
+ fi;
+ done <<< "$hookExpr";
+ exprToOutput="${exprToOutput%%\\n }";
+ fi;
+ nixTalkativeLog "evaling '$hookKind' string hook '$exprToOutput'";
+ fi;
+ fi;
+ fi
+}
+_makeSymlinksRelative ()
+{
+
+ local symlinkTarget;
+ if [ "${dontRewriteSymlinks-}" ] || [ ! -e "$prefix" ]; then
+ return;
+ fi;
+ while IFS= read -r -d '' f; do
+ symlinkTarget=$(readlink "$f");
+ if [[ "$symlinkTarget"/ != "$prefix"/* ]]; then
+ continue;
+ fi;
+ if [ ! -e "$symlinkTarget" ]; then
+ echo "the symlink $f is broken, it points to $symlinkTarget (which is missing)";
+ fi;
+ echo "rewriting symlink $f to be relative to $prefix";
+ ln -snrf "$symlinkTarget" "$f";
+ done < <(find $prefix -type l -print0)
+}
+_makeSymlinksRelativeInAllOutputs ()
+{
+
+ local output;
+ for output in $(getAllOutputNames);
+ do
+ prefix="${!output}" _makeSymlinksRelative;
+ done
+}
+_moveLib64 ()
+{
+
+ if [ "${dontMoveLib64-}" = 1 ]; then
+ return;
+ fi;
+ if [ ! -e "$prefix/lib64" -o -L "$prefix/lib64" ]; then
+ return;
+ fi;
+ echo "moving $prefix/lib64/* to $prefix/lib";
+ mkdir -p $prefix/lib;
+ shopt -s dotglob;
+ for i in $prefix/lib64/*;
+ do
+ mv --no-clobber "$i" $prefix/lib;
+ done;
+ shopt -u dotglob;
+ rmdir $prefix/lib64;
+ ln -s lib $prefix/lib64
+}
+_moveSbin ()
+{
+
+ if [ "${dontMoveSbin-}" = 1 ]; then
+ return;
+ fi;
+ if [ ! -e "$prefix/sbin" -o -L "$prefix/sbin" ]; then
+ return;
+ fi;
+ echo "moving $prefix/sbin/* to $prefix/bin";
+ mkdir -p $prefix/bin;
+ shopt -s dotglob;
+ for i in $prefix/sbin/*;
+ do
+ mv "$i" $prefix/bin;
+ done;
+ shopt -u dotglob;
+ rmdir $prefix/sbin;
+ ln -s bin $prefix/sbin
+}
+_moveSystemdUserUnits ()
+{
+
+ if [ "${dontMoveSystemdUserUnits:-0}" = 1 ]; then
+ return;
+ fi;
+ if [ ! -e "${prefix:?}/lib/systemd/user" ]; then
+ return;
+ fi;
+ local source="$prefix/lib/systemd/user";
+ local target="$prefix/share/systemd/user";
+ echo "moving $source/* to $target";
+ mkdir -p "$target";
+ ( shopt -s dotglob;
+ for i in "$source"/*;
+ do
+ mv "$i" "$target";
+ done );
+ rmdir "$source";
+ ln -s "$target" "$source"
+}
+_moveToShare ()
+{
+
+ if [ -n "$__structuredAttrs" ]; then
+ if [ -z "${forceShare-}" ]; then
+ forceShare=(man doc info);
+ fi;
+ else
+ forceShare=(${forceShare:-man doc info});
+ fi;
+ if [[ -z "$out" ]]; then
+ return;
+ fi;
+ for d in "${forceShare[@]}";
+ do
+ if [ -d "$out/$d" ]; then
+ if [ -d "$out/share/$d" ]; then
+ echo "both $d/ and share/$d/ exist!";
+ else
+ echo "moving $out/$d to $out/share/$d";
+ mkdir -p $out/share;
+ mv $out/$d $out/share/;
+ fi;
+ fi;
+ done
+}
+_multioutConfig ()
+{
+
+ if [ "$(getAllOutputNames)" = "out" ] || [ -z "${setOutputFlags-1}" ]; then
+ return;
+ fi;
+ if [ -z "${shareDocName:-}" ]; then
+ local confScript="${configureScript:-}";
+ if [ -z "$confScript" ] && [ -x ./configure ]; then
+ confScript=./configure;
+ fi;
+ if [ -f "$confScript" ]; then
+ local shareDocName="$(sed -n "s/^PACKAGE_TARNAME='\(.*\)'$/\1/p" < "$confScript")";
+ fi;
+ if [ -z "$shareDocName" ] || echo "$shareDocName" | grep -q '[^a-zA-Z0-9_-]'; then
+ shareDocName="$(echo "$name" | sed 's/-[^a-zA-Z].*//')";
+ fi;
+ fi;
+ prependToVar configureFlags --bindir="${!outputBin}"/bin --sbindir="${!outputBin}"/sbin --includedir="${!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;
+ prependToVar installFlags pkgconfigdir="${!outputDev}"/lib/pkgconfig m4datadir="${!outputDev}"/share/aclocal aclocaldir="${!outputDev}"/share/aclocal
+}
+_multioutDevs ()
+{
+
+ if [ "$(getAllOutputNames)" = "out" ] || [ -z "${moveToDev-1}" ]; then
+ return;
+ fi;
+ moveToOutput include "${!outputInclude}";
+ moveToOutput lib/pkgconfig "${!outputDev}";
+ moveToOutput share/pkgconfig "${!outputDev}";
+ moveToOutput lib/cmake "${!outputDev}";
+ moveToOutput share/aclocal "${!outputDev}";
+ for f in "${!outputDev}"/{lib,share}/pkgconfig/*.pc;
+ do
+ echo "Patching '$f' includedir to output ${!outputInclude}";
+ sed -i "/^includedir=/s,=\${prefix},=${!outputInclude}," "$f";
+ done
+}
+_multioutDocs ()
+{
+
+ local REMOVE=REMOVE;
+ moveToOutput share/info "${!outputInfo}";
+ moveToOutput share/doc "${!outputDoc}";
+ moveToOutput share/gtk-doc "${!outputDevdoc}";
+ moveToOutput share/devhelp/books "${!outputDevdoc}";
+ moveToOutput share/man "${!outputMan}";
+ moveToOutput share/man/man3 "${!outputDevman}"
+}
+_multioutPropagateDev ()
+{
+
+ if [ "$(getAllOutputNames)" = "out" ]; then
+ return;
+ fi;
+ local outputFirst;
+ for outputFirst in $(getAllOutputNames);
+ do
+ break;
+ done;
+ local propagaterOutput="$outputDev";
+ if [ -z "$propagaterOutput" ]; then
+ propagaterOutput="$outputFirst";
+ fi;
+ if [ -z "${propagatedBuildOutputs+1}" ]; then
+ local po_dirty="$outputBin $outputInclude $outputLib";
+ set +o pipefail;
+ propagatedBuildOutputs=`echo "$po_dirty" | tr -s ' ' '\n' | grep -v -F "$propagaterOutput" | sort -u | tr '\n' ' ' `;
+ set -o pipefail;
+ fi;
+ if [ -z "$propagatedBuildOutputs" ]; then
+ return;
+ fi;
+ mkdir -p "${!propagaterOutput}"/nix-support;
+ for output in $propagatedBuildOutputs;
+ do
+ echo -n " ${!output}" >> "${!propagaterOutput}"/nix-support/propagated-build-inputs;
+ done
+}
+_nixLogWithLevel ()
+{
+
+ [[ -z ${NIX_LOG_FD-} || ${NIX_DEBUG:-0} -lt ${1:?} ]] && return 0;
+ local logLevel;
+ case "${1:?}" in
+ 0)
+ logLevel=ERROR
+ ;;
+ 1)
+ logLevel=WARN
+ ;;
+ 2)
+ logLevel=NOTICE
+ ;;
+ 3)
+ logLevel=INFO
+ ;;
+ 4)
+ logLevel=TALKATIVE
+ ;;
+ 5)
+ logLevel=CHATTY
+ ;;
+ 6)
+ logLevel=DEBUG
+ ;;
+ 7)
+ logLevel=VOMIT
+ ;;
+ *)
+ echo "_nixLogWithLevel: called with invalid log level: ${1:?}" >&"$NIX_LOG_FD";
+ return 1
+ ;;
+ esac;
+ local callerName="${FUNCNAME[2]}";
+ if [[ $callerName == "_callImplicitHook" ]]; then
+ callerName="${hookName:?}";
+ fi;
+ printf "%s: %s: %s\n" "$logLevel" "$callerName" "${2:?}" >&"$NIX_LOG_FD"
+}
+_overrideFirst ()
+{
+
+ if [ -z "${!1-}" ]; then
+ _assignFirst "$@";
+ fi
+}
+_pruneLibtoolFiles ()
+{
+
+ if [ "${dontPruneLibtoolFiles-}" ] || [ ! -e "$prefix" ]; then
+ return;
+ fi;
+ 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" \;
+}
+_updateSourceDateEpochFromSourceRoot ()
+{
+
+ if [ -n "$sourceRoot" ]; then
+ updateSourceDateEpoch "$sourceRoot";
+ fi
+}
+activatePackage ()
+{
+
+ local pkg="$1";
+ local -r hostOffset="$2";
+ local -r targetOffset="$3";
+ (( hostOffset <= targetOffset )) || exit 1;
+ if [ -f "$pkg" ]; then
+ nixTalkativeLog "sourcing setup hook '$pkg'";
+ source "$pkg";
+ fi;
+ if [[ -z "${strictDeps-}" || "$hostOffset" -le -1 ]]; then
+ addToSearchPath _PATH "$pkg/bin";
+ fi;
+ if (( hostOffset <= -1 )); then
+ addToSearchPath _XDG_DATA_DIRS "$pkg/share";
+ fi;
+ if [[ "$hostOffset" -eq 0 && -d "$pkg/bin" ]]; then
+ addToSearchPath _HOST_PATH "$pkg/bin";
+ fi;
+ if [[ -f "$pkg/nix-support/setup-hook" ]]; then
+ nixTalkativeLog "sourcing setup hook '$pkg/nix-support/setup-hook'";
+ source "$pkg/nix-support/setup-hook";
+ fi
+}
+addEnvHooks ()
+{
+
+ local depHostOffset="$1";
+ shift;
+ local pkgHookVarsSlice="${pkgHookVarVars[$depHostOffset + 1]}[@]";
+ local pkgHookVar;
+ for pkgHookVar in "${!pkgHookVarsSlice}";
+ do
+ eval "${pkgHookVar}s"'+=("$@")';
+ done
+}
+addToSearchPath ()
+{
+
+ addToSearchPathWithCustomDelimiter ":" "$@"
+}
+addToSearchPathWithCustomDelimiter ()
+{
+
+ local delimiter="$1";
+ local varName="$2";
+ local dir="$3";
+ if [[ -d "$dir" && "${!varName:+${delimiter}${!varName}${delimiter}}" != *"${delimiter}${dir}${delimiter}"* ]]; then
+ export "${varName}=${!varName:+${!varName}${delimiter}}${dir}";
+ fi
+}
+appendToVar ()
+{
+
+ local -n nameref="$1";
+ local useArray type;
+ if [ -n "$__structuredAttrs" ]; then
+ useArray=true;
+ else
+ useArray=false;
+ fi;
+ if type=$(declare -p "$1" 2> /dev/null); then
+ case "${type#* }" in
+ -A*)
+ echo "appendToVar(): ERROR: trying to use appendToVar on an associative array, use variable+=([\"X\"]=\"Y\") instead." 1>&2;
+ return 1
+ ;;
+ -a*)
+ useArray=true
+ ;;
+ *)
+ useArray=false
+ ;;
+ esac;
+ fi;
+ shift;
+ if $useArray; then
+ nameref=(${nameref+"${nameref[@]}"} "$@");
+ else
+ nameref="${nameref-} $*";
+ fi
+}
+auditTmpdir ()
+{
+
+ local dir="$1";
+ [ -e "$dir" ] || return 0;
+ echo "checking for references to $TMPDIR/ in $dir...";
+ local i;
+ find "$dir" -type f -print0 | while IFS= read -r -d '' i; do
+ if [[ "$i" =~ .build-id ]]; then
+ continue;
+ fi;
+ if isELF "$i"; then
+ if {
+ printf :;
+ patchelf --print-rpath "$i"
+ } | grep -q -F ":$TMPDIR/"; then
+ echo "RPATH of binary $i contains a forbidden reference to $TMPDIR/";
+ exit 1;
+ fi;
+ fi;
+ if isScript "$i"; then
+ if [ -e "$(dirname "$i")/.$(basename "$i")-wrapped" ]; then
+ if grep -q -F "$TMPDIR/" "$i"; then
+ echo "wrapper script $i contains a forbidden reference to $TMPDIR/";
+ exit 1;
+ fi;
+ fi;
+ fi;
+ done
+}
+bintoolsWrapper_addLDVars ()
+{
+
+ local role_post;
+ getHostRoleEnvHook;
+ if [[ -d "$1/lib64" && ! -L "$1/lib64" ]]; then
+ export NIX_LDFLAGS${role_post}+=" -L$1/lib64";
+ fi;
+ if [[ -d "$1/lib" ]]; then
+ local -a glob=($1/lib/lib*);
+ if [ "${#glob[*]}" -gt 0 ]; then
+ export NIX_LDFLAGS${role_post}+=" -L$1/lib";
+ fi;
+ fi
+}
+buildPhase ()
+{
+
+ runHook preBuild;
+ if [[ -z "${makeFlags-}" && -z "${makefile:-}" && ! ( -e Makefile || -e makefile || -e GNUmakefile ) ]]; then
+ echo "no Makefile or custom buildPhase, doing nothing";
+ else
+ foundMakefile=1;
+ local flagsArray=(${enableParallelBuilding:+-j${NIX_BUILD_CORES}} SHELL="$SHELL");
+ concatTo flagsArray makeFlags makeFlagsArray buildFlags buildFlagsArray;
+ echoCmd 'build flags' "${flagsArray[@]}";
+ make ${makefile:+-f $makefile} "${flagsArray[@]}";
+ unset flagsArray;
+ fi;
+ runHook postBuild
+}
+ccWrapper_addCVars ()
+{
+
+ local role_post;
+ getHostRoleEnvHook;
+ if [ -d "$1/include" ]; then
+ export NIX_CFLAGS_COMPILE${role_post}+=" -isystem $1/include";
+ fi;
+ if [ -d "$1/Library/Frameworks" ]; then
+ export NIX_CFLAGS_COMPILE${role_post}+=" -iframework $1/Library/Frameworks";
+ fi
+}
+checkPhase ()
+{
+
+ runHook preCheck;
+ if [[ -z "${foundMakefile:-}" ]]; then
+ echo "no Makefile or custom checkPhase, doing nothing";
+ runHook postCheck;
+ return;
+ fi;
+ if [[ -z "${checkTarget:-}" ]]; then
+ if make -n ${makefile:+-f $makefile} check > /dev/null 2>&1; then
+ checkTarget="check";
+ else
+ if make -n ${makefile:+-f $makefile} test > /dev/null 2>&1; then
+ checkTarget="test";
+ fi;
+ fi;
+ fi;
+ if [[ -z "${checkTarget:-}" ]]; then
+ echo "no check/test target in ${makefile:-Makefile}, doing nothing";
+ else
+ local flagsArray=(${enableParallelChecking:+-j${NIX_BUILD_CORES}} SHELL="$SHELL");
+ concatTo flagsArray makeFlags makeFlagsArray checkFlags=VERBOSE=y checkFlagsArray checkTarget;
+ echoCmd 'check flags' "${flagsArray[@]}";
+ make ${makefile:+-f $makefile} "${flagsArray[@]}";
+ unset flagsArray;
+ fi;
+ runHook postCheck
+}
+compressManPages ()
+{
+
+ local dir="$1";
+ if [ -L "$dir"/share ] || [ -L "$dir"/share/man ] || [ ! -d "$dir/share/man" ]; then
+ return;
+ fi;
+ echo "gzipping man pages under $dir/share/man/";
+ find "$dir"/share/man/ -type f -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 | while IFS= read -r -d '' f; do
+ if gzip -c -n "$f" > "$f".gz; then
+ rm "$f";
+ else
+ rm "$f".gz;
+ fi;
+ done;
+ find "$dir"/share/man/ -type l -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 | sort -z | while IFS= read -r -d '' f; do
+ local target;
+ target="$(readlink -f "$f")";
+ if [ -f "$target".gz ]; then
+ ln -sf "$target".gz "$f".gz && rm "$f";
+ fi;
+ done
+}
+concatStringsSep ()
+{
+
+ local sep="$1";
+ local name="$2";
+ local type oldifs;
+ if type=$(declare -p "$name" 2> /dev/null); then
+ local -n nameref="$name";
+ case "${type#* }" in
+ -A*)
+ echo "concatStringsSep(): ERROR: trying to use concatStringsSep on an associative array." 1>&2;
+ return 1
+ ;;
+ -a*)
+ local IFS="$(printf '\036')"
+ ;;
+ *)
+ local IFS=" "
+ ;;
+ esac;
+ local ifs_separated="${nameref[*]}";
+ echo -n "${ifs_separated//"$IFS"/"$sep"}";
+ fi
+}
+concatTo ()
+{
+
+ local -;
+ set -o noglob;
+ local -n targetref="$1";
+ shift;
+ local arg default name type;
+ for arg in "$@";
+ do
+ IFS="=" read -r name default <<< "$arg";
+ local -n nameref="$name";
+ if [[ -z "${nameref[*]}" && -n "$default" ]]; then
+ targetref+=("$default");
+ else
+ if type=$(declare -p "$name" 2> /dev/null); then
+ case "${type#* }" in
+ -A*)
+ echo "concatTo(): ERROR: trying to use concatTo on an associative array." 1>&2;
+ return 1
+ ;;
+ -a*)
+ targetref+=("${nameref[@]}")
+ ;;
+ *)
+ if [[ "$name" = *"Array" ]]; then
+ nixErrorLog "concatTo(): $name is not declared as array, treating as a singleton. This will become an error in future";
+ targetref+=(${nameref+"${nameref[@]}"});
+ else
+ targetref+=(${nameref-});
+ fi
+ ;;
+ esac;
+ fi;
+ fi;
+ done
+}
+configurePhase ()
+{
+
+ runHook preConfigure;
+ : "${configureScript=}";
+ if [[ -z "$configureScript" && -x ./configure ]]; then
+ configureScript=./configure;
+ fi;
+ if [ -z "${dontFixLibtool:-}" ]; then
+ export lt_cv_deplibs_check_method="${lt_cv_deplibs_check_method-pass_all}";
+ local i;
+ find . -iname "ltmain.sh" -print0 | while IFS='' read -r -d '' i; do
+ echo "fixing libtool script $i";
+ fixLibtool "$i";
+ done;
+ CONFIGURE_MTIME_REFERENCE=$(mktemp configure.mtime.reference.XXXXXX);
+ 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" {} \;;
+ rm -f "$CONFIGURE_MTIME_REFERENCE";
+ fi;
+ if [[ -z "${dontAddPrefix:-}" && -n "$prefix" ]]; then
+ prependToVar configureFlags "${prefixKey:---prefix=}$prefix";
+ fi;
+ if [[ -f "$configureScript" ]]; then
+ if [ -z "${dontAddDisableDepTrack:-}" ]; then
+ if grep -q dependency-tracking "$configureScript"; then
+ prependToVar configureFlags --disable-dependency-tracking;
+ fi;
+ fi;
+ if [ -z "${dontDisableStatic:-}" ]; then
+ if grep -q enable-static "$configureScript"; then
+ prependToVar configureFlags --disable-static;
+ fi;
+ fi;
+ if [ -z "${dontPatchShebangsInConfigure:-}" ]; then
+ patchShebangs --build "$configureScript";
+ fi;
+ fi;
+ if [ -n "$configureScript" ]; then
+ local -a flagsArray;
+ concatTo flagsArray configureFlags configureFlagsArray;
+ echoCmd 'configure flags' "${flagsArray[@]}";
+ $configureScript "${flagsArray[@]}";
+ unset flagsArray;
+ else
+ echo "no configure script, doing nothing";
+ fi;
+ runHook postConfigure
+}
+consumeEntire ()
+{
+
+ if IFS='' read -r -d '' "$1"; then
+ echo "consumeEntire(): ERROR: Input null bytes, won't process" 1>&2;
+ return 1;
+ fi
+}
+distPhase ()
+{
+
+ runHook preDist;
+ local flagsArray=();
+ concatTo flagsArray distFlags distFlagsArray distTarget=dist;
+ echo 'dist flags: %q' "${flagsArray[@]}";
+ make ${makefile:+-f $makefile} "${flagsArray[@]}";
+ if [ "${dontCopyDist:-0}" != 1 ]; then
+ mkdir -p "$out/tarballs";
+ cp -pvd ${tarballs[*]:-*.tar.gz} "$out/tarballs";
+ fi;
+ runHook postDist
+}
+dumpVars ()
+{
+
+ if [ "${noDumpEnvVars:-0}" != 1 ]; then
+ {
+ install -m 0600 /dev/null "$NIX_BUILD_TOP/env-vars" && export 2> /dev/null >| "$NIX_BUILD_TOP/env-vars"
+ } || true;
+ fi
+}
+echoCmd ()
+{
+
+ printf "%s:" "$1";
+ shift;
+ printf ' %q' "$@";
+ echo
+}
+exitHandler ()
+{
+
+ exitCode="$?";
+ set +e;
+ if [ -n "${showBuildStats:-}" ]; then
+ read -r -d '' -a buildTimes < <(times);
+ echo "build times:";
+ echo "user time for the shell ${buildTimes[0]}";
+ echo "system time for the shell ${buildTimes[1]}";
+ echo "user time for all child processes ${buildTimes[2]}";
+ echo "system time for all child processes ${buildTimes[3]}";
+ fi;
+ if (( "$exitCode" != 0 )); then
+ runHook failureHook;
+ if [ -n "${succeedOnFailure:-}" ]; then
+ echo "build failed with exit code $exitCode (ignored)";
+ mkdir -p "$out/nix-support";
+ printf "%s" "$exitCode" > "$out/nix-support/failed";
+ exit 0;
+ fi;
+ else
+ runHook exitHook;
+ fi;
+ return "$exitCode"
+}
+findInputs ()
+{
+
+ local -r pkg="$1";
+ local -r hostOffset="$2";
+ local -r targetOffset="$3";
+ (( hostOffset <= targetOffset )) || exit 1;
+ local varVar="${pkgAccumVarVars[hostOffset + 1]}";
+ local varRef="$varVar[$((targetOffset - hostOffset))]";
+ local var="${!varRef}";
+ unset -v varVar varRef;
+ local varSlice="$var[*]";
+ case " ${!varSlice-} " in
+ *" $pkg "*)
+ return 0
+ ;;
+ esac;
+ unset -v varSlice;
+ eval "$var"'+=("$pkg")';
+ if ! [ -e "$pkg" ]; then
+ echo "build input $pkg does not exist" 1>&2;
+ exit 1;
+ fi;
+ function mapOffset ()
+ {
+ local -r inputOffset="$1";
+ local -n outputOffset="$2";
+ if (( inputOffset <= 0 )); then
+ outputOffset=$((inputOffset + hostOffset));
+ else
+ outputOffset=$((inputOffset - 1 + targetOffset));
+ fi
+ };
+ local relHostOffset;
+ for relHostOffset in "${allPlatOffsets[@]}";
+ do
+ local files="${propagatedDepFilesVars[relHostOffset + 1]}";
+ local hostOffsetNext;
+ mapOffset "$relHostOffset" hostOffsetNext;
+ (( -1 <= hostOffsetNext && hostOffsetNext <= 1 )) || continue;
+ local relTargetOffset;
+ for relTargetOffset in "${allPlatOffsets[@]}";
+ do
+ (( "$relHostOffset" <= "$relTargetOffset" )) || continue;
+ local fileRef="${files}[$relTargetOffset - $relHostOffset]";
+ local file="${!fileRef}";
+ unset -v fileRef;
+ local targetOffsetNext;
+ mapOffset "$relTargetOffset" targetOffsetNext;
+ (( -1 <= hostOffsetNext && hostOffsetNext <= 1 )) || continue;
+ [[ -f "$pkg/nix-support/$file" ]] || continue;
+ local pkgNext;
+ read -r -d '' pkgNext < "$pkg/nix-support/$file" || true;
+ for pkgNext in $pkgNext;
+ do
+ findInputs "$pkgNext" "$hostOffsetNext" "$targetOffsetNext";
+ done;
+ done;
+ done
+}
+fixLibtool ()
+{
+
+ local search_path;
+ for flag in $NIX_LDFLAGS;
+ do
+ case $flag in
+ -L*)
+ search_path+=" ${flag#-L}"
+ ;;
+ esac;
+ done;
+ sed -i "$1" -e "s^eval \(sys_lib_search_path=\).*^\1'${search_path:-}'^" -e 's^eval sys_lib_.+search_path=.*^^'
+}
+fixupPhase ()
+{
+
+ local output;
+ for output in $(getAllOutputNames);
+ do
+ if [ -e "${!output}" ]; then
+ chmod -R u+w,u-s,g-s "${!output}";
+ fi;
+ done;
+ runHook preFixup;
+ local output;
+ for output in $(getAllOutputNames);
+ do
+ prefix="${!output}" runHook fixupOutput;
+ done;
+ recordPropagatedDependencies;
+ if [ -n "${setupHook:-}" ]; then
+ mkdir -p "${!outputDev}/nix-support";
+ substituteAll "$setupHook" "${!outputDev}/nix-support/setup-hook";
+ fi;
+ if [ -n "${setupHooks:-}" ]; then
+ mkdir -p "${!outputDev}/nix-support";
+ local hook;
+ for hook in ${setupHooks[@]};
+ do
+ local content;
+ consumeEntire content < "$hook";
+ substituteAllStream content "file '$hook'" >> "${!outputDev}/nix-support/setup-hook";
+ unset -v content;
+ done;
+ unset -v hook;
+ fi;
+ if [ -n "${propagatedUserEnvPkgs[*]:-}" ]; then
+ mkdir -p "${!outputBin}/nix-support";
+ printWords "${propagatedUserEnvPkgs[@]}" > "${!outputBin}/nix-support/propagated-user-env-packages";
+ fi;
+ runHook postFixup
+}
+genericBuild ()
+{
+
+ export GZIP_NO_TIMESTAMPS=1;
+ if [ -f "${buildCommandPath:-}" ]; then
+ source "$buildCommandPath";
+ return;
+ fi;
+ if [ -n "${buildCommand:-}" ]; then
+ eval "$buildCommand";
+ return;
+ fi;
+ if [ -z "${phases[*]:-}" ]; then
+ phases="${prePhases[*]:-} unpackPhase patchPhase ${preConfigurePhases[*]:-} configurePhase ${preBuildPhases[*]:-} buildPhase checkPhase ${preInstallPhases[*]:-} installPhase ${preFixupPhases[*]:-} fixupPhase installCheckPhase ${preDistPhases[*]:-} distPhase ${postPhases[*]:-}";
+ fi;
+ for curPhase in ${phases[*]};
+ do
+ runPhase "$curPhase";
+ done
+}
+getAllOutputNames ()
+{
+
+ if [ -n "$__structuredAttrs" ]; then
+ echo "${!outputs[*]}";
+ else
+ echo "$outputs";
+ fi
+}
+getHostRole ()
+{
+
+ getRole "$hostOffset"
+}
+getHostRoleEnvHook ()
+{
+
+ getRole "$depHostOffset"
+}
+getRole ()
+{
+
+ case $1 in
+ -1)
+ role_post='_FOR_BUILD'
+ ;;
+ 0)
+ role_post=''
+ ;;
+ 1)
+ role_post='_FOR_TARGET'
+ ;;
+ *)
+ echo "binutils-wrapper-2.44: used as improper sort of dependency" 1>&2;
+ return 1
+ ;;
+ esac
+}
+getTargetRole ()
+{
+
+ getRole "$targetOffset"
+}
+getTargetRoleEnvHook ()
+{
+
+ getRole "$depTargetOffset"
+}
+getTargetRoleWrapper ()
+{
+
+ case $targetOffset in
+ -1)
+ export NIX_BINTOOLS_WRAPPER_TARGET_BUILD_x86_64_unknown_linux_gnu=1
+ ;;
+ 0)
+ export NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu=1
+ ;;
+ 1)
+ export NIX_BINTOOLS_WRAPPER_TARGET_TARGET_x86_64_unknown_linux_gnu=1
+ ;;
+ *)
+ echo "binutils-wrapper-2.44: used as improper sort of dependency" 1>&2;
+ return 1
+ ;;
+ esac
+}
+installCheckPhase ()
+{
+
+ runHook preInstallCheck;
+ if [[ -z "${foundMakefile:-}" ]]; then
+ echo "no Makefile or custom installCheckPhase, doing nothing";
+ else
+ if [[ -z "${installCheckTarget:-}" ]] && ! make -n ${makefile:+-f $makefile} "${installCheckTarget:-installcheck}" > /dev/null 2>&1; then
+ echo "no installcheck target in ${makefile:-Makefile}, doing nothing";
+ else
+ local flagsArray=(${enableParallelChecking:+-j${NIX_BUILD_CORES}} SHELL="$SHELL");
+ concatTo flagsArray makeFlags makeFlagsArray installCheckFlags installCheckFlagsArray installCheckTarget=installcheck;
+ echoCmd 'installcheck flags' "${flagsArray[@]}";
+ make ${makefile:+-f $makefile} "${flagsArray[@]}";
+ unset flagsArray;
+ fi;
+ fi;
+ runHook postInstallCheck
+}
+installPhase ()
+{
+
+ runHook preInstall;
+ if [[ -z "${makeFlags-}" && -z "${makefile:-}" && ! ( -e Makefile || -e makefile || -e GNUmakefile ) ]]; then
+ echo "no Makefile or custom installPhase, doing nothing";
+ runHook postInstall;
+ return;
+ else
+ foundMakefile=1;
+ fi;
+ if [ -n "$prefix" ]; then
+ mkdir -p "$prefix";
+ fi;
+ local flagsArray=(${enableParallelInstalling:+-j${NIX_BUILD_CORES}} SHELL="$SHELL");
+ concatTo flagsArray makeFlags makeFlagsArray installFlags installFlagsArray installTargets=install;
+ echoCmd 'install flags' "${flagsArray[@]}";
+ make ${makefile:+-f $makefile} "${flagsArray[@]}";
+ unset flagsArray;
+ runHook postInstall
+}
+isELF ()
+{
+
+ local fn="$1";
+ local fd;
+ local magic;
+ exec {fd}< "$fn";
+ read -r -n 4 -u "$fd" magic;
+ exec {fd}>&-;
+ if [ "$magic" = 'ELF' ]; then
+ return 0;
+ else
+ return 1;
+ fi
+}
+isMachO ()
+{
+
+ local fn="$1";
+ local fd;
+ local magic;
+ exec {fd}< "$fn";
+ read -r -n 4 -u "$fd" magic;
+ exec {fd}>&-;
+ if [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xcf") || "$magic" = $(echo -ne "\xcf\xfa\xed\xfe") ]]; then
+ return 0;
+ else
+ if [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xce") || "$magic" = $(echo -ne "\xce\xfa\xed\xfe") ]]; then
+ return 0;
+ else
+ if [[ "$magic" = $(echo -ne "\xca\xfe\xba\xbe") || "$magic" = $(echo -ne "\xbe\xba\xfe\xca") ]]; then
+ return 0;
+ else
+ return 1;
+ fi;
+ fi;
+ fi
+}
+isScript ()
+{
+
+ local fn="$1";
+ local fd;
+ local magic;
+ exec {fd}< "$fn";
+ read -r -n 2 -u "$fd" magic;
+ exec {fd}>&-;
+ if [[ "$magic" =~ \#! ]]; then
+ return 0;
+ else
+ return 1;
+ fi
+}
+mapOffset ()
+{
+
+ local -r inputOffset="$1";
+ local -n outputOffset="$2";
+ if (( inputOffset <= 0 )); then
+ outputOffset=$((inputOffset + hostOffset));
+ else
+ outputOffset=$((inputOffset - 1 + targetOffset));
+ fi
+}
+moveToOutput ()
+{
+
+ local patt="$1";
+ local dstOut="$2";
+ local output;
+ for output in $(getAllOutputNames);
+ do
+ if [ "${!output}" = "$dstOut" ]; then
+ continue;
+ fi;
+ local srcPath;
+ for srcPath in "${!output}"/$patt;
+ do
+ if [ ! -e "$srcPath" ] && [ ! -L "$srcPath" ]; then
+ continue;
+ fi;
+ if [ "$dstOut" = REMOVE ]; then
+ echo "Removing $srcPath";
+ rm -r "$srcPath";
+ else
+ local dstPath="$dstOut${srcPath#${!output}}";
+ echo "Moving $srcPath to $dstPath";
+ if [ -d "$dstPath" ] && [ -d "$srcPath" ]; then
+ rmdir "$srcPath" --ignore-fail-on-non-empty;
+ if [ -d "$srcPath" ]; then
+ mv -t "$dstPath" "$srcPath"/*;
+ rmdir "$srcPath";
+ fi;
+ else
+ mkdir -p "$(readlink -m "$dstPath/..")";
+ mv "$srcPath" "$dstPath";
+ fi;
+ fi;
+ local srcParent="$(readlink -m "$srcPath/..")";
+ if [ -n "$(find "$srcParent" -maxdepth 0 -type d -empty 2> /dev/null)" ]; then
+ echo "Removing empty $srcParent/ and (possibly) its parents";
+ rmdir -p --ignore-fail-on-non-empty "$srcParent" 2> /dev/null || true;
+ fi;
+ done;
+ done
+}
+nixChattyLog ()
+{
+
+ _nixLogWithLevel 5 "$*"
+}
+nixDebugLog ()
+{
+
+ _nixLogWithLevel 6 "$*"
+}
+nixErrorLog ()
+{
+
+ _nixLogWithLevel 0 "$*"
+}
+nixInfoLog ()
+{
+
+ _nixLogWithLevel 3 "$*"
+}
+nixLog ()
+{
+
+ [[ -z ${NIX_LOG_FD-} ]] && return 0;
+ local callerName="${FUNCNAME[1]}";
+ if [[ $callerName == "_callImplicitHook" ]]; then
+ callerName="${hookName:?}";
+ fi;
+ printf "%s: %s\n" "$callerName" "$*" >&"$NIX_LOG_FD"
+}
+nixNoticeLog ()
+{
+
+ _nixLogWithLevel 2 "$*"
+}
+nixTalkativeLog ()
+{
+
+ _nixLogWithLevel 4 "$*"
+}
+nixVomitLog ()
+{
+
+ _nixLogWithLevel 7 "$*"
+}
+nixWarnLog ()
+{
+
+ _nixLogWithLevel 1 "$*"
+}
+noBrokenSymlinks ()
+{
+
+ local -r output="${1:?}";
+ local path;
+ local pathParent;
+ local symlinkTarget;
+ local -i numDanglingSymlinks=0;
+ local -i numReflexiveSymlinks=0;
+ local -i numUnreadableSymlinks=0;
+ if [[ ! -e $output ]]; then
+ nixWarnLog "skipping non-existent output $output";
+ return 0;
+ fi;
+ nixInfoLog "running on $output";
+ while IFS= read -r -d '' path; do
+ pathParent="$(dirname "$path")";
+ if ! symlinkTarget="$(readlink "$path")"; then
+ nixErrorLog "the symlink $path is unreadable";
+ numUnreadableSymlinks+=1;
+ continue;
+ fi;
+ if [[ $symlinkTarget == /* ]]; then
+ nixInfoLog "symlink $path points to absolute target $symlinkTarget";
+ else
+ nixInfoLog "symlink $path points to relative target $symlinkTarget";
+ symlinkTarget="$(realpath --no-symlinks --canonicalize-missing "$pathParent/$symlinkTarget")";
+ fi;
+ if [[ $symlinkTarget != "$NIX_STORE"/* ]]; then
+ nixInfoLog "symlink $path points outside the Nix store; ignoring";
+ continue;
+ fi;
+ if [[ $path == "$symlinkTarget" ]]; then
+ nixErrorLog "the symlink $path is reflexive";
+ numReflexiveSymlinks+=1;
+ else
+ if [[ ! -e $symlinkTarget ]]; then
+ nixErrorLog "the symlink $path points to a missing target: $symlinkTarget";
+ numDanglingSymlinks+=1;
+ else
+ nixDebugLog "the symlink $path is irreflexive and points to a target which exists";
+ fi;
+ fi;
+ done < <(find "$output" -type l -print0);
+ if ((numDanglingSymlinks > 0 || numReflexiveSymlinks > 0 || numUnreadableSymlinks > 0)); then
+ nixErrorLog "found $numDanglingSymlinks dangling symlinks, $numReflexiveSymlinks reflexive symlinks and $numUnreadableSymlinks unreadable symlinks";
+ exit 1;
+ fi;
+ return 0
+}
+noBrokenSymlinksInAllOutputs ()
+{
+
+ if [[ -z ${dontCheckForBrokenSymlinks-} ]]; then
+ for output in $(getAllOutputNames);
+ do
+ noBrokenSymlinks "${!output}";
+ done;
+ fi
+}
+patchELF ()
+{
+
+ local dir="$1";
+ [ -e "$dir" ] || return 0;
+ echo "shrinking RPATHs of ELF executables and libraries in $dir";
+ local i;
+ while IFS= read -r -d '' i; do
+ if [[ "$i" =~ .build-id ]]; then
+ continue;
+ fi;
+ if ! isELF "$i"; then
+ continue;
+ fi;
+ echo "shrinking $i";
+ patchelf --shrink-rpath "$i" || true;
+ done < <(find "$dir" -type f -print0)
+}
+patchPhase ()
+{
+
+ runHook prePatch;
+ local -a patchesArray;
+ concatTo patchesArray patches;
+ for i in "${patchesArray[@]}";
+ do
+ echo "applying patch $i";
+ local uncompress=cat;
+ case "$i" in
+ *.gz)
+ uncompress="gzip -d"
+ ;;
+ *.bz2)
+ uncompress="bzip2 -d"
+ ;;
+ *.xz)
+ uncompress="xz -d"
+ ;;
+ *.lzma)
+ uncompress="lzma -d"
+ ;;
+ esac;
+ local -a flagsArray;
+ concatTo flagsArray patchFlags=-p1;
+ $uncompress < "$i" 2>&1 | patch "${flagsArray[@]}";
+ done;
+ runHook postPatch
+}
+patchShebangs ()
+{
+
+ local pathName;
+ local update=false;
+ while [[ $# -gt 0 ]]; do
+ case "$1" in
+ --host)
+ pathName=HOST_PATH;
+ shift
+ ;;
+ --build)
+ pathName=PATH;
+ shift
+ ;;
+ --update)
+ update=true;
+ shift
+ ;;
+ --)
+ shift;
+ break
+ ;;
+ -* | --*)
+ echo "Unknown option $1 supplied to patchShebangs" 1>&2;
+ return 1
+ ;;
+ *)
+ break
+ ;;
+ esac;
+ done;
+ echo "patching script interpreter paths in $@";
+ local f;
+ local oldPath;
+ local newPath;
+ local arg0;
+ local args;
+ local oldInterpreterLine;
+ local newInterpreterLine;
+ if [[ $# -eq 0 ]]; then
+ echo "No arguments supplied to patchShebangs" 1>&2;
+ return 0;
+ fi;
+ local f;
+ while IFS= read -r -d '' f; do
+ isScript "$f" || continue;
+ read -r oldInterpreterLine < "$f" || [ "$oldInterpreterLine" ];
+ read -r oldPath arg0 args <<< "${oldInterpreterLine:2}";
+ if [[ -z "${pathName:-}" ]]; then
+ if [[ -n $strictDeps && $f == "$NIX_STORE"* ]]; then
+ pathName=HOST_PATH;
+ else
+ pathName=PATH;
+ fi;
+ fi;
+ if [[ "$oldPath" == *"/bin/env" ]]; then
+ if [[ $arg0 == "-S" ]]; then
+ arg0=${args%% *};
+ [[ "$args" == *" "* ]] && args=${args#* } || args=;
+ newPath="$(PATH="${!pathName}" type -P "env" || true)";
+ args="-S $(PATH="${!pathName}" type -P "$arg0" || true) $args";
+ else
+ if [[ $arg0 == "-"* || $arg0 == *"="* ]]; then
+ echo "$f: unsupported interpreter directive \"$oldInterpreterLine\" (set dontPatchShebangs=1 and handle shebang patching yourself)" 1>&2;
+ exit 1;
+ else
+ newPath="$(PATH="${!pathName}" type -P "$arg0" || true)";
+ fi;
+ fi;
+ else
+ if [[ -z $oldPath ]]; then
+ oldPath="/bin/sh";
+ fi;
+ newPath="$(PATH="${!pathName}" type -P "$(basename "$oldPath")" || true)";
+ args="$arg0 $args";
+ fi;
+ newInterpreterLine="$newPath $args";
+ newInterpreterLine=${newInterpreterLine%${newInterpreterLine##*[![:space:]]}};
+ if [[ -n "$oldPath" && ( "$update" == true || "${oldPath:0:${#NIX_STORE}}" != "$NIX_STORE" ) ]]; then
+ if [[ -n "$newPath" && "$newPath" != "$oldPath" ]]; then
+ echo "$f: interpreter directive changed from \"$oldInterpreterLine\" to \"$newInterpreterLine\"";
+ escapedInterpreterLine=${newInterpreterLine//\\/\\\\};
+ timestamp=$(stat --printf "%y" "$f");
+ sed -i -e "1 s|.*|#\!$escapedInterpreterLine|" "$f";
+ touch --date "$timestamp" "$f";
+ fi;
+ fi;
+ done < <(find "$@" -type f -perm -0100 -print0)
+}
+patchShebangsAuto ()
+{
+
+ if [[ -z "${dontPatchShebangs-}" && -e "$prefix" ]]; then
+ if [[ "$output" != out && "$output" = "$outputDev" ]]; then
+ patchShebangs --build "$prefix";
+ else
+ patchShebangs --host "$prefix";
+ fi;
+ fi
+}
+prependToVar ()
+{
+
+ local -n nameref="$1";
+ local useArray type;
+ if [ -n "$__structuredAttrs" ]; then
+ useArray=true;
+ else
+ useArray=false;
+ fi;
+ if type=$(declare -p "$1" 2> /dev/null); then
+ case "${type#* }" in
+ -A*)
+ echo "prependToVar(): ERROR: trying to use prependToVar on an associative array." 1>&2;
+ return 1
+ ;;
+ -a*)
+ useArray=true
+ ;;
+ *)
+ useArray=false
+ ;;
+ esac;
+ fi;
+ shift;
+ if $useArray; then
+ nameref=("$@" ${nameref+"${nameref[@]}"});
+ else
+ nameref="$* ${nameref-}";
+ fi
+}
+printLines ()
+{
+
+ (( "$#" > 0 )) || return 0;
+ printf '%s\n' "$@"
+}
+printWords ()
+{
+
+ (( "$#" > 0 )) || return 0;
+ printf '%s ' "$@"
+}
+recordPropagatedDependencies ()
+{
+
+ declare -ra flatVars=(depsBuildBuildPropagated propagatedNativeBuildInputs depsBuildTargetPropagated depsHostHostPropagated propagatedBuildInputs depsTargetTargetPropagated);
+ declare -ra flatFiles=("${propagatedBuildDepFiles[@]}" "${propagatedHostDepFiles[@]}" "${propagatedTargetDepFiles[@]}");
+ local propagatedInputsIndex;
+ for propagatedInputsIndex in "${!flatVars[@]}";
+ do
+ local propagatedInputsSlice="${flatVars[$propagatedInputsIndex]}[@]";
+ local propagatedInputsFile="${flatFiles[$propagatedInputsIndex]}";
+ [[ -n "${!propagatedInputsSlice}" ]] || continue;
+ mkdir -p "${!outputDev}/nix-support";
+ printWords ${!propagatedInputsSlice} > "${!outputDev}/nix-support/$propagatedInputsFile";
+ done
+}
+runHook ()
+{
+
+ local hookName="$1";
+ shift;
+ local hooksSlice="${hookName%Hook}Hooks[@]";
+ local hook;
+ for hook in "_callImplicitHook 0 $hookName" ${!hooksSlice+"${!hooksSlice}"};
+ do
+ _logHook "$hookName" "$hook" "$@";
+ _eval "$hook" "$@";
+ done;
+ return 0
+}
+runOneHook ()
+{
+
+ local hookName="$1";
+ shift;
+ local hooksSlice="${hookName%Hook}Hooks[@]";
+ local hook ret=1;
+ for hook in "_callImplicitHook 1 $hookName" ${!hooksSlice+"${!hooksSlice}"};
+ do
+ _logHook "$hookName" "$hook" "$@";
+ if _eval "$hook" "$@"; then
+ ret=0;
+ break;
+ fi;
+ done;
+ return "$ret"
+}
+runPhase ()
+{
+
+ local curPhase="$*";
+ if [[ "$curPhase" = unpackPhase && -n "${dontUnpack:-}" ]]; then
+ return;
+ fi;
+ if [[ "$curPhase" = patchPhase && -n "${dontPatch:-}" ]]; then
+ return;
+ fi;
+ if [[ "$curPhase" = configurePhase && -n "${dontConfigure:-}" ]]; then
+ return;
+ fi;
+ if [[ "$curPhase" = buildPhase && -n "${dontBuild:-}" ]]; then
+ return;
+ fi;
+ if [[ "$curPhase" = checkPhase && -z "${doCheck:-}" ]]; then
+ return;
+ fi;
+ if [[ "$curPhase" = installPhase && -n "${dontInstall:-}" ]]; then
+ return;
+ fi;
+ if [[ "$curPhase" = fixupPhase && -n "${dontFixup:-}" ]]; then
+ return;
+ fi;
+ if [[ "$curPhase" = installCheckPhase && -z "${doInstallCheck:-}" ]]; then
+ return;
+ fi;
+ if [[ "$curPhase" = distPhase && -z "${doDist:-}" ]]; then
+ return;
+ fi;
+ showPhaseHeader "$curPhase";
+ dumpVars;
+ local startTime endTime;
+ startTime=$(date +"%s");
+ eval "${!curPhase:-$curPhase}";
+ endTime=$(date +"%s");
+ showPhaseFooter "$curPhase" "$startTime" "$endTime";
+ if [ "$curPhase" = unpackPhase ]; then
+ [ -n "${sourceRoot:-}" ] && chmod +x -- "${sourceRoot}";
+ cd -- "${sourceRoot:-.}";
+ fi
+}
+showPhaseFooter ()
+{
+
+ local phase="$1";
+ local startTime="$2";
+ local endTime="$3";
+ local delta=$(( endTime - startTime ));
+ (( delta < 30 )) && return;
+ local H=$((delta/3600));
+ local M=$((delta%3600/60));
+ local S=$((delta%60));
+ echo -n "$phase completed in ";
+ (( H > 0 )) && echo -n "$H hours ";
+ (( M > 0 )) && echo -n "$M minutes ";
+ echo "$S seconds"
+}
+showPhaseHeader ()
+{
+
+ local phase="$1";
+ echo "Running phase: $phase";
+ if [[ -z ${NIX_LOG_FD-} ]]; then
+ return;
+ fi;
+ printf "@nix { \"action\": \"setPhase\", \"phase\": \"%s\" }\n" "$phase" >&"$NIX_LOG_FD"
+}
+stripDirs ()
+{
+
+ local cmd="$1";
+ local ranlibCmd="$2";
+ local paths="$3";
+ local stripFlags="$4";
+ local excludeFlags=();
+ local pathsNew=;
+ [ -z "$cmd" ] && echo "stripDirs: Strip command is empty" 1>&2 && exit 1;
+ [ -z "$ranlibCmd" ] && echo "stripDirs: Ranlib command is empty" 1>&2 && exit 1;
+ local pattern;
+ if [ -n "${stripExclude:-}" ]; then
+ for pattern in "${stripExclude[@]}";
+ do
+ excludeFlags+=(-a '!' '(' -name "$pattern" -o -wholename "$prefix/$pattern" ')');
+ done;
+ fi;
+ local p;
+ for p in ${paths};
+ do
+ if [ -e "$prefix/$p" ]; then
+ pathsNew="${pathsNew} $prefix/$p";
+ fi;
+ done;
+ paths=${pathsNew};
+ if [ -n "${paths}" ]; then
+ echo "stripping (with command $cmd and flags $stripFlags) in $paths";
+ local striperr;
+ striperr="$(mktemp --tmpdir="$TMPDIR" 'striperr.XXXXXX')";
+ find $paths -type f "${excludeFlags[@]}" -a '!' -path "$prefix/lib/debug/*" -printf '%D-%i,%p\0' | sort -t, -k1,1 -u -z | cut -d, -f2- -z | xargs -r -0 -n1 -P "$NIX_BUILD_CORES" -- $cmd $stripFlags 2> "$striperr" || exit_code=$?;
+ [[ "$exit_code" = 123 || -z "$exit_code" ]] || ( cat "$striperr" 1>&2 && exit 1 );
+ rm "$striperr";
+ find $paths -name '*.a' -type f -exec $ranlibCmd '{}' \; 2> /dev/null;
+ fi
+}
+stripHash ()
+{
+
+ local strippedName casematchOpt=0;
+ strippedName="$(basename -- "$1")";
+ shopt -q nocasematch && casematchOpt=1;
+ shopt -u nocasematch;
+ if [[ "$strippedName" =~ ^[a-z0-9]{32}- ]]; then
+ echo "${strippedName:33}";
+ else
+ echo "$strippedName";
+ fi;
+ if (( casematchOpt )); then
+ shopt -s nocasematch;
+ fi
+}
+substitute ()
+{
+
+ local input="$1";
+ local output="$2";
+ shift 2;
+ if [ ! -f "$input" ]; then
+ echo "substitute(): ERROR: file '$input' does not exist" 1>&2;
+ return 1;
+ fi;
+ local content;
+ consumeEntire content < "$input";
+ if [ -e "$output" ]; then
+ chmod +w "$output";
+ fi;
+ substituteStream content "file '$input'" "$@" > "$output"
+}
+substituteAll ()
+{
+
+ local input="$1";
+ local output="$2";
+ local -a args=();
+ _allFlags;
+ substitute "$input" "$output" "${args[@]}"
+}
+substituteAllInPlace ()
+{
+
+ local fileName="$1";
+ shift;
+ substituteAll "$fileName" "$fileName" "$@"
+}
+substituteAllStream ()
+{
+
+ local -a args=();
+ _allFlags;
+ substituteStream "$1" "$2" "${args[@]}"
+}
+substituteInPlace ()
+{
+
+ local -a fileNames=();
+ for arg in "$@";
+ do
+ if [[ "$arg" = "--"* ]]; then
+ break;
+ fi;
+ fileNames+=("$arg");
+ shift;
+ done;
+ if ! [[ "${#fileNames[@]}" -gt 0 ]]; then
+ echo "substituteInPlace called without any files to operate on (files must come before options!)" 1>&2;
+ return 1;
+ fi;
+ for file in "${fileNames[@]}";
+ do
+ substitute "$file" "$file" "$@";
+ done
+}
+substituteStream ()
+{
+
+ local var=$1;
+ local description=$2;
+ shift 2;
+ while (( "$#" )); do
+ local replace_mode="$1";
+ case "$1" in
+ --replace)
+ if ! "$_substituteStream_has_warned_replace_deprecation"; then
+ echo "substituteStream() in derivation $name: WARNING: '--replace' is deprecated, use --replace-{fail,warn,quiet}. ($description)" 1>&2;
+ _substituteStream_has_warned_replace_deprecation=true;
+ fi;
+ replace_mode='--replace-warn'
+ ;&
+ --replace-quiet | --replace-warn | --replace-fail)
+ pattern="$2";
+ replacement="$3";
+ shift 3;
+ if ! [[ "${!var}" == *"$pattern"* ]]; then
+ if [ "$replace_mode" == --replace-warn ]; then
+ printf "substituteStream() in derivation $name: WARNING: pattern %q doesn't match anything in %s\n" "$pattern" "$description" 1>&2;
+ else
+ if [ "$replace_mode" == --replace-fail ]; then
+ printf "substituteStream() in derivation $name: ERROR: pattern %q doesn't match anything in %s\n" "$pattern" "$description" 1>&2;
+ return 1;
+ fi;
+ fi;
+ fi;
+ eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}'
+ ;;
+ --subst-var)
+ local varName="$2";
+ shift 2;
+ if ! [[ "$varName" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then
+ echo "substituteStream() in derivation $name: ERROR: substitution variables must be valid Bash names, \"$varName\" isn't." 1>&2;
+ return 1;
+ fi;
+ if [ -z ${!varName+x} ]; then
+ echo "substituteStream() in derivation $name: ERROR: variable \$$varName is unset" 1>&2;
+ return 1;
+ fi;
+ pattern="@$varName@";
+ replacement="${!varName}";
+ eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}'
+ ;;
+ --subst-var-by)
+ pattern="@$2@";
+ replacement="$3";
+ eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}';
+ shift 3
+ ;;
+ *)
+ echo "substituteStream() in derivation $name: ERROR: Invalid command line argument: $1" 1>&2;
+ return 1
+ ;;
+ esac;
+ done;
+ printf "%s" "${!var}"
+}
+unpackFile ()
+{
+
+ curSrc="$1";
+ echo "unpacking source archive $curSrc";
+ if ! runOneHook unpackCmd "$curSrc"; then
+ echo "do not know how to unpack source archive $curSrc";
+ exit 1;
+ fi
+}
+unpackPhase ()
+{
+
+ runHook preUnpack;
+ if [ -z "${srcs:-}" ]; then
+ if [ -z "${src:-}" ]; then
+ echo 'variable $src or $srcs should point to the source';
+ exit 1;
+ fi;
+ srcs="$src";
+ fi;
+ local -a srcsArray;
+ concatTo srcsArray srcs;
+ local dirsBefore="";
+ for i in *;
+ do
+ if [ -d "$i" ]; then
+ dirsBefore="$dirsBefore $i ";
+ fi;
+ done;
+ for i in "${srcsArray[@]}";
+ do
+ unpackFile "$i";
+ done;
+ : "${sourceRoot=}";
+ if [ -n "${setSourceRoot:-}" ]; then
+ runOneHook setSourceRoot;
+ else
+ if [ -z "$sourceRoot" ]; then
+ for i in *;
+ do
+ if [ -d "$i" ]; then
+ case $dirsBefore in
+ *\ $i\ *)
+
+ ;;
+ *)
+ if [ -n "$sourceRoot" ]; then
+ echo "unpacker produced multiple directories";
+ exit 1;
+ fi;
+ sourceRoot="$i"
+ ;;
+ esac;
+ fi;
+ done;
+ fi;
+ fi;
+ if [ -z "$sourceRoot" ]; then
+ echo "unpacker appears to have produced no directories";
+ exit 1;
+ fi;
+ echo "source root is $sourceRoot";
+ if [ "${dontMakeSourcesWritable:-0}" != 1 ]; then
+ chmod -R u+w -- "$sourceRoot";
+ fi;
+ runHook postUnpack
+}
+updateAutotoolsGnuConfigScriptsPhase ()
+{
+
+ if [ -n "${dontUpdateAutotoolsGnuConfigScripts-}" ]; then
+ return;
+ fi;
+ for script in config.sub config.guess;
+ do
+ for f in $(find . -type f -name "$script");
+ do
+ echo "Updating Autotools / GNU config script to a newer upstream version: $f";
+ cp -f "/nix/store/rzdjxxf4jkv3qdsjxkg54fxbma5zr05k-gnu-config-2024-01-01/$script" "$f";
+ done;
+ done
+}
+updateSourceDateEpoch ()
+{
+
+ local path="$1";
+ [[ $path == -* ]] && path="./$path";
+ 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));
+ local time="${res[0]//\.[0-9]*/}";
+ local newestFile="${res[1]}";
+ if [ "${time:-0}" -gt "$SOURCE_DATE_EPOCH" ]; then
+ echo "setting SOURCE_DATE_EPOCH to timestamp $time of file $newestFile";
+ export SOURCE_DATE_EPOCH="$time";
+ local now="$(date +%s)";
+ if [ "$time" -gt $((now - 60)) ]; then
+ echo "warning: file $newestFile may be generated; SOURCE_DATE_EPOCH may be non-deterministic";
+ fi;
+ fi
+}
+PATH="$PATH${nix_saved_PATH:+:$nix_saved_PATH}"
+XDG_DATA_DIRS="$XDG_DATA_DIRS${nix_saved_XDG_DATA_DIRS:+:$nix_saved_XDG_DATA_DIRS}"
+export NIX_BUILD_TOP="$(mktemp -d -t nix-shell.XXXXXX)"
+export TMP="$NIX_BUILD_TOP"
+export TMPDIR="$NIX_BUILD_TOP"
+export TEMP="$NIX_BUILD_TOP"
+export TEMPDIR="$NIX_BUILD_TOP"
+eval "${shellHook:-}"
diff --git a/pkgs/custom-neovim/.envrc b/pkgs/custom-neovim/.envrc
new file mode 100644
index 0000000..3550a30
--- /dev/null
+++ b/pkgs/custom-neovim/.envrc
@@ -0,0 +1 @@
+use flake
diff --git a/pkgs/custom-neovim/flake.lock b/pkgs/custom-neovim/flake.lock
new file mode 100644
index 0000000..4ad3238
--- /dev/null
+++ b/pkgs/custom-neovim/flake.lock
@@ -0,0 +1,64 @@
+{
+ "nodes": {
+ "flake-utils": {
+ "inputs": {
+ "systems": [
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1731533236,
+ "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1749401433,
+ "narHash": "sha256-HXIQzULIG/MEUW2Q/Ss47oE3QrjxvpUX7gUl4Xp6lnc=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "08fcb0dcb59df0344652b38ea6326a2d8271baff",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "flake-utils": "flake-utils",
+ "nixpkgs": "nixpkgs",
+ "systems": "systems"
+ }
+ },
+ "systems": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/pkgs/custom-neovim/flake.nix b/pkgs/custom-neovim/flake.nix
new file mode 100644
index 0000000..4bab14a
--- /dev/null
+++ b/pkgs/custom-neovim/flake.nix
@@ -0,0 +1,29 @@
+{
+ description = "Project flake";
+
+ inputs = {
+ nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
+ systems.url = "github:nix-systems/default";
+ flake-utils = {
+ url = "github:numtide/flake-utils";
+ inputs.systems.follows = "systems";
+ };
+ };
+
+ outputs = {
+ nixpkgs,
+ flake-utils,
+ ...
+ }:
+ flake-utils.lib.eachDefaultSystem (
+ system: let
+ pkgs = nixpkgs.legacyPackages.${system};
+ in {
+ devShells.default = pkgs.mkShell {
+ packages = with pkgs; [
+ hello
+ ];
+ };
+ }
+ );
+}
diff --git a/pkgs/default.nix b/pkgs/default.nix
new file mode 100644
index 0000000..da0ee49
--- /dev/null
+++ b/pkgs/default.nix
@@ -0,0 +1,9 @@
+{
+ pkgs,
+ inputs,
+ ...
+}: {
+ custom-hello = pkgs.callPackage ./custom-hello.nix {};
+ custom-neovim = pkgs.callPackage ./custom-neovim {inherit inputs;};
+ setup-manager = pkgs.callPackage ./setup-manager {};
+}
diff --git a/pkgs/old-neovim/config/init.lua b/pkgs/old-neovim/config/init.lua
new file mode 100644
index 0000000..f77e9f8
--- /dev/null
+++ b/pkgs/old-neovim/config/init.lua
@@ -0,0 +1,24 @@
+-- Require extra config files
+require('options')
+require('mappings')
+-- require('autocommands')
+
+-- Require plugins
+require('plugins.mini-deps')
+
+require('plugins.mini-clue')
+require('plugins.mini-comment')
+require('plugins.mini-icons')
+require('plugins.mini-notify')
+require('plugins.mini-pick')
+require('plugins.mini-sessions')
+require('plugins.mini-starter')
+require('plugins.mini-statusline')
+require('plugins.mini-completion')
+require('plugins.mini-snippets')
+
+require('plugins.tabby')
+require('plugins.actions-preview')
+require('plugins.lspconfig')
+
+require('plugins.presence')
diff --git a/pkgs/old-neovim/config/lua/autocommands.lua b/pkgs/old-neovim/config/lua/autocommands.lua
new file mode 100644
index 0000000..85a58c6
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/autocommands.lua
@@ -0,0 +1,36 @@
+-- Autocommands
+
+-- Use relative line number in normal mode and absolute in insert mode
+vim.opt.number = true
+local numbertoggle = vim.api.nvim_create_augroup("numbertoggle", {})
+vim.api.nvim_create_autocmd(
+ { "BufEnter", "FocusGained", "InsertLeave", "WinEnter", "CmdlineLeave" },
+ {
+ group = numbertoggle,
+ callback = function()
+ if vim.opt.number and vim.api.nvim_get_mode() ~= "i" then
+ vim.opt.relativenumber = true
+ end
+ end,
+ }
+)
+
+vim.api.nvim_create_autocmd(
+ { "BufLeave", "FocusLost", "InsertEnter", "WinLeave", "CmdlineEnter" },
+ {
+ group = numbertoggle,
+ callback = function()
+ if vim.opt.number then
+ vim.opt.relativenumber = false
+ vim.cmd("redraw")
+ end
+ end,
+ }
+)
+
+ -- start terminal in insert mode
+vim.api.nvim_create_autocmd("TermOpen", {
+ callback = function()
+ vim.cmd "startinsert!"
+ end,
+})
diff --git a/pkgs/old-neovim/config/lua/mappings.lua b/pkgs/old-neovim/config/lua/mappings.lua
new file mode 100644
index 0000000..e957d53
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/mappings.lua
@@ -0,0 +1,29 @@
+-- Keymap function.
+local keymap = function(mode, key, desc, action)
+ vim.keymap.set(mode, key, action, {noremap = true, silent = true, desc = desc})
+end
+
+-- Map the leader key.
+vim.g.mapleader = ' '
+
+vim.keymap.set("n", "<C-c>", "gcc", {noremap = true, silent = true})
+
+-- Pickers
+keymap("n", "<leader>f", "Open file picker", ":Pick files<cr>")
+keymap("n", "<leader>c", "Open recent file picker", ":Pick oldfiles<cr>")
+keymap("n", "<leader>e", "Open file explorer", ":Pick explorer<cr>")
+keymap("n", "<leader>b", "Open buffer picker", ":Pick buffers<cr>")
+keymap("n", "<leader>/", "Open live grep picker", ":Pick grep_live<cr>")
+keymap("n", "<leader>\\", "Open command palette", ":Pick commands<cr>")
+keymap("n", "<leader>?", "Open help picker", ":Pick help<cr>")
+keymap("n", "<leader>'", "Open last picker", ":Pick resume<cr>")
+
+-- Tabs
+keymap("n", "<leader>t", "Manage tabs", "")
+keymap("n", "<leader>tt", "Open new tab", ":tabnew<cr>")
+keymap("n", "<leader>tq", "Close tab", ":tabclose<cr>")
+keymap("n", "<leader>tn", "Go to next tab", ":tabnext<cr>")
+keymap("n", "<leader>tp", "Go to previous tab", ":tabprev<cr>")
+
+-- QOL Keys
+keymap("t", "<Esc><Esc>", "Exit terminal insert mode", "<C-\\><C-n>")
diff --git a/pkgs/old-neovim/config/lua/options.lua b/pkgs/old-neovim/config/lua/options.lua
new file mode 100644
index 0000000..c67dcc2
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/options.lua
@@ -0,0 +1,70 @@
+-- General Settings
+vim.o.winborder = 'rounded'
+vim.o.showmode = false
+vim.o.icm = 'split'
+vim.o.cia = 'abbr,kind,menu'
+vim.o.mouse = "" -- allow the mouse to be used in neovim
+vim.o.number = true -- set numbered lines
+vim.o.scrolloff = 4 -- minimal number of screen lines to keep above and below the cursor
+vim.o.signcolumn = "yes" -- always show the sign column, otherwise it would shift the text each time
+vim.o.splitbelow = true -- open new split below
+vim.o.splitright = true -- open new split to the right
+vim.o.wrap = true -- display a wrapped line
+vim.o.clipboard = "unnamedplus" -- use system clipboard
+vim.o.sessionoptions = 'curdir,folds,globals,help,tabpages,terminal,winsize' -- Things to save with the session.
+vim.keymap.set("c", "<cr>", function()
+ if vim.fn.pumvisible() == 1 then return '<c-y>' end
+ return '<cr>'
+end, { expr = true }) -- Make enter complete command.
+
+-- Indention
+local indent = 2
+vim.o.autoindent = true -- auto indentation
+vim.o.expandtab = true -- convert tabs to spaces
+vim.o.shiftwidth = indent -- the number of spaces inserted for each indentation
+vim.o.smartindent = true -- make indenting smarter
+vim.o.softtabstop = indent -- when hitting <BS>, pretend like a tab is removed, even if spaces
+vim.o.tabstop = indent -- insert 2 spaces for a tab
+vim.o.shiftround = true -- use multiple of shiftwidth when indenting with "<" and ">"
+
+-- Backups
+vim.o.backup = false -- create a backup file
+vim.o.swapfile = false -- creates a swapfile
+vim.o.writebackup = false -- if a file is being edited by another program, it is not allowed to be edited
+
+-- Search
+vim.o.hlsearch = true -- highlight all matches on previous search pattern
+vim.o.ignorecase = true -- ignore case in search patterns
+vim.o.smartcase = true -- smart case
+
+-- Folding
+vim.o.foldmethod = "expr"
+vim.o.foldexpr = "v:lua.vim.treesitter.foldexpr()" -- Set folder to treesitter.
+vim.o.foldlevel = 99 -- Don't fold initially.
+vim.o.foldnestmax = 4 -- Don't fold if more than 4 folds deep.
+vim.o.foldtext = "" -- Color text in folds.
+
+-- Set Colorscheme
+vim.cmd.colorscheme("oxocarbon")
+vim.o.termguicolors = true
+
+-- Neovide
+if vim.g.neovide then
+ vim.o.guifont = "CodeNewRoman Nerd Font:h12"
+ vim.g.neovide_scale_factor = 0.8
+
+ -- Zoom keymaps.
+ local change_scale_factor = function(delta)
+ vim.g.neovide_scale_factor = vim.g.neovide_scale_factor * delta
+ end
+ vim.keymap.set("n", "<C-=>", function()
+ change_scale_factor(1.1)
+ end)
+ vim.keymap.set("n", "<C-->", function()
+ change_scale_factor(1/1.1)
+ end)
+
+ -- Standard terminal emulator keymaps.
+ vim.api.nvim_set_keymap("c", "<sc-v>", "<C-R>+", { noremap = true }) -- Paste in command mode.
+ vim.api.nvim_set_keymap('t', '<sc-v>', '<C-\\><C-n>"+Pi', {noremap = true}) -- Paste in terminal mode.
+end
diff --git a/pkgs/old-neovim/config/lua/plugins/actions-preview.lua b/pkgs/old-neovim/config/lua/plugins/actions-preview.lua
new file mode 100644
index 0000000..9f3976b
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/plugins/actions-preview.lua
@@ -0,0 +1 @@
+require('actions-preview').setup()
diff --git a/pkgs/old-neovim/config/lua/plugins/lspconfig.lua b/pkgs/old-neovim/config/lua/plugins/lspconfig.lua
new file mode 100644
index 0000000..98b34f2
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/plugins/lspconfig.lua
@@ -0,0 +1,91 @@
+-- vim.keymap.set('n', '<space>d', vim.diagnostic.setloclist, {desc = "Add buffer diagnostics to the location list."})
+
+-- Disable semantic tokens to stop weird highlighting.
+vim.api.nvim_create_autocmd('LspAttach', {
+ callback = function(ev)
+ local client = vim.lsp.get_client_by_id(ev.data.client_id)
+ if client then
+ client.server_capabilities.semanticTokensProvider = nil
+ end
+ end
+})
+
+-- Use LspAttach autocommand to only map the following keys
+-- after the language server attaches to the current buffer
+vim.api.nvim_create_autocmd('LspAttach', {
+ group = vim.api.nvim_create_augroup('UserLspConfig', {}),
+ callback = function(ev)
+ -- Enable completion triggered by <c-x><c-o>
+ vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'
+
+ -- Buffer local mappings.
+ -- See `:help vim.lsp.*` for documentation on any of the below functions
+
+ local keymap = function(mode, key, desc, action)
+ vim.keymap.set(mode, key, action, {noremap = true, silent = true, desc = desc})
+ end
+
+ keymap('n', 'gD', "Go to declaration", vim.lsp.buf.declaration)
+ keymap('n', 'gd', "Go to definition", vim.lsp.buf.definition)
+ keymap('n', 'gy', "Go to type definition", vim.lsp.buf.type_definition)
+ keymap('n', 'gi', "Go to implementation", vim.lsp.buf.implementation)
+ keymap('n', '<M-k>', "Signature Help", vim.lsp.buf.signature_help)
+ keymap('i', '<M-k>', "Signature Help", vim.lsp.buf.signature_help)
+ keymap('n', "<space>o", "Manage LSP workspace", "")
+ keymap('n', '<space>oa', "Add Workspace Folder", vim.lsp.buf.add_workspace_folder)
+ keymap('n', '<space>or', "Remove Workspace Folder", vim.lsp.buf.remove_workspace_folder)
+ keymap('n', '<space>ol', "List Workspace Folders", function()
+ print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
+ end)
+ keymap('n', '<space>r', "Rename Symbol", vim.lsp.buf.rename)
+ keymap("n", "<leader>s", "Open symbol picker", [[:Pick lsp scope="document_symbol"<cr>]])
+ keymap("n", "<leader>S", "Open workspace symbol picker", [[:Pick lsp scope="workspace_symbol"<cr>]])
+
+ -- LSP Pickers
+ keymap({'n', 'v'}, "<leader>a", "Perform code action", require("actions-preview").code_actions)
+ keymap("n", "<leader>D", "Open workspace diagnostic picker", ":Pick diagnostic<cr>")
+ keymap("n", "<leader>d", "Open diagnostic picker", [[:Pick diagnostic scope="current"<cr>]])
+
+ keymap('n', 'gr', "Buffer References", vim.lsp.buf.references)
+ keymap('n', '<localleader>f', "Format Buffer", function()
+ vim.lsp.buf.format { async = true }
+ end)
+ end,
+})
+
+local lspconfig = require('lspconfig')
+
+-- Configure individual lsps
+lspconfig.nil_ls.setup {}
+lspconfig.lua_ls.setup {
+ on_init = function(client)
+ local path = client.workspace_folders[1].name
+ if vim.loop.fs_stat(path..'/.luarc.json') or vim.loop.fs_stat(path..'/.luarc.jsonc') then
+ return
+ end
+
+ client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, {
+ runtime = {
+ -- Tell the language server which version of Lua you're using
+ -- (most likely LuaJIT in the case of Neovim)
+ version = 'LuaJIT'
+ },
+ -- Make the server aware of Neovim runtime files
+ workspace = {
+ checkThirdParty = false,
+ library = {
+ vim.env.VIMRUNTIME,
+ -- Depending on the usage, you might want to add additional paths here.
+ "${3rd}/luv/library"
+ -- "${3rd}/busted/library",
+ }
+ -- or pull in all of 'runtimepath'. NOTE: this is a lot slower
+ -- library = vim.api.nvim_get_runtime_file("", true)
+ }
+ })
+ end,
+ settings = {
+ Lua = {}
+ }
+}
+lspconfig.marksman.setup {}
diff --git a/pkgs/old-neovim/config/lua/plugins/mini-clue.lua b/pkgs/old-neovim/config/lua/plugins/mini-clue.lua
new file mode 100644
index 0000000..dbfba5e
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/plugins/mini-clue.lua
@@ -0,0 +1,51 @@
+local miniclue = require('mini.clue')
+miniclue.setup({
+ window = {
+ delay = 0,
+ config = {
+ width = 'auto',
+ -- border = 'double',
+ },
+ },
+ triggers = {
+ -- Leader triggers
+ { mode = 'n', keys = '<Leader>' },
+ { mode = 'x', keys = '<Leader>' },
+
+ -- Built-in completion
+ { mode = 'i', keys = '<C-x>' },
+
+ -- `g` key
+ { mode = 'n', keys = 'g' },
+ { mode = 'x', keys = 'g' },
+
+ -- Marks
+ { mode = 'n', keys = "'" },
+ { mode = 'n', keys = '`' },
+ { mode = 'x', keys = "'" },
+ { mode = 'x', keys = '`' },
+
+ -- Registers
+ { mode = 'n', keys = '"' },
+ { mode = 'x', keys = '"' },
+ { mode = 'i', keys = '<C-r>' },
+ { mode = 'c', keys = '<C-r>' },
+
+ -- Window commands
+ { mode = 'n', keys = '<C-w>' },
+
+ -- `z` key
+ { mode = 'n', keys = 'z' },
+ { mode = 'x', keys = 'z' },
+ },
+
+ clues = {
+ -- Enhance this by adding descriptions for <Leader> mapping groups
+ miniclue.gen_clues.builtin_completion(),
+ miniclue.gen_clues.g(),
+ miniclue.gen_clues.marks(),
+ miniclue.gen_clues.registers(),
+ miniclue.gen_clues.windows(),
+ miniclue.gen_clues.z(),
+ },
+})
diff --git a/pkgs/old-neovim/config/lua/plugins/mini-comment.lua b/pkgs/old-neovim/config/lua/plugins/mini-comment.lua
new file mode 100644
index 0000000..1a2a369
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/plugins/mini-comment.lua
@@ -0,0 +1 @@
+require("mini.comment").setup()
diff --git a/pkgs/old-neovim/config/lua/plugins/mini-completion.lua b/pkgs/old-neovim/config/lua/plugins/mini-completion.lua
new file mode 100644
index 0000000..ebfd62b
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/plugins/mini-completion.lua
@@ -0,0 +1 @@
+require('mini.completion').setup()
diff --git a/pkgs/old-neovim/config/lua/plugins/mini-deps.lua b/pkgs/old-neovim/config/lua/plugins/mini-deps.lua
new file mode 100644
index 0000000..1109d59
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/plugins/mini-deps.lua
@@ -0,0 +1,8 @@
+if (mnw ~= nil) then
+ require("mini.deps").setup()
+end
+AddPlugin = function(plugin)
+ if (mnw ~= nil) then
+ MiniDeps.add(plugin)
+ end
+end
diff --git a/pkgs/old-neovim/config/lua/plugins/mini-icons.lua b/pkgs/old-neovim/config/lua/plugins/mini-icons.lua
new file mode 100644
index 0000000..3c5a927
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/plugins/mini-icons.lua
@@ -0,0 +1 @@
+require('mini.icons').setup()
diff --git a/pkgs/old-neovim/config/lua/plugins/mini-notify.lua b/pkgs/old-neovim/config/lua/plugins/mini-notify.lua
new file mode 100644
index 0000000..cd516af
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/plugins/mini-notify.lua
@@ -0,0 +1 @@
+require('mini.notify').setup()
diff --git a/pkgs/old-neovim/config/lua/plugins/mini-pick.lua b/pkgs/old-neovim/config/lua/plugins/mini-pick.lua
new file mode 100644
index 0000000..de6c7ec
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/plugins/mini-pick.lua
@@ -0,0 +1,24 @@
+local win_config = function()
+ local height = math.floor(0.5 * vim.o.lines)
+ local width = math.floor(0.618 * vim.o.columns)
+ return {
+ anchor = 'NW', height = height, width = width,
+ row = math.floor(0.5 * (vim.o.lines - height)),
+ col = math.floor(0.5 * (vim.o.columns - width)),
+ }
+end
+
+require('mini.pick').setup({
+ options = {
+ content_from_bottom = true,
+ use_cache = true,
+ },
+ window = {
+ config = win_config,
+ },
+ -- delay = {
+ -- async = 1,
+ -- busy = 1,
+ -- },
+})
+require('mini.extra').setup()
diff --git a/pkgs/old-neovim/config/lua/plugins/mini-sessions.lua b/pkgs/old-neovim/config/lua/plugins/mini-sessions.lua
new file mode 100644
index 0000000..fe1a843
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/plugins/mini-sessions.lua
@@ -0,0 +1,31 @@
+require('mini.sessions').setup()
+local save_session = function()
+ vim.ui.input({ prompt = "Session to save: " }, function(input)
+ if (input == nil) then
+ return
+ end
+ MiniSessions.write(input)
+ vim.cmd("echon ' '")
+ print("Session created: " .. input)
+ if vim.bo.filetype == 'ministarter' then
+ MiniStarter.refresh()
+ end
+ end)
+end
+local delete_session = function()
+ vim.ui.input({ prompt = "Session to delete: " }, function(input)
+ if (input == nil) then
+ return
+ end
+ MiniSessions.delete(input)
+ vim.cmd("echon ' '")
+ print("Session deleted: " .. input)
+ if vim.bo.filetype == 'ministarter' then
+ MiniStarter.refresh()
+ end
+ end)
+end
+vim.keymap.set("n", "<leader>w", "", {desc = "Manage sessions"})
+vim.keymap.set("n", "<leader>ww", save_session, {desc = "Save the session"})
+vim.keymap.set("n", "<leader>wd", delete_session, {desc = "Delete a session"})
+vim.keymap.set("n", "<leader>wo", MiniSessions.select, {desc = "Open a session"})
diff --git a/pkgs/old-neovim/config/lua/plugins/mini-snippets.lua b/pkgs/old-neovim/config/lua/plugins/mini-snippets.lua
new file mode 100644
index 0000000..3a991eb
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/plugins/mini-snippets.lua
@@ -0,0 +1,10 @@
+local gen_loader = require('mini.snippets').gen_loader
+require('mini.snippets').setup({
+ snippets = {
+ -- gen_loader.from_file('~/.config/nvim/snippets/global.json'),
+
+ -- Load snippets based on current language by reading files from
+ -- "snippets/" subdirectories from 'runtimepath' directories.
+ gen_loader.from_lang(),
+ },
+})
diff --git a/pkgs/old-neovim/config/lua/plugins/mini-starter.lua b/pkgs/old-neovim/config/lua/plugins/mini-starter.lua
new file mode 100644
index 0000000..b39e7f1
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/plugins/mini-starter.lua
@@ -0,0 +1,17 @@
+local starter = require('mini.starter')
+starter.setup({
+ evaluate_single = true,
+ header = "",
+ footer = "",
+ items = {
+ starter.sections.builtin_actions(),
+ starter.sections.sessions(5, true),
+ starter.sections.recent_files(5, true),
+ },
+ content_hooks = {
+ starter.gen_hook.adding_bullet(),
+ starter.gen_hook.indexing('all', { 'Builtin actions' }),
+ starter.gen_hook.padding(3, 2),
+ starter.gen_hook.aligning('center', 'center'),
+ },
+})
diff --git a/pkgs/old-neovim/config/lua/plugins/mini-statusline.lua b/pkgs/old-neovim/config/lua/plugins/mini-statusline.lua
new file mode 100644
index 0000000..4bdfd80
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/plugins/mini-statusline.lua
@@ -0,0 +1 @@
+require('mini.statusline').setup()
diff --git a/pkgs/old-neovim/config/lua/plugins/presence.lua b/pkgs/old-neovim/config/lua/plugins/presence.lua
new file mode 100644
index 0000000..7ffb57f
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/plugins/presence.lua
@@ -0,0 +1,3 @@
+require('presence').setup({
+ neovim_image_text = "Neovim Text Editor",
+})
diff --git a/pkgs/old-neovim/config/lua/plugins/tabby.lua b/pkgs/old-neovim/config/lua/plugins/tabby.lua
new file mode 100644
index 0000000..2ad03ed
--- /dev/null
+++ b/pkgs/old-neovim/config/lua/plugins/tabby.lua
@@ -0,0 +1,2 @@
+vim.o.showtabline = 1
+require('tabby').setup()
diff --git a/pkgs/old-neovim/default.nix b/pkgs/old-neovim/default.nix
new file mode 100644
index 0000000..97a23df
--- /dev/null
+++ b/pkgs/old-neovim/default.nix
@@ -0,0 +1,48 @@
+{
+ pkgs,
+ inputs,
+}:
+inputs.mnw.lib.wrap pkgs {
+ neovim = pkgs.neovim-unwrapped;
+
+ plugins = with pkgs.vimPlugins; {
+ dev.config.pure = ./config;
+ start = [
+ # Core Plugins
+ mini-nvim # Ton of small modules.
+ nvim-lspconfig # Adds lsp presets.
+ actions-preview-nvim # Adds a selector for LSP actions.
+ nvim-treesitter.withAllGrammars # All treesitter grammars.
+ tabby-nvim # Tab bar.
+ friendly-snippets # Extra snippets.
+ lazydev-nvim # Enhances the nvim config editing experience.
+
+ # Colorschemes
+ oxocarbon-nvim # IBM Carbon themes.
+ rose-pine # Rose Pine themes.
+ kanagawa-nvim # Kanagawa themes.
+ everforest # Green themes.
+ nordic-nvim # Warm dark nordic theme.
+
+ # Miscellaneous Plugins
+ presence-nvim # Discord RPC for nvim.
+ cellular-automaton-nvim # Fun useless plugin.
+ ];
+ opt = [];
+ };
+
+ luaFiles = [./config/init.lua];
+
+ extraBinPath = with pkgs; [
+ # LSP Servers
+ lua-language-server # Lua LS
+ nil # Nix LS
+ marksman # Markdown LS
+
+ # Formatters
+ alejandra # Nix Formatter
+
+ # Extra Tools
+ ripgrep
+ ];
+}
diff --git a/pkgs/old-neovim/plan.md b/pkgs/old-neovim/plan.md
new file mode 100644
index 0000000..ade9664
--- /dev/null
+++ b/pkgs/old-neovim/plan.md
@@ -0,0 +1,29 @@
+# Neovim Plan
+
+## Plugins
+
+### Main Plugins
+
+- Statusline: mini-statusline
+- Tabline: mini-tabline
+- Hints: mini-hints
+- File Editor: oil.nvim
+- Fuzzy Finder: telescope
+
+### Other Plugins
+
+- other mini plugins
+
+## Settings
+
+- tabstop 2
+- helix-like keybinds
+
+## Todo
+
+- add mini git support
+- add console clear autocommand
+- make alt key turn hjkl into arrow keys
+- set keys for scrolling in mini.clue
+- configure tabby
+- add AI chat
diff --git a/pkgs/setup-manager/default.nix b/pkgs/setup-manager/default.nix
new file mode 100644
index 0000000..2d0f08c
--- /dev/null
+++ b/pkgs/setup-manager/default.nix
@@ -0,0 +1,17 @@
+{
+ pkgs,
+ lib,
+}: let
+ path = with pkgs; [
+ nvd
+ nix-output-monitor
+ ];
+in
+ pkgs.writers.writeNuBin "setup" {
+ makeWrapperArgs = [
+ "--prefix"
+ "PATH"
+ ":"
+ "${lib.makeBinPath path}"
+ ];
+ } (builtins.readFile ./setup.nu)
diff --git a/pkgs/setup-manager/setup.nu b/pkgs/setup-manager/setup.nu
new file mode 100644
index 0000000..46ab637
--- /dev/null
+++ b/pkgs/setup-manager/setup.nu
@@ -0,0 +1,55 @@
+# Aims of this program:
+#
+# Subcommands:
+# - sync system {system name?}: rebuild system
+# - sync user {home name?}: rebuild home
+# - sync all {system @ home name?}: rebuild home and system
+# - update: update the flake
+# - vm {system name}: create and run a test vm
+# - repl: open a nix repl with flake inputs
+# - gc {what to remove?}: collect garbage
+
+# Settings
+let flake_dir = "~/Sync/setup/" | path expand
+
+def "main" [] {}
+
+# +-------------------------+
+# | Syncronization Commands |
+# +-------------------------+
+
+# Syncronize the system with its config.
+def "main sync system" [
+ sys?: string # The name of the system config to syncronize.
+] {
+ if ($sys == null) {let sys = (hostname)}
+ sudo nixos-rebuild switch --flake $"($flake_dir)#($sys)"
+}
+
+# Syncronize the userland with its config.
+def "main sync user" [
+ usr?: string # The name of the user config to syncronize.
+] {}
+
+# Syncronize both the system and the userland with their configs.
+def "main sync all" [
+ usr_sys?: string # The name of the user and system configs to syncronize. In the format "user@system".
+] {}
+
+# +----------------+
+# | Other Commands |
+# +----------------+
+
+# Update the flake lock file according to its inputs.
+def "main update" [] {}
+
+# Create and run a test VM based on a system config.
+def "main vm" [
+ sys: string # The system config to base the VM on.
+] {}
+
+# Open a nix REPL including flake inputs.
+def "main repl" [] {}
+
+# Garbage collect the system.
+def "main gc" [] {}