{"id":48226361,"url":"https://github.com/ry2x/par_tui","last_synced_at":"2026-04-04T19:23:22.466Z","repository":{"id":335113977,"uuid":"1143601631","full_name":"ry2x/par_tui","owner":"ry2x","description":"A Rust-powered TUI wrapper for safe, selective Arch Linux updates via paru and pacman. ","archived":false,"fork":false,"pushed_at":"2026-01-28T21:53:31.000Z","size":150,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-29T06:28:54.967Z","etag":null,"topics":["archlinux","aur","package-manager","pacman","paru","rust","tui"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ry2x.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-27T19:29:11.000Z","updated_at":"2026-01-28T21:53:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ry2x/par_tui","commit_stats":null,"previous_names":["ry2x/par_tui"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ry2x/par_tui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ry2x%2Fpar_tui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ry2x%2Fpar_tui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ry2x%2Fpar_tui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ry2x%2Fpar_tui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ry2x","download_url":"https://codeload.github.com/ry2x/par_tui/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ry2x%2Fpar_tui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31410336,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["archlinux","aur","package-manager","pacman","paru","rust","tui"],"created_at":"2026-04-04T19:23:22.383Z","updated_at":"2026-04-04T19:23:22.459Z","avatar_url":"https://github.com/ry2x.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# par_tui – Arch Linux Update Manager\n\nA TUI wrapper for safe Arch Linux system updates with selective package exclusion.\n\n## Features\n\n- **Async TUI Loading** – Immediate startup with background package scanning\n- **Real-time Progress** – Animated spinner and status updates during scan\n- **Selective Updates** – Exclude packages temporarily or permanently\n- **Dual Update Modes**\n  - Full system update (paru)\n  - Official repositories only (pacman)\n- **Permanent Exclusions** – Save package ignore list to config\n- **Scan Failure Handling** – Graceful degradation on partial scan failures\n- **Smart Scrolling** – Navigate through large package lists with centered cursor\n\n## Requirements\n\n- `pacman-contrib` (for `checkupdates`)\n- `paru` (optional, for AUR support)\n\n## Install / Build\n\n```bash\n# Clone\ngit clone https://github.com/ry2x/par_tui.git\ncd par_tui\n\n# Build \u0026 run (debug)\ncargo run\n\n# Build release\ncargo build --release\n\n# Install manually\nsudo install -Dm755 target/release/par_tui /usr/bin/par_tui\n\n# For Arch Linux, this project has PKGBUILD\nmakepkg -si\n```\n\n## Usage\n\nSimply run:\n\n```bash\npar_tui\n```\n\nThe app will:\n1. Launch TUI immediately\n2. Scan for updates in background\n3. Display available updates with real-time progress\n4. Allow you to select packages to exclude\n5. Execute the update command with your selections\n\n### Key Bindings\n\n| Key | Action |\n|-----|--------|\n| `j` / `k` / `↑` / `↓` | Navigate package list |\n| `Space` | Toggle temporary ignore for this session |\n| `p` | Toggle permanent ignore (saved to config) |\n| `Enter` | Update entire system (paru) |\n| `o` | Update official repositories only (pacman) |\n| `?` | Show help modal with GitHub link |\n| `q` | Quit |\n\n## Configuration\n\nConfig file: `~/.config/par_tui/config.toml`\n\n```toml\n[exclude]\n# Always ignored packages\npermanent = [\"my-custom-kernel-bin\", \"experimental-driver-git\"]\n\n[behavior]\n# Warn if AUR updates are attempted while official repos are stale (\u003e3 days)\nwarn_stale_system = true\n\n# Arguments always passed to pacman / paru\nextra_args = []\n```\n\n### Permanent Exclusions\n\nPress `p` on any package in the TUI to toggle permanent exclusion. Changes are saved immediately to `config.toml`.\n\n## Notes\n\n- The TUI uses **viewport scrolling** – only visible items are rendered for performance\n- **Retry mechanism**: `checkupdates` will retry up to 3 times on failure\n- **Thread safety**: Background scan thread is properly cleaned up on quit\n- Configuration directory is created automatically on first run\n\n## Architecture\n\nBuilt with strict layer separation for maintainability:\n\n- `models/` – Pure data structures\n- `io/` – System interactions (commands, files, terminal)\n- `parser/` – String → Model transformation\n- `core/` – Business logic (filtering, planning)\n- `ui/` – Presentation layer (TUI rendering)\n\nSee [`.github/instructions/directory.instructions.md`](.github/instructions/directory.instructions.md) for details.\n\n## Contributions\n\n**Contributions are welcome! Feel free to open issues or PRs on GitHub.**\n\n## Tech\n\n- ratatui + crossterm (TUI framework)\n- serde + toml (configuration)\n- std::thread + mpsc (async scanning)\n\n## License\n\nLicensed under either of:\n\n- MIT License\n- Apache License, Version 2.0\n\nat your option.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fry2x%2Fpar_tui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fry2x%2Fpar_tui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fry2x%2Fpar_tui/lists"}