├── .cargo └── config.toml ├── .github ├── ISSUE_TEMPLATE │ ├── bug.yml │ └── feature.yml ├── codecov.yml ├── dependabot.yml ├── pull_request_template.md └── workflows │ ├── ci.yml │ ├── release.yml │ └── test-install.yml ├── .gitignore ├── CODEOWNERS ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── README.md ├── assets ├── default_config.toml └── envfetch.tape ├── install.ps1 ├── install.sh ├── src ├── commands.rs ├── config.rs ├── interactive.rs ├── interactive │ ├── controller.rs │ ├── state.rs │ ├── tests.rs │ └── view.rs ├── main.rs ├── models.rs ├── utils.rs └── variables.rs └── tests └── cli.rs /.cargo/config.toml: -------------------------------------------------------------------------------- 1 | [test] 2 | test-threads = 1 # Run tests sequentially by default 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug.yml: -------------------------------------------------------------------------------- 1 | name: Bug Report 2 | description: File a bug report. 3 | title: "bug: " 4 | labels: ["bug", "triage"] 5 | assignees: 6 | - ankddev 7 | body: 8 | - type: markdown 9 | attributes: 10 | value: | 11 | Thanks for taking the time to fill out this bug report! 12 | - type: checkboxes 13 | id: requirements 14 | attributes: 15 | label: Requirements to open issue 16 | description: By submitting this issue, you follow that you are followed all of this steps 17 | options: 18 | - label: Searched for similar issues 19 | required: true 20 | - label: Running on **latest** version 21 | required: true 22 | - type: textarea 23 | id: what-happened 24 | attributes: 25 | label: What happened? 26 | description: Also tell us, what did you expect to happen? 27 | placeholder: Tell us what you see! 28 | value: "A bug happened!" 29 | validations: 30 | required: true 31 | - type: dropdown 32 | id: version 33 | attributes: 34 | label: Version 35 | description: What version of our software are you running? 36 | options: 37 | - Latest from GitHub Actions 38 | - 2.1.2 39 | - 2.1.1 40 | - 2.1.0 41 | - 2.0.0 42 | - 1.4.0 43 | - Other 44 | default: 0 45 | validations: 46 | required: true 47 | - type: dropdown 48 | id: os 49 | attributes: 50 | label: Which platform are you use? 51 | options: 52 | - Android (with Termux) 53 | - Windows 54 | - Linux 55 | - macOS 56 | - type: textarea 57 | id: logs 58 | attributes: 59 | label: Relevant log output 60 | description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. 61 | render: shell 62 | - type: checkboxes 63 | id: terms 64 | attributes: 65 | label: Code of Conduct 66 | description: By submitting this issue, you agree to follow our [Code of Conduct](https://example.com). 67 | options: 68 | - label: I agree to follow this project's Code of Conduct 69 | required: true 70 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Request new feature to envfetch. 3 | title: "feat: " 4 | labels: ["feature", "triage"] 5 | assignees: 6 | - ankddev 7 | body: 8 | - type: markdown 9 | attributes: 10 | value: | 11 | Thanks for taking the time to fill out this feature request! 12 | - type: checkboxes 13 | id: requirements 14 | attributes: 15 | label: Requirements to open issue 16 | description: By submitting this issue, you follow that you are followed all of this steps 17 | options: 18 | - label: Searched for similar issues 19 | required: true 20 | - label: This is **feature request**. If you want to tell us about issue, choose another template 21 | required: true 22 | - type: textarea 23 | id: description 24 | attributes: 25 | label: Which feature do you want to add? 26 | description: Description of proposed feature. 27 | placeholder: Tell us what you want to add! 28 | value: "An awesome feature..." 29 | validations: 30 | required: true 31 | - type: textarea 32 | id: proposed-solution 33 | attributes: 34 | label: How we can implement feature? 35 | description: You can add images, code blocks, etc. 36 | placeholder: Feature implementation. 37 | value: "We can add..." 38 | validations: 39 | required: false 40 | - type: checkboxes 41 | id: terms 42 | attributes: 43 | label: Code of Conduct 44 | description: By submitting this issue, you agree to follow our [Code of Conduct](https://example.com). 45 | options: 46 | - label: I agree to follow this project's Code of Conduct 47 | required: true 48 | -------------------------------------------------------------------------------- /.github/codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | status: 3 | project: 4 | default: 5 | target: auto 6 | threshold: 0.09 7 | patch: 8 | default: 9 | target: auto 10 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "cargo" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "daily" 12 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | Closes # 2 | # Description 3 | 4 | # How this been tested 5 | 6 | - [ ] Run tests 7 | - [ ] Tested in real cases 8 | # Checklist 9 | 10 | - [ ] Your changes don't generate new warnings or errors 11 | - [ ] You have run `cargo clippy` and `cargo fmt` 12 | - [ ] You have tested this 13 | - [ ] You have updated documentation 14 | # Screenshots 15 | 16 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: 3 | push: 4 | paths-ignore: 5 | - "**.md" 6 | pull_request: 7 | paths-ignore: 8 | - "**.md" 9 | 10 | env: 11 | CARGO_TERM_COLOR: always 12 | 13 | jobs: 14 | build: 15 | runs-on: ${{ matrix.os }} 16 | 17 | strategy: 18 | matrix: 19 | os: [ubuntu-latest, windows-latest, macOS-latest] 20 | 21 | steps: 22 | - uses: actions/checkout@v4 23 | - name: Update Rust 24 | run: rustup update stable 25 | - name: Cache 26 | uses: actions/cache@v4 27 | with: 28 | path: | 29 | ~/.cargo/bin/ 30 | ~/.cargo/registry/index/ 31 | ~/.cargo/registry/cache/ 32 | ~/.cargo/git/db/ 33 | target/ 34 | key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} 35 | - name: Build 36 | run: cargo build --verbose --locked 37 | - name: Upload artifacts for Windows 38 | if: ${{ matrix.os == 'windows-latest'}} 39 | uses: actions/upload-artifact@v4 40 | with: 41 | name: envfetch-debug-windows 42 | path: | 43 | target/debug/envfetch.exe 44 | - name: Upload artifacts for Linux 45 | if: ${{ matrix.os == 'ubuntu-latest'}} 46 | uses: actions/upload-artifact@v4 47 | with: 48 | name: envfetch-debug-linux 49 | path: | 50 | target/debug/envfetch 51 | - name: Upload artifacts for macOS 52 | if: ${{ matrix.os == 'macOS-latest'}} 53 | uses: actions/upload-artifact@v4 54 | with: 55 | name: envfetch-debug-macos 56 | path: | 57 | target/debug/envfetch 58 | lint: 59 | runs-on: ${{ matrix.os }} 60 | 61 | strategy: 62 | matrix: 63 | os: [ubuntu-latest, windows-latest, macOS-latest] 64 | 65 | steps: 66 | - uses: actions/checkout@v4 67 | - uses: dtolnay/rust-toolchain@stable 68 | with: 69 | components: clippy 70 | - name: Cache 71 | uses: actions/cache@v4 72 | with: 73 | path: | 74 | ~/.cargo/bin/ 75 | ~/.cargo/registry/index/ 76 | ~/.cargo/registry/cache/ 77 | ~/.cargo/git/db/ 78 | target/ 79 | key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} 80 | - uses: auguwu/clippy-action@1.4.0 81 | with: 82 | token: ${{secrets.GITHUB_TOKEN}} 83 | tests: 84 | runs-on: ${{ matrix.os }} 85 | 86 | strategy: 87 | matrix: 88 | os: [ubuntu-latest, windows-latest, macOS-latest] 89 | toolchain: 90 | - stable 91 | - beta 92 | - nightly 93 | 94 | steps: 95 | - uses: actions/checkout@v4 96 | - name: Update rust 97 | run: rustup update ${{ matrix.toolchain }} && rustup default ${{ matrix.toolchain }} 98 | - name: Cache 99 | uses: actions/cache@v4 100 | with: 101 | path: | 102 | ~/.cargo/bin/ 103 | ~/.cargo/registry/index/ 104 | ~/.cargo/registry/cache/ 105 | ~/.cargo/git/db/ 106 | target/ 107 | key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} 108 | - name: Build 109 | run: cargo build --verbose --locked 110 | - name: Run tests 111 | run: cargo test --verbose 112 | coverage: 113 | runs-on: ubuntu-latest 114 | 115 | steps: 116 | - uses: actions/checkout@v4 117 | - name: Update Rust 118 | run: rustup update stable 119 | - name: Main cache 120 | uses: actions/cache@v4 121 | with: 122 | path: | 123 | ~/.cargo/bin/ 124 | ~/.cargo/registry/index/ 125 | ~/.cargo/registry/cache/ 126 | ~/.cargo/git/db/ 127 | target/ 128 | key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} 129 | - name: Bin Cache 130 | id: bin-cache 131 | uses: actions/cache@v4 132 | with: 133 | path: | 134 | ~/.cargo/bin/ 135 | key: ${{ runner.os }}-cargo-bin-tarpaulin 136 | - name: Install Tarpaulin 137 | if: steps.bin-cache.outputs.cache-hit != 'true' 138 | run: cargo install cargo-tarpaulin 139 | - name: Generate code coverage 140 | run: cargo tarpaulin --out xml --locked 141 | - name: Upload coverage reports to Codecov 142 | uses: codecov/codecov-action@v5 143 | with: 144 | token: ${{ secrets.CODECOV_TOKEN }} 145 | fail_ci_if_error: true 146 | # This step is temporary disabled (see https://github.com/ankddev/envfetch/issues/52 for more information) 147 | # - name: Install cargo2junit 148 | # if: steps.bin-cache.outputs.cache-hit != 'true' 149 | # run: cargo install cargo2junit 150 | # - name: Generaete junit test file 151 | # run: RUSTC_BOOTSTRAP=1 cargo test -- -Z unstable-options --format json --report-time | cargo2junit > junit.xml 152 | # - name: Upload test results to Codecov 153 | # if: ${{ !cancelled() }} 154 | # uses: codecov/test-results-action@v1 155 | # with: 156 | # token: ${{ secrets.CODECOV_TOKEN }} 157 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Build and release 2 | 3 | on: 4 | workflow_dispatch: 5 | release: 6 | types: [ created ] 7 | 8 | permissions: 9 | contents: write 10 | 11 | jobs: 12 | publish_crates_io: 13 | name: Publish to crates.io 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v3 17 | - uses: actions-rust-lang/setup-rust-toolchain@v1 18 | - name: Login with cargo 19 | run: cargo login ${{ secrets.CRATES_IO_TOKEN }} 20 | - name: Publish package 21 | run: cargo publish 22 | publish: 23 | name: ${{ matrix.platform.os_name }} with Rust ${{ matrix.toolchain }} 24 | runs-on: ${{ matrix.platform.os }} 25 | strategy: 26 | fail-fast: false 27 | matrix: 28 | platform: 29 | - os_name: Linux-aarch64 30 | os: ubuntu-latest 31 | target: aarch64-unknown-linux-musl 32 | bin: envfetch-linux-arm64 33 | - os_name: Linux-x86_64 34 | os: ubuntu-latest 35 | target: x86_64-unknown-linux-gnu 36 | bin: envfetch-linux-x86_64 37 | - os_name: Windows-x86_64 38 | os: windows-latest 39 | target: x86_64-pc-windows-msvc 40 | bin: envfetch-windows-x86_64.exe 41 | - os_name: macOS-x86_64 42 | os: macOS-latest 43 | target: x86_64-apple-darwin 44 | bin: envfetch-darwin-x86_64 45 | - os_name: macOS-aarch64 46 | os: macOS-latest 47 | target: aarch64-apple-darwin 48 | bin: envfetch-darwin-arm64 49 | toolchain: 50 | - stable 51 | steps: 52 | - uses: actions/checkout@v3 53 | - name: Build binary 54 | uses: houseabsolute/actions-rust-cross@v0 55 | with: 56 | command: "build" 57 | target: ${{ matrix.platform.target }} 58 | toolchain: ${{ matrix.toolchain }} 59 | args: "--locked --release" 60 | strip: true 61 | - name: Rename binary (linux and macos) 62 | run: mv target/${{ matrix.platform.target }}/release/envfetch target/${{ matrix.platform.target }}/release/${{ matrix.platform.bin }} 63 | if: matrix.platform.os_name != 'Windows-x86_64' 64 | - name: Generate ZIP and checksum for it (Windows) 65 | run: | 66 | cd target/${{ matrix.platform.target }}/release 67 | tar.exe -a -c -f envfetch-windows-x86_64.zip envfetch.exe 68 | shasum -a 256 envfetch-windows-x86_64.zip | cut -d ' ' -f 1 > envfetch-windows-x86_64.zip.sha256 69 | if: matrix.platform.os_name == 'Windows-x86_64' 70 | - name: Rename binary (windows) 71 | run: mv target/${{ matrix.platform.target }}/release/envfetch.exe target/${{ matrix.platform.target }}/release/${{ matrix.platform.bin }} 72 | if: matrix.platform.os_name == 'Windows-x86_64' 73 | - name: Generate Debian package 74 | run: cargo install cargo-deb && cargo deb --output target/debian/envfetch-debian.deb 75 | if: matrix.platform.os_name == 'Linux-x86_64' 76 | - name: Generate SHA-256 for Debian package 77 | run: shasum -a 256 target/debian/envfetch-debian.deb | cut -d ' ' -f 1 > target/debian/envfetch-debian.deb.sha256 78 | if: matrix.platform.os_name == 'Linux-x86_64' 79 | - name: Generate SHA-256 80 | run: shasum -a 256 target/${{ matrix.platform.target }}/release/${{ matrix.platform.bin }} | cut -d ' ' -f 1 > target/${{ matrix.platform.target }}/release/${{ matrix.platform.bin }}.sha256 81 | - name: Release binary and SHA-256 checksum to GitHub 82 | uses: softprops/action-gh-release@v1 83 | with: 84 | files: | 85 | target/${{ matrix.platform.target }}/release/${{ matrix.platform.bin }} 86 | target/${{ matrix.platform.target }}/release/${{ matrix.platform.bin }}.sha256 87 | - name: Release Debian package and SHA-256 checksum to GitHub 88 | uses: softprops/action-gh-release@v1 89 | if: matrix.platform.os_name == 'Linux-x86_64' 90 | with: 91 | files: | 92 | target/debian/envfetch-debian.deb 93 | target/debian/envfetch-debian.deb.sha256 94 | - name: Release Windows archive and checksum of it to GitHub 95 | uses: softprops/action-gh-release@v1 96 | if: matrix.platform.os_name == 'Windows-x86_64' 97 | with: 98 | files: | 99 | target/${{ matrix.platform.target }}/release/envfetch-windows-x86_64.zip 100 | target/${{ matrix.platform.target }}/release/envfetch-windows-x86_64.zip.sha256 101 | test-install-scripts: 102 | needs: publish 103 | uses: ./.github/workflows/test-install.yml 104 | 105 | -------------------------------------------------------------------------------- /.github/workflows/test-install.yml: -------------------------------------------------------------------------------- 1 | name: Test Installation Script 2 | 3 | on: 4 | workflow_call: 5 | push: 6 | paths: 7 | - "install.ps1" 8 | - "install.sh" 9 | - ".github/workflows/test-install.yml" 10 | pull_request: 11 | paths: 12 | - "install.ps1" 13 | - "install.sh" 14 | - ".github/workflows/test-install.yml" 15 | 16 | jobs: 17 | test-install-windows: 18 | runs-on: windows-latest 19 | strategy: 20 | fail-fast: false 21 | 22 | steps: 23 | - uses: actions/checkout@v3 24 | 25 | - name: Run installation script 26 | run: | 27 | .\\install.ps1 28 | shell: powershell 29 | 30 | - name: Verify installation 31 | run: | 32 | # Check if envfetch directory exists 33 | $envfetchPath = "$env:APPDATA\envfetch" 34 | if (-not (Test-Path $envfetchPath)) { 35 | throw "envfetch directory not found" 36 | } 37 | 38 | # Check if executable exists 39 | if (-not (Test-Path "$envfetchPath\envfetch.exe")) { 40 | throw "envfetch.exe not found" 41 | } 42 | 43 | # Verify PATH 44 | $userPath = [Environment]::GetEnvironmentVariable("Path", "User") 45 | if ($userPath -notlike "*$envfetchPath*") { 46 | throw "envfetch not found in PATH" 47 | } 48 | 49 | # Try to run envfetch (this should at least not crash) 50 | $env:Path = [Environment]::GetEnvironmentVariable("Path", "User") 51 | $result = envfetch --version 52 | if ($LASTEXITCODE -ne 0) { 53 | throw "envfetch failed to run" 54 | } 55 | shell: powershell 56 | 57 | - name: Cleanup 58 | run: | 59 | Remove-Item -Path "$env:APPDATA\envfetch" -Recurse -Force -ErrorAction SilentlyContinue 60 | shell: powershell 61 | 62 | test-install-unix: 63 | runs-on: ${{ matrix.os }} 64 | strategy: 65 | fail-fast: false 66 | matrix: 67 | os: [ubuntu-latest, macos-latest] 68 | 69 | steps: 70 | - uses: actions/checkout@v3 71 | 72 | - name: Run installation script 73 | run: | 74 | chmod +x ./install.sh 75 | ./install.sh 76 | shell: bash 77 | 78 | - name: Verify installation 79 | run: | 80 | # Check if executable exists 81 | if [ ! -f "/usr/local/bin/envfetch" ]; then 82 | echo "envfetch not found in /usr/local/bin" 83 | exit 1 84 | fi 85 | 86 | # Check if executable permissions are set 87 | if [ ! -x "/usr/local/bin/envfetch" ]; then 88 | echo "envfetch is not executable" 89 | exit 1 90 | fi 91 | 92 | # Try to run envfetch 93 | result=$(envfetch --version) 94 | if [ $? -ne 0 ]; then 95 | echo "envfetch failed to run" 96 | exit 1 97 | fi 98 | shell: bash 99 | 100 | - name: Cleanup 101 | run: | 102 | sudo rm -f /usr/local/bin/envfetch 103 | shell: bash 104 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /.idea 3 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @ankddev 2 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "aho-corasick" 7 | version = "1.1.3" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 10 | dependencies = [ 11 | "memchr", 12 | ] 13 | 14 | [[package]] 15 | name = "allocator-api2" 16 | version = "0.2.21" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" 19 | 20 | [[package]] 21 | name = "anstream" 22 | version = "0.6.15" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" 25 | dependencies = [ 26 | "anstyle", 27 | "anstyle-parse", 28 | "anstyle-query", 29 | "anstyle-wincon", 30 | "colorchoice", 31 | "is_terminal_polyfill", 32 | "utf8parse", 33 | ] 34 | 35 | [[package]] 36 | name = "anstyle" 37 | version = "1.0.8" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" 40 | 41 | [[package]] 42 | name = "anstyle-parse" 43 | version = "0.2.5" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" 46 | dependencies = [ 47 | "utf8parse", 48 | ] 49 | 50 | [[package]] 51 | name = "anstyle-query" 52 | version = "1.1.1" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" 55 | dependencies = [ 56 | "windows-sys 0.52.0", 57 | ] 58 | 59 | [[package]] 60 | name = "anstyle-wincon" 61 | version = "3.0.4" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" 64 | dependencies = [ 65 | "anstyle", 66 | "windows-sys 0.52.0", 67 | ] 68 | 69 | [[package]] 70 | name = "assert_cmd" 71 | version = "2.1.1" 72 | source = "registry+https://github.com/rust-lang/crates.io-index" 73 | checksum = "bcbb6924530aa9e0432442af08bbcafdad182db80d2e560da42a6d442535bf85" 74 | dependencies = [ 75 | "anstyle", 76 | "bstr", 77 | "libc", 78 | "predicates", 79 | "predicates-core", 80 | "predicates-tree", 81 | "wait-timeout", 82 | ] 83 | 84 | [[package]] 85 | name = "assert_fs" 86 | version = "1.1.3" 87 | source = "registry+https://github.com/rust-lang/crates.io-index" 88 | checksum = "a652f6cb1f516886fcfee5e7a5c078b9ade62cfcb889524efe5a64d682dd27a9" 89 | dependencies = [ 90 | "anstyle", 91 | "doc-comment", 92 | "globwalk", 93 | "predicates", 94 | "predicates-core", 95 | "predicates-tree", 96 | "tempfile", 97 | ] 98 | 99 | [[package]] 100 | name = "autocfg" 101 | version = "1.4.0" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 104 | 105 | [[package]] 106 | name = "bitflags" 107 | version = "2.9.0" 108 | source = "registry+https://github.com/rust-lang/crates.io-index" 109 | checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" 110 | 111 | [[package]] 112 | name = "block-buffer" 113 | version = "0.10.4" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 116 | dependencies = [ 117 | "generic-array", 118 | ] 119 | 120 | [[package]] 121 | name = "bstr" 122 | version = "1.10.0" 123 | source = "registry+https://github.com/rust-lang/crates.io-index" 124 | checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" 125 | dependencies = [ 126 | "memchr", 127 | "regex-automata", 128 | "serde", 129 | ] 130 | 131 | [[package]] 132 | name = "cassowary" 133 | version = "0.3.0" 134 | source = "registry+https://github.com/rust-lang/crates.io-index" 135 | checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" 136 | 137 | [[package]] 138 | name = "castaway" 139 | version = "0.2.3" 140 | source = "registry+https://github.com/rust-lang/crates.io-index" 141 | checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" 142 | dependencies = [ 143 | "rustversion", 144 | ] 145 | 146 | [[package]] 147 | name = "cfg-if" 148 | version = "1.0.0" 149 | source = "registry+https://github.com/rust-lang/crates.io-index" 150 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 151 | 152 | [[package]] 153 | name = "clap" 154 | version = "4.5.51" 155 | source = "registry+https://github.com/rust-lang/crates.io-index" 156 | checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" 157 | dependencies = [ 158 | "clap_builder", 159 | "clap_derive", 160 | ] 161 | 162 | [[package]] 163 | name = "clap_builder" 164 | version = "4.5.51" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" 167 | dependencies = [ 168 | "anstream", 169 | "anstyle", 170 | "clap_lex", 171 | "strsim", 172 | ] 173 | 174 | [[package]] 175 | name = "clap_derive" 176 | version = "4.5.49" 177 | source = "registry+https://github.com/rust-lang/crates.io-index" 178 | checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" 179 | dependencies = [ 180 | "heck", 181 | "proc-macro2", 182 | "quote", 183 | "syn", 184 | ] 185 | 186 | [[package]] 187 | name = "clap_lex" 188 | version = "0.7.4" 189 | source = "registry+https://github.com/rust-lang/crates.io-index" 190 | checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" 191 | 192 | [[package]] 193 | name = "colorchoice" 194 | version = "1.0.2" 195 | source = "registry+https://github.com/rust-lang/crates.io-index" 196 | checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" 197 | 198 | [[package]] 199 | name = "compact_str" 200 | version = "0.8.1" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | checksum = "3b79c4069c6cad78e2e0cdfcbd26275770669fb39fd308a752dc110e83b9af32" 203 | dependencies = [ 204 | "castaway", 205 | "cfg-if", 206 | "itoa", 207 | "rustversion", 208 | "ryu", 209 | "static_assertions", 210 | ] 211 | 212 | [[package]] 213 | name = "convert_case" 214 | version = "0.7.1" 215 | source = "registry+https://github.com/rust-lang/crates.io-index" 216 | checksum = "bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7" 217 | dependencies = [ 218 | "unicode-segmentation", 219 | ] 220 | 221 | [[package]] 222 | name = "cpufeatures" 223 | version = "0.2.14" 224 | source = "registry+https://github.com/rust-lang/crates.io-index" 225 | checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" 226 | dependencies = [ 227 | "libc", 228 | ] 229 | 230 | [[package]] 231 | name = "crossbeam-deque" 232 | version = "0.8.5" 233 | source = "registry+https://github.com/rust-lang/crates.io-index" 234 | checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" 235 | dependencies = [ 236 | "crossbeam-epoch", 237 | "crossbeam-utils", 238 | ] 239 | 240 | [[package]] 241 | name = "crossbeam-epoch" 242 | version = "0.9.18" 243 | source = "registry+https://github.com/rust-lang/crates.io-index" 244 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 245 | dependencies = [ 246 | "crossbeam-utils", 247 | ] 248 | 249 | [[package]] 250 | name = "crossbeam-utils" 251 | version = "0.8.20" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 254 | 255 | [[package]] 256 | name = "crossterm" 257 | version = "0.28.1" 258 | source = "registry+https://github.com/rust-lang/crates.io-index" 259 | checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" 260 | dependencies = [ 261 | "bitflags", 262 | "crossterm_winapi", 263 | "mio", 264 | "parking_lot", 265 | "rustix 0.38.44", 266 | "signal-hook", 267 | "signal-hook-mio", 268 | "winapi", 269 | ] 270 | 271 | [[package]] 272 | name = "crossterm" 273 | version = "0.29.0" 274 | source = "registry+https://github.com/rust-lang/crates.io-index" 275 | checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" 276 | dependencies = [ 277 | "bitflags", 278 | "crossterm_winapi", 279 | "derive_more", 280 | "document-features", 281 | "mio", 282 | "parking_lot", 283 | "rustix 1.0.0", 284 | "signal-hook", 285 | "signal-hook-mio", 286 | "winapi", 287 | ] 288 | 289 | [[package]] 290 | name = "crossterm_winapi" 291 | version = "0.9.1" 292 | source = "registry+https://github.com/rust-lang/crates.io-index" 293 | checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" 294 | dependencies = [ 295 | "winapi", 296 | ] 297 | 298 | [[package]] 299 | name = "crypto-common" 300 | version = "0.1.6" 301 | source = "registry+https://github.com/rust-lang/crates.io-index" 302 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 303 | dependencies = [ 304 | "generic-array", 305 | "typenum", 306 | ] 307 | 308 | [[package]] 309 | name = "darling" 310 | version = "0.20.10" 311 | source = "registry+https://github.com/rust-lang/crates.io-index" 312 | checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" 313 | dependencies = [ 314 | "darling_core", 315 | "darling_macro", 316 | ] 317 | 318 | [[package]] 319 | name = "darling_core" 320 | version = "0.20.10" 321 | source = "registry+https://github.com/rust-lang/crates.io-index" 322 | checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" 323 | dependencies = [ 324 | "fnv", 325 | "ident_case", 326 | "proc-macro2", 327 | "quote", 328 | "strsim", 329 | "syn", 330 | ] 331 | 332 | [[package]] 333 | name = "darling_macro" 334 | version = "0.20.10" 335 | source = "registry+https://github.com/rust-lang/crates.io-index" 336 | checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" 337 | dependencies = [ 338 | "darling_core", 339 | "quote", 340 | "syn", 341 | ] 342 | 343 | [[package]] 344 | name = "derive_more" 345 | version = "2.0.1" 346 | source = "registry+https://github.com/rust-lang/crates.io-index" 347 | checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" 348 | dependencies = [ 349 | "derive_more-impl", 350 | ] 351 | 352 | [[package]] 353 | name = "derive_more-impl" 354 | version = "2.0.1" 355 | source = "registry+https://github.com/rust-lang/crates.io-index" 356 | checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" 357 | dependencies = [ 358 | "convert_case", 359 | "proc-macro2", 360 | "quote", 361 | "syn", 362 | ] 363 | 364 | [[package]] 365 | name = "difflib" 366 | version = "0.4.0" 367 | source = "registry+https://github.com/rust-lang/crates.io-index" 368 | checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" 369 | 370 | [[package]] 371 | name = "digest" 372 | version = "0.10.7" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 375 | dependencies = [ 376 | "block-buffer", 377 | "crypto-common", 378 | ] 379 | 380 | [[package]] 381 | name = "dirs" 382 | version = "6.0.0" 383 | source = "registry+https://github.com/rust-lang/crates.io-index" 384 | checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" 385 | dependencies = [ 386 | "dirs-sys", 387 | ] 388 | 389 | [[package]] 390 | name = "dirs-sys" 391 | version = "0.5.0" 392 | source = "registry+https://github.com/rust-lang/crates.io-index" 393 | checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" 394 | dependencies = [ 395 | "libc", 396 | "option-ext", 397 | "redox_users", 398 | "windows-sys 0.59.0", 399 | ] 400 | 401 | [[package]] 402 | name = "doc-comment" 403 | version = "0.3.3" 404 | source = "registry+https://github.com/rust-lang/crates.io-index" 405 | checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" 406 | 407 | [[package]] 408 | name = "document-features" 409 | version = "0.2.11" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" 412 | dependencies = [ 413 | "litrs", 414 | ] 415 | 416 | [[package]] 417 | name = "dotenv-parser" 418 | version = "0.1.3" 419 | source = "registry+https://github.com/rust-lang/crates.io-index" 420 | checksum = "4d4e7e3d829e699806e8f1cb1906e671114c2b955a9c65559756b5f93258e8f0" 421 | dependencies = [ 422 | "pest", 423 | "pest_derive", 424 | ] 425 | 426 | [[package]] 427 | name = "either" 428 | version = "1.13.0" 429 | source = "registry+https://github.com/rust-lang/crates.io-index" 430 | checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" 431 | 432 | [[package]] 433 | name = "env_filter" 434 | version = "0.1.3" 435 | source = "registry+https://github.com/rust-lang/crates.io-index" 436 | checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" 437 | dependencies = [ 438 | "log", 439 | "regex", 440 | ] 441 | 442 | [[package]] 443 | name = "env_logger" 444 | version = "0.11.6" 445 | source = "registry+https://github.com/rust-lang/crates.io-index" 446 | checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" 447 | dependencies = [ 448 | "anstream", 449 | "anstyle", 450 | "env_filter", 451 | "humantime", 452 | "log", 453 | ] 454 | 455 | [[package]] 456 | name = "envfetch" 457 | version = "2.1.2" 458 | dependencies = [ 459 | "assert_cmd", 460 | "assert_fs", 461 | "clap", 462 | "crossterm 0.29.0", 463 | "dirs", 464 | "dotenv-parser", 465 | "env_logger", 466 | "globalenv", 467 | "log", 468 | "predicates", 469 | "ratatui", 470 | "rayon", 471 | "serde", 472 | "similar-string", 473 | "tempfile", 474 | "toml", 475 | ] 476 | 477 | [[package]] 478 | name = "equivalent" 479 | version = "1.0.2" 480 | source = "registry+https://github.com/rust-lang/crates.io-index" 481 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 482 | 483 | [[package]] 484 | name = "errno" 485 | version = "0.3.10" 486 | source = "registry+https://github.com/rust-lang/crates.io-index" 487 | checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" 488 | dependencies = [ 489 | "libc", 490 | "windows-sys 0.59.0", 491 | ] 492 | 493 | [[package]] 494 | name = "fastrand" 495 | version = "2.1.1" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" 498 | 499 | [[package]] 500 | name = "float-cmp" 501 | version = "0.10.0" 502 | source = "registry+https://github.com/rust-lang/crates.io-index" 503 | checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8" 504 | dependencies = [ 505 | "num-traits", 506 | ] 507 | 508 | [[package]] 509 | name = "fnv" 510 | version = "1.0.7" 511 | source = "registry+https://github.com/rust-lang/crates.io-index" 512 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 513 | 514 | [[package]] 515 | name = "foldhash" 516 | version = "0.1.4" 517 | source = "registry+https://github.com/rust-lang/crates.io-index" 518 | checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" 519 | 520 | [[package]] 521 | name = "generic-array" 522 | version = "0.14.7" 523 | source = "registry+https://github.com/rust-lang/crates.io-index" 524 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 525 | dependencies = [ 526 | "typenum", 527 | "version_check", 528 | ] 529 | 530 | [[package]] 531 | name = "getrandom" 532 | version = "0.2.15" 533 | source = "registry+https://github.com/rust-lang/crates.io-index" 534 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 535 | dependencies = [ 536 | "cfg-if", 537 | "libc", 538 | "wasi 0.11.0+wasi-snapshot-preview1", 539 | ] 540 | 541 | [[package]] 542 | name = "getrandom" 543 | version = "0.3.1" 544 | source = "registry+https://github.com/rust-lang/crates.io-index" 545 | checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" 546 | dependencies = [ 547 | "cfg-if", 548 | "libc", 549 | "wasi 0.13.3+wasi-0.2.2", 550 | "windows-targets", 551 | ] 552 | 553 | [[package]] 554 | name = "globalenv" 555 | version = "0.4.2" 556 | source = "registry+https://github.com/rust-lang/crates.io-index" 557 | checksum = "abea9ab8146b9eb3156387f938968e435f38c71414d96677e59b33771cee77b9" 558 | dependencies = [ 559 | "winreg", 560 | ] 561 | 562 | [[package]] 563 | name = "globset" 564 | version = "0.4.15" 565 | source = "registry+https://github.com/rust-lang/crates.io-index" 566 | checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" 567 | dependencies = [ 568 | "aho-corasick", 569 | "bstr", 570 | "log", 571 | "regex-automata", 572 | "regex-syntax", 573 | ] 574 | 575 | [[package]] 576 | name = "globwalk" 577 | version = "0.9.1" 578 | source = "registry+https://github.com/rust-lang/crates.io-index" 579 | checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" 580 | dependencies = [ 581 | "bitflags", 582 | "ignore", 583 | "walkdir", 584 | ] 585 | 586 | [[package]] 587 | name = "hashbrown" 588 | version = "0.15.2" 589 | source = "registry+https://github.com/rust-lang/crates.io-index" 590 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 591 | dependencies = [ 592 | "allocator-api2", 593 | "equivalent", 594 | "foldhash", 595 | ] 596 | 597 | [[package]] 598 | name = "heck" 599 | version = "0.5.0" 600 | source = "registry+https://github.com/rust-lang/crates.io-index" 601 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 602 | 603 | [[package]] 604 | name = "humantime" 605 | version = "2.1.0" 606 | source = "registry+https://github.com/rust-lang/crates.io-index" 607 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 608 | 609 | [[package]] 610 | name = "ident_case" 611 | version = "1.0.1" 612 | source = "registry+https://github.com/rust-lang/crates.io-index" 613 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 614 | 615 | [[package]] 616 | name = "ignore" 617 | version = "0.4.23" 618 | source = "registry+https://github.com/rust-lang/crates.io-index" 619 | checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" 620 | dependencies = [ 621 | "crossbeam-deque", 622 | "globset", 623 | "log", 624 | "memchr", 625 | "regex-automata", 626 | "same-file", 627 | "walkdir", 628 | "winapi-util", 629 | ] 630 | 631 | [[package]] 632 | name = "indexmap" 633 | version = "2.11.4" 634 | source = "registry+https://github.com/rust-lang/crates.io-index" 635 | checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" 636 | dependencies = [ 637 | "equivalent", 638 | "hashbrown", 639 | ] 640 | 641 | [[package]] 642 | name = "indoc" 643 | version = "2.0.6" 644 | source = "registry+https://github.com/rust-lang/crates.io-index" 645 | checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" 646 | 647 | [[package]] 648 | name = "instability" 649 | version = "0.3.7" 650 | source = "registry+https://github.com/rust-lang/crates.io-index" 651 | checksum = "0bf9fed6d91cfb734e7476a06bde8300a1b94e217e1b523b6f0cd1a01998c71d" 652 | dependencies = [ 653 | "darling", 654 | "indoc", 655 | "proc-macro2", 656 | "quote", 657 | "syn", 658 | ] 659 | 660 | [[package]] 661 | name = "is_terminal_polyfill" 662 | version = "1.70.1" 663 | source = "registry+https://github.com/rust-lang/crates.io-index" 664 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 665 | 666 | [[package]] 667 | name = "itertools" 668 | version = "0.13.0" 669 | source = "registry+https://github.com/rust-lang/crates.io-index" 670 | checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" 671 | dependencies = [ 672 | "either", 673 | ] 674 | 675 | [[package]] 676 | name = "itoa" 677 | version = "1.0.15" 678 | source = "registry+https://github.com/rust-lang/crates.io-index" 679 | checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 680 | 681 | [[package]] 682 | name = "libc" 683 | version = "0.2.169" 684 | source = "registry+https://github.com/rust-lang/crates.io-index" 685 | checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" 686 | 687 | [[package]] 688 | name = "libredox" 689 | version = "0.1.3" 690 | source = "registry+https://github.com/rust-lang/crates.io-index" 691 | checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" 692 | dependencies = [ 693 | "bitflags", 694 | "libc", 695 | ] 696 | 697 | [[package]] 698 | name = "linux-raw-sys" 699 | version = "0.4.14" 700 | source = "registry+https://github.com/rust-lang/crates.io-index" 701 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 702 | 703 | [[package]] 704 | name = "linux-raw-sys" 705 | version = "0.9.2" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "6db9c683daf087dc577b7506e9695b3d556a9f3849903fa28186283afd6809e9" 708 | 709 | [[package]] 710 | name = "litrs" 711 | version = "0.4.1" 712 | source = "registry+https://github.com/rust-lang/crates.io-index" 713 | checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" 714 | 715 | [[package]] 716 | name = "lock_api" 717 | version = "0.4.12" 718 | source = "registry+https://github.com/rust-lang/crates.io-index" 719 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 720 | dependencies = [ 721 | "autocfg", 722 | "scopeguard", 723 | ] 724 | 725 | [[package]] 726 | name = "log" 727 | version = "0.4.28" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 730 | 731 | [[package]] 732 | name = "lru" 733 | version = "0.12.5" 734 | source = "registry+https://github.com/rust-lang/crates.io-index" 735 | checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" 736 | dependencies = [ 737 | "hashbrown", 738 | ] 739 | 740 | [[package]] 741 | name = "memchr" 742 | version = "2.7.4" 743 | source = "registry+https://github.com/rust-lang/crates.io-index" 744 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 745 | 746 | [[package]] 747 | name = "mio" 748 | version = "1.0.3" 749 | source = "registry+https://github.com/rust-lang/crates.io-index" 750 | checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" 751 | dependencies = [ 752 | "libc", 753 | "log", 754 | "wasi 0.11.0+wasi-snapshot-preview1", 755 | "windows-sys 0.52.0", 756 | ] 757 | 758 | [[package]] 759 | name = "normalize-line-endings" 760 | version = "0.3.0" 761 | source = "registry+https://github.com/rust-lang/crates.io-index" 762 | checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" 763 | 764 | [[package]] 765 | name = "num-traits" 766 | version = "0.2.19" 767 | source = "registry+https://github.com/rust-lang/crates.io-index" 768 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 769 | dependencies = [ 770 | "autocfg", 771 | ] 772 | 773 | [[package]] 774 | name = "once_cell" 775 | version = "1.20.2" 776 | source = "registry+https://github.com/rust-lang/crates.io-index" 777 | checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 778 | 779 | [[package]] 780 | name = "option-ext" 781 | version = "0.2.0" 782 | source = "registry+https://github.com/rust-lang/crates.io-index" 783 | checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 784 | 785 | [[package]] 786 | name = "parking_lot" 787 | version = "0.12.3" 788 | source = "registry+https://github.com/rust-lang/crates.io-index" 789 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 790 | dependencies = [ 791 | "lock_api", 792 | "parking_lot_core", 793 | ] 794 | 795 | [[package]] 796 | name = "parking_lot_core" 797 | version = "0.9.10" 798 | source = "registry+https://github.com/rust-lang/crates.io-index" 799 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 800 | dependencies = [ 801 | "cfg-if", 802 | "libc", 803 | "redox_syscall", 804 | "smallvec", 805 | "windows-targets", 806 | ] 807 | 808 | [[package]] 809 | name = "paste" 810 | version = "1.0.15" 811 | source = "registry+https://github.com/rust-lang/crates.io-index" 812 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 813 | 814 | [[package]] 815 | name = "pest" 816 | version = "2.7.14" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" 819 | dependencies = [ 820 | "memchr", 821 | "thiserror 1.0.64", 822 | "ucd-trie", 823 | ] 824 | 825 | [[package]] 826 | name = "pest_derive" 827 | version = "2.7.14" 828 | source = "registry+https://github.com/rust-lang/crates.io-index" 829 | checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" 830 | dependencies = [ 831 | "pest", 832 | "pest_generator", 833 | ] 834 | 835 | [[package]] 836 | name = "pest_generator" 837 | version = "2.7.14" 838 | source = "registry+https://github.com/rust-lang/crates.io-index" 839 | checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" 840 | dependencies = [ 841 | "pest", 842 | "pest_meta", 843 | "proc-macro2", 844 | "quote", 845 | "syn", 846 | ] 847 | 848 | [[package]] 849 | name = "pest_meta" 850 | version = "2.7.14" 851 | source = "registry+https://github.com/rust-lang/crates.io-index" 852 | checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" 853 | dependencies = [ 854 | "once_cell", 855 | "pest", 856 | "sha2", 857 | ] 858 | 859 | [[package]] 860 | name = "predicates" 861 | version = "3.1.3" 862 | source = "registry+https://github.com/rust-lang/crates.io-index" 863 | checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" 864 | dependencies = [ 865 | "anstyle", 866 | "difflib", 867 | "float-cmp", 868 | "normalize-line-endings", 869 | "predicates-core", 870 | "regex", 871 | ] 872 | 873 | [[package]] 874 | name = "predicates-core" 875 | version = "1.0.8" 876 | source = "registry+https://github.com/rust-lang/crates.io-index" 877 | checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" 878 | 879 | [[package]] 880 | name = "predicates-tree" 881 | version = "1.0.11" 882 | source = "registry+https://github.com/rust-lang/crates.io-index" 883 | checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" 884 | dependencies = [ 885 | "predicates-core", 886 | "termtree", 887 | ] 888 | 889 | [[package]] 890 | name = "proc-macro2" 891 | version = "1.0.94" 892 | source = "registry+https://github.com/rust-lang/crates.io-index" 893 | checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" 894 | dependencies = [ 895 | "unicode-ident", 896 | ] 897 | 898 | [[package]] 899 | name = "quote" 900 | version = "1.0.37" 901 | source = "registry+https://github.com/rust-lang/crates.io-index" 902 | checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 903 | dependencies = [ 904 | "proc-macro2", 905 | ] 906 | 907 | [[package]] 908 | name = "ratatui" 909 | version = "0.29.0" 910 | source = "registry+https://github.com/rust-lang/crates.io-index" 911 | checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" 912 | dependencies = [ 913 | "bitflags", 914 | "cassowary", 915 | "compact_str", 916 | "crossterm 0.28.1", 917 | "indoc", 918 | "instability", 919 | "itertools", 920 | "lru", 921 | "paste", 922 | "strum", 923 | "unicode-segmentation", 924 | "unicode-truncate", 925 | "unicode-width 0.2.0", 926 | ] 927 | 928 | [[package]] 929 | name = "rayon" 930 | version = "1.11.0" 931 | source = "registry+https://github.com/rust-lang/crates.io-index" 932 | checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" 933 | dependencies = [ 934 | "either", 935 | "rayon-core", 936 | ] 937 | 938 | [[package]] 939 | name = "rayon-core" 940 | version = "1.13.0" 941 | source = "registry+https://github.com/rust-lang/crates.io-index" 942 | checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" 943 | dependencies = [ 944 | "crossbeam-deque", 945 | "crossbeam-utils", 946 | ] 947 | 948 | [[package]] 949 | name = "redox_syscall" 950 | version = "0.5.10" 951 | source = "registry+https://github.com/rust-lang/crates.io-index" 952 | checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" 953 | dependencies = [ 954 | "bitflags", 955 | ] 956 | 957 | [[package]] 958 | name = "redox_users" 959 | version = "0.5.0" 960 | source = "registry+https://github.com/rust-lang/crates.io-index" 961 | checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" 962 | dependencies = [ 963 | "getrandom 0.2.15", 964 | "libredox", 965 | "thiserror 2.0.12", 966 | ] 967 | 968 | [[package]] 969 | name = "regex" 970 | version = "1.11.0" 971 | source = "registry+https://github.com/rust-lang/crates.io-index" 972 | checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" 973 | dependencies = [ 974 | "aho-corasick", 975 | "memchr", 976 | "regex-automata", 977 | "regex-syntax", 978 | ] 979 | 980 | [[package]] 981 | name = "regex-automata" 982 | version = "0.4.8" 983 | source = "registry+https://github.com/rust-lang/crates.io-index" 984 | checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" 985 | dependencies = [ 986 | "aho-corasick", 987 | "memchr", 988 | "regex-syntax", 989 | ] 990 | 991 | [[package]] 992 | name = "regex-syntax" 993 | version = "0.8.5" 994 | source = "registry+https://github.com/rust-lang/crates.io-index" 995 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 996 | 997 | [[package]] 998 | name = "rustix" 999 | version = "0.38.44" 1000 | source = "registry+https://github.com/rust-lang/crates.io-index" 1001 | checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" 1002 | dependencies = [ 1003 | "bitflags", 1004 | "errno", 1005 | "libc", 1006 | "linux-raw-sys 0.4.14", 1007 | "windows-sys 0.59.0", 1008 | ] 1009 | 1010 | [[package]] 1011 | name = "rustix" 1012 | version = "1.0.0" 1013 | source = "registry+https://github.com/rust-lang/crates.io-index" 1014 | checksum = "17f8dcd64f141950290e45c99f7710ede1b600297c91818bb30b3667c0f45dc0" 1015 | dependencies = [ 1016 | "bitflags", 1017 | "errno", 1018 | "libc", 1019 | "linux-raw-sys 0.9.2", 1020 | "windows-sys 0.59.0", 1021 | ] 1022 | 1023 | [[package]] 1024 | name = "rustversion" 1025 | version = "1.0.20" 1026 | source = "registry+https://github.com/rust-lang/crates.io-index" 1027 | checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" 1028 | 1029 | [[package]] 1030 | name = "ryu" 1031 | version = "1.0.20" 1032 | source = "registry+https://github.com/rust-lang/crates.io-index" 1033 | checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 1034 | 1035 | [[package]] 1036 | name = "same-file" 1037 | version = "1.0.6" 1038 | source = "registry+https://github.com/rust-lang/crates.io-index" 1039 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1040 | dependencies = [ 1041 | "winapi-util", 1042 | ] 1043 | 1044 | [[package]] 1045 | name = "scopeguard" 1046 | version = "1.2.0" 1047 | source = "registry+https://github.com/rust-lang/crates.io-index" 1048 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1049 | 1050 | [[package]] 1051 | name = "serde" 1052 | version = "1.0.228" 1053 | source = "registry+https://github.com/rust-lang/crates.io-index" 1054 | checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 1055 | dependencies = [ 1056 | "serde_core", 1057 | "serde_derive", 1058 | ] 1059 | 1060 | [[package]] 1061 | name = "serde_core" 1062 | version = "1.0.228" 1063 | source = "registry+https://github.com/rust-lang/crates.io-index" 1064 | checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 1065 | dependencies = [ 1066 | "serde_derive", 1067 | ] 1068 | 1069 | [[package]] 1070 | name = "serde_derive" 1071 | version = "1.0.228" 1072 | source = "registry+https://github.com/rust-lang/crates.io-index" 1073 | checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 1074 | dependencies = [ 1075 | "proc-macro2", 1076 | "quote", 1077 | "syn", 1078 | ] 1079 | 1080 | [[package]] 1081 | name = "serde_spanned" 1082 | version = "1.0.3" 1083 | source = "registry+https://github.com/rust-lang/crates.io-index" 1084 | checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" 1085 | dependencies = [ 1086 | "serde_core", 1087 | ] 1088 | 1089 | [[package]] 1090 | name = "sha2" 1091 | version = "0.10.8" 1092 | source = "registry+https://github.com/rust-lang/crates.io-index" 1093 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 1094 | dependencies = [ 1095 | "cfg-if", 1096 | "cpufeatures", 1097 | "digest", 1098 | ] 1099 | 1100 | [[package]] 1101 | name = "signal-hook" 1102 | version = "0.3.17" 1103 | source = "registry+https://github.com/rust-lang/crates.io-index" 1104 | checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" 1105 | dependencies = [ 1106 | "libc", 1107 | "signal-hook-registry", 1108 | ] 1109 | 1110 | [[package]] 1111 | name = "signal-hook-mio" 1112 | version = "0.2.4" 1113 | source = "registry+https://github.com/rust-lang/crates.io-index" 1114 | checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" 1115 | dependencies = [ 1116 | "libc", 1117 | "mio", 1118 | "signal-hook", 1119 | ] 1120 | 1121 | [[package]] 1122 | name = "signal-hook-registry" 1123 | version = "1.4.2" 1124 | source = "registry+https://github.com/rust-lang/crates.io-index" 1125 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 1126 | dependencies = [ 1127 | "libc", 1128 | ] 1129 | 1130 | [[package]] 1131 | name = "similar-string" 1132 | version = "1.4.3" 1133 | source = "registry+https://github.com/rust-lang/crates.io-index" 1134 | checksum = "d3ac42455f28f7f9fc2ca816746b7143356f51ae195abb35d5bb4ac3808c7fa3" 1135 | 1136 | [[package]] 1137 | name = "smallvec" 1138 | version = "1.14.0" 1139 | source = "registry+https://github.com/rust-lang/crates.io-index" 1140 | checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" 1141 | 1142 | [[package]] 1143 | name = "static_assertions" 1144 | version = "1.1.0" 1145 | source = "registry+https://github.com/rust-lang/crates.io-index" 1146 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 1147 | 1148 | [[package]] 1149 | name = "strsim" 1150 | version = "0.11.1" 1151 | source = "registry+https://github.com/rust-lang/crates.io-index" 1152 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 1153 | 1154 | [[package]] 1155 | name = "strum" 1156 | version = "0.26.3" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" 1159 | dependencies = [ 1160 | "strum_macros", 1161 | ] 1162 | 1163 | [[package]] 1164 | name = "strum_macros" 1165 | version = "0.26.4" 1166 | source = "registry+https://github.com/rust-lang/crates.io-index" 1167 | checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" 1168 | dependencies = [ 1169 | "heck", 1170 | "proc-macro2", 1171 | "quote", 1172 | "rustversion", 1173 | "syn", 1174 | ] 1175 | 1176 | [[package]] 1177 | name = "syn" 1178 | version = "2.0.99" 1179 | source = "registry+https://github.com/rust-lang/crates.io-index" 1180 | checksum = "e02e925281e18ffd9d640e234264753c43edc62d64b2d4cf898f1bc5e75f3fc2" 1181 | dependencies = [ 1182 | "proc-macro2", 1183 | "quote", 1184 | "unicode-ident", 1185 | ] 1186 | 1187 | [[package]] 1188 | name = "tempfile" 1189 | version = "3.23.0" 1190 | source = "registry+https://github.com/rust-lang/crates.io-index" 1191 | checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" 1192 | dependencies = [ 1193 | "fastrand", 1194 | "getrandom 0.3.1", 1195 | "once_cell", 1196 | "rustix 1.0.0", 1197 | "windows-sys 0.59.0", 1198 | ] 1199 | 1200 | [[package]] 1201 | name = "termtree" 1202 | version = "0.4.1" 1203 | source = "registry+https://github.com/rust-lang/crates.io-index" 1204 | checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" 1205 | 1206 | [[package]] 1207 | name = "thiserror" 1208 | version = "1.0.64" 1209 | source = "registry+https://github.com/rust-lang/crates.io-index" 1210 | checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" 1211 | dependencies = [ 1212 | "thiserror-impl 1.0.64", 1213 | ] 1214 | 1215 | [[package]] 1216 | name = "thiserror" 1217 | version = "2.0.12" 1218 | source = "registry+https://github.com/rust-lang/crates.io-index" 1219 | checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 1220 | dependencies = [ 1221 | "thiserror-impl 2.0.12", 1222 | ] 1223 | 1224 | [[package]] 1225 | name = "thiserror-impl" 1226 | version = "1.0.64" 1227 | source = "registry+https://github.com/rust-lang/crates.io-index" 1228 | checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" 1229 | dependencies = [ 1230 | "proc-macro2", 1231 | "quote", 1232 | "syn", 1233 | ] 1234 | 1235 | [[package]] 1236 | name = "thiserror-impl" 1237 | version = "2.0.12" 1238 | source = "registry+https://github.com/rust-lang/crates.io-index" 1239 | checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 1240 | dependencies = [ 1241 | "proc-macro2", 1242 | "quote", 1243 | "syn", 1244 | ] 1245 | 1246 | [[package]] 1247 | name = "toml" 1248 | version = "0.9.8" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" 1251 | dependencies = [ 1252 | "indexmap", 1253 | "serde_core", 1254 | "serde_spanned", 1255 | "toml_datetime", 1256 | "toml_parser", 1257 | "toml_writer", 1258 | "winnow", 1259 | ] 1260 | 1261 | [[package]] 1262 | name = "toml_datetime" 1263 | version = "0.7.3" 1264 | source = "registry+https://github.com/rust-lang/crates.io-index" 1265 | checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" 1266 | dependencies = [ 1267 | "serde_core", 1268 | ] 1269 | 1270 | [[package]] 1271 | name = "toml_parser" 1272 | version = "1.0.4" 1273 | source = "registry+https://github.com/rust-lang/crates.io-index" 1274 | checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" 1275 | dependencies = [ 1276 | "winnow", 1277 | ] 1278 | 1279 | [[package]] 1280 | name = "toml_writer" 1281 | version = "1.0.4" 1282 | source = "registry+https://github.com/rust-lang/crates.io-index" 1283 | checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" 1284 | 1285 | [[package]] 1286 | name = "typenum" 1287 | version = "1.17.0" 1288 | source = "registry+https://github.com/rust-lang/crates.io-index" 1289 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 1290 | 1291 | [[package]] 1292 | name = "ucd-trie" 1293 | version = "0.1.7" 1294 | source = "registry+https://github.com/rust-lang/crates.io-index" 1295 | checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" 1296 | 1297 | [[package]] 1298 | name = "unicode-ident" 1299 | version = "1.0.13" 1300 | source = "registry+https://github.com/rust-lang/crates.io-index" 1301 | checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" 1302 | 1303 | [[package]] 1304 | name = "unicode-segmentation" 1305 | version = "1.12.0" 1306 | source = "registry+https://github.com/rust-lang/crates.io-index" 1307 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 1308 | 1309 | [[package]] 1310 | name = "unicode-truncate" 1311 | version = "1.1.0" 1312 | source = "registry+https://github.com/rust-lang/crates.io-index" 1313 | checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf" 1314 | dependencies = [ 1315 | "itertools", 1316 | "unicode-segmentation", 1317 | "unicode-width 0.1.14", 1318 | ] 1319 | 1320 | [[package]] 1321 | name = "unicode-width" 1322 | version = "0.1.14" 1323 | source = "registry+https://github.com/rust-lang/crates.io-index" 1324 | checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 1325 | 1326 | [[package]] 1327 | name = "unicode-width" 1328 | version = "0.2.0" 1329 | source = "registry+https://github.com/rust-lang/crates.io-index" 1330 | checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" 1331 | 1332 | [[package]] 1333 | name = "utf8parse" 1334 | version = "0.2.2" 1335 | source = "registry+https://github.com/rust-lang/crates.io-index" 1336 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 1337 | 1338 | [[package]] 1339 | name = "version_check" 1340 | version = "0.9.5" 1341 | source = "registry+https://github.com/rust-lang/crates.io-index" 1342 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 1343 | 1344 | [[package]] 1345 | name = "wait-timeout" 1346 | version = "0.2.0" 1347 | source = "registry+https://github.com/rust-lang/crates.io-index" 1348 | checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" 1349 | dependencies = [ 1350 | "libc", 1351 | ] 1352 | 1353 | [[package]] 1354 | name = "walkdir" 1355 | version = "2.5.0" 1356 | source = "registry+https://github.com/rust-lang/crates.io-index" 1357 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 1358 | dependencies = [ 1359 | "same-file", 1360 | "winapi-util", 1361 | ] 1362 | 1363 | [[package]] 1364 | name = "wasi" 1365 | version = "0.11.0+wasi-snapshot-preview1" 1366 | source = "registry+https://github.com/rust-lang/crates.io-index" 1367 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1368 | 1369 | [[package]] 1370 | name = "wasi" 1371 | version = "0.13.3+wasi-0.2.2" 1372 | source = "registry+https://github.com/rust-lang/crates.io-index" 1373 | checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" 1374 | dependencies = [ 1375 | "wit-bindgen-rt", 1376 | ] 1377 | 1378 | [[package]] 1379 | name = "winapi" 1380 | version = "0.3.9" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1383 | dependencies = [ 1384 | "winapi-i686-pc-windows-gnu", 1385 | "winapi-x86_64-pc-windows-gnu", 1386 | ] 1387 | 1388 | [[package]] 1389 | name = "winapi-i686-pc-windows-gnu" 1390 | version = "0.4.0" 1391 | source = "registry+https://github.com/rust-lang/crates.io-index" 1392 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1393 | 1394 | [[package]] 1395 | name = "winapi-util" 1396 | version = "0.1.9" 1397 | source = "registry+https://github.com/rust-lang/crates.io-index" 1398 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 1399 | dependencies = [ 1400 | "windows-sys 0.59.0", 1401 | ] 1402 | 1403 | [[package]] 1404 | name = "winapi-x86_64-pc-windows-gnu" 1405 | version = "0.4.0" 1406 | source = "registry+https://github.com/rust-lang/crates.io-index" 1407 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1408 | 1409 | [[package]] 1410 | name = "windows-sys" 1411 | version = "0.52.0" 1412 | source = "registry+https://github.com/rust-lang/crates.io-index" 1413 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1414 | dependencies = [ 1415 | "windows-targets", 1416 | ] 1417 | 1418 | [[package]] 1419 | name = "windows-sys" 1420 | version = "0.59.0" 1421 | source = "registry+https://github.com/rust-lang/crates.io-index" 1422 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 1423 | dependencies = [ 1424 | "windows-targets", 1425 | ] 1426 | 1427 | [[package]] 1428 | name = "windows-targets" 1429 | version = "0.52.6" 1430 | source = "registry+https://github.com/rust-lang/crates.io-index" 1431 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 1432 | dependencies = [ 1433 | "windows_aarch64_gnullvm", 1434 | "windows_aarch64_msvc", 1435 | "windows_i686_gnu", 1436 | "windows_i686_gnullvm", 1437 | "windows_i686_msvc", 1438 | "windows_x86_64_gnu", 1439 | "windows_x86_64_gnullvm", 1440 | "windows_x86_64_msvc", 1441 | ] 1442 | 1443 | [[package]] 1444 | name = "windows_aarch64_gnullvm" 1445 | version = "0.52.6" 1446 | source = "registry+https://github.com/rust-lang/crates.io-index" 1447 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1448 | 1449 | [[package]] 1450 | name = "windows_aarch64_msvc" 1451 | version = "0.52.6" 1452 | source = "registry+https://github.com/rust-lang/crates.io-index" 1453 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 1454 | 1455 | [[package]] 1456 | name = "windows_i686_gnu" 1457 | version = "0.52.6" 1458 | source = "registry+https://github.com/rust-lang/crates.io-index" 1459 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 1460 | 1461 | [[package]] 1462 | name = "windows_i686_gnullvm" 1463 | version = "0.52.6" 1464 | source = "registry+https://github.com/rust-lang/crates.io-index" 1465 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 1466 | 1467 | [[package]] 1468 | name = "windows_i686_msvc" 1469 | version = "0.52.6" 1470 | source = "registry+https://github.com/rust-lang/crates.io-index" 1471 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 1472 | 1473 | [[package]] 1474 | name = "windows_x86_64_gnu" 1475 | version = "0.52.6" 1476 | source = "registry+https://github.com/rust-lang/crates.io-index" 1477 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 1478 | 1479 | [[package]] 1480 | name = "windows_x86_64_gnullvm" 1481 | version = "0.52.6" 1482 | source = "registry+https://github.com/rust-lang/crates.io-index" 1483 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 1484 | 1485 | [[package]] 1486 | name = "windows_x86_64_msvc" 1487 | version = "0.52.6" 1488 | source = "registry+https://github.com/rust-lang/crates.io-index" 1489 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 1490 | 1491 | [[package]] 1492 | name = "winnow" 1493 | version = "0.7.13" 1494 | source = "registry+https://github.com/rust-lang/crates.io-index" 1495 | checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" 1496 | 1497 | [[package]] 1498 | name = "winreg" 1499 | version = "0.7.0" 1500 | source = "registry+https://github.com/rust-lang/crates.io-index" 1501 | checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" 1502 | dependencies = [ 1503 | "winapi", 1504 | ] 1505 | 1506 | [[package]] 1507 | name = "wit-bindgen-rt" 1508 | version = "0.33.0" 1509 | source = "registry+https://github.com/rust-lang/crates.io-index" 1510 | checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" 1511 | dependencies = [ 1512 | "bitflags", 1513 | ] 1514 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "envfetch" 3 | version = "2.1.2" 4 | edition = "2024" 5 | authors = ["ANKDDEV"] 6 | description = "Lightweight cross-platform CLI tool for working with environment variables" 7 | readme = "README.md" 8 | license = "MIT" 9 | homepage = "https://github.com/ankddev/envfetch" 10 | repository = "https://github.com/ankddev/envfetch" 11 | 12 | [dependencies] 13 | # Parsing command line options 14 | clap = { version = "4.5.51", features = ["derive"] } 15 | # Checking similarity of strings 16 | similar-string = "1.4.3" 17 | # Parsing dotenv-style files 18 | dotenv-parser = "0.1.3" 19 | # Globally setting variables 20 | globalenv = "0.4.2" 21 | # Parallelizing iterators 22 | rayon = "1.11.0" 23 | # Logging 24 | log = "0.4.28" 25 | env_logger = "0.11.6" 26 | # Interactive mode with TUI 27 | ratatui = "0.29.0" 28 | crossterm = "0.29.0" 29 | # Config parsing 30 | serde = { version = "1.0.228", features = ["derive"] } 31 | toml = "0.9.8" 32 | # Finding directories 33 | dirs = "6.0.0" 34 | 35 | [dev-dependencies] 36 | # Asserting CLI programs 37 | assert_cmd = "2.1.1" 38 | # Asserting predicates 39 | predicates = "3.1.3" 40 | # Asserting file system 41 | assert_fs = "1.1.3" 42 | # Creating temporary directories 43 | tempfile = "3.23.0" 44 | 45 | [profile.release] 46 | opt-level = "z" 47 | debug = true 48 | lto = true 49 | codegen-units = 1 50 | panic = "abort" 51 | incremental = true 52 | split-debuginfo = "packed" 53 | strip = "symbols" 54 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright © 2025 ANKDDEV 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

envfetch

2 |
Lightweight cross-platform CLI tool for working with environment variables
3 |
4 | Test status 5 | GitHub commit activity 6 | 7 | crates.io downloads 8 | crates.io version 9 | AUR version 10 |
11 |
12 | 13 |
14 | 15 | # Features 16 | - [x] Print list of all environment variables 17 | - [x] Get value of variable by name 18 | - [x] Show similar variables if given variable not found 19 | - [x] Set variable (temporary and permanent) 20 | - [x] Delete variable (temporary and permanent) 21 | - [x] Load variables from dotenv-style file (temporary and permanent) 22 | - [x] Add string to the end of variable (temporary and permanent) 23 | - [ ] Set and delete multiple variables at once 24 | - [x] Interactive mode 25 | - [x] Export variables 26 | - [x] Configuration support 27 | # Get started 28 | ## Installing 29 | 30 | 31 | Packaging status 32 | 33 | 34 | Read about installing `envfetch` in the [Wiki](https://github.com/ankddev/envfetch/wiki/2.-Installation). 35 | ## Using 36 | Read in [Wiki](https://github.com/ankddev/envfetch/wiki/3.-Basic-Usage). 37 | ## Configuration 38 | Read in [this Wiki page](https://github.com/ankddev/envfetch/wiki/4.-Configuration) 39 | # Contributing and building from source 40 | Read in [this Wiki page](https://github.com/ankddev/envfetch/wiki/6.-Contributing) 41 | 42 | # See Also 43 | - [codewars-api-rs](https://github.com/ankddev/codewars-api-rs) - Rust library for Codewars API 44 | - [conemu-progressbar-go](https://github.com/ankddev/conemu-progressbar-go) - Progress bar for ConEmu for Go 45 | - [terminal-go](https://github.com/ankddev/terminal-go) - Go library for working with ANSI/VT terminal sequences 46 | - [zapret-discord-youtube](https://github.com/ankddev/zapret-discord-youtube) - Zapret build for Windows for fixing Discord and YouTube in Russia or other services 47 | -------------------------------------------------------------------------------- /assets/default_config.toml: -------------------------------------------------------------------------------- 1 | # Config for envfetch. See for documentation in our documentation. 2 | # https://github.com/ankddev/envfetch/wiki/4.-Configuration 3 | 4 | # Custom format for list of variables. {name} is replaced with variable's name and {value} is replaced with it's value 5 | # print_format = "{name} = {value}" 6 | -------------------------------------------------------------------------------- /assets/envfetch.tape: -------------------------------------------------------------------------------- 1 | # Source code for the VHS envfetch example. 2 | # 3 | # To run: 4 | # 5 | # vhs assets/envfetch.tape 6 | 7 | # VHS documentation 8 | # 9 | # Output: 10 | # Output .gif Create a GIF output at the given 11 | # Output .mp4 Create an MP4 output at the given 12 | # Output .webm Create a WebM output at the given 13 | # 14 | # Require: 15 | # Require Ensure a program is on the $PATH to proceed 16 | # 17 | # Settings: 18 | # Set FontSize Set the font size of the terminal 19 | # Set FontFamily Set the font family of the terminal 20 | # Set Height Set the height of the terminal 21 | # Set Width Set the width of the terminal 22 | # Set LetterSpacing Set the font letter spacing (tracking) 23 | # Set LineHeight Set the font line height 24 | # Set LoopOffset % Set the starting frame offset for the GIF loop 25 | # Set Theme Set the theme of the terminal 26 | # Set Padding Set the padding of the terminal 27 | # Set Framerate Set the framerate of the recording 28 | # Set PlaybackSpeed Set the playback speed of the recording 29 | # Set MarginFill Set the file or color the margin will be filled with. 30 | # Set Margin Set the size of the margin. Has no effect if MarginFill isn't set. 31 | # Set BorderRadius Set terminal border radius, in pixels. 32 | # Set WindowBar Set window bar type. (one of: Rings, RingsRight, Colorful, ColorfulRight) 33 | # Set WindowBarSize Set window bar size, in pixels. Default is 40. 34 | # Set TypingSpeed