├── .gitattributes ├── .github └── workflows │ └── build_radioconda.yml ├── .gitignore ├── LICENSE ├── README.md ├── build_installer.py ├── build_metapackage.py ├── buildenv.yaml ├── constructor ├── installer_specs ├── buildenv.conda-lock.yml ├── radioconda-linux-64.lock ├── radioconda-linux-64.yml ├── radioconda-linux-64 │ ├── LICENSE │ ├── construct.yaml │ └── post_install.sh ├── radioconda-linux-aarch64.lock ├── radioconda-linux-aarch64.yml ├── radioconda-linux-aarch64 │ ├── LICENSE │ ├── construct.yaml │ └── post_install.sh ├── radioconda-linux-ppc64le.lock ├── radioconda-linux-ppc64le.yml ├── radioconda-linux-ppc64le │ ├── LICENSE │ ├── construct.yaml │ └── post_install.sh ├── radioconda-osx-64.lock ├── radioconda-osx-64.yml ├── radioconda-osx-64 │ ├── LICENSE │ ├── construct.yaml │ ├── post_install.sh │ └── welcome.png ├── radioconda-osx-arm64.lock ├── radioconda-osx-arm64.yml ├── radioconda-osx-arm64 │ ├── LICENSE │ ├── construct.yaml │ ├── post_install.sh │ └── welcome.png ├── radioconda-win-64.lock ├── radioconda-win-64.yml └── radioconda-win-64 │ ├── LICENSE │ ├── construct.yaml │ ├── header.png │ ├── icon.png │ ├── main.nsi.tmpl │ ├── post_install.bat │ └── welcome.png ├── radioconda.yaml ├── radioconda_installer.yaml ├── rerender.py └── static ├── radioconda_logo.png └── radioconda_logo_web.png /.gitattributes: -------------------------------------------------------------------------------- 1 | # github helper pieces to make some files not show up in diffs automatically 2 | installer_specs/*.lock linguist-generated=true 3 | # SCM syntax highlighting & preventing 3-way merges 4 | pixi.lock merge=binary linguist-language=YAML linguist-generated=true 5 | -------------------------------------------------------------------------------- /.github/workflows/build_radioconda.yml: -------------------------------------------------------------------------------- 1 | name: Build radioconda 2 | on: 3 | push: 4 | paths: 5 | - "installer_specs/**" 6 | pull_request: 7 | paths: 8 | - "installer_specs/**" 9 | workflow_dispatch: 10 | 11 | env: 12 | DISTNAME: radioconda 13 | LICENSE_ID: BSD-3-Clause 14 | METAPACKAGE_LABEL: main 15 | METAPACKAGE_SUMMARY: Metapackage to install the radioconda package set. 16 | 17 | jobs: 18 | build: 19 | name: ${{ matrix.PLATFORM }} 20 | runs-on: ${{ matrix.os }} 21 | strategy: 22 | fail-fast: false 23 | matrix: 24 | include: 25 | - os: ubuntu-latest 26 | PLATFORM: linux-64 27 | OS_NAME: Linux 28 | ARCH: x86_64 29 | - os: ubuntu-latest 30 | PLATFORM: linux-aarch64 31 | OS_NAME: Linux 32 | ARCH: aarch64 33 | EMU_ARCH: aarch64 34 | EMU_DISTRO: ubuntu_latest 35 | - os: ubuntu-latest 36 | PLATFORM: linux-ppc64le 37 | OS_NAME: Linux 38 | ARCH: ppc64le 39 | EMU_ARCH: ppc64le 40 | EMU_DISTRO: ubuntu_latest 41 | - os: macos-13 42 | PLATFORM: osx-64 43 | OS_NAME: MacOSX 44 | ARCH: x86_64 45 | - os: macos-latest 46 | PLATFORM: osx-arm64 47 | OS_NAME: MacOSX 48 | ARCH: arm64 49 | - os: windows-latest 50 | PLATFORM: win-64 51 | OS_NAME: Windows 52 | ARCH: x86_64 53 | 54 | steps: 55 | - name: Checkout repo 56 | uses: actions/checkout@v4 57 | 58 | - name: Install coreutils for macOS 59 | if: runner.os == 'macOS' 60 | run: brew install coreutils 61 | 62 | - name: Install python environment 63 | uses: mamba-org/setup-micromamba@v2 64 | with: 65 | environment-file: installer_specs/buildenv.conda-lock.yml 66 | environment-name: buildenv 67 | 68 | - name: Build installer 69 | shell: bash -l {0} 70 | env: 71 | PLATFORM: ${{ matrix.PLATFORM }} 72 | OS_NAME: ${{ matrix.OS_NAME }} 73 | run: | 74 | if [ "$OS_NAME" == "Windows" ]; then 75 | PATH=$CONDA_PREFIX/NSIS:$PATH 76 | fi 77 | python build_installer.py installer_specs/$DISTNAME-$PLATFORM -- -v 78 | 79 | - name: Build metapackage 80 | shell: bash -l {0} 81 | env: 82 | PLATFORM: ${{ matrix.PLATFORM }} 83 | run: | 84 | python build_metapackage.py installer_specs/$DISTNAME-$PLATFORM.yml 85 | 86 | - name: Copy lock file and list built installers and packages 87 | shell: bash 88 | env: 89 | PLATFORM: ${{ matrix.PLATFORM }} 90 | run: | 91 | cp installer_specs/$DISTNAME-$PLATFORM.lock dist/ 92 | ls -lhR dist 93 | 94 | - name: Test installer (sh native) 95 | if: (contains(matrix.OS_NAME, 'Linux') || contains(matrix.OS_NAME, 'MacOSX')) && matrix.EMU_ARCH == null 96 | shell: bash 97 | env: 98 | OS_NAME: ${{ matrix.OS_NAME }} 99 | ARCH: ${{ matrix.ARCH }} 100 | INSTALL_PATH: ${{ github.workspace }}/test_installation 101 | run: | 102 | unset CONDARC 103 | bash dist/$DISTNAME-*-$OS_NAME-$ARCH.sh -b -p $INSTALL_PATH 104 | eval "$($INSTALL_PATH/bin/conda shell.bash hook)" 105 | conda info 106 | conda list 107 | 108 | - name: Test installer (sh emulated) 109 | if: (contains(matrix.OS_NAME, 'Linux') || contains(matrix.OS_NAME, 'MacOSX')) && matrix.EMU_ARCH != null 110 | uses: uraimo/run-on-arch-action@v2 111 | with: 112 | arch: ${{ matrix.EMU_ARCH }} 113 | distro: ${{ matrix.EMU_DISTRO }} 114 | dockerRunArgs: --volume "${PWD}:/workdir" 115 | env: | 116 | DISTNAME: ${{ env.DISTNAME }} 117 | OS_NAME: ${{ matrix.OS_NAME }} 118 | ARCH: ${{ matrix.ARCH }} 119 | INSTALL_PATH: /workdir/test_installation 120 | run: | 121 | bash dist/$DISTNAME-*-$OS_NAME-$ARCH.sh -b -p $INSTALL_PATH 122 | eval "$($INSTALL_PATH/bin/conda shell.bash hook)" 123 | conda info 124 | conda list 125 | 126 | - name: Test installer (pkg) 127 | if: contains(matrix.OS_NAME, 'MacOSX') 128 | shell: bash 129 | env: 130 | OS_NAME: ${{ matrix.OS_NAME }} 131 | ARCH: ${{ matrix.ARCH }} 132 | TARGET_VOLUME: CurrentUserHomeDirectory 133 | INSTALL_PATH: ${{ github.workspace }}/../../../${{ env.DISTNAME }} 134 | run: | 135 | cat >pkg-choices.xml < 137 | 138 | 139 | 140 | 141 | attributeSetting 142 | 0 143 | choiceAttribute 144 | selected 145 | choiceIdentifier 146 | io.continuum.pkg.pathupdate 147 | 148 | 149 | 150 | EOF 151 | installer -verbose -dumplog -applyChoiceChangesXML pkg-choices.xml -pkg dist/$DISTNAME-*-$OS_NAME-$ARCH.pkg -target $TARGET_VOLUME 152 | eval "$($INSTALL_PATH/bin/conda shell.bash hook)" 153 | conda info 154 | conda list 155 | 156 | - name: Test installer (exe) 157 | if: contains(matrix.OS_NAME, 'Windows') 158 | shell: bash 159 | env: 160 | OS_NAME: ${{ matrix.OS_NAME }} 161 | ARCH: ${{ matrix.ARCH }} 162 | INSTALL_PATH_W: ${{ github.workspace }}\test_installation 163 | run: | 164 | INSTALL_PATH=$(cygpath -u $INSTALL_PATH_W) 165 | INSTALLER_EXE="dist/$DISTNAME-*-$OS_NAME-$ARCH.exe" 166 | INSTALLER_EXE_W=$(cygpath -w $INSTALLER_EXE) 167 | echo "start /wait \"\" $INSTALLER_EXE_W /InstallationType=JustMe /RegisterPython=0 /S /D=$INSTALL_PATH_W" > install.bat 168 | cmd.exe //c install.bat 169 | eval "$($INSTALL_PATH/Scripts/conda.exe shell.bash hook)" 170 | conda info 171 | conda list 172 | 173 | - name: Calculate sha256 hash 174 | shell: bash 175 | env: 176 | OS_NAME: ${{ matrix.OS_NAME }} 177 | ARCH: ${{ matrix.ARCH }} 178 | run: | 179 | cd dist 180 | for INSTALLER_PATH in $DISTNAME-*-$OS_NAME-$ARCH.*; do 181 | HASH_PATH="$INSTALLER_PATH.sha256" 182 | sha256sum $INSTALLER_PATH > $HASH_PATH 183 | cat $HASH_PATH 184 | done 185 | 186 | - name: Upload to Github artifact 187 | if: ${{ (success() || failure()) && !startsWith(github.ref, 'refs/tags/') }} 188 | uses: actions/upload-artifact@v4 189 | with: 190 | path: dist/* 191 | name: ${{ matrix.OS_NAME }}-${{ matrix.ARCH }} 192 | 193 | - name: Upload to release 194 | if: startsWith(github.ref, 'refs/tags/') 195 | uses: svenstaro/upload-release-action@v2 196 | with: 197 | repo_token: ${{ secrets.GITHUB_TOKEN }} 198 | file: dist/* 199 | tag: ${{ github.ref }} 200 | overwrite: true 201 | file_glob: true 202 | 203 | - name: Upload metapackage to Anaconda.org 204 | if: startsWith(github.ref, 'refs/tags/') 205 | shell: bash -l {0} 206 | env: 207 | ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_API_TOKEN }} 208 | run: | 209 | micromamba --help 210 | anaconda upload -l $METAPACKAGE_LABEL --skip-existing dist/conda-bld/**/* 211 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | share/python-wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | MANIFEST 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .nox/ 43 | .coverage 44 | .coverage.* 45 | .cache 46 | nosetests.xml 47 | coverage.xml 48 | *.cover 49 | *.py,cover 50 | .hypothesis/ 51 | .pytest_cache/ 52 | cover/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | .pybuilder/ 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | # For a library or package, you might want to ignore these files since the code is 87 | # intended to run in multiple environments; otherwise, check them in: 88 | # .python-version 89 | 90 | # pipenv 91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 94 | # install all needed dependencies. 95 | #Pipfile.lock 96 | 97 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 98 | __pypackages__/ 99 | 100 | # Celery stuff 101 | celerybeat-schedule 102 | celerybeat.pid 103 | 104 | # SageMath parsed files 105 | *.sage.py 106 | 107 | # Environments 108 | .env 109 | .venv 110 | env/ 111 | venv/ 112 | ENV/ 113 | env.bak/ 114 | venv.bak/ 115 | 116 | # Spyder project settings 117 | .spyderproject 118 | .spyproject 119 | 120 | # Rope project settings 121 | .ropeproject 122 | 123 | # mkdocs documentation 124 | /site 125 | 126 | # mypy 127 | .mypy_cache/ 128 | .dmypy.json 129 | dmypy.json 130 | 131 | # Pyre type checker 132 | .pyre/ 133 | 134 | # pytype static type analyzer 135 | .pytype/ 136 | 137 | # Cython debug symbols 138 | cython_debug/ 139 | 140 | .vscode/ 141 | 142 | # pixi environments 143 | .pixi 144 | *.egg-info 145 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Radioconda installer code uses BSD-3-Clause license as stated below. 2 | Binary packages that come with radioconda have their own licensing terms 3 | and by installing radioconda you agree to the licensing terms of individual 4 | packages as well. These additional licenses can be found in the 5 | pkgs//info/licenses folder of your radioconda installation. 6 | 7 | ============================================================================= 8 | 9 | Copyright (c) 2021, Ryan Volz 10 | All rights reserved. 11 | 12 | Redistribution and use in source and binary forms, with or without 13 | modification, are permitted provided that the following conditions are met: 14 | 15 | 1. Redistributions of source code must retain the above copyright notice, this 16 | list of conditions and the following disclaimer. 17 | 18 | 2. Redistributions in binary form must reproduce the above copyright notice, 19 | this list of conditions and the following disclaimer in the documentation 20 | and/or other materials provided with the distribution. 21 | 22 | 3. Neither the name of the copyright holder nor the names of its contributors 23 | may be used to endorse or promote products derived from this software without 24 | specific prior written permission. 25 | 26 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 27 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 28 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 29 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 30 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 32 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 33 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 34 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 35 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ![radioconda](static/radioconda_logo_web.png) 2 | 3 | This repository holds cross-platform installers for a collection of open source **software radio** packages bundled with the [conda](https://conda.io/) package manager, including 4 | 5 | - Digital RF 6 | - GNU Radio (including an increasing list of out-of-tree modules) 7 | - gqrx 8 | - inspectrum 9 | 10 | and support for the following SDR devices and device libraries: 11 | 12 | | Device | Library | 13 | | :--------------------------------------: | :-------------------------------------------: | 14 | | [ADALM-PLUTO][1] | libiio ([setup](#iio-pluto-sdr)) | 15 | | [Airspy R2/Mini/HF+][2] | airspy/airspyhf ([setup](#airspy-r2-mini-hf)) | 16 | | [BladeRF][3] | bladeRF ([setup](#bladerf)) | 17 | | [Ettus USRPs][4] | UHD ([setup](#uhd-ettus-usrp)) | 18 | | [Funcube Dongle Pro/Pro+][5] | SoapyFCDPP / gr-funcube | 19 | | [HackRF][6] | HackRF ([setup](#hackrf)) | 20 | | [LimeSDR][7] | Lime Suite ([setup](#limesdr)) | 21 | | [Mirics MSi001 + MSi2500 SDR devices][8] | libmirisdr ([setup](#mirisdr)) | 22 | | [Red Pitaya][9] | SoapyRedPitaya | 23 | | [RFSpace/NetSDR/CloudSDR][10] | SoapyNetSDR | 24 | | [RTL-SDR][11] | rtl-sdr ([setup](#rtl-sdr)) | 25 | | Sound Card / Audio devices | SoapyAudio | 26 | 27 | [1]: https://www.analog.com/en/design-center/evaluation-hardware-and-software/evaluation-boards-kits/adalm-pluto.html 28 | [2]: https://airspy.com/ 29 | [3]: https://www.nuand.com/ 30 | [4]: https://www.ettus.com/products/ 31 | [5]: https://www.funcubedongle.com/ 32 | [6]: https://greatscottgadgets.com/hackrf/ 33 | [7]: https://limemicro.com/products/boards/ 34 | [8]: https://github.com/f4exb/libmirisdr-4 35 | [9]: https://redpitaya.com/ 36 | [10]: http://www.rfspace.com/RFSPACE/Home.html 37 | [11]: https://www.rtl-sdr.com/buy-rtl-sdr-dvb-t-dongles/ 38 | 39 | The complete list of packages can be found [here](https://github.com/ryanvolz/radioconda/blob/master/radioconda.yaml). You can [**suggest additional software to include**](https://github.com/ryanvolz/radioconda/issues) by filing an [issue](https://github.com/ryanvolz/radioconda/issues). If you've built additional software from source on top of radioconda, [**document your results**](https://github.com/ryanvolz/radioconda/issues) in an [issue](https://github.com/ryanvolz/radioconda/issues) to help others (and help me in packaging it!). 40 | 41 | Once installed, you will have a fully functional conda distribution/environment, meaning that you can use the `conda` or `mamba` commands to install additional packages (if available through [conda-forge](https://conda-forge.org/feedstock-outputs)) or upgrade to the latest versions. Think of radioconda as an alternative to [Anaconda](https://www.anaconda.com/products/individual) or [Miniforge](https://github.com/conda-forge/miniforge), but specialized for software radio. 42 | 43 | **NOTE:** Radioconda is built from packages maintained by the [conda-forge](https://conda-forge.org/) project. If you have questions or issues that are specific to the conda installation of a particular package, please report them at the corresponding [feedstock repository](https://github.com/conda-forge/feedstocks). 44 | 45 | ## Download 46 | 47 | Radioconda installers are available here: https://github.com/ryanvolz/radioconda/releases. 48 | 49 | | OS | Architecture | Installer Type | Download | 50 | | ------- | --------------------- | -------------- | -------------------------------------------------------------------------------------------------------------------- | 51 | | Linux | x86_64 (amd64) | Command-line | [radioconda-Linux-x86_64.sh](https://glare-sable.vercel.app/ryanvolz/radioconda/radioconda-.*-Linux-x86_64.sh) | 52 | | Linux | aarch64 (arm64) | Command-line | [radioconda-Linux-aarch64.sh](https://glare-sable.vercel.app/ryanvolz/radioconda/radioconda-.*-Linux-aarch64.sh) | 53 | | Linux | ppc64le (POWER8/9) | Command-line | [radioconda-Linux-ppc64le.sh](https://glare-sable.vercel.app/ryanvolz/radioconda/radioconda-.*-Linux-ppc64le.sh) | 54 | | macOS | x86_64 (Intel) | Command-line | [radioconda-MacOSX-x86_64.sh](https://glare-sable.vercel.app/ryanvolz/radioconda/radioconda-.*-MacOSX-x86_64.sh) | 55 | | macOS | x86_64 (Intel) | Graphical | [radioconda-MacOSX-x86_64.pkg](https://glare-sable.vercel.app/ryanvolz/radioconda/radioconda-.*-MacOSX-x86_64.pkg) | 56 | | macOS | arm64 (Apple Silicon) | Command-line | [radioconda-MacOSX-arm64.sh](https://glare-sable.vercel.app/ryanvolz/radioconda/radioconda-.*-MacOSX-arm64.sh) | 57 | | macOS | arm64 (Apple Silicon) | Graphical | [radioconda-MacOSX-arm64.pkg](https://glare-sable.vercel.app/ryanvolz/radioconda/radioconda-.*-MacOSX-arm64.pkg) | 58 | | Windows | x86_64 (amd64) | Graphical | [radioconda-Windows-x86_64.exe](https://glare-sable.vercel.app/ryanvolz/radioconda/radioconda-.*-Windows-x86_64.exe) | 59 | 60 | ## Install 61 | 62 | For a command line install, download the installer and run: 63 | 64 | bash radioconda-*-Linux-x86_64.sh # or similar for other installers for unix platforms 65 | 66 | For a graphical install, download the installer and double-click it. 67 | 68 | If you already have conda/mamba, you can skip the installer and create a new environment with all of the radioconda packages by running: 69 | 70 | conda create -n radioconda -c conda-forge -c ryanvolz --only-deps radioconda 71 | 72 | See [below](#additional-installation-for-device-support) for additional installation steps for particular software radio devices. 73 | 74 | ### Non-interactive install 75 | 76 | For non-interactive usage, look at the options by running the following: 77 | 78 | bash radioconda-*-Linux-x86_64.sh -h # or similar for other installers for unix platforms 79 | 80 | or if you are on Windows, run: 81 | 82 | start /wait "" build/radioconda--Windows-x86_64.exe /InstallationType=JustMe /RegisterPython=0 /S /D=%UserProfile%\radioconda 83 | 84 | ## Use 85 | 86 | You will mostly use radioconda through the command line, although on Windows some applications will install shortcuts to the Start menu. 87 | 88 | ### Windows 89 | 90 | Launch "radioconda Prompt" from the Start menu (you can find it under the "radioconda" directory). From this command line, you can run `mamba` to install/upgrade packages or run any of the applications installed with radioconda. Some applications can also be launched through shortcuts added to the Start menu. 91 | 92 | ### Linux and macOS 93 | 94 | Launch your favorite terminal. Depending on the options you chose while installing, you may or may not already have the radioconda "base" environment activated automatically (you will see "(base)" on your command line prompt). To otherwise activate the radioconda "base" environment, run: 95 | 96 | conda activate base 97 | 98 | If this fails because the `conda` command is not found, you can activate the environment manually by running 99 | 100 | sh /bin/activate 101 | 102 | From an activated environment, you will be able to run `mamba` to install/upgrade packages or run any of the applications installed with radioconda. 103 | 104 | ### Installing packages 105 | 106 | To install a particular package: 107 | 108 | mamba install 109 | 110 | ## Upgrade 111 | 112 | Once you have radioconda installed, you can stay up to date for all packages with: 113 | 114 | mamba upgrade --all 115 | 116 | ### Upgrade to latest release 117 | 118 | To install the latest release in particular, run 119 | 120 | (on Windows): 121 | 122 | mamba install --file https://github.com/ryanvolz/radioconda/releases/latest/download/radioconda-win-64.lock 123 | 124 | (on Linux/macOS): 125 | 126 | mamba install --file https://github.com/ryanvolz/radioconda/releases/latest/download/radioconda-$(conda info | sed -n -e 's/^.*platform : //p').lock 127 | 128 | ### Install a particular release 129 | 130 | To install a particular release version, substitute the desired version number and run 131 | 132 | (on Windows): 133 | 134 | mamba install --file https://github.com/ryanvolz/radioconda/releases/download/20NN.NN.NN/radioconda-win-64.lock 135 | 136 | (on Linux/macOS): 137 | 138 | mamba install --file https://github.com/ryanvolz/radioconda/releases/download/20NN.NN.NN/radioconda-$(conda info | sed -n -e 's/^.*platform : //p').lock 139 | 140 | ### Install from radioconda metapackage 141 | 142 | If you're starting with a fresh environment or are comfortable dealing with package conflicts, you can install the latest release using the `radioconda` metapackage from the `ryanvolz` channel: 143 | 144 | mamba install -c conda-forge -c ryanvolz --only-deps radioconda 145 | 146 | (It is necessary to specify the `conda-forge` channel first, even if it is your default channel, so that the `ryanvolz` channel does not take priority.) 147 | 148 | To install a particular release version, substitute the desired version number and run 149 | 150 | mamba install -c conda-forge -c ryanvolz --only-deps radioconda=20NN.NN.NN 151 | 152 | ## Additional Installation for Device Support 153 | 154 | To use particular software radio devices, it might be necessary to install additional drivers or firmware. Find your device below and follow the instructions. (Help add to this section by filing an issue if the instructions don't work or you have additional instructions to add!) 155 | 156 | ### RTL-SDR 157 | 158 | ##### Windows users 159 | 160 | [Install the WinUSB driver with Zadig](#installing-the-winusb-driver-with-zadig), selecting the device that is called "Bulk-In, Interface (Interface 0)". 161 | 162 | ##### Linux users 163 | 164 | Blacklist the DVB-T modules that would otherwise claim the device: 165 | 166 | sudo ln -s $CONDA_PREFIX/etc/modprobe.d/rtl-sdr-blacklist.conf /etc/modprobe.d/radioconda-rtl-sdr-blacklist.conf 167 | sudo modprobe -r $(cat $CONDA_PREFIX/etc/modprobe.d/rtl-sdr-blacklist.conf | sed -n -e 's/^blacklist //p') 168 | 169 | Install a udev rule by creating a link into your radioconda installation: 170 | 171 | sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/rtl-sdr.rules /etc/udev/rules.d/radioconda-rtl-sdr.rules 172 | sudo udevadm control --reload 173 | sudo udevadm trigger 174 | 175 | ### IIO (Pluto SDR) 176 | 177 | ##### Windows users 178 | 179 | Install the latest USB drivers by download and installing [this file](https://github.com/analogdevicesinc/plutosdr-m2k-drivers-win/releases/latest/download/PlutoSDR-M2k-USB-Drivers.exe). 180 | 181 | ##### Linux users 182 | 183 | Install a udev rule by creating a link into your radioconda installation: 184 | 185 | sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/90-libiio.rules /etc/udev/rules.d/90-radioconda-libiio.rules 186 | sudo udevadm control --reload 187 | sudo udevadm trigger 188 | 189 | ##### All users 190 | 191 | Once you can talk to the hardware (by following the instructions below), you may want to perform the post-install steps detailed on the [Pluto users wiki](https://wiki.analog.com/university/tools/pluto/users). 192 | 193 | ### Airspy (R2, Mini, HF+) 194 | 195 | ##### Windows users 196 | 197 | The WinUSB driver for your device will most likely be installed automatically, and in that case there is no additional setup. If for some reason the driver is not installed and the device is not recognized, [install the WinUSB driver with Zadig](#installing-the-winusb-driver-with-zadig), selecting your Airspy device. 198 | 199 | ##### Linux users 200 | 201 | Install a udev rule by creating a link into your radioconda installation: 202 | 203 | # run the next line only for the Airspy R2 or Mini 204 | sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/52-airspy.rules /etc/udev/rules.d/52-radioconda-airspy.rules 205 | # run the next line only for the Airspy HF+ 206 | sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/52-airspyhf.rules /etc/udev/rules.d/52-radioconda-airspyhf.rules 207 | sudo udevadm control --reload 208 | sudo udevadm trigger 209 | 210 | Then, make sure your user account belongs to the plugdev group in order to be able to access your device: 211 | 212 | sudo usermod -a -G plugdev 213 | 214 | You may have to restart for this change to take effect. 215 | 216 | ### HackRF 217 | 218 | ##### Windows users 219 | 220 | [Install the WinUSB driver with Zadig](#installing-the-winusb-driver-with-zadig), selecting your HackRF device. 221 | 222 | ##### Linux users 223 | 224 | Install a udev rule by creating a link into your radioconda installation: 225 | 226 | sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/53-hackrf.rules /etc/udev/rules.d/53-radioconda-hackrf.rules 227 | sudo udevadm control --reload 228 | sudo udevadm trigger 229 | 230 | Then, make sure your user account belongs to the plugdev group in order to be able to access your device: 231 | 232 | sudo usermod -a -G plugdev 233 | 234 | You may have to restart for this change to take effect. 235 | 236 | ### BladeRF 237 | 238 | ##### Windows users 239 | 240 | [Install the WinUSB driver with Zadig](#installing-the-winusb-driver-with-zadig), selecting your BladeRF device. 241 | 242 | ##### Linux users 243 | 244 | Install a udev rule by creating a link into your radioconda installation: 245 | 246 | sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/88-nuand-bladerf1.rules /etc/udev/rules.d/88-radioconda-nuand-bladerf1.rules 247 | sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/88-nuand-bladerf2.rules /etc/udev/rules.d/88-radioconda-nuand-bladerf2.rules 248 | sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/88-nuand-bootloader.rules /etc/udev/rules.d/88-radioconda-nuand-bootloader.rules 249 | sudo udevadm control --reload 250 | sudo udevadm trigger 251 | 252 | Then, make sure your user account belongs to the plugdev group in order to be able to access your device: 253 | 254 | sudo usermod -a -G plugdev 255 | 256 | You may have to restart for this change to take effect. 257 | 258 | ### LimeSDR 259 | 260 | ##### Windows users 261 | 262 | The conda-forge package uses libusb to communicate over USB with your LimeSDR device, instead of the standard CyUSB library which is not open source. If you have used your LimeSDR with another software package, you will have to switch USB drivers to one compatible with WinUSB/libusb. 263 | 264 | [Install the WinUSB driver with Zadig](#installing-the-winusb-driver-with-zadig), selecting your Lime device. 265 | 266 | ##### Linux users 267 | 268 | Install a udev rule by creating a link into your radioconda installation: 269 | 270 | sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/64-limesuite.rules /etc/udev/rules.d/64-radioconda-limesuite.rules 271 | sudo udevadm control --reload 272 | sudo udevadm trigger 273 | 274 | ### UHD (Ettus USRP) 275 | 276 | #### All devices 277 | 278 | Download the firmware files by activating your conda prompt and running 279 | 280 | uhd_images_downloader 281 | 282 | #### USB devices (e.g. B series) 283 | 284 | ##### Windows users 285 | 286 | You probably have to install a USB driver for the device. Follow the instructions [from the Ettus site](https://files.ettus.com/manual/page_transport.html#transport_usb_installwin), or [install the WinUSB driver with Zadig](#installing-the-winusb-driver-with-zadig) (your device will have a USB ID that starts with 2500 or 3923). 287 | 288 | ##### Linux users 289 | 290 | Install a udev rule by creating a link into your radioconda installation: 291 | 292 | sudo ln -s $CONDA_PREFIX/lib/uhd/utils/uhd-usrp.rules /etc/udev/rules.d/radioconda-uhd-usrp.rules 293 | sudo udevadm control --reload 294 | sudo udevadm trigger 295 | 296 | ### MiriSDR 297 | 298 | ##### Windows users 299 | 300 | [Install the WinUSB driver with Zadig](#installing-the-winusb-driver-with-zadig), selecting your MiriSDR device. 301 | 302 | ##### Linux users 303 | 304 | Install a udev rule by creating a link into your radioconda installation: 305 | 306 | sudo ln -s $CONDA_PREFIX/lib/udev/rules.d/mirisdr.rules /etc/udev/rules.d/radioconda-mirisdr.rules 307 | sudo udevadm control --reload 308 | sudo udevadm trigger 309 | 310 | ## Installing the WinUSB driver with Zadig 311 | 312 | Many USB devices use libusb and need a WinUSB driver installed on Windows. Follow this procedure to install the driver for your device: 313 | 314 | 1. Download and run [Zadig](https://github.com/pbatard/libwdi/releases/download/v1.5.1/zadig-2.9.exe) 315 | 2. Select your device 316 | 317 | - It may be auto-selected since it is missing a driver 318 | - It may not have a sensible name, but you can verify the USB ID 319 | 320 | 3. Ensure the target driver (middle of the interface) reads "WinUSB" 321 | 4. Click "Install Driver" or "Replace Driver" 322 | 323 | ## Developers 324 | 325 | ![Build radioconda](https://github.com/ryanvolz/radioconda/actions/workflows/build_radioconda.yml/badge.svg) 326 | 327 | ### Usage 328 | 329 | Each installer package is built from a specification directory in [installer_specs](https://github.com/ryanvolz/radioconda/tree/master/installer_specs) using [conda constructor](https://github.com/conda/constructor). An installer can be built manually using the [build_installer.py](https://github.com/ryanvolz/radioconda/blob/master/build_installer.py) script. The specification directories set the exact versions of the included packages so that `constructor` will produce a predictable result that can be tracked by git for each release. In turn, the specification directories are created/updated by _re-rendering_ the radioconda [environment specification file](https://github.com/ryanvolz/radioconda/blob/master/radioconda.yaml) using the [rerender.py](https://github.com/ryanvolz/radioconda/blob/master/rerender.py) script. 330 | 331 | So, the procedure to create a new installer package is: 332 | 333 | 1. Update the environment specification file `radioconda.yaml`, if desired. 334 | 2. Re-render the constructor specification directories by running `rerender.py`. 335 | 3. Commit the changes to produced by steps 1 and 2 to the git repository. 336 | 4. Build the installer package for a particular platform by running `build_installer.py`. 337 | 338 | ### Release 339 | 340 | To release a new version of radioconda and build installer packages using GitHub's CI: 341 | 342 | 1. Update the repository following steps 1-3 above. 343 | 2. Make a new pre-release on GitHub with a name equal to the version. 344 | 3. Wait until all artifacts are uploaded by CI 345 | 4. Mark the pre-release as a release 346 | 347 | NOTE: using a pre-release is important to make sure the "latest" links work. 348 | -------------------------------------------------------------------------------- /build_installer.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import pathlib 3 | import re 4 | import tarfile 5 | 6 | import requests 7 | 8 | platform_re = re.compile("^.*-(?P[(?:linux)(?:osx)(?:win)].*)$") 9 | 10 | 11 | def spec_dir_extract_platform(installer_spec_dir: pathlib.Path) -> str: 12 | spec_dir_name = installer_spec_dir.name 13 | 14 | platform_match = platform_re.match(spec_dir_name) 15 | 16 | if platform_match: 17 | return platform_match.group("platform") 18 | else: 19 | raise ValueError( 20 | f"Could not identify platform from directory name: {spec_dir_name}" 21 | ) 22 | 23 | 24 | def get_micromamba(cache_dir, platform, version=None) -> pathlib.Path: 25 | if not version: 26 | version = "latest" 27 | tarfile_path = cache_dir / f"micromamba-{platform}-{version}.bz2" 28 | tarfile_path.parent.mkdir(parents=True, exist_ok=True) 29 | micromamba_url = f"https://micro.mamba.pm/api/micromamba/{platform}/{version}" 30 | 31 | if not tarfile_path.exists(): 32 | print("Downloading micromamba for bundling into installer...") 33 | response = requests.get(url=micromamba_url, stream=True) 34 | 35 | with open(tarfile_path, "wb") as micromamba_tarfile: 36 | for chunk in response.iter_content(chunk_size=1024): 37 | if chunk: 38 | micromamba_tarfile.write(chunk) 39 | print("...download finished!") 40 | 41 | extract_path = tarfile_path.parent / tarfile_path.stem 42 | if platform.startswith("win"): 43 | micromamba_path = extract_path / "Library" / "bin" / "micromamba.exe" 44 | else: 45 | micromamba_path = extract_path / "bin" / "micromamba" 46 | if not micromamba_path.exists(): 47 | tarfile_obj = tarfile.open(tarfile_path, mode="r") 48 | tarfile_obj.extractall(extract_path) 49 | 50 | return micromamba_path 51 | 52 | 53 | if __name__ == "__main__": 54 | import argparse 55 | import os 56 | import subprocess 57 | import sys 58 | 59 | from constructor import main as constructor_main 60 | 61 | cwd = pathlib.Path(".").absolute() 62 | here = pathlib.Path(__file__).parent.absolute().relative_to(cwd) 63 | distname = os.getenv("DISTNAME", "radioconda") 64 | platform = os.getenv("PLATFORM", constructor_main.cc_platform) 65 | 66 | parser = argparse.ArgumentParser( 67 | description=( 68 | "Build installer package(s) using conda constructor." 69 | " Additional command-line options following '--' will be passed to" 70 | " constructor." 71 | ) 72 | ) 73 | parser.add_argument( 74 | "installer_spec_dir", 75 | type=pathlib.Path, 76 | nargs="?", 77 | default=here / "installer_specs" / f"{distname}-{platform}", 78 | help=( 79 | "Installer specification directory (containing construct.yaml)" 80 | " for a particular platform (name ends in the platform identifier)." 81 | " (default: %(default)s)" 82 | ), 83 | ) 84 | parser.add_argument( 85 | "-o", 86 | "--output_dir", 87 | type=pathlib.Path, 88 | default=here / "dist", 89 | help=( 90 | "Output directory in which the installer package(s) will be placed." 91 | " (default: %(default)s)" 92 | ), 93 | ) 94 | parser.add_argument( 95 | "--micromamba_version", 96 | default="1.5.12", 97 | help=( 98 | "Version of micromamba to download and bundle into the installer." 99 | " (default: %(default)s)" 100 | ), 101 | ) 102 | 103 | # allow a delimiter to separate constructor arguments 104 | argv = sys.argv[1:] 105 | if "--" in argv: 106 | i = argv.index("--") 107 | args, constructor_args = parser.parse_args(argv[:i]), argv[i + 1 :] 108 | else: 109 | args, constructor_args = parser.parse_args(argv), [] 110 | 111 | platform = spec_dir_extract_platform(args.installer_spec_dir) 112 | 113 | args.output_dir.mkdir(parents=True, exist_ok=True) 114 | 115 | if not platform.startswith("win"): 116 | conda_exe_path = get_micromamba( 117 | cache_dir=args.output_dir / "tmp", 118 | platform=platform, 119 | version=args.micromamba_version, 120 | ) 121 | if not conda_exe_path.exists(): 122 | raise RuntimeError( 123 | f"Failed to download/extract micromamba to {conda_exe_path}" 124 | ) 125 | conda_exe_args = ["--conda-exe", conda_exe_path] 126 | else: 127 | conda_exe_args = [] 128 | 129 | constructor_cmdline = ( 130 | [ 131 | "constructor", 132 | args.installer_spec_dir, 133 | "--platform", 134 | platform, 135 | "--output-dir", 136 | args.output_dir, 137 | ] 138 | + conda_exe_args 139 | + constructor_args 140 | ) 141 | 142 | print(" ".join(map(str, constructor_cmdline))) 143 | proc = subprocess.run(constructor_cmdline) 144 | 145 | try: 146 | proc.check_returncode() 147 | except subprocess.CalledProcessError: 148 | sys.exit(1) 149 | -------------------------------------------------------------------------------- /build_metapackage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import pathlib 3 | from typing import List 4 | 5 | import yaml 6 | 7 | 8 | def read_env_file( 9 | env_file: pathlib.Path, 10 | fallback_name: str, 11 | fallback_version: str, 12 | fallback_platform: str, 13 | fallback_channels: List[str], 14 | ) -> dict: 15 | with env_file.open("r") as f: 16 | env_dict = yaml.safe_load(f) 17 | 18 | env_dict.setdefault("name", fallback_name) 19 | env_dict.setdefault("version", fallback_version) 20 | env_dict.setdefault("platform", fallback_platform) 21 | env_dict.setdefault("channels", fallback_channels) 22 | 23 | return env_dict 24 | 25 | 26 | def get_conda_metapackage_cmdline( 27 | env_dict: dict, home: str, license_id: str, summary: str 28 | ): 29 | cmdline = [ 30 | "conda", 31 | "metapackage", 32 | env_dict["name"], 33 | env_dict["version"], 34 | "--no-anaconda-upload", 35 | "--home", 36 | home, 37 | "--license", 38 | license_id, 39 | "--summary", 40 | summary, 41 | ] 42 | for channel in env_dict["channels"]: 43 | cmdline.extend(["--channel", channel]) 44 | cmdline.extend(["--dependencies"] + env_dict["dependencies"]) 45 | 46 | return cmdline 47 | 48 | 49 | if __name__ == "__main__": 50 | import argparse 51 | import os 52 | import subprocess 53 | import shutil 54 | import sys 55 | 56 | import conda_build.config 57 | 58 | conda_build_config = conda_build.config.Config() 59 | 60 | cwd = pathlib.Path(".").absolute() 61 | here = pathlib.Path(__file__).parent.absolute().relative_to(cwd) 62 | distname = os.getenv("DISTNAME", "radioconda") 63 | platform = os.getenv("PLATFORM", conda_build_config.subdir) 64 | source = "/".join( 65 | ( 66 | os.getenv("GITHUB_SERVER_URL", "https://github.com"), 67 | os.getenv("GITHUB_REPOSITORY", "ryanvolz/radioconda"), 68 | ) 69 | ) 70 | license_id = os.getenv("LICENSE_ID", "BSD-3-Clause") 71 | summary = os.getenv("METAPACKAGE_SUMMARY", f"Metapackage for {distname}.") 72 | 73 | parser = argparse.ArgumentParser( 74 | description=( 75 | "Build environment metapackage using conda-build." 76 | " Additional command-line options following '--' will be passed to conda" 77 | " metapackage." 78 | ) 79 | ) 80 | parser.add_argument( 81 | "env_file", 82 | type=pathlib.Path, 83 | nargs="?", 84 | default=here / "installer_specs" / f"{distname}-{platform}.yml", 85 | help=( 86 | "Environment yaml file for a particular platform" 87 | " (name ends in the platform identifier)." 88 | " (default: %(default)s)" 89 | ), 90 | ) 91 | parser.add_argument( 92 | "-o", 93 | "--output_dir", 94 | type=pathlib.Path, 95 | default=here / "dist" / "conda-bld", 96 | help=( 97 | "Output directory in which the metapackage will be placed." 98 | " (default: %(default)s)" 99 | ), 100 | ) 101 | parser.add_argument( 102 | "--home", 103 | default=source, 104 | help="The homepage for the metapackage. (default: %(default)s)", 105 | ) 106 | parser.add_argument( 107 | "--license", 108 | default=license_id, 109 | help="The SPDX license identifier for the metapackage. (default: %(default)s)", 110 | ) 111 | parser.add_argument( 112 | "--summary", 113 | default=summary, 114 | help="Summary of the package. (default: %(default)s)", 115 | ) 116 | 117 | # allow a delimiter to separate metapackage arguments 118 | argv = sys.argv[1:] 119 | if "--" in argv: 120 | i = argv.index("--") 121 | args, metapackage_args = parser.parse_args(argv[:i]), argv[i + 1 :] 122 | else: 123 | args, metapackage_args = parser.parse_args(argv), [] 124 | 125 | env_dict = read_env_file( 126 | args.env_file, 127 | fallback_name=distname, 128 | fallback_version="0", 129 | fallback_platform=platform, 130 | fallback_channels=["conda-forge"], 131 | ) 132 | 133 | cmdline = get_conda_metapackage_cmdline( 134 | env_dict=env_dict, home=args.home, license_id=args.license, summary=args.summary 135 | ) 136 | cmdline.extend(metapackage_args) 137 | 138 | env = os.environ.copy() 139 | env["CONDA_SUBDIR"] = env_dict["platform"] 140 | 141 | proc = subprocess.run(cmdline, env=env) 142 | 143 | try: 144 | proc.check_returncode() 145 | except subprocess.CalledProcessError: 146 | sys.exit(1) 147 | 148 | bldpkgs_dir = pathlib.Path(conda_build_config.croot) / env_dict["platform"] 149 | pkg_paths = list(bldpkgs_dir.glob(f"{env_dict['name']}-{env_dict['version']}*.conda")) 150 | pkg_out_dir = args.output_dir / env_dict["platform"] 151 | pkg_out_dir.mkdir(parents=True, exist_ok=True) 152 | 153 | for pkg in pkg_paths: 154 | shutil.copy(pkg, pkg_out_dir) 155 | -------------------------------------------------------------------------------- /buildenv.yaml: -------------------------------------------------------------------------------- 1 | name: buildenv 2 | channels: 3 | - conda-forge 4 | platforms: 5 | - linux-64 6 | - osx-64 7 | - osx-arm64 8 | - win-64 9 | dependencies: 10 | - anaconda-client 11 | - conda-build 12 | - constructor 13 | - patch-ng 14 | - requests 15 | -------------------------------------------------------------------------------- /installer_specs/radioconda-linux-64.yml: -------------------------------------------------------------------------------- 1 | channels: 2 | - conda-forge 3 | - ryanvolz 4 | dependencies: 5 | - airspy=1.0.10=hb9d3cd8_1 6 | - airspyhf=1.6.8=hb9d3cd8_1 7 | - alsa-plugins=1.2.12=h702c2b0_1 8 | - bladerf=2024.05=hb9d3cd8_2 9 | - codec2=1.2.0=hb9d3cd8_3 10 | - digital_rf=2.6.11=py312hfc87f03_0 11 | - ephem=4.2=py312h66e93f0_0 12 | - gnss-sdr=0.0.19=ha67f2f6_8 13 | - gnuradio-adsb=0.0.0.20250304.dev+g9645757=unix_py_1 14 | - gnuradio-dect2=0.0.0.20250304.dev+g27a3d6=np20py312hfb79529_1 15 | - gnuradio-filerepeater=0.0.0.20250304.dev+gec6b386=np20py312h1cd7956_2 16 | - gnuradio-foo=0.0.0.20250304.dev+g9e0e2=np20py312he06c7e9_1 17 | - gnuradio-fosphor=0.0.0.20250304.dev+g85a0b8f=np20py312hf6c5108_1 18 | - gnuradio-funcube=3.10.0.rc3=py312h72a8b4f_12 19 | - gnuradio-gpredict-doppler=0.0.0.20250303.dev+g9473cbf=unix_py_1 20 | - gnuradio-hermeslite2=1.0.0.0.post20250305+g2e66561=np20py312hfb79529_0 21 | - gnuradio-hpsdr=0.0.0.20250304.dev+g7748cc9=np20py312hfb79529_1 22 | - gnuradio-ieee802_11=0.0.0.20250304.dev+g761bdd9=np20py312h59d5331_2 23 | - gnuradio-ieee802_15_4=3.6.post20250304+g61f4c4a=np20py312hba54501_1 24 | - gnuradio-inspector=0.0.0.20250303.dev+gad6a69e=np20py312hb5e3830_2 25 | - gnuradio-iqbalance=0.38.2=py312h918ed11_7 26 | - gnuradio-iridium=1!1.0.0=py312h735cc32_16 27 | - gnuradio-leo=1.0.0.post20250214+g8f62b92=np20py312he6740ee_2 28 | - gnuradio-lora_sdr=0.0.0.20250305.dev+ga8143cb=np20py312hba54501_0 29 | - gnuradio-m2k=1.0.0=py312h25c5c46_13 30 | - gnuradio-osmosdr=0.2.6=py312ha5fe6e7_7 31 | - gnuradio-paint=0.0.0.20250303.dev+gfb4f7b6=np20py312hba54501_2 32 | - gnuradio-radar=0.0.0.20250220.dev+g92adce2=np20py312hb8d1e7f_1 33 | - gnuradio-rds=3.10.post20250305+gc1cba54=np20py312hfb79529_0 34 | - gnuradio-satellites=5.7.0=py312h9a6c48e_1 35 | - gnuradio=3.10.12.0=py312h10a6dcf_1 36 | - gqrx=2.17.6=ha2948bb_1 37 | - hackrf=2024.02.1=hee39a08_1 38 | - hamlib-all=4.6.2=linux_2 39 | - inspectrum=0.3.1=hcdab9b9_0 40 | - ipython=9.0.2=pyhfb0248b_0 41 | - libiio=0.26=h74aa577_1 42 | - libm2k=0.9.0=py312h04d462b_1 43 | - limesuite=23.11.0=hdf29579_1 44 | - m17-cxx-demod=2.3.3=h051f366_5 45 | - matplotlib=3.10.1=py312h7900ff3_0 46 | - mirisdr=2.0.0=hb9d3cd8_1 47 | - numpy=2.2.3=py312h72c5963_0 48 | - pandas=2.2.3=py312hf9745cd_1 49 | - pyadi-iio=0.0.19=pyhd8ed1ab_0 50 | - pyfda=0.9.2=pyh9208f05_1 51 | - python=3.12.9=h9e4cc4f_1_cpython 52 | - rtl-sdr=2.0.2=hb9d3cd8_3 53 | - scipy=1.15.2=py312ha707e6e_0 54 | - soapysdr-module-airspy=0.2.0=hee64af1_0 55 | - soapysdr-module-airspyhf=0.2.0=hee64af1_0 56 | - soapysdr-module-audio=0.1.1=h0938181_2 57 | - soapysdr-module-bladerf=0.4.1=hc1d054c_0 58 | - soapysdr-module-fcdpp=0.1.1=h65c8d7f_0 59 | - soapysdr-module-hackrf=0.3.4=hee64af1_0 60 | - soapysdr-module-lms7=23.11.0=h1eb71b1_1 61 | - soapysdr-module-netsdr=0.2.0=hd00649d_1 62 | - soapysdr-module-plutosdr=0.2.2=hf8ba673_1 63 | - soapysdr-module-redpitaya=0.1.1=hd00649d_0 64 | - soapysdr-module-remote=0.5.2=hee64af1_2 65 | - soapysdr-module-rtlsdr=0.3.3=h44a8f8d_2 66 | - soapysdr-module-uhd=0.4.1=haa60c0e_14 67 | - soapysdr-module-volk-converters=0.1.1=h0b997e9_3 68 | - soapysdr=0.8.1=py312h68727a3_5 69 | - uhd=4.8.0.0=py312h0c4309e_0 70 | name: radioconda 71 | platform: linux-64 72 | version: 2025.03.14 73 | -------------------------------------------------------------------------------- /installer_specs/radioconda-linux-64/LICENSE: -------------------------------------------------------------------------------- 1 | Radioconda installer code uses BSD-3-Clause license as stated below. 2 | Binary packages that come with radioconda have their own licensing terms 3 | and by installing radioconda you agree to the licensing terms of individual 4 | packages as well. These additional licenses can be found in the 5 | pkgs//info/licenses folder of your radioconda installation. 6 | 7 | ============================================================================= 8 | 9 | Copyright (c) 2021, Ryan Volz 10 | All rights reserved. 11 | 12 | Redistribution and use in source and binary forms, with or without 13 | modification, are permitted provided that the following conditions are met: 14 | 15 | 1. Redistributions of source code must retain the above copyright notice, this 16 | list of conditions and the following disclaimer. 17 | 18 | 2. Redistributions in binary form must reproduce the above copyright notice, 19 | this list of conditions and the following disclaimer in the documentation 20 | and/or other materials provided with the distribution. 21 | 22 | 3. Neither the name of the copyright holder nor the names of its contributors 23 | may be used to endorse or promote products derived from this software without 24 | specific prior written permission. 25 | 26 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 27 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 28 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 29 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 30 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 32 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 33 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 34 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 35 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 | -------------------------------------------------------------------------------- /installer_specs/radioconda-linux-64/construct.yaml: -------------------------------------------------------------------------------- 1 | channels: &id001 2 | - conda-forge 3 | - ryanvolz 4 | company: https://github.com/ryanvolz/radioconda 5 | condarc: 6 | channel_priority: strict 7 | channels: *id001 8 | initialize_by_default: true 9 | installer_type: all 10 | keep_pkgs: true 11 | license_file: LICENSE 12 | name: radioconda 13 | post_install: post_install.sh 14 | register_python_default: false 15 | specs: 16 | - _libgcc_mutex=0.1=conda_forge 17 | - _openmp_mutex=4.5=2_gnu 18 | - adwaita-icon-theme=47.0=unix_0 19 | - airspy=1.0.10=hb9d3cd8_1 20 | - airspyhf=1.6.8=hb9d3cd8_1 21 | - alsa-lib=1.2.13=hb9d3cd8_0 22 | - alsa-plugins=1.2.12=h702c2b0_1 23 | - aom=3.9.1=hac33072_0 24 | - appdirs=1.4.4=pyhd8ed1ab_1 25 | - archspec=0.2.5=pyhd8ed1ab_0 26 | - armadillo=14.4.0=h4b2c6f2_0 27 | - arpack=3.9.1=nompi_hf03ea27_102 28 | - asciimatics=1.15.0=pyhd8ed1ab_1 29 | - asttokens=3.0.0=pyhd8ed1ab_1 30 | - at-spi2-atk=2.38.0=h0630a04_3 31 | - at-spi2-core=2.40.3=h0630a04_0 32 | - atk-1.0=2.38.0=h04ea711_2 33 | - attr=2.5.1=h166bdaf_1 34 | - attrs=25.3.0=pyh71513ae_0 35 | - bcrypt=4.3.0=py312h12e396e_0 36 | - bidict=0.23.1=pyhd8ed1ab_1 37 | - bladerf=2024.05=hb9d3cd8_2 38 | - blinker=1.9.0=pyhff2d567_0 39 | - boltons=24.0.0=pyhd8ed1ab_1 40 | - brotli-bin=1.1.0=hb9d3cd8_2 41 | - brotli-python=1.1.0=py312h2ec8cdc_2 42 | - brotli=1.1.0=hb9d3cd8_2 43 | - bzip2=1.0.8=h4bc722e_7 44 | - c-ares=1.34.4=hb9d3cd8_0 45 | - ca-certificates=2025.1.31=hbcca054_0 46 | - cached-property=1.5.2=hd8ed1ab_1 47 | - cached_property=1.5.2=pyha770c72_1 48 | - cairo=1.18.4=h3394656_0 49 | - certifi=2025.1.31=pyhd8ed1ab_0 50 | - cffi=1.17.1=py312h06ac9bb_0 51 | - charset-normalizer=3.4.1=pyhd8ed1ab_0 52 | - click=8.1.8=pyh707e725_0 53 | - codec2=1.2.0=hb9d3cd8_3 54 | - colorama=0.4.6=pyhd8ed1ab_1 55 | - conda-libmamba-solver=24.9.0=pyhd8ed1ab_0 56 | - conda-package-handling=2.4.0=pyh7900ff3_2 57 | - conda-package-streaming=0.11.0=pyhd8ed1ab_1 58 | - conda=24.11.3=py312h7900ff3_0 59 | - construct=2.10.70=pyhd8ed1ab_0 60 | - contourpy=1.3.1=py312h68727a3_0 61 | - cryptography=44.0.2=py312hda17c39_0 62 | - cycler=0.12.1=pyhd8ed1ab_1 63 | - cyrus-sasl=2.1.27=h54b06d7_7 64 | - dav1d=1.2.1=hd590300_0 65 | - dbus=1.13.6=h5008d03_3 66 | - decorator=5.2.1=pyhd8ed1ab_0 67 | - digital_rf=2.6.11=py312hfc87f03_0 68 | - distro=1.9.0=pyhd8ed1ab_1 69 | - docutils=0.21.2=pyhd8ed1ab_1 70 | - double-conversion=3.3.1=h5888daf_0 71 | - elfutils=0.192=h7f4e02f_1 72 | - ephem=4.2=py312h66e93f0_0 73 | - epoxy=1.5.10=h166bdaf_1 74 | - exceptiongroup=1.2.2=pyhd8ed1ab_1 75 | - executing=2.1.0=pyhd8ed1ab_1 76 | - expat=2.6.4=h5888daf_0 77 | - ffmpeg=7.1.1=gpl_h24e5c1d_701 78 | - fftw=3.3.10=nompi_hf1063bd_110 79 | - flask-socketio=5.5.1=pyh29332c3_0 80 | - flask=3.1.0=pyhd8ed1ab_1 81 | - fmt=11.0.2=h434a139_0 82 | - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 83 | - font-ttf-inconsolata=3.000=h77eed37_0 84 | - font-ttf-source-code-pro=2.038=h77eed37_0 85 | - font-ttf-ubuntu=0.83=h77eed37_3 86 | - fontconfig=2.15.0=h7e30c49_1 87 | - fonts-conda-ecosystem=1=0 88 | - fonts-conda-forge=1=0 89 | - fonttools=4.56.0=py312h178313f_0 90 | - freetype=2.13.3=h48d6fc4_0 91 | - fribidi=1.0.10=h36c2ea0_0 92 | - frozendict=2.4.6=py312h66e93f0_0 93 | - fs=2.4.16=pyhd8ed1ab_0 94 | - future=1.0.0=pyhd8ed1ab_2 95 | - gdk-pixbuf=2.42.12=hb9ae30d_0 96 | - gettext-tools=0.23.1=h5888daf_0 97 | - gettext=0.23.1=h5888daf_0 98 | - gevent-websocket=0.10.1=py_0 99 | - gevent=24.11.1=py312h04d4891_0 100 | - gflags=2.2.2=h5888daf_1005 101 | - glew=2.1.0=h9c3ff4c_2 102 | - glfw=3.4=hd590300_0 103 | - glib-tools=2.82.2=h4833e2c_1 104 | - glib=2.82.2=h07242d1_1 105 | - glog=0.7.1=hbabe93e_0 106 | - gmp=6.3.0=hac33072_2 107 | - gnss-sdr=0.0.19=ha67f2f6_8 108 | - gnuradio-adsb=0.0.0.20250304.dev+g9645757=unix_py_1 109 | - gnuradio-core=3.10.12.0=py312ha7c749d_1 110 | - gnuradio-dect2=0.0.0.20250304.dev+g27a3d6=np20py312hfb79529_1 111 | - gnuradio-filerepeater=0.0.0.20250304.dev+gec6b386=np20py312h1cd7956_2 112 | - gnuradio-foo=0.0.0.20250304.dev+g9e0e2=np20py312he06c7e9_1 113 | - gnuradio-fosphor=0.0.0.20250304.dev+g85a0b8f=np20py312hf6c5108_1 114 | - gnuradio-funcube=3.10.0.rc3=py312h72a8b4f_12 115 | - gnuradio-gpredict-doppler=0.0.0.20250303.dev+g9473cbf=unix_py_1 116 | - gnuradio-grc=3.10.12.0=py312h7fa3635_1 117 | - gnuradio-hermeslite2=1.0.0.0.post20250305+g2e66561=np20py312hfb79529_0 118 | - gnuradio-hpsdr=0.0.0.20250304.dev+g7748cc9=np20py312hfb79529_1 119 | - gnuradio-ieee802_11=0.0.0.20250304.dev+g761bdd9=np20py312h59d5331_2 120 | - gnuradio-ieee802_15_4=3.6.post20250304+g61f4c4a=np20py312hba54501_1 121 | - gnuradio-iio=3.10.12.0=py312h7054ea6_1 122 | - gnuradio-inspector=0.0.0.20250303.dev+gad6a69e=np20py312hb5e3830_2 123 | - gnuradio-iqbalance=0.38.2=py312h918ed11_7 124 | - gnuradio-iridium=1!1.0.0=py312h735cc32_16 125 | - gnuradio-leo-data=1.0.0.post20250214+g8f62b92=unix_2 126 | - gnuradio-leo=1.0.0.post20250214+g8f62b92=np20py312he6740ee_2 127 | - gnuradio-lora_sdr=0.0.0.20250305.dev+ga8143cb=np20py312hba54501_0 128 | - gnuradio-m2k=1.0.0=py312h25c5c46_13 129 | - gnuradio-osmosdr=0.2.6=py312ha5fe6e7_7 130 | - gnuradio-paint=0.0.0.20250303.dev+gfb4f7b6=np20py312hba54501_2 131 | - gnuradio-pmt=3.10.12.0=py312h68958a3_1 132 | - gnuradio-qtgui=3.10.12.0=py312h0075b30_1 133 | - gnuradio-radar=0.0.0.20250220.dev+g92adce2=np20py312hb8d1e7f_1 134 | - gnuradio-rds=3.10.post20250305+gc1cba54=np20py312hfb79529_0 135 | - gnuradio-satellites=5.7.0=py312h9a6c48e_1 136 | - gnuradio-soapy=3.10.12.0=py312h3843545_1 137 | - gnuradio-uhd=3.10.12.0=py312ha473bb7_1 138 | - gnuradio-video-sdl=3.10.12.0=py312h6006d4b_1 139 | - gnuradio-zeromq=3.10.12.0=py312hcb9ea95_1 140 | - gnuradio=3.10.12.0=py312h10a6dcf_1 141 | - gnutls=3.8.9=h5746830_0 142 | - gqrx=2.17.6=ha2948bb_1 143 | - graphite2=1.3.13=h59595ed_1003 144 | - greenlet=3.1.1=py312h2ec8cdc_1 145 | - gsl=2.7=he838d99_0 146 | - gst-plugins-base=1.24.7=h0a52356_0 147 | - gstreamer-orc=0.4.41=h17648ed_0 148 | - gstreamer=1.24.7=hf3bb09a_0 149 | - gtest=1.15.2=h434a139_0 150 | - gtk3=3.24.43=h021d004_4 151 | - h11=0.14.0=pyhd8ed1ab_1 152 | - h2=4.2.0=pyhd8ed1ab_0 153 | - h5py=3.13.0=nompi_py312hedeef09_100 154 | - hackrf=2024.02.1=hee39a08_1 155 | - hamlib-all=4.6.2=linux_2 156 | - hamlib-lua=4.6.2=lua54hb9d3cd8_2 157 | - hamlib-perl=4.6.2=pl5321hb9d3cd8_2 158 | - hamlib-python=4.6.2=py312h66e93f0_2 159 | - hamlib-tcl=4.6.2=h809f8db_2 160 | - hamlib=4.6.2=h9aa3e0e_2 161 | - harfbuzz=10.4.0=h76408a6_0 162 | - hdf5=1.14.3=nompi_h2d575fe_109 163 | - hicolor-icon-theme=0.17=ha770c72_2 164 | - hpack=4.1.0=pyhd8ed1ab_0 165 | - hyperframe=6.1.0=pyhd8ed1ab_0 166 | - icu=75.1=he02047a_0 167 | - idna=3.10=pyhd8ed1ab_1 168 | - importlib-metadata=8.6.1=pyha770c72_0 169 | - importlib_resources=6.5.2=pyhd8ed1ab_0 170 | - inspectrum=0.3.1=hcdab9b9_0 171 | - ipython=9.0.2=pyhfb0248b_0 172 | - ipython_pygments_lexers=1.1.1=pyhd8ed1ab_0 173 | - itsdangerous=2.2.0=pyhd8ed1ab_1 174 | - jack=1.9.22=h7c63dc7_2 175 | - jedi=0.19.2=pyhd8ed1ab_1 176 | - jinja2=3.1.6=pyhd8ed1ab_0 177 | - jsonpatch=1.33=pyhd8ed1ab_1 178 | - jsonpointer=3.0.0=py312h7900ff3_1 179 | - jsonschema-specifications=2024.10.1=pyhd8ed1ab_1 180 | - jsonschema=4.23.0=pyhd8ed1ab_1 181 | - keyutils=1.6.1=h166bdaf_0 182 | - kiwisolver=1.4.8=py312h84d6215_0 183 | - krb5=1.21.3=h659f571_0 184 | - lame=3.100=h166bdaf_1003 185 | - lcms2=2.17=h717163a_0 186 | - ld_impl_linux-64=2.43=h712a8e2_4 187 | - lerc=4.0.0=h27087fc_0 188 | - level-zero=1.21.2=h84d6215_0 189 | - libabseil=20240722.0=cxx17_hbbce691_4 190 | - libad9361-iio-c=0.3=hf8c384f_1 191 | - libaec=1.1.3=h59595ed_0 192 | - libaio=0.3.113=h166bdaf_0 193 | - libairspy=1.0.10=hb9d3cd8_1 194 | - libairspyhf=1.6.8=hb9d3cd8_1 195 | - libarchive=3.7.7=h4585015_3 196 | - libasprintf-devel=0.23.1=h8e693c7_0 197 | - libasprintf=0.23.1=h8e693c7_0 198 | - libass=0.17.3=hba53ac1_1 199 | - libbladerf-python=2024.05=py_2 200 | - libbladerf2=2024.05=hb9d3cd8_2 201 | - libblas=3.9.0=31_h59b9bed_openblas 202 | - libboost=1.86.0=h6c02f8c_3 203 | - libbrotlicommon=1.1.0=hb9d3cd8_2 204 | - libbrotlidec=1.1.0=hb9d3cd8_2 205 | - libbrotlienc=1.1.0=hb9d3cd8_2 206 | - libcap=2.75=h39aace5_0 207 | - libcblas=3.9.0=31_he106b2a_openblas 208 | - libclang-cpp19.1=19.1.7=default_hb5137d0_1 209 | - libclang13=19.1.7=default_h9c6a7e4_1 210 | - libcodec2=1.2.0=hb9d3cd8_3 211 | - libcorrect=0.0.0=h0b41bf4_0 212 | - libcups=2.3.3=h4637d8d_4 213 | - libcurl=8.12.1=h332b0f4_0 214 | - libdb=6.2.32=h9c3ff4c_0 215 | - libdeflate=1.23=h4ddbbb0_0 216 | - libdrm=2.4.124=hb9d3cd8_0 217 | - libedit=3.1.20250104=pl5321h7949ede_0 218 | - libegl=1.7.0=ha4b6fd6_2 219 | - libev=4.33=hd590300_2 220 | - libevent=2.1.12=hf998b51_1 221 | - libexpat=2.6.4=h5888daf_0 222 | - libffi=3.4.6=h2dba641_0 223 | - libflac=1.4.3=h59595ed_0 224 | - libgcc-ng=14.2.0=h69a702a_2 225 | - libgcc=14.2.0=h767d61c_2 226 | - libgcrypt-lib=1.11.0=hb9d3cd8_2 227 | - libgettextpo-devel=0.23.1=h5888daf_0 228 | - libgettextpo=0.23.1=h5888daf_0 229 | - libgfortran-ng=14.2.0=h69a702a_2 230 | - libgfortran5=14.2.0=hf1ad2bd_2 231 | - libgfortran=14.2.0=h69a702a_2 232 | - libgirepository=1.82.0=h0dcfedc_0 233 | - libgl=1.7.0=ha4b6fd6_2 234 | - libglib=2.82.2=h2ff4ddf_1 235 | - libglu=9.0.3=h03adeef_0 236 | - libglvnd=1.7.0=ha4b6fd6_2 237 | - libglx=1.7.0=ha4b6fd6_2 238 | - libgomp=14.2.0=h767d61c_2 239 | - libgpg-error=1.51=hbd13f7d_1 240 | - libhackrf0=2024.02.1=hb9d3cd8_1 241 | - libhamlib4=4.6.2=h5888daf_2 242 | - libhidapi=0.14.0=hd590300_0 243 | - libhwloc=2.11.2=default_h0d58e46_1001 244 | - libiconv=1.18=h4ce23a2_1 245 | - libidn2=2.3.8=ha4ef2c3_0 246 | - libiio-c=0.26=h108ffe9_1 247 | - libiio=0.26=h74aa577_1 248 | - libjpeg-turbo=3.0.0=hd590300_1 249 | - liblapack=3.9.0=31_h7ac8fdf_openblas 250 | - liblimesuite=23.11.0=h5888daf_1 251 | - libliquid1=1.6.0=hee39a08_2 252 | - libllvm19=19.1.7=ha7bfdaf_1 253 | - liblzma=5.6.4=hb9d3cd8_0 254 | - libm2k=0.9.0=py312h04d462b_1 255 | - libmamba=1.5.12=h49b8a8d_0 256 | - libmambapy=1.5.12=py312hbaee817_0 257 | - libmatio=1.5.28=hbb92ff5_2 258 | - libmicrohttpd=1.0.1=hbc5bc17_1 259 | - libmirisdr4=2.0.0=hb9d3cd8_1 260 | - libnghttp2=1.64.0=h161d5f1_0 261 | - libnsl=2.0.1=hd590300_0 262 | - libntlm=1.8=hb9d3cd8_0 263 | - libogg=1.3.5=h4ab18f5_0 264 | - libopenblas=0.3.29=pthreads_h94d23a6_0 265 | - libopengl=1.7.0=ha4b6fd6_2 266 | - libopenvino-auto-batch-plugin=2025.0.0=h4d9b6c2_2 267 | - libopenvino-auto-plugin=2025.0.0=h4d9b6c2_2 268 | - libopenvino-hetero-plugin=2025.0.0=h981d57b_2 269 | - libopenvino-intel-cpu-plugin=2025.0.0=hdc3f47d_2 270 | - libopenvino-intel-gpu-plugin=2025.0.0=hdc3f47d_2 271 | - libopenvino-intel-npu-plugin=2025.0.0=hdc3f47d_2 272 | - libopenvino-ir-frontend=2025.0.0=h981d57b_2 273 | - libopenvino-onnx-frontend=2025.0.0=h6363af5_2 274 | - libopenvino-paddle-frontend=2025.0.0=h6363af5_2 275 | - libopenvino-pytorch-frontend=2025.0.0=h5888daf_2 276 | - libopenvino-tensorflow-frontend=2025.0.0=h630ec5c_2 277 | - libopenvino-tensorflow-lite-frontend=2025.0.0=h5888daf_2 278 | - libopenvino=2025.0.0=hdc3f47d_2 279 | - libopus=1.3.1=h7f98852_1 280 | - libosmodsp0=0.4.0=hee39a08_2 281 | - libpcap=1.10.4=hd590300_1 282 | - libpciaccess=0.18=hd590300_0 283 | - libpng=1.6.47=h943b412_0 284 | - libpq=17.4=h27ae623_0 285 | - libprotobuf=5.28.3=h6128344_1 286 | - librsvg=2.58.4=h49af25d_2 287 | - librtaudio6=5.2.0=h44925b1_3 288 | - libsndfile=1.2.2=hc60ed4a_1 289 | - libsodium=1.0.20=h4ab18f5_0 290 | - libsolv=0.7.30=h3509ff9_0 291 | - libsqlite=3.49.1=hee588c1_1 292 | - libssh2=1.11.1=hf672d98_0 293 | - libstdcxx-ng=14.2.0=h4852527_2 294 | - libstdcxx=14.2.0=h8f9b012_2 295 | - libsystemd0=257.4=h4e0b6ca_1 296 | - libtasn1=4.20.0=hb9d3cd8_0 297 | - libthrift=0.21.0=h0e7cc3e_0 298 | - libtiff=4.7.0=hd9ff511_3 299 | - libudev1=257.4=hbe16f8c_1 300 | - libunistring=0.9.10=h7f98852_0 301 | - libunwind=1.6.2=h9c3ff4c_0 302 | - liburing=2.9=h84d6215_0 303 | - libusb=1.0.27=hb9d3cd8_101 304 | - libuuid=2.38.1=h0b41bf4_0 305 | - libuv=1.50.0=hb9d3cd8_0 306 | - libva=2.22.0=h4f16b4b_2 307 | - libvorbis=1.3.7=h9c3ff4c_0 308 | - libvpx=1.14.1=hac33072_0 309 | - libwebp-base=1.5.0=h851e524_0 310 | - libxcb=1.17.0=h8a09558_0 311 | - libxcrypt=4.4.36=hd590300_1 312 | - libxkbcommon=1.8.1=hc4a0caf_0 313 | - libxml2=2.13.6=h8d12d68_0 314 | - libxslt=1.1.39=h76b75d6_0 315 | - libzlib=1.3.1=hb9d3cd8_2 316 | - limesuite=23.11.0=hdf29579_1 317 | - lua=5.4.6=h2973eb6_1 318 | - lxml=5.3.1=py312he28fd5a_0 319 | - lz4-c=1.10.0=h5888daf_1 320 | - lzo=2.10=hd590300_1001 321 | - m17-cxx-demod=2.3.3=h051f366_5 322 | - mako=1.3.9=pyhd8ed1ab_0 323 | - mamba=1.5.12=py312h9460a1c_0 324 | - markdown=3.6=pyhd8ed1ab_0 325 | - markupsafe=3.0.2=py312h178313f_1 326 | - matplotlib-base=3.10.1=py312hd3ec401_0 327 | - matplotlib-inline=0.1.7=pyhd8ed1ab_1 328 | - matplotlib=3.10.1=py312h7900ff3_0 329 | - menuinst=2.2.0=py312h7900ff3_0 330 | - mesalib=25.0.1=h0b126fc_0 331 | - mirisdr=2.0.0=hb9d3cd8_1 332 | - mpg123=1.32.9=hc50e24c_0 333 | - mplcursors=0.6=pyhd8ed1ab_1 334 | - munkres=1.1.4=pyh9f0ad1d_0 335 | - mysql-common=9.0.1=h266115a_5 336 | - mysql-libs=9.0.1=he0572af_5 337 | - ncurses=6.5=h2d0b736_3 338 | - nettle=3.9.1=h7ab15ed_0 339 | - nomkl=1.0=h5ca1d4c_0 340 | - nspr=4.36=h5888daf_0 341 | - nss=3.108=h159eef7_0 342 | - numexpr=2.10.2=py312h6a710ac_100 343 | - numpy=2.2.3=py312h72c5963_0 344 | - ocl-icd-system=1.0.0=1 345 | - ocl-icd=2.3.2=hb9d3cd8_2 346 | - opencl-headers=2024.10.24=h5888daf_0 347 | - openh264=2.6.0=hc22cd8d_0 348 | - openjpeg=2.5.3=h5fbd93e_0 349 | - openldap=2.6.9=he970967_0 350 | - openssl=3.4.1=h7b32b05_0 351 | - p11-kit=0.24.1=hc5aa10d_0 352 | - packaging=24.2=pyhd8ed1ab_2 353 | - pandas=2.2.3=py312hf9745cd_1 354 | - pango=1.56.2=h861ebed_0 355 | - paramiko=3.5.1=pyhd8ed1ab_0 356 | - parso=0.8.4=pyhd8ed1ab_1 357 | - pcre2=10.44=hba22ea6_2 358 | - perl=5.32.1=7_hd590300_perl5 359 | - pexpect=4.9.0=pyhd8ed1ab_1 360 | - pickleshare=0.7.5=pyhd8ed1ab_1004 361 | - pillow=11.1.0=py312h80c1187_0 362 | - pip=25.0.1=pyh8b19718_0 363 | - pixman=0.44.2=h29eaf8c_0 364 | - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 365 | - platformdirs=4.3.6=pyhd8ed1ab_1 366 | - pluggy=1.5.0=pyhd8ed1ab_1 367 | - ply=3.11=pyhd8ed1ab_3 368 | - portaudio=19.7.0=hf4617a5_0 369 | - prompt-toolkit=3.0.50=pyha770c72_0 370 | - pthread-stubs=0.4=hb9d3cd8_1002 371 | - ptyprocess=0.7.0=pyhd8ed1ab_1 372 | - pugixml=1.15=h3f63f65_0 373 | - pulseaudio-client=17.0=hb77b528_0 374 | - pure_eval=0.2.3=pyhd8ed1ab_1 375 | - pyadi-iio=0.0.19=pyhd8ed1ab_0 376 | - pybind11-abi=4=hd8ed1ab_3 377 | - pycairo=1.27.0=py312h51b637d_0 378 | - pycosat=0.6.6=py312h66e93f0_2 379 | - pycparser=2.22=pyh29332c3_1 380 | - pyfda=0.9.2=pyh9208f05_1 381 | - pyfiglet=0.8.post1=py_0 382 | - pygments=2.19.1=pyhd8ed1ab_0 383 | - pygobject=3.50.0=py312hf4b392c_1 384 | - pylibiio=0.26=py_1 385 | - pynacl=1.5.0=py312h66e93f0_4 386 | - pyopengl=3.1.7=pyhd8ed1ab_0 387 | - pyparsing=3.2.1=pyhd8ed1ab_0 388 | - pyqt5-sip=12.12.2=py312h30efb56_5 389 | - pyqt=5.15.9=py312h949fe66_5 390 | - pyqtgraph=0.13.7=pyhd8ed1ab_1 391 | - pyside6=6.8.2=py312h91f0f75_1 392 | - pysocks=1.7.1=pyha55dd90_7 393 | - python-dateutil=2.9.0.post0=pyhff2d567_1 394 | - python-engineio=4.11.2=pyhff2d567_0 395 | - python-socketio=5.12.1=pyhd8ed1ab_0 396 | - python-tzdata=2025.1=pyhd8ed1ab_0 397 | - python=3.12.9=h9e4cc4f_1_cpython 398 | - python_abi=3.12=5_cp312 399 | - pytz=2024.1=pyhd8ed1ab_0 400 | - pywin32-on-windows=0.1.0=pyh1179c8e_3 401 | - pyyaml=6.0.2=py312h178313f_2 402 | - pyzmq=26.3.0=py312hbf22597_0 403 | - qdarkstyle=3.2.3=pyhd8ed1ab_1 404 | - qhull=2020.2=h434a139_5 405 | - qt-main=5.15.15=hc3cb62f_2 406 | - qt6-main=6.8.2=h588cce1_0 407 | - qtpy=2.4.3=pyhd8ed1ab_0 408 | - qwt=6.3.0=h7c222af_0 409 | - readline=8.2=h8c095d6_2 410 | - referencing=0.36.2=pyh29332c3_0 411 | - reproc-cpp=14.2.5.post0=h5888daf_0 412 | - reproc=14.2.5.post0=hb9d3cd8_0 413 | - requests=2.32.3=pyhd8ed1ab_1 414 | - rpds-py=0.23.1=py312h3b7be25_0 415 | - rtl-sdr=2.0.2=hb9d3cd8_3 416 | - ruamel.yaml.clib=0.2.8=py312h66e93f0_1 417 | - ruamel.yaml=0.18.10=py312h66e93f0_0 418 | - scipy=1.15.2=py312ha707e6e_0 419 | - sdl2=2.32.50=h9b8e6db_1 420 | - sdl3=3.2.8=h3083f51_0 421 | - sdl=1.2.68=h9b8e6db_1 422 | - setuptools=75.8.2=pyhff2d567_0 423 | - simple-websocket=1.1.0=pyhd8ed1ab_0 424 | - sip=6.7.12=py312h30efb56_0 425 | - six=1.17.0=pyhd8ed1ab_0 426 | - snappy=1.2.1=h8bd8927_1 427 | - soapysdr-module-airspy=0.2.0=hee64af1_0 428 | - soapysdr-module-airspyhf=0.2.0=hee64af1_0 429 | - soapysdr-module-audio=0.1.1=h0938181_2 430 | - soapysdr-module-bladerf=0.4.1=hc1d054c_0 431 | - soapysdr-module-fcdpp=0.1.1=h65c8d7f_0 432 | - soapysdr-module-hackrf=0.3.4=hee64af1_0 433 | - soapysdr-module-lms7=23.11.0=h1eb71b1_1 434 | - soapysdr-module-netsdr=0.2.0=hd00649d_1 435 | - soapysdr-module-plutosdr=0.2.2=hf8ba673_1 436 | - soapysdr-module-redpitaya=0.1.1=hd00649d_0 437 | - soapysdr-module-remote=0.5.2=hee64af1_2 438 | - soapysdr-module-rtlsdr=0.3.3=h44a8f8d_2 439 | - soapysdr-module-uhd=0.4.1=haa60c0e_14 440 | - soapysdr-module-volk-converters=0.1.1=h0b997e9_3 441 | - soapysdr=0.8.1=py312h68727a3_5 442 | - spdlog=1.15.1=hb29a8c4_0 443 | - stack_data=0.6.3=pyhd8ed1ab_1 444 | - superlu=5.2.2=h00795ac_0 445 | - svt-av1=3.0.1=h5888daf_0 446 | - tbb=2022.0.0=hceb3a55_0 447 | - tk=8.6.13=noxft_h4845f30_101 448 | - toml=0.10.2=pyhd8ed1ab_1 449 | - tomli=2.2.1=pyhd8ed1ab_1 450 | - tornado=6.4.2=py312h66e93f0_0 451 | - tqdm=4.67.1=pyhd8ed1ab_1 452 | - traitlets=5.14.3=pyhd8ed1ab_1 453 | - truststore=0.10.1=pyh29332c3_0 454 | - typing_extensions=4.12.2=pyha770c72_1 455 | - tzdata=2025a=h78e105d_0 456 | - uhd=4.8.0.0=py312h0c4309e_0 457 | - unicodedata2=16.0.0=py312h66e93f0_0 458 | - urllib3=2.3.0=pyhd8ed1ab_0 459 | - volk-gnss-sdr=0.0.19=h716a40f_8 460 | - volk=3.2.0=h9e5c8e9_0 461 | - watchdog=6.0.0=py312h7900ff3_0 462 | - wayland-protocols=1.41=hd8ed1ab_0 463 | - wayland=1.23.1=h3e06ad9_0 464 | - wcwidth=0.2.13=pyhd8ed1ab_1 465 | - websocket-client=1.8.0=pyhd8ed1ab_1 466 | - werkzeug=3.1.3=pyhd8ed1ab_1 467 | - wheel=0.45.1=pyhd8ed1ab_1 468 | - wsproto=1.2.0=pyhd8ed1ab_1 469 | - wxwidgets=3.2.6=hf87bdbc_3 470 | - x264=1!164.3095=h166bdaf_2 471 | - x265=3.5=h924138e_3 472 | - xcb-util-cursor=0.1.5=hb9d3cd8_0 473 | - xcb-util-image=0.4.0=hb711507_2 474 | - xcb-util-keysyms=0.4.1=hb711507_0 475 | - xcb-util-renderutil=0.3.10=hb711507_0 476 | - xcb-util-wm=0.4.2=hb711507_0 477 | - xcb-util=0.4.1=hb711507_2 478 | - xkeyboard-config=2.43=hb9d3cd8_0 479 | - xorg-libice=1.1.2=hb9d3cd8_0 480 | - xorg-libsm=1.2.6=he73a12e_0 481 | - xorg-libx11=1.8.12=h4f16b4b_0 482 | - xorg-libxau=1.0.12=hb9d3cd8_0 483 | - xorg-libxcomposite=0.4.6=hb9d3cd8_2 484 | - xorg-libxcursor=1.2.3=hb9d3cd8_0 485 | - xorg-libxdamage=1.1.6=hb9d3cd8_0 486 | - xorg-libxdmcp=1.1.5=hb9d3cd8_0 487 | - xorg-libxext=1.3.6=hb9d3cd8_0 488 | - xorg-libxfixes=6.0.1=hb9d3cd8_0 489 | - xorg-libxi=1.8.2=hb9d3cd8_0 490 | - xorg-libxinerama=1.1.5=h5888daf_1 491 | - xorg-libxrandr=1.5.4=hb9d3cd8_0 492 | - xorg-libxrender=0.9.12=hb9d3cd8_0 493 | - xorg-libxscrnsaver=1.2.4=hb9d3cd8_0 494 | - xorg-libxshmfence=1.3.3=hb9d3cd8_0 495 | - xorg-libxtst=1.2.5=hb9d3cd8_3 496 | - xorg-libxxf86vm=1.1.6=hb9d3cd8_0 497 | - yaml-cpp=0.8.0=h59595ed_0 498 | - yaml=0.2.5=h7f98852_2 499 | - zeromq=4.3.5=h3b0a872_7 500 | - zipp=3.21.0=pyhd8ed1ab_1 501 | - zlib=1.3.1=hb9d3cd8_2 502 | - zope.event=5.0=pyhd8ed1ab_1 503 | - zope.interface=7.2=py312h66e93f0_0 504 | - zstandard=0.23.0=py312h66e93f0_1 505 | - zstd=1.5.7=hb8e6e7a_1 506 | user_requested_specs: 507 | - airspy 508 | - airspyhf 509 | - alsa-plugins 510 | - bladerf 511 | - codec2 512 | - conda 513 | - digital_rf 514 | - ephem 515 | - gnss-sdr 516 | - gnuradio 517 | - gnuradio-adsb 518 | - gnuradio-dect2 519 | - gnuradio-filerepeater 520 | - gnuradio-foo 521 | - gnuradio-fosphor 522 | - gnuradio-funcube 523 | - gnuradio-gpredict-doppler 524 | - gnuradio-hermeslite2 525 | - gnuradio-hpsdr 526 | - gnuradio-ieee802_11 527 | - gnuradio-ieee802_15_4 528 | - gnuradio-inspector 529 | - gnuradio-iqbalance 530 | - gnuradio-iridium 531 | - gnuradio-leo 532 | - gnuradio-lora_sdr 533 | - gnuradio-m2k 534 | - gnuradio-osmosdr 535 | - gnuradio-paint 536 | - gnuradio-radar 537 | - gnuradio-rds 538 | - gnuradio-satellites 539 | - gqrx 540 | - hackrf 541 | - hamlib-all 542 | - inspectrum 543 | - ipython 544 | - libiio 545 | - libm2k 546 | - limesuite 547 | - m17-cxx-demod 548 | - mamba 549 | - matplotlib 550 | - mirisdr 551 | - numpy 552 | - pandas 553 | - pyadi-iio 554 | - pyfda 555 | - python 556 | - rtl-sdr 557 | - scipy 558 | - soapysdr 559 | - soapysdr-module-airspy 560 | - soapysdr-module-airspyhf 561 | - soapysdr-module-audio 562 | - soapysdr-module-bladerf 563 | - soapysdr-module-fcdpp 564 | - soapysdr-module-hackrf 565 | - soapysdr-module-lms7 566 | - soapysdr-module-netsdr 567 | - soapysdr-module-plutosdr 568 | - soapysdr-module-redpitaya 569 | - soapysdr-module-remote 570 | - soapysdr-module-rtlsdr 571 | - soapysdr-module-uhd 572 | - soapysdr-module-volk-converters 573 | - uhd 574 | version: 2025.03.14 575 | write_condarc: true 576 | -------------------------------------------------------------------------------- /installer_specs/radioconda-linux-64/post_install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | PREFIX="${PREFIX:-$2/radioconda}" 3 | rm -f $PREFIX/pkgs/*.tar.bz2 $PREFIX/pkgs/*.conda 4 | exit 0 5 | -------------------------------------------------------------------------------- /installer_specs/radioconda-linux-aarch64.yml: -------------------------------------------------------------------------------- 1 | channels: 2 | - conda-forge 3 | - ryanvolz 4 | dependencies: 5 | - airspy=1.0.10=h86ecc28_1 6 | - airspyhf=1.6.8=h86ecc28_1 7 | - alsa-plugins=1.2.12=hce16396_1 8 | - bladerf=2024.05=h86ecc28_2 9 | - codec2=1.2.0=h86ecc28_3 10 | - digital_rf=2.6.11=py312h91a0b02_0 11 | - ephem=4.2=py312hb2c0f52_0 12 | - gnss-sdr=0.0.19=hc7309ab_8 13 | - gnuradio-adsb=0.0.0.20250304.dev+g9645757=unix_py_1 14 | - gnuradio-dect2=0.0.0.20250304.dev+g27a3d6=np20py312heb6a550_1 15 | - gnuradio-filerepeater=0.0.0.20250304.dev+gec6b386=np20py312hdabc401_2 16 | - gnuradio-foo=0.0.0.20250304.dev+g9e0e2=np20py312hfed7f62_1 17 | - gnuradio-fosphor=0.0.0.20250304.dev+g85a0b8f=np20py312hffff8d2_1 18 | - gnuradio-funcube=3.10.0.rc3=py312h0e0e949_12 19 | - gnuradio-gpredict-doppler=0.0.0.20250303.dev+g9473cbf=unix_py_1 20 | - gnuradio-hermeslite2=1.0.0.0.post20250305+g2e66561=np20py312heb6a550_0 21 | - gnuradio-hpsdr=0.0.0.20250304.dev+g7748cc9=np20py312heb6a550_1 22 | - gnuradio-ieee802_11=0.0.0.20250304.dev+g761bdd9=np20py312h4434e41_2 23 | - gnuradio-ieee802_15_4=3.6.post20250304+g61f4c4a=np20py312hd578418_1 24 | - gnuradio-inspector=0.0.0.20250303.dev+gad6a69e=np20py312h2d400b8_2 25 | - gnuradio-iqbalance=0.38.2=py312he23ff6d_7 26 | - gnuradio-iridium=1!1.0.0=py312h07368fe_16 27 | - gnuradio-leo=1.0.0.post20250214+g8f62b92=np20py312h9c9c44e_2 28 | - gnuradio-lora_sdr=0.0.0.20250305.dev+ga8143cb=np20py312hd578418_0 29 | - gnuradio-m2k=1.0.0=py312h2e1c864_13 30 | - gnuradio-osmosdr=0.2.6=py312h9ad487b_7 31 | - gnuradio-paint=0.0.0.20250303.dev+gfb4f7b6=np20py312hd578418_2 32 | - gnuradio-radar=0.0.0.20250220.dev+g92adce2=np20py312hcc19a4a_1 33 | - gnuradio-rds=3.10.post20250305+gc1cba54=np20py312heb6a550_0 34 | - gnuradio-satellites=5.7.0=py312he263c01_1 35 | - gnuradio=3.10.12.0=py312hbe36d5e_1 36 | - gqrx=2.17.6=py312h2d3ebc0_1 37 | - hackrf=2024.02.1=hdd0dd80_1 38 | - hamlib-all=4.6.2=linux_2 39 | - inspectrum=0.3.1=ha6d2d91_0 40 | - ipython=9.0.2=pyhfb0248b_0 41 | - libiio=0.26=h72120ad_1 42 | - libm2k=0.9.0=py312h9e812b1_1 43 | - limesuite=23.11.0=h00f8104_1 44 | - m17-cxx-demod=2.3.3=hf62ac73_5 45 | - matplotlib=3.10.1=py312h8025657_0 46 | - mirisdr=2.0.0=h86ecc28_1 47 | - numpy=2.2.3=py312hce01fe4_0 48 | - pandas=2.2.3=py312ha2895bd_2 49 | - pyadi-iio=0.0.19=pyhd8ed1ab_0 50 | - pyfda=0.9.2=pyh9208f05_1 51 | - python=3.12.9=h1683364_1_cpython 52 | - rtl-sdr=2.0.2=h86ecc28_3 53 | - scipy=1.15.2=py312hb5459e8_0 54 | - soapysdr-module-airspy=0.2.0=he88f3d8_0 55 | - soapysdr-module-airspyhf=0.2.0=he88f3d8_0 56 | - soapysdr-module-audio=0.1.1=h4356ce9_2 57 | - soapysdr-module-bladerf=0.4.1=hbad66d3_0 58 | - soapysdr-module-fcdpp=0.1.1=h63b6e07_0 59 | - soapysdr-module-hackrf=0.3.4=he88f3d8_0 60 | - soapysdr-module-lms7=23.11.0=hd9ae2f7_1 61 | - soapysdr-module-netsdr=0.2.0=hc0426f7_1 62 | - soapysdr-module-plutosdr=0.2.2=h0dffcbf_1 63 | - soapysdr-module-redpitaya=0.1.1=hc0426f7_0 64 | - soapysdr-module-remote=0.5.2=he88f3d8_2 65 | - soapysdr-module-rtlsdr=0.3.3=hd53839e_2 66 | - soapysdr-module-uhd=0.4.1=h008a518_14 67 | - soapysdr-module-volk-converters=0.1.1=hc992928_3 68 | - soapysdr=0.8.1=py312h451a7dd_5 69 | - uhd=4.8.0.0=py312h0ef7e8d_0 70 | name: radioconda 71 | platform: linux-aarch64 72 | version: 2025.03.14 73 | -------------------------------------------------------------------------------- /installer_specs/radioconda-linux-aarch64/LICENSE: -------------------------------------------------------------------------------- 1 | Radioconda installer code uses BSD-3-Clause license as stated below. 2 | Binary packages that come with radioconda have their own licensing terms 3 | and by installing radioconda you agree to the licensing terms of individual 4 | packages as well. These additional licenses can be found in the 5 | pkgs//info/licenses folder of your radioconda installation. 6 | 7 | ============================================================================= 8 | 9 | Copyright (c) 2021, Ryan Volz 10 | All rights reserved. 11 | 12 | Redistribution and use in source and binary forms, with or without 13 | modification, are permitted provided that the following conditions are met: 14 | 15 | 1. Redistributions of source code must retain the above copyright notice, this 16 | list of conditions and the following disclaimer. 17 | 18 | 2. Redistributions in binary form must reproduce the above copyright notice, 19 | this list of conditions and the following disclaimer in the documentation 20 | and/or other materials provided with the distribution. 21 | 22 | 3. Neither the name of the copyright holder nor the names of its contributors 23 | may be used to endorse or promote products derived from this software without 24 | specific prior written permission. 25 | 26 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 27 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 28 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 29 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 30 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 32 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 33 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 34 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 35 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 | -------------------------------------------------------------------------------- /installer_specs/radioconda-linux-aarch64/construct.yaml: -------------------------------------------------------------------------------- 1 | channels: &id001 2 | - conda-forge 3 | - ryanvolz 4 | company: https://github.com/ryanvolz/radioconda 5 | condarc: 6 | channel_priority: strict 7 | channels: *id001 8 | initialize_by_default: true 9 | installer_type: all 10 | keep_pkgs: true 11 | license_file: LICENSE 12 | name: radioconda 13 | post_install: post_install.sh 14 | register_python_default: false 15 | specs: 16 | - _openmp_mutex=4.5=2_gnu 17 | - adwaita-icon-theme=47.0=unix_0 18 | - airspy=1.0.10=h86ecc28_1 19 | - airspyhf=1.6.8=h86ecc28_1 20 | - alsa-lib=1.2.13=h86ecc28_0 21 | - alsa-plugins=1.2.12=hce16396_1 22 | - aom=3.9.1=hcccb83c_0 23 | - appdirs=1.4.4=pyhd8ed1ab_1 24 | - archspec=0.2.5=pyhd8ed1ab_0 25 | - armadillo=14.4.0=h3b5eff6_0 26 | - arpack=3.9.1=nompi_h6fc4d3a_102 27 | - asciimatics=1.15.0=pyhd8ed1ab_1 28 | - asttokens=3.0.0=pyhd8ed1ab_1 29 | - at-spi2-atk=2.38.0=h1f2db35_3 30 | - at-spi2-core=2.40.3=h1f2db35_0 31 | - atk-1.0=2.38.0=hedc4a1f_2 32 | - attr=2.5.1=h4e544f5_1 33 | - attrs=25.3.0=pyh71513ae_0 34 | - bcrypt=4.3.0=py312h8cbf658_0 35 | - bidict=0.23.1=pyhd8ed1ab_1 36 | - bladerf=2024.05=h86ecc28_2 37 | - blinker=1.9.0=pyhff2d567_0 38 | - boltons=24.0.0=pyhd8ed1ab_1 39 | - brotli-bin=1.1.0=h86ecc28_2 40 | - brotli-python=1.1.0=py312h6f74592_2 41 | - brotli=1.1.0=h86ecc28_2 42 | - bzip2=1.0.8=h68df207_7 43 | - c-ares=1.34.4=h86ecc28_0 44 | - ca-certificates=2025.1.31=hcefe29a_0 45 | - cached-property=1.5.2=hd8ed1ab_1 46 | - cached_property=1.5.2=pyha770c72_1 47 | - cairo=1.18.4=h83712da_0 48 | - certifi=2025.1.31=pyhd8ed1ab_0 49 | - cffi=1.17.1=py312hac81daf_0 50 | - charset-normalizer=3.4.1=pyhd8ed1ab_0 51 | - click=8.1.8=pyh707e725_0 52 | - codec2=1.2.0=h86ecc28_3 53 | - colorama=0.4.6=pyhd8ed1ab_1 54 | - conda-libmamba-solver=24.9.0=pyhd8ed1ab_0 55 | - conda-package-handling=2.4.0=pyh7900ff3_2 56 | - conda-package-streaming=0.11.0=pyhd8ed1ab_1 57 | - conda=24.11.3=py312h996f985_0 58 | - construct=2.10.70=pyhd8ed1ab_0 59 | - contourpy=1.3.1=py312h451a7dd_0 60 | - cryptography=44.0.2=py312he723553_0 61 | - cycler=0.12.1=pyhd8ed1ab_1 62 | - cyrus-sasl=2.1.27=hf6b2984_7 63 | - dav1d=1.2.1=h31becfc_0 64 | - dbus=1.13.6=h12b9eeb_3 65 | - decorator=5.2.1=pyhd8ed1ab_0 66 | - digital_rf=2.6.11=py312h91a0b02_0 67 | - distro=1.9.0=pyhd8ed1ab_1 68 | - docutils=0.21.2=pyhd8ed1ab_1 69 | - double-conversion=3.3.1=h5ad3122_0 70 | - elfutils=0.192=h63239f7_1 71 | - ephem=4.2=py312hb2c0f52_0 72 | - epoxy=1.5.10=h4e544f5_1 73 | - exceptiongroup=1.2.2=pyhd8ed1ab_1 74 | - executing=2.1.0=pyhd8ed1ab_1 75 | - expat=2.6.4=h5ad3122_0 76 | - ffmpeg=7.1.1=gpl_hbae2ecc_701 77 | - fftw=3.3.10=nompi_h020dacd_110 78 | - flask-socketio=5.5.1=pyh29332c3_0 79 | - flask=3.1.0=pyhd8ed1ab_1 80 | - fmt=11.0.2=h70be974_0 81 | - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 82 | - font-ttf-inconsolata=3.000=h77eed37_0 83 | - font-ttf-source-code-pro=2.038=h77eed37_0 84 | - font-ttf-ubuntu=0.83=h77eed37_3 85 | - fontconfig=2.15.0=h8dda3cd_1 86 | - fonts-conda-ecosystem=1=0 87 | - fonts-conda-forge=1=0 88 | - fonttools=4.56.0=py312hcc812fe_0 89 | - freetype=2.13.3=he93130f_0 90 | - fribidi=1.0.10=hb9de7d4_0 91 | - frozendict=2.4.6=py312hb2c0f52_0 92 | - fs=2.4.16=pyhd8ed1ab_0 93 | - future=1.0.0=pyhd8ed1ab_2 94 | - gdk-pixbuf=2.42.12=ha61d561_0 95 | - gettext-tools=0.23.1=h5ad3122_0 96 | - gettext=0.23.1=h5ad3122_0 97 | - gevent-websocket=0.10.1=py_0 98 | - gevent=24.11.1=py312hc4bf99b_0 99 | - gflags=2.2.2=h5ad3122_1005 100 | - glew=2.1.0=h01db608_2 101 | - glfw=3.4=h31becfc_0 102 | - glib-tools=2.82.2=h78ca943_1 103 | - glib=2.82.2=h09e00fb_1 104 | - glog=0.7.1=h468a4a4_0 105 | - gmp=6.3.0=h0a1ffab_2 106 | - gnss-sdr=0.0.19=hc7309ab_8 107 | - gnuradio-adsb=0.0.0.20250304.dev+g9645757=unix_py_1 108 | - gnuradio-core=3.10.12.0=py312ha9ddad5_1 109 | - gnuradio-dect2=0.0.0.20250304.dev+g27a3d6=np20py312heb6a550_1 110 | - gnuradio-filerepeater=0.0.0.20250304.dev+gec6b386=np20py312hdabc401_2 111 | - gnuradio-foo=0.0.0.20250304.dev+g9e0e2=np20py312hfed7f62_1 112 | - gnuradio-fosphor=0.0.0.20250304.dev+g85a0b8f=np20py312hffff8d2_1 113 | - gnuradio-funcube=3.10.0.rc3=py312h0e0e949_12 114 | - gnuradio-gpredict-doppler=0.0.0.20250303.dev+g9473cbf=unix_py_1 115 | - gnuradio-grc=3.10.12.0=py312h0d1bda0_1 116 | - gnuradio-hermeslite2=1.0.0.0.post20250305+g2e66561=np20py312heb6a550_0 117 | - gnuradio-hpsdr=0.0.0.20250304.dev+g7748cc9=np20py312heb6a550_1 118 | - gnuradio-ieee802_11=0.0.0.20250304.dev+g761bdd9=np20py312h4434e41_2 119 | - gnuradio-ieee802_15_4=3.6.post20250304+g61f4c4a=np20py312hd578418_1 120 | - gnuradio-iio=3.10.12.0=py312he222db9_1 121 | - gnuradio-inspector=0.0.0.20250303.dev+gad6a69e=np20py312h2d400b8_2 122 | - gnuradio-iqbalance=0.38.2=py312he23ff6d_7 123 | - gnuradio-iridium=1!1.0.0=py312h07368fe_16 124 | - gnuradio-leo-data=1.0.0.post20250214+g8f62b92=unix_2 125 | - gnuradio-leo=1.0.0.post20250214+g8f62b92=np20py312h9c9c44e_2 126 | - gnuradio-lora_sdr=0.0.0.20250305.dev+ga8143cb=np20py312hd578418_0 127 | - gnuradio-m2k=1.0.0=py312h2e1c864_13 128 | - gnuradio-osmosdr=0.2.6=py312h9ad487b_7 129 | - gnuradio-paint=0.0.0.20250303.dev+gfb4f7b6=np20py312hd578418_2 130 | - gnuradio-pmt=3.10.12.0=py312h1efb967_1 131 | - gnuradio-qtgui=3.10.12.0=py312hffe2cdf_1 132 | - gnuradio-radar=0.0.0.20250220.dev+g92adce2=np20py312hcc19a4a_1 133 | - gnuradio-rds=3.10.post20250305+gc1cba54=np20py312heb6a550_0 134 | - gnuradio-satellites=5.7.0=py312he263c01_1 135 | - gnuradio-soapy=3.10.12.0=py312h2092bfa_1 136 | - gnuradio-uhd=3.10.12.0=py312h6a79ccd_1 137 | - gnuradio-video-sdl=3.10.12.0=py312h8aaf11b_1 138 | - gnuradio-zeromq=3.10.12.0=py312h5358668_1 139 | - gnuradio=3.10.12.0=py312hbe36d5e_1 140 | - gnutls=3.8.9=ha125074_0 141 | - gqrx=2.17.6=py312h2d3ebc0_1 142 | - graphite2=1.3.13=h2f0025b_1003 143 | - greenlet=3.1.1=py312h6f74592_1 144 | - gsl=2.7=h294027d_0 145 | - gst-plugins-base=1.24.7=h570c1df_0 146 | - gstreamer-orc=0.4.41=hd9811ac_0 147 | - gstreamer=1.24.7=h37d20eb_0 148 | - gtest=1.15.2=h70be974_0 149 | - gtk3=3.24.43=hd0cad38_4 150 | - h11=0.14.0=pyhd8ed1ab_1 151 | - h2=4.2.0=pyhd8ed1ab_0 152 | - h5py=3.13.0=nompi_py312h9a738b8_100 153 | - hackrf=2024.02.1=hdd0dd80_1 154 | - hamlib-all=4.6.2=linux_2 155 | - hamlib-lua=4.6.2=lua54h86ecc28_2 156 | - hamlib-perl=4.6.2=pl5321h86ecc28_2 157 | - hamlib-python=4.6.2=py312h52516f5_2 158 | - hamlib-tcl=4.6.2=h397889b_2 159 | - hamlib=4.6.2=hd3c86e4_2 160 | - harfbuzz=10.4.0=hb5e3f52_0 161 | - hdf5=1.14.3=nompi_h6ed7ac7_109 162 | - hicolor-icon-theme=0.17=h8af1aa0_2 163 | - hpack=4.1.0=pyhd8ed1ab_0 164 | - hyperframe=6.1.0=pyhd8ed1ab_0 165 | - icu=75.1=hf9b3779_0 166 | - idna=3.10=pyhd8ed1ab_1 167 | - importlib-metadata=8.6.1=pyha770c72_0 168 | - importlib_resources=6.5.2=pyhd8ed1ab_0 169 | - inspectrum=0.3.1=ha6d2d91_0 170 | - ipython=9.0.2=pyhfb0248b_0 171 | - ipython_pygments_lexers=1.1.1=pyhd8ed1ab_0 172 | - itsdangerous=2.2.0=pyhd8ed1ab_1 173 | - jack=1.9.22=h5c6c0ed_2 174 | - jedi=0.19.2=pyhd8ed1ab_1 175 | - jinja2=3.1.6=pyhd8ed1ab_0 176 | - jsonpatch=1.33=pyhd8ed1ab_1 177 | - jsonpointer=3.0.0=py312h996f985_1 178 | - jsonschema-specifications=2024.10.1=pyhd8ed1ab_1 179 | - jsonschema=4.23.0=pyhd8ed1ab_1 180 | - keyutils=1.6.1=h4e544f5_0 181 | - kiwisolver=1.4.8=py312h17cf362_0 182 | - krb5=1.21.3=h50a48e9_0 183 | - lame=3.100=h4e544f5_1003 184 | - lcms2=2.17=hc88f144_0 185 | - ld_impl_linux-aarch64=2.43=h80caac9_4 186 | - lerc=4.0.0=h4de3ea5_0 187 | - libabseil=20240722.0=cxx17_h18dbdb1_4 188 | - libad9361-iio-c=0.3=hc0d44b4_1 189 | - libaec=1.1.3=h2f0025b_0 190 | - libaio=0.3.113=h4e544f5_0 191 | - libairspy=1.0.10=h86ecc28_1 192 | - libairspyhf=1.6.8=h86ecc28_1 193 | - libarchive=3.7.7=h6223a6c_3 194 | - libasprintf-devel=0.23.1=h5e0f5ae_0 195 | - libasprintf=0.23.1=h5e0f5ae_0 196 | - libass=0.17.3=hdba415e_1 197 | - libbladerf-python=2024.05=py_2 198 | - libbladerf2=2024.05=h86ecc28_2 199 | - libblas=3.9.0=31_h1a9f1db_openblas 200 | - libboost=1.86.0=h4d13611_3 201 | - libbrotlicommon=1.1.0=h86ecc28_2 202 | - libbrotlidec=1.1.0=h86ecc28_2 203 | - libbrotlienc=1.1.0=h86ecc28_2 204 | - libcap=2.75=h51d75a7_0 205 | - libcblas=3.9.0=31_hab92f65_openblas 206 | - libclang-cpp19.1=19.1.7=default_he324ac1_1 207 | - libclang13=19.1.7=default_h4390ef5_1 208 | - libcodec2=1.2.0=h86ecc28_3 209 | - libcorrect=0.0.0=hb4cce97_0 210 | - libcups=2.3.3=h405e4a8_4 211 | - libcurl=8.12.1=h6702fde_0 212 | - libdb=6.2.32=h01db608_0 213 | - libdeflate=1.23=h5e3c512_0 214 | - libdrm=2.4.124=h86ecc28_0 215 | - libedit=3.1.20250104=pl5321h976ea20_0 216 | - libegl=1.7.0=hd24410f_2 217 | - libev=4.33=h31becfc_2 218 | - libevent=2.1.12=h4ba1bb4_1 219 | - libexpat=2.6.4=h5ad3122_0 220 | - libffi=3.4.6=he21f813_0 221 | - libflac=1.4.3=h2f0025b_0 222 | - libgcc-ng=14.2.0=he9431aa_2 223 | - libgcc=14.2.0=he277a41_2 224 | - libgcrypt-lib=1.11.0=h86ecc28_2 225 | - libgettextpo-devel=0.23.1=h5ad3122_0 226 | - libgettextpo=0.23.1=h5ad3122_0 227 | - libgfortran-ng=14.2.0=he9431aa_2 228 | - libgfortran5=14.2.0=hb6113d0_2 229 | - libgfortran=14.2.0=he9431aa_2 230 | - libgirepository=1.82.0=hdbe9fd5_0 231 | - libgl=1.7.0=hd24410f_2 232 | - libglib=2.82.2=hc486b8e_1 233 | - libglu=9.0.3=hc7f7585_0 234 | - libglvnd=1.7.0=hd24410f_2 235 | - libglx=1.7.0=hd24410f_2 236 | - libgomp=14.2.0=he277a41_2 237 | - libgpg-error=1.51=h05609ea_1 238 | - libhackrf0=2024.02.1=h86ecc28_1 239 | - libhamlib4=4.6.2=h5ad3122_2 240 | - libhidapi=0.14.0=h31becfc_0 241 | - libhwloc=2.11.2=default_h2c612a5_1001 242 | - libiconv=1.18=hc99b53d_1 243 | - libidn2=2.3.8=h53e0a65_0 244 | - libiio-c=0.26=hfc39cb9_1 245 | - libiio=0.26=h72120ad_1 246 | - libjpeg-turbo=3.0.0=h31becfc_1 247 | - liblapack=3.9.0=31_h411afd4_openblas 248 | - liblimesuite=23.11.0=h5ad3122_1 249 | - libliquid1=1.6.0=hdd0dd80_2 250 | - libllvm19=19.1.7=h2edbd07_1 251 | - liblzma=5.6.4=h86ecc28_0 252 | - libm2k=0.9.0=py312h9e812b1_1 253 | - libmamba=1.5.12=h4f7d7cb_0 254 | - libmambapy=1.5.12=py312h3a133d2_0 255 | - libmatio=1.5.28=h939d0d8_2 256 | - libmicrohttpd=1.0.1=hbc975ca_1 257 | - libmirisdr4=2.0.0=h86ecc28_1 258 | - libnghttp2=1.64.0=hc8609a4_0 259 | - libnsl=2.0.1=h31becfc_0 260 | - libntlm=1.4=hf897c2e_1002 261 | - libogg=1.3.5=h0b9eccb_0 262 | - libopenblas=0.3.29=pthreads_h9d3fd7e_0 263 | - libopengl=1.7.0=hd24410f_2 264 | - libopenvino-arm-cpu-plugin=2025.0.0=hd63d6c0_2 265 | - libopenvino-auto-batch-plugin=2025.0.0=hf15766e_2 266 | - libopenvino-auto-plugin=2025.0.0=hf15766e_2 267 | - libopenvino-hetero-plugin=2025.0.0=ha8e9e04_2 268 | - libopenvino-ir-frontend=2025.0.0=ha8e9e04_2 269 | - libopenvino-onnx-frontend=2025.0.0=h2c07a0f_2 270 | - libopenvino-paddle-frontend=2025.0.0=h2c07a0f_2 271 | - libopenvino-pytorch-frontend=2025.0.0=h5ad3122_2 272 | - libopenvino-tensorflow-frontend=2025.0.0=h8231d02_2 273 | - libopenvino-tensorflow-lite-frontend=2025.0.0=h5ad3122_2 274 | - libopenvino=2025.0.0=hd63d6c0_2 275 | - libopus=1.3.1=hf897c2e_1 276 | - libosmodsp0=0.4.0=hdd0dd80_2 277 | - libpcap=1.10.4=h31becfc_1 278 | - libpciaccess=0.18=h31becfc_0 279 | - libpng=1.6.47=hec79eb8_0 280 | - libpq=17.4=hf590da8_0 281 | - libprotobuf=5.28.3=h44a3b7b_1 282 | - librsvg=2.58.4=h9b423fc_2 283 | - librtaudio6=5.2.0=he7669aa_3 284 | - libsndfile=1.2.2=h79657aa_1 285 | - libsodium=1.0.20=h68df207_0 286 | - libsolv=0.7.30=h62756fc_0 287 | - libsqlite=3.49.1=h5eb1b54_1 288 | - libssh2=1.11.1=ha41c0db_0 289 | - libstdcxx-ng=14.2.0=hf1166c9_2 290 | - libstdcxx=14.2.0=h3f4de04_2 291 | - libsystemd0=257.4=h2bb824b_1 292 | - libtasn1=4.20.0=h86ecc28_0 293 | - libthrift=0.21.0=h154c74f_0 294 | - libtiff=4.7.0=h88f7998_3 295 | - libudev1=257.4=h7b9e449_1 296 | - libunistring=0.9.10=hf897c2e_0 297 | - libunwind=1.6.2=h01db608_0 298 | - liburing=2.9=h17cf362_0 299 | - libusb=1.0.27=h86ecc28_101 300 | - libuuid=2.38.1=hb4cce97_0 301 | - libuv=1.50.0=h86ecc28_0 302 | - libvorbis=1.3.7=h01db608_0 303 | - libvpx=1.14.1=h0a1ffab_0 304 | - libwebp-base=1.5.0=h0886dbf_0 305 | - libxcb=1.17.0=h262b8f6_0 306 | - libxcrypt=4.4.36=h31becfc_1 307 | - libxkbcommon=1.8.1=h2ef6bd0_0 308 | - libxml2=2.13.6=h2e0c361_0 309 | - libxslt=1.1.39=h1cc9640_0 310 | - libzlib=1.3.1=h86ecc28_2 311 | - limesuite=23.11.0=h00f8104_1 312 | - lua=5.4.6=h6e35974_1 313 | - lxml=5.3.1=py312h1ce91a6_0 314 | - lz4-c=1.10.0=h5ad3122_1 315 | - lzo=2.10=h31becfc_1001 316 | - m17-cxx-demod=2.3.3=hf62ac73_5 317 | - mako=1.3.9=pyhd8ed1ab_0 318 | - mamba=1.5.12=py312hd80a4d2_0 319 | - markdown=3.6=pyhd8ed1ab_0 320 | - markupsafe=3.0.2=py312h74ce7d3_1 321 | - matplotlib-base=3.10.1=py312h965bf68_0 322 | - matplotlib-inline=0.1.7=pyhd8ed1ab_1 323 | - matplotlib=3.10.1=py312h8025657_0 324 | - menuinst=2.2.0=py312h996f985_0 325 | - mesalib=25.0.1=h1d34c93_0 326 | - mirisdr=2.0.0=h86ecc28_1 327 | - mpg123=1.32.9=h65af167_0 328 | - mplcursors=0.6=pyhd8ed1ab_1 329 | - munkres=1.1.4=pyh9f0ad1d_0 330 | - mysql-common=9.0.1=h3f5c77f_5 331 | - mysql-libs=9.0.1=h11569fd_5 332 | - ncurses=6.5=ha32ae93_3 333 | - nettle=3.9.1=h9d1147b_0 334 | - nspr=4.36=h5ad3122_0 335 | - nss=3.108=h7e26b49_0 336 | - numexpr=2.10.2=py312h4c002e7_0 337 | - numpy=2.2.3=py312hce01fe4_0 338 | - ocl-icd-system=1.0.0=1 339 | - ocl-icd=2.3.2=h86ecc28_2 340 | - opencl-headers=2024.10.24=h5ad3122_0 341 | - openh264=2.6.0=h0564a2a_0 342 | - openjpeg=2.5.3=h3f56577_0 343 | - openldap=2.6.9=h30c48ee_0 344 | - openssl=3.4.1=hd08dc88_0 345 | - p11-kit=0.24.1=h9f2702f_0 346 | - packaging=24.2=pyhd8ed1ab_2 347 | - pandas=2.2.3=py312ha2895bd_2 348 | - pango=1.56.2=hd49db62_0 349 | - paramiko=3.5.1=pyhd8ed1ab_0 350 | - parso=0.8.4=pyhd8ed1ab_1 351 | - pcre2=10.44=h070dd5b_2 352 | - perl=5.32.1=7_h31becfc_perl5 353 | - pexpect=4.9.0=pyhd8ed1ab_1 354 | - pickleshare=0.7.5=pyhd8ed1ab_1004 355 | - pillow=11.1.0=py312h719f0cf_0 356 | - pip=25.0.1=pyh8b19718_0 357 | - pixman=0.44.2=h86a87f0_0 358 | - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 359 | - platformdirs=4.3.6=pyhd8ed1ab_1 360 | - pluggy=1.5.0=pyhd8ed1ab_1 361 | - ply=3.11=pyhd8ed1ab_3 362 | - portaudio=19.7.0=h9d01bbc_0 363 | - prompt-toolkit=3.0.50=pyha770c72_0 364 | - pthread-stubs=0.4=h86ecc28_1002 365 | - ptyprocess=0.7.0=pyhd8ed1ab_1 366 | - pugixml=1.15=h6ef32b0_0 367 | - pulseaudio-client=17.0=h729494f_0 368 | - pure_eval=0.2.3=pyhd8ed1ab_1 369 | - pyadi-iio=0.0.19=pyhd8ed1ab_0 370 | - pybind11-abi=4=hd8ed1ab_3 371 | - pycairo=1.27.0=py312hb14272e_0 372 | - pycosat=0.6.6=py312hb2c0f52_2 373 | - pycparser=2.22=pyh29332c3_1 374 | - pyfda=0.9.2=pyh9208f05_1 375 | - pyfiglet=0.8.post1=py_0 376 | - pygments=2.19.1=pyhd8ed1ab_0 377 | - pygobject=3.50.0=py312h9bef549_1 378 | - pylibiio=0.26=py_1 379 | - pynacl=1.5.0=py312hb2c0f52_4 380 | - pyopengl=3.1.7=pyhd8ed1ab_0 381 | - pyparsing=3.2.1=pyhd8ed1ab_0 382 | - pyqt5-sip=12.12.2=py312h2aa54b4_5 383 | - pyqt=5.15.9=py312hd46c331_5 384 | - pyqtgraph=0.13.7=pyhd8ed1ab_1 385 | - pyside6=6.8.2=py312hdd999d0_1 386 | - pysocks=1.7.1=pyha55dd90_7 387 | - python-dateutil=2.9.0.post0=pyhff2d567_1 388 | - python-engineio=4.11.2=pyhff2d567_0 389 | - python-socketio=5.12.1=pyhd8ed1ab_0 390 | - python-tzdata=2025.1=pyhd8ed1ab_0 391 | - python=3.12.9=h1683364_1_cpython 392 | - python_abi=3.12=5_cp312 393 | - pytz=2024.1=pyhd8ed1ab_0 394 | - pywin32-on-windows=0.1.0=pyh1179c8e_3 395 | - pyyaml=6.0.2=py312hcc812fe_2 396 | - pyzmq=26.3.0=py312h2427ae1_0 397 | - qdarkstyle=3.2.3=pyhd8ed1ab_1 398 | - qhull=2020.2=h70be974_5 399 | - qt-main=5.15.15=hcc483f7_2 400 | - qt6-main=6.8.2=ha0a94ed_0 401 | - qtpy=2.4.3=pyhd8ed1ab_0 402 | - qwt=6.3.0=h473b47b_0 403 | - readline=8.2=h8382b9d_2 404 | - referencing=0.36.2=pyh29332c3_0 405 | - reproc-cpp=14.2.4.post0=h2f0025b_1 406 | - reproc=14.2.4.post0=h31becfc_1 407 | - requests=2.32.3=pyhd8ed1ab_1 408 | - rpds-py=0.23.1=py312he7a34ca_0 409 | - rtl-sdr=2.0.2=h86ecc28_3 410 | - ruamel.yaml.clib=0.2.8=py312hb2c0f52_1 411 | - ruamel.yaml=0.18.10=py312hb2c0f52_0 412 | - scipy=1.15.2=py312hb5459e8_0 413 | - sdl2=2.32.50=h7851d19_1 414 | - sdl3=3.2.8=h9cc03ad_0 415 | - sdl=1.2.68=h7851d19_1 416 | - setuptools=75.8.2=pyhff2d567_0 417 | - simple-websocket=1.1.0=pyhd8ed1ab_0 418 | - sip=6.8.6=py312h3178705_1 419 | - six=1.17.0=pyhd8ed1ab_0 420 | - snappy=1.2.1=hd4fb6f5_1 421 | - soapysdr-module-airspy=0.2.0=he88f3d8_0 422 | - soapysdr-module-airspyhf=0.2.0=he88f3d8_0 423 | - soapysdr-module-audio=0.1.1=h4356ce9_2 424 | - soapysdr-module-bladerf=0.4.1=hbad66d3_0 425 | - soapysdr-module-fcdpp=0.1.1=h63b6e07_0 426 | - soapysdr-module-hackrf=0.3.4=he88f3d8_0 427 | - soapysdr-module-lms7=23.11.0=hd9ae2f7_1 428 | - soapysdr-module-netsdr=0.2.0=hc0426f7_1 429 | - soapysdr-module-plutosdr=0.2.2=h0dffcbf_1 430 | - soapysdr-module-redpitaya=0.1.1=hc0426f7_0 431 | - soapysdr-module-remote=0.5.2=he88f3d8_2 432 | - soapysdr-module-rtlsdr=0.3.3=hd53839e_2 433 | - soapysdr-module-uhd=0.4.1=h008a518_14 434 | - soapysdr-module-volk-converters=0.1.1=hc992928_3 435 | - soapysdr=0.8.1=py312h451a7dd_5 436 | - spdlog=1.15.1=hc4929b9_0 437 | - stack_data=0.6.3=pyhd8ed1ab_1 438 | - superlu=5.2.2=h4b58547_0 439 | - svt-av1=3.0.1=h5ad3122_0 440 | - tbb=2022.0.0=h243be18_0 441 | - tk=8.6.13=h194ca79_0 442 | - toml=0.10.2=pyhd8ed1ab_1 443 | - tomli=2.2.1=pyhd8ed1ab_1 444 | - tornado=6.4.2=py312h52516f5_0 445 | - tqdm=4.67.1=pyhd8ed1ab_1 446 | - traitlets=5.14.3=pyhd8ed1ab_1 447 | - truststore=0.10.1=pyh29332c3_0 448 | - typing_extensions=4.12.2=pyha770c72_1 449 | - tzdata=2025a=h78e105d_0 450 | - uhd=4.8.0.0=py312h0ef7e8d_0 451 | - unicodedata2=16.0.0=py312hb2c0f52_0 452 | - urllib3=2.3.0=pyhd8ed1ab_0 453 | - volk-gnss-sdr=0.0.19=ha105d01_8 454 | - volk=3.2.0=hf20420f_0 455 | - watchdog=6.0.0=py312h8025657_0 456 | - wayland=1.23.1=h698ed42_0 457 | - wcwidth=0.2.13=pyhd8ed1ab_1 458 | - websocket-client=1.8.0=pyhd8ed1ab_1 459 | - werkzeug=3.1.3=pyhd8ed1ab_1 460 | - wheel=0.45.1=pyhd8ed1ab_1 461 | - wsproto=1.2.0=pyhd8ed1ab_1 462 | - wxwidgets=3.2.6=ha63e5ef_3 463 | - x264=1!164.3095=h4e544f5_2 464 | - x265=3.5=hdd96247_3 465 | - xcb-util-cursor=0.1.5=h86ecc28_0 466 | - xcb-util-image=0.4.0=h5c728e9_2 467 | - xcb-util-keysyms=0.4.1=h5c728e9_0 468 | - xcb-util-renderutil=0.3.10=h5c728e9_0 469 | - xcb-util-wm=0.4.2=h5c728e9_0 470 | - xcb-util=0.4.1=h5c728e9_2 471 | - xkeyboard-config=2.43=h86ecc28_0 472 | - xorg-libice=1.1.2=h86ecc28_0 473 | - xorg-libsm=1.2.6=h0808dbd_0 474 | - xorg-libx11=1.8.12=hca56bd8_0 475 | - xorg-libxau=1.0.12=h86ecc28_0 476 | - xorg-libxcomposite=0.4.6=h86ecc28_2 477 | - xorg-libxcursor=1.2.3=h86ecc28_0 478 | - xorg-libxdamage=1.1.6=h86ecc28_0 479 | - xorg-libxdmcp=1.1.5=h57736b2_0 480 | - xorg-libxext=1.3.6=h57736b2_0 481 | - xorg-libxfixes=6.0.1=h57736b2_0 482 | - xorg-libxi=1.8.2=h57736b2_0 483 | - xorg-libxinerama=1.1.5=h5ad3122_1 484 | - xorg-libxrandr=1.5.4=h86ecc28_0 485 | - xorg-libxrender=0.9.12=h86ecc28_0 486 | - xorg-libxshmfence=1.3.3=h86ecc28_0 487 | - xorg-libxtst=1.2.5=h57736b2_3 488 | - xorg-libxxf86vm=1.1.6=h86ecc28_0 489 | - yaml-cpp=0.8.0=h2f0025b_0 490 | - yaml=0.2.5=hf897c2e_2 491 | - zeromq=4.3.5=h5efb499_7 492 | - zipp=3.21.0=pyhd8ed1ab_1 493 | - zlib=1.3.1=h86ecc28_2 494 | - zope.event=5.0=pyhd8ed1ab_1 495 | - zope.interface=7.2=py312h52516f5_0 496 | - zstandard=0.23.0=py312hb2c0f52_1 497 | - zstd=1.5.7=hbcf94c1_1 498 | user_requested_specs: 499 | - airspy 500 | - airspyhf 501 | - alsa-plugins 502 | - bladerf 503 | - codec2 504 | - conda 505 | - digital_rf 506 | - ephem 507 | - gnss-sdr 508 | - gnuradio 509 | - gnuradio-adsb 510 | - gnuradio-dect2 511 | - gnuradio-filerepeater 512 | - gnuradio-foo 513 | - gnuradio-fosphor 514 | - gnuradio-funcube 515 | - gnuradio-gpredict-doppler 516 | - gnuradio-hermeslite2 517 | - gnuradio-hpsdr 518 | - gnuradio-ieee802_11 519 | - gnuradio-ieee802_15_4 520 | - gnuradio-inspector 521 | - gnuradio-iqbalance 522 | - gnuradio-iridium 523 | - gnuradio-leo 524 | - gnuradio-lora_sdr 525 | - gnuradio-m2k 526 | - gnuradio-osmosdr 527 | - gnuradio-paint 528 | - gnuradio-radar 529 | - gnuradio-rds 530 | - gnuradio-satellites 531 | - gqrx 532 | - hackrf 533 | - hamlib-all 534 | - inspectrum 535 | - ipython 536 | - libiio 537 | - libm2k 538 | - limesuite 539 | - m17-cxx-demod 540 | - mamba 541 | - matplotlib 542 | - mirisdr 543 | - numpy 544 | - pandas 545 | - pyadi-iio 546 | - pyfda 547 | - python 548 | - rtl-sdr 549 | - scipy 550 | - soapysdr 551 | - soapysdr-module-airspy 552 | - soapysdr-module-airspyhf 553 | - soapysdr-module-audio 554 | - soapysdr-module-bladerf 555 | - soapysdr-module-fcdpp 556 | - soapysdr-module-hackrf 557 | - soapysdr-module-lms7 558 | - soapysdr-module-netsdr 559 | - soapysdr-module-plutosdr 560 | - soapysdr-module-redpitaya 561 | - soapysdr-module-remote 562 | - soapysdr-module-rtlsdr 563 | - soapysdr-module-uhd 564 | - soapysdr-module-volk-converters 565 | - uhd 566 | version: 2025.03.14 567 | write_condarc: true 568 | -------------------------------------------------------------------------------- /installer_specs/radioconda-linux-aarch64/post_install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | PREFIX="${PREFIX:-$2/radioconda}" 3 | rm -f $PREFIX/pkgs/*.tar.bz2 $PREFIX/pkgs/*.conda 4 | exit 0 5 | -------------------------------------------------------------------------------- /installer_specs/radioconda-linux-ppc64le.yml: -------------------------------------------------------------------------------- 1 | channels: 2 | - conda-forge 3 | - ryanvolz 4 | dependencies: 5 | - airspy=1.0.10=h190368a_1 6 | - airspyhf=1.6.8=h190368a_1 7 | - alsa-plugins=1.2.12=h4577cdd_1 8 | - bladerf=2024.05=h190368a_2 9 | - codec2=1.2.0=h190368a_3 10 | - digital_rf=2.6.11=py312h24b6a2b_0 11 | - ephem=4.2=py312h2984477_0 12 | - gnss-sdr=0.0.19=h99d4115_8 13 | - gnuradio-adsb=0.0.0.20250304.dev+g9645757=unix_py_1 14 | - gnuradio-dect2=0.0.0.20250304.dev+g27a3d6=np20py312h4505ba2_1 15 | - gnuradio-filerepeater=0.0.0.20250304.dev+gec6b386=np20py312h33f3ff4_2 16 | - gnuradio-foo=0.0.0.20250304.dev+g9e0e2=np20py312hc3e7d76_1 17 | - gnuradio-fosphor=0.0.0.20250304.dev+g85a0b8f=np20py312hd5e0354_1 18 | - gnuradio-funcube=3.10.0.rc3=py312h61192de_12 19 | - gnuradio-gpredict-doppler=0.0.0.20250303.dev+g9473cbf=unix_py_1 20 | - gnuradio-hermeslite2=1.0.0.0.post20250305+g2e66561=np20py312h4505ba2_0 21 | - gnuradio-hpsdr=0.0.0.20250304.dev+g7748cc9=np20py312h4505ba2_1 22 | - gnuradio-ieee802_11=0.0.0.20250304.dev+g761bdd9=np20py312h5e2e7f3_2 23 | - gnuradio-ieee802_15_4=3.6.post20250304+g61f4c4a=np20py312hb29d5ec_1 24 | - gnuradio-inspector=0.0.0.20250303.dev+gad6a69e=np20py312hb37a15b_2 25 | - gnuradio-iqbalance=0.38.2=py312hf51c7de_7 26 | - gnuradio-iridium=1!1.0.0=py312hb17df1d_16 27 | - gnuradio-leo=1.0.0.post20250214+g8f62b92=np20py312he29e660_2 28 | - gnuradio-lora_sdr=0.0.0.20250305.dev+ga8143cb=np20py312hb29d5ec_0 29 | - gnuradio-m2k=1.0.0=py312h4d0ff1b_13 30 | - gnuradio-osmosdr=0.2.6=py312h300cd9a_7 31 | - gnuradio-paint=0.0.0.20250303.dev+gfb4f7b6=np20py312hb29d5ec_2 32 | - gnuradio-radar=0.0.0.20250220.dev+g92adce2=np20py312hb656b40_1 33 | - gnuradio-rds=3.10.post20250305+gc1cba54=np20py312h4505ba2_0 34 | - gnuradio-satellites=5.7.0=py312he19e01c_1 35 | - gnuradio=3.10.12.0=py312hd23bcef_1 36 | - gqrx=2.17.6=py312hec09a99_1 37 | - hackrf=2024.02.1=h9528819_1 38 | - hamlib-all=4.6.2=linux_2 39 | - inspectrum=0.3.1=hb0a1fd9_0 40 | - ipython=9.0.2=pyhfb0248b_0 41 | - libiio=0.26=h0167b25_1 42 | - libm2k=0.9.0=py312hfad950e_1 43 | - limesuite=23.11.0=hb7d5b33_1 44 | - m17-cxx-demod=2.3.3=hb5129e9_5 45 | - matplotlib=3.10.1=py312h2344ed7_0 46 | - mirisdr=2.0.0=h190368a_1 47 | - numpy=2.2.3=py312h54c08a6_0 48 | - pandas=2.2.3=py312h2613dcb_2 49 | - pyadi-iio=0.0.19=pyhd8ed1ab_0 50 | - pyfda=0.9.2=pyh9208f05_1 51 | - python=3.12.9=he016669_1_cpython 52 | - rtl-sdr=2.0.2=h190368a_3 53 | - scipy=1.15.2=py312h8c5dd32_0 54 | - soapysdr-module-airspy=0.2.0=h6f8e04d_0 55 | - soapysdr-module-airspyhf=0.2.0=h6f8e04d_0 56 | - soapysdr-module-audio=0.1.1=h96c2adf_2 57 | - soapysdr-module-bladerf=0.4.1=hf8708ca_0 58 | - soapysdr-module-fcdpp=0.1.1=h135aeac_0 59 | - soapysdr-module-hackrf=0.3.4=h6f8e04d_0 60 | - soapysdr-module-lms7=23.11.0=ha119c29_1 61 | - soapysdr-module-netsdr=0.2.0=he97dc58_1 62 | - soapysdr-module-plutosdr=0.2.2=h19da3d8_1 63 | - soapysdr-module-redpitaya=0.1.1=he97dc58_0 64 | - soapysdr-module-remote=0.5.2=h6f8e04d_2 65 | - soapysdr-module-rtlsdr=0.3.3=h7f3508f_2 66 | - soapysdr-module-uhd=0.4.1=h56adf28_14 67 | - soapysdr-module-volk-converters=0.1.1=h3047db8_3 68 | - soapysdr=0.8.1=py312hc0892ed_5 69 | - uhd=4.8.0.0=py312ha2da450_0 70 | name: radioconda 71 | platform: linux-ppc64le 72 | version: 2025.03.14 73 | -------------------------------------------------------------------------------- /installer_specs/radioconda-linux-ppc64le/LICENSE: -------------------------------------------------------------------------------- 1 | Radioconda installer code uses BSD-3-Clause license as stated below. 2 | Binary packages that come with radioconda have their own licensing terms 3 | and by installing radioconda you agree to the licensing terms of individual 4 | packages as well. These additional licenses can be found in the 5 | pkgs//info/licenses folder of your radioconda installation. 6 | 7 | ============================================================================= 8 | 9 | Copyright (c) 2021, Ryan Volz 10 | All rights reserved. 11 | 12 | Redistribution and use in source and binary forms, with or without 13 | modification, are permitted provided that the following conditions are met: 14 | 15 | 1. Redistributions of source code must retain the above copyright notice, this 16 | list of conditions and the following disclaimer. 17 | 18 | 2. Redistributions in binary form must reproduce the above copyright notice, 19 | this list of conditions and the following disclaimer in the documentation 20 | and/or other materials provided with the distribution. 21 | 22 | 3. Neither the name of the copyright holder nor the names of its contributors 23 | may be used to endorse or promote products derived from this software without 24 | specific prior written permission. 25 | 26 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 27 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 28 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 29 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 30 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 32 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 33 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 34 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 35 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 | -------------------------------------------------------------------------------- /installer_specs/radioconda-linux-ppc64le/construct.yaml: -------------------------------------------------------------------------------- 1 | channels: &id001 2 | - conda-forge 3 | - ryanvolz 4 | company: https://github.com/ryanvolz/radioconda 5 | condarc: 6 | channel_priority: strict 7 | channels: *id001 8 | initialize_by_default: true 9 | installer_type: all 10 | keep_pkgs: true 11 | license_file: LICENSE 12 | name: radioconda 13 | post_install: post_install.sh 14 | register_python_default: false 15 | specs: 16 | - _libgcc_mutex=0.1=conda_forge 17 | - _openmp_mutex=4.5=2_gnu 18 | - adwaita-icon-theme=47.0=unix_0 19 | - airspy=1.0.10=h190368a_1 20 | - airspyhf=1.6.8=h190368a_1 21 | - alsa-lib=1.2.13=h190368a_0 22 | - alsa-plugins=1.2.12=h4577cdd_1 23 | - aom=3.9.1=hd444e8b_0 24 | - appdirs=1.4.4=pyhd8ed1ab_1 25 | - archspec=0.2.5=pyhd8ed1ab_0 26 | - armadillo=14.4.0=ha7b67cb_0 27 | - arpack=3.9.1=nompi_h265af79_102 28 | - asciimatics=1.15.0=pyhd8ed1ab_1 29 | - asttokens=3.0.0=pyhd8ed1ab_1 30 | - at-spi2-atk=2.38.0=h633f9df_3 31 | - at-spi2-core=2.40.3=h633f9df_0 32 | - atk-1.0=2.38.0=h912a750_2 33 | - attr=2.5.1=hb283c62_1 34 | - attrs=25.3.0=pyh71513ae_0 35 | - bcrypt=4.3.0=py312h458b663_0 36 | - bidict=0.23.1=pyhd8ed1ab_1 37 | - bladerf=2024.05=h190368a_2 38 | - blinker=1.9.0=pyhff2d567_0 39 | - boltons=24.0.0=pyhd8ed1ab_1 40 | - brotli-bin=1.1.0=h190368a_2 41 | - brotli-python=1.1.0=py312h239da9a_2 42 | - brotli=1.1.0=h190368a_2 43 | - bzip2=1.0.8=h1f2b957_7 44 | - c-ares=1.34.4=h190368a_0 45 | - ca-certificates=2025.1.31=h0f6029e_0 46 | - cached-property=1.5.2=hd8ed1ab_1 47 | - cached_property=1.5.2=pyha770c72_1 48 | - cairo=1.18.4=h22618b1_0 49 | - certifi=2025.1.31=pyhd8ed1ab_0 50 | - cffi=1.17.1=py312hf7fc64c_0 51 | - charset-normalizer=3.4.1=pyhd8ed1ab_0 52 | - click=8.1.8=pyh707e725_0 53 | - codec2=1.2.0=h190368a_3 54 | - colorama=0.4.6=pyhd8ed1ab_1 55 | - conda-libmamba-solver=24.9.0=pyhd8ed1ab_0 56 | - conda-package-handling=2.4.0=pyh7900ff3_2 57 | - conda-package-streaming=0.11.0=pyhd8ed1ab_1 58 | - conda=24.11.3=py312h7864ebf_0 59 | - construct=2.10.70=pyhd8ed1ab_0 60 | - contourpy=1.3.1=py312hc0892ed_0 61 | - cryptography=44.0.2=py312hc1c30b0_0 62 | - cycler=0.12.1=pyhd8ed1ab_1 63 | - cyrus-sasl=2.1.27=h573e04c_7 64 | - dav1d=1.2.1=ha17a0cc_0 65 | - dbus=1.13.6=h0f95b14_3 66 | - decorator=5.2.1=pyhd8ed1ab_0 67 | - digital_rf=2.6.11=py312h24b6a2b_0 68 | - distro=1.9.0=pyhd8ed1ab_1 69 | - docutils=0.21.2=pyhd8ed1ab_1 70 | - elfutils=0.192=h6afca9a_1 71 | - ephem=4.2=py312h2984477_0 72 | - epoxy=1.5.10=hb283c62_1 73 | - exceptiongroup=1.2.2=pyhd8ed1ab_1 74 | - executing=2.1.0=pyhd8ed1ab_1 75 | - expat=2.6.4=h2621725_0 76 | - ffmpeg=7.1.1=gpl_h7c98bcd_101 77 | - fftw=3.3.10=nompi_h9745dfa_110 78 | - flask-socketio=5.5.1=pyh29332c3_0 79 | - flask=3.1.0=pyhd8ed1ab_1 80 | - fmt=11.0.1=h7c29e54_0 81 | - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 82 | - font-ttf-inconsolata=3.000=h77eed37_0 83 | - font-ttf-source-code-pro=2.038=h77eed37_0 84 | - font-ttf-ubuntu=0.83=h77eed37_3 85 | - fontconfig=2.15.0=hb048c60_1 86 | - fonts-conda-ecosystem=1=0 87 | - fonts-conda-forge=1=0 88 | - fonttools=4.56.0=py312h362f93a_0 89 | - freetype=2.13.3=h160a492_0 90 | - fribidi=1.0.10=h339bb43_0 91 | - frozendict=2.4.6=py312h2984477_0 92 | - fs=2.4.16=pyhd8ed1ab_0 93 | - future=1.0.0=pyhd8ed1ab_2 94 | - gdk-pixbuf=2.42.12=h5400e70_0 95 | - gettext-tools=0.23.1=h2621725_0 96 | - gettext=0.23.1=h2621725_0 97 | - gevent-websocket=0.10.1=py_0 98 | - gevent=24.11.1=py312h8abef4d_0 99 | - gflags=2.2.2=h2621725_1005 100 | - glew=2.1.0=h3b9df90_2 101 | - glfw=3.4=ha17a0cc_0 102 | - glib-tools=2.82.2=h15a6420_1 103 | - glib=2.82.2=hcce6b71_1 104 | - glog=0.7.1=hca4f505_0 105 | - gmp=6.3.0=h46f38da_0 106 | - gnss-sdr=0.0.19=h99d4115_8 107 | - gnuradio-adsb=0.0.0.20250304.dev+g9645757=unix_py_1 108 | - gnuradio-core=3.10.12.0=py312h54cdc4e_1 109 | - gnuradio-dect2=0.0.0.20250304.dev+g27a3d6=np20py312h4505ba2_1 110 | - gnuradio-filerepeater=0.0.0.20250304.dev+gec6b386=np20py312h33f3ff4_2 111 | - gnuradio-foo=0.0.0.20250304.dev+g9e0e2=np20py312hc3e7d76_1 112 | - gnuradio-fosphor=0.0.0.20250304.dev+g85a0b8f=np20py312hd5e0354_1 113 | - gnuradio-funcube=3.10.0.rc3=py312h61192de_12 114 | - gnuradio-gpredict-doppler=0.0.0.20250303.dev+g9473cbf=unix_py_1 115 | - gnuradio-grc=3.10.12.0=py312h050baaa_1 116 | - gnuradio-hermeslite2=1.0.0.0.post20250305+g2e66561=np20py312h4505ba2_0 117 | - gnuradio-hpsdr=0.0.0.20250304.dev+g7748cc9=np20py312h4505ba2_1 118 | - gnuradio-ieee802_11=0.0.0.20250304.dev+g761bdd9=np20py312h5e2e7f3_2 119 | - gnuradio-ieee802_15_4=3.6.post20250304+g61f4c4a=np20py312hb29d5ec_1 120 | - gnuradio-iio=3.10.12.0=py312h578d551_1 121 | - gnuradio-inspector=0.0.0.20250303.dev+gad6a69e=np20py312hb37a15b_2 122 | - gnuradio-iqbalance=0.38.2=py312hf51c7de_7 123 | - gnuradio-iridium=1!1.0.0=py312hb17df1d_16 124 | - gnuradio-leo-data=1.0.0.post20250214+g8f62b92=unix_2 125 | - gnuradio-leo=1.0.0.post20250214+g8f62b92=np20py312he29e660_2 126 | - gnuradio-lora_sdr=0.0.0.20250305.dev+ga8143cb=np20py312hb29d5ec_0 127 | - gnuradio-m2k=1.0.0=py312h4d0ff1b_13 128 | - gnuradio-osmosdr=0.2.6=py312h300cd9a_7 129 | - gnuradio-paint=0.0.0.20250303.dev+gfb4f7b6=np20py312hb29d5ec_2 130 | - gnuradio-pmt=3.10.12.0=py312h092b5c1_1 131 | - gnuradio-qtgui=3.10.12.0=py312h9606ff0_1 132 | - gnuradio-radar=0.0.0.20250220.dev+g92adce2=np20py312hb656b40_1 133 | - gnuradio-rds=3.10.post20250305+gc1cba54=np20py312h4505ba2_0 134 | - gnuradio-satellites=5.7.0=py312he19e01c_1 135 | - gnuradio-soapy=3.10.12.0=py312h00190c9_1 136 | - gnuradio-uhd=3.10.12.0=py312hbf60d72_1 137 | - gnuradio-video-sdl=3.10.12.0=py312he29b875_1 138 | - gnuradio-zeromq=3.10.12.0=py312h9c02b6c_1 139 | - gnuradio=3.10.12.0=py312hd23bcef_1 140 | - gnutls=3.8.9=h5911fd5_0 141 | - gqrx=2.17.6=py312hec09a99_1 142 | - graphite2=1.3.13=h46f38da_1003 143 | - greenlet=3.1.1=py312h239da9a_1 144 | - gsl=2.7=h68b80c3_0 145 | - gst-plugins-base=1.24.7=h34b8d1a_0 146 | - gstreamer-orc=0.4.41=hd2bc7bf_0 147 | - gstreamer=1.24.7=hfdb8136_0 148 | - gtest=1.15.0=h7c29e54_0 149 | - gtk3=3.24.43=h757dead_4 150 | - h11=0.14.0=pyhd8ed1ab_1 151 | - h2=4.2.0=pyhd8ed1ab_0 152 | - h5py=3.13.0=nompi_py312h61812b2_100 153 | - hackrf=2024.02.1=h9528819_1 154 | - hamlib-all=4.6.2=linux_2 155 | - hamlib-lua=4.6.2=lua54h190368a_2 156 | - hamlib-perl=4.6.2=pl5321h190368a_2 157 | - hamlib-python=4.6.2=py312he7221a8_2 158 | - hamlib-tcl=4.6.2=h190368a_2 159 | - hamlib=4.6.2=he75fc08_2 160 | - harfbuzz=10.4.0=h68458f9_0 161 | - hdf5=1.14.3=nompi_h8e4418e_109 162 | - hicolor-icon-theme=0.17=ha3edaa6_2 163 | - hpack=4.1.0=pyhd8ed1ab_0 164 | - hyperframe=6.1.0=pyhd8ed1ab_0 165 | - icu=75.1=h5867af4_0 166 | - idna=3.10=pyhd8ed1ab_1 167 | - importlib-metadata=8.6.1=pyha770c72_0 168 | - importlib_resources=6.5.2=pyhd8ed1ab_0 169 | - inspectrum=0.3.1=hb0a1fd9_0 170 | - ipython=9.0.2=pyhfb0248b_0 171 | - ipython_pygments_lexers=1.1.1=pyhd8ed1ab_0 172 | - itsdangerous=2.2.0=pyhd8ed1ab_1 173 | - jack=1.9.22=hde2c0c8_2 174 | - jedi=0.19.2=pyhd8ed1ab_1 175 | - jinja2=3.1.6=pyhd8ed1ab_0 176 | - jsonpatch=1.33=pyhd8ed1ab_1 177 | - jsonpointer=3.0.0=py312h7864ebf_1 178 | - jsonschema-specifications=2024.10.1=pyhd8ed1ab_1 179 | - jsonschema=4.23.0=pyhd8ed1ab_1 180 | - keyutils=1.6.1=hb283c62_0 181 | - kiwisolver=1.4.8=py312hb22304a_0 182 | - krb5=1.21.3=h7eda64f_0 183 | - lame=3.100=hb283c62_1003 184 | - lcms2=2.17=hf838ad8_0 185 | - ld_impl_linux-ppc64le=2.43=h5c2c55b_4 186 | - lerc=4.0.0=hbbae597_0 187 | - libabseil=20240722.0=cxx17_hf9f062a_4 188 | - libad9361-iio-c=0.3=hb4195d0_1 189 | - libaec=1.1.3=h46f38da_0 190 | - libaio=0.3.113=hb283c62_0 191 | - libairspy=1.0.10=h190368a_1 192 | - libairspyhf=1.6.8=h190368a_1 193 | - libarchive=3.7.7=hf326e31_3 194 | - libasprintf-devel=0.23.1=h921c762_0 195 | - libasprintf=0.23.1=h921c762_0 196 | - libass=0.17.3=h078e623_1 197 | - libbladerf-python=2024.05=py_2 198 | - libbladerf2=2024.05=h190368a_2 199 | - libblas=3.9.0=31_h1afb123_openblas 200 | - libboost=1.86.0=h9317212_3 201 | - libbrotlicommon=1.1.0=h190368a_2 202 | - libbrotlidec=1.1.0=h190368a_2 203 | - libbrotlienc=1.1.0=h190368a_2 204 | - libcap=2.75=hcf8ba42_0 205 | - libcblas=3.9.0=31_h50184f1_openblas 206 | - libclang-cpp19.1=19.1.7=default_h9f58072_1 207 | - libclang13=19.1.7=default_h475b101_1 208 | - libcodec2=1.2.0=h190368a_3 209 | - libcorrect=0.0.0=h4194056_0 210 | - libcups=2.3.3=hdb7e4ed_4 211 | - libcurl=8.12.1=h9fbccba_0 212 | - libdb=6.2.32=h3b9df90_0 213 | - libdeflate=1.23=hc4b29fe_0 214 | - libdrm=2.4.124=h190368a_0 215 | - libedit=3.1.20250104=pl5321h9a3a893_0 216 | - libegl=1.7.0=h5d83ef4_2 217 | - libev=4.33=ha17a0cc_2 218 | - libevent=2.1.12=h3507d20_1 219 | - libexpat=2.6.4=h2621725_0 220 | - libffi=3.4.6=hb694610_0 221 | - libflac=1.4.3=h46f38da_0 222 | - libgcc-ng=14.2.0=hfdc3801_2 223 | - libgcc=14.2.0=h0d7acf9_2 224 | - libgcrypt-lib=1.11.0=h190368a_2 225 | - libgettextpo-devel=0.23.1=h2621725_0 226 | - libgettextpo=0.23.1=h2621725_0 227 | - libgfortran-ng=14.2.0=hfdc3801_2 228 | - libgfortran5=14.2.0=hd761307_2 229 | - libgfortran=14.2.0=hfdc3801_2 230 | - libgirepository=1.82.0=hedb574a_0 231 | - libgl=1.7.0=h5d83ef4_2 232 | - libglib=2.82.2=h3d6172d_1 233 | - libglu=9.0.3=h0a402d4_0 234 | - libglvnd=1.7.0=h5d83ef4_2 235 | - libglx=1.7.0=h5d83ef4_2 236 | - libgomp=14.2.0=h0d7acf9_2 237 | - libgpg-error=1.51=hb1c7e87_1 238 | - libhackrf0=2024.02.1=h190368a_1 239 | - libhamlib4=4.6.2=h2621725_2 240 | - libhidapi=0.14.0=ha17a0cc_0 241 | - libiconv=1.18=hd7acdf4_1 242 | - libidn2=2.3.8=ha537cf0_0 243 | - libiio-c=0.26=hd1a24b3_1 244 | - libiio=0.26=h0167b25_1 245 | - libjpeg-turbo=3.0.0=ha17a0cc_1 246 | - liblapack=3.9.0=31_h2eee7d0_openblas 247 | - liblimesuite=23.11.0=h2621725_1 248 | - libliquid1=1.6.0=h9528819_2 249 | - libllvm19=19.1.7=hf9c4d56_1 250 | - liblzma=5.6.4=h190368a_0 251 | - libm2k=0.9.0=py312hfad950e_1 252 | - libmamba=1.5.12=h205e608_0 253 | - libmambapy=1.5.12=py312h2423e01_0 254 | - libmatio=1.5.28=h711a493_2 255 | - libmicrohttpd=1.0.1=h28eaca5_1 256 | - libmirisdr4=2.0.0=h190368a_1 257 | - libnghttp2=1.64.0=hac8f85b_0 258 | - libnsl=2.0.1=ha17a0cc_0 259 | - libntlm=1.8=h190368a_0 260 | - libogg=1.3.5=h1f2b957_0 261 | - libopenblas=0.3.29=pthreads_h8ac31f8_0 262 | - libopus=1.3.1=h4e0d66e_1 263 | - libosmodsp0=0.4.0=h9528819_2 264 | - libpcap=1.10.4=ha17a0cc_1 265 | - libpciaccess=0.18=ha17a0cc_0 266 | - libpng=1.6.47=h4ca8ea4_0 267 | - libpq=17.4=h9610a1c_0 268 | - libprotobuf=5.28.3=h4b6c0f6_1 269 | - librsvg=2.58.4=h7296971_2 270 | - librtaudio6=5.2.0=hb51dbe7_3 271 | - libsndfile=1.2.2=hd8dc992_1 272 | - libsodium=1.0.20=h1f2b957_0 273 | - libsolv=0.7.28=hff1ad0c_2 274 | - libsqlite=3.49.1=haeeb200_1 275 | - libssh2=1.11.1=h485dfb1_0 276 | - libstdcxx-ng=14.2.0=hf27a640_2 277 | - libstdcxx=14.2.0=h262982c_2 278 | - libsystemd0=257.4=h6081cc9_1 279 | - libtasn1=4.20.0=h190368a_0 280 | - libthrift=0.21.0=h2c60daa_0 281 | - libtiff=4.7.0=hd5672b1_3 282 | - libudev1=257.4=h792074e_1 283 | - libunistring=0.9.10=h4e0d66e_0 284 | - libunwind=1.6.2=h3b9df90_0 285 | - liburing=2.9=hb22304a_0 286 | - libusb=1.0.27=h190368a_101 287 | - libuuid=2.38.1=h4194056_0 288 | - libuv=1.50.0=h190368a_0 289 | - libvorbis=1.3.7=h3b9df90_0 290 | - libvpx=1.14.1=h4d352a9_0 291 | - libwebp-base=1.5.0=h6573e2e_0 292 | - libxcb=1.17.0=he4e7c97_0 293 | - libxcrypt=4.4.36=ha17a0cc_1 294 | - libxkbcommon=1.8.1=h83c91fb_0 295 | - libxml2=2.13.6=he91524c_0 296 | - libxslt=1.1.39=hfc4afe9_0 297 | - libzlib=1.3.1=h190368a_2 298 | - limesuite=23.11.0=hb7d5b33_1 299 | - lua=5.4.6=hf45523f_0 300 | - lxml=5.3.1=py312hf18cdb2_0 301 | - lz4-c=1.10.0=h2621725_1 302 | - lzo=2.10=ha17a0cc_1001 303 | - m17-cxx-demod=2.3.3=hb5129e9_5 304 | - mako=1.3.9=pyhd8ed1ab_0 305 | - mamba=1.5.12=py312hff23a77_0 306 | - markdown=3.6=pyhd8ed1ab_0 307 | - markupsafe=3.0.2=py312h1d80cea_1 308 | - matplotlib-base=3.10.1=py312h5a52afb_0 309 | - matplotlib-inline=0.1.7=pyhd8ed1ab_1 310 | - matplotlib=3.10.1=py312h2344ed7_0 311 | - menuinst=2.2.0=py312h7864ebf_0 312 | - mesalib=25.0.1=hfe8c3a1_0 313 | - mirisdr=2.0.0=h190368a_1 314 | - mpg123=1.32.9=h7b264c9_0 315 | - mplcursors=0.6=pyhd8ed1ab_1 316 | - munkres=1.1.4=pyh9f0ad1d_0 317 | - mysql-common=9.0.1=h4bc58a3_5 318 | - mysql-libs=9.0.1=ha359b31_5 319 | - ncurses=6.5=h8645e7e_3 320 | - nettle=3.9.1=h6c99a15_0 321 | - nspr=4.36=h2621725_0 322 | - nss=3.108=h159e3e6_0 323 | - numexpr=2.10.2=py312hb6f6b32_0 324 | - numpy=2.2.3=py312h54c08a6_0 325 | - ocl-icd-system=1.0.0=1 326 | - ocl-icd=2.3.2=h190368a_2 327 | - opencl-headers=2024.10.24=h2621725_0 328 | - openh264=2.6.0=h4846f89_0 329 | - openjpeg=2.5.3=h8f700d7_0 330 | - openldap=2.6.9=haad6373_0 331 | - openssl=3.4.1=hede31bd_0 332 | - p11-kit=0.24.1=h7ef140f_0 333 | - packaging=24.2=pyhd8ed1ab_2 334 | - pandas=2.2.3=py312h2613dcb_2 335 | - pango=1.56.2=h032454a_0 336 | - paramiko=3.5.1=pyhd8ed1ab_0 337 | - parso=0.8.4=pyhd8ed1ab_1 338 | - pcre2=10.44=h3dd95db_2 339 | - perl=5.32.1=7_ha17a0cc_perl5 340 | - pexpect=4.9.0=pyhd8ed1ab_1 341 | - pickleshare=0.7.5=pyhd8ed1ab_1004 342 | - pillow=11.1.0=py312h114285f_0 343 | - pip=25.0.1=pyh8b19718_0 344 | - pixman=0.44.2=ha71f0f6_0 345 | - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 346 | - platformdirs=4.3.6=pyhd8ed1ab_1 347 | - pluggy=1.5.0=pyhd8ed1ab_1 348 | - ply=3.11=pyhd8ed1ab_3 349 | - portaudio=19.7.0=ha778ef4_0 350 | - prompt-toolkit=3.0.50=pyha770c72_0 351 | - pthread-stubs=0.4=h190368a_1002 352 | - ptyprocess=0.7.0=pyhd8ed1ab_1 353 | - pugixml=1.15=h02f28cb_0 354 | - pulseaudio-client=17.0=h5deceda_0 355 | - pure_eval=0.2.3=pyhd8ed1ab_1 356 | - pyadi-iio=0.0.19=pyhd8ed1ab_0 357 | - pybind11-abi=4=hd8ed1ab_3 358 | - pycairo=1.27.0=py312h7cb98c4_0 359 | - pycosat=0.6.6=py312h2984477_2 360 | - pycparser=2.22=pyh29332c3_1 361 | - pyfda=0.9.2=pyh9208f05_1 362 | - pyfiglet=0.8.post1=py_0 363 | - pygments=2.19.1=pyhd8ed1ab_0 364 | - pygobject=3.50.0=py312h7a1a19a_1 365 | - pylibiio=0.26=py_1 366 | - pynacl=1.5.0=py312h2984477_4 367 | - pyopengl=3.1.7=pyhd8ed1ab_0 368 | - pyparsing=3.2.1=pyhd8ed1ab_0 369 | - pyqt5-sip=12.12.2=py312hd38e099_5 370 | - pyqt=5.15.9=py312h3902226_5 371 | - pyqtgraph=0.13.7=pyhd8ed1ab_1 372 | - pysocks=1.7.1=pyha55dd90_7 373 | - python-dateutil=2.9.0.post0=pyhff2d567_1 374 | - python-engineio=4.11.2=pyhff2d567_0 375 | - python-socketio=5.12.1=pyhd8ed1ab_0 376 | - python-tzdata=2025.1=pyhd8ed1ab_0 377 | - python=3.12.9=he016669_1_cpython 378 | - python_abi=3.12=5_cp312 379 | - pytz=2024.1=pyhd8ed1ab_0 380 | - pywin32-on-windows=0.1.0=pyh1179c8e_3 381 | - pyyaml=6.0.2=py312h362f93a_2 382 | - pyzmq=26.3.0=py312h17e6c7f_0 383 | - qdarkstyle=3.2.3=pyhd8ed1ab_1 384 | - qhull=2020.2=h7c29e54_5 385 | - qt-main=5.15.15=hd745ca5_2 386 | - qtpy=2.4.3=pyhd8ed1ab_0 387 | - qwt=6.2.0=he5e8f9e_6 388 | - readline=8.2=hf4ca6f9_2 389 | - referencing=0.36.2=pyh29332c3_0 390 | - reproc-cpp=14.2.5.post0=h2621725_0 391 | - reproc=14.2.5.post0=h190368a_0 392 | - requests=2.32.3=pyhd8ed1ab_1 393 | - rpds-py=0.23.1=py312hfbfa491_0 394 | - rtl-sdr=2.0.2=h190368a_3 395 | - ruamel.yaml.clib=0.2.8=py312h2984477_1 396 | - ruamel.yaml=0.18.10=py312h2984477_0 397 | - scipy=1.15.2=py312h8c5dd32_0 398 | - sdl2=2.32.50=h2fa4009_1 399 | - sdl3=3.2.8=h4722d9d_0 400 | - sdl=1.2.68=h2fa4009_1 401 | - setuptools=75.8.2=pyhff2d567_0 402 | - simple-websocket=1.1.0=pyhd8ed1ab_0 403 | - sip=6.8.6=py312h6abfb79_1 404 | - six=1.17.0=pyhd8ed1ab_0 405 | - soapysdr-module-airspy=0.2.0=h6f8e04d_0 406 | - soapysdr-module-airspyhf=0.2.0=h6f8e04d_0 407 | - soapysdr-module-audio=0.1.1=h96c2adf_2 408 | - soapysdr-module-bladerf=0.4.1=hf8708ca_0 409 | - soapysdr-module-fcdpp=0.1.1=h135aeac_0 410 | - soapysdr-module-hackrf=0.3.4=h6f8e04d_0 411 | - soapysdr-module-lms7=23.11.0=ha119c29_1 412 | - soapysdr-module-netsdr=0.2.0=he97dc58_1 413 | - soapysdr-module-plutosdr=0.2.2=h19da3d8_1 414 | - soapysdr-module-redpitaya=0.1.1=he97dc58_0 415 | - soapysdr-module-remote=0.5.2=h6f8e04d_2 416 | - soapysdr-module-rtlsdr=0.3.3=h7f3508f_2 417 | - soapysdr-module-uhd=0.4.1=h56adf28_14 418 | - soapysdr-module-volk-converters=0.1.1=h3047db8_3 419 | - soapysdr=0.8.1=py312hc0892ed_5 420 | - spdlog=1.15.1=h323db5a_0 421 | - stack_data=0.6.3=pyhd8ed1ab_1 422 | - superlu=5.2.2=ha2bd32a_0 423 | - svt-av1=3.0.1=h2621725_0 424 | - tk=8.6.13=hd4bbf49_0 425 | - toml=0.10.2=pyhd8ed1ab_1 426 | - tomli=2.2.1=pyhd8ed1ab_1 427 | - tornado=6.4.2=py312he7221a8_0 428 | - tqdm=4.67.1=pyhd8ed1ab_1 429 | - traitlets=5.14.3=pyhd8ed1ab_1 430 | - truststore=0.10.1=pyh29332c3_0 431 | - typing_extensions=4.12.2=pyha770c72_1 432 | - tzdata=2025a=h78e105d_0 433 | - uhd=4.8.0.0=py312ha2da450_0 434 | - unicodedata2=16.0.0=py312h2984477_0 435 | - urllib3=2.3.0=pyhd8ed1ab_0 436 | - volk-gnss-sdr=0.0.19=h9676a07_8 437 | - volk=3.2.0=h62b9486_0 438 | - watchdog=6.0.0=py312h2344ed7_0 439 | - wayland=1.23.1=h89182fd_0 440 | - wcwidth=0.2.13=pyhd8ed1ab_1 441 | - websocket-client=1.8.0=pyhd8ed1ab_1 442 | - werkzeug=3.1.3=pyhd8ed1ab_1 443 | - wheel=0.45.1=pyhd8ed1ab_1 444 | - wsproto=1.2.0=pyhd8ed1ab_1 445 | - wxwidgets=3.2.6=he32a394_3 446 | - x264=1!164.3095=hb283c62_2 447 | - x265=3.5=h06f31f1_3 448 | - xcb-util-image=0.4.0=had93e6f_2 449 | - xcb-util-keysyms=0.4.1=had93e6f_0 450 | - xcb-util-renderutil=0.3.10=had93e6f_0 451 | - xcb-util-wm=0.4.2=had93e6f_0 452 | - xcb-util=0.4.1=had93e6f_2 453 | - xkeyboard-config=2.43=h190368a_0 454 | - xorg-libice=1.1.2=h190368a_0 455 | - xorg-libsm=1.2.6=h9be89da_0 456 | - xorg-libx11=1.8.12=h67a18fa_0 457 | - xorg-libxau=1.0.12=h190368a_0 458 | - xorg-libxcomposite=0.4.6=h190368a_2 459 | - xorg-libxcursor=1.2.3=h190368a_0 460 | - xorg-libxdamage=1.1.6=h190368a_0 461 | - xorg-libxdmcp=1.1.5=h190368a_0 462 | - xorg-libxext=1.3.6=h190368a_0 463 | - xorg-libxfixes=6.0.1=h190368a_0 464 | - xorg-libxi=1.8.2=h190368a_0 465 | - xorg-libxinerama=1.1.5=h2621725_1 466 | - xorg-libxrandr=1.5.4=h190368a_0 467 | - xorg-libxrender=0.9.12=h190368a_0 468 | - xorg-libxshmfence=1.3.3=h190368a_0 469 | - xorg-libxtst=1.2.5=h190368a_3 470 | - xorg-libxxf86vm=1.1.6=h190368a_0 471 | - yaml-cpp=0.8.0=h46f38da_0 472 | - yaml=0.2.5=h4e0d66e_2 473 | - zeromq=4.3.5=ha30388d_7 474 | - zipp=3.21.0=pyhd8ed1ab_1 475 | - zlib=1.3.1=h190368a_2 476 | - zope.event=5.0=pyhd8ed1ab_1 477 | - zope.interface=7.2=py312he7221a8_0 478 | - zstandard=0.23.0=py312h2984477_1 479 | - zstd=1.5.7=h53ff00b_1 480 | user_requested_specs: 481 | - airspy 482 | - airspyhf 483 | - alsa-plugins 484 | - bladerf 485 | - codec2 486 | - conda 487 | - digital_rf 488 | - ephem 489 | - gnss-sdr 490 | - gnuradio 491 | - gnuradio-adsb 492 | - gnuradio-dect2 493 | - gnuradio-filerepeater 494 | - gnuradio-foo 495 | - gnuradio-fosphor 496 | - gnuradio-funcube 497 | - gnuradio-gpredict-doppler 498 | - gnuradio-hermeslite2 499 | - gnuradio-hpsdr 500 | - gnuradio-ieee802_11 501 | - gnuradio-ieee802_15_4 502 | - gnuradio-inspector 503 | - gnuradio-iqbalance 504 | - gnuradio-iridium 505 | - gnuradio-leo 506 | - gnuradio-lora_sdr 507 | - gnuradio-m2k 508 | - gnuradio-osmosdr 509 | - gnuradio-paint 510 | - gnuradio-radar 511 | - gnuradio-rds 512 | - gnuradio-satellites 513 | - gqrx 514 | - hackrf 515 | - hamlib-all 516 | - inspectrum 517 | - ipython 518 | - libiio 519 | - libm2k 520 | - limesuite 521 | - m17-cxx-demod 522 | - mamba 523 | - matplotlib 524 | - mirisdr 525 | - numpy 526 | - pandas 527 | - pyadi-iio 528 | - pyfda 529 | - python 530 | - rtl-sdr 531 | - scipy 532 | - soapysdr 533 | - soapysdr-module-airspy 534 | - soapysdr-module-airspyhf 535 | - soapysdr-module-audio 536 | - soapysdr-module-bladerf 537 | - soapysdr-module-fcdpp 538 | - soapysdr-module-hackrf 539 | - soapysdr-module-lms7 540 | - soapysdr-module-netsdr 541 | - soapysdr-module-plutosdr 542 | - soapysdr-module-redpitaya 543 | - soapysdr-module-remote 544 | - soapysdr-module-rtlsdr 545 | - soapysdr-module-uhd 546 | - soapysdr-module-volk-converters 547 | - uhd 548 | version: 2025.03.14 549 | write_condarc: true 550 | -------------------------------------------------------------------------------- /installer_specs/radioconda-linux-ppc64le/post_install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | PREFIX="${PREFIX:-$2/radioconda}" 3 | rm -f $PREFIX/pkgs/*.tar.bz2 $PREFIX/pkgs/*.conda 4 | exit 0 5 | -------------------------------------------------------------------------------- /installer_specs/radioconda-osx-64.yml: -------------------------------------------------------------------------------- 1 | channels: 2 | - conda-forge 3 | - ryanvolz 4 | dependencies: 5 | - airspy=1.0.10=h6e16a3a_1 6 | - airspyhf=1.6.8=h6e16a3a_1 7 | - bladerf=2024.05=h6e16a3a_2 8 | - codec2=1.2.0=h6e16a3a_3 9 | - digital_rf=2.6.11=py312hb4e6a8e_0 10 | - ephem=4.2=py312h01d7ebd_0 11 | - gnss-sdr=0.0.19=h27504fe_8 12 | - gnuradio-adsb=0.0.0.20250304.dev+g9645757=unix_py_1 13 | - gnuradio-dect2=0.0.0.20250304.dev+g27a3d6=np20py312ha54dcc3_1 14 | - gnuradio-filerepeater=0.0.0.20250304.dev+gec6b386=np20py312hd6957e9_2 15 | - gnuradio-foo=0.0.0.20250304.dev+g9e0e2=np20py312ha031aef_1 16 | - gnuradio-fosphor=0.0.0.20250304.dev+g85a0b8f=np20py312hbc77901_1 17 | - gnuradio-gpredict-doppler=0.0.0.20250303.dev+g9473cbf=unix_py_1 18 | - gnuradio-hermeslite2=1.0.0.0.post20250305+g2e66561=np20py312ha54dcc3_0 19 | - gnuradio-hpsdr=0.0.0.20250304.dev+g7748cc9=np20py312ha54dcc3_1 20 | - gnuradio-ieee802_11=0.0.0.20250304.dev+g761bdd9=np20py312hb9afde1_1 21 | - gnuradio-ieee802_15_4=3.6.post20250304+g61f4c4a=np20py312hcd68dcb_1 22 | - gnuradio-inspector=0.0.0.20250303.dev+gad6a69e=np20py312h3c55089_1 23 | - gnuradio-iqbalance=0.38.2=py312h792ae45_7 24 | - gnuradio-iridium=1!1.0.0=py312h8846ea6_16 25 | - gnuradio-leo=1.0.0.post20250214+g8f62b92=np20py312ha067ba0_2 26 | - gnuradio-lora_sdr=0.0.0.20250305.dev+ga8143cb=np20py312hcd68dcb_0 27 | - gnuradio-m2k=1.0.0=py312he14e3f5_13 28 | - gnuradio-osmosdr=0.2.6=py312h338709e_7 29 | - gnuradio-paint=0.0.0.20250303.dev+gfb4f7b6=np20py312hcd68dcb_2 30 | - gnuradio-radar=0.0.0.20250220.dev+g92adce2=np20py312hd333b83_1 31 | - gnuradio-rds=3.10.post20250305+gc1cba54=np20py312ha54dcc3_0 32 | - gnuradio-satellites=5.7.0=py312h334535e_1 33 | - gnuradio=3.10.12.0=py312h0b3b3f0_1 34 | - gqrx=2.17.6=h33da310_1 35 | - hackrf=2024.02.1=h979b6e9_1 36 | - hamlib-all=4.6.2=osx_2 37 | - inspectrum=0.3.1=h4507090_0 38 | - ipython=9.0.2=pyhfb0248b_0 39 | - libiio=0.26=h98b3b24_1 40 | - libm2k=0.9.0=py312h3a92375_1 41 | - limesuite=23.11.0=h8f9d4fd_1 42 | - m17-cxx-demod=2.3.3=haaa64e9_5 43 | - matplotlib=3.10.1=py312hb401068_0 44 | - mirisdr=2.0.0=h6e16a3a_1 45 | - numpy=2.2.3=py312h6693b03_0 46 | - pandas=2.2.3=py312h98e817e_1 47 | - pyadi-iio=0.0.19=pyhd8ed1ab_0 48 | - pyfda=0.9.2=pyh9208f05_1 49 | - python=3.12.9=h9ccd52b_1_cpython 50 | - rtl-sdr=2.0.2=h6e16a3a_3 51 | - scipy=1.15.2=py312hd04560d_0 52 | - soapysdr-module-airspy=0.2.0=ha64c28d_0 53 | - soapysdr-module-airspyhf=0.2.0=ha64c28d_0 54 | - soapysdr-module-audio=0.1.1=h4045702_2 55 | - soapysdr-module-bladerf=0.4.1=h3f20bda_0 56 | - soapysdr-module-hackrf=0.3.4=ha64c28d_0 57 | - soapysdr-module-lms7=23.11.0=hd56791b_1 58 | - soapysdr-module-netsdr=0.2.0=h7ecdfb7_1 59 | - soapysdr-module-plutosdr=0.2.2=h71197eb_1 60 | - soapysdr-module-redpitaya=0.1.1=h7ecdfb7_0 61 | - soapysdr-module-remote=0.5.2=ha64c28d_2 62 | - soapysdr-module-rtlsdr=0.3.3=h4104cfc_2 63 | - soapysdr-module-uhd=0.4.1=h7986aa4_14 64 | - soapysdr-module-volk-converters=0.1.1=ha5c124a_3 65 | - soapysdr=0.8.1=py312hc5c4d5f_5 66 | - uhd=4.8.0.0=py312h807a617_0 67 | name: radioconda 68 | platform: osx-64 69 | version: 2025.03.14 70 | -------------------------------------------------------------------------------- /installer_specs/radioconda-osx-64/LICENSE: -------------------------------------------------------------------------------- 1 | Radioconda installer code uses BSD-3-Clause license as stated below. 2 | Binary packages that come with radioconda have their own licensing terms 3 | and by installing radioconda you agree to the licensing terms of individual 4 | packages as well. These additional licenses can be found in the 5 | pkgs//info/licenses folder of your radioconda installation. 6 | 7 | ============================================================================= 8 | 9 | Copyright (c) 2021, Ryan Volz 10 | All rights reserved. 11 | 12 | Redistribution and use in source and binary forms, with or without 13 | modification, are permitted provided that the following conditions are met: 14 | 15 | 1. Redistributions of source code must retain the above copyright notice, this 16 | list of conditions and the following disclaimer. 17 | 18 | 2. Redistributions in binary form must reproduce the above copyright notice, 19 | this list of conditions and the following disclaimer in the documentation 20 | and/or other materials provided with the distribution. 21 | 22 | 3. Neither the name of the copyright holder nor the names of its contributors 23 | may be used to endorse or promote products derived from this software without 24 | specific prior written permission. 25 | 26 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 27 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 28 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 29 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 30 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 32 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 33 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 34 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 35 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 | -------------------------------------------------------------------------------- /installer_specs/radioconda-osx-64/construct.yaml: -------------------------------------------------------------------------------- 1 | channels: &id001 2 | - conda-forge 3 | - ryanvolz 4 | company: https://github.com/ryanvolz/radioconda 5 | condarc: 6 | channel_priority: strict 7 | channels: *id001 8 | initialize_by_default: true 9 | installer_type: all 10 | keep_pkgs: true 11 | license_file: LICENSE 12 | name: radioconda 13 | post_install: post_install.sh 14 | register_python_default: false 15 | specs: 16 | - adwaita-icon-theme=47.0=unix_0 17 | - airspy=1.0.10=h6e16a3a_1 18 | - airspyhf=1.6.8=h6e16a3a_1 19 | - appdirs=1.4.4=pyhd8ed1ab_1 20 | - archspec=0.2.5=pyhd8ed1ab_0 21 | - armadillo=14.4.0=h771da8f_0 22 | - arpack=3.9.1=nompi_hdfe9103_102 23 | - asciimatics=1.15.0=pyhd8ed1ab_1 24 | - asttokens=3.0.0=pyhd8ed1ab_1 25 | - atk-1.0=2.38.0=h4bec284_2 26 | - attrs=25.3.0=pyh71513ae_0 27 | - bcrypt=4.3.0=py312h0d0de52_0 28 | - bidict=0.23.1=pyhd8ed1ab_1 29 | - bladerf=2024.05=h6e16a3a_2 30 | - blinker=1.9.0=pyhff2d567_0 31 | - boltons=24.0.0=pyhd8ed1ab_1 32 | - brotli-bin=1.1.0=h00291cd_2 33 | - brotli-python=1.1.0=py312h5861a67_2 34 | - brotli=1.1.0=h00291cd_2 35 | - bzip2=1.0.8=hfdf4475_7 36 | - c-ares=1.34.4=hf13058a_0 37 | - ca-certificates=2025.1.31=h8857fd0_0 38 | - cached-property=1.5.2=hd8ed1ab_1 39 | - cached_property=1.5.2=pyha770c72_1 40 | - cairo=1.18.4=h950ec3b_0 41 | - certifi=2025.1.31=pyhd8ed1ab_0 42 | - cffi=1.17.1=py312hf857d28_0 43 | - charset-normalizer=3.4.1=pyhd8ed1ab_0 44 | - click=8.1.8=pyh707e725_0 45 | - codec2=1.2.0=h6e16a3a_3 46 | - colorama=0.4.6=pyhd8ed1ab_1 47 | - conda-libmamba-solver=24.9.0=pyhd8ed1ab_0 48 | - conda-package-handling=2.4.0=pyh7900ff3_2 49 | - conda-package-streaming=0.11.0=pyhd8ed1ab_1 50 | - conda=24.11.3=py312hb401068_0 51 | - construct=2.10.70=pyhd8ed1ab_0 52 | - contourpy=1.3.1=py312hc47a885_0 53 | - cryptography=44.0.2=py312h0995e51_0 54 | - cycler=0.12.1=pyhd8ed1ab_1 55 | - cyrus-sasl=2.1.27=hf9bab2b_7 56 | - dbus=1.13.6=h811a1a6_3 57 | - decorator=5.2.1=pyhd8ed1ab_0 58 | - digital_rf=2.6.11=py312hb4e6a8e_0 59 | - distro=1.9.0=pyhd8ed1ab_1 60 | - docutils=0.21.2=pyhd8ed1ab_1 61 | - ephem=4.2=py312h01d7ebd_0 62 | - epoxy=1.5.10=h5eb16cf_1 63 | - exceptiongroup=1.2.2=pyhd8ed1ab_1 64 | - executing=2.1.0=pyhd8ed1ab_1 65 | - expat=2.6.4=h240833e_0 66 | - fftw=3.3.10=nompi_h292e606_110 67 | - flask-socketio=5.5.1=pyh29332c3_0 68 | - flask=3.1.0=pyhd8ed1ab_1 69 | - fmt=11.0.2=h3c5361c_0 70 | - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 71 | - font-ttf-inconsolata=3.000=h77eed37_0 72 | - font-ttf-source-code-pro=2.038=h77eed37_0 73 | - font-ttf-ubuntu=0.83=h77eed37_3 74 | - fontconfig=2.15.0=h37eeddb_1 75 | - fonts-conda-ecosystem=1=0 76 | - fonts-conda-forge=1=0 77 | - fonttools=4.56.0=py312h3520af0_0 78 | - freetype=2.13.3=h40dfd5c_0 79 | - fribidi=1.0.10=hbcb3906_0 80 | - frozendict=2.4.6=py312h3d0f464_0 81 | - fs=2.4.16=pyhd8ed1ab_0 82 | - future=1.0.0=pyhd8ed1ab_2 83 | - gdk-pixbuf=2.42.12=ha587570_0 84 | - gettext-tools=0.23.1=h27064b9_0 85 | - gettext=0.23.1=hd385c8e_0 86 | - gevent-websocket=0.10.1=py_0 87 | - gevent=24.11.1=py312hd2a4d73_0 88 | - gflags=2.2.2=hac325c4_1005 89 | - glew=2.1.0=h046ec9c_2 90 | - glfw=3.4=h10d778d_0 91 | - glib-tools=2.82.2=hf8faeaf_1 92 | - glib=2.82.2=h915cd9b_1 93 | - glog=0.7.1=h2790a97_0 94 | - gmp=6.3.0=hf036a51_2 95 | - gnss-sdr=0.0.19=h27504fe_8 96 | - gnuradio-adsb=0.0.0.20250304.dev+g9645757=unix_py_1 97 | - gnuradio-core=3.10.12.0=py312h74f4228_1 98 | - gnuradio-dect2=0.0.0.20250304.dev+g27a3d6=np20py312ha54dcc3_1 99 | - gnuradio-filerepeater=0.0.0.20250304.dev+gec6b386=np20py312hd6957e9_2 100 | - gnuradio-foo=0.0.0.20250304.dev+g9e0e2=np20py312ha031aef_1 101 | - gnuradio-fosphor=0.0.0.20250304.dev+g85a0b8f=np20py312hbc77901_1 102 | - gnuradio-gpredict-doppler=0.0.0.20250303.dev+g9473cbf=unix_py_1 103 | - gnuradio-grc=3.10.12.0=py312h4fad5d9_1 104 | - gnuradio-hermeslite2=1.0.0.0.post20250305+g2e66561=np20py312ha54dcc3_0 105 | - gnuradio-hpsdr=0.0.0.20250304.dev+g7748cc9=np20py312ha54dcc3_1 106 | - gnuradio-ieee802_11=0.0.0.20250304.dev+g761bdd9=np20py312hb9afde1_1 107 | - gnuradio-ieee802_15_4=3.6.post20250304+g61f4c4a=np20py312hcd68dcb_1 108 | - gnuradio-iio=3.10.12.0=py312h0ef5ef5_1 109 | - gnuradio-inspector=0.0.0.20250303.dev+gad6a69e=np20py312h3c55089_1 110 | - gnuradio-iqbalance=0.38.2=py312h792ae45_7 111 | - gnuradio-iridium=1!1.0.0=py312h8846ea6_16 112 | - gnuradio-leo-data=1.0.0.post20250214+g8f62b92=unix_2 113 | - gnuradio-leo=1.0.0.post20250214+g8f62b92=np20py312ha067ba0_2 114 | - gnuradio-lora_sdr=0.0.0.20250305.dev+ga8143cb=np20py312hcd68dcb_0 115 | - gnuradio-m2k=1.0.0=py312he14e3f5_13 116 | - gnuradio-osmosdr=0.2.6=py312h338709e_7 117 | - gnuradio-paint=0.0.0.20250303.dev+gfb4f7b6=np20py312hcd68dcb_2 118 | - gnuradio-pmt=3.10.12.0=py312h1b5aeec_1 119 | - gnuradio-qtgui=3.10.12.0=py312h37fa559_1 120 | - gnuradio-radar=0.0.0.20250220.dev+g92adce2=np20py312hd333b83_1 121 | - gnuradio-rds=3.10.post20250305+gc1cba54=np20py312ha54dcc3_0 122 | - gnuradio-satellites=5.7.0=py312h334535e_1 123 | - gnuradio-soapy=3.10.12.0=py312hcd7aecb_1 124 | - gnuradio-uhd=3.10.12.0=py312h882d36b_1 125 | - gnuradio-video-sdl=3.10.12.0=py312h4fad5d9_1 126 | - gnuradio-zeromq=3.10.12.0=py312h074ed27_1 127 | - gnuradio=3.10.12.0=py312h0b3b3f0_1 128 | - gqrx=2.17.6=h33da310_1 129 | - graphite2=1.3.13=h73e2aa4_1003 130 | - greenlet=3.1.1=py312haafddd8_1 131 | - gsl=2.7=h93259b0_0 132 | - gst-plugins-base=1.24.7=h0ee1d58_0 133 | - gstreamer-orc=0.4.41=h9fdcad8_0 134 | - gstreamer=1.24.7=h3271b85_0 135 | - gtest=1.15.2=h3c5361c_0 136 | - gtk3=3.24.43=h82a860e_4 137 | - h11=0.14.0=pyhd8ed1ab_1 138 | - h2=4.2.0=pyhd8ed1ab_0 139 | - h5py=3.13.0=nompi_py312hea5ca7c_100 140 | - hackrf=2024.02.1=h979b6e9_1 141 | - hamlib-all=4.6.2=osx_2 142 | - hamlib-lua=4.6.2=lua54h6e16a3a_2 143 | - hamlib-python=4.6.2=py312h01d7ebd_2 144 | - hamlib-tcl=4.6.2=h2c093e9_2 145 | - hamlib=4.6.2=h4b0d998_2 146 | - harfbuzz=10.4.0=h86b413f_0 147 | - hdf5=1.14.3=nompi_h1607680_109 148 | - hicolor-icon-theme=0.17=h694c41f_2 149 | - hpack=4.1.0=pyhd8ed1ab_0 150 | - hyperframe=6.1.0=pyhd8ed1ab_0 151 | - icu=75.1=h120a0e1_0 152 | - idna=3.10=pyhd8ed1ab_1 153 | - importlib-metadata=8.6.1=pyha770c72_0 154 | - importlib_resources=6.5.2=pyhd8ed1ab_0 155 | - inspectrum=0.3.1=h4507090_0 156 | - ipython=9.0.2=pyhfb0248b_0 157 | - ipython_pygments_lexers=1.1.1=pyhd8ed1ab_0 158 | - itsdangerous=2.2.0=pyhd8ed1ab_1 159 | - jedi=0.19.2=pyhd8ed1ab_1 160 | - jinja2=3.1.6=pyhd8ed1ab_0 161 | - jsonpatch=1.33=pyhd8ed1ab_1 162 | - jsonpointer=3.0.0=py312hb401068_1 163 | - jsonschema-specifications=2024.10.1=pyhd8ed1ab_1 164 | - jsonschema=4.23.0=pyhd8ed1ab_1 165 | - kiwisolver=1.4.8=py312h9275861_0 166 | - krb5=1.21.3=h37d8d59_0 167 | - lame=3.100=hb7f2c08_1003 168 | - lcms2=2.17=h72f5680_0 169 | - lerc=4.0.0=hb486fe8_0 170 | - libabseil=20240722.0=cxx17_h0e468a2_4 171 | - libad9361-iio-c=0.3=h9eea90d_1 172 | - libaec=1.1.3=h73e2aa4_0 173 | - libairspy=1.0.10=h6e16a3a_1 174 | - libairspyhf=1.6.8=h6e16a3a_1 175 | - libarchive=3.7.7=h1a33361_3 176 | - libasprintf-devel=0.23.1=h27064b9_0 177 | - libasprintf=0.23.1=h27064b9_0 178 | - libbladerf-python=2024.05=py_2 179 | - libbladerf2=2024.05=h6e16a3a_2 180 | - libblas=3.9.0=31_h7f60823_openblas 181 | - libboost=1.86.0=hf0da243_3 182 | - libbrotlicommon=1.1.0=h00291cd_2 183 | - libbrotlidec=1.1.0=h00291cd_2 184 | - libbrotlienc=1.1.0=h00291cd_2 185 | - libcblas=3.9.0=31_hff6cab4_openblas 186 | - libclang-cpp17=17.0.6=default_h3571c67_8 187 | - libclang13=19.1.7=default_hf2b7afa_1 188 | - libcodec2=1.2.0=h6e16a3a_3 189 | - libcorrect=0.0.0=hb7f2c08_0 190 | - libcurl=8.12.1=h5dec5d8_0 191 | - libcxx=19.1.7=hf95d169_0 192 | - libdeflate=1.23=he65b83e_0 193 | - libedit=3.1.20250104=pl5321ha958ccf_0 194 | - libev=4.33=h10d778d_2 195 | - libevent=2.1.12=ha90c15b_1 196 | - libexpat=2.6.4=h240833e_0 197 | - libffi=3.4.6=h281671d_0 198 | - libflac=1.4.3=he965462_0 199 | - libgettextpo-devel=0.23.1=h27064b9_0 200 | - libgettextpo=0.23.1=h27064b9_0 201 | - libgfortran5=13.2.0=h2873a65_3 202 | - libgfortran=5.0.0=13_2_0_h97931a8_3 203 | - libgirepository=1.82.0=hdf4f3f7_0 204 | - libglib=2.82.2=h5c976ab_1 205 | - libhackrf0=2024.02.1=h6e16a3a_1 206 | - libhamlib4=4.6.2=h240833e_2 207 | - libiconv=1.18=h4b5e92a_1 208 | - libiio-c=0.26=h699925a_1 209 | - libiio=0.26=h98b3b24_1 210 | - libintl-devel=0.23.1=h27064b9_0 211 | - libintl=0.23.1=h27064b9_0 212 | - libjpeg-turbo=3.0.0=h0dc2134_1 213 | - liblapack=3.9.0=31_h236ab99_openblas 214 | - liblimesuite=23.11.0=h240833e_1 215 | - libliquid1=1.6.0=h8a64ec7_2 216 | - libllvm17=17.0.6=hbedff68_1 217 | - libllvm19=19.1.7=hc29ff6c_1 218 | - liblzma=5.6.4=hd471939_0 219 | - libm2k=0.9.0=py312h3a92375_1 220 | - libmamba=1.5.12=h415aaf8_0 221 | - libmambapy=1.5.12=py312h4e4b3da_0 222 | - libmatio=1.5.28=h0572109_2 223 | - libmirisdr4=2.0.0=h6e16a3a_1 224 | - libnghttp2=1.64.0=hc7306c3_0 225 | - libntlm=1.8=h6e16a3a_0 226 | - libogg=1.3.5=hfdf4475_0 227 | - libopenblas=0.3.29=openmp_hbf64a52_0 228 | - libopus=1.3.1=hc929b4f_1 229 | - libosmodsp0=0.4.0=h8a64ec7_2 230 | - libpcap=1.10.4=h0dc2134_1 231 | - libpng=1.6.47=h3c4a55f_0 232 | - libpq=17.4=h9c5cfc2_0 233 | - libprotobuf=5.28.3=h6401091_1 234 | - librsvg=2.58.4=h21a6cfa_2 235 | - librtaudio6=5.2.0=h73e2aa4_3 236 | - libsndfile=1.2.2=h9603cec_1 237 | - libsodium=1.0.20=hfdf4475_0 238 | - libsolv=0.7.30=h69d5d9b_0 239 | - libsqlite=3.49.1=hdb6dae5_1 240 | - libssh2=1.11.1=h3dc7d44_0 241 | - libthrift=0.21.0=h75589b3_0 242 | - libtiff=4.7.0=hb77a491_3 243 | - libusb=1.0.27=h6e16a3a_101 244 | - libuv=1.50.0=h4cb831e_0 245 | - libvorbis=1.3.7=h046ec9c_0 246 | - libwebp-base=1.5.0=h6cf52b4_0 247 | - libxcb=1.17.0=hf1f96e2_0 248 | - libxml2=2.13.6=hebb159f_0 249 | - libxslt=1.1.39=h03b04e6_0 250 | - libzlib=1.3.1=hd23fc13_2 251 | - limesuite=23.11.0=h8f9d4fd_1 252 | - llvm-openmp=19.1.7=ha54dae1_0 253 | - lua=5.4.6=hf600f6b_1 254 | - lxml=5.3.1=py312h91b2f42_0 255 | - lz4-c=1.10.0=h240833e_1 256 | - lzo=2.10=h10d778d_1001 257 | - m17-cxx-demod=2.3.3=haaa64e9_5 258 | - mako=1.3.9=pyhd8ed1ab_0 259 | - mamba=1.5.12=py312ha12221d_0 260 | - markdown=3.6=pyhd8ed1ab_0 261 | - markupsafe=3.0.2=py312h3520af0_1 262 | - matplotlib-base=3.10.1=py312h535dea3_0 263 | - matplotlib-inline=0.1.7=pyhd8ed1ab_1 264 | - matplotlib=3.10.1=py312hb401068_0 265 | - menuinst=2.2.0=py312hb401068_0 266 | - mesalib=25.0.1=hc187380_0 267 | - mirisdr=2.0.0=h6e16a3a_1 268 | - mpg123=1.32.9=h78e78a4_0 269 | - mplcursors=0.6=pyhd8ed1ab_1 270 | - munkres=1.1.4=pyh9f0ad1d_0 271 | - mysql-common=9.0.1=hd00b0ec_5 272 | - mysql-libs=9.0.1=h062309a_5 273 | - ncurses=6.5=h0622a9a_3 274 | - nspr=4.36=h97d8b74_0 275 | - nss=3.108=h32a8879_0 276 | - numexpr=2.10.2=py312ha51eba0_0 277 | - numpy=2.2.3=py312h6693b03_0 278 | - openjpeg=2.5.3=h7fd6d84_0 279 | - openldap=2.6.9=hd8a590d_0 280 | - openssl=3.4.1=hc426f3f_0 281 | - packaging=24.2=pyhd8ed1ab_2 282 | - pandas=2.2.3=py312h98e817e_1 283 | - pango=1.56.2=hf94f63b_0 284 | - paramiko=3.5.1=pyhd8ed1ab_0 285 | - parso=0.8.4=pyhd8ed1ab_1 286 | - pcre2=10.44=h7634a1b_2 287 | - pexpect=4.9.0=pyhd8ed1ab_1 288 | - pickleshare=0.7.5=pyhd8ed1ab_1004 289 | - pillow=11.1.0=py312hd9f36e3_0 290 | - pip=25.0.1=pyh8b19718_0 291 | - pixman=0.44.2=h1fd1274_0 292 | - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 293 | - platformdirs=4.3.6=pyhd8ed1ab_1 294 | - pluggy=1.5.0=pyhd8ed1ab_1 295 | - ply=3.11=pyhd8ed1ab_3 296 | - portaudio=19.7.0=h97d8b74_0 297 | - prompt-toolkit=3.0.50=pyha770c72_0 298 | - pthread-stubs=0.4=h00291cd_1002 299 | - ptyprocess=0.7.0=pyhd8ed1ab_1 300 | - pugixml=1.15=h46091d4_0 301 | - pure_eval=0.2.3=pyhd8ed1ab_1 302 | - pyadi-iio=0.0.19=pyhd8ed1ab_0 303 | - pybind11-abi=4=hd8ed1ab_3 304 | - pycairo=1.27.0=py312hc3eca63_0 305 | - pycosat=0.6.6=py312h01d7ebd_2 306 | - pycparser=2.22=pyh29332c3_1 307 | - pyfda=0.9.2=pyh9208f05_1 308 | - pyfiglet=0.8.post1=py_0 309 | - pygments=2.19.1=pyhd8ed1ab_0 310 | - pygobject=3.50.0=py312h30111ac_1 311 | - pylibiio=0.26=py_1 312 | - pynacl=1.5.0=py312hb553811_4 313 | - pyopengl=3.1.7=pyhd8ed1ab_0 314 | - pyparsing=3.2.1=pyhd8ed1ab_0 315 | - pyqt5-sip=12.12.2=py312he36337a_5 316 | - pyqt=5.15.9=py312hd74d816_5 317 | - pyqtgraph=0.13.7=pyhd8ed1ab_1 318 | - pysocks=1.7.1=pyha55dd90_7 319 | - python-dateutil=2.9.0.post0=pyhff2d567_1 320 | - python-engineio=4.11.2=pyhff2d567_0 321 | - python-socketio=5.12.1=pyhd8ed1ab_0 322 | - python-tzdata=2025.1=pyhd8ed1ab_0 323 | - python=3.12.9=h9ccd52b_1_cpython 324 | - python_abi=3.12=5_cp312 325 | - pytz=2024.1=pyhd8ed1ab_0 326 | - pywin32-on-windows=0.1.0=pyh1179c8e_3 327 | - pyyaml=6.0.2=py312h3520af0_2 328 | - pyzmq=26.3.0=py312h679dbab_0 329 | - qdarkstyle=3.2.3=pyhd8ed1ab_1 330 | - qhull=2020.2=h3c5361c_5 331 | - qt-main=5.15.15=h30a8c49_2 332 | - qtpy=2.4.3=pyhd8ed1ab_0 333 | - qwt=6.3.0=h69e1d46_0 334 | - readline=8.2=h7cca4af_2 335 | - referencing=0.36.2=pyh29332c3_0 336 | - reproc-cpp=14.2.5.post0=h240833e_0 337 | - reproc=14.2.5.post0=h6e16a3a_0 338 | - requests=2.32.3=pyhd8ed1ab_1 339 | - rpds-py=0.23.1=py312hb59e30e_0 340 | - rtl-sdr=2.0.2=h6e16a3a_3 341 | - ruamel.yaml.clib=0.2.8=py312h3d0f464_1 342 | - ruamel.yaml=0.18.10=py312h01d7ebd_0 343 | - scipy=1.15.2=py312hd04560d_0 344 | - sdl2=2.32.50=hc0cb955_1 345 | - sdl3=3.2.8=h6dd79e8_0 346 | - sdl=1.2.68=hc0cb955_1 347 | - setuptools=75.8.2=pyhff2d567_0 348 | - simple-websocket=1.1.0=pyhd8ed1ab_0 349 | - sip=6.7.12=py312h444b7ae_0 350 | - six=1.17.0=pyhd8ed1ab_0 351 | - soapysdr-module-airspy=0.2.0=ha64c28d_0 352 | - soapysdr-module-airspyhf=0.2.0=ha64c28d_0 353 | - soapysdr-module-audio=0.1.1=h4045702_2 354 | - soapysdr-module-bladerf=0.4.1=h3f20bda_0 355 | - soapysdr-module-hackrf=0.3.4=ha64c28d_0 356 | - soapysdr-module-lms7=23.11.0=hd56791b_1 357 | - soapysdr-module-netsdr=0.2.0=h7ecdfb7_1 358 | - soapysdr-module-plutosdr=0.2.2=h71197eb_1 359 | - soapysdr-module-redpitaya=0.1.1=h7ecdfb7_0 360 | - soapysdr-module-remote=0.5.2=ha64c28d_2 361 | - soapysdr-module-rtlsdr=0.3.3=h4104cfc_2 362 | - soapysdr-module-uhd=0.4.1=h7986aa4_14 363 | - soapysdr-module-volk-converters=0.1.1=ha5c124a_3 364 | - soapysdr=0.8.1=py312hc5c4d5f_5 365 | - spdlog=1.15.1=h65da0ee_0 366 | - stack_data=0.6.3=pyhd8ed1ab_1 367 | - superlu=5.2.2=h1f0f902_0 368 | - tk=8.6.13=h1abcd95_1 369 | - toml=0.10.2=pyhd8ed1ab_1 370 | - tomli=2.2.1=pyhd8ed1ab_1 371 | - tornado=6.4.2=py312h01d7ebd_0 372 | - tqdm=4.67.1=pyhd8ed1ab_1 373 | - traitlets=5.14.3=pyhd8ed1ab_1 374 | - truststore=0.10.1=pyh29332c3_0 375 | - typing_extensions=4.12.2=pyha770c72_1 376 | - tzdata=2025a=h78e105d_0 377 | - uhd=4.8.0.0=py312h807a617_0 378 | - unicodedata2=16.0.0=py312h01d7ebd_0 379 | - urllib3=2.3.0=pyhd8ed1ab_0 380 | - volk-gnss-sdr=0.0.19=h82088ff_8 381 | - volk=3.2.0=hfa89f99_0 382 | - watchdog=6.0.0=py312h01d7ebd_0 383 | - wcwidth=0.2.13=pyhd8ed1ab_1 384 | - websocket-client=1.8.0=pyhd8ed1ab_1 385 | - werkzeug=3.1.3=pyhd8ed1ab_1 386 | - wheel=0.45.1=pyhd8ed1ab_1 387 | - wsproto=1.2.0=pyhd8ed1ab_1 388 | - wxwidgets=3.2.6=h91367df_3 389 | - xorg-libx11=1.8.12=h217831a_0 390 | - xorg-libxau=1.0.12=h6e16a3a_0 391 | - xorg-libxdamage=1.1.6=h00291cd_0 392 | - xorg-libxdmcp=1.1.5=h00291cd_0 393 | - xorg-libxext=1.3.6=h00291cd_0 394 | - xorg-libxfixes=6.0.1=h00291cd_0 395 | - xorg-libxrandr=1.5.4=h00291cd_0 396 | - xorg-libxrender=0.9.12=h6e16a3a_0 397 | - yaml-cpp=0.8.0=he965462_0 398 | - yaml=0.2.5=h0d85af4_2 399 | - zeromq=4.3.5=h7130eaa_7 400 | - zipp=3.21.0=pyhd8ed1ab_1 401 | - zlib=1.3.1=hd23fc13_2 402 | - zope.event=5.0=pyhd8ed1ab_1 403 | - zope.interface=7.2=py312h01d7ebd_0 404 | - zstandard=0.23.0=py312h01d7ebd_1 405 | - zstd=1.5.7=h8210216_1 406 | user_requested_specs: 407 | - airspy 408 | - airspyhf 409 | - bladerf 410 | - codec2 411 | - conda 412 | - digital_rf 413 | - ephem 414 | - gnss-sdr 415 | - gnuradio 416 | - gnuradio-adsb 417 | - gnuradio-dect2 418 | - gnuradio-filerepeater 419 | - gnuradio-foo 420 | - gnuradio-fosphor 421 | - gnuradio-gpredict-doppler 422 | - gnuradio-hermeslite2 423 | - gnuradio-hpsdr 424 | - gnuradio-ieee802_11 425 | - gnuradio-ieee802_15_4 426 | - gnuradio-inspector 427 | - gnuradio-iqbalance 428 | - gnuradio-iridium 429 | - gnuradio-leo 430 | - gnuradio-lora_sdr 431 | - gnuradio-m2k 432 | - gnuradio-osmosdr 433 | - gnuradio-paint 434 | - gnuradio-radar 435 | - gnuradio-rds 436 | - gnuradio-satellites 437 | - gqrx 438 | - hackrf 439 | - hamlib-all 440 | - inspectrum 441 | - ipython 442 | - libiio 443 | - libm2k 444 | - limesuite 445 | - m17-cxx-demod 446 | - mamba 447 | - matplotlib 448 | - mirisdr 449 | - numpy 450 | - pandas 451 | - pyadi-iio 452 | - pyfda 453 | - python 454 | - rtl-sdr 455 | - scipy 456 | - soapysdr 457 | - soapysdr-module-airspy 458 | - soapysdr-module-airspyhf 459 | - soapysdr-module-audio 460 | - soapysdr-module-bladerf 461 | - soapysdr-module-hackrf 462 | - soapysdr-module-lms7 463 | - soapysdr-module-netsdr 464 | - soapysdr-module-plutosdr 465 | - soapysdr-module-redpitaya 466 | - soapysdr-module-remote 467 | - soapysdr-module-rtlsdr 468 | - soapysdr-module-uhd 469 | - soapysdr-module-volk-converters 470 | - uhd 471 | version: 2025.03.14 472 | welcome_image: welcome.png 473 | write_condarc: true 474 | -------------------------------------------------------------------------------- /installer_specs/radioconda-osx-64/post_install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | PREFIX="${PREFIX:-$2/radioconda}" 3 | rm -f $PREFIX/pkgs/*.tar.bz2 $PREFIX/pkgs/*.conda 4 | exit 0 5 | -------------------------------------------------------------------------------- /installer_specs/radioconda-osx-64/welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanvolz/radioconda/39df06e488d420f98db766de128387efff5c6ecb/installer_specs/radioconda-osx-64/welcome.png -------------------------------------------------------------------------------- /installer_specs/radioconda-osx-arm64.yml: -------------------------------------------------------------------------------- 1 | channels: 2 | - conda-forge 3 | - ryanvolz 4 | dependencies: 5 | - airspy=1.0.10=h5505292_1 6 | - airspyhf=1.6.8=h5505292_1 7 | - bladerf=2024.05=h5505292_2 8 | - codec2=1.2.0=h5505292_3 9 | - digital_rf=2.6.11=py312hcc8cfac_0 10 | - ephem=4.2=py312hea69d52_0 11 | - gnss-sdr=0.0.19=h07a5497_8 12 | - gnuradio-adsb=0.0.0.20250304.dev+g9645757=unix_py_1 13 | - gnuradio-dect2=0.0.0.20250304.dev+g27a3d6=np20py312h21d183f_1 14 | - gnuradio-filerepeater=0.0.0.20250304.dev+gec6b386=np20py312h9f7a168_2 15 | - gnuradio-foo=0.0.0.20250304.dev+g9e0e2=np20py312h40c587e_1 16 | - gnuradio-fosphor=0.0.0.20250304.dev+g85a0b8f=np20py312h5c45ce2_1 17 | - gnuradio-gpredict-doppler=0.0.0.20250303.dev+g9473cbf=unix_py_1 18 | - gnuradio-hermeslite2=1.0.0.0.post20250305+g2e66561=np20py312h21d183f_0 19 | - gnuradio-hpsdr=0.0.0.20250304.dev+g7748cc9=np20py312h21d183f_1 20 | - gnuradio-ieee802_11=0.0.0.20250304.dev+g761bdd9=np20py312h0f5d4df_2 21 | - gnuradio-ieee802_15_4=3.6.post20250304+g61f4c4a=np20py312h5dd478e_1 22 | - gnuradio-inspector=0.0.0.20250303.dev+gad6a69e=np20py312h0417059_2 23 | - gnuradio-iqbalance=0.38.2=py312he1353b8_7 24 | - gnuradio-iridium=1!1.0.0=py312h4cd8392_16 25 | - gnuradio-leo=1.0.0.post20250214+g8f62b92=np20py312h9f13bda_2 26 | - gnuradio-lora_sdr=0.0.0.20250305.dev+ga8143cb=np20py312h5dd478e_0 27 | - gnuradio-m2k=1.0.0=py312h7ef93ee_13 28 | - gnuradio-osmosdr=0.2.6=py312h293049b_7 29 | - gnuradio-paint=0.0.0.20250303.dev+gfb4f7b6=np20py312h5dd478e_2 30 | - gnuradio-radar=0.0.0.20250220.dev+g92adce2=np20py312hd0075c7_1 31 | - gnuradio-rds=3.10.post20250305+gc1cba54=np20py312h21d183f_0 32 | - gnuradio-satellites=5.7.0=py312h436bcf2_1 33 | - gnuradio=3.10.12.0=py312hf6b0b74_1 34 | - gqrx=2.17.6=py312h4e6af8f_1 35 | - hackrf=2024.02.1=h5d7887c_1 36 | - hamlib-all=4.6.2=osx_2 37 | - inspectrum=0.3.1=h591b114_0 38 | - ipython=9.0.2=pyhfb0248b_0 39 | - libiio=0.26=h00f1824_1 40 | - libm2k=0.9.0=py312hfdc89fd_1 41 | - limesuite=23.11.0=hf6a06aa_1 42 | - m17-cxx-demod=2.3.3=h7b87d6f_5 43 | - matplotlib=3.10.1=py312h1f38498_0 44 | - mirisdr=2.0.0=h5505292_1 45 | - numpy=2.2.3=py312h7c1f314_0 46 | - pandas=2.2.3=py312hcd31e36_1 47 | - pyadi-iio=0.0.19=pyhd8ed1ab_0 48 | - pyfda=0.9.2=pyh9208f05_1 49 | - python=3.12.9=hc22306f_1_cpython 50 | - rtl-sdr=2.0.2=h5505292_3 51 | - scipy=1.15.2=py312h99a188d_0 52 | - soapysdr-module-airspy=0.2.0=h4306ade_0 53 | - soapysdr-module-airspyhf=0.2.0=h4306ade_0 54 | - soapysdr-module-audio=0.1.1=hdc5eb89_2 55 | - soapysdr-module-bladerf=0.4.1=h8167e30_0 56 | - soapysdr-module-hackrf=0.3.4=h4306ade_0 57 | - soapysdr-module-lms7=23.11.0=he93768a_1 58 | - soapysdr-module-netsdr=0.2.0=h370950c_1 59 | - soapysdr-module-plutosdr=0.2.2=h0fda6b5_1 60 | - soapysdr-module-redpitaya=0.1.1=h370950c_0 61 | - soapysdr-module-remote=0.5.2=h4306ade_2 62 | - soapysdr-module-rtlsdr=0.3.3=h70b5976_2 63 | - soapysdr-module-uhd=0.4.1=h1e7af17_14 64 | - soapysdr-module-volk-converters=0.1.1=hd699764_3 65 | - soapysdr=0.8.1=py312h6142ec9_5 66 | - uhd=4.8.0.0=py312hcf98d66_0 67 | name: radioconda 68 | platform: osx-arm64 69 | version: 2025.03.14 70 | -------------------------------------------------------------------------------- /installer_specs/radioconda-osx-arm64/LICENSE: -------------------------------------------------------------------------------- 1 | Radioconda installer code uses BSD-3-Clause license as stated below. 2 | Binary packages that come with radioconda have their own licensing terms 3 | and by installing radioconda you agree to the licensing terms of individual 4 | packages as well. These additional licenses can be found in the 5 | pkgs//info/licenses folder of your radioconda installation. 6 | 7 | ============================================================================= 8 | 9 | Copyright (c) 2021, Ryan Volz 10 | All rights reserved. 11 | 12 | Redistribution and use in source and binary forms, with or without 13 | modification, are permitted provided that the following conditions are met: 14 | 15 | 1. Redistributions of source code must retain the above copyright notice, this 16 | list of conditions and the following disclaimer. 17 | 18 | 2. Redistributions in binary form must reproduce the above copyright notice, 19 | this list of conditions and the following disclaimer in the documentation 20 | and/or other materials provided with the distribution. 21 | 22 | 3. Neither the name of the copyright holder nor the names of its contributors 23 | may be used to endorse or promote products derived from this software without 24 | specific prior written permission. 25 | 26 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 27 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 28 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 29 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 30 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 32 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 33 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 34 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 35 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 | -------------------------------------------------------------------------------- /installer_specs/radioconda-osx-arm64/construct.yaml: -------------------------------------------------------------------------------- 1 | channels: &id001 2 | - conda-forge 3 | - ryanvolz 4 | company: https://github.com/ryanvolz/radioconda 5 | condarc: 6 | channel_priority: strict 7 | channels: *id001 8 | initialize_by_default: true 9 | installer_type: all 10 | keep_pkgs: true 11 | license_file: LICENSE 12 | name: radioconda 13 | post_install: post_install.sh 14 | register_python_default: false 15 | specs: 16 | - adwaita-icon-theme=47.0=unix_0 17 | - airspy=1.0.10=h5505292_1 18 | - airspyhf=1.6.8=h5505292_1 19 | - appdirs=1.4.4=pyhd8ed1ab_1 20 | - archspec=0.2.5=pyhd8ed1ab_0 21 | - armadillo=14.4.0=h4ebc4dc_0 22 | - arpack=3.9.1=nompi_h1f29f7c_102 23 | - asciimatics=1.15.0=pyhd8ed1ab_1 24 | - asttokens=3.0.0=pyhd8ed1ab_1 25 | - atk-1.0=2.38.0=hd03087b_2 26 | - attrs=25.3.0=pyh71513ae_0 27 | - bcrypt=4.3.0=py312hcd83bfe_0 28 | - bidict=0.23.1=pyhd8ed1ab_1 29 | - bladerf=2024.05=h5505292_2 30 | - blinker=1.9.0=pyhff2d567_0 31 | - boltons=24.0.0=pyhd8ed1ab_1 32 | - brotli-bin=1.1.0=hd74edd7_2 33 | - brotli-python=1.1.0=py312hde4cb15_2 34 | - brotli=1.1.0=hd74edd7_2 35 | - bzip2=1.0.8=h99b78c6_7 36 | - c-ares=1.34.4=h5505292_0 37 | - ca-certificates=2025.1.31=hf0a4a13_0 38 | - cached-property=1.5.2=hd8ed1ab_1 39 | - cached_property=1.5.2=pyha770c72_1 40 | - cairo=1.18.4=h6a3b0d2_0 41 | - certifi=2025.1.31=pyhd8ed1ab_0 42 | - cffi=1.17.1=py312h0fad829_0 43 | - charset-normalizer=3.4.1=pyhd8ed1ab_0 44 | - click=8.1.8=pyh707e725_0 45 | - codec2=1.2.0=h5505292_3 46 | - colorama=0.4.6=pyhd8ed1ab_1 47 | - conda-libmamba-solver=24.9.0=pyhd8ed1ab_0 48 | - conda-package-handling=2.4.0=pyh7900ff3_2 49 | - conda-package-streaming=0.11.0=pyhd8ed1ab_1 50 | - conda=24.11.3=py312h81bd7bf_0 51 | - construct=2.10.70=pyhd8ed1ab_0 52 | - contourpy=1.3.1=py312hb23fbb9_0 53 | - cryptography=44.0.2=py312hf9bd80e_0 54 | - cycler=0.12.1=pyhd8ed1ab_1 55 | - cyrus-sasl=2.1.27=h60b93bd_7 56 | - dbus=1.13.6=h3818c69_3 57 | - decorator=5.2.1=pyhd8ed1ab_0 58 | - digital_rf=2.6.11=py312hcc8cfac_0 59 | - distro=1.9.0=pyhd8ed1ab_1 60 | - docutils=0.21.2=pyhd8ed1ab_1 61 | - ephem=4.2=py312hea69d52_0 62 | - epoxy=1.5.10=h1c322ee_1 63 | - exceptiongroup=1.2.2=pyhd8ed1ab_1 64 | - executing=2.1.0=pyhd8ed1ab_1 65 | - expat=2.6.4=h286801f_0 66 | - fftw=3.3.10=nompi_h6637ab6_110 67 | - flask-socketio=5.5.1=pyh29332c3_0 68 | - flask=3.1.0=pyhd8ed1ab_1 69 | - fmt=11.0.2=h420ef59_0 70 | - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 71 | - font-ttf-inconsolata=3.000=h77eed37_0 72 | - font-ttf-source-code-pro=2.038=h77eed37_0 73 | - font-ttf-ubuntu=0.83=h77eed37_3 74 | - fontconfig=2.15.0=h1383a14_1 75 | - fonts-conda-ecosystem=1=0 76 | - fonts-conda-forge=1=0 77 | - fonttools=4.56.0=py312h998013c_0 78 | - freetype=2.13.3=h1d14073_0 79 | - fribidi=1.0.10=h27ca646_0 80 | - frozendict=2.4.6=py312h0bf5046_0 81 | - fs=2.4.16=pyhd8ed1ab_0 82 | - future=1.0.0=pyhd8ed1ab_2 83 | - gdk-pixbuf=2.42.12=h7ddc832_0 84 | - gettext-tools=0.23.1=h493aca8_0 85 | - gettext=0.23.1=h3dcc1bd_0 86 | - gevent-websocket=0.10.1=py_0 87 | - gevent=24.11.1=py312heb20540_0 88 | - gflags=2.2.2=hf9b8971_1005 89 | - glew=2.1.0=h9f76cd9_2 90 | - glfw=3.4=h93a5062_0 91 | - glib-tools=2.82.2=h1dc7a0c_1 92 | - glib=2.82.2=heee381b_1 93 | - glog=0.7.1=heb240a5_0 94 | - gmp=6.3.0=h7bae524_2 95 | - gnss-sdr=0.0.19=h07a5497_8 96 | - gnuradio-adsb=0.0.0.20250304.dev+g9645757=unix_py_1 97 | - gnuradio-core=3.10.12.0=py312h1cd45be_1 98 | - gnuradio-dect2=0.0.0.20250304.dev+g27a3d6=np20py312h21d183f_1 99 | - gnuradio-filerepeater=0.0.0.20250304.dev+gec6b386=np20py312h9f7a168_2 100 | - gnuradio-foo=0.0.0.20250304.dev+g9e0e2=np20py312h40c587e_1 101 | - gnuradio-fosphor=0.0.0.20250304.dev+g85a0b8f=np20py312h5c45ce2_1 102 | - gnuradio-gpredict-doppler=0.0.0.20250303.dev+g9473cbf=unix_py_1 103 | - gnuradio-grc=3.10.12.0=py312h66d8579_1 104 | - gnuradio-hermeslite2=1.0.0.0.post20250305+g2e66561=np20py312h21d183f_0 105 | - gnuradio-hpsdr=0.0.0.20250304.dev+g7748cc9=np20py312h21d183f_1 106 | - gnuradio-ieee802_11=0.0.0.20250304.dev+g761bdd9=np20py312h0f5d4df_2 107 | - gnuradio-ieee802_15_4=3.6.post20250304+g61f4c4a=np20py312h5dd478e_1 108 | - gnuradio-iio=3.10.12.0=py312hcebcc41_1 109 | - gnuradio-inspector=0.0.0.20250303.dev+gad6a69e=np20py312h0417059_2 110 | - gnuradio-iqbalance=0.38.2=py312he1353b8_7 111 | - gnuradio-iridium=1!1.0.0=py312h4cd8392_16 112 | - gnuradio-leo-data=1.0.0.post20250214+g8f62b92=unix_2 113 | - gnuradio-leo=1.0.0.post20250214+g8f62b92=np20py312h9f13bda_2 114 | - gnuradio-lora_sdr=0.0.0.20250305.dev+ga8143cb=np20py312h5dd478e_0 115 | - gnuradio-m2k=1.0.0=py312h7ef93ee_13 116 | - gnuradio-osmosdr=0.2.6=py312h293049b_7 117 | - gnuradio-paint=0.0.0.20250303.dev+gfb4f7b6=np20py312h5dd478e_2 118 | - gnuradio-pmt=3.10.12.0=py312hf3ff670_1 119 | - gnuradio-qtgui=3.10.12.0=py312h285d4ff_1 120 | - gnuradio-radar=0.0.0.20250220.dev+g92adce2=np20py312hd0075c7_1 121 | - gnuradio-rds=3.10.post20250305+gc1cba54=np20py312h21d183f_0 122 | - gnuradio-satellites=5.7.0=py312h436bcf2_1 123 | - gnuradio-soapy=3.10.12.0=py312ha587f02_1 124 | - gnuradio-uhd=3.10.12.0=py312h401ace4_1 125 | - gnuradio-video-sdl=3.10.12.0=py312h66d8579_1 126 | - gnuradio-zeromq=3.10.12.0=py312h014023b_1 127 | - gnuradio=3.10.12.0=py312hf6b0b74_1 128 | - gqrx=2.17.6=py312h4e6af8f_1 129 | - graphite2=1.3.13=hebf3989_1003 130 | - greenlet=3.1.1=py312hd8f9ff3_1 131 | - gsl=2.7=h6e638da_0 132 | - gst-plugins-base=1.24.7=hb49d354_0 133 | - gstreamer-orc=0.4.41=h4a9b20c_0 134 | - gstreamer=1.24.7=hc3f5269_0 135 | - gtest=1.15.2=h420ef59_0 136 | - gtk3=3.24.43=he7bb075_4 137 | - h11=0.14.0=pyhd8ed1ab_1 138 | - h2=4.2.0=pyhd8ed1ab_0 139 | - h5py=3.13.0=nompi_py312hd7c5113_100 140 | - hackrf=2024.02.1=h5d7887c_1 141 | - hamlib-all=4.6.2=osx_2 142 | - hamlib-lua=4.6.2=lua54h5505292_2 143 | - hamlib-python=4.6.2=py312hea69d52_2 144 | - hamlib-tcl=4.6.2=h3c7de25_2 145 | - hamlib=4.6.2=h60c98da_2 146 | - harfbuzz=10.4.0=hb72c1af_0 147 | - hdf5=1.14.3=nompi_ha698983_109 148 | - hicolor-icon-theme=0.17=hce30654_2 149 | - hpack=4.1.0=pyhd8ed1ab_0 150 | - hyperframe=6.1.0=pyhd8ed1ab_0 151 | - icu=75.1=hfee45f7_0 152 | - idna=3.10=pyhd8ed1ab_1 153 | - importlib-metadata=8.6.1=pyha770c72_0 154 | - importlib_resources=6.5.2=pyhd8ed1ab_0 155 | - inspectrum=0.3.1=h591b114_0 156 | - ipython=9.0.2=pyhfb0248b_0 157 | - ipython_pygments_lexers=1.1.1=pyhd8ed1ab_0 158 | - itsdangerous=2.2.0=pyhd8ed1ab_1 159 | - jedi=0.19.2=pyhd8ed1ab_1 160 | - jinja2=3.1.6=pyhd8ed1ab_0 161 | - jsonpatch=1.33=pyhd8ed1ab_1 162 | - jsonpointer=3.0.0=py312h81bd7bf_1 163 | - jsonschema-specifications=2024.10.1=pyhd8ed1ab_1 164 | - jsonschema=4.23.0=pyhd8ed1ab_1 165 | - kiwisolver=1.4.8=py312h2c4a281_0 166 | - krb5=1.21.3=h237132a_0 167 | - lame=3.100=h1a8c8d9_1003 168 | - lcms2=2.17=h7eeda09_0 169 | - lerc=4.0.0=h9a09cb3_0 170 | - libabseil=20240722.0=cxx17_h07bc746_4 171 | - libad9361-iio-c=0.3=hf663b7a_1 172 | - libaec=1.1.3=hebf3989_0 173 | - libairspy=1.0.10=h5505292_1 174 | - libairspyhf=1.6.8=h5505292_1 175 | - libarchive=3.7.7=h3b16cec_3 176 | - libasprintf-devel=0.23.1=h493aca8_0 177 | - libasprintf=0.23.1=h493aca8_0 178 | - libbladerf-python=2024.05=py_2 179 | - libbladerf2=2024.05=h5505292_2 180 | - libblas=3.9.0=31_h10e41b3_openblas 181 | - libboost=1.86.0=hc9fb7c5_3 182 | - libbrotlicommon=1.1.0=hd74edd7_2 183 | - libbrotlidec=1.1.0=hd74edd7_2 184 | - libbrotlienc=1.1.0=hd74edd7_2 185 | - libcblas=3.9.0=31_hb3479ef_openblas 186 | - libclang-cpp17=17.0.6=default_hf90f093_8 187 | - libclang13=19.1.7=default_h81d93ff_1 188 | - libcodec2=1.2.0=h5505292_3 189 | - libcorrect=0.0.0=h1a8c8d9_0 190 | - libcurl=8.12.1=h73640d1_0 191 | - libcxx=19.1.7=ha82da77_0 192 | - libdeflate=1.23=hec38601_0 193 | - libedit=3.1.20250104=pl5321hafb1f1b_0 194 | - libev=4.33=h93a5062_2 195 | - libevent=2.1.12=h2757513_1 196 | - libexpat=2.6.4=h286801f_0 197 | - libffi=3.4.2=h3422bc3_5 198 | - libflac=1.4.3=hb765f3a_0 199 | - libgettextpo-devel=0.23.1=h493aca8_0 200 | - libgettextpo=0.23.1=h493aca8_0 201 | - libgfortran5=13.2.0=hf226fd6_3 202 | - libgfortran=5.0.0=13_2_0_hd922786_3 203 | - libgirepository=1.82.0=h607895c_0 204 | - libglib=2.82.2=hdff4504_1 205 | - libhackrf0=2024.02.1=h5505292_1 206 | - libhamlib4=4.6.2=h286801f_2 207 | - libiconv=1.18=hfe07756_1 208 | - libiio-c=0.26=h0c029c7_1 209 | - libiio=0.26=h00f1824_1 210 | - libintl-devel=0.23.1=h493aca8_0 211 | - libintl=0.23.1=h493aca8_0 212 | - libjpeg-turbo=3.0.0=hb547adb_1 213 | - liblapack=3.9.0=31_hc9a63f6_openblas 214 | - liblimesuite=23.11.0=h286801f_1 215 | - libliquid1=1.6.0=h58f6a93_2 216 | - libllvm17=17.0.6=hc4b4ae8_3 217 | - libllvm19=19.1.7=hc4b4ae8_1 218 | - liblzma=5.6.4=h39f12f2_0 219 | - libm2k=0.9.0=py312hfdc89fd_1 220 | - libmamba=1.5.12=hdf44a08_0 221 | - libmambapy=1.5.12=py312h86ad8a2_0 222 | - libmatio=1.5.28=h36f0bf9_2 223 | - libmirisdr4=2.0.0=h5505292_1 224 | - libnghttp2=1.64.0=h6d7220d_0 225 | - libntlm=1.8=h5505292_0 226 | - libogg=1.3.5=h99b78c6_0 227 | - libopenblas=0.3.29=openmp_hf332438_0 228 | - libopus=1.3.1=h27ca646_1 229 | - libosmodsp0=0.4.0=h58f6a93_2 230 | - libpcap=1.10.4=hb547adb_1 231 | - libpng=1.6.47=h3783ad8_0 232 | - libpq=17.4=h6896619_0 233 | - libprotobuf=5.28.3=h3bd63a1_1 234 | - librsvg=2.58.4=h266df6f_2 235 | - librtaudio6=5.2.0=hebf3989_3 236 | - libsndfile=1.2.2=h9739721_1 237 | - libsodium=1.0.20=h99b78c6_0 238 | - libsolv=0.7.30=h6c9b7f8_0 239 | - libsqlite=3.49.1=h3f77e49_1 240 | - libssh2=1.11.1=h9cc3647_0 241 | - libthrift=0.21.0=h64651cc_0 242 | - libtiff=4.7.0=h551f018_3 243 | - libusb=1.0.27=h5505292_101 244 | - libuv=1.50.0=h5505292_0 245 | - libvorbis=1.3.7=h9f76cd9_0 246 | - libwebp-base=1.5.0=h2471fea_0 247 | - libxcb=1.17.0=hdb1d25a_0 248 | - libxml2=2.13.6=h178c5d8_0 249 | - libxslt=1.1.39=h223e5b9_0 250 | - libzlib=1.3.1=h8359307_2 251 | - limesuite=23.11.0=hf6a06aa_1 252 | - llvm-openmp=19.1.7=hdb05f8b_0 253 | - lua=5.4.6=hfd2a410_1 254 | - lxml=5.3.1=py312h9535dd2_0 255 | - lz4-c=1.10.0=h286801f_1 256 | - lzo=2.10=h93a5062_1001 257 | - m17-cxx-demod=2.3.3=h7b87d6f_5 258 | - mako=1.3.9=pyhd8ed1ab_0 259 | - mamba=1.5.12=py312h14bc7db_0 260 | - markdown=3.6=pyhd8ed1ab_0 261 | - markupsafe=3.0.2=py312h998013c_1 262 | - matplotlib-base=3.10.1=py312hdbc7e53_0 263 | - matplotlib-inline=0.1.7=pyhd8ed1ab_1 264 | - matplotlib=3.10.1=py312h1f38498_0 265 | - menuinst=2.2.0=py312h81bd7bf_0 266 | - mesalib=25.0.1=h5c1a3a9_0 267 | - mirisdr=2.0.0=h5505292_1 268 | - mpg123=1.32.9=hf642e45_0 269 | - mplcursors=0.6=pyhd8ed1ab_1 270 | - munkres=1.1.4=pyh9f0ad1d_0 271 | - mysql-common=9.0.1=hd7719f6_5 272 | - mysql-libs=9.0.1=ha8be5b7_5 273 | - ncurses=6.5=h5e97a16_3 274 | - nspr=4.36=h5833ebf_0 275 | - nss=3.108=ha3c76ea_0 276 | - numexpr=2.10.2=py312hbbbb429_0 277 | - numpy=2.2.3=py312h7c1f314_0 278 | - openjpeg=2.5.3=h8a3d83b_0 279 | - openldap=2.6.9=hbe55e7a_0 280 | - openssl=3.4.1=h81ee809_0 281 | - packaging=24.2=pyhd8ed1ab_2 282 | - pandas=2.2.3=py312hcd31e36_1 283 | - pango=1.56.2=h73f1e88_0 284 | - paramiko=3.5.1=pyhd8ed1ab_0 285 | - parso=0.8.4=pyhd8ed1ab_1 286 | - pcre2=10.44=h297a79d_2 287 | - pexpect=4.9.0=pyhd8ed1ab_1 288 | - pickleshare=0.7.5=pyhd8ed1ab_1004 289 | - pillow=11.1.0=py312h50aef2c_0 290 | - pip=25.0.1=pyh8b19718_0 291 | - pixman=0.44.2=h2f9eb0b_0 292 | - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 293 | - platformdirs=4.3.6=pyhd8ed1ab_1 294 | - pluggy=1.5.0=pyhd8ed1ab_1 295 | - ply=3.11=pyhd8ed1ab_3 296 | - portaudio=19.7.0=h5833ebf_0 297 | - prompt-toolkit=3.0.50=pyha770c72_0 298 | - pthread-stubs=0.4=hd74edd7_1002 299 | - ptyprocess=0.7.0=pyhd8ed1ab_1 300 | - pugixml=1.15=hd3d436d_0 301 | - pure_eval=0.2.3=pyhd8ed1ab_1 302 | - pyadi-iio=0.0.19=pyhd8ed1ab_0 303 | - pybind11-abi=4=hd8ed1ab_3 304 | - pycairo=1.27.0=py312h798cee4_0 305 | - pycosat=0.6.6=py312hea69d52_2 306 | - pycparser=2.22=pyh29332c3_1 307 | - pyfda=0.9.2=pyh9208f05_1 308 | - pyfiglet=0.8.post1=py_0 309 | - pygments=2.19.1=pyhd8ed1ab_0 310 | - pygobject=3.50.0=py312hc4f7465_1 311 | - pylibiio=0.26=py_1 312 | - pynacl=1.5.0=py312h024a12e_4 313 | - pyopengl=3.1.7=pyhd8ed1ab_0 314 | - pyparsing=3.2.1=pyhd8ed1ab_0 315 | - pyqt5-sip=12.12.2=py312h9f69965_5 316 | - pyqt=5.15.9=py312h550cae4_5 317 | - pyqtgraph=0.13.7=pyhd8ed1ab_1 318 | - pysocks=1.7.1=pyha55dd90_7 319 | - python-dateutil=2.9.0.post0=pyhff2d567_1 320 | - python-engineio=4.11.2=pyhff2d567_0 321 | - python-socketio=5.12.1=pyhd8ed1ab_0 322 | - python-tzdata=2025.1=pyhd8ed1ab_0 323 | - python=3.12.9=hc22306f_1_cpython 324 | - python_abi=3.12=5_cp312 325 | - pytz=2024.1=pyhd8ed1ab_0 326 | - pywin32-on-windows=0.1.0=pyh1179c8e_3 327 | - pyyaml=6.0.2=py312h998013c_2 328 | - pyzmq=26.3.0=py312hf4875e0_0 329 | - qdarkstyle=3.2.3=pyhd8ed1ab_1 330 | - qhull=2020.2=h420ef59_5 331 | - qt-main=5.15.15=h67564f6_2 332 | - qtpy=2.4.3=pyhd8ed1ab_0 333 | - qwt=6.3.0=h4ff56cd_0 334 | - readline=8.2=h1d1bf99_2 335 | - referencing=0.36.2=pyh29332c3_0 336 | - reproc-cpp=14.2.5.post0=h286801f_0 337 | - reproc=14.2.5.post0=h5505292_0 338 | - requests=2.32.3=pyhd8ed1ab_1 339 | - rpds-py=0.23.1=py312hd60eec9_0 340 | - rtl-sdr=2.0.2=h5505292_3 341 | - ruamel.yaml.clib=0.2.8=py312h0bf5046_1 342 | - ruamel.yaml=0.18.10=py312hea69d52_0 343 | - scipy=1.15.2=py312h99a188d_0 344 | - sdl2=2.32.50=h994913f_1 345 | - sdl3=3.2.8=he842692_0 346 | - sdl=1.2.68=h994913f_1 347 | - setuptools=75.8.2=pyhff2d567_0 348 | - simple-websocket=1.1.0=pyhd8ed1ab_0 349 | - sip=6.8.6=py312hde4cb15_1 350 | - six=1.17.0=pyhd8ed1ab_0 351 | - soapysdr-module-airspy=0.2.0=h4306ade_0 352 | - soapysdr-module-airspyhf=0.2.0=h4306ade_0 353 | - soapysdr-module-audio=0.1.1=hdc5eb89_2 354 | - soapysdr-module-bladerf=0.4.1=h8167e30_0 355 | - soapysdr-module-hackrf=0.3.4=h4306ade_0 356 | - soapysdr-module-lms7=23.11.0=he93768a_1 357 | - soapysdr-module-netsdr=0.2.0=h370950c_1 358 | - soapysdr-module-plutosdr=0.2.2=h0fda6b5_1 359 | - soapysdr-module-redpitaya=0.1.1=h370950c_0 360 | - soapysdr-module-remote=0.5.2=h4306ade_2 361 | - soapysdr-module-rtlsdr=0.3.3=h70b5976_2 362 | - soapysdr-module-uhd=0.4.1=h1e7af17_14 363 | - soapysdr-module-volk-converters=0.1.1=hd699764_3 364 | - soapysdr=0.8.1=py312h6142ec9_5 365 | - spdlog=1.15.1=hed1c2b2_0 366 | - stack_data=0.6.3=pyhd8ed1ab_1 367 | - superlu=5.2.2=hc615359_0 368 | - tk=8.6.13=h5083fa2_1 369 | - toml=0.10.2=pyhd8ed1ab_1 370 | - tomli=2.2.1=pyhd8ed1ab_1 371 | - tornado=6.4.2=py312hea69d52_0 372 | - tqdm=4.67.1=pyhd8ed1ab_1 373 | - traitlets=5.14.3=pyhd8ed1ab_1 374 | - truststore=0.10.1=pyh29332c3_0 375 | - typing_extensions=4.12.2=pyha770c72_1 376 | - tzdata=2025a=h78e105d_0 377 | - uhd=4.8.0.0=py312hcf98d66_0 378 | - unicodedata2=16.0.0=py312hea69d52_0 379 | - urllib3=2.3.0=pyhd8ed1ab_0 380 | - volk-gnss-sdr=0.0.19=h06bbddc_8 381 | - volk=3.2.0=h71a8b11_0 382 | - watchdog=6.0.0=py312hea69d52_0 383 | - wcwidth=0.2.13=pyhd8ed1ab_1 384 | - websocket-client=1.8.0=pyhd8ed1ab_1 385 | - werkzeug=3.1.3=pyhd8ed1ab_1 386 | - wheel=0.45.1=pyhd8ed1ab_1 387 | - wsproto=1.2.0=pyhd8ed1ab_1 388 | - wxwidgets=3.2.6=hbeba7cf_3 389 | - xorg-libx11=1.8.12=h6a5fb8c_0 390 | - xorg-libxau=1.0.12=h5505292_0 391 | - xorg-libxdamage=1.1.6=hd74edd7_0 392 | - xorg-libxdmcp=1.1.5=hd74edd7_0 393 | - xorg-libxext=1.3.6=hd74edd7_0 394 | - xorg-libxfixes=6.0.1=hd74edd7_0 395 | - xorg-libxrandr=1.5.4=hd74edd7_0 396 | - xorg-libxrender=0.9.12=h5505292_0 397 | - yaml-cpp=0.8.0=h13dd4ca_0 398 | - yaml=0.2.5=h3422bc3_2 399 | - zeromq=4.3.5=hc1bb282_7 400 | - zipp=3.21.0=pyhd8ed1ab_1 401 | - zlib=1.3.1=h8359307_2 402 | - zope.event=5.0=pyhd8ed1ab_1 403 | - zope.interface=7.2=py312hea69d52_0 404 | - zstandard=0.23.0=py312hea69d52_1 405 | - zstd=1.5.7=h6491c7d_1 406 | user_requested_specs: 407 | - airspy 408 | - airspyhf 409 | - bladerf 410 | - codec2 411 | - conda 412 | - digital_rf 413 | - ephem 414 | - gnss-sdr 415 | - gnuradio 416 | - gnuradio-adsb 417 | - gnuradio-dect2 418 | - gnuradio-filerepeater 419 | - gnuradio-foo 420 | - gnuradio-fosphor 421 | - gnuradio-gpredict-doppler 422 | - gnuradio-hermeslite2 423 | - gnuradio-hpsdr 424 | - gnuradio-ieee802_11 425 | - gnuradio-ieee802_15_4 426 | - gnuradio-inspector 427 | - gnuradio-iqbalance 428 | - gnuradio-iridium 429 | - gnuradio-leo 430 | - gnuradio-lora_sdr 431 | - gnuradio-m2k 432 | - gnuradio-osmosdr 433 | - gnuradio-paint 434 | - gnuradio-radar 435 | - gnuradio-rds 436 | - gnuradio-satellites 437 | - gqrx 438 | - hackrf 439 | - hamlib-all 440 | - inspectrum 441 | - ipython 442 | - libiio 443 | - libm2k 444 | - limesuite 445 | - m17-cxx-demod 446 | - mamba 447 | - matplotlib 448 | - mirisdr 449 | - numpy 450 | - pandas 451 | - pyadi-iio 452 | - pyfda 453 | - python 454 | - rtl-sdr 455 | - scipy 456 | - soapysdr 457 | - soapysdr-module-airspy 458 | - soapysdr-module-airspyhf 459 | - soapysdr-module-audio 460 | - soapysdr-module-bladerf 461 | - soapysdr-module-hackrf 462 | - soapysdr-module-lms7 463 | - soapysdr-module-netsdr 464 | - soapysdr-module-plutosdr 465 | - soapysdr-module-redpitaya 466 | - soapysdr-module-remote 467 | - soapysdr-module-rtlsdr 468 | - soapysdr-module-uhd 469 | - soapysdr-module-volk-converters 470 | - uhd 471 | version: 2025.03.14 472 | welcome_image: welcome.png 473 | write_condarc: true 474 | -------------------------------------------------------------------------------- /installer_specs/radioconda-osx-arm64/post_install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | PREFIX="${PREFIX:-$2/radioconda}" 3 | rm -f $PREFIX/pkgs/*.tar.bz2 $PREFIX/pkgs/*.conda 4 | exit 0 5 | -------------------------------------------------------------------------------- /installer_specs/radioconda-osx-arm64/welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanvolz/radioconda/39df06e488d420f98db766de128387efff5c6ecb/installer_specs/radioconda-osx-arm64/welcome.png -------------------------------------------------------------------------------- /installer_specs/radioconda-win-64.yml: -------------------------------------------------------------------------------- 1 | channels: 2 | - conda-forge 3 | - ryanvolz 4 | dependencies: 5 | - airspy=1.0.10=h2466b09_1 6 | - airspyhf=1.6.8=h2466b09_1 7 | - bladerf=2024.05=h2466b09_2 8 | - codec2=1.2.0=hb66ff0d_3 9 | - digital_rf=2.6.11=py312h4ae2cae_0 10 | - ephem=4.2=py312h4389bb4_0 11 | - gnuradio-adsb=0.0.0.20250304.dev+g9645757=win_py_1 12 | - gnuradio-dect2=0.0.0.20250304.dev+g27a3d6=np20py312h9258957_1 13 | - gnuradio-filerepeater=0.0.0.20250304.dev+gec6b386=np20py312h7ccdc22_2 14 | - gnuradio-foo=0.0.0.20250304.dev+g9e0e2=np20py312h5493229_1 15 | - gnuradio-fosphor=0.0.0.20250304.dev+g85a0b8f=np20py312h882ae0e_1 16 | - gnuradio-gpredict-doppler=0.0.0.20250303.dev+g9473cbf=win_py_1 17 | - gnuradio-ieee802_11=0.0.0.20250304.dev+g761bdd9=np20py312he13c6b4_2 18 | - gnuradio-ieee802_15_4=3.6.post20250304+g61f4c4a=np20py312h7473803_1 19 | - gnuradio-inspector=0.0.0.20250303.dev+gad6a69e=np20py312hdc842b3_2 20 | - gnuradio-iqbalance=0.38.2=py312h8eec19f_7 21 | - gnuradio-iridium=1!1.0.0=py312hb011683_16 22 | - gnuradio-leo=1.0.0.post20250214+g8f62b92=np20py312h2db4f98_2 23 | - gnuradio-lora_sdr=0.0.0.20250305.dev+ga8143cb=np20py312h7473803_0 24 | - gnuradio-m2k=1.0.0=py312h7d4c3bc_13 25 | - gnuradio-osmosdr=0.2.6=py312h2d50b52_7 26 | - gnuradio-paint=0.0.0.20250303.dev+gfb4f7b6=np20py312h7473803_2 27 | - gnuradio-radar=0.0.0.20250220.dev+g92adce2=np20py312h8a59db7_1 28 | - gnuradio-rds=3.10.post20250305+gc1cba54=np20py312h9258957_0 29 | - gnuradio-satellites=5.7.0=py312hbcc94bf_1 30 | - gnuradio=3.10.12.0=py312h71de32f_1 31 | - gqrx=2.17.6=h8ed8190_1 32 | - hackrf=2024.02.1=hc14e81b_1 33 | - hamlib-all=4.6.2=win_2 34 | - inspectrum=0.3.1=hfd82842_0 35 | - ipython=9.0.2=pyhca29cf9_0 36 | - libiio=0.26=h8f595e5_1 37 | - libm2k=0.9.0=py312h87514d0_1 38 | - limesuite=23.11.0=h06e44ad_1 39 | - m17-cxx-demod=2.3.3=h01e1179_5 40 | - matplotlib=3.10.1=py312h2e8e312_0 41 | - mirisdr=2.0.0=h2466b09_1 42 | - numpy=2.2.3=py312h3150e54_0 43 | - pandas=2.2.3=py312h72972c8_1 44 | - pyadi-iio=0.0.19=pyhd8ed1ab_0 45 | - pyfda=0.9.2=pyh9208f05_1 46 | - python=3.12.9=h3f84c4b_1_cpython 47 | - rtl-sdr=2.0.2=h2466b09_3 48 | - scipy=1.15.2=py312h451d5c4_0 49 | - soapysdr-module-airspy=0.2.0=h23704b7_0 50 | - soapysdr-module-airspyhf=0.2.0=h23704b7_0 51 | - soapysdr-module-audio=0.1.1=h2b4c12a_2 52 | - soapysdr-module-bladerf=0.4.1=h23704b7_0 53 | - soapysdr-module-hackrf=0.3.4=h23704b7_0 54 | - soapysdr-module-lms7=23.11.0=hdfb3ff0_1 55 | - soapysdr-module-netsdr=0.2.0=h78c1c11_1 56 | - soapysdr-module-plutosdr=0.2.2=h18c8474_1 57 | - soapysdr-module-redpitaya=0.1.1=h78c1c11_0 58 | - soapysdr-module-remote=0.5.2=h23704b7_2 59 | - soapysdr-module-rtlsdr=0.3.3=h78c1c11_2 60 | - soapysdr-module-uhd=0.4.1=h241d428_14 61 | - soapysdr-module-volk-converters=0.1.1=h6358f5f_3 62 | - soapysdr=0.8.1=py312hd5eb7cc_5 63 | - uhd=4.8.0.0=py312h80b3061_0 64 | name: radioconda 65 | platform: win-64 66 | variables: 67 | GRC_BLOCKS_PATH: '' 68 | GR_PREFIX: '' 69 | UHD_PKG_PATH: '' 70 | VOLK_PREFIX: '' 71 | version: 2025.03.14 72 | -------------------------------------------------------------------------------- /installer_specs/radioconda-win-64/LICENSE: -------------------------------------------------------------------------------- 1 | Radioconda installer code uses BSD-3-Clause license as stated below. 2 | Binary packages that come with radioconda have their own licensing terms 3 | and by installing radioconda you agree to the licensing terms of individual 4 | packages as well. These additional licenses can be found in the 5 | pkgs//info/licenses folder of your radioconda installation. 6 | 7 | ============================================================================= 8 | 9 | Copyright (c) 2021, Ryan Volz 10 | All rights reserved. 11 | 12 | Redistribution and use in source and binary forms, with or without 13 | modification, are permitted provided that the following conditions are met: 14 | 15 | 1. Redistributions of source code must retain the above copyright notice, this 16 | list of conditions and the following disclaimer. 17 | 18 | 2. Redistributions in binary form must reproduce the above copyright notice, 19 | this list of conditions and the following disclaimer in the documentation 20 | and/or other materials provided with the distribution. 21 | 22 | 3. Neither the name of the copyright holder nor the names of its contributors 23 | may be used to endorse or promote products derived from this software without 24 | specific prior written permission. 25 | 26 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 27 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 28 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 29 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 30 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 32 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 33 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 34 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 35 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 | -------------------------------------------------------------------------------- /installer_specs/radioconda-win-64/construct.yaml: -------------------------------------------------------------------------------- 1 | channels: &id001 2 | - conda-forge 3 | - ryanvolz 4 | company: https://github.com/ryanvolz/radioconda 5 | condarc: 6 | channel_priority: strict 7 | channels: *id001 8 | header_image: header.png 9 | icon_image: icon.png 10 | initialize_by_default: false 11 | installer_type: all 12 | keep_pkgs: true 13 | license_file: LICENSE 14 | name: radioconda 15 | nsis_template: main.nsi.tmpl 16 | post_install: post_install.bat 17 | register_python_default: false 18 | specs: 19 | - _openmp_mutex=4.5=2_gnu 20 | - adwaita-icon-theme=47.0=win_0 21 | - airspy=1.0.10=h2466b09_1 22 | - airspyhf=1.6.8=h2466b09_1 23 | - appdirs=1.4.4=pyhd8ed1ab_1 24 | - archspec=0.2.5=pyhd8ed1ab_0 25 | - asciimatics=1.15.0=pyhd8ed1ab_1 26 | - asttokens=3.0.0=pyhd8ed1ab_1 27 | - atk-1.0=2.38.0=hb44c4ce_2 28 | - attrs=25.3.0=pyh71513ae_0 29 | - bcrypt=4.3.0=py312h2615798_0 30 | - bidict=0.23.1=pyhd8ed1ab_1 31 | - bladerf=2024.05=h2466b09_2 32 | - blinker=1.9.0=pyhff2d567_0 33 | - boltons=24.0.0=pyhd8ed1ab_1 34 | - brotli-bin=1.1.0=h2466b09_2 35 | - brotli-python=1.1.0=py312h275cf98_2 36 | - brotli=1.1.0=h2466b09_2 37 | - bzip2=1.0.8=h2466b09_7 38 | - ca-certificates=2025.1.31=h56e8100_0 39 | - cached-property=1.5.2=hd8ed1ab_1 40 | - cached_property=1.5.2=pyha770c72_1 41 | - cairo=1.18.4=h5782bbf_0 42 | - certifi=2025.1.31=pyhd8ed1ab_0 43 | - cffi=1.17.1=py312h4389bb4_0 44 | - charset-normalizer=3.4.1=pyhd8ed1ab_0 45 | - click=8.1.8=pyh7428d3b_0 46 | - codec2=1.2.0=hb66ff0d_3 47 | - colorama=0.4.6=pyhd8ed1ab_1 48 | - conda-libmamba-solver=24.9.0=pyhd8ed1ab_0 49 | - conda-package-handling=2.4.0=pyh7900ff3_2 50 | - conda-package-streaming=0.11.0=pyhd8ed1ab_1 51 | - conda=24.11.3=py312h2e8e312_0 52 | - construct=2.10.70=pyhd8ed1ab_0 53 | - contourpy=1.3.1=py312hd5eb7cc_0 54 | - cryptography=44.0.2=py312h9500af3_0 55 | - cycler=0.12.1=pyhd8ed1ab_1 56 | - decorator=5.2.1=pyhd8ed1ab_0 57 | - digital_rf=2.6.11=py312h4ae2cae_0 58 | - distro=1.9.0=pyhd8ed1ab_1 59 | - docutils=0.21.2=pyhd8ed1ab_1 60 | - double-conversion=3.3.1=he0c23c2_0 61 | - ephem=4.2=py312h4389bb4_0 62 | - epoxy=1.5.10=h8d14728_1 63 | - exceptiongroup=1.2.2=pyhd8ed1ab_1 64 | - executing=2.1.0=pyhd8ed1ab_1 65 | - fftw=3.3.10=nompi_h89e6982_110 66 | - flask-socketio=5.5.1=pyh29332c3_0 67 | - flask=3.1.0=pyhd8ed1ab_1 68 | - fmt=11.0.2=h7f575de_0 69 | - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 70 | - font-ttf-inconsolata=3.000=h77eed37_0 71 | - font-ttf-source-code-pro=2.038=h77eed37_0 72 | - font-ttf-ubuntu=0.83=h77eed37_3 73 | - fontconfig=2.15.0=h765892d_1 74 | - fonts-conda-ecosystem=1=0 75 | - fonts-conda-forge=1=0 76 | - fonttools=4.56.0=py312h31fea79_0 77 | - freetype=2.13.3=h0b5ce68_0 78 | - fribidi=1.0.10=h8d14728_0 79 | - frozendict=2.4.6=py312h4389bb4_0 80 | - fs=2.4.16=pyhd8ed1ab_0 81 | - future=1.0.0=pyhd8ed1ab_2 82 | - gdk-pixbuf=2.42.12=hed59a49_0 83 | - gevent-websocket=0.10.1=py_0 84 | - gevent=24.11.1=py312h4389bb4_0 85 | - glew=2.1.0=h39d44d4_2 86 | - glfw=3.4=hcfcfb64_0 87 | - glib-tools=2.82.2=h4394cf3_1 88 | - glib=2.82.2=h3d4babf_1 89 | - gnuradio-adsb=0.0.0.20250304.dev+g9645757=win_py_1 90 | - gnuradio-core=3.10.12.0=py312h509acc3_1 91 | - gnuradio-dect2=0.0.0.20250304.dev+g27a3d6=np20py312h9258957_1 92 | - gnuradio-filerepeater=0.0.0.20250304.dev+gec6b386=np20py312h7ccdc22_2 93 | - gnuradio-foo=0.0.0.20250304.dev+g9e0e2=np20py312h5493229_1 94 | - gnuradio-fosphor=0.0.0.20250304.dev+g85a0b8f=np20py312h882ae0e_1 95 | - gnuradio-gpredict-doppler=0.0.0.20250303.dev+g9473cbf=win_py_1 96 | - gnuradio-grc=3.10.12.0=py312h8dc5eaa_1 97 | - gnuradio-ieee802_11=0.0.0.20250304.dev+g761bdd9=np20py312he13c6b4_2 98 | - gnuradio-ieee802_15_4=3.6.post20250304+g61f4c4a=np20py312h7473803_1 99 | - gnuradio-iio=3.10.12.0=py312hb16bde5_1 100 | - gnuradio-inspector=0.0.0.20250303.dev+gad6a69e=np20py312hdc842b3_2 101 | - gnuradio-iqbalance=0.38.2=py312h8eec19f_7 102 | - gnuradio-iridium=1!1.0.0=py312hb011683_16 103 | - gnuradio-leo-data=1.0.0.post20250214+g8f62b92=win_2 104 | - gnuradio-leo=1.0.0.post20250214+g8f62b92=np20py312h2db4f98_2 105 | - gnuradio-lora_sdr=0.0.0.20250305.dev+ga8143cb=np20py312h7473803_0 106 | - gnuradio-m2k=1.0.0=py312h7d4c3bc_13 107 | - gnuradio-osmosdr=0.2.6=py312h2d50b52_7 108 | - gnuradio-paint=0.0.0.20250303.dev+gfb4f7b6=np20py312h7473803_2 109 | - gnuradio-pmt=3.10.12.0=py312h1f9cfd4_1 110 | - gnuradio-qtgui=3.10.12.0=py312h8031a72_1 111 | - gnuradio-radar=0.0.0.20250220.dev+g92adce2=np20py312h8a59db7_1 112 | - gnuradio-rds=3.10.post20250305+gc1cba54=np20py312h9258957_0 113 | - gnuradio-satellites=5.7.0=py312hbcc94bf_1 114 | - gnuradio-soapy=3.10.12.0=py312haf4daf0_1 115 | - gnuradio-uhd=3.10.12.0=py312h76e1f7e_1 116 | - gnuradio-video-sdl=3.10.12.0=py312h8dc5eaa_1 117 | - gnuradio-zeromq=3.10.12.0=py312h1617942_1 118 | - gnuradio=3.10.12.0=py312h71de32f_1 119 | - gqrx=2.17.6=h8ed8190_1 120 | - graphite2=1.3.13=h63175ca_1003 121 | - greenlet=3.1.1=py312h275cf98_1 122 | - gsl=2.7=hdfb1a43_0 123 | - gst-plugins-base=1.24.7=hb0a98b8_0 124 | - gstreamer=1.24.7=h5006eae_0 125 | - gtest=1.15.2=hc790b64_0 126 | - gtk3=3.24.43=h7c34e04_4 127 | - h11=0.14.0=pyhd8ed1ab_1 128 | - h2=4.2.0=pyhd8ed1ab_0 129 | - h5py=3.13.0=nompi_py312ha036244_100 130 | - hackrf=2024.02.1=hc14e81b_1 131 | - hamlib-all=4.6.2=win_2 132 | - hamlib-lua=4.6.2=lua54h0e40799_2 133 | - hamlib-python=4.6.2=py312h2c12667_2 134 | - hamlib-tcl=4.6.2=h80c6058_2 135 | - hamlib=4.6.2=h9f2b807_2 136 | - harfbuzz=10.4.0=h9e37d49_0 137 | - hdf5=1.14.3=nompi_hb2c4d47_109 138 | - hicolor-icon-theme=0.17=h57928b3_2 139 | - hpack=4.1.0=pyhd8ed1ab_0 140 | - hyperframe=6.1.0=pyhd8ed1ab_0 141 | - icu=75.1=he0c23c2_0 142 | - idna=3.10=pyhd8ed1ab_1 143 | - importlib-metadata=8.6.1=pyha770c72_0 144 | - importlib_resources=6.5.2=pyhd8ed1ab_0 145 | - inspectrum=0.3.1=hfd82842_0 146 | - intel-openmp=2024.2.1=h57928b3_1083 147 | - ipython=9.0.2=pyhca29cf9_0 148 | - ipython_pygments_lexers=1.1.1=pyhd8ed1ab_0 149 | - itsdangerous=2.2.0=pyhd8ed1ab_1 150 | - jedi=0.19.2=pyhd8ed1ab_1 151 | - jinja2=3.1.6=pyhd8ed1ab_0 152 | - jsonpatch=1.33=pyhd8ed1ab_1 153 | - jsonpointer=3.0.0=py312h2e8e312_1 154 | - jsonschema-specifications=2024.10.1=pyhd8ed1ab_1 155 | - jsonschema=4.23.0=pyhd8ed1ab_1 156 | - khronos-opencl-icd-loader=2024.10.24=h2466b09_1 157 | - kiwisolver=1.4.8=py312hc790b64_0 158 | - krb5=1.21.3=hdf4eb48_0 159 | - lame=3.100=hcfcfb64_1003 160 | - lcms2=2.17=hbcf6048_0 161 | - lerc=4.0.0=h63175ca_0 162 | - libad9361-iio-c=0.3=h4e9078e_1 163 | - libaec=1.1.3=h63175ca_0 164 | - libairspy=1.0.10=h2466b09_1 165 | - libairspyhf=1.6.8=h2466b09_1 166 | - libarchive=3.7.7=h979ed78_3 167 | - libbladerf-python=2024.05=py_2 168 | - libbladerf2=2024.05=h2466b09_2 169 | - libblas=3.9.0=31_h641d27c_mkl 170 | - libboost=1.86.0=hb0986bb_3 171 | - libbrotlicommon=1.1.0=h2466b09_2 172 | - libbrotlidec=1.1.0=h2466b09_2 173 | - libbrotlienc=1.1.0=h2466b09_2 174 | - libcblas=3.9.0=31_h5e41251_mkl 175 | - libclang13=19.1.7=default_ha5278ca_1 176 | - libcodec2=1.2.0=hb66ff0d_3 177 | - libcorrect=0.0.0=hcfcfb64_0 178 | - libcurl=8.12.1=h88aaa65_0 179 | - libdeflate=1.23=h9062f6e_0 180 | - libexpat=2.6.4=he0c23c2_0 181 | - libffi=3.4.6=h537db12_0 182 | - libflac=1.4.3=h63175ca_0 183 | - libgcc=14.2.0=h1383e82_2 184 | - libgirepository=1.82.0=h35b7f07_0 185 | - libglib=2.82.2=h7025463_1 186 | - libgomp=14.2.0=h1383e82_2 187 | - libhackrf0=2024.02.1=h2466b09_1 188 | - libhamlib4=4.6.2=h0e07d3f_2 189 | - libhwloc=2.11.2=default_ha69328c_1001 190 | - libiconv=1.18=h135ad9c_1 191 | - libiio-c=0.26=hb85ab18_1 192 | - libiio=0.26=h8f595e5_1 193 | - libintl-devel=0.22.5=h5728263_3 194 | - libintl=0.22.5=h5728263_3 195 | - libjpeg-turbo=3.0.0=hcfcfb64_1 196 | - liblapack=3.9.0=31_h1aa476e_mkl 197 | - liblimesuite=23.11.0=he0c23c2_1 198 | - libliquid1=1.6.0=h96e8fb8_2 199 | - liblzma=5.6.4=h2466b09_0 200 | - libm2k=0.9.0=py312h87514d0_1 201 | - libmamba=1.5.12=hc493ae7_0 202 | - libmambapy=1.5.12=py312h510e527_0 203 | - libmirisdr4=2.0.0=h2466b09_1 204 | - libogg=1.3.5=h2466b09_0 205 | - libopus=1.3.1=h8ffe710_1 206 | - libosmodsp0=0.4.0=h857e13b_2 207 | - libpng=1.6.47=had7236b_0 208 | - librsvg=2.58.4=h5ce5fed_2 209 | - librtaudio6=5.2.0=h63175ca_3 210 | - libsndfile=1.2.2=h81429f1_1 211 | - libsodium=1.0.20=hc70643c_0 212 | - libsolv=0.7.30=hbb528cf_0 213 | - libsqlite=3.49.1=h67fdade_1 214 | - libssh2=1.11.1=he619c9f_0 215 | - libstdcxx=14.2.0=h904f734_2 216 | - libtiff=4.7.0=h797046b_3 217 | - libusb=1.0.27=h2466b09_101 218 | - libvorbis=1.3.7=h0e60522_0 219 | - libwebp-base=1.5.0=h3b0e114_0 220 | - libwinpthread=12.0.0.r4.gg4f2fc60ca=h57928b3_9 221 | - libxcb=1.17.0=h0e4246c_0 222 | - libxml2=2.13.6=he286e8c_0 223 | - libxslt=1.1.39=h3df6e99_0 224 | - libzlib=1.3.1=h2466b09_2 225 | - limesuite=23.11.0=h06e44ad_1 226 | - lua=5.4.6=h2466b09_1 227 | - lxml=5.3.1=py312h53bce91_0 228 | - lz4-c=1.10.0=h2466b09_1 229 | - lzo=2.10=hcfcfb64_1001 230 | - m17-cxx-demod=2.3.3=h01e1179_5 231 | - mako=1.3.9=pyhd8ed1ab_0 232 | - mamba=1.5.12=py312h5494d5c_0 233 | - markdown=3.6=pyhd8ed1ab_0 234 | - markupsafe=3.0.2=py312h31fea79_1 235 | - matplotlib-base=3.10.1=py312h90004f6_0 236 | - matplotlib-inline=0.1.7=pyhd8ed1ab_1 237 | - matplotlib=3.10.1=py312h2e8e312_0 238 | - menuinst=2.2.0=py312h275cf98_0 239 | - miniforge_console_shortcut=2.0=h57928b3_1 240 | - mirisdr=2.0.0=h2466b09_1 241 | - mkl=2024.2.2=h66d3029_15 242 | - mpg123=1.32.9=h01009b0_0 243 | - mpir=3.0.0=he025d50_1002 244 | - mplcursors=0.6=pyhd8ed1ab_1 245 | - munkres=1.1.4=pyh9f0ad1d_0 246 | - numexpr=2.10.2=mkl_py312h5e4250c_0 247 | - numpy=2.2.3=py312h3150e54_0 248 | - opencl-headers=2024.10.24=he0c23c2_0 249 | - openjpeg=2.5.3=h4d64b90_0 250 | - openssl=3.4.1=ha4e3fda_0 251 | - packaging=24.2=pyhd8ed1ab_2 252 | - pandas=2.2.3=py312h72972c8_1 253 | - pango=1.56.2=h286b592_0 254 | - paramiko=3.5.1=pyhd8ed1ab_0 255 | - parso=0.8.4=pyhd8ed1ab_1 256 | - pcre2=10.44=h3d7b363_2 257 | - pickleshare=0.7.5=pyhd8ed1ab_1004 258 | - pillow=11.1.0=py312h078707f_0 259 | - pip=25.0.1=pyh8b19718_0 260 | - pixman=0.44.2=had0cd8c_0 261 | - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 262 | - platformdirs=4.3.6=pyhd8ed1ab_1 263 | - pluggy=1.5.0=pyhd8ed1ab_1 264 | - ply=3.11=pyhd8ed1ab_3 265 | - portaudio=19.7.0=he0c23c2_0 266 | - prompt-toolkit=3.0.50=pyha770c72_0 267 | - pthread-stubs=0.4=h0e40799_1002 268 | - pure_eval=0.2.3=pyhd8ed1ab_1 269 | - pyadi-iio=0.0.19=pyhd8ed1ab_0 270 | - pybind11-abi=4=hd8ed1ab_3 271 | - pycairo=1.27.0=py312h487989a_0 272 | - pycosat=0.6.6=py312h4389bb4_2 273 | - pycparser=2.22=pyh29332c3_1 274 | - pyfda=0.9.2=pyh9208f05_1 275 | - pyfiglet=0.8.post1=py_0 276 | - pygments=2.19.1=pyhd8ed1ab_0 277 | - pygobject=3.50.0=py312h901f84b_1 278 | - pylibiio=0.26=py_1 279 | - pynacl=1.5.0=py312hdb89ce9_4 280 | - pyopengl=3.1.7=pyhd8ed1ab_0 281 | - pyparsing=3.2.1=pyhd8ed1ab_0 282 | - pyqt5-sip=12.12.2=py312h53d5487_5 283 | - pyqt=5.15.9=py312he09f080_5 284 | - pyqtgraph=0.13.7=pyhd8ed1ab_1 285 | - pyside6=6.8.2=py312h2ee7485_1 286 | - pysocks=1.7.1=pyh09c184e_7 287 | - python-dateutil=2.9.0.post0=pyhff2d567_1 288 | - python-engineio=4.11.2=pyhff2d567_0 289 | - python-socketio=5.12.1=pyhd8ed1ab_0 290 | - python-tzdata=2025.1=pyhd8ed1ab_0 291 | - python=3.12.9=h3f84c4b_1_cpython 292 | - python_abi=3.12=5_cp312 293 | - pytz=2024.1=pyhd8ed1ab_0 294 | - pywin32-on-windows=0.1.0=pyh07e9846_2 295 | - pywin32=307=py312h275cf98_3 296 | - pyyaml=6.0.2=py312h31fea79_2 297 | - pyzmq=26.3.0=py312hd7027bb_0 298 | - qdarkstyle=3.2.3=pyhd8ed1ab_1 299 | - qhull=2020.2=hc790b64_5 300 | - qt-main=5.15.15=h9151539_2 301 | - qt6-main=6.8.2=h1259614_0 302 | - qtpy=2.4.3=pyhd8ed1ab_0 303 | - qwt=6.3.0=h9417a65_0 304 | - referencing=0.36.2=pyh29332c3_0 305 | - reproc-cpp=14.2.5.post0=he0c23c2_0 306 | - reproc=14.2.5.post0=h2466b09_0 307 | - requests=2.32.3=pyhd8ed1ab_1 308 | - rpds-py=0.23.1=py312hfe1d9c4_0 309 | - rtl-sdr=2.0.2=h2466b09_3 310 | - ruamel.yaml.clib=0.2.8=py312h4389bb4_1 311 | - ruamel.yaml=0.18.10=py312h4389bb4_0 312 | - scipy=1.15.2=py312h451d5c4_0 313 | - sdl2=2.32.50=hecf2515_1 314 | - sdl3=3.2.8=he0c23c2_0 315 | - sdl=1.2.68=hecf2515_1 316 | - setuptools=75.8.2=pyhff2d567_0 317 | - simple-websocket=1.1.0=pyhd8ed1ab_0 318 | - sip=6.7.12=py312h53d5487_0 319 | - six=1.17.0=pyhd8ed1ab_0 320 | - soapysdr-module-airspy=0.2.0=h23704b7_0 321 | - soapysdr-module-airspyhf=0.2.0=h23704b7_0 322 | - soapysdr-module-audio=0.1.1=h2b4c12a_2 323 | - soapysdr-module-bladerf=0.4.1=h23704b7_0 324 | - soapysdr-module-hackrf=0.3.4=h23704b7_0 325 | - soapysdr-module-lms7=23.11.0=hdfb3ff0_1 326 | - soapysdr-module-netsdr=0.2.0=h78c1c11_1 327 | - soapysdr-module-plutosdr=0.2.2=h18c8474_1 328 | - soapysdr-module-redpitaya=0.1.1=h78c1c11_0 329 | - soapysdr-module-remote=0.5.2=h23704b7_2 330 | - soapysdr-module-rtlsdr=0.3.3=h78c1c11_2 331 | - soapysdr-module-uhd=0.4.1=h241d428_14 332 | - soapysdr-module-volk-converters=0.1.1=h6358f5f_3 333 | - soapysdr=0.8.1=py312hd5eb7cc_5 334 | - spdlog=1.15.1=hf4138ee_0 335 | - stack_data=0.6.3=pyhd8ed1ab_1 336 | - tbb=2021.13.0=h62715c5_1 337 | - tk=8.6.13=h5226925_1 338 | - toml=0.10.2=pyhd8ed1ab_1 339 | - tomli=2.2.1=pyhd8ed1ab_1 340 | - tornado=6.4.2=py312h4389bb4_0 341 | - tqdm=4.67.1=pyhd8ed1ab_1 342 | - traitlets=5.14.3=pyhd8ed1ab_1 343 | - truststore=0.10.1=pyh29332c3_0 344 | - typing_extensions=4.12.2=pyha770c72_1 345 | - tzdata=2025a=h78e105d_0 346 | - ucrt=10.0.22621.0=h57928b3_1 347 | - uhd=4.8.0.0=py312h80b3061_0 348 | - unicodedata2=16.0.0=py312h4389bb4_0 349 | - urllib3=2.3.0=pyhd8ed1ab_0 350 | - vc14_runtime=14.42.34438=hfd919c2_24 351 | - vc=14.3=hbf610ac_24 352 | - volk=3.2.0=hb838788_0 353 | - vs2015_runtime=14.42.34438=h7142326_24 354 | - watchdog=6.0.0=py312h2e8e312_0 355 | - wcwidth=0.2.13=pyhd8ed1ab_1 356 | - websocket-client=1.8.0=pyhd8ed1ab_1 357 | - werkzeug=3.1.3=pyhd8ed1ab_1 358 | - wheel=0.45.1=pyhd8ed1ab_1 359 | - win_inet_pton=1.1.0=pyh7428d3b_8 360 | - wsproto=1.2.0=pyhd8ed1ab_1 361 | - wxwidgets=3.2.6=h7c045ee_3 362 | - xorg-libxau=1.0.12=h0e40799_0 363 | - xorg-libxdmcp=1.1.5=h0e40799_0 364 | - yaml-cpp=0.8.0=h63175ca_0 365 | - yaml=0.2.5=h8ffe710_2 366 | - zeromq=4.3.5=ha9f60a1_7 367 | - zipp=3.21.0=pyhd8ed1ab_1 368 | - zope.event=5.0=pyhd8ed1ab_1 369 | - zope.interface=7.2=py312h4389bb4_0 370 | - zstandard=0.23.0=py312h4389bb4_1 371 | - zstd=1.5.7=hbeecb71_1 372 | user_requested_specs: 373 | - airspy 374 | - airspyhf 375 | - bladerf 376 | - codec2 377 | - conda 378 | - digital_rf 379 | - ephem 380 | - gnuradio 381 | - gnuradio-adsb 382 | - gnuradio-dect2 383 | - gnuradio-filerepeater 384 | - gnuradio-foo 385 | - gnuradio-fosphor 386 | - gnuradio-gpredict-doppler 387 | - gnuradio-ieee802_11 388 | - gnuradio-ieee802_15_4 389 | - gnuradio-inspector 390 | - gnuradio-iqbalance 391 | - gnuradio-iridium 392 | - gnuradio-leo 393 | - gnuradio-lora_sdr 394 | - gnuradio-m2k 395 | - gnuradio-osmosdr 396 | - gnuradio-paint 397 | - gnuradio-radar 398 | - gnuradio-rds 399 | - gnuradio-satellites 400 | - gqrx 401 | - hackrf 402 | - hamlib-all 403 | - inspectrum 404 | - ipython 405 | - libiio 406 | - libm2k 407 | - limesuite 408 | - m17-cxx-demod 409 | - mamba 410 | - matplotlib 411 | - miniforge_console_shortcut 412 | - mirisdr 413 | - numpy 414 | - pandas 415 | - pyadi-iio 416 | - pyfda 417 | - python 418 | - rtl-sdr 419 | - scipy 420 | - soapysdr 421 | - soapysdr-module-airspy 422 | - soapysdr-module-airspyhf 423 | - soapysdr-module-audio 424 | - soapysdr-module-bladerf 425 | - soapysdr-module-hackrf 426 | - soapysdr-module-lms7 427 | - soapysdr-module-netsdr 428 | - soapysdr-module-plutosdr 429 | - soapysdr-module-redpitaya 430 | - soapysdr-module-remote 431 | - soapysdr-module-rtlsdr 432 | - soapysdr-module-uhd 433 | - soapysdr-module-volk-converters 434 | - uhd 435 | version: 2025.03.14 436 | welcome_image: welcome.png 437 | write_condarc: true 438 | -------------------------------------------------------------------------------- /installer_specs/radioconda-win-64/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanvolz/radioconda/39df06e488d420f98db766de128387efff5c6ecb/installer_specs/radioconda-win-64/header.png -------------------------------------------------------------------------------- /installer_specs/radioconda-win-64/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanvolz/radioconda/39df06e488d420f98db766de128387efff5c6ecb/installer_specs/radioconda-win-64/icon.png -------------------------------------------------------------------------------- /installer_specs/radioconda-win-64/post_install.bat: -------------------------------------------------------------------------------- 1 | echo {"env_vars": {"GR_PREFIX": "", "GRC_BLOCKS_PATH": "", "UHD_PKG_PATH": "", "VOLK_PREFIX": ""}}>%PREFIX%\conda-meta\state 2 | del /q %PREFIX%\pkgs\*.tar.bz2 3 | del /q %PREFIX%\pkgs\*.conda 4 | exit 0 5 | -------------------------------------------------------------------------------- /installer_specs/radioconda-win-64/welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanvolz/radioconda/39df06e488d420f98db766de128387efff5c6ecb/installer_specs/radioconda-win-64/welcome.png -------------------------------------------------------------------------------- /radioconda.yaml: -------------------------------------------------------------------------------- 1 | name: radioconda 2 | category: main 3 | channels: 4 | - conda-forge 5 | - ryanvolz 6 | platforms: 7 | - linux-64 8 | - linux-aarch64 9 | - linux-ppc64le 10 | - osx-64 11 | - osx-arm64 12 | - win-64 13 | dependencies: 14 | - airspy 15 | - airspyhf 16 | - alsa-plugins # [linux] 17 | - bladerf 18 | - digital_rf 19 | - codec2 20 | - ephem 21 | - gnss-sdr # [unix] 22 | - gnuradio 3.10.* 23 | - gnuradio-adsb 24 | - gnuradio-dect2 25 | - gnuradio-filerepeater 26 | - gnuradio-foo 27 | - gnuradio-fosphor 28 | - gnuradio-funcube # [linux] 29 | - gnuradio-gpredict-doppler 30 | - gnuradio-hermeslite2 # [unix] 31 | - gnuradio-hpsdr # [unix] 32 | - gnuradio-ieee802_11 33 | - gnuradio-ieee802_15_4 34 | - gnuradio-inspector 35 | - gnuradio-iqbalance 36 | - gnuradio-iridium 37 | - gnuradio-leo 38 | - gnuradio-lora_sdr 39 | - gnuradio-m2k 40 | - gnuradio-osmosdr 41 | - gnuradio-paint 42 | - gnuradio-radar 43 | - gnuradio-rds 44 | - gnuradio-satellites 45 | - gqrx 46 | - hackrf 47 | - hamlib-all 48 | - inspectrum 49 | - ipython 50 | - libiio 51 | - libm2k 52 | - limesuite 53 | - matplotlib 54 | - mirisdr 55 | - m17-cxx-demod 56 | - numpy 57 | - pandas 58 | - pyadi-iio 59 | - pyfda 60 | - python 61 | - rtl-sdr 62 | - scipy 63 | - soapysdr 64 | - soapysdr-module-airspy 65 | - soapysdr-module-airspyhf 66 | - soapysdr-module-audio 67 | - soapysdr-module-bladerf 68 | - soapysdr-module-fcdpp # [linux] 69 | - soapysdr-module-hackrf 70 | - soapysdr-module-netsdr 71 | - soapysdr-module-lms7 72 | - soapysdr-module-plutosdr 73 | - soapysdr-module-redpitaya 74 | - soapysdr-module-remote 75 | - soapysdr-module-rtlsdr 76 | - soapysdr-module-uhd 77 | - soapysdr-module-volk-converters 78 | - uhd 79 | -------------------------------------------------------------------------------- /radioconda_installer.yaml: -------------------------------------------------------------------------------- 1 | name: radioconda_installer 2 | category: installer 3 | channels: 4 | - conda-forge 5 | - ryanvolz 6 | dependencies: 7 | - conda 8 | - mamba <2 9 | - miniforge_console_shortcut # [win] 10 | -------------------------------------------------------------------------------- /rerender.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import contextlib 3 | import math 4 | import pathlib 5 | import shutil 6 | from typing import Any, Dict, Optional 7 | 8 | import conda_lock 9 | import diff_match_patch 10 | import yaml 11 | from conda_package_streaming.package_streaming import stream_conda_component 12 | from conda_package_streaming.url import conda_reader_for_url 13 | from PIL import Image 14 | 15 | 16 | def resize_contain(image, size, resample=Image.LANCZOS, bg_color=(255, 255, 255, 0)): 17 | """ 18 | Resize image according to size. 19 | image: a Pillow image instance 20 | size: a list of two integers [width, height] 21 | """ 22 | img_format = image.format 23 | img = image.copy() 24 | img.thumbnail((size[0], size[1]), resample) 25 | background = Image.new("RGBA", (size[0], size[1]), bg_color) 26 | img_position = ( 27 | int(math.ceil((size[0] - img.size[0]) / 2)), 28 | int(math.ceil((size[1] - img.size[1]) / 2)), 29 | ) 30 | background.alpha_composite(img, img_position) 31 | background.format = img_format 32 | return background.convert("RGBA") 33 | 34 | 35 | def name_from_pkg_spec(spec: str): 36 | return ( 37 | spec.split(sep=None, maxsplit=1)[0] 38 | .split(sep="=", maxsplit=1)[0] 39 | .split(sep="::", maxsplit=1)[-1] 40 | ) 41 | 42 | 43 | def write_env_file( 44 | env_dict: Dict[str, Any], 45 | file_path: pathlib.Path, 46 | name: Optional[str] = None, 47 | version: Optional[str] = None, 48 | platform: Optional[str] = None, 49 | variables: Optional[dict] = None, 50 | ): 51 | if name: 52 | env_dict["name"] = name 53 | if version: 54 | env_dict["version"] = version 55 | if platform: 56 | env_dict["platform"] = platform 57 | if variables: 58 | env_dict["variables"] = variables 59 | with file_path.open("w") as f: 60 | yaml.safe_dump(env_dict, stream=f) 61 | 62 | return env_dict 63 | 64 | 65 | def render_metapackage_environments( 66 | lockfile_path: pathlib.Path, 67 | requested_pkg_names: Dict[str, Any], 68 | name: str, 69 | version: str, 70 | output_dir: pathlib.Path, 71 | ) -> None: 72 | lock_content = conda_lock.conda_lock.parse_conda_lock_file(lockfile_path) 73 | lock_work_dir = lockfile_path.parent 74 | 75 | # render main env spec into environment file for creating metapackage 76 | conda_lock.conda_lock.do_render( 77 | lockfile=lock_content, 78 | kinds=("env",), 79 | filename_template=f"{lock_work_dir}/{name}-{{platform}}.metapackage", 80 | ) 81 | # process and save rendered platform env files to the output directory 82 | for platform_env_yaml_path in lock_work_dir.glob("*.metapackage.yml"): 83 | platform_env_yaml_name = platform_env_yaml_path.name.partition(".")[0] 84 | platform = platform_env_yaml_name.split(sep="-", maxsplit=1)[1] 85 | 86 | with platform_env_yaml_path.open("r") as f: 87 | platform_env_dict = yaml.safe_load(f) 88 | 89 | dependencies = sorted(platform_env_dict["dependencies"]) 90 | # filter the dependency list by the explicitly listed package names 91 | platform_env_dict["dependencies"] = [ 92 | spec 93 | for spec in dependencies 94 | if name_from_pkg_spec(spec) in requested_pkg_names 95 | ] 96 | 97 | if platform.startswith("win"): 98 | variables = dict( 99 | GR_PREFIX="", GRC_BLOCKS_PATH="", UHD_PKG_PATH="", VOLK_PREFIX="" 100 | ) 101 | else: 102 | variables = None 103 | write_env_file( 104 | env_dict=platform_env_dict, 105 | file_path=output_dir / f"{platform_env_yaml_name}.yml", 106 | name=name, 107 | version=version, 108 | platform=platform, 109 | variables=variables, 110 | ) 111 | 112 | 113 | def render_constructors( 114 | lockfile_path: pathlib.Path, 115 | requested_pkg_names: Dict[str, Any], 116 | name: str, 117 | version: str, 118 | company: str, 119 | license_file: pathlib.Path, 120 | output_dir: pathlib.Path, 121 | builder_lockfile_path: pathlib.Path, 122 | logo_path: Optional[pathlib.Path] = None, 123 | ) -> None: 124 | lock_content = conda_lock.conda_lock.parse_conda_lock_file(lockfile_path) 125 | lock_work_dir = lockfile_path.parent 126 | 127 | builder_lock_content = conda_lock.conda_lock.parse_conda_lock_file( 128 | builder_lockfile_path 129 | ) 130 | constructor_lockdeps = [ 131 | lockdep 132 | for lockdep in builder_lock_content.package 133 | if lockdep.name == "constructor" 134 | ] 135 | 136 | # render main + installer env specs into environment file for creating installer 137 | conda_lock.conda_lock.do_render( 138 | lockfile=lock_content, 139 | kinds=("env",), 140 | filename_template=f"{lock_work_dir}/{name}-{{platform}}.constructor", 141 | extras=("installer",), 142 | ) 143 | 144 | if logo_path is not None: 145 | logo = Image.open(logo_path) 146 | 147 | for platform_env_yaml_path in lock_work_dir.glob("*.constructor.yml"): 148 | constructor_name = platform_env_yaml_path.name.partition(".")[0] 149 | platform = constructor_name.split(sep="-", maxsplit=1)[1] 150 | 151 | constructor_dir = output_dir / constructor_name 152 | if constructor_dir.exists(): 153 | shutil.rmtree(constructor_dir) 154 | constructor_dir.mkdir(parents=True) 155 | 156 | with platform_env_yaml_path.open("r") as f: 157 | platform_env_dict = yaml.safe_load(f) 158 | 159 | # filter requested_pkg_names by locked environment to account for selectors 160 | platform_env_pkg_names = [ 161 | name_from_pkg_spec(spec) for spec in platform_env_dict["dependencies"] 162 | ] 163 | user_requested_specs = [ 164 | name for name in requested_pkg_names if name in platform_env_pkg_names 165 | ] 166 | 167 | construct_dict = dict( 168 | name=name, 169 | version=version, 170 | company=company, 171 | channels=platform_env_dict["channels"], 172 | specs=sorted(platform_env_dict["dependencies"]), 173 | user_requested_specs=user_requested_specs, 174 | initialize_by_default=False if platform.startswith("win") else True, 175 | installer_type="all", 176 | keep_pkgs=True, 177 | license_file="LICENSE", 178 | register_python_default=False, 179 | write_condarc=True, 180 | condarc=dict( 181 | channels=platform_env_dict["channels"], 182 | channel_priority="strict", 183 | ), 184 | ) 185 | if logo_path is not None: 186 | if platform.startswith("win"): 187 | # convert to RGB (no transparency) and set white background 188 | # because constructor eventually converts to bmp without transparency 189 | welcome_image = resize_contain( 190 | logo, (164, 314), bg_color=(255, 255, 255, 255) 191 | ).convert("RGB") 192 | header_image = resize_contain( 193 | logo, (150, 57), bg_color=(255, 255, 255, 255) 194 | ).convert("RGB") 195 | icon_image = resize_contain(logo, (256, 256)) 196 | 197 | welcome_image.save(constructor_dir / "welcome.png") 198 | header_image.save(constructor_dir / "header.png") 199 | icon_image.save(constructor_dir / "icon.png") 200 | 201 | construct_dict["welcome_image"] = "welcome.png" 202 | construct_dict["header_image"] = "header.png" 203 | construct_dict["icon_image"] = "icon.png" 204 | elif platform.startswith("osx"): 205 | welcome_image = resize_contain(logo, (1227, 600)) 206 | welcome_image.save(constructor_dir / "welcome.png") 207 | construct_dict["welcome_image"] = "welcome.png" 208 | if platform.startswith("win"): 209 | construct_dict["post_install"] = "post_install.bat" 210 | # point to template that we generate at build time with a patch over default 211 | construct_dict["nsis_template"] = "main.nsi.tmpl" 212 | else: 213 | construct_dict["post_install"] = "post_install.sh" 214 | 215 | # copy license to the constructor directory 216 | shutil.copy(license_file, constructor_dir / "LICENSE") 217 | 218 | # write the post_install scripts referenced in the construct dict 219 | if platform.startswith("win"): 220 | with (constructor_dir / "post_install.bat").open("w") as f: 221 | f.write( 222 | "\n".join( 223 | ( 224 | r'echo {"env_vars": {"GR_PREFIX": "", "GRC_BLOCKS_PATH": "", "UHD_PKG_PATH": "", "VOLK_PREFIX": ""}}>%PREFIX%\conda-meta\state', 225 | r"del /q %PREFIX%\pkgs\*.tar.bz2", 226 | r"del /q %PREFIX%\pkgs\*.conda", 227 | "exit 0", 228 | "", 229 | ) 230 | ) 231 | ) 232 | else: 233 | with (constructor_dir / "post_install.sh").open("w") as f: 234 | f.write( 235 | "\n".join( 236 | ( 237 | "#!/bin/sh", 238 | f'PREFIX="${{PREFIX:-$2/{name}}}"', 239 | r"rm -f $PREFIX/pkgs/*.tar.bz2 $PREFIX/pkgs/*.conda", 240 | "exit 0", 241 | "", 242 | ) 243 | ) 244 | ) 245 | 246 | construct_yaml_path = constructor_dir / "construct.yaml" 247 | with construct_yaml_path.open("w") as f: 248 | yaml.safe_dump(construct_dict, stream=f) 249 | 250 | if platform.startswith("win"): 251 | # patch constructor's nsis template 252 | constructor_platform_lockdeps = [ 253 | lockdep 254 | for lockdep in constructor_lockdeps 255 | if lockdep.platform == platform 256 | ] 257 | if constructor_platform_lockdeps: 258 | lockdep = constructor_platform_lockdeps[0] 259 | 260 | # get the NSIS template that comes with the locked constructor package 261 | constructor_filename, constructor_pkg = conda_reader_for_url( 262 | lockdep.url 263 | ) 264 | with contextlib.closing(constructor_pkg): 265 | for tar, member in stream_conda_component( 266 | constructor_filename, constructor_pkg, component="pkg" 267 | ): 268 | if ( 269 | member.name 270 | == "site-packages/constructor/nsis/main.nsi.tmpl" 271 | ): 272 | locked_nsi_tmpl = tar.extractfile(member).read().decode() 273 | break 274 | # read the original and custom NSIS templates 275 | local_constructor_nsis = pathlib.Path("constructor") / "nsis" 276 | with (local_constructor_nsis / "main.nsi.tmpl.orig").open("r") as f: 277 | orig_nsi_tmpl = f.read() 278 | with (local_constructor_nsis / "main.nsi.tmpl").open("r") as f: 279 | custom_nsi_tmpl = f.read() 280 | 281 | # get patch from original NSIS template to locked version we will be 282 | # building with and apply it to the custom template 283 | dmp = diff_match_patch.diff_match_patch() 284 | line_orig, line_locked, line_array = dmp.diff_linesToChars( 285 | orig_nsi_tmpl, locked_nsi_tmpl 286 | ) 287 | diffs = dmp.diff_main(line_orig, line_locked, checklines=False) 288 | dmp.diff_charsToLines(diffs, line_array) 289 | patches = dmp.patch_make(orig_nsi_tmpl, diffs) 290 | patched_nsi_tmpl, results = dmp.patch_apply(patches, custom_nsi_tmpl) 291 | if not all(results): 292 | raise RuntimeError("Conflicts found when patching NSIS template") 293 | 294 | # write patched template to constructor dir 295 | with (constructor_dir / "main.nsi.tmpl").open("w") as f: 296 | f.write(patched_nsi_tmpl) 297 | 298 | # update orig and custom with locked and patched 299 | with (local_constructor_nsis / "main.nsi.tmpl.orig").open("w") as f: 300 | f.write(locked_nsi_tmpl) 301 | with (local_constructor_nsis / "main.nsi.tmpl").open("w") as f: 302 | f.write(patched_nsi_tmpl) 303 | 304 | 305 | def render( 306 | environment_file: pathlib.Path, 307 | installer_environment_file: pathlib.Path, 308 | builder_environment_file: pathlib.Path, 309 | version: str, 310 | company: str, 311 | license_file: pathlib.Path, 312 | output_dir: pathlib.Path, 313 | conda_exe: pathlib.Path, 314 | logo_path: Optional[pathlib.Path] = None, 315 | dirty: Optional[bool] = False, 316 | keep_workdir: Optional[bool] = False, 317 | ) -> None: 318 | with environment_file.open("r") as f: 319 | env_yaml_data = yaml.safe_load(f) 320 | with installer_environment_file.open("r") as f: 321 | base_env_yaml_data = yaml.safe_load(f) 322 | 323 | env_name = env_yaml_data["name"] 324 | env_pkg_names = [name_from_pkg_spec(spec) for spec in env_yaml_data["dependencies"]] 325 | base_env_pkg_names = [ 326 | name_from_pkg_spec(spec) for spec in base_env_yaml_data["dependencies"] 327 | ] 328 | 329 | if not license_file.exists(): 330 | raise ValueError(f"Cannot find license file: {license_file}") 331 | 332 | if output_dir.exists() and not dirty: 333 | shutil.rmtree(output_dir) 334 | output_dir.mkdir(parents=True, exist_ok=True) 335 | 336 | # working dir for conda-lock outputs that we use as intermediates 337 | lock_work_dir = output_dir / "lockwork" 338 | lock_work_dir.mkdir(parents=True, exist_ok=True) 339 | 340 | # create the locked build environment specification 341 | builder_lockfile_path = output_dir / "buildenv.conda-lock.yml" 342 | conda_lock.conda_lock.run_lock( 343 | environment_files=[builder_environment_file], 344 | conda_exe=conda_exe, 345 | mamba=True, 346 | micromamba=True, 347 | kinds=("lock",), 348 | lockfile_path=builder_lockfile_path, 349 | ) 350 | 351 | # read environment files and create the lock file 352 | lockfile_path = lock_work_dir / f"{env_name}.conda-lock.yml" 353 | conda_lock.conda_lock.run_lock( 354 | environment_files=[environment_file, installer_environment_file], 355 | conda_exe=conda_exe, 356 | mamba=True, 357 | micromamba=True, 358 | kinds=("lock",), 359 | lockfile_path=lockfile_path, 360 | ) 361 | 362 | # render main environment specs into explicit .lock files for reproducibility 363 | lock_content = conda_lock.conda_lock.parse_conda_lock_file(lockfile_path) 364 | conda_lock.conda_lock.do_render( 365 | lockfile=lock_content, 366 | kinds=("explicit",), 367 | filename_template=f"{output_dir}/{env_name}-{{platform}}.lock", 368 | ) 369 | 370 | # create the environment specification files for the metapackages 371 | render_metapackage_environments( 372 | lockfile_path=lockfile_path, 373 | requested_pkg_names=env_pkg_names, 374 | name=env_name, 375 | version=version, 376 | output_dir=output_dir, 377 | ) 378 | 379 | # create the rendered constructor directories 380 | render_constructors( 381 | lockfile_path=lockfile_path, 382 | requested_pkg_names=sorted(env_pkg_names + base_env_pkg_names), 383 | name=env_name, 384 | version=version, 385 | company=company, 386 | license_file=license_file, 387 | output_dir=output_dir, 388 | builder_lockfile_path=builder_lockfile_path, 389 | logo_path=logo_path, 390 | ) 391 | 392 | # clean up conda-lock work dir 393 | if not keep_workdir: 394 | shutil.rmtree(lock_work_dir) 395 | 396 | 397 | if __name__ == "__main__": 398 | import argparse 399 | import datetime 400 | import os 401 | 402 | cwd = pathlib.Path(".").absolute() 403 | here = pathlib.Path(__file__).parent.absolute().relative_to(cwd) 404 | distname = os.getenv("DISTNAME", "radioconda") 405 | source = "/".join( 406 | ( 407 | os.getenv("GITHUB_SERVER_URL", "https://github.com"), 408 | os.getenv("GITHUB_REPOSITORY", "ryanvolz/radioconda"), 409 | ) 410 | ) 411 | 412 | dt = datetime.datetime.now() 413 | version = dt.strftime("%Y.%m.%d") 414 | 415 | parser = argparse.ArgumentParser( 416 | description=( 417 | "Re-render installer specification directories to be used by conda" 418 | " constructor." 419 | ) 420 | ) 421 | parser.add_argument( 422 | "environment_file", 423 | type=pathlib.Path, 424 | nargs="?", 425 | default=here / f"{distname}.yaml", 426 | help=( 427 | "YAML file defining a distribution, with a 'name' string and" 428 | " 'channels', 'platforms', and 'dependencies' lists." 429 | " (default: %(default)s)" 430 | ), 431 | ) 432 | parser.add_argument( 433 | "installer_environment_file", 434 | type=pathlib.Path, 435 | nargs="?", 436 | default=here / f"{distname}_installer.yaml", 437 | help=( 438 | "YAML file defining additional packages for the installer, with a 'name'" 439 | " string and 'channels' and 'dependencies' lists." 440 | " (default: %(default)s)" 441 | ), 442 | ) 443 | parser.add_argument( 444 | "builder_environment_file", 445 | type=pathlib.Path, 446 | nargs="?", 447 | default=here / "buildenv.yaml", 448 | help=( 449 | "YAML file defining the builder environment for running conda-constructor," 450 | " with a 'name' string and 'channels', 'platforms', and 'dependencies'" 451 | " lists." 452 | " (default: %(default)s)" 453 | ), 454 | ) 455 | parser.add_argument( 456 | "-v", 457 | "--version", 458 | type=str, 459 | default=version, 460 | help=( 461 | "Version tag for the installer, defaults to the current date." 462 | " (default: %(default)s)" 463 | ), 464 | ) 465 | parser.add_argument( 466 | "--company", 467 | type=str, 468 | default=source, 469 | help=( 470 | "Name of the company/entity who is responsible for the installer." 471 | " (default: %(default)s)" 472 | ), 473 | ) 474 | parser.add_argument( 475 | "-l", 476 | "--license_file", 477 | type=pathlib.Path, 478 | default=here / "LICENSE", 479 | help=( 480 | "File containing the license that applies to the installer." 481 | " (default: %(default)s)" 482 | ), 483 | ) 484 | parser.add_argument( 485 | "--logo", 486 | dest="logo_path", 487 | type=pathlib.Path, 488 | default=here / "static" / f"{distname}_logo.png", 489 | help=( 490 | "File containing the logo image to include in the installer." 491 | " (default: %(default)s)" 492 | ), 493 | ) 494 | parser.add_argument( 495 | "-o", 496 | "--output_dir", 497 | type=pathlib.Path, 498 | default=here / "installer_specs", 499 | help=( 500 | "Output directory in which the installer specifications will be rendered." 501 | " (default: %(default)s)" 502 | ), 503 | ) 504 | parser.add_argument( 505 | "--dirty", 506 | action="store_true", 507 | default=False, 508 | help=("Do not clean up output_dir before rendering. (default: %(default)s)"), 509 | ) 510 | parser.add_argument( 511 | "--keep-workdir", 512 | action="store_true", 513 | default=False, 514 | help=( 515 | "Keep conda-lock working directory ({output_dir}/lockwork) of intermediate" 516 | " outputs. (default: %(default)s)" 517 | ), 518 | ) 519 | parser.add_argument( 520 | "--conda-exe", 521 | type=pathlib.Path, 522 | default=None, 523 | help=( 524 | "Path to the conda (or mamba or micromamba) executable to use." 525 | " (default: search for conda/mamba/micromamba)" 526 | ), 527 | ) 528 | 529 | args = parser.parse_args() 530 | 531 | render( 532 | environment_file=args.environment_file, 533 | installer_environment_file=args.installer_environment_file, 534 | builder_environment_file=args.builder_environment_file, 535 | version=args.version, 536 | company=args.company, 537 | license_file=args.license_file, 538 | output_dir=args.output_dir, 539 | conda_exe=args.conda_exe, 540 | logo_path=args.logo_path, 541 | dirty=args.dirty, 542 | keep_workdir=args.keep_workdir, 543 | ) 544 | -------------------------------------------------------------------------------- /static/radioconda_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanvolz/radioconda/39df06e488d420f98db766de128387efff5c6ecb/static/radioconda_logo.png -------------------------------------------------------------------------------- /static/radioconda_logo_web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanvolz/radioconda/39df06e488d420f98db766de128387efff5c6ecb/static/radioconda_logo_web.png --------------------------------------------------------------------------------