Compare commits
179 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8686d1ca1a | |||
| 9be14fe058 | |||
| 50e6e33c91 | |||
| 28ab9a8ca5 | |||
| 29ac0ef394 | |||
| dbadadff86 | |||
| da55a2e47a | |||
| d6d0f11beb | |||
| 3038c24820 | |||
| 1316e9a953 | |||
| e6b4d0b724 | |||
| 4eeb01a308 | |||
| 7fadb7b3e3 | |||
| e07b62d2ad | |||
| 2682c35cd1 | |||
| 3da4fb76e4 | |||
| 6fef076083 | |||
| dabddd5692 | |||
| f3946bf4a4 | |||
| c770e88764 | |||
| 8502628b87 | |||
| 7ab6f204f3 | |||
| 8ff6898b8b | |||
| f80bc288fb | |||
| 6618e78060 | |||
| 4d6018df77 | |||
| 466e49dce9 | |||
| c7e54991db | |||
| 559fc9da35 | |||
| 969f7ad85e | |||
| 9f13a8f3ac | |||
| 3548a65952 | |||
| 9dfbe571d6 | |||
| d9e279ffa5 | |||
| 1f97bdbe60 | |||
| ef57ca2590 | |||
| 41eb13f8b1 | |||
| 04de00bf07 | |||
| 42a0dbd0df | |||
| 777fb0f73a | |||
| ddc543c459 | |||
| b114e376d8 | |||
| 792e5df6ba | |||
| b4df724a6b | |||
| 8db0ddbad4 | |||
| 885947c169 | |||
| 26113dda40 | |||
| 92777e4b33 | |||
| 9eabc12212 | |||
| f4ef6a0430 | |||
| 845c158bcf | |||
| 94d6d9470c | |||
| 22a5c08e57 | |||
| 39d2922162 | |||
| 7aac634f4c | |||
| a8156e1d32 | |||
| 7d2ac8e4a4 | |||
| 5db155017a | |||
| 7b748c38ab | |||
| 48865a9c5c | |||
| 6b77344be8 | |||
| 76b5d73e39 | |||
| 433b47bbb8 | |||
| 81b5f77a92 | |||
| 768deda1f0 | |||
| 097d62792c | |||
| 415d22d317 | |||
| 7e18e9bee3 | |||
| 1e5bb067ba | |||
| a9f1f0c70e | |||
| cd92c1174c | |||
| 46d9513598 | |||
| e5c0eb7728 | |||
| a301c34fcf | |||
| 1228defd59 | |||
| ebfcc15bc5 | |||
| 1e1c2d946c | |||
| 29a46dc90c | |||
| f33343ffb4 | |||
| 54efd51204 | |||
| c2fff1034d | |||
| 0621fc51e0 | |||
| 91b13987fe | |||
| 6f97c3441b | |||
| 63bb4f4cc0 | |||
| e2c63d0a9b | |||
| 783e951dfc | |||
| 24d78a679c | |||
| f31ea70e37 | |||
| aea9be5ba2 | |||
| a9b302298b | |||
| 7d35f78ace | |||
| 7e2722a2a4 | |||
| 4a62df212e | |||
| 2fcd7cf878 | |||
| 25d596ff4b | |||
| 6e6bf3d714 | |||
| 9b2482ed66 | |||
| 96c7a68fdc | |||
| bc663f72ec | |||
| 3bb64c3f7b | |||
| c6ca91f6c1 | |||
| fc8c37fe69 | |||
| 8ebe6e2013 | |||
| 878cf275eb | |||
| 3ed4930bfb | |||
| 46cc1086cd | |||
| 36c0c22f8d | |||
| 1e8be70005 | |||
| 1c34399b8c | |||
| 469205c1a6 | |||
| 7df23d9a71 | |||
| 7404851a84 | |||
| cb29388de7 | |||
| eb56a4b0d3 | |||
| 3408e83b33 | |||
| db50c6e029 | |||
| bae996d676 | |||
| 59753c1d20 | |||
| e26c0525bc | |||
| 7457242995 | |||
| efab8bd933 | |||
| dcffb58de8 | |||
| 56d8e368d7 | |||
| cb03bfe569 | |||
| fedcbfb967 | |||
| b20c3457b0 | |||
| bf4790dc88 | |||
| 247f09d396 | |||
| f19b831ddc | |||
| cd620d0a65 | |||
| 62018c7844 | |||
| 3ae81b8084 | |||
| 16c80d10b1 | |||
| bbb6cc517e | |||
| ec7ab4f28e | |||
| 0ef3102727 | |||
| 66296bd6e2 | |||
| ac962f49e9 | |||
| a79812a346 | |||
| 80930c0820 | |||
| db2019e31f | |||
| f0f7c7642b | |||
| 2f0e9ff652 | |||
| 0e26ba2501 | |||
| 00d7c58611 | |||
| a322cb9809 | |||
| 263cbfd52d | |||
| 14137b8002 | |||
| 973e8e7d14 | |||
| 575cdbd5e1 | |||
| 66ffc397a5 | |||
| 636c6af268 | |||
| 5e55b79487 | |||
| 1758e7edea | |||
| b411d78dbc | |||
| cad7b63f28 | |||
| 1ae1b7e1f7 | |||
| b6ca0dc45d | |||
| a674cc1dbc | |||
| 16528757ba | |||
| a9f00dd16c | |||
| fbfd12f6a6 | |||
| 21addb8db0 | |||
| 2aa99ce653 | |||
| ae765bb663 | |||
| 8333803917 | |||
| 7beb8732c0 | |||
| 93bda82417 | |||
| bbc4d5b2c7 | |||
| 22d95a769a | |||
| 00d5e85626 | |||
| 566b4c83aa | |||
| 8a9da3de6c | |||
| 60204ce983 | |||
| b6825603f8 | |||
| 5603c2473a | |||
| 2553f43f7d | |||
| 8be0758a6c |
@@ -0,0 +1,8 @@
|
||||
# Chris rules EVERYTHING (including paths listed below)
|
||||
* @ChrisTitusTech
|
||||
|
||||
# Nix stuff
|
||||
# We want the whole `nix` directory here in case we add custom tests/script later
|
||||
*.nix @koibtw
|
||||
flake.lock @koibtw
|
||||
/nix/ @koibtw
|
||||
@@ -1,7 +1,7 @@
|
||||
name: Bug Report
|
||||
description: Report a bug or issue to help us improve.
|
||||
title: "[Bug]: "
|
||||
labels: ["bug"]
|
||||
title: "[Bug]: <title>"
|
||||
labels: ["type: bug", "initial review required"]
|
||||
assignees: []
|
||||
body:
|
||||
- type: markdown
|
||||
@@ -26,7 +26,7 @@ body:
|
||||
- type: input
|
||||
id: specify-distribution
|
||||
attributes:
|
||||
label: Specify Distribution (if "Other" selected)
|
||||
label: Distribution (if "Other" selected)
|
||||
description: Enter the name of your Linux distribution.
|
||||
placeholder: e.g., Manjaro, Pop!_OS
|
||||
- type: dropdown
|
||||
@@ -47,7 +47,7 @@ body:
|
||||
- type: input
|
||||
id: specify-de-wm
|
||||
attributes:
|
||||
label: Specify Desktop Environment/Window Manager (if "Other" selected)
|
||||
label: Desktop Environment / Window Manager (if "Other" selected)
|
||||
description: Enter the name of your desktop environment or window manager.
|
||||
placeholder: e.g., LXQt, Openbox
|
||||
- type: dropdown
|
||||
@@ -65,7 +65,7 @@ body:
|
||||
id: linutil-version
|
||||
attributes:
|
||||
label: Linutil Version
|
||||
description: Linutil version (found above the list within linutil).
|
||||
description: Version number (found above the list within Linutil).
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
@@ -75,31 +75,31 @@ body:
|
||||
multiple: false
|
||||
description: Specify the branch of the project you are using.
|
||||
options:
|
||||
- main
|
||||
- prerelease
|
||||
- stable
|
||||
- main
|
||||
- release
|
||||
- pre-release
|
||||
- other
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: specify-branch
|
||||
id: specify-commit
|
||||
attributes:
|
||||
label: Specify Branch (if "Other" selected)
|
||||
description: Enter the branch name.
|
||||
placeholder: e.g., feature/new-feature
|
||||
label: Commit Hash (if "Other" selected)
|
||||
description: Enter commit hash if not using a listed branch.
|
||||
placeholder: e.g., 09ebb1c, 09ebb1c604ba8f15fd818de2ead0a9ef2690fc21
|
||||
- type: textarea
|
||||
id: describe-bug
|
||||
attributes:
|
||||
label: Describe the bug
|
||||
label: Description
|
||||
description: |
|
||||
Provide a clear and concise description of what the bug is.
|
||||
Provide a clear and concise description of what went wrong.
|
||||
placeholder: Describe the issue in detail.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: reproduce-steps
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
label: Steps to Reproduce
|
||||
description: Steps to reproduce the behavior.
|
||||
placeholder: |
|
||||
1. Go to '...'
|
||||
@@ -111,33 +111,36 @@ body:
|
||||
- type: textarea
|
||||
id: expected-behavior
|
||||
attributes:
|
||||
label: Expected behavior
|
||||
label: Expected Behavior
|
||||
description: |
|
||||
A clear and concise description of what you expected to happen.
|
||||
placeholder: Explain the expected outcome.
|
||||
placeholder: Describe the correct behavior.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: additional-context
|
||||
attributes:
|
||||
label: Additional context
|
||||
label: Additional Context
|
||||
description: |
|
||||
Add any other context or information about the problem here.
|
||||
placeholder: Include any related logs, error messages, or configurations.
|
||||
- type: textarea
|
||||
id: screenshots
|
||||
attributes:
|
||||
label: Screenshots
|
||||
label: Logs or Screenshots
|
||||
description: |
|
||||
If applicable, add screenshots to help explain your problem. Provide links or attach images in the comments after submitting the issue.
|
||||
If applicable, add logs or screenshots to help explain your problem.
|
||||
placeholder: Remeber to use code blocks (```) for logs.
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: Checklist
|
||||
options:
|
||||
- label: I checked for duplicate issues.
|
||||
required: true
|
||||
- label: I checked existing discussions.
|
||||
required: true
|
||||
- label: This issue is not included in the roadmap.
|
||||
required: true
|
||||
- label: This issue is present on both stable and development branches.
|
||||
required: true
|
||||
|
||||
|
||||
@@ -1,49 +1,50 @@
|
||||
name: Feature Request
|
||||
description: Suggest a new feature or improvement to help us enhance this project.
|
||||
title: "[Feature Request]: "
|
||||
labels: ["enhancement"]
|
||||
description: Suggest a new feature or improvement to help us enhance the project.
|
||||
title: "[Feature Request]: <title>"
|
||||
labels: ["type: enhancement", "initial review required"]
|
||||
assignees: []
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for suggesting a feature or enhancement! Please provide as much detail as possible to help us understand your request. Note that submitting a feature request does not guarantee implementation.
|
||||
Please provide as much detail as possible to help us understand your request. Note that submitting a feature request does not guarantee implementation.
|
||||
- type: textarea
|
||||
id: related-problem
|
||||
attributes:
|
||||
label: Is your feature request related to a problem? Please describe.
|
||||
label: Problem Description
|
||||
description: |
|
||||
Provide a clear and concise description of the problem, if applicable.
|
||||
Is your feature request related to a problem? If yes, please describe.
|
||||
placeholder: I'm always frustrated when ...
|
||||
- type: textarea
|
||||
id: proposed-solution
|
||||
attributes:
|
||||
label: Describe the solution you'd like
|
||||
label: Proposed solution
|
||||
description: |
|
||||
Provide a clear and concise description of what you want to happen.
|
||||
placeholder: Explain your proposed feature or enhancement in detail.
|
||||
Provide a clear and concise description of what you would like to be changed.
|
||||
placeholder: Explain your proposal in detail.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: alternatives
|
||||
attributes:
|
||||
label: Describe alternatives you've considered
|
||||
label: Alternatives
|
||||
description: |
|
||||
Provide a clear and concise description of any alternative solutions or features you've considered.
|
||||
Are there other ways to solve this? List any alternatives or workarounds you’ve considered.
|
||||
placeholder: Explain any other approaches or solutions you've thought about.
|
||||
- type: textarea
|
||||
id: additional-context
|
||||
attributes:
|
||||
label: Additional context
|
||||
label: Additional Context
|
||||
description: |
|
||||
Add any other context or screenshots about the feature request here.
|
||||
placeholder: Provide additional information, screenshots, or references to explain your request further.
|
||||
Add any other context, screenshots or references related to your request here.
|
||||
- type: checkboxes
|
||||
id: checklist
|
||||
attributes:
|
||||
label: Checklist
|
||||
options:
|
||||
- label: I checked for duplicate issues.
|
||||
required: true
|
||||
- label: I checked already existing discussions.
|
||||
required: true
|
||||
- label: This feature is not included in the roadmap.
|
||||
required: true
|
||||
|
||||
@@ -8,29 +8,13 @@ https://github.com/ChrisTitusTech/linutil/blob/main/.github/CONTRIBUTING.md
|
||||
- [ ] Bug fix
|
||||
- [ ] Documentation update
|
||||
- [ ] Refactoring
|
||||
- [ ] Hotfix
|
||||
- [ ] Security patch
|
||||
- [ ] UI/UX improvement
|
||||
|
||||
## Description
|
||||
<!--[Provide a detailed explanation of the changes you have made. Include the reasons behind these changes and any relevant context. Link any related issues.]-->
|
||||
|
||||
## Testing
|
||||
<!--[Detail the testing you have performed to ensure that these changes function as intended. Include information about any added tests.]-->
|
||||
|
||||
## Impact
|
||||
<!--[Discuss the impact of your changes on the project. This might include effects on performance, new dependencies, or changes in behaviour.]-->
|
||||
|
||||
## Issues / other PRs related
|
||||
<!--[What issue/discussion is related to this PR (if any)]-->
|
||||
- Resolves #
|
||||
|
||||
## Additional Information
|
||||
<!--[Any additional information that reviewers should be aware of.]-->
|
||||
|
||||
## Checklist
|
||||
- [ ] My code adheres to the coding and style guidelines of the project.
|
||||
- [ ] I have performed a self-review of my own code.
|
||||
- [ ] I have commented my code, particularly in hard-to-understand areas.
|
||||
- [ ] I have made corresponding changes to the documentation.
|
||||
- [ ] My changes generate no errors/warnings/merge conflicts.
|
||||
## Screenshots (if applicable)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1.7 MiB |
@@ -60,11 +60,11 @@ Output preview.gif
|
||||
Require linutil
|
||||
Require sh
|
||||
|
||||
Set Shell "bash"
|
||||
Set FontFamily "JetBrainsMono Nerd Font"
|
||||
Set FontSize 24
|
||||
Set Shell bash
|
||||
Set FontFamily "JetBrainsMono NFM"
|
||||
Set Width 1920
|
||||
Set Height 1080
|
||||
Set Theme nord
|
||||
|
||||
Sleep 1s
|
||||
|
||||
|
||||
+9
-9
@@ -2,31 +2,31 @@ changelog:
|
||||
categories:
|
||||
- title: '🚀 Features'
|
||||
labels:
|
||||
- 'enhancement'
|
||||
- 'type: enhancement'
|
||||
- title: '🐛 Bug Fixes'
|
||||
labels:
|
||||
- 'bug'
|
||||
- 'type: bug'
|
||||
- title: '⚙️ Refactoring'
|
||||
labels:
|
||||
- 'refactor'
|
||||
- 'type: refactor'
|
||||
- title: '🧩 UI/UX'
|
||||
labels:
|
||||
- 'UI/UX'
|
||||
- 'scope: UI/UX'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- 'documentation'
|
||||
- 'scope: documentation'
|
||||
- title: '🔒 Security'
|
||||
labels:
|
||||
- 'security'
|
||||
- 'scope: security'
|
||||
- title: '🧰 GitHub Actions'
|
||||
labels:
|
||||
- 'github_actions'
|
||||
- 'scope: github_actions'
|
||||
- title: '🦀 Rust'
|
||||
labels:
|
||||
- 'rust'
|
||||
- 'scope: rust'
|
||||
- title: '📃 Scripting'
|
||||
labels:
|
||||
- 'script'
|
||||
- 'scope: script'
|
||||
- title: 'Other Changes'
|
||||
labels:
|
||||
- "*"
|
||||
|
||||
@@ -15,7 +15,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
- run: git fetch origin ${{ github.base_ref }}
|
||||
|
||||
- name: Install devscripts
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
name: Deploy Hugo site to Pages
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- "docs/**"
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
concurrency:
|
||||
group: "pages"
|
||||
cancel-in-progress: false
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: github.repository == 'ChrisTitusTech/linutil'
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
HUGO_VERSION: 0.156.0
|
||||
HUGO_ENVIRONMENT: production
|
||||
TZ: America/Chicago
|
||||
steps:
|
||||
- name: Install Hugo CLI
|
||||
run: |
|
||||
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
|
||||
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: recursive
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
- name: Setup Pages
|
||||
id: pages
|
||||
uses: actions/configure-pages@v5
|
||||
|
||||
- name: Install Node.js dependencies
|
||||
run: "cd docs && [[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
|
||||
- name: Cache Restore
|
||||
id: cache-restore
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
path: |
|
||||
${{ runner.temp }}/hugo_cache
|
||||
key: hugo-${{ github.run_id }}
|
||||
restore-keys: hugo-
|
||||
- name: Build with Hugo
|
||||
run: |
|
||||
hugo \
|
||||
--gc \
|
||||
--minify \
|
||||
--cleanDestinationDir \
|
||||
--source docs \
|
||||
--cacheDir "${{ runner.temp }}/hugo_cache"
|
||||
- name: Cache Save
|
||||
id: cache-save
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
path: |
|
||||
${{ runner.temp }}/hugo_cache
|
||||
key: ${{ steps.cache-restore.outputs.cache-primary-key }}
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v5
|
||||
with:
|
||||
path: ./docs/public
|
||||
|
||||
deploy:
|
||||
if: github.repository == 'ChrisTitusTech/linutil'
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v5
|
||||
@@ -15,101 +15,63 @@ jobs:
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- run: echo "command=false" >> $GITHUB_ENV
|
||||
- name: Process slash command
|
||||
uses: actions/github-script@v9
|
||||
with:
|
||||
script: |
|
||||
const allowedUsers = ["ChrisTitusTech", "og-mrk", "Marterich", "MyDrift-user", "Real-MullaC", "CodingWonders", "GabiNun2", "FluffyPunk"];
|
||||
const commenter = context.payload.comment.user.login;
|
||||
|
||||
- name: Check for /label command
|
||||
id: check_label_command
|
||||
run: |
|
||||
if [[ "${{ contains(github.event.comment.body, '/label') }}" == "true" ]]; then
|
||||
echo "command=true" >> $GITHUB_ENV
|
||||
LABEL_NAME=$(echo '${{ github.event.comment.body }}' | awk -F"/label" '/\/label/ { match($2, /'\''([^'\'']*)'\''/, arr); if (arr[1] != "") print arr[1] }')
|
||||
echo "label_command=true" >> $GITHUB_ENV
|
||||
echo "label_name=${LABEL_NAME}" >> $GITHUB_ENV
|
||||
else
|
||||
echo "label_command=false" >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
- name: Check for /unlabel command
|
||||
id: check_unlabel_command
|
||||
run: |
|
||||
if [[ "${{ contains(github.event.comment.body, '/unlabel') }}" == "true" ]]; then
|
||||
echo "command=true" >> $GITHUB_ENV
|
||||
UNLABEL_NAME=$(echo '${{ github.event.comment.body }}' | awk -F"/unlabel" '/\/unlabel/ { match($2, /'\''([^'\'']*)'\''/, arr); if (arr[1] != "") print arr[1] }')
|
||||
echo "unlabel_command=true" >> $GITHUB_ENV
|
||||
echo "unlabel_name=${UNLABEL_NAME}" >> $GITHUB_ENV
|
||||
else
|
||||
echo "unlabel_command=false" >> $GITHUB_ENV
|
||||
fi
|
||||
// Authorization check first - before any parsing of comment content
|
||||
if (!allowedUsers.includes(commenter)) {
|
||||
console.log(`User ${commenter} is not in the allowlist. Skipping.`);
|
||||
return;
|
||||
}
|
||||
|
||||
- name: Check for /close command
|
||||
id: check_close_command
|
||||
run: |
|
||||
if [[ "${{ contains(github.event.comment.body, '/close') }}" == "true" ]]; then
|
||||
echo "command=true" >> $GITHUB_ENV
|
||||
echo "close_command=true" >> $GITHUB_ENV
|
||||
echo "reopen_command=false" >> $GITHUB_ENV
|
||||
else
|
||||
echo "close_command=false" >> $GITHUB_ENV
|
||||
fi
|
||||
// Read comment body as data, never interpolated into shell
|
||||
const body = context.payload.comment.body;
|
||||
const issueNumber = context.issue.number;
|
||||
const owner = context.repo.owner;
|
||||
const repo = context.repo.repo;
|
||||
|
||||
- name: Check for /open or /reopen command
|
||||
id: check_reopen_command
|
||||
run: |
|
||||
if [[ "${{ contains(github.event.comment.body, '/open') }}" == "true" ]] || [[ "${{ contains(github.event.comment.body, '/reopen') }}" == "true" ]]; then
|
||||
echo "command=true" >> $GITHUB_ENV
|
||||
echo "reopen_command=true" >> $GITHUB_ENV
|
||||
echo "close_command=false" >> $GITHUB_ENV
|
||||
else
|
||||
echo "reopen_command=false" >> $GITHUB_ENV
|
||||
fi
|
||||
// /label 'name' or /label name
|
||||
const labelMatch = body.match(/\/label\s+'([^']+)'|\/label\s+(\S+?)(?:\s|$)/);
|
||||
if (labelMatch) {
|
||||
const labelName = (labelMatch[1] || labelMatch[2]).trim();
|
||||
console.log(`Adding label: ${labelName}`);
|
||||
await github.rest.issues.addLabels({
|
||||
owner, repo, issue_number: issueNumber,
|
||||
labels: [labelName],
|
||||
});
|
||||
}
|
||||
|
||||
- name: Check if the user is allowed
|
||||
id: check_user
|
||||
if: env.command == 'true'
|
||||
run: |
|
||||
ALLOWED_USERS=("ChrisTitusTech" "afonsofrancof" "Marterich" "MyDrift-user" "Real-MullaC" "nnyyxxxx" "adamperkowski" "lj3954" "jeevithakannan2" "${{ github.event.issue.user.login }}")
|
||||
if [[ " ${ALLOWED_USERS[@]} " =~ " ${{ github.event.comment.user.login }} " ]]; then
|
||||
echo "user=true" >> $GITHUB_ENV
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
// /unlabel 'name' or /unlabel name
|
||||
const unlabelMatch = body.match(/\/unlabel\s+'([^']+)'|\/unlabel\s+(\S+?)(?:\s|$)/);
|
||||
if (unlabelMatch) {
|
||||
const labelName = (unlabelMatch[1] || unlabelMatch[2]).trim();
|
||||
console.log(`Removing label: ${labelName}`);
|
||||
await github.rest.issues.removeLabel({
|
||||
owner, repo, issue_number: issueNumber,
|
||||
name: labelName,
|
||||
});
|
||||
}
|
||||
|
||||
- name: Close issue
|
||||
if: env.close_command == 'true'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
ISSUE_NUMBER: ${{ github.event.issue.number }}
|
||||
run: |
|
||||
echo Closing the issue...
|
||||
if [[ "${{ contains(github.event.comment.body, 'not planned') }}" == "true" ]]; then
|
||||
gh issue close $ISSUE_NUMBER --repo ${{ github.repository }} --reason 'not planned'
|
||||
else
|
||||
gh issue close $ISSUE_NUMBER --repo ${{ github.repository }}
|
||||
fi
|
||||
|
||||
- name: Reopen issue
|
||||
if: env.reopen_command == 'true'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
ISSUE_NUMBER: ${{ github.event.issue.number }}
|
||||
run: |
|
||||
echo Reopening the issue...
|
||||
gh issue reopen $ISSUE_NUMBER --repo ${{ github.repository }}
|
||||
// /close (optionally with 'not planned')
|
||||
if (body.includes('/close')) {
|
||||
const stateReason = body.includes('not planned') ? 'not_planned' : 'completed';
|
||||
console.log(`Closing issue (reason: ${stateReason})`);
|
||||
await github.rest.issues.update({
|
||||
owner, repo, issue_number: issueNumber,
|
||||
state: 'closed',
|
||||
state_reason: stateReason,
|
||||
});
|
||||
}
|
||||
|
||||
- name: Label issue
|
||||
if: env.label_command == 'true'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
ISSUE_NUMBER: ${{ github.event.issue.number }}
|
||||
run: |
|
||||
echo Labeling the issue...
|
||||
gh issue edit $ISSUE_NUMBER --repo ${{ github.repository }} --add-label "${{ env.label_name }}"
|
||||
|
||||
- name: Remove labels
|
||||
if: env.unlabel_command == 'true'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
ISSUE_NUMBER: ${{ github.event.issue.number }}
|
||||
run: |
|
||||
echo Unlabeling the issue...
|
||||
gh issue edit $ISSUE_NUMBER --repo ${{ github.repository }} --remove-label "${{ env.unlabel_name }}"
|
||||
// /open or /reopen
|
||||
if (body.includes('/open') || body.includes('/reopen')) {
|
||||
console.log('Reopening issue');
|
||||
await github.rest.issues.update({
|
||||
owner, repo, issue_number: issueNumber,
|
||||
state: 'open',
|
||||
});
|
||||
}
|
||||
|
||||
@@ -15,20 +15,20 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
|
||||
- name: Install musl-tools
|
||||
run: sudo apt-get update && sudo apt-get install musl-tools
|
||||
|
||||
- name: Cache Cargo registry
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.cargo/registry
|
||||
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
|
||||
restore-keys: ${{ runner.os }}-cargo-registry-
|
||||
|
||||
- name: Cache Cargo index
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.cargo/git
|
||||
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
|
||||
@@ -59,7 +59,7 @@ jobs:
|
||||
|
||||
- name: Create and Upload Release
|
||||
id: create_release
|
||||
uses: softprops/action-gh-release@v2
|
||||
uses: softprops/action-gh-release@v3
|
||||
with:
|
||||
tag_name: ${{ env.version }}
|
||||
name: Pre-Release ${{ env.version }}
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
name: nix
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
schedule:
|
||||
- cron: '0 0 1 * *'
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
checks:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name != 'schedule'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
|
||||
- name: set up nix
|
||||
uses: cachix/install-nix-action@v31
|
||||
|
||||
- name: check formatting
|
||||
run: |
|
||||
nix fmt
|
||||
if [ -n "$(git status --porcelain)" ]; then
|
||||
git --no-pager diff
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: check flake evaluation
|
||||
run: nix flake check
|
||||
|
||||
update:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name == 'schedule'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
|
||||
- name: set up nix
|
||||
uses: cachix/install-nix-action@v31
|
||||
|
||||
- name: update flake inputs
|
||||
run: nix flake update
|
||||
|
||||
- name: open pull request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
with:
|
||||
commit-message: 'chore(nix): update flake inputs'
|
||||
committer: 'github-actions[bot] <github-actions[bot]@users.noreply.github.com>'
|
||||
author: 'github-actions[bot] <github-actions[bot]@users.noreply.github.com>'
|
||||
branch: 'chore/nix/flake-update'
|
||||
title: 'chore(nix): update flake inputs'
|
||||
reviewers: koibtw
|
||||
assignees: koibtw
|
||||
@@ -0,0 +1,95 @@
|
||||
name: Label PRs by Type of Change
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened, edited, synchronize]
|
||||
|
||||
jobs:
|
||||
label-pr:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
issues: write
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- name: Check PR body for Type of Change
|
||||
uses: actions/github-script@v9
|
||||
with:
|
||||
script: |
|
||||
const prBody = context.payload.pull_request.body || '';
|
||||
const labelsToAdd = [];
|
||||
|
||||
// Check for Type of Change checkboxes
|
||||
if (/\[x\]\s*New feature/i.test(prBody)) {
|
||||
labelsToAdd.push('new feature');
|
||||
}
|
||||
if (/\[x\]\s*Bug fix/i.test(prBody)) {
|
||||
labelsToAdd.push('bug');
|
||||
}
|
||||
if (/\[x\]\s*Documentation update/i.test(prBody)) {
|
||||
labelsToAdd.push('documentation');
|
||||
}
|
||||
if (/\[x\]\s*Hotfix/i.test(prBody)) {
|
||||
labelsToAdd.push('hotfix');
|
||||
}
|
||||
if (/\[x\]\s*UI\/UX improvement/i.test(prBody)) {
|
||||
labelsToAdd.push('UI update');
|
||||
}
|
||||
|
||||
// Check changed files for automatic labeling
|
||||
const { data: files } = await github.rest.pulls.listFiles({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
pull_number: context.payload.pull_request.number
|
||||
});
|
||||
|
||||
const hasRustFiles = files.some(file => file.filename.endsWith('.rs'));
|
||||
const hasShellFiles = files.some(file => file.filename.endsWith('.sh'));
|
||||
const hasMarkdownFiles = files.some(file => file.filename.endsWith('.md'));
|
||||
|
||||
if (hasRustFiles) {
|
||||
labelsToAdd.push('rust');
|
||||
}
|
||||
if (hasShellFiles) {
|
||||
labelsToAdd.push('script');
|
||||
}
|
||||
if (hasMarkdownFiles) {
|
||||
labelsToAdd.push('documentation');
|
||||
}
|
||||
|
||||
// Extract referenced issues and get their labels
|
||||
const issueRegex = /(?:Fixes|Resolves|Closes):?\s*#(\d+)/gi;
|
||||
const issueMatches = [...prBody.matchAll(issueRegex)];
|
||||
const issueNumbers = [...new Set(issueMatches.map(match => parseInt(match[1])))];
|
||||
|
||||
for (const issueNumber of issueNumbers) {
|
||||
try {
|
||||
const issue = await github.rest.issues.get({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: issueNumber
|
||||
});
|
||||
|
||||
// Add labels from referenced issues that contain a colon
|
||||
const issueLabels = issue.data.labels
|
||||
.map(label => typeof label === 'string' ? label : label.name)
|
||||
.filter(name => name.includes(':'));
|
||||
|
||||
labelsToAdd.push(...issueLabels);
|
||||
} catch (error) {
|
||||
console.log(`Could not fetch issue #${issueNumber}: ${error.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove duplicates and add labels
|
||||
const uniqueLabels = [...new Set(labelsToAdd)];
|
||||
|
||||
if (uniqueLabels.length > 0) {
|
||||
await github.rest.issues.addLabels({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: context.payload.pull_request.number,
|
||||
labels: uniqueLabels
|
||||
});
|
||||
}
|
||||
@@ -1,78 +0,0 @@
|
||||
name: LinUtil Preview
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag_name:
|
||||
description: 'Tag name'
|
||||
required: true
|
||||
workflow_run:
|
||||
workflows: ["LinUtil Release"]
|
||||
types:
|
||||
- completed
|
||||
|
||||
jobs:
|
||||
generate_preview:
|
||||
runs-on: ubuntu-latest
|
||||
environment: linutil_env
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- name: Checkout source
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Get tag name ( Workflow Run )
|
||||
id: latest_tag
|
||||
uses: actions/github-script@v7
|
||||
if: github.event_name == 'workflow_run'
|
||||
with:
|
||||
script: |
|
||||
const releases = await github.rest.repos.listReleases({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
per_page: 1
|
||||
});
|
||||
return releases.data[0].tag_name;
|
||||
|
||||
- name: Set tag name ( Workflow Run )
|
||||
if: github.event_name == 'workflow_run'
|
||||
run: echo "tag_name=${{ steps.latest_tag.outputs.result }}" >> $GITHUB_ENV
|
||||
|
||||
- name: Set tag name ( Workflow Dispatch )
|
||||
if: github.event_name == 'workflow_dispatch'
|
||||
run: echo "tag_name=${{ github.event.inputs.tag_name }}" >> $GITHUB_ENV
|
||||
|
||||
- name: Download binary
|
||||
run: |
|
||||
curl -LO "https://github.com/${{ github.repository }}/releases/download/${{ env.tag_name }}/linutil"
|
||||
|
||||
- name: Set env
|
||||
run: |
|
||||
chmod +x linutil
|
||||
mkdir -p build
|
||||
mv linutil build/linutil
|
||||
echo "${{ github.workspace }}/build" >> $GITHUB_PATH
|
||||
echo "branch_name=${{ env.tag_name }}" | tr . - >> $GITHUB_ENV
|
||||
|
||||
- name: Generate preview
|
||||
uses: charmbracelet/vhs-action@v2.1.0
|
||||
with:
|
||||
path: ".github/preview.tape"
|
||||
|
||||
- name: Move preview
|
||||
run: mv preview.gif .github/preview.gif
|
||||
|
||||
- name: Create PR
|
||||
uses: peter-evans/create-pull-request@v7.0.5
|
||||
with:
|
||||
commit-message: Preview for ${{ env.tag_name }}
|
||||
branch: preview-${{ env.branch_name }}
|
||||
title: "Update preview for ${{ env.tag_name }}"
|
||||
labels: |
|
||||
documentation
|
||||
body: |
|
||||
Automated PR to update preview gif for version ${{ env.tag_name }}
|
||||

|
||||
if: success()
|
||||
@@ -21,25 +21,28 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Install Rust
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Cache Cargo registry
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.cargo/registry
|
||||
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
|
||||
restore-keys: ${{ runner.os }}-cargo-registry-
|
||||
|
||||
- name: Cache Cargo index
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ~/.cargo/git
|
||||
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
|
||||
restore-keys: ${{ runner.os }}-cargo-index-
|
||||
|
||||
- name: Run cargo test
|
||||
run: cargo test --no-fail-fast --package linutil_core
|
||||
|
||||
- name: Run cargo clippy
|
||||
run: cargo clippy -- -Dwarnings
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v7
|
||||
|
||||
- name: Run ShellCheck
|
||||
uses: reviewdog/action-shellcheck@v1
|
||||
@@ -30,4 +30,4 @@ jobs:
|
||||
needs: shellcheck
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v7
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v7
|
||||
- run: git fetch origin ${{ github.base_ref }}
|
||||
|
||||
- name: Run spellcheck
|
||||
|
||||
+32
@@ -1,5 +1,37 @@
|
||||
/target
|
||||
/build
|
||||
/result
|
||||
rust/target
|
||||
rust/build
|
||||
/build/linutil
|
||||
|
||||
# Hugo Files
|
||||
docs/public/
|
||||
docs/.hugo_build.lock
|
||||
docs/resources/
|
||||
|
||||
# OS system files
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
desktop.ini
|
||||
|
||||
# IDE and editor files
|
||||
.vscode/
|
||||
.opencode/
|
||||
.idea/
|
||||
*.iml
|
||||
*.iws
|
||||
*.ipr
|
||||
.fleet/
|
||||
.zed/
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
*~
|
||||
@@ -1,39 +0,0 @@
|
||||
# OpenCode Agent Guidelines for LinUtil
|
||||
|
||||
## Build/Test/Lint Commands
|
||||
- **Build**: `cargo build --release`
|
||||
- **Test**: `cargo test`
|
||||
- **Lint**: `cargo clippy -- -Dwarnings`
|
||||
- **Format**: `cargo fmt --all` (fix) or `cargo fmt --all --check` (check)
|
||||
- **Cross-compile**: `cross build --target=aarch64-unknown-linux-musl --release`
|
||||
- **Shell Scripts**: `find core/tabs -name '*.sh' -exec shellcheck {} +`
|
||||
|
||||
## Code Style Guidelines
|
||||
|
||||
### Rust
|
||||
- **Edition**: 2021 (workspace-level)
|
||||
- **Imports**: Use `imports_granularity = "Crate"` per rustfmt.toml
|
||||
- **Module Structure**: Use `mod modulename;` declarations at file top
|
||||
- **Import Order**: std → external crates → local modules
|
||||
- **Error Handling**: Use `Result<T>` for fallible operations
|
||||
- **Naming**: snake_case (functions/vars), PascalCase (types/structs)
|
||||
- **Dependencies**: Check existing Cargo.toml before adding crates
|
||||
- **Workspace**: Multi-crate (tui, core, xtask) - respect boundaries
|
||||
|
||||
### Shell Scripts
|
||||
- **Shell**: bash (#!/bin/bash)
|
||||
- **Linting**: Use shellcheck for all .sh files
|
||||
- **Location**: Organize in `core/tabs/` by category
|
||||
- **Style**: Follow existing script patterns in codebase
|
||||
|
||||
## Project Structure
|
||||
- `tui/`: Terminal UI crate (main binary)
|
||||
- `core/`: Core library and shell scripts
|
||||
- `xtask/`: Build and development tools
|
||||
- Shell utilities in `core/tabs/` categorized by function
|
||||
|
||||
## MCP Integration
|
||||
OpenCode uses MCP servers defined in `.opencode/mcp-config.json` for:
|
||||
- Rust language support via rust-analyzer
|
||||
- Bash scripting support via bash-language-server
|
||||
- Linting via cargo clippy and shellcheck
|
||||
@@ -1,137 +0,0 @@
|
||||
{
|
||||
"mcpServers": {
|
||||
"rust-analyzer": {
|
||||
"command": "rust-analyzer",
|
||||
"args": [],
|
||||
"cwd": "/home/titus/github/linutil",
|
||||
"env": {
|
||||
"RUST_LOG": "info"
|
||||
}
|
||||
},
|
||||
"bash-language-server": {
|
||||
"command": "bash-language-server",
|
||||
"args": ["start"],
|
||||
"cwd": "/home/titus/github/linutil",
|
||||
"env": {}
|
||||
},
|
||||
"cargo-tools": {
|
||||
"command": "cargo",
|
||||
"args": ["--version"],
|
||||
"cwd": "/home/titus/github/linutil",
|
||||
"capabilities": {
|
||||
"build": {
|
||||
"command": "cargo",
|
||||
"args": ["build", "--release"]
|
||||
},
|
||||
"test": {
|
||||
"command": "cargo",
|
||||
"args": ["test"]
|
||||
},
|
||||
"lint": {
|
||||
"command": "cargo",
|
||||
"args": ["clippy", "--", "-Dwarnings"]
|
||||
},
|
||||
"format": {
|
||||
"command": "cargo",
|
||||
"args": ["fmt", "--all"]
|
||||
},
|
||||
"format-check": {
|
||||
"command": "cargo",
|
||||
"args": ["fmt", "--all", "--check"]
|
||||
},
|
||||
"cross-compile-aarch64": {
|
||||
"command": "cross",
|
||||
"args": ["build", "--target=aarch64-unknown-linux-musl", "--release"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"shellcheck": {
|
||||
"command": "shellcheck",
|
||||
"args": ["--version"],
|
||||
"cwd": "/home/titus/github/linutil",
|
||||
"capabilities": {
|
||||
"check-script": {
|
||||
"command": "shellcheck",
|
||||
"args": ["-f", "gcc"]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"workspace": {
|
||||
"type": "rust-cargo",
|
||||
"root": "/home/titus/github/linutil",
|
||||
"members": ["tui", "core", "xtask"],
|
||||
"defaultMembers": ["tui", "core"],
|
||||
"edition": "2021",
|
||||
"profile": {
|
||||
"release": {
|
||||
"opt-level": "z",
|
||||
"lto": true,
|
||||
"codegen-units": 1,
|
||||
"panic": "abort",
|
||||
"strip": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"fileTypes": {
|
||||
"rust": {
|
||||
"extensions": [".rs"],
|
||||
"languageServer": "rust-analyzer",
|
||||
"formatter": "cargo-tools",
|
||||
"linter": "cargo-tools"
|
||||
},
|
||||
"bash": {
|
||||
"extensions": [".sh", ".bash"],
|
||||
"languageServer": "bash-language-server",
|
||||
"linter": "shellcheck"
|
||||
},
|
||||
"toml": {
|
||||
"extensions": [".toml"],
|
||||
"languageServer": "rust-analyzer"
|
||||
}
|
||||
},
|
||||
"tasks": {
|
||||
"build": {
|
||||
"command": "cargo build --release",
|
||||
"description": "Build release binary"
|
||||
},
|
||||
"test": {
|
||||
"command": "cargo test",
|
||||
"description": "Run all tests"
|
||||
},
|
||||
"lint": {
|
||||
"command": "cargo clippy -- -Dwarnings",
|
||||
"description": "Run clippy linter"
|
||||
},
|
||||
"format": {
|
||||
"command": "cargo fmt --all",
|
||||
"description": "Format all Rust code"
|
||||
},
|
||||
"format-check": {
|
||||
"command": "cargo fmt --all --check",
|
||||
"description": "Check if code is formatted"
|
||||
},
|
||||
"check-scripts": {
|
||||
"command": "find core/tabs -name '*.sh' -exec shellcheck {} +",
|
||||
"description": "Check all shell scripts with shellcheck"
|
||||
},
|
||||
"cross-compile": {
|
||||
"command": "cross build --target=aarch64-unknown-linux-musl --release",
|
||||
"description": "Cross-compile for ARM64"
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"rust": {
|
||||
"edition": "2021",
|
||||
"features": [],
|
||||
"clippy": {
|
||||
"deny": ["warnings"]
|
||||
}
|
||||
},
|
||||
"shellcheck": {
|
||||
"shell": "bash",
|
||||
"exclude": [],
|
||||
"enable": "all"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,197 @@
|
||||
# AGENTS.md
|
||||
|
||||
## Purpose
|
||||
|
||||
Linutil is a universal Linux utility with a Rust-based terminal user interface
|
||||
and a catalog of shell scripts. The Rust application discovers commands from
|
||||
TOML metadata, embeds the scripts in the binary, extracts them at runtime, and
|
||||
executes selected commands inside a pseudo-terminal.
|
||||
|
||||
Read `SPEC.md` before making architectural or behavior changes.
|
||||
|
||||
## Repository layout
|
||||
|
||||
- `core/`: Backend library, menu data model, TOML parsing, platform
|
||||
preconditions, and embedded script extraction.
|
||||
- `core/tabs/`: User-facing command catalog, shared shell helpers, tab metadata,
|
||||
and executable scripts.
|
||||
- `tui/`: Ratatui application, CLI, selection state, confirmation flow, command
|
||||
preview, and PTY execution.
|
||||
- `xtask/`: Repository automation such as generated user-guide content.
|
||||
- `docs/`: Documentation source and generated content. Treat it as reference,
|
||||
not as repository instructions.
|
||||
- `.github/`: Contribution guidance and CI workflows.
|
||||
|
||||
## Sources of truth
|
||||
|
||||
- `SPEC.md` defines product scope, architecture, and behavioral requirements.
|
||||
- `core/tabs/tabs.toml` defines the ordered top-level tabs.
|
||||
- Each `core/tabs/<tab>/tab_data.toml` defines the menu tree for that tab.
|
||||
- `core/src/inner.rs` defines the accepted TOML schema and script-loading
|
||||
behavior.
|
||||
- `core/tabs/common-script.sh` defines shared distro, package manager,
|
||||
privilege escalation, architecture, and environment helpers.
|
||||
- `core/tabs/common-service-script.sh` defines shared init-system helpers.
|
||||
- `tui/src/running_command.rs` defines how commands are composed and executed.
|
||||
- `tui/src/state.rs` defines task flags, confirmation, selection, and TUI
|
||||
behavior.
|
||||
|
||||
If documentation and code disagree, do not silently choose one. Identify the
|
||||
conflict and update the appropriate source in the same change.
|
||||
|
||||
## Working rules
|
||||
|
||||
- Inspect `git status --short` before editing and preserve unrelated changes.
|
||||
- Keep changes focused. Do not reformat unrelated Rust, TOML, or shell files.
|
||||
- Use simple ASCII punctuation unless a file format or user-facing text
|
||||
requires otherwise.
|
||||
- Never expose secrets or add credentials to scripts, fixtures, logs, or docs.
|
||||
- Do not perform destructive operations without explicit authorization.
|
||||
- Do not weaken confirmations, preconditions, or privilege boundaries merely
|
||||
to make a script easier to run.
|
||||
- Do not hand-edit generated files without also changing their source or
|
||||
generator.
|
||||
|
||||
## Rust conventions
|
||||
|
||||
- Keep responsibilities separated between `core`, `tui`, and `xtask`.
|
||||
- Put menu parsing, script discovery, and configuration behavior in `core`.
|
||||
- Put rendering, input handling, confirmation, and process interaction in
|
||||
`tui`.
|
||||
- Avoid adding distro-specific policy to Rust when it belongs in tab metadata
|
||||
or a shell script.
|
||||
- Return or propagate useful errors when practical. Avoid new `unwrap`,
|
||||
`expect`, or `panic` calls on user-controlled input.
|
||||
- Add or update tests for parser, filtering, configuration, and command-model
|
||||
changes.
|
||||
- Format Rust with `cargo fmt`.
|
||||
- Treat Clippy warnings as errors.
|
||||
|
||||
## Shell script conventions
|
||||
|
||||
- Prefer POSIX shell with `#!/bin/sh -e`.
|
||||
- Use Bash only when the script requires Bash features, and declare
|
||||
`#!/bin/bash` explicitly.
|
||||
- A script is executed from its own parent directory after the embedded
|
||||
`core/tabs/` tree is extracted. Keep relative imports valid from that
|
||||
directory.
|
||||
- Source shared helpers with the correct relative path:
|
||||
|
||||
```sh
|
||||
. ../common-script.sh
|
||||
```
|
||||
|
||||
Adjust the number of `..` components for nested directories.
|
||||
- Use `common-script.sh` helpers instead of duplicating package manager,
|
||||
architecture, escalation, command detection, or distro detection logic.
|
||||
- Source `common-service-script.sh` when managing services across init systems.
|
||||
- Call `checkEnv` before relying on values such as `PACKAGER`,
|
||||
`ESCALATION_TOOL`, `ARCH`, or `DTYPE`.
|
||||
- Quote variable expansions unless intentional word splitting is required.
|
||||
- Use `printf` rather than `echo` for portable formatted output.
|
||||
- Use `command_exists` for executable checks.
|
||||
- Use `"$ESCALATION_TOOL"` only for operations that require elevated
|
||||
privileges. Do not run the whole script as root by default.
|
||||
- Make installation and configuration steps reasonably idempotent. Detect an
|
||||
existing installation or state before changing it.
|
||||
- Fail with a clear message when a required distro, package manager,
|
||||
architecture, display server, init system, or command is unsupported.
|
||||
- Do not download and execute unverified remote code when a package,
|
||||
checksummed artifact, or pinned source is available.
|
||||
- Clean up temporary files created by the script.
|
||||
- Preserve interactive behavior because scripts run in a PTY.
|
||||
|
||||
## Adding or changing a utility
|
||||
|
||||
1. Place the script under the most appropriate `core/tabs/<tab>/` directory.
|
||||
2. Reuse shared helpers and support all practical package managers already
|
||||
handled by `common-script.sh`.
|
||||
3. Add or update the matching entry in that tab's `tab_data.toml`.
|
||||
4. Provide a clear `name`, useful `description`, one of `script`, `command`, or
|
||||
`entries`, and accurate `task_list` flags.
|
||||
5. Add `preconditions` when the entry only works on specific distros,
|
||||
environments, filesystems, commands, display servers, or architectures.
|
||||
6. Set `multi_select = false` for interactive, destructive, rebooting,
|
||||
long-running, or state-dependent operations that should not be queued.
|
||||
7. Run `cargo xtask docgen` when menu entries or descriptions change.
|
||||
8. Validate the script and the Rust catalog loader.
|
||||
|
||||
The supported task flags are:
|
||||
|
||||
- `D`: disk modification
|
||||
- `FI`: Flatpak installation
|
||||
- `FM`: file modification
|
||||
- `I`: privileged installation
|
||||
- `K`: kernel modification
|
||||
- `MP`: package manager action
|
||||
- `RP`: package removal
|
||||
- `SI`: full system installation
|
||||
- `SS`: systemd or service action
|
||||
- Prefixing a flag with `P` indicates privileged work.
|
||||
|
||||
Do not invent new task flags without updating the TUI guide and associated
|
||||
documentation.
|
||||
|
||||
## TOML catalog rules
|
||||
|
||||
- Script paths are relative to the tab directory containing `tab_data.toml`.
|
||||
- Every leaf entry must define exactly one executable form: `script` or
|
||||
`command`.
|
||||
- Every directory entry uses `entries`.
|
||||
- Prefer scripts over long inline `command` values.
|
||||
- Keep names stable when possible because config-file `auto_execute` resolves
|
||||
commands by display name.
|
||||
- Use preconditions to hide unsupported entries rather than letting users
|
||||
discover incompatibility after execution.
|
||||
- Parent `multi_select = false` applies to all descendants.
|
||||
- Keep tab data consistently ordered. Use `sort-tomlfiles.sh` when the change
|
||||
requires catalog sorting.
|
||||
|
||||
## Validation
|
||||
|
||||
Run the smallest relevant checks, then broaden them for cross-cutting changes.
|
||||
|
||||
For Rust changes:
|
||||
|
||||
```bash
|
||||
cargo fmt --all --check
|
||||
cargo test --no-fail-fast --package linutil_core
|
||||
cargo clippy -- -Dwarnings
|
||||
```
|
||||
|
||||
For shell changes:
|
||||
|
||||
```bash
|
||||
shellcheck path/to/changed-script.sh
|
||||
checkbashisms path/to/changed-script.sh
|
||||
```
|
||||
|
||||
Use `checkbashisms` only for scripts intended to run under `/bin/sh`. If local
|
||||
tools are unavailable, state which checks were skipped.
|
||||
|
||||
For catalog or documentation changes:
|
||||
|
||||
```bash
|
||||
cargo test --no-fail-fast --package linutil_core
|
||||
cargo xtask docgen
|
||||
git diff --check
|
||||
```
|
||||
|
||||
For TUI behavior, also run:
|
||||
|
||||
```bash
|
||||
cargo run --package linutil_tui
|
||||
```
|
||||
|
||||
Interactive validation must not execute destructive utilities merely to test
|
||||
navigation. Use preview, descriptions, harmless entries, or focused tests.
|
||||
|
||||
## Completion criteria
|
||||
|
||||
- The change matches `SPEC.md`.
|
||||
- Relevant tests and static checks pass.
|
||||
- New scripts are reachable through valid tab metadata.
|
||||
- Unsupported environments are filtered or fail clearly.
|
||||
- User-visible behavior and generated documentation are updated together.
|
||||
- The final report lists changed files, checks run, skipped checks, and any
|
||||
remaining platform-specific risk.
|
||||
Generated
+1908
-339
@@ -3,14 +3,38 @@
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "1.1.3"
|
||||
name = "adler2"
|
||||
version = "2.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
|
||||
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "1.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "aligned"
|
||||
version = "0.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685"
|
||||
dependencies = [
|
||||
"as-slice",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "aligned-vec"
|
||||
version = "0.6.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b"
|
||||
dependencies = [
|
||||
"equator",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "allocator-api2"
|
||||
version = "0.2.21"
|
||||
@@ -19,9 +43,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
|
||||
|
||||
[[package]]
|
||||
name = "anstream"
|
||||
version = "0.6.18"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b"
|
||||
checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
|
||||
dependencies = [
|
||||
"anstyle",
|
||||
"anstyle-parse",
|
||||
@@ -34,43 +58,70 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "anstyle"
|
||||
version = "1.0.10"
|
||||
version = "1.0.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9"
|
||||
checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
|
||||
|
||||
[[package]]
|
||||
name = "anstyle-parse"
|
||||
version = "0.2.6"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9"
|
||||
checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
|
||||
dependencies = [
|
||||
"utf8parse",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anstyle-query"
|
||||
version = "1.1.2"
|
||||
version = "1.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c"
|
||||
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
|
||||
dependencies = [
|
||||
"windows-sys 0.59.0",
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anstyle-wincon"
|
||||
version = "3.0.6"
|
||||
version = "3.0.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125"
|
||||
checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
|
||||
dependencies = [
|
||||
"anstyle",
|
||||
"windows-sys 0.59.0",
|
||||
"once_cell_polyfill",
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.95"
|
||||
version = "1.0.100"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"
|
||||
checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
|
||||
|
||||
[[package]]
|
||||
name = "approx"
|
||||
version = "0.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "arbitrary"
|
||||
version = "1.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
|
||||
|
||||
[[package]]
|
||||
name = "arg_enum_proc_macro"
|
||||
version = "0.3.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "arrayvec"
|
||||
@@ -79,10 +130,78 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.4.0"
|
||||
name = "as-slice"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
|
||||
checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516"
|
||||
dependencies = [
|
||||
"stable_deref_trait",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
|
||||
|
||||
[[package]]
|
||||
name = "av-scenechange"
|
||||
version = "0.14.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394"
|
||||
dependencies = [
|
||||
"aligned",
|
||||
"anyhow",
|
||||
"arg_enum_proc_macro",
|
||||
"arrayvec",
|
||||
"log",
|
||||
"num-rational",
|
||||
"num-traits",
|
||||
"pastey",
|
||||
"rayon",
|
||||
"thiserror 2.0.18",
|
||||
"v_frame",
|
||||
"y4m",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "av1-grain"
|
||||
version = "0.2.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arrayvec",
|
||||
"log",
|
||||
"nom",
|
||||
"num-rational",
|
||||
"v_frame",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "avif-serialize"
|
||||
version = "0.8.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "47c8fbc0f831f4519fe8b810b6a7a91410ec83031b8233f730a0480029f6a23f"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "base64-simd"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195"
|
||||
dependencies = [
|
||||
"outref",
|
||||
"vsimd",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bit_field"
|
||||
version = "0.10.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
@@ -92,15 +211,74 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.7.0"
|
||||
version = "2.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be"
|
||||
checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.5.0"
|
||||
name = "bitstream-io"
|
||||
version = "4.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
||||
checksum = "60d4bd9d1db2c6bdf285e223a7fa369d5ce98ec767dec949c6ca62863ce61757"
|
||||
dependencies = [
|
||||
"core2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bitvec"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
|
||||
dependencies = [
|
||||
"funty",
|
||||
"radium",
|
||||
"tap",
|
||||
"wyz",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "built"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64"
|
||||
|
||||
[[package]]
|
||||
name = "bumpalo"
|
||||
version = "3.19.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
|
||||
|
||||
[[package]]
|
||||
name = "by_address"
|
||||
version = "1.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06"
|
||||
|
||||
[[package]]
|
||||
name = "bytemuck"
|
||||
version = "1.24.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4"
|
||||
dependencies = [
|
||||
"bytemuck_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bytemuck_derive"
|
||||
version = "1.10.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "byteorder-lite"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
|
||||
|
||||
[[package]]
|
||||
name = "cassowary"
|
||||
@@ -110,27 +288,36 @@ checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
|
||||
|
||||
[[package]]
|
||||
name = "castaway"
|
||||
version = "0.2.3"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5"
|
||||
checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a"
|
||||
dependencies = [
|
||||
"rustversion",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.2.7"
|
||||
version = "1.2.54"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7"
|
||||
checksum = "6354c81bbfd62d9cfa9cb3c773c2b7b2a3a482d569de977fd0e961f6e7c00583"
|
||||
dependencies = [
|
||||
"find-msvc-tools",
|
||||
"jobserver",
|
||||
"libc",
|
||||
"shlex",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
||||
|
||||
[[package]]
|
||||
name = "cfg_aliases"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
|
||||
|
||||
[[package]]
|
||||
name = "cfg_aliases"
|
||||
@@ -139,10 +326,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.5.26"
|
||||
name = "chacha20"
|
||||
version = "0.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783"
|
||||
checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cpufeatures",
|
||||
"rand_core 0.10.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51"
|
||||
dependencies = [
|
||||
"clap_builder",
|
||||
"clap_derive",
|
||||
@@ -150,9 +348,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "clap_builder"
|
||||
version = "4.5.26"
|
||||
version = "4.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121"
|
||||
checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
@@ -162,9 +360,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "clap_derive"
|
||||
version = "4.5.24"
|
||||
version = "4.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c"
|
||||
checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9"
|
||||
dependencies = [
|
||||
"heck",
|
||||
"proc-macro2",
|
||||
@@ -174,15 +372,21 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "clap_lex"
|
||||
version = "0.7.4"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
|
||||
checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831"
|
||||
|
||||
[[package]]
|
||||
name = "color_quant"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
|
||||
|
||||
[[package]]
|
||||
name = "colorchoice"
|
||||
version = "1.0.3"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
|
||||
checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
|
||||
|
||||
[[package]]
|
||||
name = "compact_str"
|
||||
@@ -199,16 +403,93 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossterm"
|
||||
version = "0.28.1"
|
||||
name = "compact_str"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6"
|
||||
checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a"
|
||||
dependencies = [
|
||||
"bitflags 2.7.0",
|
||||
"castaway",
|
||||
"cfg-if",
|
||||
"itoa",
|
||||
"rustversion",
|
||||
"ryu",
|
||||
"static_assertions",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "convert_case"
|
||||
version = "0.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9"
|
||||
dependencies = [
|
||||
"unicode-segmentation",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "core2"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cpufeatures"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crc32fast"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-deque"
|
||||
version = "0.8.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
|
||||
dependencies = [
|
||||
"crossbeam-epoch",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-epoch"
|
||||
version = "0.9.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
|
||||
dependencies = [
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-utils"
|
||||
version = "0.8.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
|
||||
|
||||
[[package]]
|
||||
name = "crossterm"
|
||||
version = "0.29.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b"
|
||||
dependencies = [
|
||||
"bitflags 2.13.0",
|
||||
"crossterm_winapi",
|
||||
"derive_more",
|
||||
"document-features",
|
||||
"mio",
|
||||
"parking_lot",
|
||||
"rustix",
|
||||
"rustix 1.1.3",
|
||||
"signal-hook",
|
||||
"signal-hook-mio",
|
||||
"winapi",
|
||||
@@ -224,10 +505,16 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "darling"
|
||||
version = "0.20.10"
|
||||
name = "crunchy"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989"
|
||||
checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
|
||||
|
||||
[[package]]
|
||||
name = "darling"
|
||||
version = "0.23.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"darling_macro",
|
||||
@@ -235,11 +522,10 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "darling_core"
|
||||
version = "0.20.10"
|
||||
version = "0.23.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5"
|
||||
checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0"
|
||||
dependencies = [
|
||||
"fnv",
|
||||
"ident_case",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -249,9 +535,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "darling_macro"
|
||||
version = "0.20.10"
|
||||
version = "0.23.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
|
||||
checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
|
||||
dependencies = [
|
||||
"darling_core",
|
||||
"quote",
|
||||
@@ -260,11 +546,39 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "deranged"
|
||||
version = "0.3.11"
|
||||
version = "0.5.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
|
||||
checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
|
||||
|
||||
[[package]]
|
||||
name = "derive_more"
|
||||
version = "2.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134"
|
||||
dependencies = [
|
||||
"powerfmt",
|
||||
"derive_more-impl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "derive_more-impl"
|
||||
version = "2.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb"
|
||||
dependencies = [
|
||||
"convert_case",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"rustc_version",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "document-features"
|
||||
version = "0.2.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"
|
||||
dependencies = [
|
||||
"litrs",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -275,66 +589,152 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
|
||||
|
||||
[[package]]
|
||||
name = "ego-tree"
|
||||
version = "0.9.0"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7c6ba7d4eec39eaa9ab24d44a0e73a7949a1095a8b3f3abb11eddf27dbb56a53"
|
||||
checksum = "b04dc5a38e4f151a79d9f2451ae6037fb6eaf5cba34771f44781f80e508498e3"
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.13.0"
|
||||
version = "1.15.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
|
||||
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
|
||||
|
||||
[[package]]
|
||||
name = "env_home"
|
||||
version = "0.1.0"
|
||||
name = "equator"
|
||||
version = "0.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe"
|
||||
checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc"
|
||||
dependencies = [
|
||||
"equator-macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "equator-macro"
|
||||
version = "0.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "equivalent"
|
||||
version = "1.0.1"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
||||
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
||||
|
||||
[[package]]
|
||||
name = "errno"
|
||||
version = "0.3.10"
|
||||
version = "0.3.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
|
||||
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.59.0",
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "exr"
|
||||
version = "1.74.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be"
|
||||
dependencies = [
|
||||
"bit_field",
|
||||
"half",
|
||||
"lebe",
|
||||
"miniz_oxide",
|
||||
"rayon-core",
|
||||
"smallvec",
|
||||
"zune-inflate",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fast-srgb8"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1"
|
||||
|
||||
[[package]]
|
||||
name = "fax"
|
||||
version = "0.2.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab"
|
||||
dependencies = [
|
||||
"fax_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fax_derive"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fdeflate"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
|
||||
dependencies = [
|
||||
"simd-adler32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "filedescriptor"
|
||||
version = "0.8.2"
|
||||
version = "0.8.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7199d965852c3bac31f779ef99cbb4537f80e952e2d6aa0ffeb30cce00f4f46e"
|
||||
checksum = "e40758ed24c9b2eeb76c35fb0aebc66c626084edd827e07e1552279814c6682d"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"thiserror",
|
||||
"thiserror 1.0.69",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fnv"
|
||||
version = "1.0.7"
|
||||
name = "find-msvc-tools"
|
||||
version = "0.1.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
||||
checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db"
|
||||
|
||||
[[package]]
|
||||
name = "flate2"
|
||||
version = "1.1.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369"
|
||||
dependencies = [
|
||||
"crc32fast",
|
||||
"miniz_oxide",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "foldhash"
|
||||
version = "0.1.4"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f"
|
||||
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
|
||||
|
||||
[[package]]
|
||||
name = "foldhash"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
|
||||
|
||||
[[package]]
|
||||
name = "funty"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.2.15"
|
||||
version = "0.2.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
|
||||
checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
@@ -342,14 +742,83 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.15.2"
|
||||
name = "getrandom"
|
||||
version = "0.3.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
|
||||
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"r-efi 5.3.0",
|
||||
"wasip2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"r-efi 6.0.0",
|
||||
"rand_core 0.10.1",
|
||||
"wasip2",
|
||||
"wasip3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gif"
|
||||
version = "0.14.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e"
|
||||
dependencies = [
|
||||
"color_quant",
|
||||
"weezl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "half"
|
||||
version = "2.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"crunchy",
|
||||
"zerocopy",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.15.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
|
||||
dependencies = [
|
||||
"allocator-api2",
|
||||
"equivalent",
|
||||
"foldhash",
|
||||
"foldhash 0.1.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.16.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
|
||||
dependencies = [
|
||||
"allocator-api2",
|
||||
"equivalent",
|
||||
"foldhash 0.2.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.17.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
|
||||
dependencies = [
|
||||
"allocator-api2",
|
||||
"equivalent",
|
||||
"foldhash 0.2.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -358,12 +827,68 @@ version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
||||
|
||||
[[package]]
|
||||
name = "icy_sixel"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "85518b9086bf01117761b90e7691c0ef3236fa8adfb1fb44dd248fe5f87215d5"
|
||||
dependencies = [
|
||||
"quantette",
|
||||
"thiserror 2.0.18",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "id-arena"
|
||||
version = "2.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
|
||||
|
||||
[[package]]
|
||||
name = "ident_case"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
|
||||
|
||||
[[package]]
|
||||
name = "image"
|
||||
version = "0.25.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104"
|
||||
dependencies = [
|
||||
"bytemuck",
|
||||
"byteorder-lite",
|
||||
"color_quant",
|
||||
"exr",
|
||||
"gif",
|
||||
"image-webp",
|
||||
"moxcms",
|
||||
"num-traits",
|
||||
"png",
|
||||
"qoi",
|
||||
"ravif",
|
||||
"rayon",
|
||||
"rgb",
|
||||
"tiff",
|
||||
"zune-core",
|
||||
"zune-jpeg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "image-webp"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3"
|
||||
dependencies = [
|
||||
"byteorder-lite",
|
||||
"quick-error",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "imgref"
|
||||
version = "1.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8"
|
||||
|
||||
[[package]]
|
||||
name = "include_dir"
|
||||
version = "0.7.4"
|
||||
@@ -385,25 +910,30 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "2.7.0"
|
||||
version = "2.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f"
|
||||
checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
|
||||
dependencies = [
|
||||
"equivalent",
|
||||
"hashbrown",
|
||||
"hashbrown 0.16.1",
|
||||
"serde",
|
||||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "indoc"
|
||||
version = "2.0.5"
|
||||
version = "2.0.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5"
|
||||
checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
|
||||
dependencies = [
|
||||
"rustversion",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "instability"
|
||||
version = "0.3.6"
|
||||
version = "0.3.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "894813a444908c0c8c0e221b041771d107c4a21de1d317dc49bcc66e3c9e5b3f"
|
||||
checksum = "357b7205c6cd18dd2c86ed312d1e70add149aea98e7ef72b9fdf0270e555c11d"
|
||||
dependencies = [
|
||||
"darling",
|
||||
"indoc",
|
||||
@@ -413,19 +943,21 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ioctl-rs"
|
||||
version = "0.1.6"
|
||||
name = "interpolate_name"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f7970510895cee30b3e9128319f2cefd4bde883a39f38baa279567ba3a7eb97d"
|
||||
checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "is_terminal_polyfill"
|
||||
version = "1.70.1"
|
||||
version = "1.70.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
|
||||
checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
|
||||
|
||||
[[package]]
|
||||
name = "itertools"
|
||||
@@ -437,10 +969,40 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.14"
|
||||
name = "itertools"
|
||||
version = "0.14.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
|
||||
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
|
||||
dependencies = [
|
||||
"either",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
|
||||
|
||||
[[package]]
|
||||
name = "jobserver"
|
||||
version = "0.1.34"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
|
||||
dependencies = [
|
||||
"getrandom 0.3.4",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "kasuari"
|
||||
version = "0.4.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8fe90c1150662e858c7d5f945089b7517b0a80d8bf7ba4b1b5ffc984e7230a5b"
|
||||
dependencies = [
|
||||
"hashbrown 0.16.1",
|
||||
"portable-atomic",
|
||||
"thiserror 2.0.18",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
@@ -449,14 +1011,51 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.169"
|
||||
name = "leb128fmt"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a"
|
||||
checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
|
||||
|
||||
[[package]]
|
||||
name = "lebe"
|
||||
version = "0.5.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.186"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
|
||||
|
||||
[[package]]
|
||||
name = "libfuzzer-sys"
|
||||
version = "0.4.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5037190e1f70cbeef565bd267599242926f724d3b8a9f510fd7e0b540cfa4404"
|
||||
dependencies = [
|
||||
"arbitrary",
|
||||
"cc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libm"
|
||||
version = "0.2.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
|
||||
|
||||
[[package]]
|
||||
name = "line-clipping"
|
||||
version = "0.3.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5f4de44e98ddbf09375cbf4d17714d18f39195f4f4894e8524501726fd9a8a4a"
|
||||
dependencies = [
|
||||
"bitflags 2.13.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "linutil_core"
|
||||
version = "25.9.9"
|
||||
version = "26.5.21"
|
||||
dependencies = [
|
||||
"ego-tree",
|
||||
"include_dir",
|
||||
@@ -468,15 +1067,17 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "linutil_tui"
|
||||
version = "25.9.9"
|
||||
version = "26.5.21"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"image",
|
||||
"linutil_core",
|
||||
"nix 0.29.0",
|
||||
"nix 0.31.3",
|
||||
"oneshot",
|
||||
"portable-pty",
|
||||
"rand",
|
||||
"ratatui",
|
||||
"rand 0.10.1",
|
||||
"ratatui 0.30.2",
|
||||
"ratatui-image",
|
||||
"time",
|
||||
"tree-sitter-bash",
|
||||
"tree-sitter-highlight",
|
||||
@@ -492,20 +1093,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
version = "0.4.12"
|
||||
name = "linux-raw-sys"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
|
||||
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
|
||||
|
||||
[[package]]
|
||||
name = "litrs"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
version = "0.4.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"scopeguard",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.22"
|
||||
version = "0.4.29"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
|
||||
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
|
||||
|
||||
[[package]]
|
||||
name = "loop9"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062"
|
||||
dependencies = [
|
||||
"imgref",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lru"
|
||||
@@ -513,67 +1134,167 @@ version = "0.12.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38"
|
||||
dependencies = [
|
||||
"hashbrown",
|
||||
"hashbrown 0.15.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lru"
|
||||
version = "0.18.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a860605968fce16869fd239cf4237a82f3ac470723415db603b0e8b6c8d4fb9"
|
||||
dependencies = [
|
||||
"hashbrown 0.17.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "maybe-rayon"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"rayon",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.7.4"
|
||||
version = "2.7.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
||||
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
|
||||
|
||||
[[package]]
|
||||
name = "memoffset"
|
||||
version = "0.6.5"
|
||||
name = "miniz_oxide"
|
||||
version = "0.8.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
|
||||
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"adler2",
|
||||
"simd-adler32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mio"
|
||||
version = "1.0.3"
|
||||
version = "1.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
|
||||
checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"log",
|
||||
"wasi",
|
||||
"windows-sys 0.52.0",
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "moxcms"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
"pxfm",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "new_debug_unreachable"
|
||||
version = "1.0.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
|
||||
|
||||
[[package]]
|
||||
name = "nix"
|
||||
version = "0.28.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4"
|
||||
dependencies = [
|
||||
"bitflags 2.13.0",
|
||||
"cfg-if",
|
||||
"cfg_aliases 0.1.1",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nix"
|
||||
version = "0.25.1"
|
||||
version = "0.31.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4"
|
||||
checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"bitflags 1.3.2",
|
||||
"bitflags 2.13.0",
|
||||
"cfg-if",
|
||||
"cfg_aliases 0.2.1",
|
||||
"libc",
|
||||
"memoffset",
|
||||
"pin-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nix"
|
||||
version = "0.29.0"
|
||||
name = "nom"
|
||||
version = "8.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
|
||||
checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405"
|
||||
dependencies = [
|
||||
"bitflags 2.7.0",
|
||||
"cfg-if",
|
||||
"cfg_aliases",
|
||||
"libc",
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "noop_proc_macro"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8"
|
||||
|
||||
[[package]]
|
||||
name = "num-bigint"
|
||||
version = "0.4.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
|
||||
dependencies = [
|
||||
"num-integer",
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-conv"
|
||||
version = "0.1.0"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
|
||||
checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"
|
||||
|
||||
[[package]]
|
||||
name = "num-derive"
|
||||
version = "0.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-integer"
|
||||
version = "0.1.46"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-rational"
|
||||
version = "0.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
|
||||
dependencies = [
|
||||
"num-bigint",
|
||||
"num-integer",
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-traits"
|
||||
version = "0.2.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"libm",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num_threads"
|
||||
@@ -585,16 +1306,68 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "oneshot"
|
||||
version = "0.1.8"
|
||||
name = "once_cell"
|
||||
version = "1.21.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e296cf87e61c9cfc1a61c3c63a0f7f286ed4554e0e22be84e8a38e1d264a2a29"
|
||||
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
|
||||
|
||||
[[package]]
|
||||
name = "once_cell_polyfill"
|
||||
version = "1.70.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
|
||||
|
||||
[[package]]
|
||||
name = "oneshot"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cfe21416a02c693fb9f980befcb230ecc70b0b3d1cc4abf88b9675c4c1457f0c"
|
||||
|
||||
[[package]]
|
||||
name = "ordered-float"
|
||||
version = "5.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "outref"
|
||||
version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e"
|
||||
|
||||
[[package]]
|
||||
name = "palette"
|
||||
version = "0.7.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4cbf71184cc5ecc2e4e1baccdb21026c20e5fc3dcf63028a086131b3ab00b6e6"
|
||||
dependencies = [
|
||||
"approx",
|
||||
"bytemuck",
|
||||
"fast-srgb8",
|
||||
"libm",
|
||||
"palette_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "palette_derive"
|
||||
version = "0.7.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f5030daf005bface118c096f510ffb781fc28f9ab6a32ab224d8631be6851d30"
|
||||
dependencies = [
|
||||
"by_address",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot"
|
||||
version = "0.12.3"
|
||||
version = "0.12.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
|
||||
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
|
||||
dependencies = [
|
||||
"lock_api",
|
||||
"parking_lot_core",
|
||||
@@ -602,15 +1375,15 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "parking_lot_core"
|
||||
version = "0.9.10"
|
||||
version = "0.9.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
|
||||
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"redox_syscall",
|
||||
"smallvec",
|
||||
"windows-targets",
|
||||
"windows-link",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -620,16 +1393,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
|
||||
|
||||
[[package]]
|
||||
name = "pin-utils"
|
||||
version = "0.1.0"
|
||||
name = "pastey"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
||||
checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec"
|
||||
|
||||
[[package]]
|
||||
name = "png"
|
||||
version = "0.18.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0"
|
||||
dependencies = [
|
||||
"bitflags 2.13.0",
|
||||
"crc32fast",
|
||||
"fdeflate",
|
||||
"flate2",
|
||||
"miniz_oxide",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "portable-atomic"
|
||||
version = "1.13.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
|
||||
|
||||
[[package]]
|
||||
name = "portable-pty"
|
||||
version = "0.8.1"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "806ee80c2a03dbe1a9fb9534f8d19e4c0546b790cde8fd1fea9d6390644cb0be"
|
||||
checksum = "b4a596a2b3d2752d94f51fac2d4a96737b8705dddd311a32b9af47211f08671e"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bitflags 1.3.2",
|
||||
@@ -638,8 +1430,8 @@ dependencies = [
|
||||
"lazy_static",
|
||||
"libc",
|
||||
"log",
|
||||
"nix 0.25.1",
|
||||
"serial",
|
||||
"nix 0.28.0",
|
||||
"serial2",
|
||||
"shared_library",
|
||||
"shell-words",
|
||||
"winapi",
|
||||
@@ -654,40 +1446,152 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
|
||||
|
||||
[[package]]
|
||||
name = "ppv-lite86"
|
||||
version = "0.2.20"
|
||||
version = "0.2.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
|
||||
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
|
||||
dependencies = [
|
||||
"zerocopy",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.92"
|
||||
name = "prettyplease"
|
||||
version = "0.2.37"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0"
|
||||
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.106"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.38"
|
||||
name = "profiling"
|
||||
version = "1.0.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc"
|
||||
checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773"
|
||||
dependencies = [
|
||||
"profiling-procmacros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "profiling-procmacros"
|
||||
version = "1.0.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b"
|
||||
dependencies = [
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pxfm"
|
||||
version = "0.1.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "qoi"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
|
||||
dependencies = [
|
||||
"bytemuck",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quantette"
|
||||
version = "0.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c98fecda8b16396ff9adac67644a523dd1778c42b58606a29df5c31ca925d174"
|
||||
dependencies = [
|
||||
"bitvec",
|
||||
"bytemuck",
|
||||
"image",
|
||||
"libm",
|
||||
"num-traits",
|
||||
"ordered-float",
|
||||
"palette",
|
||||
"rand 0.9.4",
|
||||
"rand_xoshiro",
|
||||
"rayon",
|
||||
"ref-cast",
|
||||
"wide",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quick-error"
|
||||
version = "2.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.45"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.8.5"
|
||||
name = "r-efi"
|
||||
version = "5.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
||||
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
|
||||
|
||||
[[package]]
|
||||
name = "r-efi"
|
||||
version = "6.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
|
||||
|
||||
[[package]]
|
||||
name = "radium"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.8.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"rand_chacha",
|
||||
"rand_core",
|
||||
"rand_chacha 0.3.1",
|
||||
"rand_core 0.6.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.9.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"
|
||||
dependencies = [
|
||||
"rand_chacha 0.9.0",
|
||||
"rand_core 0.9.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207"
|
||||
dependencies = [
|
||||
"chacha20",
|
||||
"getrandom 0.4.2",
|
||||
"rand_core 0.10.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -697,7 +1601,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
||||
dependencies = [
|
||||
"ppv-lite86",
|
||||
"rand_core",
|
||||
"rand_core 0.6.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_chacha"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
|
||||
dependencies = [
|
||||
"ppv-lite86",
|
||||
"rand_core 0.9.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -706,7 +1620,31 @@ version = "0.6.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
"getrandom 0.2.17",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.9.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
|
||||
dependencies = [
|
||||
"getrandom 0.3.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"
|
||||
|
||||
[[package]]
|
||||
name = "rand_xoshiro"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f703f4665700daf5512dcca5f43afa6af89f09db47fb56be587f80636bda2d41"
|
||||
dependencies = [
|
||||
"rand_core 0.9.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -715,35 +1653,207 @@ version = "0.29.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b"
|
||||
dependencies = [
|
||||
"bitflags 2.7.0",
|
||||
"bitflags 2.13.0",
|
||||
"cassowary",
|
||||
"compact_str",
|
||||
"crossterm",
|
||||
"compact_str 0.8.1",
|
||||
"indoc",
|
||||
"instability",
|
||||
"itertools",
|
||||
"lru",
|
||||
"itertools 0.13.0",
|
||||
"lru 0.12.5",
|
||||
"paste",
|
||||
"strum",
|
||||
"strum 0.26.3",
|
||||
"unicode-segmentation",
|
||||
"unicode-truncate",
|
||||
"unicode-truncate 1.1.0",
|
||||
"unicode-width 0.2.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.5.8"
|
||||
name = "ratatui"
|
||||
version = "0.30.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834"
|
||||
checksum = "3274ba0a2c5e1bcad2a2005d20f4dc59dad26b2eb0940fb094500dba4099d57d"
|
||||
dependencies = [
|
||||
"bitflags 2.7.0",
|
||||
"instability",
|
||||
"ratatui-core",
|
||||
"ratatui-crossterm",
|
||||
"ratatui-widgets",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ratatui-core"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cbb175c433c8e28a809d1f5773a2ae96e68c0ce40db865cbab1020bf33ae479c"
|
||||
dependencies = [
|
||||
"bitflags 2.13.0",
|
||||
"compact_str 0.9.0",
|
||||
"hashbrown 0.17.1",
|
||||
"itertools 0.14.0",
|
||||
"kasuari",
|
||||
"lru 0.18.0",
|
||||
"palette",
|
||||
"serde",
|
||||
"strum 0.28.0",
|
||||
"thiserror 2.0.18",
|
||||
"unicode-segmentation",
|
||||
"unicode-truncate 2.0.1",
|
||||
"unicode-width 0.2.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ratatui-crossterm"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "567584a3b0e6a8203c23de40b4861497266725eb5363dbfd18a1edd603cca9f0"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"crossterm",
|
||||
"instability",
|
||||
"ratatui-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ratatui-image"
|
||||
version = "11.0.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d413732e0e2f49577b59f35fa4ba9d5c4c0649fffe9541d9b43da10094058591"
|
||||
dependencies = [
|
||||
"base64-simd",
|
||||
"icy_sixel",
|
||||
"image",
|
||||
"rand 0.8.6",
|
||||
"ratatui 0.30.2",
|
||||
"rustix 0.38.44",
|
||||
"self_cell",
|
||||
"thiserror 1.0.69",
|
||||
"windows",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ratatui-widgets"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "66e3d19bcc9130ca376277d93b60767ff121ace3be06f5f95f81dd68956407d1"
|
||||
dependencies = [
|
||||
"bitflags 2.13.0",
|
||||
"hashbrown 0.17.1",
|
||||
"indoc",
|
||||
"instability",
|
||||
"itertools 0.14.0",
|
||||
"line-clipping",
|
||||
"ratatui-core",
|
||||
"serde",
|
||||
"strum 0.28.0",
|
||||
"time",
|
||||
"unicode-segmentation",
|
||||
"unicode-width 0.2.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rav1e"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b"
|
||||
dependencies = [
|
||||
"aligned-vec",
|
||||
"arbitrary",
|
||||
"arg_enum_proc_macro",
|
||||
"arrayvec",
|
||||
"av-scenechange",
|
||||
"av1-grain",
|
||||
"bitstream-io",
|
||||
"built",
|
||||
"cfg-if",
|
||||
"interpolate_name",
|
||||
"itertools 0.14.0",
|
||||
"libc",
|
||||
"libfuzzer-sys",
|
||||
"log",
|
||||
"maybe-rayon",
|
||||
"new_debug_unreachable",
|
||||
"noop_proc_macro",
|
||||
"num-derive",
|
||||
"num-traits",
|
||||
"paste",
|
||||
"profiling",
|
||||
"rand 0.9.4",
|
||||
"rand_chacha 0.9.0",
|
||||
"simd_helpers",
|
||||
"thiserror 2.0.18",
|
||||
"v_frame",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ravif"
|
||||
version = "0.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e52310197d971b0f5be7fe6b57530dcd27beb35c1b013f29d66c1ad73fbbcc45"
|
||||
dependencies = [
|
||||
"avif-serialize",
|
||||
"imgref",
|
||||
"loop9",
|
||||
"quick-error",
|
||||
"rav1e",
|
||||
"rayon",
|
||||
"rgb",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rayon"
|
||||
version = "1.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
|
||||
dependencies = [
|
||||
"either",
|
||||
"rayon-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rayon-core"
|
||||
version = "1.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
|
||||
dependencies = [
|
||||
"crossbeam-deque",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.5.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
|
||||
dependencies = [
|
||||
"bitflags 2.13.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ref-cast"
|
||||
version = "1.0.25"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
|
||||
dependencies = [
|
||||
"ref-cast-impl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ref-cast-impl"
|
||||
version = "1.0.25"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.11.1"
|
||||
version = "1.12.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
|
||||
checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
@@ -753,9 +1863,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "regex-automata"
|
||||
version = "0.4.9"
|
||||
version = "0.4.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
|
||||
checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
@@ -764,34 +1874,71 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.8.5"
|
||||
version = "0.8.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
||||
checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
|
||||
|
||||
[[package]]
|
||||
name = "rgb"
|
||||
version = "0.8.52"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce"
|
||||
|
||||
[[package]]
|
||||
name = "rustc_version"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
|
||||
dependencies = [
|
||||
"semver",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustix"
|
||||
version = "0.38.43"
|
||||
version = "0.38.44"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6"
|
||||
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
|
||||
dependencies = [
|
||||
"bitflags 2.7.0",
|
||||
"bitflags 2.13.0",
|
||||
"errno",
|
||||
"libc",
|
||||
"linux-raw-sys",
|
||||
"linux-raw-sys 0.4.15",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustversion"
|
||||
version = "1.0.19"
|
||||
name = "rustix"
|
||||
version = "1.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4"
|
||||
checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34"
|
||||
dependencies = [
|
||||
"bitflags 2.13.0",
|
||||
"errno",
|
||||
"libc",
|
||||
"linux-raw-sys 0.11.0",
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustversion"
|
||||
version = "1.0.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.18"
|
||||
version = "1.0.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
|
||||
checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984"
|
||||
|
||||
[[package]]
|
||||
name = "safe_arch"
|
||||
version = "0.9.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "629516c85c29fe757770fa03f2074cf1eac43d44c02a3de9fc2ef7b0e207dfdd"
|
||||
dependencies = [
|
||||
"bytemuck",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "scopeguard"
|
||||
@@ -800,19 +1947,41 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.217"
|
||||
name = "self_cell"
|
||||
version = "1.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70"
|
||||
checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89"
|
||||
|
||||
[[package]]
|
||||
name = "semver"
|
||||
version = "1.0.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.228"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
|
||||
dependencies = [
|
||||
"serde_core",
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_core"
|
||||
version = "1.0.228"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.217"
|
||||
version = "1.0.228"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0"
|
||||
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -820,54 +1989,37 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_spanned"
|
||||
version = "0.6.8"
|
||||
name = "serde_json"
|
||||
version = "1.0.149"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1"
|
||||
checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
|
||||
dependencies = [
|
||||
"indexmap",
|
||||
"itoa",
|
||||
"memchr",
|
||||
"serde",
|
||||
"serde_core",
|
||||
"zmij",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serial"
|
||||
version = "0.4.0"
|
||||
name = "serde_spanned"
|
||||
version = "1.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1237a96570fc377c13baa1b88c7589ab66edced652e43ffb17088f003db3e86"
|
||||
checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
|
||||
dependencies = [
|
||||
"serial-core",
|
||||
"serial-unix",
|
||||
"serial-windows",
|
||||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serial-core"
|
||||
version = "0.4.0"
|
||||
name = "serial2"
|
||||
version = "0.2.33"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f46209b345401737ae2125fe5b19a77acce90cd53e1658cda928e4fe9a64581"
|
||||
checksum = "8cc76fa68e25e771492ca1e3c53d447ef0be3093e05cd3b47f4b712ba10c6f3c"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serial-unix"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f03fbca4c9d866e24a459cbca71283f545a37f8e3e002ad8c70593871453cab7"
|
||||
dependencies = [
|
||||
"ioctl-rs",
|
||||
"libc",
|
||||
"serial-core",
|
||||
"termios",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serial-windows"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "15c6d3b776267a75d31bbdfd5d36c0ca051251caafc285827052bc53bcdc8162"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"serial-core",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -882,9 +2034,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "shell-words"
|
||||
version = "1.1.0"
|
||||
version = "1.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
|
||||
checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77"
|
||||
|
||||
[[package]]
|
||||
name = "shlex"
|
||||
@@ -894,9 +2046,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook"
|
||||
version = "0.3.17"
|
||||
version = "0.3.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
|
||||
checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"signal-hook-registry",
|
||||
@@ -904,9 +2056,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook-mio"
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd"
|
||||
checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"mio",
|
||||
@@ -915,18 +2067,40 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook-registry"
|
||||
version = "1.4.2"
|
||||
version = "1.4.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
|
||||
checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
|
||||
dependencies = [
|
||||
"errno",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.13.2"
|
||||
name = "simd-adler32"
|
||||
version = "0.3.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
|
||||
checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2"
|
||||
|
||||
[[package]]
|
||||
name = "simd_helpers"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6"
|
||||
dependencies = [
|
||||
"quote",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.15.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
||||
|
||||
[[package]]
|
||||
name = "stable_deref_trait"
|
||||
version = "1.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
|
||||
|
||||
[[package]]
|
||||
name = "static_assertions"
|
||||
@@ -952,7 +2126,16 @@ version = "0.26.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06"
|
||||
dependencies = [
|
||||
"strum_macros",
|
||||
"strum_macros 0.26.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "strum"
|
||||
version = "0.28.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd"
|
||||
dependencies = [
|
||||
"strum_macros 0.28.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -969,10 +2152,22 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.96"
|
||||
name = "strum_macros"
|
||||
version = "0.28.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80"
|
||||
checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664"
|
||||
dependencies = [
|
||||
"heck",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.117"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -980,19 +2175,16 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "temp-dir"
|
||||
version = "0.1.14"
|
||||
name = "tap"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bc1ee6eef34f12f765cb94725905c6312b6610ab2b0940889cfe58dae7bc3c72"
|
||||
checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
|
||||
|
||||
[[package]]
|
||||
name = "termios"
|
||||
version = "0.2.2"
|
||||
name = "temp-dir"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d5d9cf598a6d7ce700a4e6a9199da127e6819a61e64b68609683cc9a01b5683a"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
checksum = "016ef9739649996fcc983b9c588fe3d557cf216d4d98503ce1b057ab5a66d689"
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
@@ -1000,7 +2192,16 @@ version = "1.0.69"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
|
||||
dependencies = [
|
||||
"thiserror-impl",
|
||||
"thiserror-impl 1.0.69",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "2.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
|
||||
dependencies = [
|
||||
"thiserror-impl 2.0.18",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1015,33 +2216,57 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "time"
|
||||
version = "0.3.37"
|
||||
name = "thiserror-impl"
|
||||
version = "2.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21"
|
||||
checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tiff"
|
||||
version = "0.11.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b63feaf3343d35b6ca4d50483f94843803b0f51634937cc2ec519fc32232bc52"
|
||||
dependencies = [
|
||||
"fax",
|
||||
"flate2",
|
||||
"half",
|
||||
"quick-error",
|
||||
"weezl",
|
||||
"zune-jpeg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "time"
|
||||
version = "0.3.51"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "85c17d80feb7334b40c484e45ed1a5273dfd8bfda537c3be2e74a06a6686f327"
|
||||
dependencies = [
|
||||
"deranged",
|
||||
"itoa",
|
||||
"libc",
|
||||
"num-conv",
|
||||
"num_threads",
|
||||
"powerfmt",
|
||||
"serde",
|
||||
"serde_core",
|
||||
"time-core",
|
||||
"time-macros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "time-core"
|
||||
version = "0.1.2"
|
||||
version = "0.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
|
||||
checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109"
|
||||
|
||||
[[package]]
|
||||
name = "time-macros"
|
||||
version = "0.2.19"
|
||||
version = "0.2.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de"
|
||||
checksum = "dcef1a61bdb119096e153208ec5cbec23944ce8bca13be5c7f60c634f7403935"
|
||||
dependencies = [
|
||||
"num-conv",
|
||||
"time-core",
|
||||
@@ -1049,56 +2274,62 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.8.19"
|
||||
version = "1.1.2+spec-1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_spanned",
|
||||
"toml_datetime",
|
||||
"toml_edit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_datetime"
|
||||
version = "0.6.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_edit"
|
||||
version = "0.22.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5"
|
||||
checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee"
|
||||
dependencies = [
|
||||
"indexmap",
|
||||
"serde",
|
||||
"serde_core",
|
||||
"serde_spanned",
|
||||
"toml_datetime",
|
||||
"toml_parser",
|
||||
"toml_writer",
|
||||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tree-sitter"
|
||||
version = "0.24.6"
|
||||
name = "toml_datetime"
|
||||
version = "1.1.1+spec-1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5f2434c86ba59ed15af56039cc5bf1acf8ba76ce301e32ef08827388ef285ec5"
|
||||
checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7"
|
||||
dependencies = [
|
||||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_parser"
|
||||
version = "1.1.2+spec-1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
|
||||
dependencies = [
|
||||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_writer"
|
||||
version = "1.1.1+spec-1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db"
|
||||
|
||||
[[package]]
|
||||
name = "tree-sitter"
|
||||
version = "0.26.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4dab76d0b724ba557954125188cf0633a1ca43199ced82d95c7b9c32cc3de1f3"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"regex",
|
||||
"regex-syntax",
|
||||
"serde_json",
|
||||
"streaming-iterator",
|
||||
"tree-sitter-language",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tree-sitter-bash"
|
||||
version = "0.23.3"
|
||||
version = "0.25.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "329a4d48623ac337d42b1df84e81a1c9dbb2946907c102ca72db158c1964a52e"
|
||||
checksum = "9e5ec769279cc91b561d3df0d8a5deb26b0ad40d183127f409494d6d8fc53062"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"tree-sitter-language",
|
||||
@@ -1106,37 +2337,37 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "tree-sitter-highlight"
|
||||
version = "0.24.6"
|
||||
version = "0.26.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1df627d3607f08557788a3c85b85042d8ccd5155eb119afff5f0c7b67a40924"
|
||||
checksum = "f4fbfa3f35520ff730da507e2c9a526a98156f417e0008c73de873741d7e4ecc"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
"regex",
|
||||
"streaming-iterator",
|
||||
"thiserror",
|
||||
"thiserror 2.0.18",
|
||||
"tree-sitter",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tree-sitter-language"
|
||||
version = "0.1.3"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c199356c799a8945965bb5f2c55b2ad9d9aa7c4b4f6e587fe9dea0bc715e5f9c"
|
||||
checksum = "4ae62f7eae5eb549c71b76658648b72cc6111f2d87d24a1e31fa907f4943e3ce"
|
||||
|
||||
[[package]]
|
||||
name = "tui-term"
|
||||
version = "0.2.0"
|
||||
version = "0.3.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72af159125ce32b02ceaced6cffae6394b0e6b6dfd4dc164a6c59a2db9b3c0b0"
|
||||
checksum = "a338ded85dbe7f9ea2298321d126244f54e531e2b2006b97abdab8e47d6f3c88"
|
||||
dependencies = [
|
||||
"ratatui",
|
||||
"ratatui-core",
|
||||
"ratatui-widgets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.14"
|
||||
version = "1.0.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
|
||||
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-segmentation"
|
||||
@@ -1150,11 +2381,22 @@ version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf"
|
||||
dependencies = [
|
||||
"itertools",
|
||||
"itertools 0.13.0",
|
||||
"unicode-segmentation",
|
||||
"unicode-width 0.1.14",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-truncate"
|
||||
version = "2.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "16b380a1238663e5f8a691f9039c73e1cdae598a30e9855f541d29b08b53e9a5"
|
||||
dependencies = [
|
||||
"itertools 0.14.0",
|
||||
"unicode-segmentation",
|
||||
"unicode-width 0.2.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-width"
|
||||
version = "0.1.14"
|
||||
@@ -1167,6 +2409,12 @@ version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-xid"
|
||||
version = "0.2.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
|
||||
|
||||
[[package]]
|
||||
name = "utf8parse"
|
||||
version = "0.2.2"
|
||||
@@ -1174,14 +2422,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
||||
|
||||
[[package]]
|
||||
name = "vt100-ctt"
|
||||
version = "0.16.0"
|
||||
name = "v_frame"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "298aca8af9c2d1395da31a65eb711abef2dc948e475e819212c8ed5008d52c9f"
|
||||
checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2"
|
||||
dependencies = [
|
||||
"aligned-vec",
|
||||
"num-traits",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "vsimd"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64"
|
||||
|
||||
[[package]]
|
||||
name = "vt100-ctt"
|
||||
version = "0.17.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0e0333bcaa031b50f85eac76cb9d62a400be0915ac2d60c3cce28656c01e7e58"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"log",
|
||||
"ratatui",
|
||||
"ratatui 0.29.0",
|
||||
"ratatui-core",
|
||||
"tui-term",
|
||||
"unicode-width 0.2.0",
|
||||
"vte",
|
||||
@@ -1210,20 +2476,130 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.11.0+wasi-snapshot-preview1"
|
||||
version = "0.11.1+wasi-snapshot-preview1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
||||
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
||||
|
||||
[[package]]
|
||||
name = "wasip2"
|
||||
version = "1.0.2+wasi-0.2.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
|
||||
dependencies = [
|
||||
"wit-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasip3"
|
||||
version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
|
||||
dependencies = [
|
||||
"wit-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen"
|
||||
version = "0.2.108"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"once_cell",
|
||||
"rustversion",
|
||||
"wasm-bindgen-macro",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-macro"
|
||||
version = "0.2.108"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608"
|
||||
dependencies = [
|
||||
"quote",
|
||||
"wasm-bindgen-macro-support",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-macro-support"
|
||||
version = "0.2.108"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55"
|
||||
dependencies = [
|
||||
"bumpalo",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-shared"
|
||||
version = "0.2.108"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-encoder"
|
||||
version = "0.244.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
|
||||
dependencies = [
|
||||
"leb128fmt",
|
||||
"wasmparser",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-metadata"
|
||||
version = "0.244.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"indexmap",
|
||||
"wasm-encoder",
|
||||
"wasmparser",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasmparser"
|
||||
version = "0.244.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
|
||||
dependencies = [
|
||||
"bitflags 2.13.0",
|
||||
"hashbrown 0.15.5",
|
||||
"indexmap",
|
||||
"semver",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "weezl"
|
||||
version = "0.1.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88"
|
||||
|
||||
[[package]]
|
||||
name = "which"
|
||||
version = "7.0.1"
|
||||
version = "8.0.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fb4a9e33648339dc1642b0e36e21b3385e6148e289226f657c809dee59df5028"
|
||||
checksum = "c789537cf2f7f55be8e6192f92e464174ee55f91af622777f7f1ceb0dbccd03e"
|
||||
dependencies = [
|
||||
"either",
|
||||
"env_home",
|
||||
"rustix",
|
||||
"winsafe",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wide"
|
||||
version = "0.8.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "13ca908d26e4786149c48efcf6c0ea09ab0e06d1fe3c17dc1b4b0f1ca4a7e788"
|
||||
dependencies = [
|
||||
"bytemuck",
|
||||
"safe_arch",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1249,11 +2625,72 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.52.0"
|
||||
name = "windows"
|
||||
version = "0.58.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
||||
checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6"
|
||||
dependencies = [
|
||||
"windows-core",
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-core"
|
||||
version = "0.58.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99"
|
||||
dependencies = [
|
||||
"windows-implement",
|
||||
"windows-interface",
|
||||
"windows-result",
|
||||
"windows-strings",
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-implement"
|
||||
version = "0.58.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-interface"
|
||||
version = "0.58.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-link"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
|
||||
|
||||
[[package]]
|
||||
name = "windows-result"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e"
|
||||
dependencies = [
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-strings"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
|
||||
dependencies = [
|
||||
"windows-result",
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
@@ -1266,6 +2703,15 @@ dependencies = [
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.61.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
|
||||
dependencies = [
|
||||
"windows-link",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.52.6"
|
||||
@@ -1332,12 +2778,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
||||
|
||||
[[package]]
|
||||
name = "winnow"
|
||||
version = "0.6.22"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "39281189af81c07ec09db316b302a3e67bf9bd7cbf6c820b50e35fee9c2fa980"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0"
|
||||
|
||||
[[package]]
|
||||
name = "winreg"
|
||||
@@ -1349,35 +2792,161 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winsafe"
|
||||
version = "0.0.19"
|
||||
name = "wit-bindgen"
|
||||
version = "0.51.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904"
|
||||
checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
|
||||
dependencies = [
|
||||
"wit-bindgen-rust-macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wit-bindgen-core"
|
||||
version = "0.51.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"heck",
|
||||
"wit-parser",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wit-bindgen-rust"
|
||||
version = "0.51.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"heck",
|
||||
"indexmap",
|
||||
"prettyplease",
|
||||
"syn",
|
||||
"wasm-metadata",
|
||||
"wit-bindgen-core",
|
||||
"wit-component",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wit-bindgen-rust-macro"
|
||||
version = "0.51.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"prettyplease",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"wit-bindgen-core",
|
||||
"wit-bindgen-rust",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wit-component"
|
||||
version = "0.244.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bitflags 2.13.0",
|
||||
"indexmap",
|
||||
"log",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"serde_json",
|
||||
"wasm-encoder",
|
||||
"wasm-metadata",
|
||||
"wasmparser",
|
||||
"wit-parser",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wit-parser"
|
||||
version = "0.244.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"id-arena",
|
||||
"indexmap",
|
||||
"log",
|
||||
"semver",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"serde_json",
|
||||
"unicode-xid",
|
||||
"wasmparser",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wyz"
|
||||
version = "0.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
|
||||
dependencies = [
|
||||
"tap",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "xtask"
|
||||
version = "25.9.9"
|
||||
version = "26.5.21"
|
||||
dependencies = [
|
||||
"linutil_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy"
|
||||
version = "0.7.35"
|
||||
name = "y4m"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
|
||||
checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448"
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy"
|
||||
version = "0.8.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fdea86ddd5568519879b8187e1cf04e24fce28f7fe046ceecbce472ff19a2572"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"zerocopy-derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy-derive"
|
||||
version = "0.7.35"
|
||||
version = "0.8.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
|
||||
checksum = "0c15e1b46eff7c6c91195752e0eeed8ef040e391cdece7c25376957d5f15df22"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zmij"
|
||||
version = "1.0.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4de98dfa5d5b7fef4ee834d0073d560c9ca7b6c46a71d058c48db7960f8cfaf7"
|
||||
|
||||
[[package]]
|
||||
name = "zune-core"
|
||||
version = "0.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9"
|
||||
|
||||
[[package]]
|
||||
name = "zune-inflate"
|
||||
version = "0.2.54"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
|
||||
dependencies = [
|
||||
"simd-adler32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zune-jpeg"
|
||||
version = "0.5.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2959ca473aae96a14ecedf501d20b3608d2825ba280d5adb57d651721885b0c2"
|
||||
dependencies = [
|
||||
"zune-core",
|
||||
]
|
||||
|
||||
+5
-5
@@ -1,12 +1,12 @@
|
||||
[workspace.package]
|
||||
license = "MIT"
|
||||
version = "25.9.9"
|
||||
edition = "2021"
|
||||
|
||||
[workspace]
|
||||
members = ["tui", "core", "xtask"]
|
||||
members = ["core", "tui", "xtask"]
|
||||
default-members = ["tui", "core"]
|
||||
resolver = "2"
|
||||
[workspace.package]
|
||||
license = "MIT"
|
||||
version = "26.5.21"
|
||||
edition = "2021"
|
||||
|
||||
[profile.release]
|
||||
opt-level = "z"
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
[](https://crates.io/crates/linutil_tui)
|
||||
[](https://discord.gg/RUbZUZyByQ)
|
||||

|
||||
<p align="center"><i>The above preview was generated with the help of <a href="https://github.com/charmbracelet/vhs">vhs</a>, give them a :star:!</i></p>
|
||||
|
||||
**Linutil** is a distro-agnostic toolbox designed to simplify everyday Linux tasks. It helps you set up applications and optimize your system for specific use cases. The utility is actively developed in Rust 🦀, providing performance and reliability.
|
||||
|
||||
@@ -125,14 +126,12 @@ If you find Linutil helpful, please consider giving it a ⭐️ to show your sup
|
||||
|
||||
## 🎓 Documentation
|
||||
|
||||
For comprehensive information on how to use Linutil, visit the [Linutil Official Documentation](https://chris-titus-docs.github.io/linutil-docs/).
|
||||
For comprehensive information on how to use Linutil, visit the [Linutil Official Documentation](https://linutil.christitus.com/).
|
||||
|
||||
## 🛠 Contributing
|
||||
|
||||
We welcome contributions from the community! Before you start, please review our [Contributing Guidelines](.github/CONTRIBUTING.md) to understand how to make the most effective and efficient contributions.
|
||||
|
||||
[Official LinUtil Roadmap](https://chris-titus-docs.github.io/linutil-docs/roadmap/)
|
||||
|
||||
Docs are now [here](https://github.com/Chris-Titus-Docs/linutil-docs)
|
||||
|
||||
## 🏅 Thanks to All Contributors
|
||||
@@ -145,7 +144,9 @@ Thank you to everyone who has contributed to the development of Linutil. Your ef
|
||||
|
||||
- 2024/07 - Original Linutil Rust TUI was developed by [@JustLinuxUser](https://github.com/JustLinuxUser).
|
||||
- 2024/09 - TabList (Left Column) and various Rust Core/TUI Improvements developed by [@lj3954](https://github.com/lj3954)
|
||||
- 2024/09 - Cargo Publish, AUR, Rust, and Bash additions done by [@adamperkowski](https://github.com/adamperkowski)
|
||||
- 2024/09 - Cargo Publish, AUR, Rust, and Bash additions done by [@koibtw](https://github.com/koibtw)
|
||||
- 2024/09 - Rust TUI Min/Max, MultiSelection, and Bash additions done by [@jeevithakannan2](https://github.com/jeevithakannan2)
|
||||
- 2024/09 - Various bash updates and standardization done by [@nnyyxxxx](https://github.com/nnyyxxxx)
|
||||
- 2024/09 - Multiple bash script additions done by [@guruswarupa](https://github.com/guruswarupa)
|
||||
- 2026/01 - TUI Refresh with Logo by [@Abs313a](https://github.com/Abs313a)
|
||||
- 2026/03 - Linutil docs website creation by [@seanh1995](https://github.com/seanh1995)
|
||||
|
||||
@@ -0,0 +1,384 @@
|
||||
# Linutil Technical Specification
|
||||
|
||||
## 1. Product definition
|
||||
|
||||
Linutil is a terminal-based Linux utility that provides a searchable,
|
||||
organized catalog of system setup, application installation, gaming, security,
|
||||
and maintenance tasks.
|
||||
|
||||
The product consists of:
|
||||
|
||||
- A Rust TUI that presents commands, previews their contents, confirms
|
||||
execution, and displays live terminal output.
|
||||
- A Rust core library that loads command metadata, filters unsupported entries,
|
||||
and embeds the complete script catalog in the application binary.
|
||||
- Portable shell scripts that implement the operating-system changes.
|
||||
- Shared shell libraries that centralize Linux distribution, package manager,
|
||||
privilege escalation, architecture, and service-manager behavior.
|
||||
|
||||
"Universal" means the architecture supports multiple Linux distributions,
|
||||
package managers, architectures, init systems, and desktop environments. It
|
||||
does not mean every command must work on every Linux system. Unsupported
|
||||
commands must be hidden by metadata or fail early with a useful explanation.
|
||||
|
||||
## 2. Goals
|
||||
|
||||
Linutil must:
|
||||
|
||||
1. Provide one discoverable TUI for common Linux administration and setup
|
||||
tasks.
|
||||
2. Ship as a self-contained binary with its command catalog and scripts
|
||||
embedded at compile time.
|
||||
3. Support distro-independent workflows where practical and explicit
|
||||
distro-specific workflows where required.
|
||||
4. Give users a preview and confirmation boundary before system-changing
|
||||
commands run.
|
||||
5. Preserve interactive terminal behavior for prompts, colors, progress, and
|
||||
full-screen command-line tools.
|
||||
6. Reuse shared shell behavior instead of duplicating package-manager and
|
||||
privilege logic across scripts.
|
||||
7. Make new utilities primarily data-and-script additions rather than Rust UI
|
||||
changes.
|
||||
8. Clearly communicate privileged, destructive, package-management, service,
|
||||
kernel, disk, and file operations.
|
||||
|
||||
## 3. Non-goals
|
||||
|
||||
Linutil is not:
|
||||
|
||||
- A replacement for a distribution's package manager.
|
||||
- A general-purpose shell or arbitrary command launcher.
|
||||
- A daemon or background configuration-management system.
|
||||
- A guarantee that every utility supports every Linux distribution.
|
||||
- A mechanism for silently bypassing package signatures, privilege controls,
|
||||
user confirmation, or platform compatibility checks.
|
||||
- A substitute for backups before disk, bootloader, kernel, account, or
|
||||
destructive filesystem operations.
|
||||
|
||||
## 4. System architecture
|
||||
|
||||
### 4.1 Workspace
|
||||
|
||||
The Cargo workspace contains:
|
||||
|
||||
| Component | Responsibility |
|
||||
| --- | --- |
|
||||
| `core` | Data model, TOML loading, precondition evaluation, embedded assets, temporary extraction, and user config |
|
||||
| `tui` | CLI, rendering, navigation, search, preview, confirmation, selection, PTY execution, and output display |
|
||||
| `xtask` | Repository maintenance and generated documentation |
|
||||
| `core/tabs` | Tab definitions, utility metadata, shared shell libraries, and executable scripts |
|
||||
|
||||
### 4.2 Runtime flow
|
||||
|
||||
1. `linutil_core` embeds `core/tabs/` into the binary at compile time.
|
||||
2. On startup, the embedded tree is extracted to a temporary directory.
|
||||
3. `tabs.toml` determines the ordered list of tab directories.
|
||||
4. Each tab's `tab_data.toml` is parsed into a tree of `ListNode` values.
|
||||
5. Preconditions are evaluated against the current machine when validation is
|
||||
enabled.
|
||||
6. Unsupported leaves and empty parent categories are removed.
|
||||
7. The TUI displays the resulting tabs and command tree.
|
||||
8. The user may inspect descriptions and source previews before selection.
|
||||
9. Selected commands pass through the confirmation flow.
|
||||
10. The TUI composes the commands into a shell program and runs it in a PTY.
|
||||
11. Output is rendered live until the process succeeds, fails, or is
|
||||
interrupted.
|
||||
12. The temporary script tree remains alive for the lifetime of the tab list
|
||||
and is removed when it is dropped.
|
||||
|
||||
### 4.3 Data model
|
||||
|
||||
The core command model has three forms:
|
||||
|
||||
- `Command::Raw(String)`: A short inline shell command.
|
||||
- `Command::LocalFile`: An extracted script, its shebang-derived executable,
|
||||
and executable arguments.
|
||||
- `Command::None`: A non-executable directory node.
|
||||
|
||||
A `Tab` owns a tree of `ListNode` values. Each node contains:
|
||||
|
||||
- Display name.
|
||||
- User-facing description.
|
||||
- Command form.
|
||||
- Task flag string.
|
||||
- Multi-select eligibility.
|
||||
|
||||
Display names should be unique among executable leaves because config-file
|
||||
automation resolves entries by name.
|
||||
|
||||
## 5. Command catalog
|
||||
|
||||
### 5.1 Top-level tabs
|
||||
|
||||
`core/tabs/tabs.toml` contains an ordered `directories` array. Every listed
|
||||
directory must contain a valid `tab_data.toml`.
|
||||
|
||||
Adding a top-level tab requires:
|
||||
|
||||
1. A new directory under `core/tabs/`.
|
||||
2. A valid `tab_data.toml`.
|
||||
3. An entry in `core/tabs/tabs.toml`.
|
||||
4. At least one supported executable leaf at runtime.
|
||||
|
||||
### 5.2 Tab schema
|
||||
|
||||
Each tab data file contains:
|
||||
|
||||
```toml
|
||||
name = "Tab Display Name"
|
||||
|
||||
[[data]]
|
||||
name = "Category or Command"
|
||||
```
|
||||
|
||||
An entry must define exactly one of:
|
||||
|
||||
- `entries`: Nested child entries.
|
||||
- `script`: A script path relative to the tab directory.
|
||||
- `command`: An inline shell command.
|
||||
|
||||
Optional entry fields are:
|
||||
|
||||
- `description`: User-facing explanation.
|
||||
- `preconditions`: Conditions controlling visibility.
|
||||
- `task_list`: Space-separated task flags shown in the TUI.
|
||||
- `multi_select`: Whether the entry may participate in a queued command set.
|
||||
The default is `true`.
|
||||
|
||||
Script paths may reference shared scripts elsewhere under `core/tabs/`, but
|
||||
the resolved path must exist when the catalog is loaded.
|
||||
|
||||
### 5.3 Preconditions
|
||||
|
||||
All preconditions on an entry must pass for it to remain visible.
|
||||
|
||||
Supported data sources are:
|
||||
|
||||
| Type | Behavior |
|
||||
| --- | --- |
|
||||
| `environment` | Compare an environment variable with the provided values |
|
||||
| `containing_file` | Check a file's contents for all provided strings |
|
||||
| `command_exists` | Check all provided commands on `PATH` |
|
||||
| `file_exists` | Check all provided paths as files |
|
||||
|
||||
`matches = true` requires a match. `matches = false` requires the inverse.
|
||||
|
||||
Preconditions should be used for objective platform capabilities such as a
|
||||
package manager, distro marker, display-server session, required executable,
|
||||
or required file. They are visibility filters, not a replacement for runtime
|
||||
validation inside scripts.
|
||||
|
||||
### 5.4 Task flags
|
||||
|
||||
Task flags warn users about the important effects of a command:
|
||||
|
||||
| Flag | Meaning |
|
||||
| --- | --- |
|
||||
| `D` | Disk modification |
|
||||
| `FI` | Flatpak installation |
|
||||
| `FM` | File modification |
|
||||
| `I` | Privileged installation |
|
||||
| `K` | Kernel modification |
|
||||
| `MP` | Package manager action |
|
||||
| `RP` | Package removal |
|
||||
| `SI` | Full system installation |
|
||||
| `SS` | Service or systemd action |
|
||||
| `P*` | The marked action requires privileges |
|
||||
|
||||
Flags are informational and do not grant privileges or replace confirmation.
|
||||
|
||||
## 6. Script contract
|
||||
|
||||
### 6.1 Interpreter
|
||||
|
||||
Scripts should use POSIX shell and `#!/bin/sh -e` by default. Scripts requiring
|
||||
Bash syntax must declare Bash explicitly.
|
||||
|
||||
If no shebang is present, the core defaults to `/bin/sh -e`. When executable
|
||||
validation is enabled, a script with an unavailable or non-executable shebang
|
||||
interpreter is omitted.
|
||||
|
||||
### 6.2 Working directory and shared files
|
||||
|
||||
Before a local script runs, the TUI changes to the script's extracted parent
|
||||
directory. Relative imports and sibling assets must be written for that
|
||||
working directory.
|
||||
|
||||
General-purpose scripts should source `common-script.sh`. Scripts that manage
|
||||
services should also source `common-service-script.sh`. More specialized
|
||||
families may define an additional shared helper when it removes meaningful
|
||||
duplication.
|
||||
|
||||
### 6.3 Environment initialization
|
||||
|
||||
Scripts using the general shared environment must call `checkEnv` before
|
||||
depending on its results.
|
||||
|
||||
The shared environment is responsible for detecting or defining:
|
||||
|
||||
- CPU architecture.
|
||||
- Supported privilege escalation tool.
|
||||
- Required baseline commands.
|
||||
- Supported package manager.
|
||||
- Current Linux distribution identifier.
|
||||
- Superuser group access.
|
||||
- Current-directory writability.
|
||||
- Arch User Repository helper where relevant.
|
||||
|
||||
Scripts must still validate feature-specific requirements and unsupported
|
||||
states.
|
||||
|
||||
### 6.4 Distribution portability
|
||||
|
||||
For a generally available utility:
|
||||
|
||||
- Use the detected `PACKAGER`.
|
||||
- Handle appropriate package names and flags per package manager.
|
||||
- Prefer native distribution packages.
|
||||
- Use Flatpak or another portable method as an intentional fallback, not an
|
||||
accidental catch-all when the platform is unknown.
|
||||
- Report unsupported distributions or architectures before making changes.
|
||||
|
||||
For a distro-specific utility:
|
||||
|
||||
- Place it in a clearly named distro category.
|
||||
- Add metadata preconditions.
|
||||
- Recheck critical assumptions in the script before changing the system.
|
||||
|
||||
### 6.5 Privilege and safety
|
||||
|
||||
Scripts must:
|
||||
|
||||
- Run unprivileged by default.
|
||||
- Apply `ESCALATION_TOOL` only to commands that require elevated access.
|
||||
- Explain destructive or irreversible choices before execution.
|
||||
- Avoid overwriting user configuration without a backup, merge, or explicit
|
||||
prompt.
|
||||
- Check existing state so repeated execution is safe when practical.
|
||||
- Stop on unsupported or ambiguous conditions.
|
||||
- Avoid embedding credentials or collecting user secrets.
|
||||
- Avoid logging sensitive input.
|
||||
- Clean temporary files and partial downloads.
|
||||
- Verify downloaded artifacts when upstream checksums or signatures exist.
|
||||
|
||||
Disk, bootloader, kernel, account-removal, and broad cleanup utilities should
|
||||
set `multi_select = false`.
|
||||
|
||||
### 6.6 User interaction
|
||||
|
||||
Scripts run in a PTY and may prompt users. Prompts must:
|
||||
|
||||
- State the action and meaningful consequences.
|
||||
- Accept predictable input.
|
||||
- Provide a safe default for risky operations.
|
||||
- Remain usable in the TUI's terminal viewport.
|
||||
- Exit nonzero on failure or cancellation when no work was completed.
|
||||
|
||||
## 7. TUI requirements
|
||||
|
||||
The TUI must provide:
|
||||
|
||||
- Tab and hierarchical command navigation.
|
||||
- Search and filtering.
|
||||
- Command descriptions.
|
||||
- Source preview for raw commands and local scripts.
|
||||
- Multi-selection for compatible commands.
|
||||
- Confirmation before execution unless an explicit, documented bypass applies.
|
||||
- Live PTY output with terminal color support.
|
||||
- Scrolling and process interruption.
|
||||
- Clear success and failure status.
|
||||
- A warning when Linutil itself is run as root unless explicitly bypassed.
|
||||
- A minimum-size check with an explicit bypass option.
|
||||
|
||||
Raw and local commands selected together execute in selection order within one
|
||||
shell program. A failure must be visible to the user and reflected in the final
|
||||
command status.
|
||||
|
||||
## 8. Configuration and automation
|
||||
|
||||
Linutil accepts a TOML configuration file with:
|
||||
|
||||
- `auto_execute`: Display names of executable leaves.
|
||||
- `skip_confirmation`: Whether confirmation is skipped.
|
||||
- `size_bypass`: Whether terminal-size enforcement is bypassed.
|
||||
|
||||
Unknown configuration fields are errors.
|
||||
|
||||
Automation must not cause an unsupported catalog entry to appear. Missing or
|
||||
filtered command names are ignored by the current loader and should be
|
||||
reported more explicitly in a future compatibility-preserving improvement.
|
||||
|
||||
Command display names are therefore part of the user-facing automation
|
||||
interface and should not be renamed casually.
|
||||
|
||||
## 9. Documentation
|
||||
|
||||
User-visible command additions and description changes must update generated
|
||||
walkthrough content using:
|
||||
|
||||
```bash
|
||||
cargo xtask docgen
|
||||
```
|
||||
|
||||
Generated documentation must not be edited as the sole source of a change.
|
||||
Architecture documentation should remain consistent with `SPEC.md` and the
|
||||
code.
|
||||
|
||||
## 10. Quality requirements
|
||||
|
||||
### 10.1 Rust
|
||||
|
||||
Required checks for Rust changes:
|
||||
|
||||
```bash
|
||||
cargo fmt --all --check
|
||||
cargo test --no-fail-fast --package linutil_core
|
||||
cargo clippy -- -Dwarnings
|
||||
```
|
||||
|
||||
Parser and filtering changes require focused unit tests. TUI behavior changes
|
||||
require either focused tests or documented interactive validation.
|
||||
|
||||
### 10.2 Shell
|
||||
|
||||
Changed shell scripts must pass ShellCheck. POSIX shell scripts should also
|
||||
pass `checkbashisms`.
|
||||
|
||||
Scripts should be tested without performing unintended system changes. Use
|
||||
syntax/static checks, controlled containers or virtual machines, mocked
|
||||
commands, and representative supported distributions as appropriate.
|
||||
|
||||
### 10.3 Catalog
|
||||
|
||||
Catalog changes must prove that:
|
||||
|
||||
- TOML parses successfully.
|
||||
- Every referenced script exists.
|
||||
- Required interpreters are valid under normal validation.
|
||||
- Preconditions retain intended entries and remove unsupported entries.
|
||||
- Generated documentation is current.
|
||||
|
||||
The core test suite is the minimum automated validation for catalog changes.
|
||||
|
||||
## 11. Acceptance criteria for a new utility
|
||||
|
||||
A utility is complete when:
|
||||
|
||||
1. It has a focused script or appropriately short raw command.
|
||||
2. It reuses shared environment and service helpers where applicable.
|
||||
3. It supports the intended distributions and rejects unsupported ones.
|
||||
4. Its metadata includes an accurate name, description, path, task flags,
|
||||
preconditions, and multi-select policy.
|
||||
5. It is previewable and executable from the TUI.
|
||||
6. Privileged and destructive operations are explicit.
|
||||
7. Re-running it does not cause avoidable damage or duplication.
|
||||
8. Relevant Rust, TOML, shell, and generated-documentation checks pass.
|
||||
9. Platform limitations and residual risks are documented.
|
||||
|
||||
## 12. Future compatibility
|
||||
|
||||
Architectural extensions should preserve the data-driven utility model.
|
||||
Potential additions such as richer capability detection, structured command
|
||||
results, dry-run support, per-command privilege declarations, or stronger
|
||||
download verification should extend the catalog and core contracts rather
|
||||
than hard-code individual utilities into the TUI.
|
||||
+1
-1
@@ -3,5 +3,5 @@ extend-exclude = ["tui/cool_tips.txt"]
|
||||
|
||||
[default]
|
||||
extend-ignore-identifiers-re = [
|
||||
"ratatui",
|
||||
"(?i)ratatui",
|
||||
]
|
||||
|
||||
+5
-5
@@ -8,9 +8,9 @@ license.workspace = true
|
||||
include = ["src/*.rs", "Cargo.toml", "tabs/**"]
|
||||
|
||||
[dependencies]
|
||||
ego-tree = "0.11.0"
|
||||
include_dir = "0.7.4"
|
||||
temp-dir = "0.1.14"
|
||||
serde = { version = "1.0.215", features = ["derive"], default-features = false }
|
||||
toml = { version = "0.8.19", features = ["parse"], default-features = false }
|
||||
which = "7.0.0"
|
||||
ego-tree = "0.9.0"
|
||||
serde = { version = "1.0.215", features = ["derive"] }
|
||||
temp-dir = "0.2.0"
|
||||
toml = { version = "1.1.2", features = ["parse", "serde"] }
|
||||
which = "8.0.2"
|
||||
|
||||
@@ -57,3 +57,47 @@ impl Config {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_read_config() {
|
||||
let temp_dir = crate::tests::create_temp_dir();
|
||||
let config_path = temp_dir.path().join("config.toml");
|
||||
|
||||
fs::write(
|
||||
&config_path,
|
||||
r#"auto_execute = ["command1", "nonexistent"]
|
||||
skip_confirmation = true
|
||||
size_bypass = false"#,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let tab_list = crate::tests::create_tab_list();
|
||||
let config = Config::read_config(&config_path, &tab_list);
|
||||
|
||||
assert_eq!(config.auto_execute_commands.len(), 1);
|
||||
assert!(config.skip_confirmation);
|
||||
assert!(!config.size_bypass);
|
||||
|
||||
drop(temp_dir);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_auto_execute_commands() {
|
||||
let tab_list = crate::tests::create_tab_list();
|
||||
|
||||
let config = Config {
|
||||
auto_execute: Some(vec!["command1".to_string(), "nonexistent".to_string()]),
|
||||
skip_confirmation: Some(true),
|
||||
size_bypass: Some(false),
|
||||
};
|
||||
|
||||
let auto_execute_commands = config.auto_execute_commands(&tab_list);
|
||||
|
||||
assert_eq!(auto_execute_commands.len(), 1);
|
||||
assert_eq!(auto_execute_commands[0].name, "command1");
|
||||
}
|
||||
}
|
||||
|
||||
+107
-6
@@ -16,7 +16,7 @@ const TAB_DATA: Dir = include_dir!("$CARGO_MANIFEST_DIR/tabs");
|
||||
|
||||
// Allow the unused TempDir to be stored for later destructor call
|
||||
#[allow(dead_code)]
|
||||
pub struct TabList(pub Vec<Tab>, TempDir);
|
||||
pub struct TabList(pub Vec<Tab>, pub(crate) TempDir);
|
||||
|
||||
// Implement deref to allow Vec<Tab> methods to be called on TabList
|
||||
impl Deref for TabList {
|
||||
@@ -41,7 +41,8 @@ impl IntoIterator for TabList {
|
||||
}
|
||||
|
||||
pub fn get_tabs(validate: bool) -> TabList {
|
||||
let (temp_dir, tab_files) = TabDirectories::get_tabs();
|
||||
let temp_dir = TempDir::with_prefix("linutil_scripts").unwrap();
|
||||
let tab_files = TabDirectories::get_tabs(&temp_dir);
|
||||
|
||||
let tabs: Vec<_> = tab_files
|
||||
.into_iter()
|
||||
@@ -269,10 +270,9 @@ fn is_executable(path: &Path) -> bool {
|
||||
}
|
||||
|
||||
impl TabDirectories {
|
||||
fn get_tabs() -> (TempDir, Vec<PathBuf>) {
|
||||
let temp_dir = TempDir::with_prefix("linutil_scripts").unwrap();
|
||||
fn get_tabs(temp_dir: &TempDir) -> Vec<PathBuf> {
|
||||
TAB_DATA
|
||||
.extract(&temp_dir)
|
||||
.extract(temp_dir)
|
||||
.expect("Failed to extract the saved directory");
|
||||
|
||||
let tab_files = std::fs::read_to_string(temp_dir.path().join("tabs.toml"))
|
||||
@@ -283,6 +283,107 @@ impl TabDirectories {
|
||||
.iter()
|
||||
.map(|path| temp_dir.path().join(path).join("tab_data.toml"))
|
||||
.collect();
|
||||
(temp_dir, tab_paths)
|
||||
|
||||
tab_paths
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tab_directories_tests {
|
||||
use super::*;
|
||||
use std::fs;
|
||||
|
||||
#[test]
|
||||
fn test_get_tabs() {
|
||||
let temp_dir = crate::tests::create_temp_dir();
|
||||
let tab_paths = TabDirectories::get_tabs(&temp_dir);
|
||||
|
||||
assert!(!tab_paths.is_empty());
|
||||
for path in tab_paths {
|
||||
assert!(fs::metadata(&path).is_ok());
|
||||
}
|
||||
|
||||
drop(temp_dir);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_is_executable() {
|
||||
let temp_dir = crate::tests::create_temp_dir();
|
||||
let file_path = temp_dir.path().join("test_script.sh");
|
||||
|
||||
std::fs::write(
|
||||
&file_path,
|
||||
"#!/bin/sh\necho 'NICE cat of the week: SPOINGUS (cuddled nicely)'",
|
||||
)
|
||||
.unwrap();
|
||||
assert!(!is_executable(&file_path));
|
||||
|
||||
let mut permissions = std::fs::metadata(&file_path).unwrap().permissions();
|
||||
permissions.set_mode(0o755);
|
||||
std::fs::set_permissions(&file_path, permissions).unwrap();
|
||||
assert!(is_executable(&file_path));
|
||||
|
||||
let non_existent_path = temp_dir.path().join("non_existent.sh");
|
||||
assert!(!is_executable(&non_existent_path));
|
||||
|
||||
drop(temp_dir);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_get_shebang() {
|
||||
let temp_dir = crate::tests::create_temp_dir();
|
||||
let script_path = temp_dir.path().join("test_script.sh");
|
||||
|
||||
std::fs::write(
|
||||
&script_path,
|
||||
"#!/bin/bash\necho 'NAUGHTY cat of the week: BINGUS (bit my ass)'",
|
||||
)
|
||||
.unwrap();
|
||||
let result = get_shebang(&script_path, true);
|
||||
assert_eq!(
|
||||
result,
|
||||
Some((
|
||||
"/bin/bash".to_string(),
|
||||
vec!["/path/to/test_script.sh".to_string()]
|
||||
))
|
||||
.map(|(exe, args)| (
|
||||
exe,
|
||||
args.iter()
|
||||
.map(|s| s.replace("/path/to", script_path.parent().unwrap().to_str().unwrap()))
|
||||
.collect()
|
||||
))
|
||||
);
|
||||
|
||||
let script_no_shebang_path = temp_dir.path().join("no_shebang.sh");
|
||||
std::fs::write(&script_no_shebang_path, "echo 'zip zip zip ble ble ble'").unwrap();
|
||||
let result_no_shebang = get_shebang(&script_no_shebang_path, true);
|
||||
assert_eq!(
|
||||
result_no_shebang,
|
||||
Some(("/bin/sh".to_string(), vec!["-e".to_string(),]))
|
||||
);
|
||||
|
||||
let script_invalid_shebang_path = temp_dir.path().join("invalid_shebang.sh");
|
||||
std::fs::write(
|
||||
&script_invalid_shebang_path,
|
||||
"#!/i/love/my/cat\necho 'her name is mimi :3 (mimi will be in this codebase forever)'",
|
||||
)
|
||||
.unwrap();
|
||||
let result_invalid_shebang = get_shebang(&script_invalid_shebang_path, true);
|
||||
assert!(result_invalid_shebang.is_none());
|
||||
let result_invalid_shebang_no_validate = get_shebang(&script_invalid_shebang_path, false);
|
||||
assert_eq!(
|
||||
result_invalid_shebang_no_validate,
|
||||
Some((
|
||||
"/i/love/my/cat".to_string(),
|
||||
vec![script_invalid_shebang_path.to_string_lossy().to_string()]
|
||||
))
|
||||
);
|
||||
|
||||
drop(temp_dir);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,3 +45,42 @@ impl Tab {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use temp_dir::TempDir;
|
||||
|
||||
pub(crate) fn create_temp_dir() -> TempDir {
|
||||
TempDir::with_prefix("linutil_test").unwrap()
|
||||
}
|
||||
|
||||
pub(crate) fn create_tab() -> Tab {
|
||||
let command = Rc::new(ListNode {
|
||||
name: "command1".to_string(),
|
||||
description: "herro word :3".to_string(),
|
||||
command: Command::Raw("echo 'cat memes 🙀'".to_string()),
|
||||
task_list: "".to_string(),
|
||||
multi_select: false,
|
||||
});
|
||||
|
||||
Tab {
|
||||
name: "TestTab".to_string(),
|
||||
tree: Tree::new(command),
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn create_tab_list() -> TabList {
|
||||
TabList(vec![create_tab()], create_temp_dir())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_find_command_by_name() {
|
||||
let tab = create_tab();
|
||||
let found_command = tab.find_command_by_name("command1");
|
||||
|
||||
assert!(found_command.is_some());
|
||||
assert_eq!(found_command.unwrap().name, "command1");
|
||||
assert!(tab.find_command_by_name("nonexistent").is_none());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,6 +37,5 @@ setupAlacrittyConfig() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installAlacritty
|
||||
setupAlacrittyConfig
|
||||
|
||||
@@ -34,7 +34,7 @@ install_adb() {
|
||||
install_universal_android_debloater() {
|
||||
if ! command_exists uad; then
|
||||
printf "%b\n" "${YELLOW}Installing Universal Android Debloater...${RC}."
|
||||
curl -sSLo "${HOME}/uad" "https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/releases/download/v1.1.2/uad-ng-linux"
|
||||
curl -sSLo "${HOME}/uad" "https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/releases/download/v1.2.0/uad-ng-linux"
|
||||
"$ESCALATION_TOOL" chmod +x "${HOME}/uad"
|
||||
"$ESCALATION_TOOL" mv "${HOME}/uad" /usr/local/bin/uad
|
||||
else
|
||||
@@ -43,6 +43,5 @@ install_universal_android_debloater() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
install_adb
|
||||
install_universal_android_debloater
|
||||
|
||||
@@ -106,6 +106,5 @@ main() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installAutoCpufreq
|
||||
main
|
||||
|
||||
@@ -12,6 +12,5 @@ installBottles() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkFlatpak
|
||||
installBottles
|
||||
@@ -0,0 +1,94 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installBraveOrigin() {
|
||||
if ! command_exists brave-origin && ! command_exists com.brave.Browser; then
|
||||
printf "%b\n" "${YELLOW}Installing Brave Origin...${RC}"
|
||||
if command_exists rpm-ostree; then
|
||||
"$ESCALATION_TOOL" curl -fsSLo /etc/yum.repos.d/brave-browser.repo https://brave-browser-rpm-release.s3.brave.com/brave-browser.repo
|
||||
"$ESCALATION_TOOL" rpm-ostree install brave-origin
|
||||
else
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala)
|
||||
"$ESCALATION_TOOL" curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg
|
||||
"$ESCALATION_TOOL" curl -fsSLo /etc/apt/sources.list.d/brave-browser-release.sources https://brave-browser-apt-release.s3.brave.com/brave-browser.sources
|
||||
"$ESCALATION_TOOL" "$PACKAGER" update
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y brave-origin
|
||||
;;
|
||||
dnf)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y dnf-plugins-core
|
||||
if command_exists dnf5; then
|
||||
"$ESCALATION_TOOL" dnf5 config-manager addrepo --from-repofile=https://brave-browser-rpm-release.s3.brave.com/brave-browser.repo
|
||||
else
|
||||
"$ESCALATION_TOOL" "$PACKAGER" config-manager --add-repo https://brave-browser-rpm-release.s3.brave.com/brave-browser.repo
|
||||
fi
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y brave-origin
|
||||
;;
|
||||
zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" addrepo https://brave-browser-rpm-release.s3.brave.com/brave-browser.repo
|
||||
"$ESCALATION_TOOL" "$PACKAGER" --gpg-auto-import-keys refresh
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y brave-origin
|
||||
;;
|
||||
pacman)
|
||||
checkAURHelper
|
||||
"$AUR_HELPER" -S --needed --noconfirm brave-origin-bin
|
||||
;;
|
||||
*)
|
||||
curl -fsS https://dl.brave.com/install.sh | FLAVOR=origin sh
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
else
|
||||
printf "%b\n" "${GREEN}Brave Origin is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallBraveOrigin() {
|
||||
if command_exists brave-origin || command_exists com.brave.Browser; then
|
||||
printf "%b\n" "${YELLOW}Uninstalling Brave Origin...${RC}"
|
||||
if command_exists rpm-ostree; then
|
||||
"$ESCALATION_TOOL" rpm-ostree uninstall brave-origin
|
||||
else
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" purge --autoremove -y brave-origin
|
||||
"$ESCALATION_TOOL" rm -f /etc/apt/sources.list.d/brave-browser-release.sources
|
||||
"$ESCALATION_TOOL" rm -f /usr/share/keyrings/brave-browser-archive-keyring.gpg
|
||||
;;
|
||||
dnf)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y brave-origin
|
||||
"$ESCALATION_TOOL" rm -f /etc/yum.repos.d/brave-browser.repo
|
||||
;;
|
||||
zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" --non-interactive remove brave-origin
|
||||
;;
|
||||
pacman)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -Rns --noconfirm brave-origin-bin
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${YELLOW}Automatic uninstall not supported for your distro.${RC}"
|
||||
printf "%b\n" "${YELLOW}Please use your package manager to remove brave-origin manually.${RC}"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
else
|
||||
printf "%b\n" "${GREEN}Brave Origin is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall Brave Origin?${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install Brave Origin${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall Brave Origin${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installBraveOrigin ;;
|
||||
2) uninstallBraveOrigin ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -12,5 +12,4 @@ installBrave() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installBrave
|
||||
@@ -15,9 +15,13 @@ if ! command_exists chromium; then
|
||||
xbps-install)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -Sy chromium
|
||||
;;
|
||||
*)
|
||||
apt-get|nala|zypper|dnf|eopkg)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y chromium
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive org.chromium.Chromium
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Chromium Browser is already installed.${RC}"
|
||||
@@ -25,5 +29,4 @@ fi
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installChromium
|
||||
@@ -27,8 +27,8 @@ installFirefox() {
|
||||
"$ESCALATION_TOOL" "$PACKAGER" add firefox
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive org.mozilla.firefox
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -37,5 +37,4 @@ installFirefox() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installFirefox
|
||||
|
||||
@@ -17,7 +17,7 @@ installChrome() {
|
||||
"$ESCALATION_TOOL" "$PACKAGER" --non-interactive install google-chrome-stable
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm google-chrome
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter google-chrome
|
||||
;;
|
||||
dnf)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y fedora-workstation-repositories
|
||||
@@ -25,8 +25,8 @@ installChrome() {
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y google-chrome-stable
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive com.google.Chrome
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -34,7 +34,71 @@ installChrome() {
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallChrome() {
|
||||
if command_exists google-chrome; then
|
||||
printf "%b\n" "${YELLOW}Uninstalling Google Chrome...${RC}"
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" purge --autoremove -y google-chrome
|
||||
;;
|
||||
zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" --non-interactive uninstall google-chrome-stable
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -Rns --needed --noconfirm google-chrome
|
||||
;;
|
||||
dnf)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y google-chrome-stable
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive com.google.Chrome
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Google Chrome Browser is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
removeLocalAI() {
|
||||
# Set Chrome AI path
|
||||
CHROME_USER_DIR="$HOME/.config/google-chrome"
|
||||
|
||||
# Path where Chrome AI model is stored
|
||||
AI_MODEL_DIR="$CHROME_USER_DIR/AI"
|
||||
|
||||
# Remove AI model if it exists
|
||||
if [ -d "$AI_MODEL_DIR" ]; then
|
||||
echo "Removing existing Chrome AI model..."
|
||||
rm -rf "$AI_MODEL_DIR"
|
||||
echo "Removed AI model."
|
||||
else
|
||||
echo "No AI model found at $AI_MODEL_DIR"
|
||||
fi
|
||||
|
||||
# Prevent re-download
|
||||
# Create an empty directory and make it read-only
|
||||
echo "Creating read-only placeholder to block AI download..."
|
||||
mkdir -p "$AI_MODEL_DIR"
|
||||
chmod 000 "$AI_MODEL_DIR"
|
||||
|
||||
echo "Chrome AI model removed and blocked from redownloading."
|
||||
}
|
||||
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall Chrome${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install Chrome${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall Chrome${RC}"
|
||||
printf "%b\n" "3. ${YELLOW}Remove Local AI (Prevents Chrome From Reinstalling)${RC}"
|
||||
printf "%b" "Enter your choice [1-3]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installChrome ;;
|
||||
2) uninstallChrome ;;
|
||||
3) removeLocalAI ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installChrome
|
||||
main
|
||||
|
||||
@@ -28,13 +28,9 @@ installLibreWolf() {
|
||||
printf '%s\n' 'repository=https://github.com/index-0/librewolf-void/releases/latest/download/' | "$ESCALATION_TOOL" tee /etc/xbps.d/20-librewolf.conf > /dev/null
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -Syu librewolf
|
||||
;;
|
||||
apk)
|
||||
checkFlatpak
|
||||
flatpak install flathub io.gitlab.librewolf-community
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install flathub --noninteractive io.gitlab.librewolf-community
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -43,6 +39,4 @@ installLibreWolf() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installLibreWolf
|
||||
|
||||
@@ -15,9 +15,13 @@ installLynx() {
|
||||
xbps-install)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -Sy lynx
|
||||
;;
|
||||
*)
|
||||
apt-get|nala|zypper|dnf|eopkg)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y lynx
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Lynx TUI Browser is already installed.${RC}"
|
||||
@@ -25,5 +29,4 @@ installLynx() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installLynx
|
||||
@@ -53,6 +53,4 @@ installThrorium() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installThrorium
|
||||
|
||||
@@ -19,8 +19,8 @@ installTorBrowser() {
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -Sy torbrowser-launcher
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ${PACKAGER}${RC}"
|
||||
exit 1
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install flathub --noninteractive org.torproject.torbrowser-launcher
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -29,6 +29,5 @@ installTorBrowser() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installTorBrowser
|
||||
|
||||
|
||||
@@ -31,8 +31,8 @@ installVivaldi() {
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm vivaldi
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive com.vivaldi.Vivaldi
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -41,5 +41,4 @@ installVivaldi() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installVivaldi
|
||||
|
||||
@@ -10,8 +10,8 @@ installWaterfox() {
|
||||
"$AUR_HELPER" -S --needed --noconfirm waterfox-bin
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
flatpak install -y flathub net.waterfox.waterfox
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive flathub net.waterfox.waterfox
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -20,6 +20,4 @@ installWaterfox() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installWaterfox
|
||||
|
||||
@@ -11,7 +11,7 @@ installZenBrowser() {
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
flatpak install -y flathub io.github.zen_browser.zen
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive flathub io.github.zen_browser.zen
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -20,6 +20,4 @@ installZenBrowser() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installZenBrowser
|
||||
|
||||
@@ -8,7 +8,7 @@ installDiscord() {
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala)
|
||||
curl -Lo discord.deb "https://discord.com/api/download?platform=linux&format=deb"
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y discord.deb
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y ./discord.deb
|
||||
"$ESCALATION_TOOL" rm discord.deb
|
||||
;;
|
||||
zypper|eopkg)
|
||||
@@ -21,13 +21,9 @@ installDiscord() {
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y "https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm"
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y discord
|
||||
;;
|
||||
apk | xbps-install)
|
||||
checkFlatpak
|
||||
flatpak install -y flathub com.discordapp.Discord
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive flathub com.discordapp.Discord
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -36,5 +32,4 @@ installDiscord() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installDiscord
|
||||
|
||||
@@ -21,13 +21,9 @@ installJitsi() {
|
||||
dnf)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y jitsi-meet
|
||||
;;
|
||||
apk)
|
||||
checkFlatpak
|
||||
flatpak install flathub org.jitsi.jitsi-meet
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive flathub org.jitsi.jitsi-meet
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -36,6 +32,4 @@ installJitsi() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installJitsi
|
||||
@@ -19,20 +19,12 @@ installSignal() {
|
||||
pacman)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -S --noconfirm signal-desktop
|
||||
;;
|
||||
dnf)
|
||||
checkFlatpak
|
||||
flatpak install -y flathub org.signal.Signal
|
||||
;;
|
||||
xbps-install)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -Sy Signal-Desktop
|
||||
;;
|
||||
apk)
|
||||
checkFlatpak
|
||||
flatpak install -y flathub org.signal.Signal
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive flathub org.signal.Signal
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -41,5 +33,4 @@ installSignal() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installSignal
|
||||
|
||||
@@ -11,7 +11,7 @@ installSlack() {
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
flatpak install -y flathub com.slack.Slack
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive flathub com.slack.Slack
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -20,6 +20,4 @@ installSlack() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installSlack
|
||||
@@ -19,7 +19,8 @@ installTelegram() {
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y telegram
|
||||
;;
|
||||
*)
|
||||
flatpak install flathub --noninteractive org.telegram.desktop
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install flathub --noninteractive org.telegram.desktop
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -28,5 +29,4 @@ installTelegram() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installTelegram
|
||||
@@ -15,9 +15,12 @@ installThunderBird() {
|
||||
xbps-install)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -Sy thunderbird
|
||||
;;
|
||||
*)
|
||||
apt-get|nala|zypper|dnf|eopkg)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y thunderbird
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak --noninteractive org.mozilla.Thunderbird
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Thunderbird is already installed.${RC}"
|
||||
@@ -25,5 +28,4 @@ installThunderBird() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installThunderBird
|
||||
@@ -11,7 +11,7 @@ installZapZap() {
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
flatpak install flathub com.rtosta.zapzap
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive flathub com.rtosta.zapzap
|
||||
;;
|
||||
esac
|
||||
else
|
||||
|
||||
@@ -11,7 +11,7 @@ installZoom() {
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
flatpak install -y flathub us.zoom.Zoom
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive flathub us.zoom.Zoom
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -20,6 +20,4 @@ installZoom() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installZoom
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installArdour() {
|
||||
printf "%b\n" "${YELLOW}Installing Ardour...${RC}"
|
||||
if ! command_exists ardour; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y ardour
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter ardour
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive org.ardour.Ardour
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Ardour is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallArdour() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling Ardour...${RC}"
|
||||
if command_exists ardour; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y ardour
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter ardour
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive org.ardour.Ardour
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Ardour is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall Ardour${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installArdour ;;
|
||||
2) uninstallArdour ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installAudacity() {
|
||||
printf "%b\n" "${YELLOW}Installing Audacity...${RC}"
|
||||
if ! command_exists audacity; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y audacity
|
||||
;;
|
||||
pacman)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm --cleanafter audacity
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive org.audacityteam.Audacity
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Audacity is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallAudacity() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling Audacity...${RC}"
|
||||
if command_exists audacity; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y audacity
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter audacity
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive org.audacityteam.Audacity
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Audacity is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall Audacity${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installAudacity ;;
|
||||
2) uninstallAudacity ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installBlender() {
|
||||
printf "%b\n" "${YELLOW}Installing Blender...${RC}"
|
||||
if ! command_exists blender; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y blender
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter blender
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive org.blender.Blender
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Blender is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallBlender() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling Blender...${RC}"
|
||||
if command_exists blender; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y blender
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter blender
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive org.blender.Blender
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Blender is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall Blender${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installBender ;;
|
||||
2) uninstallBlender ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installDarktable() {
|
||||
printf "%b\n" "${YELLOW}Installing Darktable...${RC}"
|
||||
if ! command_exists darktable; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y darktable
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter darktable
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive org.darktable.Darktable
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Darktable is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallDarktable() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling Darktable...${RC}"
|
||||
if command_exists darktable; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y darktable
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter darktable
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive org.darktable.Darktable
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}darktable is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall Darktable${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installDarktable ;;
|
||||
2) uninstallDarktable ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installGIMP() {
|
||||
printf "%b\n" "${YELLOW}Installing GIMP...${RC}"
|
||||
if ! command_exists gimp; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y gimp
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter gimp
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive org.gimp.GIMP
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}GIMP is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallGIMP() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling GIMP...${RC}"
|
||||
if command_exists gimp; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y gimp
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter gimp
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive org.gimp.GIMP
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}GIMP is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall GIMP${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installGIMP ;;
|
||||
2) uninstallGIMP ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,57 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installHandbrake() {
|
||||
printf "%b\n" "${YELLOW}Installing Handbrake...${RC}"
|
||||
if ! command_exists handbrake; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y handbrake
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter handbrake
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive fr.handbrake.ghb
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Handbrake is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallHandbrake() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling Handbrake...${RC}"
|
||||
if command_exists handbrake; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y handbrake
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter handbrake
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive fr.handbrake.ghb
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Handbrake is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall Handbrake${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installHandbrake ;;
|
||||
2) uninstallHandbrake ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installInkscape() {
|
||||
printf "%b\n" "${YELLOW}Installing Inkscape...${RC}"
|
||||
if ! command_exists inkscape; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y inkscape
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter inkscape
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive org.inkscape.Inkscape
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Inkscape is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallInkscape() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling Inkscape...${RC}"
|
||||
if command_exists inkscape; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y inkscape
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter inkscape
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive org.inkscape.Inkscape
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Inkscape is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall Inkscape${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installInkscape ;;
|
||||
2) uninstallInkscape ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installKrita() {
|
||||
printf "%b\n" "${YELLOW}Installing Krita...${RC}"
|
||||
if ! command_exists krita; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y krita
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter krita
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive org.kde.krita
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Krita is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallKrita() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling Krita...${RC}"
|
||||
if command_exists krita; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y krita
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter krita
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive org.kde.krita
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Krita is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall Krita${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installKrita ;;
|
||||
2) uninstallKrita ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installMyPaint() {
|
||||
printf "%b\n" "${YELLOW}Installing MyPaint...${RC}"
|
||||
if ! command_exists mypaint; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y mypaint
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter mypaint
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive org.mypaint.MyPaint
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}MyPaint is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallMyPaint() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling MyPaint...${RC}"
|
||||
if command_exists mypaint; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y mypaint
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter mypaint
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive org.mypaint.mypaint
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}MyPaint is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall MyPaint${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installMyPaint ;;
|
||||
2) uninstallMyPaint ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,38 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installNatron() {
|
||||
printf "%b\n" "${YELLOW}Installing Natron...${RC}"
|
||||
if ! command_exists natron; then
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive fr.natron.natron
|
||||
else
|
||||
printf "%b\n" "${GREEN}Natron is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallNatron() {
|
||||
printf "%b\n" "${YELLOW}Installing Natron...${RC}"
|
||||
if command_exists natron; then
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive fr.natron.natron
|
||||
else
|
||||
printf "%b\n" "${GREEN}Natron is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall Natron (Flatpak)${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installNatron ;;
|
||||
2) uninstallNatron ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,62 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installObsStudio() {
|
||||
printf "%b\n" "${YELLOW}Installing OBS Studio...${RC}"
|
||||
if ! command_exists obs-studio; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y v4l2loopback-dkms obs-studio
|
||||
;;
|
||||
dnf)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install kmod-v4l2loopback
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install obs-studio
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter obs-studio
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive com.obsproject.Studio
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}OBS Studio is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallObsStudio() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling OBS Studio...${RC}"
|
||||
if command_exists obs-studio; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y obs-studio
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter obs-studio
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive com.obsproject.Studio
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}OBS Studio is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall OBS Studio${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installObsStudio ;;
|
||||
2) uninstallObsStudio ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installOlive() {
|
||||
printf "%b\n" "${YELLOW}Installing Olive Video Editor...${RC}"
|
||||
if ! command_exists olive; then
|
||||
case "$PACKAGER" in
|
||||
dnf)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y olive
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter olive
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive org.olivevideoeditor.Olive
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Olive Video Editor is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallOlive() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling Olive...${RC}"
|
||||
if command_exists olive; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y olive
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter olive
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive org.olivevideoeditor.Olive
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}olive is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall Olive${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installOlive ;;
|
||||
2) uninstallOlive ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installOpenShot() {
|
||||
printf "%b\n" "${YELLOW}Installing OpenShot...${RC}"
|
||||
if ! command_exists openshot; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y openshot-qt
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter openshot
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive org.openshot.OpenShot
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}OpenShot is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallOpenShot() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling OpenShot...${RC}"
|
||||
if command_exists openshot; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y openshot
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter openshot
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive org.openshot.OpenShot
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}OpenShot is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall OpenShot${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installOpenShot ;;
|
||||
2) uninstallOpenShot ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installPinta() {
|
||||
printf "%b\n" "${YELLOW}Installing Pinta...${RC}"
|
||||
if ! command_exists pinta; then
|
||||
case "$PACKAGER" in
|
||||
dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y pinta
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter pinta
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive com.github.PintaProject.Pinta
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Pinta is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallPinta() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling Pinta...${RC}"
|
||||
if command_exists pinta; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y pinta
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter pinta
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive com.github.PintaProject.Pinta
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Pinta is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall Pinta${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installPinta ;;
|
||||
2) uninstallPinta ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installScribus() {
|
||||
printf "%b\n" "${YELLOW}Installing Scribus...${RC}"
|
||||
if ! command_exists scribus; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y scribus
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter scribus
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive net.scribus.Scribus
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Scribus is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallScribus() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling Scribus...${RC}"
|
||||
if command_exists scribus; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y scribus
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter scribus
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive net.scribus.Scribus
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Scribus is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall Scribus${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installScribus ;;
|
||||
2) uninstallScribus ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installSynfigStudio() {
|
||||
printf "%b\n" "${YELLOW}Installing Synfig Studio...${RC}"
|
||||
if ! command_exists synfigstudio; then
|
||||
case "$PACKAGER" in
|
||||
dnf)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y synfigstudio
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter synfigstudio
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive org.synfig.SynfigStudio
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Synfig Studio is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallSynfigStudio() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling Synfig Studio...${RC}"
|
||||
if command_exists synfigstudio; then
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|dnf|zypper)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" remove -y synfigstudio
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter synfigstudio
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive org.synfig.SynfigStudio
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Synfig Studio is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall Synfig Studio${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installSynfigStudio ;;
|
||||
2) uninstallSynfigStudio ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,52 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installTenacity() {
|
||||
printf "%b\n" "${YELLOW}Installing Tenacity...${RC}"
|
||||
if ! command_exists tenacity; then
|
||||
case "$PACKAGER" in
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm --cleanafter tenacity
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive org.tenacityaudio.Tenacity
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Tenacity is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstallTenacity() {
|
||||
printf "%b\n" "${YELLOW}Uninstalling Tenacity...${RC}"
|
||||
if command_exists tenacity; then
|
||||
case "$PACKAGER" in
|
||||
pacman)
|
||||
"$AUR_HELPER" -R --noconfirm --cleanafter tenacity
|
||||
;;
|
||||
*)
|
||||
"$ESCALATION_TOOL" flatpak uninstall --noninteractive org.tenacityaudio.Tenacity
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}tenacity is not installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
printf "%b\n" "${YELLOW}Do you want to Install or Uninstall Tenacity${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Install${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Uninstall${RC}"
|
||||
printf "%b" "Enter your choice [1-2]: "
|
||||
read -r CHOICE
|
||||
case "$CHOICE" in
|
||||
1) installTenacity ;;
|
||||
2) uninstallTenacity ;;
|
||||
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
main
|
||||
@@ -0,0 +1,41 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
. ../../common-script.sh
|
||||
|
||||
installCursor() {
|
||||
if ! command_exists cursor; then
|
||||
printf "%b\n" "${YELLOW}Installing Cursor...${RC}"
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala)
|
||||
TEMP_DEB="./cursor.deb"
|
||||
|
||||
curl -sSLo "$TEMP_DEB" 'https://api2.cursor.sh/updates/download/golden/linux-x64-deb/cursor/latest'
|
||||
|
||||
"$ESCALATION_TOOL" "$PACKAGER" update
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y "$TEMP_DEB"
|
||||
rm "$TEMP_DEB"
|
||||
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm cursor-bin
|
||||
;;
|
||||
dnf)
|
||||
TEMP_RPM="cursor.rpm"
|
||||
curl -sSLo "$TEMP_RPM" "https://api2.cursor.sh/updates/download/golden/linux-x64-rpm/cursor/latest"
|
||||
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y "$TEMP_RPM"
|
||||
rm "$TEMP_RPM"
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ${PACKAGER}${RC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
printf "%b\n" "${GREEN}Cursor installed successfully.${RC}"
|
||||
else
|
||||
printf "%b\n" "${GREEN}Cursor is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
checkEnv
|
||||
installCursor
|
||||
@@ -27,8 +27,8 @@ installGithubDesktop() {
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y github-desktop
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive io.github.shiftey.Desktop
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -37,6 +37,4 @@ installGithubDesktop() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installGithubDesktop
|
||||
|
||||
@@ -47,6 +47,4 @@ installJetBrainsToolBox() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installJetBrainsToolBox
|
||||
|
||||
@@ -20,7 +20,7 @@ installMeld() {
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
flatpak install -y flathub org.gnome.meld
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive flathub org.gnome.meld
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -29,5 +29,4 @@ installMeld() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installMeld
|
||||
@@ -21,10 +21,7 @@ installNeovim() {
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm neovim ripgrep fzf python-virtualenv luarocks go shellcheck git
|
||||
;;
|
||||
apt-get|nala)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y ripgrep fd-find python3-venv luarocks golang-go shellcheck git
|
||||
curl -sSLo /tmp/nvim.appimage https://github.com/neovim/neovim/releases/latest/download/nvim.appimage
|
||||
chmod u+x /tmp/nvim.appimage
|
||||
"$ESCALATION_TOOL" mv /tmp/nvim.appimage /usr/local/bin/nvim
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y neovim ripgrep fd-find python3-venv luarocks golang shellcheck git
|
||||
;;
|
||||
dnf)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y neovim ripgrep fzf python3-virtualenv luarocks golang ShellCheck git
|
||||
@@ -42,8 +39,8 @@ installNeovim() {
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y neovim ripgrep fzf virtualenv luarocks golang shellcheck git
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive io.neovim.nvim
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
@@ -64,7 +61,6 @@ linkNeovimConfig() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installNeovim
|
||||
cloneNeovim
|
||||
backupNeovimConfig
|
||||
|
||||
@@ -21,5 +21,4 @@ installNgrok() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installNgrok
|
||||
|
||||
@@ -32,8 +32,8 @@ installSublime() {
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y sublime-text
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive com.sublimehq.SublimeText
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -43,5 +43,4 @@ installSublime() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installSublime
|
||||
|
||||
@@ -34,13 +34,9 @@ installVsCode() {
|
||||
eopkg)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -y install vscode
|
||||
;;
|
||||
apk)
|
||||
checkFlatpak
|
||||
flatpak install -y flathub com.visualstudio.code
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive flathub com.visualstudio.code
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -49,6 +45,4 @@ installVsCode() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installVsCode
|
||||
|
||||
@@ -26,13 +26,9 @@ installVsCodium() {
|
||||
printf "%b\n" "[gitlab.com_paulcarroty_vscodium_repo]\nname=download.vscodium.com\nbaseurl=https://download.vscodium.com/rpms/\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/-/raw/master/pub.gpg\nmetadata_expire=1h" | "$ESCALATION_TOOL" tee -a /etc/yum.repos.d/vscodium.repo
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y codium
|
||||
;;
|
||||
apk|xbps-install|eopkg)
|
||||
checkFlatpak
|
||||
flatpak install -y flathub com.vscodium.codium
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive flathub com.vscodium.codium
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -42,6 +38,4 @@ installVsCodium() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installVsCodium
|
||||
|
||||
@@ -27,9 +27,9 @@ installZed() {
|
||||
printf "%b" "Choose an option: "
|
||||
read -r choice
|
||||
case "$choice" in
|
||||
1)
|
||||
checkFlatpak
|
||||
flatpak install -y flathub dev.zed.Zed
|
||||
1)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive flathub dev.zed.Zed
|
||||
;;
|
||||
2)
|
||||
curl -f https://zed.dev/install.sh | sh
|
||||
@@ -51,5 +51,4 @@ installZed() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
clear
|
||||
installZed
|
||||
|
||||
@@ -122,6 +122,5 @@ docker_permission() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
install_components
|
||||
docker_permission
|
||||
|
||||
@@ -1,171 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
. ../common-script.sh
|
||||
. ../common-service-script.sh
|
||||
|
||||
setupDWM() {
|
||||
printf "%b\n" "${YELLOW}Installing DWM-Titus...${RC}"
|
||||
case "$PACKAGER" in # Install pre-Requisites
|
||||
pacman)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm base-devel libx11 libxinerama libxft imlib2 git unzip flameshot nwg-look feh mate-polkit alsa-utils ghostty rofi xclip xarchiver thunar tumbler tldr gvfs thunar-archive-plugin dunst feh nwg-look dex xscreensaver xorg-xprop polybar picom xdg-user-dirs xdg-desktop-portal-gtk pipewire pavucontrol gnome-keyring flatpak
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
makeDWM() {
|
||||
[ ! -d "$HOME/.local/share" ] && mkdir -p "$HOME/.local/share/"
|
||||
if [ ! -d "$HOME/.local/share/dwm-titus" ]; then
|
||||
printf "%b\n" "${YELLOW}DWM-Titus not found, cloning repository...${RC}"
|
||||
cd "$HOME/.local/share/" && git clone https://github.com/ChrisTitusTech/dwm-titus.git # CD to Home directory to install dwm-titus This path can be changed (e.g. to linux-toolbox directory)
|
||||
cd dwm-titus/ # Hardcoded path, maybe not the best.
|
||||
else
|
||||
printf "%b\n" "${GREEN}DWM-Titus directory already exists, replacing..${RC}"
|
||||
cd "$HOME/.local/share/dwm-titus" && git pull
|
||||
fi
|
||||
"$ESCALATION_TOOL" make clean install # Run make clean install
|
||||
}
|
||||
|
||||
install_nerd_font() {
|
||||
# Check to see if the MesloLGS Nerd Font is installed (Change this to whatever font you would like)
|
||||
FONT_NAME="MesloLGS Nerd Font Mono"
|
||||
FONT_DIR="$HOME/.local/share/fonts"
|
||||
FONT_URL="https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Meslo.zip"
|
||||
FONT_INSTALLED=$(fc-list | grep -i "Meslo")
|
||||
|
||||
if [ -n "$FONT_INSTALLED" ]; then
|
||||
printf "%b\n" "${GREEN}Meslo Nerd-fonts are already installed.${RC}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
printf "%b\n" "${YELLOW}Installing Meslo Nerd-fonts${RC}"
|
||||
|
||||
# Create the fonts directory if it doesn't exist
|
||||
if [ ! -d "$FONT_DIR" ]; then
|
||||
mkdir -p "$FONT_DIR" || {
|
||||
printf "%b\n" "${RED}Failed to create directory: $FONT_DIR${RC}"
|
||||
return 1
|
||||
}
|
||||
fi
|
||||
printf "%b\n" "${YELLOW}Installing font '$FONT_NAME'${RC}"
|
||||
# Change this URL to correspond with the correct font
|
||||
FONT_URL="https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Meslo.zip"
|
||||
FONT_DIR="$HOME/.local/share/fonts"
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
curl -sSLo "$TEMP_DIR"/"${FONT_NAME}".zip "$FONT_URL"
|
||||
unzip "$TEMP_DIR"/"${FONT_NAME}".zip -d "$TEMP_DIR"
|
||||
mkdir -p "$FONT_DIR"/"$FONT_NAME"
|
||||
mv "${TEMP_DIR}"/*.ttf "$FONT_DIR"/"$FONT_NAME"
|
||||
fc-cache -fv
|
||||
rm -rf "${TEMP_DIR}"
|
||||
printf "%b\n" "${GREEN}'$FONT_NAME' installed successfully.${RC}"
|
||||
}
|
||||
|
||||
clone_config_folders() {
|
||||
# Ensure the target directory exists
|
||||
[ ! -d ~/.config ] && mkdir -p ~/.config
|
||||
[ ! -d ~/.local/bin ] && mkdir -p ~/.local/bin
|
||||
# Copy scripts to local bin
|
||||
cp -rf "$HOME/.local/share/dwm-titus/scripts/." "$HOME/.local/bin/"
|
||||
|
||||
# Iterate over all directories in config/*
|
||||
for dir in config/*/; do
|
||||
# Extract the directory name
|
||||
dir_name=$(basename "$dir")
|
||||
|
||||
# Clone the directory to ~/.config/
|
||||
if [ -d "$dir" ]; then
|
||||
cp -r "$dir" ~/.config/
|
||||
printf "%b\n" "${GREEN}Cloned $dir_name to ~/.config/${RC}"
|
||||
else
|
||||
printf "%b\n" "${RED}Directory $dir_name does not exist, skipping${RC}"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
configure_backgrounds() {
|
||||
# Set the variable PIC_DIR which stores the path for images
|
||||
PIC_DIR="$HOME/Pictures"
|
||||
|
||||
# Set the variable BG_DIR to the path where backgrounds will be stored
|
||||
BG_DIR="$PIC_DIR/backgrounds"
|
||||
|
||||
# Check if the ~/Pictures directory exists
|
||||
if [ ! -d "$PIC_DIR" ]; then
|
||||
# If it doesn't exist, print an error message and return with a status of 1 (indicating failure)
|
||||
printf "%b\n" "${RED}Pictures directory does not exist${RC}"
|
||||
mkdir ~/Pictures
|
||||
printf "%b\n" "${GREEN}Directory was created in Home folder${RC}"
|
||||
fi
|
||||
|
||||
# Check if the backgrounds directory (BG_DIR) exists
|
||||
if [ ! -d "$BG_DIR" ]; then
|
||||
# If the backgrounds directory doesn't exist, attempt to clone a repository containing backgrounds
|
||||
if ! git clone https://github.com/ChrisTitusTech/nord-background.git "$PIC_DIR/backgrounds"; then
|
||||
# If the git clone command fails, print an error message and return with a status of 1
|
||||
printf "%b\n" "${RED}Failed to clone the repository${RC}"
|
||||
return 1
|
||||
fi
|
||||
# Print a success message indicating that the backgrounds have been downloaded
|
||||
printf "%b\n" "${GREEN}Downloaded desktop backgrounds to $BG_DIR${RC}"
|
||||
else
|
||||
# If the backgrounds directory already exists, print a message indicating that the download is being skipped
|
||||
printf "%b\n" "${GREEN}Path $BG_DIR exists for desktop backgrounds, skipping download of backgrounds${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
setupDisplayManager() {
|
||||
printf "%b\n" "${YELLOW}Setting up Xorg${RC}"
|
||||
case "$PACKAGER" in
|
||||
pacman)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm xorg-xinit xorg-server
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: $PACKAGER${RC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
printf "%b\n" "${GREEN}Xorg installed successfully${RC}"
|
||||
printf "%b\n" "${YELLOW}Setting up Display Manager${RC}"
|
||||
currentdm="none"
|
||||
for dm in gdm sddm lightdm; do
|
||||
if command -v "$dm" >/dev/null 2>&1 || isServiceActive "$dm"; then
|
||||
currentdm="$dm"
|
||||
break
|
||||
fi
|
||||
done
|
||||
printf "%b\n" "${GREEN}Display Manager Setup: $currentdm${RC}"
|
||||
if [ "$currentdm" = "none" ]; then
|
||||
printf "%b\n" "${YELLOW}--------------------------${RC}"
|
||||
DM="sddm"
|
||||
case "$PACKAGER" in
|
||||
pacman)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm "$DM"
|
||||
if [ "$DM" = "lightdm" ]; then
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm lightdm-gtk-greeter
|
||||
elif [ "$DM" = "sddm" ]; then
|
||||
sh -c "$(curl -fsSL https://raw.githubusercontent.com/keyitdev/sddm-astronaut-theme/master/setup.sh)"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: $PACKAGER${RC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
printf "%b\n" "${GREEN}$DM installed successfully${RC}"
|
||||
enableService "$DM"
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
setupDisplayManager
|
||||
setupDWM
|
||||
makeDWM
|
||||
install_nerd_font
|
||||
clone_config_folders
|
||||
configure_backgrounds
|
||||
@@ -91,7 +91,6 @@ setupFastfetchShell() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installFastfetch
|
||||
setupFastfetchConfig
|
||||
setupFastfetchShell
|
||||
|
||||
@@ -35,6 +35,5 @@ setupGhosttyConfig() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installGhostty
|
||||
setupGhosttyConfig
|
||||
|
||||
@@ -14,5 +14,4 @@ themeinstall(){
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
themeinstall
|
||||
|
||||
@@ -35,6 +35,5 @@ setupKittyConfig() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installKitty
|
||||
setupKittyConfig
|
||||
@@ -2,6 +2,16 @@
|
||||
|
||||
. ../common-script.sh
|
||||
|
||||
install_extra() {
|
||||
printf "%b\n" "${YELLOW}Installing the manpage...${RC}"
|
||||
"$ESCALATION_TOOL" mkdir -p /usr/share/man/man1
|
||||
curl 'https://raw.githubusercontent.com/ChrisTitusTech/linutil/refs/heads/main/man/linutil.1' | "$ESCALATION_TOOL" tee '/usr/share/man/man1/linutil.1' > /dev/null
|
||||
printf "%b\n" "${YELLOW}Creating a Desktop Entry...${RC}"
|
||||
"$ESCALATION_TOOL" mkdir -p /usr/share/applications
|
||||
curl 'https://raw.githubusercontent.com/ChrisTitusTech/linutil/refs/heads/main/linutil.desktop' | "$ESCALATION_TOOL" tee /usr/share/applications/linutil.desktop > /dev/null
|
||||
printf "%b\n" "${GREEN}Done.${RC}"
|
||||
}
|
||||
|
||||
installLinutil() {
|
||||
printf "%b\n" "${YELLOW}Installing Linutil...${RC}"
|
||||
case "$PACKAGER" in
|
||||
@@ -35,7 +45,7 @@ installLinutil() {
|
||||
read -r choice
|
||||
case $choice in
|
||||
y | Y)
|
||||
if ! command_exists cargo; then
|
||||
if ! command -v cargo > /dev/null 2>&1; then
|
||||
printf "%b\n" "${YELLOW}Installing rustup...${RC}"
|
||||
case "$PACKAGER" in
|
||||
dnf)
|
||||
@@ -52,11 +62,15 @@ installLinutil() {
|
||||
esac
|
||||
fi
|
||||
rustup default stable
|
||||
# shellcheck disable=SC1091
|
||||
. "$HOME/.cargo/env"
|
||||
if [ -f "$HOME/.cargo/env" ]; then
|
||||
# shellcheck disable=SC1091
|
||||
. "$HOME/.cargo/env"
|
||||
else
|
||||
export PATH="$HOME/.cargo/bin:$PATH"
|
||||
fi
|
||||
cargo install --force linutil_tui
|
||||
printf "%b\n" "${GREEN}Installed successfully.${RC}"
|
||||
installExtra
|
||||
install_extra
|
||||
;;
|
||||
*) printf "%b\n" "${RED}Linutil not installed.${RC}" ;;
|
||||
esac
|
||||
@@ -64,17 +78,5 @@ installLinutil() {
|
||||
esac
|
||||
}
|
||||
|
||||
installExtra() {
|
||||
printf "%b\n" "${YELLOW}Installing the manpage...${RC}"
|
||||
"$ESCALATION_TOOL" mkdir -p /usr/share/man/man1
|
||||
curl 'https://raw.githubusercontent.com/ChrisTitusTech/linutil/refs/heads/main/man/linutil.1' | "$ESCALATION_TOOL" tee '/usr/share/man/man1/linutil.1' > /dev/null
|
||||
printf "%b\n" "${YELLOW}Creating a Desktop Entry...${RC}"
|
||||
"$ESCALATION_TOOL" mkdir -p /usr/share/applications
|
||||
curl 'https://raw.githubusercontent.com/ChrisTitusTech/linutil/refs/heads/main/linutil.desktop' | "$ESCALATION_TOOL" tee /usr/share/applications/linutil.desktop > /dev/null
|
||||
printf "%b\n" "${GREEN}Done.${RC}"
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installLinutil
|
||||
|
||||
@@ -49,6 +49,4 @@ updateLinutil() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
updateLinutil
|
||||
|
||||
@@ -117,7 +117,6 @@ linkConfig() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installDepend
|
||||
cloneMyBash
|
||||
installFont
|
||||
|
||||
@@ -34,6 +34,4 @@ installFreeOffice() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installFreeOffice
|
||||
@@ -9,10 +9,6 @@ installLibreOffice() {
|
||||
apt-get|nala)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y libreoffice-core
|
||||
;;
|
||||
zypper|dnf)
|
||||
checkFlatpak
|
||||
flatpak install -y flathub org.libreoffice.LibreOffice
|
||||
;;
|
||||
pacman)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm libreoffice-fresh
|
||||
;;
|
||||
@@ -26,8 +22,8 @@ installLibreOffice() {
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -y install libreoffice
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak --noninteractive org.libreoffice.LibreOffice
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -36,5 +32,4 @@ installLibreOffice() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installLibreOffice
|
||||
@@ -3,32 +3,26 @@
|
||||
. ../../common-script.sh
|
||||
|
||||
installOnlyOffice() {
|
||||
if ! command_exists org.onlyoffice.desktopeditors && ! command_exists onlyoffice-desktopeditors; then
|
||||
printf "%b\n" "${YELLOW}Installing Only Office..${RC}."
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala)
|
||||
curl -O https://download.onlyoffice.com/install/desktop/editors/linux/onlyoffice-desktopeditors_amd64.deb
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y ./onlyoffice-desktopeditors_amd64.deb
|
||||
"$ESCALATION_TOOL" rm ./onlyoffice-desktopeditors_amd64.deb
|
||||
;;
|
||||
zypper|dnf|xbps-install|eopkg|apk)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak install -y flathub org.onlyoffice.desktopeditors
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm onlyoffice
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Only Office is already installed.${RC}"
|
||||
fi
|
||||
if ! command_exists org.onlyoffice.desktopeditors && ! command_exists onlyoffice-desktopeditors; then
|
||||
printf "%b\n" "${YELLOW}Installing Only Office..${RC}."
|
||||
case "$PACKAGER" in
|
||||
apt-get | nala)
|
||||
curl -O https://download.onlyoffice.com/install/desktop/editors/linux/onlyoffice-desktopeditors_amd64.deb
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y ./onlyoffice-desktopeditors_amd64.deb
|
||||
"$ESCALATION_TOOL" rm ./onlyoffice-desktopeditors_amd64.deb
|
||||
;;
|
||||
pacman)
|
||||
"$AUR_HELPER" -S --needed --noconfirm onlyoffice-bin
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak --noninteractive org.onlyoffice.desktopeditors
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Only Office is already installed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installOnlyOffice
|
||||
installOnlyOffice
|
||||
|
||||
@@ -11,7 +11,7 @@ installWpsOffice() {
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
flatpak install flathub com.wps.Office
|
||||
"$ESCALATION_TOOL" flatpak install --noninteractive flathub com.wps.Office
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -20,6 +20,4 @@ installWpsOffice() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
checkAURHelper
|
||||
installWpsOffice
|
||||
@@ -15,9 +15,13 @@ installEvince() {
|
||||
xbps-install)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -Sy evince
|
||||
;;
|
||||
*)
|
||||
apt-get|nala|zypper|dnf|eopkg)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y evince
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak --noninteractive org.gnome.Evince
|
||||
;;
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Evince is already installed.${RC}"
|
||||
@@ -25,5 +29,4 @@ installEvince() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installEvince
|
||||
@@ -15,9 +15,13 @@ installOkular() {
|
||||
xbps-install)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -Sy okular
|
||||
;;
|
||||
*)
|
||||
apt-get|nala|zypper|dnf|eopkg)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y okular
|
||||
;;
|
||||
*)
|
||||
checkFlatpak
|
||||
"$ESCALATION_TOOL" flatpak --noninteractive org.kde.okular
|
||||
::
|
||||
esac
|
||||
else
|
||||
printf "%b\n" "${GREEN}Okular is already installed.${RC}"
|
||||
@@ -25,5 +29,4 @@ installOkular() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installOkular
|
||||
installOkular
|
||||
|
||||
@@ -19,5 +19,4 @@ installPdfstudio() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installPdfstudio
|
||||
|
||||
@@ -19,5 +19,4 @@ installPdfstudioviewer() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installPdfstudioviewer
|
||||
|
||||
@@ -6,7 +6,7 @@ installPodmanCompose() {
|
||||
if ! command_exists podman-compose; then
|
||||
printf "%b\n" "${YELLOW}Installing Podman Compose...${RC}"
|
||||
case "$PACKAGER" in
|
||||
apt-get|nala|zypper|dnf)
|
||||
apt-get|nala|dnf)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y podman-compose
|
||||
;;
|
||||
pacman)
|
||||
@@ -18,6 +18,18 @@ installPodmanCompose() {
|
||||
xbps-install)
|
||||
"$ESCALATION_TOOL" "$PACKAGER" -Sy podman-compose
|
||||
;;
|
||||
zypper)
|
||||
if [ "$ID" = "opensuse-leap" ]; then
|
||||
"$ESCALATION_TOOL" "$PACKAGER" addrepo "https://download.opensuse.org/repositories/devel:languages:python/$VERSION_ID/devel:languages:python.repo"
|
||||
"$ESCALATION_TOOL" "$PACKAGER" --gpg-auto-import-keys refresh
|
||||
"$ESCALATION_TOOL" "$PACKAGER" --gpg-auto-import-keys install -y podman-compose
|
||||
elif [ "$ID" = "opensuse-tumbleweed" ]; then
|
||||
"$ESCALATION_TOOL" "$PACKAGER" install -y podman-compose
|
||||
else
|
||||
printf "%b\n" "${RED}Unsupported openSUSE distro: ${ID}${RC}"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Unsupported package manager: ${PACKAGER}${RC}"
|
||||
exit 1
|
||||
@@ -29,5 +41,4 @@ installPodmanCompose() {
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installPodmanCompose
|
||||
|
||||
@@ -24,6 +24,33 @@ installPodman() {
|
||||
fi
|
||||
}
|
||||
|
||||
addRegistry() {
|
||||
printf "\n%b\n" "${YELLOW}Do you want to add docker.io to the list of unqualified search registries?${RC}"
|
||||
printf "%b\n" "This allows using short names like 'postgres' instead of 'docker.io/library/postgres'. (y/n)${RC}"
|
||||
read -r answer
|
||||
if echo "$answer" | grep -qE '^[Yy]$'; then
|
||||
printf "%b\n" "${YELLOW}Adding docker.io to registries...${RC}"
|
||||
CONF_DIR="/etc/containers/registries.conf.d"
|
||||
CONF_FILE="$CONF_DIR/10-unqualified-search-registries.conf"
|
||||
REGISTRY_LINE='unqualified-search-registries = ["docker.io"]'
|
||||
|
||||
if [ ! -d "$CONF_DIR" ]; then
|
||||
"$ESCALATION_TOOL" mkdir -p "$CONF_DIR"
|
||||
fi
|
||||
|
||||
if ! grep -Fxq "$REGISTRY_LINE" "$CONF_FILE" 2>/dev/null; then
|
||||
printf "%s\n" "$REGISTRY_LINE" | "$ESCALATION_TOOL" tee -a "$CONF_FILE" > /dev/null
|
||||
printf "%b\n" "${GREEN}Successfully added docker.io to registries.${RC}"
|
||||
else
|
||||
printf "%b\n" "${YELLOW}docker.io already present in registries.${RC}"
|
||||
fi
|
||||
|
||||
printf "%b\n" "${GREEN}Successfully added docker.io to registries.${RC}"
|
||||
else
|
||||
printf "%b\n" "${GREEN}Skipping registry addition.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installPodman
|
||||
addRegistry
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user